From 9d25fad40743fe259867bc81c152591683c8fe73 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 20 Apr 2023 03:52:00 +1000 Subject: [PATCH 01/51] Cutscene Documentation (z_eventmgr.c OK) (#1164) * begin cutscene docs * more docs * more docs * z_eventmgr.c OK Co-authored-by: Thar0 * cutscene camera * commands WIP * more docs * merge master * csId, oof * more cleanup * more docs, csCam * more cleanup * more docs * more * cleanup functions.h * better misc cmd docs * apply discord discussions * small adjustment * more cleanup * more docs * more cleanup * more cs cam docs * small fix * cmd cleanup * small cleanup * better match, thanks anon * remove last return * PR suggestions, small cleanup * next PR review * rm internal funcs from functions.h * more PR * add comment * csCam interp typedef handler * cleanup, scene cmd * missed an enum use * ActorCutscene -> CutsceneManager, PR Suggestions * more PR Suggestions * more actorCutscene cleanup * R_USE_DEBUG_CUTSCENE * more small docs * move functions to cutscene.h * PlayerCsId * fix bss * missed some function headers * more scene cleanup * more scene cleanup * missed one * CS_SPAWN_FLAGS * wrong usage of macro * more cleanup * name last cs transition types * IsNext bool * update namefixer * fix namefixer * more cleanup * add comment * fixed enums for motion blur * consistent cutscene lists * cutscene entry func consistent * PR Suggestion * fig review * fix additionalCsId name in actor * more pr review * bss --------- Co-authored-by: Thar0 Co-authored-by: angie --- include/functions.h | 75 +- include/regs.h | 3 + include/variables.h | 30 +- include/z64.h | 48 +- include/z64actor.h | 2 +- include/z64camera.h | 2 +- include/z64cutscene.h | 983 +++++++++-- include/z64cutscene_commands.h | 546 ++++--- include/z64player.h | 6 +- include/z64save.h | 12 +- include/z64scene.h | 34 +- include/z64subs.h | 8 +- spec | 5 +- src/audio/code_8019AF00.c | 2 +- src/boot_O2_g3/idle.c | 1 + src/boot_O2_g3/yaz0.c | 1 - src/code/cutscene_camera.c | 380 +++++ src/code/db_camera.c | 43 - src/code/z_actor.c | 26 +- src/code/z_camera_data.inc.c | 50 +- src/code/z_collision_check.c | 1 - src/code/z_demo.c | 1431 +++++++++-------- src/code/z_env_flags.c | 18 +- src/code/z_eventmgr.c | 552 ++++++- src/code/z_kaleido_setup.c | 2 +- src/code/z_parameter.c | 6 +- src/code/z_play.c | 96 +- src/code/z_player_lib.c | 4 +- src/code/z_scene.c | 22 +- src/code/z_sram_NES.c | 17 +- src/code/z_sub_s.c | 43 +- .../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 +- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 4 +- .../ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c | 12 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 8 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 30 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h | 4 +- .../z_bg_dblue_waterfall.c | 14 +- .../z_bg_dblue_waterfall.h | 2 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 8 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 16 +- .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 10 +- .../actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c | 10 +- .../actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h | 2 +- .../ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c | 10 +- .../ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c | 14 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c | 19 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h | 2 +- .../z_bg_hakugin_bombwall.c | 10 +- .../z_bg_hakugin_elvpole.c | 8 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 86 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h | 12 +- .../z_bg_hakugin_switch.c | 40 +- .../z_bg_hakugin_switch.h | 6 +- .../ovl_Bg_Ikana_Block/z_bg_ikana_block.c | 8 +- .../z_bg_ikana_bombwall.c | 14 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 12 +- .../z_bg_ikana_rotaryroom.c | 20 +- .../ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c | 12 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 8 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.c | 14 +- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c | 20 +- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h | 2 +- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c | 16 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 24 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.h | 2 +- .../ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c | 10 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c | 6 +- .../ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c | 10 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 10 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.c | 4 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.h | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 8 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 10 +- .../actors/ovl_Bg_Open_Spot/z_bg_open_spot.c | 10 +- .../ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c | 14 +- .../ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 14 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 14 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 23 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 28 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 10 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 10 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.c | 14 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.h | 2 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.c | 88 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.h | 4 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 20 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h | 2 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 20 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.h | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 22 +- src/overlays/actors/ovl_Dm_An/z_dm_an.h | 2 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 20 +- .../actors/ovl_Dm_Char00/z_dm_char00.c | 104 +- .../actors/ovl_Dm_Char00/z_dm_char00.h | 2 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 27 +- .../actors/ovl_Dm_Char02/z_dm_char02.c | 20 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 30 +- .../actors/ovl_Dm_Char04/z_dm_char04.c | 20 +- .../actors/ovl_Dm_Char04/z_dm_char04.h | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 163 +- .../actors/ovl_Dm_Char06/z_dm_char06.c | 20 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 82 +- .../actors/ovl_Dm_Char08/z_dm_char08.h | 2 +- .../actors/ovl_Dm_Char09/z_dm_char09.c | 22 +- .../actors/ovl_Dm_Char09/z_dm_char09.h | 2 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 22 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h | 2 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 20 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h | 2 +- .../actors/ovl_Dm_Opstage/z_dm_opstage.c | 16 +- .../actors/ovl_Dm_Opstage/z_dm_opstage.h | 2 +- .../actors/ovl_Dm_Ravine/z_dm_ravine.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 150 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h | 2 +- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 40 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 18 +- src/overlays/actors/ovl_Door_Ana/z_door_ana.c | 10 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 30 +- .../actors/ovl_Door_Shutter/z_door_shutter.h | 2 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 58 +- .../actors/ovl_Door_Warp1/z_door_warp1.h | 2 +- .../actors/ovl_Eff_Change/z_eff_change.c | 12 +- .../z_eff_kamejima_wave.c | 12 +- .../actors/ovl_Eff_Lastday/z_eff_lastday.c | 48 +- .../actors/ovl_Eff_Lastday/z_eff_lastday.h | 2 +- .../actors/ovl_Eff_Zoraband/z_eff_zoraband.c | 6 +- src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c | 18 +- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c | 20 +- src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c | 18 +- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c | 20 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 28 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 28 +- .../ovl_En_Akindonuts/z_en_akindonuts.h | 2 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 35 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 12 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 35 +- .../actors/ovl_En_Aob_01/z_en_aob_01.h | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 17 +- src/overlays/actors/ovl_En_Az/z_en_az.h | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 4 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 32 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.h | 2 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 20 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 34 +- .../actors/ovl_En_Bigslime/z_en_bigslime.h | 2 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 2 +- .../actors/ovl_En_Bji_01/z_en_bji_01.h | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 90 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h | 76 +- .../actors/ovl_En_Bombal/z_en_bombal.c | 16 +- .../actors/ovl_En_Bombal/z_en_bombal.h | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 18 +- .../actors/ovl_En_Bombers2/z_en_bombers2.h | 2 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 44 +- .../actors/ovl_En_Bomjima/z_en_bomjima.h | 4 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 40 +- src/overlays/actors/ovl_En_Box/z_en_box.h | 4 +- src/overlays/actors/ovl_En_Cha/z_en_cha.c | 8 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 6 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 52 +- src/overlays/actors/ovl_En_Dai/z_en_dai.h | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 36 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 8 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 14 +- src/overlays/actors/ovl_En_Dno/z_en_dno.h | 2 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 31 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.h | 2 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 24 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.h | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 32 +- src/overlays/actors/ovl_En_Dns/z_en_dns.h | 5 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 22 +- .../actors/ovl_En_Dragon/z_en_dragon.h | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 10 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 77 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 39 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 12 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 87 +- src/overlays/actors/ovl_En_Fall2/z_en_fall2.c | 16 +- src/overlays/actors/ovl_En_Fall2/z_en_fall2.h | 4 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 20 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.h | 2 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 19 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 4 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 126 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.h | 10 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 4 +- .../actors/ovl_En_Gakufu/z_en_gakufu.c | 8 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 74 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 4 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 23 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.h | 2 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 31 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.h | 12 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 66 +- src/overlays/actors/ovl_En_Geg/z_en_geg.h | 6 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 28 +- src/overlays/actors/ovl_En_Gg/z_en_gg.h | 4 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 14 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.h | 2 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 161 +- src/overlays/actors/ovl_En_Giant/z_en_giant.h | 4 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 52 +- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 4 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 67 +- src/overlays/actors/ovl_En_Gm/z_en_gm.h | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 90 +- src/overlays/actors/ovl_En_Go/z_en_go.h | 4 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 17 +- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 2 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 6 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 67 +- src/overlays/actors/ovl_En_Hg/z_en_hg.h | 4 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 22 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.h | 2 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 14 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 2 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 274 ++-- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 6 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 2 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 40 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 16 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 14 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 74 +- src/overlays/actors/ovl_En_Jg/z_en_jg.h | 4 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 20 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 42 +- src/overlays/actors/ovl_En_Js/z_en_js.h | 4 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 48 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 110 +- .../actors/ovl_En_Kakasi/z_en_kakasi.h | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 4 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 55 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 4 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 24 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 2 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 11 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 32 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 34 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 20 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 14 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 50 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 60 +- src/overlays/actors/ovl_En_Mk/z_en_mk.h | 2 +- src/overlays/actors/ovl_En_Mm/z_en_mm.c | 10 +- .../actors/ovl_En_Mt_tag/z_en_mt_tag.c | 20 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 36 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 16 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 52 +- src/overlays/actors/ovl_En_Osk/z_en_osk.h | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 36 +- src/overlays/actors/ovl_En_Osn/z_en_osn.h | 4 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 104 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.h | 10 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 22 +- src/overlays/actors/ovl_En_Ot/z_en_ot.h | 2 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 46 +- src/overlays/actors/ovl_En_Owl/z_en_owl.h | 4 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 53 +- .../actors/ovl_En_Pamera/z_en_pamera.h | 4 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 20 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.h | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 52 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 40 +- .../actors/ovl_En_Railgibud/z_en_railgibud.h | 4 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 10 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 50 +- src/overlays/actors/ovl_En_Rz/z_en_rz.h | 6 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 28 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.h | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 58 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.h | 2 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 2 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 114 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.h | 8 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 84 +- .../actors/ovl_En_Suttari/z_en_suttari.h | 4 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 10 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 68 +- src/overlays/actors/ovl_En_Test3/z_en_test3.h | 2 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 98 +- src/overlays/actors/ovl_En_Test4/z_en_test4.h | 2 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 232 +-- src/overlays/actors/ovl_En_Test6/z_en_test6.h | 4 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 58 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 46 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 24 +- src/overlays/actors/ovl_En_Tk/z_en_tk.h | 4 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 48 +- src/overlays/actors/ovl_En_Toto/z_en_toto.h | 4 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 158 +- src/overlays/actors/ovl_En_Trt/z_en_trt.h | 10 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 30 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.h | 2 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 50 +- src/overlays/actors/ovl_En_Tru/z_en_tru.h | 2 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 24 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 24 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 21 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 22 +- .../actors/ovl_En_Wood02/z_en_wood02.c | 2 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 46 +- src/overlays/actors/ovl_En_Yb/z_en_yb.h | 4 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 82 +- src/overlays/actors/ovl_En_Zob/z_en_zob.h | 6 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 38 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 70 +- src/overlays/actors/ovl_En_Zog/z_en_zog.h | 6 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 63 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.h | 2 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 42 +- src/overlays/actors/ovl_En_Zos/z_en_zos.h | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 25 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 52 +- src/overlays/actors/ovl_En_Zov/z_en_zov.h | 6 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 4 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 26 +- .../ovl_Obj_Bigicicle/z_obj_bigicicle.c | 12 +- .../ovl_Obj_Blockstop/z_obj_blockstop.c | 10 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c | 22 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h | 2 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 12 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 16 +- .../ovl_Obj_Danpeilift/z_obj_danpeilift.c | 2 +- src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c | 22 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 10 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 6 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 14 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h | 2 +- .../actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c | 34 +- .../actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h | 4 +- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c | 12 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 24 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.h | 4 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 14 +- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 14 +- .../actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c | 2 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 12 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 14 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 8 +- .../ovl_Obj_Makekinsuta/z_obj_makekinsuta.c | 10 +- .../actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c | 20 +- src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c | 6 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 30 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.h | 2 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 10 +- .../actors/ovl_Obj_Purify/z_obj_purify.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 10 +- .../ovl_Obj_Roomtimer/z_obj_roomtimer.c | 10 +- .../ovl_Obj_Skateblock/z_obj_skateblock.c | 4 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 26 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 10 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 8 +- .../actors/ovl_Obj_Swprize/z_obj_swprize.c | 8 +- .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 13 +- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c | 6 +- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 10 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 48 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 44 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.c | 16 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.h | 4 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 8 +- .../actors/ovl_Obj_Wturn/z_obj_wturn.c | 10 +- .../ovl_Obj_Y2shutter/z_obj_y2shutter.c | 12 +- .../actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c | 2 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 10 +- src/overlays/actors/ovl_TG_Sw/z_tg_sw.c | 2 +- .../gamestates/ovl_opening/z_opening.c | 4 +- src/overlays/gamestates/ovl_select/z_select.c | 118 +- tools/disasm/files.txt | 6 +- tools/disasm/functions.txt | 168 +- tools/disasm/variables.txt | 60 +- tools/namefixer.py | 70 +- tools/sizes/code_functions.csv | 180 +-- tools/weekeventregconvert.py | 8 +- 390 files changed, 7327 insertions(+), 5600 deletions(-) create mode 100644 src/code/cutscene_camera.c delete mode 100644 src/code/db_camera.c diff --git a/include/functions.h b/include/functions.h index 91fa5d29d..690558f38 100644 --- a/include/functions.h +++ b/include/functions.h @@ -722,7 +722,7 @@ void Actor_KillAllWithMissingObject(PlayState* play, ActorContext* actorCtx); void func_800BA798(PlayState* play, ActorContext* actorCtx); void Actor_CleanupContext(ActorContext* actorCtx, PlayState* play); Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params); -Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s32 params, u32 cutscene, u32 halfDaysBits, Actor* parent); +Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s32 params, u32 csId, u32 halfDaysBits, Actor* parent); Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params); void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx); void Enemy_StartFinishingBlow(PlayState* play, Actor* actor); @@ -1064,23 +1064,6 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* torsoRot, Vec3f focusPos); void SaveContext_Init(void); -void Cutscene_Init(PlayState* play, CutsceneContext* csCtx); -void Cutscene_Start(PlayState* play, CutsceneContext* csCtx); -void Cutscene_End(PlayState* play, CutsceneContext* csCtx); -void Cutscene_Update1(PlayState* play, CutsceneContext* csCtx); -void Cutscene_Update2(PlayState* play, CutsceneContext* csCtx); -void func_800EDBE0(PlayState* play); -void func_800EDDB0(PlayState* play); -void Cutscene_LoadCutsceneData(PlayState* play, u8 csIndex); -void Cutscene_ActorTranslate(Actor* actor, PlayState* play, s32 actorActionIndex); -void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 actorActionIndex); -void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex); -void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex); -s32 Cutscene_GetSceneLayer(PlayState* play); -s32 Cutscene_GetActorActionIndex(PlayState* play, u16 actorActionCmd); -s32 Cutscene_CheckActorAction(PlayState* play, u16 actorActionCmd); -u8 Cutscene_IsPlaying(PlayState* play); - void GetItem_Draw(PlayState* play, s16 drawId); void SoundSource_InitAll(PlayState* play); @@ -1090,35 +1073,6 @@ void SoundSource_PlaySfxEachFrameAtFixedWorldPos(PlayState* play, Vec3f* worldPo u16 QuestHint_GetTatlTextId(PlayState* play); u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet); -void EnvFlags_UnsetAll(PlayState* play); -void EnvFlags_Set(PlayState* play, s16 flag); -void EnvFlags_Unset(PlayState* play, s16 flag); -s32 EnvFlags_Get(PlayState* play, s16 flag); -s16 func_800F1460(s16 param_1); -ActorCutscene* ActorCutscene_GetCutsceneImpl(s16 index); -void ActorCutscene_Init(PlayState* play, ActorCutscene* cutscenes, s32 num); -void func_800F15D8(Camera* camera); -void ActorCutscene_ClearWaiting(void); -// void ActorCutscene_ClearNextCutscenes(void); -// void ActorCutscene_MarkNextCutscenes(void); -// void ActorCutscene_End(void); -s16 ActorCutscene_Update(void); -void ActorCutscene_SetIntentToPlay(s16 index); -s16 ActorCutscene_GetCanPlayNext(s16 index); -s16 ActorCutscene_StartAndSetUnkLinkFields(s16 index, Actor* actor); -s16 ActorCutscene_StartAndSetFlag(s16 index, Actor* actor); -s16 ActorCutscene_Start(s16 index, Actor* actor); -s16 ActorCutscene_Stop(s16 index); -s16 ActorCutscene_GetCurrentIndex(void); -ActorCutscene* ActorCutscene_GetCutscene(s16 index); -s16 ActorCutscene_GetAdditionalCutscene(s16 index); -s16 ActorCutscene_GetLength(s16 index); -s32 func_800F2138(s32 arg0); -s32 func_800F2178(s16 arg0); -s16 ActorCutscene_GetCurrentSubCamId(s16 index); -s16 func_800F21CC(void); -s32 func_800F22C4(s16 param_1, Actor* actor); -void ActorCutscene_SetReturnCamera(s16 index); s32 func_800F3940(PlayState* play); // void func_800F39B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); @@ -1776,8 +1730,8 @@ void Scene_Command09(PlayState* play, SceneCmd* cmd); void Scene_CommandSoundSettings(PlayState* play, SceneCmd* cmd); void Scene_CommandEchoSetting(PlayState* play, SceneCmd* cmd); void Scene_CommandAltHeaderList(PlayState* play, SceneCmd* cmd); +void Scene_CommandCutsceneScriptList(PlayState* play, SceneCmd* cmd); void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd); -void Scene_CommandActorCutsceneList(PlayState* play, SceneCmd* cmd); void Scene_CommandMiniMap(PlayState* play, SceneCmd* cmd); void Scene_Command1D(PlayState* play, SceneCmd* cmd); void Scene_CommandMiniMapCompassInfo(PlayState* play, SceneCmd* cmd); @@ -1957,27 +1911,6 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId); void func_8015E7EC(PlayState* play, UNK_PTR puParm2); // void func_8015F8A8(UNK_TYPE4 ctxt); -// void func_80161180(void); -s32 func_8016119C(Camera* camera, DbCameraUnkStruct* arg1); -// void func_8016122C(void); -// void func_801612B8(void); -s32 func_80161998(u8* cmd, DbCameraUnkStruct* arg1); -// s32 func_80161BAC(void); -void func_80161BE0(s16 arg0); -void func_80161C0C(void); -// void func_80161C20(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_80161E4C(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_801620CC(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_8016237C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE4 param_6); -// void func_801623E4(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_801624EC(void); -// void func_8016253C(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_801629BC(void); -// void func_80162A50(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_80162FF8(void); -// void func_801631DC(void); -// void func_80163334(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_80163660(void); void* KaleidoManager_FaultAddrConv(void* address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl); @@ -2070,7 +2003,7 @@ s32 FrameAdvance_IsEnabled(GameState* thisx); s32 func_8016A02C(GameState* thisx, Actor* actor, s16* yaw); s32 Play_IsUnderwater(PlayState* this, Vec3f* pos); s32 Play_IsDebugCamEnabled(void); -void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId); +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); @@ -2560,7 +2493,7 @@ OcarinaStaff* AudioOcarina_GetRecordingStaff(void); OcarinaStaff* AudioOcarina_GetPlayingStaff(void); OcarinaStaff* AudioOcarina_GetPlaybackStaff(void); void AudioOcarina_TerminaWallGenerateNotes(void); -void AudioOcarina_PlayLongScarecrowAfterCredits(void); +void AudioOcarina_PlayLongScarecrowSong(void); void Audio_Update(void); void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex); diff --git a/include/regs.h b/include/regs.h index 8de13fb66..112a00239 100644 --- a/include/regs.h +++ b/include/regs.h @@ -166,4 +166,7 @@ extern RegEditor* gRegEditor; #define R_ITEM_ICON_WIDTH(i) VREG(76 + i) #define R_ITEM_BTN_WIDTH(i) VREG(80 + i) +// Name inferred from OoT. Set to true to manually set play->csCtx.script +#define R_USE_DEBUG_CUTSCENE dREG(95) + #endif diff --git a/include/variables.h b/include/variables.h index b90fadcc6..f3d668b2b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -431,19 +431,9 @@ extern EffectShieldParticleInit shieldParticleInitWood; // extern UNK_TYPE2 D_801BB0FC; // extern UNK_TYPE1 D_801BB100; -extern u8 D_801BB12C; +extern u8 gOpeningEntranceIndex; -// extern UNK_TYPE1 D_801BC41E; -extern ActorCutscene actorCutscenesGlobalCutscenes[8]; -extern s16 actorCutsceneCurrent; -extern s16 actorCutsceneCurrentLength; -extern s16 actorCutsceneEnding; -extern s16 actorCutsceneCurrentCamera; -extern Actor* actorCutsceneCurrentCutsceneActor; -// extern UNK_TYPE4 actorCutsceneStartMethod; -extern PlayState* actorCutscenesPlayState; -extern s16 actorCutsceneReturnCamera; -extern s16 D_801BD8C6; +extern ActorCutscene sGlobalCutsceneList[8]; extern GameStateOverlay gGameStateOverlayTable[]; extern s32 gGraphNumGameStates; // extern UNK_TYPE2 D_801BDA70; @@ -764,7 +754,7 @@ extern s32 gDbgCamEnabled; // extern UNK_TYPE2 sQuakeIndex; // extern UNK_TYPE2 sIsCameraUnderwater; extern Input* D_801D0D60; -// extern UNK_TYPE2 D_801D0D64; +// extern UNK_TYPE2 sPlayerCsIdToCsCamId; // extern UNK_TYPE1 D_801D0D7A; // extern UNK_TYPE1 D_801D0D80; // extern UNK_TYPE1 D_801D11F4; @@ -2335,14 +2325,14 @@ extern SaveContext gSaveContext; // extern UNK_TYPE1 D_801F48C8; extern UNK_TYPE D_801F4DDC; -extern u8 D_801F4DE0; -extern s16 D_801F4DE2; +extern u8 gDisablePlayerCsModeStartPos; +extern s16 gDungeonBossWarpSceneId; -extern ActorCutscene* actorCutscenes; -extern s16 actorCutsceneCount; -extern u8 actorCutsceneWaiting[16]; +extern ActorCutscene* sSceneCutsceneList; +extern s16 sSceneCutsceneCount; +extern u8 sWaitingCutsceneList[16]; // extern UNK_TYPE1 D_801F4E08; -extern u8 actorCutsceneNextCutscenes[16]; +extern u8 sNextCutsceneList[16]; // extern UNK_TYPE1 D_801F4E20; extern u8 D_801F4E30; // extern UNK_TYPE1 D_801F4E31; @@ -2420,7 +2410,7 @@ extern s16 D_801F4E7A; // extern UNK_TYPE1 D_801F6B1E; // extern UNK_TYPE1 D_801F6B20; // extern UNK_TYPE1 D_801F6B22; -// extern UNK_TYPE4 D_801F6B50; +// extern UNK_TYPE4 sCurCsCamera; // extern UNK_TYPE1 D_801F6B58; extern void (*sKaleidoScopeUpdateFunc)(PlayState* play); extern void (*sKaleidoScopeDrawFunc)(PlayState* play); diff --git a/include/z64.h b/include/z64.h index f496f02f1..50405690f 100644 --- a/include/z64.h +++ b/include/z64.h @@ -87,19 +87,6 @@ typedef enum { /* 4 */ EQUIP_SLOT_A } EquipSlot; -typedef struct { - /* 0x0 */ s16 priority; // Lower means higher priority. -1 means it ignores priority - /* 0x2 */ s16 length; - /* 0x4 */ s16 csCamSceneDataId; // Index of CsCameraEntry to use. Negative indices use sGlobalCamDataSettings. Indices 0 and above use CsCameraEntry from scene - /* 0x6 */ s16 unk6; - /* 0x8 */ s16 additionalCutscene; - /* 0xA */ u8 sound; - /* 0xB */ u8 unkB; - /* 0xC */ s16 unkC; - /* 0xE */ u8 unkE; - /* 0xF */ u8 letterboxSize; -} ActorCutscene; // size = 0x10 - typedef struct { /* 0x0 */ s8 segment; /* 0x2 */ s16 type; @@ -647,7 +634,7 @@ typedef struct PlayState { /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1); /* 0x18794 */ PlayerItemAction (*unk_18794)(struct PlayState* play, Player* player, ItemId itemId); /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode); - /* 0x1879C */ s16 playerActorCsIds[10]; + /* 0x1879C */ s16 playerCsIds[PLAYER_CS_ID_MAX]; /* 0x187B0 */ MtxF viewProjectionMtxF; /* 0x187F0 */ Vec3f projectionMtxFDiagonal; /* 0x187FC */ MtxF billboardMtxF; @@ -678,7 +665,7 @@ typedef struct PlayState { /* 0x1887F */ u8 transitionType; // fadeTransition /* 0x18880 */ u8 unk_18880; /* 0x18884 */ CollisionCheckContext colChkCtx; - /* 0x18B20 */ u16 envFlags[20]; + /* 0x18B20 */ u16 cutsceneFlags[20]; /* 0x18B48 */ u8 curSpawn; /* 0x18B49 */ u8 unk_18B49; /* 0x18B4A */ u8 transitionMode; @@ -797,35 +784,4 @@ enum fram_mode { FRAM_MODE_STATUS }; -typedef struct { - /* 0x00 */ UNK_TYPE1 unk_00[0x14]; - /* 0x14 */ s16 unk_14; - /* 0x16 */ s16 unk_16; - /* 0x18 */ s16 unk_18; - /* 0x1A */ UNK_TYPE1 unk_1A[0x3]; - /* 0x0C */ u8 unk_1D; - /* 0x1E */ UNK_TYPE1 unk_1E[0xC]; - /* 0x2A */ s16 unk_2A; - /* 0x1E */ UNK_TYPE1 unk_2C[0x1]; - /* 0x2D */ u8 unk_2D; - /* 0x2E */ UNK_TYPE1 unk_2E[2]; -} DbCameraUnkSubStruct; // size = 0x30 - -typedef struct { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s16 unk_02; - /* 0x04 */ s16 unk_04; - /* 0x06 */ s16 unk_06; - /* 0x08 */ s16 unk_08; - /* 0x0A */ s16 unk_0A; - /* 0x0C */ s16 unk_0C; - /* 0x0E */ UNK_TYPE1 unk_0E[0x02]; - /* 0x10 */ DbCameraUnkSubStruct unk_10; - /* 0x40 */ DbCameraUnkSubStruct unk_40; - /* 0x70 */ UNK_PTR unk_70; - /* 0x74 */ UNK_PTR unk_74; - /* 0x78 */ UNK_PTR unk_78; - /* 0x7C */ Camera* camera; -} DbCameraUnkStruct; // size = 0x80 - #endif diff --git a/include/z64actor.h b/include/z64actor.h index bfce67188..7cc4275ac 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -174,7 +174,7 @@ typedef struct Actor { /* 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 - /* 0x038 */ s8 cutscene; + /* 0x038 */ s8 csId; // ActorCutscene index, see `CutsceneId` /* 0x039 */ u8 audioFlags; // Another set of flags? Seems related to sfx or bgm /* 0x03C */ PosRot focus; // Target reticle focuses on this position. For player this represents head pos and rot /* 0x050 */ u16 sfxId; // Id of sound effect to play. Plays when value is set, then is cleared the following update cycle diff --git a/include/z64camera.h b/include/z64camera.h index 9c101bf73..3205496e7 100644 --- a/include/z64camera.h +++ b/include/z64camera.h @@ -1319,7 +1319,7 @@ typedef struct { /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; - /* 0x18 */ VecSph unk_18; // sp18-1C-20--24-26-28 // CutsceneCameraPoint? + /* 0x18 */ VecSph unk_18; /* 0x20 */ s16 unk_20; /* 0x22 */ s16 timer; } Demo4ReadWriteData; // size = 0x24 diff --git a/include/z64cutscene.h b/include/z64cutscene.h index f4cc10802..1fc32be28 100644 --- a/include/z64cutscene.h +++ b/include/z64cutscene.h @@ -4,158 +4,575 @@ #include "ultra64.h" #include "unk.h" -typedef struct { - /* 0x0 */ s8 continueFlag; - /* 0x1 */ s8 cameraRoll; - /* 0x2 */ u16 nextPointFrame; - /* 0x4 */ f32 viewAngle; // in degrees - /* 0x8 */ Vec3s pos; -} CutsceneCameraPoint; // size = 0x10 -typedef struct { - /* 0x00 */ Vec3f at; - /* 0x0C */ Vec3f eye; - /* 0x18 */ s16 roll; - /* 0x1A */ s16 fov; -} CutsceneCameraAngle; // size = 0x1C - -typedef struct { - /* 0x0 */ CutsceneCameraPoint* atPoints; - /* 0x4 */ CutsceneCameraPoint* eyePoints; - /* 0x8 */ s16 relativeToPlayer; -} CutsceneCameraMove; // size = 0xC - -typedef struct { - /* 0x00 */ u16 action; // "dousa" - /* 0x02 */ u16 startFrame; - /* 0x04 */ u16 endFrame; - union { - /* 0x06 */ Vec3s rot; - /* 0x06 */ Vec3us urot; +typedef union { + struct { + /* 0x00 */ u16 id; // "dousa" + /* 0x02 */ u16 startFrame; + /* 0x04 */ u16 endFrame; + /* 0x06 */ Vec3us rot; + /* 0x0C */ Vec3i startPos; + /* 0x18 */ Vec3i endPos; + /* 0x24 */ Vec3f normal; }; - /* 0x0C */ Vec3i startPos; - /* 0x18 */ Vec3i endPos; - /* 0x24 */ Vec3f normal; -} CsCmdActorAction; // size = 0x30 + s32 _words[12]; +} CsCmdActorCue; // size = 0x30 -typedef struct { - /* 0x0 */ u16 base; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u16 unk_06; -} CsCmdBase; // size = 0x8 +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[2]; +} CsCmdMisc; // size = 0x30 -typedef struct { - /* 0x0 */ u16 unk0; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u8 hour; - /* 0x7 */ u8 minute; - /* 0x8 */ UNK_TYPE1 unk_08[0x04]; -} CsCmdDayTime; // size = 0xC +typedef union { + struct { + /* 0x0 */ u16 unused0; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + /* 0x6 */ u8 hour; + /* 0x7 */ u8 minute; + }; + s32 _words[3]; +} CsCmdTime; // size = 0xC -typedef struct { - /* 0x0 */ u16 setting; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u16 unk_06; -} CsCmdEnvLighting; // size = 0x8 +typedef union { + struct { + /* 0x0 */ u16 settingPlusOne; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdLightSetting; // size = 0x8 -typedef struct { - /* 0x0 */ u16 sequence; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u16 unk_06; -} CsCmdSequenceChange; // size = 0x8 +typedef union { + struct { + /* 0x0 */ u16 seqIdPlusOne; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[2]; +} CsCmdStartSeq; // size = 0x8 -typedef struct { - /* 0x0 */ u16 type; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u16 unk_06; - /* 0x8 */ u32 unk_08; -} CsCmdSequenceFade; // size = 0xC +typedef union { + struct { + /* 0x0 */ u16 seqIdPlusOne; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[2]; +} CsCmdStopSeq; // size = 0x8 -typedef struct { - /* 0x0 */ u16 base; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u16 type; - /* 0x8 */ u16 textId1; - /* 0xA */ u16 textId2; -} CsCmdTextbox; // size = 0xC +typedef union { + struct { + /* 0x0 */ u16 seqPlayer; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[3]; +} CsCmdFadeOutSeq; // size = 0xC typedef enum { - /* -1 */ CS_TEXTBOX_TYPE_NONE = -1, - /* 0 */ CS_TEXTBOX_TYPE_DEFAULT, - /* 1 */ CS_TEXTBOX_TYPE_1, - /* 2 */ CS_TEXTBOX_TYPE_LEARN_SONG, - /* 3 */ CS_TEXTBOX_TYPE_3, - /* 4 */ CS_TEXTBOX_TYPE_BOSSES_REMAINS, - /* 5 */ CS_TEXTBOX_TYPE_ALL_NORMAL_MASKS -} CutsceneTextboxType; + /* 1 */ CS_FADE_OUT_BGM_MAIN = 1, + /* 2 */ CS_FADE_OUT_FANFARE +} CutsceneFadeOutSeqPlayer; -typedef struct { - /* 0x0 */ u16 type; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ u8 intensity; - /* 0x7 */ u8 decayTimer; - /* 0x8 */ u8 decayStep; - /* 0x9 */ UNK_TYPE1 pad9[0x3]; +typedef union { + struct { + /* 0x0 */ u16 unused0; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdStartAmbience; // size = 0x8 + +typedef union { + struct { + /* 0x0 */ u16 unused0; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[2]; +} CsCmdFadeOutAmbience; // size = 0x8 + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdModifySeq; // size = 0x8 + +typedef enum { + /* 1 */ CS_MOD_SEQ_0 = 1, + /* 2 */ CS_MOD_SEQ_1, + /* 3 */ CS_MOD_SEQ_2, + /* 4 */ CS_MOD_AMBIENCE_0, + /* 5 */ CS_MOD_AMBIENCE_1, + /* 6 */ CS_MOD_AMBIENCE_2, + /* 7 */ CS_MOD_SEQ_STORE, + /* 8 */ CS_MOD_SEQ_RESTORE +} CsModifySeqType; + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdDestination; // size = 0x8 + +typedef enum { + /* 1 */ CS_DESTINATION_DEFAULT = 1, + /* 2 */ CS_DESTINATION_BOSS_WARP +} CsDestinationType; + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdChooseCreditsScene; // size = 0x8 + +typedef enum { + /* 1 */ CS_CREDITS_DESTINATION = CS_DESTINATION_DEFAULT, + /* 2 */ CS_CREDITS_MASK_KAMARO, + /* 3 */ CS_CREDITS_MASK_GREAT_FAIRY, + /* 4 */ CS_CREDITS_MASK_ROMANI, + /* 5 */ CS_CREDITS_MASK_BLAST, + /* 6 */ CS_CREDITS_MASK_CIRCUS_LEADER, + /* 7 */ CS_CREDITS_MASK_BREMEN, + /* 8 */ CS_CREDITS_IKANA, + /* 9 */ CS_CREDITS_MASK_COUPLE, + /* 10 */ CS_CREDITS_MASK_BUNNY, + /* 11 */ CS_CREDITS_MASK_POSTMAN +} CsChooseCreditsSceneType; + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[2]; +} CsCmdMotionBlur; // size = 0x8 + +typedef enum { + /* 1 */ CS_MOTION_BLUR_ENABLE = 1, // enable instantly + /* 2 */ CS_MOTION_BLUR_DISABLE // disable gradually +} CsMotionBlurType; + +typedef union { + struct { + /* 0x0 */ u16 unused0; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdSfxReverbIndexTo2; // size = 0x8 + +typedef union { + struct { + /* 0x0 */ u16 unused0; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdSfxReverbIndexTo1; // size = 0x8 + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + }; + s32 _words[2]; +} CsCmdTransition; // size = 0x8 + +typedef enum { + /* 1 */ CS_TRANS_GRAY_FILL_IN = 1, // has hardcoded sounds for some scenes + /* 2 */ CS_TRANS_BLUE_FILL_IN, + /* 3 */ CS_TRANS_RED_FILL_OUT, + /* 4 */ CS_TRANS_GREEN_FILL_OUT, + /* 5 */ CS_TRANS_GRAY_FILL_OUT, + /* 6 */ CS_TRANS_BLUE_FILL_OUT, + /* 7 */ CS_TRANS_RED_FILL_IN, + /* 8 */ CS_TRANS_GREEN_FILL_IN, + /* 9 */ CS_TRANS_TRIGGER_INSTANCE, // used with `TRANS_MODE_INSTANCE_WAIT` + /* 10 */ CS_TRANS_BLACK_FILL_OUT, + /* 11 */ CS_TRANS_BLACK_FILL_IN, + /* 12 */ CS_TRANS_GRAY_TO_BLACK, + /* 13 */ CS_TRANS_BLACK_TO_GRAY +} CutsceneTransitionType; + +typedef union { + struct { + /* 0x0 */ u16 textId; // can also be an ocarina action for `CS_TEXT_OCARINA_ACTION` + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + /* 0x6 */ u16 type; + /* 0x8 */ u16 altTextId1; + /* 0xA */ u16 altTextId2; + }; + s32 _words[3]; +} CsCmdText; // size = 0xC + +typedef enum { + /* -1 */ CS_TEXT_TYPE_NONE = -1, + /* 0 */ CS_TEXT_TYPE_DEFAULT, + /* 1 */ CS_TEXT_TYPE_1, + /* 2 */ CS_TEXT_OCARINA_ACTION, + /* 3 */ CS_TEXT_TYPE_3, + /* 4 */ CS_TEXT_TYPE_BOSSES_REMAINS, // use `altText1` in the Giant Cutscene if all remains are already obtained + /* 5 */ CS_TEXT_TYPE_ALL_NORMAL_MASKS +} CutsceneTextType; + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + /* 0x6 */ u8 intensity; + /* 0x7 */ u8 decayTimer; + /* 0x8 */ u8 decayStep; + }; + s32 _words[3]; } CsCmdRumble; // size = 0xC -typedef struct { - /* 0x0 */ u16 unk0; - /* 0x2 */ u16 startFrame; - /* 0x4 */ u16 endFrame; - /* 0x6 */ Color_RGB8 color; - /* 0x9 */ UNK_TYPE1 pad9[0x3]; -} CsCmdFadeScreen; // size = 0xC +typedef enum { + /* 1 */ CS_RUMBLE_ONCE = 1, // rumble once when startFrame is reached + /* 2 */ CS_RUMBLE_PULSE // rumble every 64 frames between startFrame and endFrame +} CutsceneRumbleType; + +typedef union { + struct { + /* 0x0 */ u16 type; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; + /* 0x6 */ Color_RGB8 color; + }; + s32 _words[3]; +} CsCmdTransitionGeneral; // size = 0xC typedef enum { - /* 0 */ CS_STATE_0, - /* 1 */ CS_STATE_1, - /* 2 */ CS_STATE_2, - /* 3 */ CS_STATE_3, - /* 4 */ CS_STATE_4 + /* 1 */ CS_TRANS_GENERAL_FILL_IN = 1, + /* 2 */ CS_TRANS_GENERAL_FILL_OUT +} CsTransitionGeneralType; + +typedef union { + struct { + /* 0x0 */ u16 giveTatl; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdGiveTatl; // size = 0x8 + +typedef enum { + /* 0 */ CS_STATE_IDLE, + /* 1 */ CS_STATE_START, + /* 2 */ CS_STATE_RUN, + /* 3 */ CS_STATE_STOP, + /* 4 */ CS_STATE_RUN_UNSTOPPABLE } CutsceneState; +typedef union { + struct { + /* 0x0 */ u16 unused0; + /* 0x2 */ u16 startFrame; + /* 0x4 */ u16 endFrame; // unused + }; + s32 _words[2]; +} CsCmdUnimplemented; // size = 0x8 + typedef enum { - /* 0x00A */ CS_CMD_TEXTBOX = 0xA, - /* 0x05A */ CS_CMD_CAMERA = 0x5A, - /* 0x096 */ CS_CMD_MISC = 0x96, - /* 0x097 */ CS_CMD_SET_LIGHTING, - /* 0x098 */ CS_CMD_SCENE_TRANS_FX, - /* 0x099 */ CS_CMD_MOTIONBLUR, - /* 0x09A */ CS_CMD_GIVETATL, - /* 0x09B */ CS_CMD_FADESCREEN, - /* 0x09C */ CS_CMD_FADESEQ, - /* 0x09D */ CS_CMD_SETTIME, - /* 0x0C8 */ CS_CMD_SET_PLAYER_ACTION = 0xC8, - /* 0x0FA */ CS_CMD_UNK_FA = 0xFA, - /* 0x0FE */ CS_CMD_UNK_FE = 0xFE, - /* 0x0FF */ CS_CMD_UNK_FF, - /* 0x100 */ CS_CMD_UNK_100, - /* 0x101 */ CS_CMD_UNK_101, - /* 0x102 */ CS_CMD_UNK_102, - /* 0x103 */ CS_CMD_UNK_103, - /* 0x104 */ CS_CMD_UNK_104, - /* 0x105 */ CS_CMD_UNK_105, - /* 0x108 */ CS_CMD_UNK_108 = 0x108, - /* 0x109 */ CS_CMD_UNK_109, - /* 0x12C */ CS_CMD_PLAYSEQ = 0x12C, - /* 0x12D */ CS_CMD_STOPSEQ, - /* 0x12E */ CS_CMD_PLAYAMBIENCE, - /* 0x12F */ CS_CMD_FADEAMBIENCE, - /* 0x130 */ CS_CMD_130, - /* 0x131 */ CS_CMD_131, - /* 0x132 */ CS_CMD_132, - /* 0x15E */ CS_CMD_TERMINATOR = 0x15E, + /* 0x00A */ CS_CMD_TEXT = 10, + /* 0x05A */ CS_CMD_CAMERA_SPLINE = 90, + /* 0x064 */ CS_CMD_ACTOR_CUE_100 = 100, + /* 0x065 */ CS_CMD_ACTOR_CUE_101, + /* 0x066 */ CS_CMD_ACTOR_CUE_102, + /* 0x067 */ CS_CMD_ACTOR_CUE_103, + /* 0x068 */ CS_CMD_ACTOR_CUE_104, + /* 0x069 */ CS_CMD_ACTOR_CUE_105, + /* 0x06A */ CS_CMD_ACTOR_CUE_106, + /* 0x06B */ CS_CMD_ACTOR_CUE_107, + /* 0x06C */ CS_CMD_ACTOR_CUE_108, + /* 0x06D */ CS_CMD_ACTOR_CUE_109, + /* 0x06E */ CS_CMD_ACTOR_CUE_110, + /* 0x06F */ CS_CMD_ACTOR_CUE_111, + /* 0x070 */ CS_CMD_ACTOR_CUE_112, + /* 0x071 */ CS_CMD_ACTOR_CUE_113, + /* 0x072 */ CS_CMD_ACTOR_CUE_114, + /* 0x073 */ CS_CMD_ACTOR_CUE_115, + /* 0x074 */ CS_CMD_ACTOR_CUE_116, + /* 0x075 */ CS_CMD_ACTOR_CUE_117, + /* 0x076 */ CS_CMD_ACTOR_CUE_118, + /* 0x077 */ CS_CMD_ACTOR_CUE_119, + /* 0x078 */ CS_CMD_ACTOR_CUE_120, + /* 0x079 */ CS_CMD_ACTOR_CUE_121, + /* 0x07A */ CS_CMD_ACTOR_CUE_122, + /* 0x07B */ CS_CMD_ACTOR_CUE_123, + /* 0x07C */ CS_CMD_ACTOR_CUE_124, + /* 0x07D */ CS_CMD_ACTOR_CUE_125, + /* 0x07E */ CS_CMD_ACTOR_CUE_126, + /* 0x07F */ CS_CMD_ACTOR_CUE_127, + /* 0x080 */ CS_CMD_ACTOR_CUE_128, + /* 0x081 */ CS_CMD_ACTOR_CUE_129, + /* 0x082 */ CS_CMD_ACTOR_CUE_130, + /* 0x083 */ CS_CMD_ACTOR_CUE_131, + /* 0x084 */ CS_CMD_ACTOR_CUE_132, + /* 0x085 */ CS_CMD_ACTOR_CUE_133, + /* 0x086 */ CS_CMD_ACTOR_CUE_134, + /* 0x087 */ CS_CMD_ACTOR_CUE_135, + /* 0x088 */ CS_CMD_ACTOR_CUE_136, + /* 0x089 */ CS_CMD_ACTOR_CUE_137, + /* 0x08A */ CS_CMD_ACTOR_CUE_138, + /* 0x08B */ CS_CMD_ACTOR_CUE_139, + /* 0x08C */ CS_CMD_ACTOR_CUE_140, + /* 0x08D */ CS_CMD_ACTOR_CUE_141, + /* 0x08E */ CS_CMD_ACTOR_CUE_142, + /* 0x08F */ CS_CMD_ACTOR_CUE_143, + /* 0x090 */ CS_CMD_ACTOR_CUE_144, + /* 0x091 */ CS_CMD_ACTOR_CUE_145, + /* 0x092 */ CS_CMD_ACTOR_CUE_146, + /* 0x093 */ CS_CMD_ACTOR_CUE_147, + /* 0x094 */ CS_CMD_ACTOR_CUE_148, + /* 0x095 */ CS_CMD_ACTOR_CUE_149, + /* 0x096 */ CS_CMD_MISC, + /* 0x097 */ CS_CMD_LIGHT_SETTING, + /* 0x098 */ CS_CMD_TRANSITION, + /* 0x099 */ CS_CMD_MOTION_BLUR, + /* 0x09A */ CS_CMD_GIVE_TATL, + /* 0x09B */ CS_CMD_TRANSITION_GENERAL, + /* 0x09C */ CS_CMD_FADE_OUT_SEQ, + /* 0x09D */ CS_CMD_TIME, + /* 0x0C8 */ CS_CMD_PLAYER_CUE = 200, + /* 0x0C9 */ CS_CMD_ACTOR_CUE_201, + /* 0x0FA */ CS_CMD_UNK_DATA_FA = 0xFA, + /* 0x0FE */ CS_CMD_UNK_DATA_FE = 0xFE, + /* 0x0FF */ CS_CMD_UNK_DATA_FF, + /* 0x100 */ CS_CMD_UNK_DATA_100, + /* 0x101 */ CS_CMD_UNK_DATA_101, + /* 0x102 */ CS_CMD_UNK_DATA_102, + /* 0x103 */ CS_CMD_UNK_DATA_103, + /* 0x104 */ CS_CMD_UNK_DATA_104, + /* 0x105 */ CS_CMD_UNK_DATA_105, + /* 0x108 */ CS_CMD_UNK_DATA_108 = 0x108, + /* 0x109 */ CS_CMD_UNK_DATA_109, + /* 0x12C */ CS_CMD_START_SEQ = 300, + /* 0x12D */ CS_CMD_STOP_SEQ, + /* 0x12E */ CS_CMD_START_AMBIENCE, + /* 0x12F */ CS_CMD_FADE_OUT_AMBIENCE, + /* 0x130 */ CS_CMD_SFX_REVERB_INDEX_2, + /* 0x131 */ CS_CMD_SFX_REVERB_INDEX_1, + /* 0x132 */ CS_CMD_MODIFY_SEQ, + /* 0x15E */ CS_CMD_DESTINATION = 350, /* 0x15F */ CS_CMD_CHOOSE_CREDITS_SCENES, - /* 0x190 */ CS_CMD_RUMBLE = 0x190 + /* 0x190 */ CS_CMD_RUMBLE = 400, + /* 0x1C2 */ CS_CMD_ACTOR_CUE_450 = 450, + /* 0x1C3 */ CS_CMD_ACTOR_CUE_451, + /* 0x1C4 */ CS_CMD_ACTOR_CUE_452, + /* 0x1C5 */ CS_CMD_ACTOR_CUE_453, + /* 0x1C6 */ CS_CMD_ACTOR_CUE_454, + /* 0x1C7 */ CS_CMD_ACTOR_CUE_455, + /* 0x1C8 */ CS_CMD_ACTOR_CUE_456, + /* 0x1C9 */ CS_CMD_ACTOR_CUE_457, + /* 0x1CA */ CS_CMD_ACTOR_CUE_458, + /* 0x1CB */ CS_CMD_ACTOR_CUE_459, + /* 0x1CC */ CS_CMD_ACTOR_CUE_460, + /* 0x1CD */ CS_CMD_ACTOR_CUE_461, + /* 0x1CE */ CS_CMD_ACTOR_CUE_462, + /* 0x1CF */ CS_CMD_ACTOR_CUE_463, + /* 0x1D0 */ CS_CMD_ACTOR_CUE_464, + /* 0x1D1 */ CS_CMD_ACTOR_CUE_465, + /* 0x1D2 */ CS_CMD_ACTOR_CUE_466, + /* 0x1D3 */ CS_CMD_ACTOR_CUE_467, + /* 0x1D4 */ CS_CMD_ACTOR_CUE_468, + /* 0x1D5 */ CS_CMD_ACTOR_CUE_469, + /* 0x1D6 */ CS_CMD_ACTOR_CUE_470, + /* 0x1D7 */ CS_CMD_ACTOR_CUE_471, + /* 0x1D8 */ CS_CMD_ACTOR_CUE_472, + /* 0x1D9 */ CS_CMD_ACTOR_CUE_473, + /* 0x1DA */ CS_CMD_ACTOR_CUE_474, + /* 0x1DB */ CS_CMD_ACTOR_CUE_475, + /* 0x1DC */ CS_CMD_ACTOR_CUE_476, + /* 0x1DD */ CS_CMD_ACTOR_CUE_477, + /* 0x1DE */ CS_CMD_ACTOR_CUE_478, + /* 0x1DF */ CS_CMD_ACTOR_CUE_479, + /* 0x1E0 */ CS_CMD_ACTOR_CUE_480, + /* 0x1E1 */ CS_CMD_ACTOR_CUE_481, + /* 0x1E2 */ CS_CMD_ACTOR_CUE_482, + /* 0x1E3 */ CS_CMD_ACTOR_CUE_483, + /* 0x1E4 */ CS_CMD_ACTOR_CUE_484, + /* 0x1E5 */ CS_CMD_ACTOR_CUE_485, + /* 0x1E6 */ CS_CMD_ACTOR_CUE_486, + /* 0x1E7 */ CS_CMD_ACTOR_CUE_487, + /* 0x1E8 */ CS_CMD_ACTOR_CUE_488, + /* 0x1E9 */ CS_CMD_ACTOR_CUE_489, + /* 0x1EA */ CS_CMD_ACTOR_CUE_490, + /* 0x1EB */ CS_CMD_ACTOR_CUE_491, + /* 0x1EC */ CS_CMD_ACTOR_CUE_492, + /* 0x1ED */ CS_CMD_ACTOR_CUE_493, + /* 0x1EE */ CS_CMD_ACTOR_CUE_494, + /* 0x1EF */ CS_CMD_ACTOR_CUE_495, + /* 0x1F0 */ CS_CMD_ACTOR_CUE_496, + /* 0x1F1 */ CS_CMD_ACTOR_CUE_497, + /* 0x1F2 */ CS_CMD_ACTOR_CUE_498, + /* 0x1F3 */ CS_CMD_ACTOR_CUE_499, + /* 0x1F4 */ CS_CMD_ACTOR_CUE_500, + /* 0x1F5 */ CS_CMD_ACTOR_CUE_501, + /* 0x1F6 */ CS_CMD_ACTOR_CUE_502, + /* 0x1F7 */ CS_CMD_ACTOR_CUE_503, + /* 0x1F8 */ CS_CMD_ACTOR_CUE_504, + /* 0x1F9 */ CS_CMD_ACTOR_CUE_505, + /* 0x1FA */ CS_CMD_ACTOR_CUE_506, + /* 0x1FB */ CS_CMD_ACTOR_CUE_507, + /* 0x1FC */ CS_CMD_ACTOR_CUE_508, + /* 0x1FD */ CS_CMD_ACTOR_CUE_509, + /* 0x1FE */ CS_CMD_ACTOR_CUE_510, + /* 0x1FF */ CS_CMD_ACTOR_CUE_511, + /* 0x200 */ CS_CMD_ACTOR_CUE_512, + /* 0x201 */ CS_CMD_ACTOR_CUE_513, + /* 0x202 */ CS_CMD_ACTOR_CUE_514, + /* 0x203 */ CS_CMD_ACTOR_CUE_515, + /* 0x204 */ CS_CMD_ACTOR_CUE_516, + /* 0x205 */ CS_CMD_ACTOR_CUE_517, + /* 0x206 */ CS_CMD_ACTOR_CUE_518, + /* 0x207 */ CS_CMD_ACTOR_CUE_519, + /* 0x208 */ CS_CMD_ACTOR_CUE_520, + /* 0x209 */ CS_CMD_ACTOR_CUE_521, + /* 0x20A */ CS_CMD_ACTOR_CUE_522, + /* 0x20B */ CS_CMD_ACTOR_CUE_523, + /* 0x20C */ CS_CMD_ACTOR_CUE_524, + /* 0x20D */ CS_CMD_ACTOR_CUE_525, + /* 0x20E */ CS_CMD_ACTOR_CUE_526, + /* 0x20F */ CS_CMD_ACTOR_CUE_527, + /* 0x210 */ CS_CMD_ACTOR_CUE_528, + /* 0x211 */ CS_CMD_ACTOR_CUE_529, + /* 0x212 */ CS_CMD_ACTOR_CUE_530, + /* 0x213 */ CS_CMD_ACTOR_CUE_531, + /* 0x214 */ CS_CMD_ACTOR_CUE_532, + /* 0x215 */ CS_CMD_ACTOR_CUE_533, + /* 0x216 */ CS_CMD_ACTOR_CUE_534, + /* 0x217 */ CS_CMD_ACTOR_CUE_535, + /* 0x218 */ CS_CMD_ACTOR_CUE_536, + /* 0x219 */ CS_CMD_ACTOR_CUE_537, + /* 0x21A */ CS_CMD_ACTOR_CUE_538, + /* 0x21B */ CS_CMD_ACTOR_CUE_539, + /* 0x21C */ CS_CMD_ACTOR_CUE_540, + /* 0x21D */ CS_CMD_ACTOR_CUE_541, + /* 0x21E */ CS_CMD_ACTOR_CUE_542, + /* 0x21F */ CS_CMD_ACTOR_CUE_543, + /* 0x220 */ CS_CMD_ACTOR_CUE_544, + /* 0x221 */ CS_CMD_ACTOR_CUE_545, + /* 0x222 */ CS_CMD_ACTOR_CUE_546, + /* 0x223 */ CS_CMD_ACTOR_CUE_547, + /* 0x224 */ CS_CMD_ACTOR_CUE_548, + /* 0x225 */ CS_CMD_ACTOR_CUE_549, + /* 0x226 */ CS_CMD_ACTOR_CUE_550, + /* 0x227 */ CS_CMD_ACTOR_CUE_551, + /* 0x228 */ CS_CMD_ACTOR_CUE_552, + /* 0x229 */ CS_CMD_ACTOR_CUE_553, + /* 0x22A */ CS_CMD_ACTOR_CUE_554, + /* 0x22B */ CS_CMD_ACTOR_CUE_555, + /* 0x22C */ CS_CMD_ACTOR_CUE_556, + /* 0x22D */ CS_CMD_ACTOR_CUE_557, + /* 0x22E */ CS_CMD_ACTOR_CUE_558, + /* 0x22F */ CS_CMD_ACTOR_CUE_559, + /* 0x230 */ CS_CMD_ACTOR_CUE_560, + /* 0x231 */ CS_CMD_ACTOR_CUE_561, + /* 0x232 */ CS_CMD_ACTOR_CUE_562, + /* 0x233 */ CS_CMD_ACTOR_CUE_563, + /* 0x234 */ CS_CMD_ACTOR_CUE_564, + /* 0x235 */ CS_CMD_ACTOR_CUE_565, + /* 0x236 */ CS_CMD_ACTOR_CUE_566, + /* 0x237 */ CS_CMD_ACTOR_CUE_567, + /* 0x238 */ CS_CMD_ACTOR_CUE_568, + /* 0x239 */ CS_CMD_ACTOR_CUE_569, + /* 0x23A */ CS_CMD_ACTOR_CUE_570, + /* 0x23B */ CS_CMD_ACTOR_CUE_571, + /* 0x23C */ CS_CMD_ACTOR_CUE_572, + /* 0x23D */ CS_CMD_ACTOR_CUE_573, + /* 0x23E */ CS_CMD_ACTOR_CUE_574, + /* 0x23F */ CS_CMD_ACTOR_CUE_575, + /* 0x240 */ CS_CMD_ACTOR_CUE_576, + /* 0x241 */ CS_CMD_ACTOR_CUE_577, + /* 0x242 */ CS_CMD_ACTOR_CUE_578, + /* 0x243 */ CS_CMD_ACTOR_CUE_579, + /* 0x244 */ CS_CMD_ACTOR_CUE_580, + /* 0x245 */ CS_CMD_ACTOR_CUE_581, + /* 0x246 */ CS_CMD_ACTOR_CUE_582, + /* 0x247 */ CS_CMD_ACTOR_CUE_583, + /* 0x248 */ CS_CMD_ACTOR_CUE_584, + /* 0x249 */ CS_CMD_ACTOR_CUE_585, + /* 0x24A */ CS_CMD_ACTOR_CUE_586, + /* 0x24B */ CS_CMD_ACTOR_CUE_587, + /* 0x24C */ CS_CMD_ACTOR_CUE_588, + /* 0x24D */ CS_CMD_ACTOR_CUE_589, + /* 0x24E */ CS_CMD_ACTOR_CUE_590, + /* 0x24F */ CS_CMD_ACTOR_CUE_591, + /* 0x250 */ CS_CMD_ACTOR_CUE_592, + /* 0x251 */ CS_CMD_ACTOR_CUE_593, + /* 0x252 */ CS_CMD_ACTOR_CUE_594, + /* 0x253 */ CS_CMD_ACTOR_CUE_595, + /* 0x254 */ CS_CMD_ACTOR_CUE_596, + /* 0x255 */ CS_CMD_ACTOR_CUE_597, + /* 0x256 */ CS_CMD_ACTOR_CUE_598, + /* 0x257 */ CS_CMD_ACTOR_CUE_599, + /* -2 */ CS_CMD_ACTOR_CUE_POST_PROCESS = 0xFFFFFFFE, + /* -1 */ CS_CAM_STOP // OoT Remnant } CutsceneCmd; +typedef enum { + /* 0x00 */ CS_MISC_UNIMPLEMENTED_0, + /* 0x01 */ CS_MISC_RAIN, + /* 0x02 */ CS_MISC_LIGHTNING, + /* 0x03 */ CS_MISC_LIFT_FOG, + /* 0x04 */ CS_MISC_CLOUDY_SKY, + /* 0x05 */ CS_MISC_STOP_CUTSCENE, + /* 0x06 */ CS_MISC_UNIMPLEMENTED_6, + /* 0x07 */ CS_MISC_SHOW_TITLE_CARD, + /* 0x08 */ CS_MISC_EARTHQUAKE_MEDIUM, + /* 0x09 */ CS_MISC_EARTHQUAKE_STOP, + /* 0x0A */ CS_MISC_VISMONO_BLACK_AND_WHITE, + /* 0x0B */ CS_MISC_VISMONO_SEPIA, + /* 0x0C */ CS_MISC_HIDE_ROOM, + /* 0x0D */ CS_MISC_RED_PULSATING_LIGHTS, + /* 0x0E */ CS_MISC_HALT_ALL_ACTORS, + /* 0x0F */ CS_MISC_RESUME_ALL_ACTORS, + /* 0x10 */ CS_MISC_SANDSTORM_FILL, + /* 0x11 */ CS_MISC_SUNSSONG_START, + /* 0x12 */ CS_MISC_FREEZE_TIME, + /* 0x13 */ CS_MISC_LONG_SCARECROW_SONG, + /* 0x14 */ CS_MISC_SET_CSFLAG_3, + /* 0x15 */ CS_MISC_SET_CSFLAG_4, + /* 0x16 */ CS_MISC_PLAYER_FORM_DEKU, + /* 0x17 */ CS_MISC_ENABLE_PLAYER_REFLECTION, + /* 0x18 */ CS_MISC_DISABLE_PLAYER_REFLECTION, + /* 0x19 */ CS_MISC_PLAYER_FORM_HUMAN, + /* 0x1A */ CS_MISC_EARTHQUAKE_STRONG, + /* 0x1B */ CS_MISC_DEST_MOON_CRASH_FIRE_WALL, + /* 0x1C */ CS_MISC_MOON_CRASH_SKYBOX, + /* 0x1D */ CS_MISC_PLAYER_FORM_RESTORED, + /* 0x1E */ CS_MISC_DISABLE_PLAYER_CSMODE_START_POS, + /* 0x1F */ CS_MISC_ENABLE_PLAYER_CSMODE_START_POS, + /* 0x20 */ CS_MISC_UNIMPLEMENTED_20, + /* 0x21 */ CS_MISC_SAVE_ENTER_CLOCK_TOWN, + /* 0x22 */ CS_MISC_RESET_SAVE_FROM_MOON_CRASH, + /* 0x23 */ CS_MISC_TIME_ADVANCE, + /* 0x24 */ CS_MISC_EARTHQUAKE_WEAK, + /* 0x25 */ CS_MISC_UNIMPLEMENTED_25, + /* 0x26 */ CS_MISC_DAWN_OF_A_NEW_DAY, + /* 0x27 */ CS_MISC_PLAYER_FORM_ZORA, + /* 0x28 */ CS_MISC_FINALE +} CutsceneMiscType; + typedef union CutsceneData { s32 i; f32 f; @@ -163,29 +580,291 @@ typedef union CutsceneData { s8 b[4]; } CutsceneData; -typedef struct { - /* 0x0 */ CutsceneData* segmentedData; - /* 0x4 */ s16 nextEntrance; - /* 0x6 */ u8 unk6; - /* 0x7 */ u8 unk7; // a weekEventReg bitpack? -} CutsceneEntry; // size = 0x8 +#define BIT_FLAG_TO_SHIFT(flag) \ + ((flag & 0x80) ? 7 : \ + (flag & 0x40) ? 6 : \ + (flag & 0x20) ? 5 : \ + (flag & 0x10) ? 4 : \ + (flag & 0x8) ? 3 : \ + (flag & 0x4) ? 2 : \ + (flag & 0x2) ? 1 : \ + (flag & 0x1) ? 0 : \ + 0) + +// Do not trigger the scripted cutscene upon any spawn +#define CS_SPAWN_FLAG_NONE 0xFF +// Always trigger the scripted cutscene upon the specified spawn +#define CS_SPAWN_FLAG_ALWAYS 0xFE +// Trigger the scripted cutscene once upon the specified spawn if `weekEventFlags` is not set. Set `weekEventFlags` after the cutscene. +//! @note Despite there being more than `0x1F` indices for weekEventFlags, this u8 flag entry can only check weekEventFlags with indices [0 - 0x1F] +#define CS_SPAWN_FLAG_ONCE(weekEventFlag) ((((weekEventFlag) & 0x1F00) >> 5) | BIT_FLAG_TO_SHIFT((weekEventFlag) & 0xFF)) + +#define CHECK_CS_SPAWN_FLAG_WEEKEVENTREG(spawnFlags) (GET_WEEKEVENTREG((spawnFlags) / 8) & (1 << ((spawnFlags) % 8))) +#define SET_CS_SPAWN_FLAG_WEEKEVENTREG(spawnFlags) (WEEKEVENTREG((spawnFlags) / 8) = GET_WEEKEVENTREG((spawnFlags) / 8) | (1 << ((spawnFlags) % 8))) + typedef struct { - /* 0x00 */ u8 sceneCsCount; - /* 0x04 */ CutsceneData* csData; - /* 0x08 */ u8 state; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ u16 frames; - /* 0x12 */ u16 currentCsIndex; - /* 0x14 */ s32 subCamId; - /* 0x18 */ u16 unk_18; - /* 0x1A */ u8 unk_1A; - /* 0x1B */ u8 unk_1B; - /* 0x1C */ CutsceneCameraPoint* atPoints; - /* 0x20 */ CutsceneCameraPoint* eyePoints; - /* 0x24 */ CsCmdActorAction* playerAction; - /* 0x28 */ CsCmdActorAction* actorActions[10]; // "npcdemopnt" - /* 0x50 */ CutsceneEntry* sceneCsList; + /* 0x0 */ CutsceneData* script; + /* 0x4 */ s16 nextEntrance; + /* 0x6 */ u8 spawn; + /* 0x7 */ u8 spawnFlags; // See `CS_SPAWN_FLAG_` +} CutsceneScriptEntry; // size = 0x8 + +// ZAPD compatibility typedefs +// TODO: Remove when ZAPD adds support for them +typedef CutsceneScriptEntry CutsceneEntry; + +typedef struct { + /* 0x00 */ u8 scriptListCount; + /* 0x04 */ CutsceneData* script; + /* 0x08 */ u8 state; + /* 0x0C */ f32 timer; + /* 0x10 */ u16 curFrame; + /* 0x12 */ u16 scriptIndex; + /* 0x14 */ s32 subCamId; + /* 0x18 */ u16 camEyeSplinePointsAppliedFrame; // Remnant of OoT. Set but never used. + /* 0x1C */ UNK_TYPE1 unk_1C[0xA]; // Remnant of cam data from OoT + /* 0x24 */ CsCmdActorCue* playerCue; + /* 0x28 */ CsCmdActorCue* actorCues[10]; // "npcdemopnt" + /* 0x50 */ CutsceneScriptEntry* scriptList; } CutsceneContext; // size = 0x54 +/* Actor Cutscenes, which encompasses all cutscenes */ + +typedef struct { + /* 0x00 */ s16 priority; // Lower means higher priority. -1 means it ignores priority + /* 0x02 */ s16 length; + /* 0x04 */ s16 csCamId; // Index of CsCameraEntry to use. Negative indices use sGlobalCamDataSettings. Indices 0 and above use CsCameraEntry from a sceneLayer + /* 0x06 */ s16 scriptIndex; + /* 0x08 */ s16 additionalCsId; + /* 0x0A */ u8 endSfx; + /* 0x0B */ u8 customValue; // 0 - 99: actor-specific custom value. 100+: spawn. 255: none + /* 0x0C */ s16 hudVisibility; + /* 0x0E */ u8 endCam; + /* 0x0F */ u8 letterboxSize; +} ActorCutscene; // size = 0x10 +// TODO: rename `ActorCutscene` to `CutsceneEntry` once ZAPD uses `CutsceneScriptEntry` +// typedef CutsceneEntry ActorCutscene; + +typedef enum { + /* -1 */ CS_ID_NONE = -1, + // CsId's 0 - 119 are sceneLayer-specific and index `ActorCutscene` + /* 0x78 */ CS_ID_GLOBAL_78 = 120, + /* 0x79 */ CS_ID_GLOBAL_79, + /* 0x7A */ CS_ID_GLOBAL_7A, + /* 0x7B */ CS_ID_GLOBAL_ELEGY, + /* 0x7C */ CS_ID_GLOBAL_TALK, + /* 0x7D */ CS_ID_GLOBAL_DOOR, + /* 0x7E */ CS_ID_GLOBAL_RETURN_TO_CAM, // smoothly return to the previous camera + /* 0x7F */ CS_ID_GLOBAL_END +} CutsceneId; + +typedef enum { + /* 0 */ PLAYER_CS_ID_ITEM_OCARINA, + /* 1 */ PLAYER_CS_ID_ITEM_GET, + /* 2 */ PLAYER_CS_ID_ITEM_BOTTLE, + /* 3 */ PLAYER_CS_ID_ITEM_SHOW, + /* 4 */ PLAYER_CS_ID_WARP_PAD_MOON, + /* 5 */ PLAYER_CS_ID_MASK_TRANSFORMATION, + /* 6 */ PLAYER_CS_ID_DEATH, + /* 7 */ PLAYER_CS_ID_REVIVE, + /* 8 */ PLAYER_CS_ID_SONG_WARP, // Song of Time and Song of Soaring + /* 9 */ PLAYER_CS_ID_WARP_PAD_ENTRANCE, + /* 10 */ PLAYER_CS_ID_MAX +} PlayerCsId; + +#define CS_SCRIPT_ID_NONE -1 + +typedef enum { + // global (see sGlobalCamDataSettings) + /* -25 */ CS_CAM_ID_GLOBAL_ELEGY = -25, // CAM_SET_ELEGY_SHELL + /* -24 */ CS_CAM_ID_GLOBAL_SIDED, // CAM_SET_SIDED + /* -23 */ CS_CAM_ID_GLOBAL_BOAT_CRUISE, // CAM_SET_BOAT_CRUISE + /* -22 */ CS_CAM_ID_GLOBAL_N16, // CAM_SET_NONE + /* -21 */ CS_CAM_ID_GLOBAL_SUBJECTD, // CAM_SET_SUBJECTD + /* -20 */ CS_CAM_ID_GLOBAL_NORMALD, // CAM_SET_NORMALD + /* -19 */ CS_CAM_ID_GLOBAL_N13, // CAM_SET_NONE + /* -18 */ CS_CAM_ID_GLOBAL_N12, // CAM_SET_NONE + /* -17 */ CS_CAM_ID_GLOBAL_N11, // CAM_SET_NONE + /* -16 */ CS_CAM_ID_GLOBAL_WARP_PAD_ENTRANCE, // CAM_SET_WARP_PAD_ENTRANCE + /* -15 */ CS_CAM_ID_GLOBAL_ATTENTION, // CAM_SET_ATTENTION + /* -14 */ CS_CAM_ID_GLOBAL_CONNECT, // CAM_SET_CONNECT0 + /* -13 */ CS_CAM_ID_GLOBAL_REMOTE_BOMB, // CAM_SET_REMOTEBOMB + /* -12 */ CS_CAM_ID_GLOBAL_N0C, // CAM_SET_NONE + /* -11 */ CS_CAM_ID_GLOBAL_MASK_TRANSFORMATION, // CAM_SET_MASK_TRANSFORMATION + /* -10 */ CS_CAM_ID_GLOBAL_LONG_CHEST_OPENING, // CAM_SET_LONG_CHEST_OPENING + /* -9 */ CS_CAM_ID_GLOBAL_REVIVE, // CAM_SET_REBIRTH + /* -8 */ CS_CAM_ID_GLOBAL_DEATH, // CAM_SET_DEATH + /* -7 */ CS_CAM_ID_GLOBAL_WARP_PAD_MOON, // CAM_SET_WARP_PAD_MOON + /* -6 */ CS_CAM_ID_GLOBAL_SONG_WARP, // CAM_SET_NAVI + /* -5 */ CS_CAM_ID_GLOBAL_ITEM_SHOW, // CAM_SET_ITEM3 + /* -4 */ CS_CAM_ID_GLOBAL_ITEM_BOTTLE, // CAM_SET_ITEM2 + /* -3 */ CS_CAM_ID_GLOBAL_ITEM_OCARINA, // CAM_SET_ITEM1 + /* -2 */ CS_CAM_ID_GLOBAL_ITEM_GET, // CAM_SET_ITEM0 + /* -1 */ CS_CAM_ID_NONE + // CamCsId's 0+ are sceneLayer-specific and index `ActorCsCamInfo` +} CutsceneCamId; + +typedef enum { + /* -1 */ CS_HUD_VISIBILITY_ALL_ALT = -1, + /* 0 */ CS_HUD_VISIBILITY_NONE, + /* 1 */ CS_HUD_VISIBILITY_ALL, + /* 2 */ CS_HUD_VISIBILITY_A_HEARTS_MAGIC, + /* 3 */ CS_HUD_VISIBILITY_C_HEARTS_MAGIC, + /* 4 */ CS_HUD_VISIBILITY_ALL_NO_MINIMAP, + /* 5 */ CS_HUD_VISIBILITY_A_B_C, + /* 6 */ CS_HUD_VISIBILITY_B_MINIMAP, + /* 7 */ CS_HUD_VISIBILITY_A +} CutsceneHudVisibility; + +typedef enum { + /* 0 */ CS_END_SFX_NONE, + /* 1 */ CS_END_SFX_TRE_BOX_APPEAR, + /* 2 */ CS_END_SFX_CORRECT_CHIME, + /* 255 */ CS_END_SFX_NONE_ALT = 0xFF +} CutsceneEndSfx; + +typedef enum { + /* 0 */ CS_END_CAM_0, + /* 1 */ CS_END_CAM_1, + /* 2 */ CS_END_CAM_SMOOTH +} CutsceneEndCam; + +/* Cutscene Camera Spline Scripts */ + +typedef struct { + /* 0x0 */ s16 numEntries; + /* 0x2 */ s16 unk_02; // unused + /* 0x4 */ s16 unk_04; // unused + /* 0x6 */ s16 duration; // total duration +} CsCmdCamSpline; // size = 0x8 + +// Both camAt and camEye +typedef struct { + /* 0x0 */ u8 interpType; // see `CutsceneCamInterpType` + /* 0x1 */ u8 weight; // for certain types of interpTypes, shifts the weight to certain points. Default is 100. + /* 0x2 */ s16 duration; // duration of current point + /* 0x4 */ Vec3s pos; + /* 0xA */ s16 relativeTo; // see `CutsceneCamRelativeTo` +} CsCmdCamPoint; // size = 0xC + +typedef enum { + /* 0 */ CS_CAM_INTERP_0, + /* 1 */ CS_CAM_INTERP_1, + /* 2 */ CS_CAM_INTERP_2, + /* 3 */ CS_CAM_INTERP_3, + /* 4 */ CS_CAM_INTERP_4, + /* 5 */ CS_CAM_INTERP_5, + /* 6 */ CS_CAM_INTERP_6, + /* 7 */ CS_CAM_INTERP_7 +} CutsceneCamInterpType; + +typedef enum { + /* 0 */ CS_CAM_REL_0, + /* 1 */ CS_CAM_REL_1, + /* 2 */ CS_CAM_REL_2, + /* 3 */ CS_CAM_REL_3, + /* 4 */ CS_CAM_REL_4, + /* 5 */ CS_CAM_REL_5 +} CutsceneCamRelativeTo; + + +// Roll and Fov Data +typedef struct { + /* 0x0 */ s16 unused0; // unused + /* 0x2 */ s16 roll; + /* 0x4 */ s16 fov; + /* 0x6 */ s16 unused1; // unused +} CsCmdCamMisc; // size = 0x8 + +typedef struct { + /* 0x00 */ Vec3f unk_00; + /* 0x0C */ Vec3f unk_0C; + /* 0x18 */ f32 unk_18; + /* 0x1C */ f32 unk_1C; + /* 0x2A */ f32 unk_20; + /* 0x24 */ s16 unk_24; + /* 0x26 */ s16 unk_26; + /* 0x28 */ s16 unk_28; + /* 0x2A */ s16 numEntries; + /* 0x1E */ u8 curPoint; + /* 0x2D */ u8 unk_2D; + /* 0x2E */ UNK_TYPE1 unk_2E[2]; +} CutsceneCameraInterp; // size = 0x30 + +typedef struct { + /* 0x00 */ s16 splineIndex; + /* 0x02 */ s16 cmdIndex; + /* 0x04 */ s16 splineNeedsInit; + /* 0x06 */ s16 state; + /* 0x08 */ s16 nextSplineTimer; + /* 0x0A */ s16 updateSplineTimer; + /* 0x0C */ s16 duration; // Duration of the current spline + /* 0x10 */ CutsceneCameraInterp eyeInterp; + /* 0x40 */ CutsceneCameraInterp atInterp; + /* 0x70 */ CsCmdCamPoint* atCmd; + /* 0x74 */ CsCmdCamPoint* eyeCmd; + /* 0x78 */ CsCmdCamMisc* miscCmd; + /* 0x7C */ Camera* camera; +} CutsceneCamera; // size = 0x80 + +typedef enum { + /* 0 */ CS_CAM_STATE_UPDATE_ALL, // Update spline and next spline timer + /* 0 */ CS_CAM_STATE_UPDATE_SPLINE, // Update spline, do not advance next spline timer + /* 0 */ CS_CAM_STATE_PAUSE, // No updates + /* 0 */ CS_CAM_STATE_DONE_SPLINE, // Finished the current spline, ready for the next one + /* 0 */ CS_CAM_STATE_DONE = 999 // Finished all the splines. +} CutsceneCameraState; + +// OoT Remnant +#define CS_CAM_DATA_NOT_APPLIED 0xFFFF + +void Cutscene_InitContext(struct PlayState* play, CutsceneContext* csCtx); +void Cutscene_StartManual(struct PlayState* play, CutsceneContext* csCtx); +void Cutscene_StopManual(struct PlayState* play, CutsceneContext* csCtx); +void Cutscene_UpdateManual(struct PlayState* play, CutsceneContext* csCtx); +void Cutscene_UpdateScripted(struct PlayState* play, CutsceneContext* csCtx); +void Cutscene_HandleEntranceTriggers(struct PlayState* play); +void func_800EDDB0(struct PlayState* play); +void Cutscene_StartScripted(struct PlayState* play, u8 scriptIndex); +void Cutscene_ActorTranslate(Actor* actor, struct PlayState* play, s32 cueChannel); +void Cutscene_ActorTranslateAndYaw(Actor* actor, struct PlayState* play, s32 cueChannel); +void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, struct PlayState* play, s32 cueChannel); +void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, struct PlayState* play, s32 cueChannel); +s32 Cutscene_GetSceneLayer(struct PlayState* play); +s32 Cutscene_GetCueChannel(struct PlayState* play, u16 cueType); +s32 Cutscene_IsCueInChannel(struct PlayState* play, u16 cueType); +u8 Cutscene_IsPlaying(struct PlayState* play); + +void CutsceneManager_Init(struct PlayState* play, ActorCutscene* cutsceneList, s16 numEntries); +void CutsceneManager_StoreCamera(Camera* camera); +void CutsceneManager_ClearWaiting(void); +s16 CutsceneManager_Update(void); +void CutsceneManager_Queue(s16 csId); +s16 CutsceneManager_IsNext(s16 csId); +s16 CutsceneManager_StartWithPlayerCs(s16 csId, Actor* actor); +s16 CutsceneManager_StartWithPlayerCsAndSetFlag(s16 csId, Actor* actor); +s16 CutsceneManager_Start(s16 csId, Actor* actor); +s16 CutsceneManager_Stop(s16 csId); +s16 CutsceneManager_GetCurrentCsId(void); +ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId); +s16 CutsceneManager_GetAdditionalCsId(s16 csId); +s16 CutsceneManager_GetLength(s16 csId); +s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId); +s16 CutsceneManager_GetCutsceneCustomValue(s16 csId); +s16 CutsceneManager_GetCurrentSubCamId(s16 csId); +s16 CutsceneManager_FindEntranceCsId(void); +s32 func_800F22C4(s16 csId, Actor* actor); +void CutsceneManager_SetReturnCamera(s16 camId); + +s32 CutsceneCamera_Init(Camera* camera, CutsceneCamera* csCamera); +s32 CutsceneCamera_UpdateSplines(u8* script, CutsceneCamera* csCamera); +void CutsceneCamera_SetState(s16 state); +void CutsceneCamera_Reset(void); + +void CutsceneFlags_UnsetAll(struct PlayState* play); +void CutsceneFlags_Set(struct PlayState* play, s16 flag); +void CutsceneFlags_Unset(struct PlayState* play, s16 flag); +s32 CutsceneFlags_Get(struct PlayState* play, s16 flag); + #endif diff --git a/include/z64cutscene_commands.h b/include/z64cutscene_commands.h index 1ab6533ac..50e1ce451 100644 --- a/include/z64cutscene_commands.h +++ b/include/z64cutscene_commands.h @@ -5,13 +5,19 @@ #include "z64cutscene.h" /** + * Cutscene scripts are arrays of `CutsceneData` words, including bit-packed integers and floats. + */ + +/** + * Marks the beginning of a cutscene script. + * * ARGS - * s32 totalEntries (e), s32 endFrame (n) + * s32 totalEntries (e), s32 frameCount (n) * FORMAT * eeeeeeee nnnnnnnn * size = 0x8 */ -#define CS_BEGIN_CUTSCENE(totalEntries, endFrame) { CMD_W(totalEntries) }, { CMD_W(endFrame) } +#define CS_BEGIN_CUTSCENE(totalEntries, frameCount) { CMD_W(totalEntries) }, { CMD_W(frameCount) } /** @@ -21,83 +27,83 @@ * 0000000A eeeeeeee * size = 0x8 */ -#define CS_TEXT_LIST(entries) { CS_CMD_TEXTBOX }, { CMD_W(entries) } +#define CS_TEXT_LIST(entries) { CS_CMD_TEXT }, { CMD_W(entries) } /** * ARGS - * s16 messageId (i), s16 startFrame (s), s16 endFrame (e), s16 type (o), + * s16 textId (i), s16 startFrame (s), s16 endFrame (e), s16 type (o), * s16 topOptionBranch (y), s16 bottomOptionBranch (n) * FORMAT * iiiissss eeeeoooo yyyynnnn * size = 0xC */ -#define CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, type, topOptionBranch, bottomOptionBranch) \ - { CMD_HH(messageId, startFrame) }, { CMD_HH(endFrame, type) }, { CMD_HH(topOptionBranch, bottomOptionBranch) } +#define CS_TEXT(textId, startFrame, endFrame, type, topOptionBranch, bottomOptionBranch) \ + { CMD_HH(textId, startFrame) }, { CMD_HH(endFrame, type) }, { CMD_HH(topOptionBranch, bottomOptionBranch) } /** * ARGS - * s16 messageId (i), s16 startFrame (s), s16 endFrame (e), + * s16 textId (i), s16 startFrame (s), s16 endFrame (e), * s16 topOptionBranch (y), s16 bottomOptionBranch (n) * FORMAT * iiiissss eeee0000 yyyynnnn * size = 0xC */ -#define CS_TEXT_DEFAULT(messageId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \ - CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, CS_TEXTBOX_TYPE_DEFAULT, topOptionBranch, bottomOptionBranch) +#define CS_TEXT_DEFAULT(textId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \ + CS_TEXT(textId, startFrame, endFrame, CS_TEXT_TYPE_DEFAULT, topOptionBranch, bottomOptionBranch) /** * ARGS - * s16 messageId (i), s16 startFrame (s), s16 endFrame (e), + * s16 textId (i), s16 startFrame (s), s16 endFrame (e), * s16 topOptionBranch (y), s16 bottomOptionBranch (n) * FORMAT * iiiissss eeee0001 yyyynnnn * size = 0xC */ -#define CS_TEXT_TYPE_1(messageId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \ - CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, CS_TEXTBOX_TYPE_1, topOptionBranch, bottomOptionBranch) +#define CS_TEXT_TYPE_1(textId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \ + CS_TEXT(textId, startFrame, endFrame, CS_TEXT_TYPE_1, topOptionBranch, bottomOptionBranch) /** * ARGS - * s16 ocarinaSongAction (o), s16 startFrame (s), s16 endFrame (e), s16 messageId (i) + * s16 ocarinaSongAction (o), s16 startFrame (s), s16 endFrame (e), s16 textId (i) * FORMAT * oooossss eeee0002 iiiiFFFF * size = 0xC */ -#define CS_TEXT_LEARN_SONG(ocarinaSongAction, startFrame, endFrame, messageId) \ - CS_TEXT_DISPLAY_TEXTBOX(ocarinaSongAction, startFrame, endFrame, CS_TEXTBOX_TYPE_LEARN_SONG, messageId, 0xFFFF) +#define CS_TEXT_OCARINA_ACTION(ocarinaSongAction, startFrame, endFrame, textId) \ + CS_TEXT(ocarinaSongAction, startFrame, endFrame, CS_TEXT_OCARINA_ACTION, textId, 0xFFFF) /** * ARGS - * s16 messageId (i), s16 startFrame (s), s16 endFrame (e), + * s16 textId (i), s16 startFrame (s), s16 endFrame (e), * s16 topOptionBranch (y), s16 bottomOptionBranch (n) * FORMAT * iiiissss eeee0003 yyyynnnn * size = 0xC */ -#define CS_TEXT_TYPE_3(messageId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \ - CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, CS_TEXTBOX_TYPE_3, topOptionBranch, bottomOptionBranch) +#define CS_TEXT_TYPE_3(textId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \ + CS_TEXT(textId, startFrame, endFrame, CS_TEXT_TYPE_3, topOptionBranch, bottomOptionBranch) /** - * If Player has all 4 bosses' remains then alternativeMessageId is used, otherwise defaultMessageId is used + * If Player has all 4 bosses' remains then alternativeTextId is used, otherwise defaultTextId is used * ARGS - * s16 defaultMessageId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeMessageId (a) + * s16 defaultTextId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeTextId (a) * FORMAT * ddddssss eeee0004 aaaaFFFF * size = 0xC */ -#define CS_TEXT_BOSSES_REMAINS(defaultMessageId, startFrame, endFrame, alternativeMessageId) \ - CS_TEXT_DISPLAY_TEXTBOX(defaultMessageId, startFrame, endFrame, CS_TEXTBOX_TYPE_BOSSES_REMAINS, alternativeMessageId, 0xFFFF) +#define CS_TEXT_BOSSES_REMAINS(defaultTextId, startFrame, endFrame, alternativeTextId) \ + CS_TEXT(defaultTextId, startFrame, endFrame, CS_TEXT_TYPE_BOSSES_REMAINS, alternativeTextId, 0xFFFF) /** - * If Player has every non-transformation mask then alternativeMessageId is used, otherwise defaultMessageId is used + * If Player has every non-transformation mask then alternativeTextId is used, otherwise defaultTextId is used * ARGS - * s16 defaultMessageId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeMessageId (a) + * s16 defaultTextId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeTextId (a) * FORMAT * ddddssss eeee0005 aaaaFFFF * size = 0xC */ -#define CS_TEXT_ALL_NORMAL_MASKS(defaultMessageId, startFrame, endFrame, alternativeMessageId) \ - CS_TEXT_DISPLAY_TEXTBOX(defaultMessageId, startFrame, endFrame, CS_TEXTBOX_TYPE_ALL_NORMAL_MASKS, alternativeMessageId, 0xFFFF) +#define CS_TEXT_ALL_NORMAL_MASKS(defaultTextId, startFrame, endFrame, alternativeTextId) \ + CS_TEXT(defaultTextId, startFrame, endFrame, CS_TEXT_TYPE_ALL_NORMAL_MASKS, alternativeTextId, 0xFFFF) /** * ARGS @@ -107,22 +113,57 @@ * size = 0xC */ #define CS_TEXT_NONE(startFrame, endFrame) \ - CS_TEXT_DISPLAY_TEXTBOX(0xFFFF, startFrame, endFrame, CS_TEXTBOX_TYPE_NONE, 0xFFFF, 0xFFFF) + CS_TEXT(0xFFFF, startFrame, endFrame, CS_TEXT_TYPE_NONE, 0xFFFF, 0xFFFF) /** * ARGS - * s32 entries (e) + * s32 numBytes (b) * FORMAT - * 0000005A eeeeeeee + * 0000005A bbbbbbbb * size = 0x8 */ -#define CS_CAMERA_LIST(entries) { CS_CMD_CAMERA }, { CMD_W(entries) } +#define CS_CAM_SPLINE_LIST(numBytes) { CS_CMD_CAMERA_SPLINE }, { CMD_W(numBytes) } -// TODO: Camera command macros. Requieres func_80161998 being decomped +/** + * ARGS + * s16 numEntries (e), s16 duration (d) + * FORMAT + * Capital U is Unused + * eeeeUUUU UUUUdddd + * size = 0x8 + */ +#define CS_CAM_SPLINE(numEntries, unused0, unused1, duration) \ + { CMD_HH(numEntries, unused0) }, { CMD_HH(unused1, duration) } + +/** + * ARGS + * u8 interpType (i), u8 weight (2), s16 duration (d), Vec3s pos (x/y/z), s16 relativeTo (r) + * FORMAT + * ii22dddd xxxxyyyy zzzzrrrr + * size = 0xC + */ +#define CS_CAM_POINT(interpType, weight, duration, posX, posY, posZ, relativeTo) \ + { CMD_BBH(interpType, weight, duration) }, { CMD_HH(posX, posY) }, { CMD_HH(posZ, relativeTo) } + +/** + * ARGS + * s16 roll (r), s16 fov (f) + * FORMAT + * Capital U is Unused + * UUUUrrrr ffffUUUU + * size = 0x8 + */ +#define CS_CAM_MISC(unused0, roll, fov, unused1) \ + { CMD_HH(unused0, roll) }, { CMD_HH(fov, unused1) } + +// First half-word is read from as `numEntries` in `CS_CAM_SPLINE()` +#define CS_CAM_END() { CMD_HH(0xFFFF, 4) } /** + * Declares a list of `CS_MISC` entries. + * * ARGS * s32 entries (e) * FORMAT @@ -132,36 +173,46 @@ #define CS_MISC_LIST(entries) { CS_CMD_MISC }, { CMD_W(entries) } /** + * Various miscellaneous commands. + * @see `CutsceneMiscType` enum for the different types of commands. + * @note setting `endFrame` to same value as `startFrame` will not behave as expected. + * For commands that only need to last one frame, set `endFrame` to `startFrame + 1`. + * * ARGS - * s16 unk (u), s16 startFrame (s), s16 endFrame (e) + * s16 type (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * uuuussss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_MISC(unk, startFrame, endFrame, unk_06) \ - { CMD_HH(unk, startFrame) }, { CMD_HH(endFrame, unk_06) } +#define CS_MISC(type, startFrame, endFrame, unused0) \ + { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, unused0) } /** + * Declares a list of `CS_LIGHT_SETTING` entries. + * * ARGS * s32 entries (e) * FORMAT * 00000097 eeeeeeee * size = 0x8 */ -#define CS_LIGHTING_LIST(entries) { CS_CMD_SET_LIGHTING }, { CMD_W(entries) } +#define CS_LIGHT_SETTING_LIST(entries) { CS_CMD_LIGHT_SETTING }, { CMD_W(entries) } /** + * Changes the environment lights to the specified setting. + * The lighting change will take place immediately with no blending. + * * ARGS - * s16 setting (m), s16 startFrame (s), s16 endFrame (e) + * s16 setting (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_LIGHTING(setting, startFrame, endFrame) \ - { CMD_HH(setting, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_LIGHT_SETTING(lightSetting, startFrame, endFrame) \ + { CMD_BBH(0, (lightSetting + 1), startFrame) }, { CMD_HH(endFrame, endFrame) } /** @@ -171,18 +222,18 @@ * 00000098 eeeeeeee * size = 0x8 */ -#define CS_SCENE_TRANS_FX_LIST(entries) { CS_CMD_SCENE_TRANS_FX }, { CMD_W(entries) } +#define CS_TRANSITION_LIST(entries) { CS_CMD_TRANSITION }, { CMD_W(entries) } /** * ARGS - * s16 transitionType (m), s16 startFrame (s), s16 endFrame (e) + * s16 type (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_SCENE_TRANS_FX(transitionType, startFrame, endFrame) \ - { CMD_HH(transitionType, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_TRANSITION(type, startFrame, endFrame) \ + { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) } /** @@ -190,20 +241,20 @@ * s32 entries (e) * FORMAT * 00000099 eeeeeeee - * size = 0x08 + * size = 0x8 */ -#define CS_MOTIONBLUR_LIST(entries) { CS_CMD_MOTIONBLUR }, { CMD_W(entries) } +#define CS_MOTION_BLUR_LIST(entries) { CS_CMD_MOTION_BLUR }, { CMD_W(entries) } /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 type (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_MOTIONBLUR(base, startFrame, endFrame) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_MOTION_BLUR(type, startFrame, endFrame) \ + { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) } /** @@ -213,18 +264,18 @@ * 0000009A eeeeeeee * size = 0x8 */ -#define CS_GIVETATL_LIST(entries) { CS_CMD_GIVETATL }, { CMD_W(entries) } +#define CS_GIVE_TATL_LIST(entries) { CS_CMD_GIVE_TATL }, { CMD_W(entries) } /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 giveTatl (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_GIVETATL(base, startFrame, endFrame) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_GIVE_TATL(giveTatl, startFrame, endFrame) \ + { CMD_HH(giveTatl, startFrame) }, { CMD_HH(endFrame, endFrame) } /** @@ -234,75 +285,66 @@ * 0000009B eeeeeeee * size = 0x8 */ -#define CS_FADESCREEN_LIST(entries) { CS_CMD_FADESCREEN }, { CMD_W(entries) } +#define CS_TRANSITION_GENERAL_LIST(entries) { CS_CMD_TRANSITION_GENERAL }, { CMD_W(entries) } /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e), + * s16 type (t), s16 startFrame (s), s16 endFrame (e), * u8 red (r), u8 green (g), blue (b) * FORMAT * Capital U is Unused - * mmmmssss eeeerrgg bbUUUUUU + * ttttssss eeeerrgg bbUUUUUU * size = 0x0C */ -#define CS_FADESCREEN(base, startFrame, endFrame, red, green, blue) \ - { CMD_HH(base, startFrame) }, { CMD_HBB(endFrame, red, green) }, { CMD_BBBB(blue, 0, 0, 0) } - - -/** - * ARGS - * s32 entries (e) - * FORMAT - * 0000009C eeeeeeee - * size = 0x8 - */ -#define CS_FADESEQ_LIST(entries) { CS_CMD_FADESEQ }, { CMD_W(entries) } - -/** - * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) - * FORMAT - * Capital U is Unused - * mmmmssss eeeeUUUU UUUUUUUU - * size = 0x0C - */ -#define CS_FADESEQ(base, startFrame, endFrame) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, 0) }, { CMD_W(0) } +#define CS_TRANSITION_GENERAL(type, startFrame, endFrame, red, green, blue) \ + { CMD_HH(type, startFrame) }, { CMD_HBB(endFrame, red, green) }, { CMD_BBBB(blue, 0, 0, 0) } /** + * Declares a list of `CS_TIME` entries. + * * ARGS * s32 entries (e) * FORMAT * 0000009D eeeeeeee * size = 0x8 */ -#define CS_TIME_LIST(entries) { CS_CMD_SETTIME }, { CMD_W(entries) } +#define CS_TIME_LIST(entries) { CS_CMD_TIME }, { CMD_W(entries) } /** + * Sets the time of day. + * Both the day time and skybox time are set by this command. + * @note `endFrame` is not used in the implementation of the command, so its value does not matter + * * ARGS - * s16 unk (u), s16 startFrame (s), s16 endFrame (e), s8 hour (h), s8 min (m) + * s16 startFrame (s), s16 endFrame (e), s8 hour (h), s8 min (m) * FORMAT * Capital U is Unused - * uuuussss eeeehhmm UUUUUUUU + * UUUUssss eeeehhmm UUUUUUUU * size = 0xC */ -#define CS_TIME(unk, startFrame, endFrame, hour, min, unused) \ - { CMD_HH(unk, startFrame) }, { CMD_HBB(endFrame, hour, min) }, { CMD_W(unused) } +#define CS_TIME(unused0, startFrame, endFrame, hour, min) \ + { CMD_HH(unused0, startFrame) }, { CMD_HBB(endFrame, hour, min) }, { CMD_W(0) } /** + * Declares a list of `CS_ACTOR_CUE` entries. + * * ARGS * s32 cmdType (c), s32 entries (e) * FORMAT * cccccccc eeeeeeee * size = 0x8 */ -#define CS_ACTOR_ACTION_LIST(cmdType, entries) { CMD_W(cmdType) }, { CMD_W(entries) } +#define CS_ACTOR_CUE_LIST(cmdType, entries) { CMD_W(cmdType) }, { CMD_W(entries) } /** + * Defines a cue that an actor can listen for. + * The actor can choose whether or not to use the position and rotation data supplied to it. + * The cue `id` is a number that has an actor-specific meaning. + * * ARGS - * s16 npcAction (a), s16 startFrame (s), s16 endFrame (e), + * s16 id (a), s16 startFrame (s), s16 endFrame (e), * s16 rotX (u), s16 rotY (v), s16 rotZ (w), * s32 startX (i), s32 startY (j), s32 startZ (k), * s32 endX (l), s32 endY (m), s32 endZ (n), @@ -311,25 +353,29 @@ * aaaassss eeeeuuuu vvvvwwww iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmm nnnnnnnn xxxxxxxx yyyyyyyy zzzzzzzz * size = 0x30 */ -#define CS_ACTOR_ACTION(npcAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \ - { CMD_HH(npcAction, startFrame) }, { CMD_HH(endFrame, rotX) }, { CMD_HH(rotY, rotZ) }, \ +#define CS_ACTOR_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \ + { CMD_HH(id, startFrame) }, { CMD_HH(endFrame, rotX) }, { CMD_HH(rotY, rotZ) }, \ { CMD_W(startX) }, { CMD_W(startY) }, { CMD_W(startZ) }, \ { CMD_W(endX) }, { CMD_W(endY) }, { CMD_W(endZ) }, \ { CMD_F(normX) }, { CMD_F(normY) }, { CMD_F(normZ) } /** + * Declares a list of `CS_PLAYER_CUE` entries. + * * ARGS * s32 cmdType (c), s32 entries (e) * FORMAT * 000000C8 eeeeeeee * size = 0x8 */ -#define CS_PLAYER_ACTION_LIST(entries) { CS_CMD_SET_PLAYER_ACTION }, { CMD_W(entries) } +#define CS_PLAYER_CUE_LIST(entries) { CS_CMD_PLAYER_CUE }, { CMD_W(entries) } /** + * A player cue is the same as `CS_ACTOR_CUE` but is specifically for player. + * * ARGS - * s16 playerAction (a), s16 startFrame (s), s16 endFrame (e), + * s16 id (a), s16 startFrame (s), s16 endFrame (e), * s16 rotX (u), s16 rotY (v), s16 rotZ (w), * s32 startX (i), s32 startY (j), s32 startZ (k), * s32 endX (l), s32 endY (m), s32 endZ (n), @@ -338,113 +384,87 @@ * aaaassss eeeeuuuu vvvvwwww iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmm nnnnnnnn xxxxxxxx yyyyyyyy zzzzzzzz * size = 0x30 */ -#define CS_PLAYER_ACTION(playerAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \ - CS_ACTOR_ACTION(playerAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) +#define CS_PLAYER_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \ + CS_ACTOR_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) /** + * Declares a list of `CS_START_SEQ` entries. + * * ARGS * s32 entries (e) * FORMAT * 0000012C eeeeeeee * size = 0x8 */ -#define CS_PLAYSEQ_LIST(entries) { CS_CMD_PLAYSEQ }, { CMD_W(entries) } +#define CS_START_SEQ_LIST(entries) \ + { CS_CMD_START_SEQ }, { CMD_W(entries) } /** + * Starts a sequence at the specified time. + * @note `endFrame` is not used in the implementation of the command, so its value does not matter + * * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 seqId (i), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 - */ -#define CS_PLAYSEQ(sequence, startFrame, endFrame) \ - { CMD_HH(sequence, startFrame) }, { CMD_HH(endFrame, endFrame) } - - -/** - * ARGS - * s32 entries (e) - * FORMAT - * 00000130 eeeeeeee + * iiiissss eeeeUUUU * size = 0x8 */ -#define CS_SCENE_UNK_130_LIST(entries) { CS_CMD_130 }, { CMD_W(entries) } - -/** - * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) - * FORMAT - * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x30 - */ -#define CS_SCENE_UNK_130(base, startFrame, endFrame, unk_06) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) } - - -/** - * ARGS - * s32 entries (e) - * FORMAT - * 00000131 eeeeeeee - * size = 0x8 - */ -#define CS_SCENE_UNK_131_LIST(entries) { CS_CMD_131 }, { CMD_W(entries) } - -/** - * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) - * FORMAT - * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 - */ -#define CS_SCENE_UNK_131(base, startFrame, endFrame, unk_06) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) } - - -/** - * ARGS - * s32 entries (e) - * FORMAT - * 00000132 eeeeeeee - * size = 0x8 - */ -#define CS_SCENE_UNK_132_LIST(entries) { CS_CMD_132 }, { CMD_W(entries) } - -/** - * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) - * FORMAT - * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 - */ -#define CS_SCENE_UNK_132(base, startFrame, endFrame) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_START_SEQ(seqId, startFrame, endFrame) \ + { CMD_HH((seqId + 1), startFrame) }, { CMD_HH(endFrame, endFrame) } /** + * Declares a list of `CS_STOP_SEQ` entries. + * * ARGS * s32 entries (e) * FORMAT * 00000133 eeeeeeee * size = 0x8 */ -#define CS_STOPSEQ_LIST(entries) { CS_CMD_STOPSEQ }, { CMD_W(entries) } +#define CS_STOP_SEQ_LIST(entries) { CS_CMD_STOP_SEQ }, { CMD_W(entries) } /** + * Stops a sequence at the specified time. + * * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 seqId (i), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * iiiissss eeeeUUUU + * size = 0x8 */ -#define CS_STOPSEQ(base, startFrame, endFrame, unk_06) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) } +#define CS_STOP_SEQ(seqId, startFrame, endFrame, unk_06) \ + { CMD_HH((seqId + 1), startFrame) }, { CMD_HH(endFrame, unk_06) } + + +/** + * Stops a sequence at the specified time. + * @note `endFrame` is not used in the implementation of the command, so its value does not matter + * + * ARGS + * s32 entries (e) + * FORMAT + * 0000009C eeeeeeee + * size = 0x8 + */ +#define CS_FADE_OUT_SEQ_LIST(entries) { CS_CMD_FADE_OUT_SEQ }, { CMD_W(entries) } + +/** + * Fade out the sequence that is playing on the specified sequence player, over the specified frame range. + * @see `CutsceneFadeOutSeqPlayer` + * + * ARGS + * s16 seqPlayer (p), s16 startFrame (s), s16 endFrame (e) + * FORMAT + * Capital U is Unused + * ppppssss eeeeUUUU UUUUUUUU + * size = 0x0C + */ +#define CS_FADE_OUT_SEQ(seqPlayer, startFrame, endFrame) \ + { CMD_HH(seqPlayer, startFrame) }, { CMD_HH(endFrame, 0) }, { CMD_W(0) } /** @@ -454,18 +474,18 @@ * 00000134 eeeeeeee * size = 0x8 */ -#define CS_PLAYAMBIENCE_LIST(entries) { CS_CMD_PLAYAMBIENCE }, { CMD_W(entries) } +#define CS_START_AMBIENCE_LIST(entries) { CS_CMD_START_AMBIENCE }, { CMD_W(entries) } /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * UUUUssss eeeeUUUU + * size = 0x8 */ -#define CS_PLAYAMBIENCE(base, startFrame, endFrame, unk_06) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) } +#define CS_START_AMBIENCE(unused0, startFrame, endFrame) \ + { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) } /** @@ -475,39 +495,106 @@ * 00000135 eeeeeeee * size = 0x8 */ -#define CS_FADEAMBIENCE_LIST(entries) { CS_CMD_FADEAMBIENCE }, { CMD_W(entries) } +#define CS_FADE_OUT_AMBIENCE_LIST(entries) { CS_CMD_FADE_OUT_AMBIENCE }, { CMD_W(entries) } /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * UUUUssss eeeeUUUU + * size = 0x8 */ -#define CS_FADEAMBIENCE(base, startFrame, endFrame, unk_06) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) } +#define CS_FADE_OUT_AMBIENCE(unused0, startFrame, endFrame) \ + { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) } /** * ARGS * s32 entries (e) * FORMAT - * 0000015E eeeeeeee + * 00000132 eeeeeeee * size = 0x8 */ -#define CS_TERMINATOR_LIST(entries) { CS_CMD_TERMINATOR }, { CMD_W(entries) } +#define CS_MODIFY_SEQ_LIST(entries) { CS_CMD_MODIFY_SEQ }, { CMD_W(entries) } /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 type (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_TERMINATOR(base, startFrame, endFrame) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_MODIFY_SEQ(type, startFrame, endFrame) \ + { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) } + + +/** + * ARGS + * s32 entries (e) + * FORMAT + * 00000130 eeeeeeee + * size = 0x8 + */ +#define CS_SFX_REVERB_INDEX_2_LIST(entries) { CS_CMD_SFX_REVERB_INDEX_2 }, { CMD_W(entries) } + +/** + * ARGS + * s16 startFrame (s), s16 endFrame (e) + * FORMAT + * Capital U is Unused + * UUUUssss eeeeUUUU + * size = 0x30 + */ +#define CS_SFX_REVERB_INDEX_2(unused0, startFrame, endFrame) \ + { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) } + + +/** + * ARGS + * s32 entries (e) + * FORMAT + * 00000131 eeeeeeee + * size = 0x8 + */ +#define CS_SFX_REVERB_INDEX_1_LIST(entries) { CS_CMD_SFX_REVERB_INDEX_1 }, { CMD_W(entries) } + +/** + * ARGS + * s16 startFrame (s), s16 endFrame (e) + * FORMAT + * Capital U is Unused + * UUUUssss eeeeUUUU + * size = 0x8 + */ +#define CS_SFX_REVERB_INDEX_1(unused0, startFrame, endFrame) \ + { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) } + + +/** + * Declares a list of `CS_DESTINATION` entries. + * + * ARGS + * s32 entries (e) + * FORMAT + * 0000015E eeeeeeee + * size = 0x8 + */ +#define CS_DESTINATION_LIST(entries) { CS_CMD_DESTINATION }, { CMD_W(entries) } + +/** + * Sends the player to a new destination using the entry defined in `CutsceneScriptEntry`. + * + * ARGS + * s16 type (t), s16 startFrame (s), s16 endFrame (e) + * FORMAT + * Capital U is Unused + * ttttssss eeeeUUUU + * size = 0x8 + */ +#define CS_DESTINATION(type, startFrame, endFrame) \ + { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) } /** @@ -521,14 +608,14 @@ /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 type (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_CHOOSE_CREDITS_SCENES(base, startFrame, endFrame) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) } +#define CS_CHOOSE_CREDITS_SCENES(type, startFrame, endFrame) \ + { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) } /** @@ -542,14 +629,14 @@ /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 type (t), s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * ttttssss eeeeUUUU + * size = 0x8 */ -#define CS_RUMBLE(base, startFrame, endFrame, intensity, decayTimer, decayStep) \ - { CMD_HH(base, startFrame) }, { CMD_HBB(endFrame, intensity, decayTimer) }, { CMD_BBBB(decayStep, 0, 0, 0) } +#define CS_RUMBLE(type, startFrame, endFrame, intensity, decayTimer, decayStep) \ + { CMD_HH(type, startFrame) }, { CMD_HBB(endFrame, intensity, decayTimer) }, { CMD_BBBB(decayStep, 0, 0, 0) } /** @@ -563,14 +650,14 @@ /** * ARGS - * s16 base (m), s16 startFrame (s), s16 endFrame (e) + * s16 startFrame (s), s16 endFrame (e) * FORMAT * Capital U is Unused - * mmmmssss eeeeUUUU - * size = 0x08 + * UUUUssss eeeeUUUU + * size = 0x8 */ -#define CS_UNK_DATA(base, startFrame, endFrame, unk_06) \ - { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) } +#define CS_UNK_DATA(unused0, startFrame, endFrame, unk_06) \ + { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, unk_06) } /** @@ -578,4 +665,47 @@ */ #define CS_END() { CMD_W(0xFFFFFFFF) } +// TODO: Fix ZAPD and delete these +#define CS_ACTOR_ACTION_LIST CS_ACTOR_CUE_LIST +#define CS_ACTOR_ACTION CS_ACTOR_CUE +#define CS_PLAYER_ACTION_LIST CS_PLAYER_CUE_LIST +#define CS_PLAYER_ACTION CS_PLAYER_CUE +#define CS_LIGHTING_LIST CS_LIGHT_SETTING_LIST +#define CS_CAMERA_LIST CS_CAM_SPLINE_LIST +#define CS_TEXT_DISPLAY_TEXTBOX CS_TEXT +#define CS_TEXT_LEARN_SONG CS_TEXT_OCARINA_ACTION +#define CS_SCENE_TRANS_FX_LIST CS_TRANSITION_LIST +#define CS_SCENE_TRANS_FX CS_TRANSITION +#define CS_GIVETATL_LIST CS_GIVE_TATL_LIST +#define CS_GIVETATL CS_GIVE_TATL +#define CS_PLAYSEQ_LIST CS_START_SEQ_LIST +#define CS_STOPSEQ_LIST CS_STOP_SEQ_LIST +#define CS_FADESEQ_LIST CS_FADE_OUT_SEQ_LIST +#define CS_FADESEQ CS_FADE_OUT_SEQ +#define CS_PLAYAMBIENCE_LIST CS_START_AMBIENCE_LIST +#define CS_PLAYAMBIENCE CS_START_AMBIENCE +#define CS_FADEAMBIENCE_LIST CS_FADE_OUT_AMBIENCE_LIST +#define CS_FADEAMBIENCE CS_FADE_OUT_AMBIENCE +#define CS_SCENE_UNK_130_LIST CS_SFX_REVERB_INDEX_2_LIST +#define CS_SCENE_UNK_130 CS_SFX_REVERB_INDEX_2 +#define CS_SCENE_UNK_131_LIST CS_SFX_REVERB_INDEX_1_LIST +#define CS_SCENE_UNK_131 CS_SFX_REVERB_INDEX_1 +#define CS_SCENE_UNK_132_LIST CS_MODIFY_SEQ_LIST +#define CS_SCENE_UNK_132 CS_MODIFY_SEQ +#define CS_MOTIONBLUR_LIST CS_MOTION_BLUR_LIST +#define CS_MOTIONBLUR CS_MOTION_BLUR +#define CS_FADESCREEN_LIST CS_TRANSITION_GENERAL_LIST +#define CS_FADESCREEN CS_TRANSITION_GENERAL +#define CS_TERMINATOR_LIST CS_DESTINATION_LIST +#define CS_TERMINATOR CS_DESTINATION + +#define CS_PLAYSEQ(seqId, startFrame, endFrame) \ +CS_START_SEQ((seqId)-1, startFrame, endFrame) + +#define CS_STOPSEQ(seqId, startFrame, endFrame, unk_06) \ +CS_STOP_SEQ((seqId)-1, startFrame, endFrame, unk_06) + +#define CS_LIGHTING(lightSetting, startFrame, endFrame) \ +CS_LIGHT_SETTING((lightSetting)-1, startFrame, endFrame) + #endif diff --git a/include/z64player.h b/include/z64player.h index 27a586555..54894893f 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -535,8 +535,8 @@ typedef enum PlayerCsMode { /* 0x03 */ PLAYER_CSMODE_3, /* 0x04 */ PLAYER_CSMODE_4, /* 0x05 */ PLAYER_CSMODE_5, - /* 0x06 */ PLAYER_CSMODE_6, - /* 0x07 */ PLAYER_CSMODE_7, + /* 0x06 */ PLAYER_CSMODE_END, + /* 0x07 */ PLAYER_CSMODE_WAIT, /* 0x08 */ PLAYER_CSMODE_8, /* 0x09 */ PLAYER_CSMODE_9, /* 0x0A */ PLAYER_CSMODE_10, @@ -1018,7 +1018,7 @@ typedef struct Player { /* 0xA7C */ Actor* boomerangActor; /* 0xA80 */ Actor* tatlActor; /* 0xA84 */ s16 tatlTextId; - /* 0xA86 */ s8 unk_A86; // actorCutsceneIndex? + /* 0xA86 */ s8 csId; /* 0xA87 */ s8 exchangeItemId; // PlayerItemAction enum /* 0xA88 */ Actor* talkActor; /* 0xA8C */ f32 talkActorDistance; diff --git a/include/z64save.h b/include/z64save.h index 362a16e92..1f59fea01 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -299,7 +299,7 @@ typedef struct Save { /* 0x05 */ u8 isFirstCycle; // "opening_flag" /* 0x06 */ u8 unk_06; /* 0x07 */ u8 linkAge; // "link_age" - /* 0x08 */ s32 cutscene; // "day_time" + /* 0x08 */ s32 cutsceneIndex; // "day_time" /* 0x0C */ u16 time; // "zelda_time" /* 0x0E */ u16 owlSaveLocation; /* 0x10 */ s32 isNight; // "asahiru_fg" @@ -707,7 +707,7 @@ typedef enum { #define WEEKEVENTREG_20_01 PACK_WEEKEVENTREG_FLAG(20, 0x01) // woodfall temple purification cutscene watched -#define WEEKEVENTREG_20_02 PACK_WEEKEVENTREG_FLAG(20, 0x02) +#define WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE PACK_WEEKEVENTREG_FLAG(20, 0x02) #define WEEKEVENTREG_20_04 PACK_WEEKEVENTREG_FLAG(20, 0x04) #define WEEKEVENTREG_20_08 PACK_WEEKEVENTREG_FLAG(20, 0x08) @@ -851,7 +851,7 @@ typedef enum { #define WEEKEVENTREG_33_40 PACK_WEEKEVENTREG_FLAG(33, 0x40) // Mountain village is unfrozen -#define WEEKEVENTREG_33_80 PACK_WEEKEVENTREG_FLAG(33, 0x80) +#define WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE PACK_WEEKEVENTREG_FLAG(33, 0x80) // Spoken to MINIFROG_YELLOW #define WEEKEVENTREG_34_01 PACK_WEEKEVENTREG_FLAG(34, 0x01) @@ -1015,7 +1015,7 @@ typedef enum { #define WEEKEVENTREG_52_10 PACK_WEEKEVENTREG_FLAG(52, 0x10) // cleared Stone Tower Temple -#define WEEKEVENTREG_52_20 PACK_WEEKEVENTREG_FLAG(52, 0x20) +#define WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE PACK_WEEKEVENTREG_FLAG(52, 0x20) #define WEEKEVENTREG_52_40 PACK_WEEKEVENTREG_FLAG(52, 0x40) #define WEEKEVENTREG_52_80 PACK_WEEKEVENTREG_FLAG(52, 0x80) @@ -1047,7 +1047,7 @@ typedef enum { #define WEEKEVENTREG_55_40 PACK_WEEKEVENTREG_FLAG(55, 0x40) // Gyorg has been defeated -#define WEEKEVENTREG_55_80 PACK_WEEKEVENTREG_FLAG(55, 0x80) +#define WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE PACK_WEEKEVENTREG_FLAG(55, 0x80) #define WEEKEVENTREG_56_01 PACK_WEEKEVENTREG_FLAG(56, 0x01) #define WEEKEVENTREG_56_02 PACK_WEEKEVENTREG_FLAG(56, 0x02) @@ -1576,7 +1576,7 @@ void Sram_IncrementDay(void); u16 Sram_CalcChecksum(void* data, size_t count); void Sram_InitNewSave(void); void Sram_InitDebugSave(void); -void func_80144A94(SramContext* sramCtx); +void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx); void Sram_OpenSave(struct FileSelectState* fileSelect, SramContext* sramCtx); void func_8014546C(SramContext* sramCtx); void func_801457CC(struct FileSelectState* fileSelect, SramContext* sramCtx); diff --git a/include/z64scene.h b/include/z64scene.h index 84b405b90..c31b7ce58 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -177,9 +177,9 @@ typedef struct { typedef struct { /* 0x0 */ u8 code; - /* 0x1 */ u8 sceneCsCount; + /* 0x1 */ u8 scriptListCount; /* 0x4 */ void* segment; -} SCmdCutsceneList; // size = 0x8 +} SCmdCsScriptList; // size = 0x8 typedef struct { /* 0x0 */ u8 code; @@ -202,7 +202,7 @@ typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 num; /* 0x4 */ void* segment; -} SCmdCutsceneActorList; // size = 0x8 +} SCmdCutsceneList; // size = 0x8 typedef struct { /* 0x0 */ u8 code; @@ -531,11 +531,11 @@ typedef union { /* Command: 0x14 */ SCmdEndMarker endMarker; /* Command: 0x15 */ SCmdSoundSettings soundSettings; /* Command: 0x16 */ SCmdEchoSettings echoSettings; - /* Command: 0x17 */ SCmdCutsceneList cutsceneList; + /* Command: 0x17 */ SCmdCsScriptList scriptList; /* Command: 0x18 */ SCmdAltHeaders altHeaders; /* Command: 0x19 */ SCmdRegionVisited regionVisited; /* Command: 0x1A */ SCmdTextureAnimations textureAnimations; - /* Command: 0x1B */ SCmdCutsceneActorList cutsceneActorList; + /* Command: 0x1B */ SCmdCutsceneList cutsceneList; /* Command: 0x1C */ SCmdMinimapSettings minimapSettings; /* Command: 0x1D */ // Unused /* Command: 0x1E */ SCmdMinimapChests minimapChests; @@ -822,6 +822,15 @@ typedef enum { */ #define ENTRANCE(scene, spawn) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4)) +/* +* Entrances used in cutscene destination. Includes scene layer that's immediately applied to `nextCutsceneIndex` and removed. +* See `CutsceneScriptEntry.nextEntrance` +* 0xFE00: Index into sSceneEntranceTable (Scene) +* 0x01F0: Index into the scenes specific entrance table (Spawn) +* 0x000F: Index into the specific entrance table (Layer) +*/ +#define CS_ENTRANCE(scene, spawn, layer) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4) | ((layer) & 0xF)) + // SceneTableEntry draw configs typedef enum { /* 0 */ SCENE_DRAW_CFG_DEFAULT, @@ -867,7 +876,7 @@ typedef enum { /* 0x14 */ SCENE_CMD_ID_END, /* 0x15 */ SCENE_CMD_ID_SOUND_SETTINGS, /* 0x16 */ SCENE_CMD_ID_ECHO_SETTINGS, - /* 0x17 */ SCENE_CMD_ID_CUTSCENE_LIST, + /* 0x17 */ SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST, /* 0x18 */ SCENE_CMD_ID_ALTERNATE_HEADER_LIST, /* 0x19 */ SCENE_CMD_ID_SET_REGION_VISITED, /* 0x1A */ SCENE_CMD_ID_ANIMATED_MATERIAL_LIST, @@ -952,21 +961,20 @@ typedef enum { #define SCENE_CMD_ECHO_SETTINGS(echo) \ { SCENE_CMD_ID_ECHO_SETTINGS, 0, CMD_BBBB(0, 0, 0, echo) } -#define SCENE_CMD_CUTSCENE_LIST(numCutscene, cutsceneList) \ - { SCENE_CMD_ID_CUTSCENE_LIST, numCutscene, CMD_PTR(cutsceneList) } +#define SCENE_CMD_CUTSCENE_SCRIPT_LIST(numEntries, scriptList) \ + { SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST, numEntries, CMD_PTR(scriptList) } #define SCENE_CMD_ALTERNATE_HEADER_LIST(alternateHeaderList) \ { SCENE_CMD_ID_ALTERNATE_HEADER_LIST, 0, CMD_PTR(alternateHeaderList) } -#define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED // TODO: ZAPD Capatability #define SCENE_CMD_SET_REGION_VISITED() \ { SCENE_CMD_ID_SET_REGION_VISITED, 0, CMD_W(0) } #define SCENE_CMD_ANIMATED_MATERIAL_LIST(matAnimList) \ { SCENE_CMD_ID_ANIMATED_MATERIAL_LIST, 0, CMD_PTR(matAnimList) } -#define SCENE_CMD_ACTOR_CUTSCENE_LIST(actorCutsceneCount, actorCutsceneList) \ - { SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, actorCutsceneCount, CMD_PTR(actorCutsceneList) } +#define SCENE_CMD_ACTOR_CUTSCENE_LIST(numEntries, actorCutsceneList) \ + { SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, numEntries, CMD_PTR(actorCutsceneList) } #define SCENE_CMD_MINIMAP_INFO(minimapInfo) \ { SCENE_CMD_ID_MINIMAP_INFO, 0, CMD_PTR(minimapInfo) } @@ -974,4 +982,8 @@ typedef enum { #define SCENE_CMD_MINIMAP_COMPASS_ICON_INFO(compassIconCount, compassIconInfo) \ { SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO, compassIconCount, CMD_PTR(compassIconInfo) } + // TODO: ZAPD Capatability +#define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED +#define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST + #endif diff --git a/include/z64subs.h b/include/z64subs.h index cc0e7ba2f..ad2b7044f 100644 --- a/include/z64subs.h +++ b/include/z64subs.h @@ -11,9 +11,9 @@ extern Vec3f gOneVec3f; #define SUBS_TIME_PATHING_ORDER 3 typedef enum { - /* 0 */ SUBS_CUTSCENE_SET_UNK_LINK_FIELDS, + /* 0 */ SUBS_CUTSCENE_WITH_PLAYER, /* 1 */ SUBS_CUTSCENE_NORMAL, - /* 2 */ SUBS_CUTSCENE_SET_FLAG + /* 2 */ SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG } SubSCutsceneType; //! TODO: rename based on func_8013E748 and func_800B8500 @@ -153,8 +153,8 @@ s32 SubS_ActorPathing_SetNextPoint(struct PlayState* play, ActorPathing* actorPa void SubS_ChangeAnimationBySpeedInfo(SkelAnime* skelAnime, AnimationSpeedInfo* animationInfo, s32 nextAnimIndex, s32* curAnimIndex); -s32 SubS_StartActorCutscene(Actor* actor, s16 nextCutscene, s16 curCutscene, s32 type); -s32 SubS_FillCutscenesList(Actor* actor, s16 cutscenes[], s16 numCutscenes); +s32 SubS_StartCutscene(Actor* actor, s16 nextCsId, s16 curCsId, s32 type); +s32 SubS_FillCutscenesList(Actor* actor, s16 csIdList[], s16 numCutscenes); void SubS_ConstructPlane(Vec3f* point, Vec3f* unitVec, Vec3s* rot, Plane* plane); s32 SubS_LineSegVsPlane(Vec3f* point, Vec3s* rot, Vec3f* unitVec, Vec3f* linePointA, Vec3f* linePointB, Vec3f* intersect); diff --git a/spec b/spec index 417609b6f..481fd099d 100644 --- a/spec +++ b/spec @@ -470,7 +470,6 @@ beginseg include "build/data/code/z_eventmgr.bss.o" include "build/src/code/z_fcurve_data.o" include "build/src/code/z_fcurve_data_skelanime.o" - include "build/data/code/code_801BD830.data.o" include "build/src/code/z_fireobj.o" include "build/src/code/z_game_dlftbls.o" include "build/src/code/z_horse.o" @@ -539,8 +538,8 @@ beginseg include "build/src/code/z_message_staff.o" include "build/src/code/z_player_call.o" include "build/src/code/z_shrink_window.o" - include "build/src/code/db_camera.o" - include "build/data/code/db_camera.bss.o" + include "build/src/code/cutscene_camera.o" + include "build/data/code/cutscene_camera.bss.o" include "build/src/code/z_kaleido_manager.o" include "build/src/code/z_kaleido_scope_call.o" include "build/src/code/z_fbdemo_dlftbls.o" diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index 5af712e99..d107e65b7 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -3357,7 +3357,7 @@ void AudioOcarina_Update(void) { #define OCARINA_INSTRUMENT_OOT_MAX 7 -void AudioOcarina_PlayLongScarecrowAfterCredits(void) { +void AudioOcarina_PlayLongScarecrowSong(void) { static u8 sScarecrowAfterCreditsState = 0; static u8 sScarecrowAfterCreditsIntrumentId = OCARINA_INSTRUMENT_DEFAULT; static u16 sScarecrowAfterCreditsTimer = 1200; diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index 2b8a88728..6c63e2a70 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "buffers.h" diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index aa7ecdfe1..3517b97ae 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" u8 sYaz0DataBuffer[0x400]; diff --git a/src/code/cutscene_camera.c b/src/code/cutscene_camera.c new file mode 100644 index 000000000..d5f028b94 --- /dev/null +++ b/src/code/cutscene_camera.c @@ -0,0 +1,380 @@ +#include "global.h" + +extern CutsceneCamera* sCurCsCamera; + +typedef s16 (*CsCamInterpolateCallback)(Vec3f*, f32*, s16*, CsCmdCamPoint*, CsCmdCamMisc*, CutsceneCameraInterp*); + +// function declarations +s16 func_80161180(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_8016237C(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_8016253C(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_80162A50(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_801623E4(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_80161C20(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_80161E4C(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_801620CC(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +s16 func_80163334(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc, + CutsceneCameraInterp* interp); +f32 func_80163660(Actor* actor); + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80161180.s") + +/** + * Initializes Cutscene Camera Info + */ +s32 CutsceneCamera_Init(Camera* camera, CutsceneCamera* csCamera) { + csCamera->camera = camera; + + csCamera->nextSplineTimer = csCamera->updateSplineTimer = 0; + csCamera->cmdIndex = 0; + csCamera->splineIndex = 0xFFFF; + csCamera->splineNeedsInit = true; + csCamera->state = CS_CAM_STATE_UPDATE_ALL; + + sCurCsCamera = csCamera; + + __osMemset(&csCamera->eyeInterp, 0, sizeof(CutsceneCameraInterp)); + __osMemset(&csCamera->atInterp, 0, sizeof(CutsceneCameraInterp)); + + csCamera->eyeInterp.unk_2D = csCamera->atInterp.unk_2D = 7; + + return 1; +} + +CsCamInterpolateCallback CutsceneCamera_Interpolate(u8 interpType) { + switch (interpType) { + case CS_CAM_INTERP_7: + default: + return func_80161180; + + case CS_CAM_INTERP_0: + return func_8016237C; + + case CS_CAM_INTERP_5: + return func_8016253C; + + case CS_CAM_INTERP_4: + return func_80162A50; + + case CS_CAM_INTERP_1: + return func_801623E4; + + case CS_CAM_INTERP_2: + return func_80161C20; + + case CS_CAM_INTERP_3: + return func_80161E4C; + + case CS_CAM_INTERP_6: + return func_801620CC; + } +} + +u8 CutsceneCamera_ProcessSpline(CutsceneCamera* csCamera) { + s32 sp5C; + f32* fov; + s16* roll; + CsCamInterpolateCallback interpHandler; + Player* player; + Actor* target; + s16 numPoints; + + sp5C = true; + if (csCamera->state == CS_CAM_STATE_DONE_SPLINE) { + return false; + } + + player = GET_PLAYER(csCamera->camera->play); + target = csCamera->camera->target; + + if (csCamera->eyeCmd[csCamera->atInterp.curPoint].interpType < + csCamera->atCmd[csCamera->eyeInterp.curPoint].interpType) { + sp5C = false; + } + + csCamera->eyeInterp.unk_00 = csCamera->camera->eye; + csCamera->atInterp.unk_00 = csCamera->camera->at; + + if (sp5C) { + fov = NULL; + } else { + fov = &csCamera->camera->fov; + } + + if (sp5C) { + roll = NULL; + } else { + roll = &csCamera->camera->roll; + } + + interpHandler = CutsceneCamera_Interpolate(csCamera->atCmd[csCamera->eyeInterp.curPoint].interpType); + + switch (csCamera->atCmd[csCamera->eyeInterp.curPoint].relativeTo) { + case CS_CAM_REL_2: + OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 2); + break; + + case CS_CAM_REL_3: + OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + break; + + case CS_CAM_REL_1: + OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + break; + + case CS_CAM_REL_4: + OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, 1); + break; + + case CS_CAM_REL_5: + OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, 2); + break; + + default: // CS_CAM_REL_0 + break; + } + + numPoints = interpHandler(&csCamera->camera->at, fov, roll, &csCamera->atCmd[csCamera->eyeInterp.curPoint], + &csCamera->miscCmd[csCamera->eyeInterp.curPoint], &csCamera->eyeInterp); + + switch (csCamera->atCmd[csCamera->eyeInterp.curPoint].relativeTo) { + case CS_CAM_REL_2: + OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 2); + break; + + case CS_CAM_REL_3: + OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + csCamera->camera->at.y += func_80163660(&player->actor); + break; + + case CS_CAM_REL_1: + OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + break; + + case CS_CAM_REL_4: + OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->at, &csCamera->camera->at, 1); + break; + + case CS_CAM_REL_5: + OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->at, &csCamera->camera->at, 2); + break; + + default: // CS_CAM_REL_0 + break; + } + + csCamera->eyeInterp.curPoint += numPoints; + + if (sp5C) { + fov = &csCamera->camera->fov; + } else { + fov = NULL; + } + + if (sp5C) { + roll = &csCamera->camera->roll; + } else { + roll = NULL; + } + + interpHandler = CutsceneCamera_Interpolate(csCamera->eyeCmd[csCamera->atInterp.curPoint].interpType); + + switch (csCamera->eyeCmd[csCamera->atInterp.curPoint].relativeTo) { + case CS_CAM_REL_2: + OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + break; + + case CS_CAM_REL_3: + OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + break; + + case CS_CAM_REL_1: + OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + break; + + case CS_CAM_REL_4: + OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + break; + + case CS_CAM_REL_5: + OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + break; + + default: // CS_CAM_REL_0 + break; + } + + numPoints = interpHandler(&csCamera->camera->eye, fov, roll, &csCamera->eyeCmd[csCamera->atInterp.curPoint], + &csCamera->miscCmd[csCamera->atInterp.curPoint], &csCamera->atInterp); + + switch (csCamera->eyeCmd[csCamera->atInterp.curPoint].relativeTo) { + case CS_CAM_REL_2: + OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + break; + + case CS_CAM_REL_3: + OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + csCamera->camera->eye.y += func_80163660(&player->actor); + break; + + case CS_CAM_REL_1: + OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + break; + + case CS_CAM_REL_4: + OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + break; + + case CS_CAM_REL_5: + OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + break; + + default: // CS_CAM_REL_0 + break; + } + + csCamera->atInterp.curPoint += numPoints; + + if ((csCamera->eyeInterp.curPoint >= csCamera->eyeInterp.numEntries) || + (csCamera->atInterp.curPoint >= csCamera->atInterp.numEntries)) { + return false; + } + + return true; +} + +/** + * Processes camera cutscene commands + */ +s32 CutsceneCamera_UpdateSplines(u8* script, CutsceneCamera* csCamera) { + CsCmdCamSpline* spline; + + switch (csCamera->state) { + case CS_CAM_STATE_DONE: + return 0; + + case CS_CAM_STATE_PAUSE: + return csCamera->nextSplineTimer; + + case CS_CAM_STATE_UPDATE_SPLINE: + if (csCamera->updateSplineTimer <= csCamera->duration) { + csCamera->updateSplineTimer++; + if (csCamera->updateSplineTimer <= csCamera->duration) { + // Process Spline + if (!CutsceneCamera_ProcessSpline(csCamera)) { + csCamera->state = CS_CAM_STATE_DONE_SPLINE; + } + } + } + break; + + case CS_CAM_STATE_DONE_SPLINE: + break; + + default: // CS_CAM_STATE_UPDATE_ALL + if (csCamera->splineNeedsInit == true) { + // Spline Header + spline = (CsCmdCamSpline*)&script[csCamera->cmdIndex]; + csCamera->atInterp.numEntries = csCamera->eyeInterp.numEntries = spline->numEntries; + csCamera->duration = spline->duration; + csCamera->cmdIndex += sizeof(CsCmdCamSpline); + + // At Point + csCamera->atCmd = (CsCmdCamPoint*)&script[csCamera->cmdIndex]; + csCamera->cmdIndex += (s16)(csCamera->eyeInterp.numEntries * sizeof(CsCmdCamPoint)); + + // Misc Point + csCamera->eyeCmd = (CsCmdCamPoint*)&script[csCamera->cmdIndex]; + csCamera->cmdIndex += (s16)(csCamera->eyeInterp.numEntries * sizeof(CsCmdCamPoint)); + + // Misc + csCamera->miscCmd = (CsCmdCamMisc*)&script[csCamera->cmdIndex]; + csCamera->cmdIndex += (s16)(csCamera->eyeInterp.numEntries * sizeof(CsCmdCamMisc)); + + // Other Params + csCamera->eyeInterp.curPoint = 0; + csCamera->atInterp.curPoint = 0; + + csCamera->splineNeedsInit = false; + //! FAKE: csCamera->splineIndex++; + csCamera->splineIndex = (csCamera->splineIndex & 0xFFFF) + 1; + csCamera->state = CS_CAM_STATE_UPDATE_ALL; + csCamera->nextSplineTimer = csCamera->updateSplineTimer = 0; + csCamera->eyeInterp.unk_2D = csCamera->atInterp.unk_2D = 7; + } + + csCamera->nextSplineTimer++; + + if (csCamera->updateSplineTimer <= csCamera->duration) { + csCamera->updateSplineTimer++; + if (csCamera->updateSplineTimer <= csCamera->duration) { + // Process SubCommands + if (!CutsceneCamera_ProcessSpline(csCamera)) { + csCamera->state = CS_CAM_STATE_DONE_SPLINE; + } + } + } + break; + } + + if (csCamera->nextSplineTimer > csCamera->duration) { + // Next Spline + csCamera->splineNeedsInit = true; + spline = (CsCmdCamSpline*)&script[csCamera->cmdIndex]; + if (spline->numEntries == -1) { + csCamera->state = CS_CAM_STATE_DONE; + return 0; + } + } + + return csCamera->nextSplineTimer; +} + +// Unused +s16 func_80161BAC(void) { + return (sCurCsCamera->state == CS_CAM_STATE_PAUSE) || (sCurCsCamera->state == CS_CAM_STATE_UPDATE_SPLINE); +} + +void CutsceneCamera_SetState(s16 state) { + if (sCurCsCamera->state == CS_CAM_STATE_UPDATE_ALL) { + sCurCsCamera->state = state; + } +} + +void CutsceneCamera_Reset(void) { + sCurCsCamera->state = CS_CAM_STATE_UPDATE_ALL; +} + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80161C20.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80161E4C.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801620CC.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_8016237C.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801623E4.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801624EC.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_8016253C.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801629BC.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80162A50.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80162FF8.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801631DC.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80163334.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80163660.s") diff --git a/src/code/db_camera.c b/src/code/db_camera.c deleted file mode 100644 index 92b6d87f9..000000000 --- a/src/code/db_camera.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161180.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016119C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016122C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801612B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161998.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161BAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161BE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161C0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161C20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161E4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801620CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016237C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801623E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801624EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016253C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801629BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80162A50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80162FF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801631DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80163334.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80163660.s") diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 8e2f65965..84501dcbb 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1371,7 +1371,7 @@ void func_800B722C(GameState* gameState, Player* player) { s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); - if ((player->csMode == PLAYER_CSMODE_5) || ((csMode == PLAYER_CSMODE_6) && (player->csMode == PLAYER_CSMODE_0))) { + if ((player->csMode == PLAYER_CSMODE_5) || ((csMode == PLAYER_CSMODE_END) && (player->csMode == PLAYER_CSMODE_0))) { return false; } @@ -1880,7 +1880,7 @@ s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, Player player->talkActorDistance = actor->xzDistToPlayer; player->exchangeItemId = exchangeItemId; - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); return true; } @@ -2048,7 +2048,7 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 x player->getItemDirection = absYawDiff; if ((getItemId > GI_NONE) && (getItemId < GI_MAX)) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[1]); + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_ITEM_GET]); } return true; @@ -2123,7 +2123,7 @@ s32 Actor_SetRideActor(PlayState* play, Actor* horse, s32 mountSide) { PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000))) { player->rideActor = horse; player->mountSide = mountSide; - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); return true; } @@ -3126,8 +3126,8 @@ void Actor_FreeOverlay(ActorOverlay* entry) { Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params) { - return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params, -1, - HALFDAYBIT_ALL, NULL); + return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params, + CS_ID_NONE, HALFDAYBIT_ALL, NULL); } ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) { @@ -3171,7 +3171,7 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) { } Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s16 index, f32 x, f32 y, f32 z, s16 rotX, - s16 rotY, s16 rotZ, s32 params, u32 cutscene, u32 halfDaysBits, Actor* parent) { + s16 rotY, s16 rotZ, s32 params, u32 csId, u32 halfDaysBits, Actor* parent) { s32 pad; Actor* actor; ActorInit* actorInit; @@ -3237,10 +3237,10 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 actor->home.rot.y = rotY; actor->home.rot.z = rotZ; actor->params = params & 0xFFFF; - actor->cutscene = (cutscene & 0x7F); + actor->csId = csId & 0x7F; - if (actor->cutscene == 0x7F) { - actor->cutscene = -1; + if (actor->csId == 0x7F) { + actor->csId = CS_ID_NONE; } if (halfDaysBits != 0) { @@ -3263,8 +3263,8 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params) { - return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params, -1, - parent->halfDaysBits, parent); + return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params, + CS_ID_NONE, parent->halfDaysBits, parent); } void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) { @@ -4404,7 +4404,7 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) { Player* player = GET_PLAYER(play); f32 phi_f2; - if ((play->csCtx.state != CS_STATE_0) || gDbgCamEnabled) { + if ((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled) { phi_f2 = Math_Vec3f_DistXYZ(&actor->world.pos, &play->view.eye) * 0.25f; } else { phi_f2 = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos); diff --git a/src/code/z_camera_data.inc.c b/src/code/z_camera_data.inc.c index a8e9fbb80..3df77c0c4 100644 --- a/src/code/z_camera_data.inc.c +++ b/src/code/z_camera_data.inc.c @@ -3613,31 +3613,31 @@ CameraSetting sCameraSettings[] = { }; s16 sGlobalCamDataSettings[] = { - /* -25 */ CAM_SET_ELEGY_SHELL, - /* -24 */ CAM_SET_SIDED, - /* -23 */ CAM_SET_BOAT_CRUISE, - /* -22 */ CAM_SET_NONE, - /* -21 */ CAM_SET_SUBJECTD, - /* -20 */ CAM_SET_NORMALD, - /* -19 */ CAM_SET_NONE, - /* -18 */ CAM_SET_NONE, - /* -17 */ CAM_SET_NONE, - /* -16 */ CAM_SET_WARP_PAD_ENTRANCE, - /* -15 */ CAM_SET_ATTENTION, - /* -14 */ CAM_SET_CONNECT0, - /* -13 */ CAM_SET_REMOTEBOMB, - /* -12 */ CAM_SET_NONE, - /* -11 */ CAM_SET_MASK_TRANSFORMATION, - /* -10 */ CAM_SET_LONG_CHEST_OPENING, - /* -9 */ CAM_SET_REBIRTH, - /* -8 */ CAM_SET_DEATH, - /* -7 */ CAM_SET_WARP_PAD_MOON, - /* -6 */ CAM_SET_NAVI, - /* -5 */ CAM_SET_ITEM3, - /* -4 */ CAM_SET_ITEM2, - /* -3 */ CAM_SET_ITEM1, - /* -2 */ CAM_SET_ITEM0, - /* -1 */ CAM_SET_STOP0, + /* -25 */ CAM_SET_ELEGY_SHELL, // CS_CAM_ID_GLOBAL_ELEGY + /* -24 */ CAM_SET_SIDED, // CS_CAM_ID_GLOBAL_SIDED + /* -23 */ CAM_SET_BOAT_CRUISE, // CS_CAM_ID_GLOBAL_BOAT_CRUISE + /* -22 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N16 + /* -21 */ CAM_SET_SUBJECTD, // CS_CAM_ID_GLOBAL_SUBJECTD + /* -20 */ CAM_SET_NORMALD, // CS_CAM_ID_GLOBAL_NORMALD + /* -19 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N13 + /* -18 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N12 + /* -17 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N11 + /* -16 */ CAM_SET_WARP_PAD_ENTRANCE, // CS_CAM_ID_GLOBAL_WARP_PAD_ENTRANCE + /* -15 */ CAM_SET_ATTENTION, // CS_CAM_ID_GLOBAL_ATTENTION + /* -14 */ CAM_SET_CONNECT0, // CS_CAM_ID_GLOBAL_CONNECT + /* -13 */ CAM_SET_REMOTEBOMB, // CS_CAM_ID_GLOBAL_REMOTE_BOMB + /* -12 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N0C + /* -11 */ CAM_SET_MASK_TRANSFORMATION, // CS_CAM_ID_GLOBAL_MASK_TRANSFORMATION + /* -10 */ CAM_SET_LONG_CHEST_OPENING, // CS_CAM_ID_GLOBAL_LONG_CHEST_OPENING + /* -9 */ CAM_SET_REBIRTH, // CS_CAM_ID_GLOBAL_REVIVE + /* -8 */ CAM_SET_DEATH, // CS_CAM_ID_GLOBAL_DEATH + /* -7 */ CAM_SET_WARP_PAD_MOON, // CS_CAM_ID_GLOBAL_WARP_PAD_MOON + /* -6 */ CAM_SET_NAVI, // CS_CAM_ID_GLOBAL_SONG_WARP + /* -5 */ CAM_SET_ITEM3, // CS_CAM_ID_GLOBAL_ITEM_SHOW + /* -4 */ CAM_SET_ITEM2, // CS_CAM_ID_GLOBAL_ITEM_BOTTLE + /* -3 */ CAM_SET_ITEM1, // CS_CAM_ID_GLOBAL_ITEM_OCARINA + /* -2 */ CAM_SET_ITEM0, // CS_CAM_ID_GLOBAL_ITEM_GET + /* -1 */ CAM_SET_STOP0, // CS_CAM_ID_NONE /* 0 */ CAM_SET_NONE, }; diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index 6ecbd617a..20083f3c4 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" Vec3f D_801EDE00; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index dc32223a8..79270adce 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,171 +1,177 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" #include "z64shrink_window.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" -void Cutscene_DoNothing(PlayState* play, CutsceneContext* csCtx); -void func_800EA258(PlayState* play, CutsceneContext* csCtx); -void func_800ED9C4(PlayState* play, CutsceneContext* csCtx); -void func_800EA2B8(PlayState* play, CutsceneContext* csCtx); -void func_800ED980(PlayState* play, CutsceneContext* csCtx); -void func_800EDA04(PlayState* play, CutsceneContext* csCtx); -void func_800EDA84(PlayState* play, CutsceneContext* csCtx); +void CutsceneHandler_DoNothing(PlayState* play, CutsceneContext* csCtx); +void CutsceneHandler_StartManual(PlayState* play, CutsceneContext* csCtx); +void CutsceneHandler_StopManual(PlayState* play, CutsceneContext* csCtx); +void CutsceneHandler_StartScript(PlayState* play, CutsceneContext* csCtx); +void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx); +void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx); +void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx); // Unused UNK_TYPE4 D_801BB120 = 0; -u16 D_801BB124 = 0; -u16 D_801BB128 = 0; -u8 D_801BB12C = 0; +u16 sCurTextId = 0; +u16 sCurOcarinaAction = 0; +u8 gOpeningEntranceIndex = 0; u8 sCutsceneStoredPlayerForm = 0; // bss #ifndef NON_MATCHING -static u16 seqId; +static u16 sSeqId; #endif s16 sCutsceneQuakeIndex; -DbCameraUnkStruct sCutsceneCameraInfo; -u16 D_801F4DC8[10]; +CutsceneCamera sCutsceneCameraInfo; +u16 sCueTypeList[10]; UNK_TYPE D_801F4DDC; -u8 D_801F4DE0; -s16 D_801F4DE2; +u8 gDisablePlayerCsModeStartPos; +s16 gDungeonBossWarpSceneId; -void Cutscene_Init(PlayState* play, CutsceneContext* csCtx) { +void Cutscene_InitContext(PlayState* play, CutsceneContext* csCtx) { s32 i; - csCtx->state = CS_STATE_0; - csCtx->frames = 0; - csCtx->unk_0C = 0.0f; - play->csCtx.sceneCsCount = 0; - play->csCtx.currentCsIndex = 0; + csCtx->state = CS_STATE_IDLE; + csCtx->curFrame = 0; + csCtx->timer = 0.0f; + play->csCtx.scriptListCount = 0; + play->csCtx.scriptIndex = 0; - for (i = 0; i < ARRAY_COUNT(D_801F4DC8); i++) { - D_801F4DC8[i] = 0; + for (i = 0; i < ARRAY_COUNT(sCueTypeList); i++) { + sCueTypeList[i] = 0; } - D_801F4DE0 = 0; + gDisablePlayerCsModeStartPos = 0; Audio_SetCutsceneFlag(false); } -void Cutscene_Start(PlayState* play, CutsceneContext* csCtx) { - csCtx->state = CS_STATE_1; - csCtx->playerAction = NULL; +void Cutscene_StartManual(PlayState* play, CutsceneContext* csCtx) { + csCtx->state = CS_STATE_START; + csCtx->playerCue = NULL; } -void Cutscene_End(PlayState* play, CutsceneContext* csCtx) { - if (csCtx->state != CS_STATE_4) { - csCtx->state = CS_STATE_3; +void Cutscene_StopManual(PlayState* play, CutsceneContext* csCtx) { + if (csCtx->state != CS_STATE_RUN_UNSTOPPABLE) { + csCtx->state = CS_STATE_STOP; } } -typedef void (*CutsceneStateHandler)(PlayState* play, CutsceneContext* csCtx); +typedef void (*CutsceneHandler)(PlayState* play, CutsceneContext* csCtx); -CutsceneStateHandler sCsStateHandlers1[] = { - Cutscene_DoNothing, // CS_STATE_0 - func_800EA258, // CS_STATE_1 - Cutscene_DoNothing, // CS_STATE_2 - func_800ED9C4, // CS_STATE_3 - Cutscene_DoNothing, // CS_STATE_4 +CutsceneHandler sManualCutsceneHandlers[] = { + CutsceneHandler_DoNothing, // CS_STATE_IDLE + CutsceneHandler_StartManual, // CS_STATE_START + CutsceneHandler_DoNothing, // CS_STATE_RUN + CutsceneHandler_StopManual, // CS_STATE_STOP + CutsceneHandler_DoNothing, // CS_STATE_RUN_UNSTOPPABLE }; -void Cutscene_Update1(PlayState* play, CutsceneContext* csCtx) { - if (gSaveContext.save.cutscene < 0xFFF0) { - sCsStateHandlers1[csCtx->state](play, csCtx); +void Cutscene_UpdateManual(PlayState* play, CutsceneContext* csCtx) { + if (gSaveContext.save.cutsceneIndex < 0xFFF0) { + sManualCutsceneHandlers[csCtx->state](play, csCtx); } } -CutsceneStateHandler sCsStateHandlers2[] = { - Cutscene_DoNothing, // CS_STATE_0 - func_800EA2B8, // CS_STATE_1 - func_800ED980, // CS_STATE_2 - func_800EDA04, // CS_STATE_3 - func_800ED980, // CS_STATE_4 +CutsceneHandler sScriptedCutsceneHandlers[] = { + CutsceneHandler_DoNothing, // CS_STATE_IDLE + CutsceneHandler_StartScript, // CS_STATE_START + CutsceneHandler_RunScript, // CS_STATE_RUN + CutsceneHandler_StopScript, // CS_STATE_STOP + CutsceneHandler_RunScript, // CS_STATE_RUN_UNSTOPPABLE }; -void Cutscene_Update2(PlayState* play, CutsceneContext* csCtx) { +void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) { if ((gSaveContext.cutsceneTrigger != 0) && (play->transitionTrigger == TRANS_TRIGGER_START)) { gSaveContext.cutsceneTrigger = 0; } - if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_0)) { - gSaveContext.save.cutscene = 0xFFFD; + if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) { + gSaveContext.save.cutsceneIndex = 0xFFFD; gSaveContext.cutsceneTrigger = 1; } - if (gSaveContext.save.cutscene >= 0xFFF0) { - func_800EDA84(play, csCtx); - sCsStateHandlers2[csCtx->state](play, csCtx); + if (gSaveContext.save.cutsceneIndex >= 0xFFF0) { + Cutscene_SetupScripted(play, csCtx); + sScriptedCutsceneHandlers[csCtx->state](play, csCtx); } } -void Cutscene_DoNothing(PlayState* play, CutsceneContext* csCtx) { +void CutsceneHandler_DoNothing(PlayState* play, CutsceneContext* csCtx) { } -s32 func_800EA220(PlayState* play, CutsceneContext* csCtx, f32 target) { - return Math_StepToF(&csCtx->unk_0C, target, 0.1f); +s32 Cutscene_StepTimer(PlayState* play, CutsceneContext* csCtx, f32 target) { + return Math_StepToF(&csCtx->timer, target, 0.1f); } -void func_800EA258(PlayState* play, CutsceneContext* csCtx) { +void CutsceneHandler_StartManual(PlayState* play, CutsceneContext* csCtx) { Interface_SetHudVisibility(HUD_VISIBILITY_NONE); ShrinkWindow_Letterbox_SetSizeTarget(32); - if (func_800EA220(play, csCtx, 1.0f)) { + + if (Cutscene_StepTimer(play, csCtx, 1.0f)) { Audio_SetCutsceneFlag(true); - csCtx->state++; + csCtx->state++; // CS_STATE_RUN } } -void func_800EA2B8(PlayState* play, CutsceneContext* csCtx) { - func_800ED980(play, csCtx); +void CutsceneHandler_StartScript(PlayState* play, CutsceneContext* csCtx) { + CutsceneHandler_RunScript(play, csCtx); Interface_SetHudVisibility(HUD_VISIBILITY_NONE); ShrinkWindow_Letterbox_SetSizeTarget(32); - if (func_800EA220(play, csCtx, 1.0f)) { + + if (Cutscene_StepTimer(play, csCtx, 1.0f)) { Audio_SetCutsceneFlag(true); - csCtx->state++; + csCtx->state++; // CS_STATE_RUN } } /* Start of command handling section */ -// Command 0x96: Miscellaneous commands. -void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { +void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { static u16 D_801BB15C = 0xFFFF; Player* player = GET_PLAYER(play); - f32 progress; - u8 isStartFrame = false; + f32 lerp; + u8 isFirstFrame = false; SceneTableEntry* loadedScene; - if ((csCtx->frames < cmd->startFrame) || ((csCtx->frames >= cmd->endFrame) && (cmd->endFrame != cmd->startFrame))) { + if (!((csCtx->curFrame >= cmd->startFrame) && + ((csCtx->curFrame < cmd->endFrame) || (cmd->endFrame == cmd->startFrame)))) { return; } - progress = Environment_LerpWeight(cmd->endFrame - 1, cmd->startFrame, csCtx->frames); - if (csCtx->frames == cmd->startFrame) { - isStartFrame = true; + lerp = Environment_LerpWeight(cmd->endFrame - 1, cmd->startFrame, csCtx->curFrame); + + if (csCtx->curFrame == cmd->startFrame) { + isFirstFrame = true; } - // TODO: consider creating an enum for this when we understand what each value does - switch (cmd->base) { - case 0x1: - if (isStartFrame) { + switch (cmd->type) { + case CS_MISC_RAIN: + if (isFirstFrame) { func_800FD78C(play); - play->envCtx.unk_F2[0] = 0x3C; + play->envCtx.unk_F2[0] = 60; } break; - case 0x2: - if (isStartFrame) { + + case CS_MISC_LIGHTNING: + if (isFirstFrame) { Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0); Environment_AddLightningBolts(play, 3); D_801F4E68 = 1; } break; - case 0x3: + + case CS_MISC_LIFT_FOG: if (play->envCtx.lightSettings.zFar < 12800) { play->envCtx.lightSettings.zFar += 35; } break; - case 0x4: - if (isStartFrame) { + + case CS_MISC_CLOUDY_SKY: + if (isFirstFrame) { play->envCtx.unk_19 = 1; play->envCtx.unk_17 = 1; play->envCtx.unk_18 = 0; @@ -177,49 +183,57 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c play->envCtx.unk_22 = play->envCtx.unk_24; } break; - case 0x5: - if (isStartFrame && (csCtx->state != CS_STATE_4)) { - csCtx->state = CS_STATE_3; + + case CS_MISC_STOP_CUTSCENE: + if (isFirstFrame && (csCtx->state != CS_STATE_RUN_UNSTOPPABLE)) { + csCtx->state = CS_STATE_STOP; } break; - case 0x7: - if (isStartFrame) { + + case CS_MISC_SHOW_TITLE_CARD: + if (isFirstFrame) { loadedScene = play->loadedScene; if (loadedScene->titleTextId != 0) { func_80151A68(play, loadedScene->titleTextId); } } break; - case 0x8: + + case CS_MISC_EARTHQUAKE_MEDIUM: func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); - if (isStartFrame) { + if (isFirstFrame) { sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 22000); Quake_SetQuakeValues(sCutsceneQuakeIndex, 6, 4, 0, 0); Quake_SetCountdown(sCutsceneQuakeIndex, 800); } break; - case 0x9: - if (isStartFrame) { + + case CS_MISC_EARTHQUAKE_STOP: + if (isFirstFrame) { Quake_Init(); } break; - case 0xA: + + case CS_MISC_VISMONO_BLACK_AND_WHITE: gVisMonoColor.r = 255; gVisMonoColor.g = 255; gVisMonoColor.b = 255; - gVisMonoColor.a = 255 * progress; + gVisMonoColor.a = 255 * lerp; break; - case 0xB: + + case CS_MISC_VISMONO_SEPIA: gVisMonoColor.r = 255; gVisMonoColor.g = 180; gVisMonoColor.b = 100; - gVisMonoColor.a = 255 * progress; + gVisMonoColor.a = 255 * lerp; break; - case 0xC: + + case CS_MISC_HIDE_ROOM: play->roomCtx.curRoom.segment = NULL; break; - case 0xD: + + case CS_MISC_RED_PULSATING_LIGHTS: if (play->state.frames & 8) { if (play->envCtx.lightSettings.ambientColor[0] < 40) { play->envCtx.lightSettings.ambientColor[0] += 2; @@ -234,96 +248,118 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c } } break; - case 0xE: + + case CS_MISC_HALT_ALL_ACTORS: play->haltAllActors = true; break; - case 0xF: + + case CS_MISC_RESUME_ALL_ACTORS: play->haltAllActors = false; break; - case 0x10: - if (isStartFrame) { + + case CS_MISC_SANDSTORM_FILL: + if (isFirstFrame) { play->envCtx.sandstormState = 1; } func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG); break; - case 0x11: + + case CS_MISC_SUNSSONG_START: gSaveContext.sunsSongState = SUNSSONG_START; break; - case 0x12: + + case CS_MISC_FREEZE_TIME: if (!gSaveContext.save.isNight) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)R_TIME_SPEED; } else { gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * R_TIME_SPEED); } break; - case 0x13: - AudioOcarina_PlayLongScarecrowAfterCredits(); - csCtx->frames = cmd->startFrame - 1; + + case CS_MISC_LONG_SCARECROW_SONG: + AudioOcarina_PlayLongScarecrowSong(); + csCtx->curFrame = cmd->startFrame - 1; // the cutscene runs forever break; - case 0x14: - EnvFlags_Set(play, 3); + + case CS_MISC_SET_CSFLAG_3: + CutsceneFlags_Set(play, 3); break; - case 0x15: - EnvFlags_Set(play, 4); + + case CS_MISC_SET_CSFLAG_4: + CutsceneFlags_Set(play, 4); break; - case 0x16: + + case CS_MISC_PLAYER_FORM_DEKU: gSaveContext.save.playerForm = PLAYER_FORM_DEKU; break; - case 0x17: + + case CS_MISC_ENABLE_PLAYER_REFLECTION: player->stateFlags2 |= PLAYER_STATE2_4000000; break; - case 0x18: + + case CS_MISC_DISABLE_PLAYER_REFLECTION: player->stateFlags2 &= ~PLAYER_STATE2_4000000; break; - case 0x19: + + case CS_MISC_PLAYER_FORM_HUMAN: sCutsceneStoredPlayerForm = gSaveContext.save.playerForm; gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; gSaveContext.save.equippedMask = PLAYER_MASK_NONE; break; - case 0x1A: + + case CS_MISC_EARTHQUAKE_STRONG: func_8019F128(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); - if (isStartFrame) { + if (isFirstFrame) { sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 30000); Quake_SetQuakeValues(sCutsceneQuakeIndex, 20, 10, 0, 0); Quake_SetCountdown(sCutsceneQuakeIndex, 800); } break; - case 0x1B: - if (isStartFrame) { + + case CS_MISC_DEST_MOON_CRASH_FIRE_WALL: + if (isFirstFrame) { play->nextEntrance = ENTRANCE(CUTSCENE, 0); gSaveContext.nextCutsceneIndex = 0xFFF8; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; } break; - case 0x1C: - if (isStartFrame) { + + case CS_MISC_MOON_CRASH_SKYBOX: + if (isFirstFrame) { + // skyboxConfig play->envCtx.unk_17 = 0xD; } break; - case 0x1D: + + case CS_MISC_PLAYER_FORM_RESTORED: gSaveContext.save.playerForm = sCutsceneStoredPlayerForm; break; - case 0x1E: - D_801F4DE0 = true; + + case CS_MISC_DISABLE_PLAYER_CSMODE_START_POS: + gDisablePlayerCsModeStartPos = true; break; - case 0x1F: - D_801F4DE0 = false; + + case CS_MISC_ENABLE_PLAYER_CSMODE_START_POS: + gDisablePlayerCsModeStartPos = false; break; - case 0x21: - if (isStartFrame) { + + case CS_MISC_SAVE_ENTER_CLOCK_TOWN: + if (isFirstFrame) { Sram_SaveSpecialEnterClockTown(play); } break; - case 0x22: - if (isStartFrame) { - func_80144A94(&play->sramCtx); + + case CS_MISC_RESET_SAVE_FROM_MOON_CRASH: + if (isFirstFrame) { + Sram_ResetSaveFromMoonCrash(&play->sramCtx); } break; - case 0x23: - if (csCtx->frames != D_801BB15C) { - D_801BB15C = csCtx->frames; + + case CS_MISC_TIME_ADVANCE: + if (csCtx->curFrame != D_801BB15C) { + D_801BB15C = csCtx->curFrame; if (R_TIME_SPEED != 0) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; @@ -332,9 +368,10 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c } } break; - case 0x24: + + case CS_MISC_EARTHQUAKE_WEAK: func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); - if (isStartFrame) { + if (isFirstFrame) { sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 22000); Quake_SetQuakeValues(sCutsceneQuakeIndex, 2, 1, 0, 0); @@ -342,10 +379,8 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c } break; - case 0x26: - // Seems to be used to trigger "Dawn of A New Day" - - gSaveContext.save.day = 9; + case CS_MISC_DAWN_OF_A_NEW_DAY: + gSaveContext.save.day = 9; // 9 % 5 is day number 4, see `CURRENT_DAY` STOP_GAMESTATE(&play->state); SET_NEXT_GAMESTATE(&play->state, DayTelop_Init, sizeof(DayTelopState)); @@ -353,21 +388,23 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c Sram_SaveSpecialNewDay(play); break; - case 0x27: + case CS_MISC_PLAYER_FORM_ZORA: gSaveContext.save.playerForm = PLAYER_FORM_ZORA; break; - case 0x28: - csCtx->frames = cmd->startFrame - 1; + case CS_MISC_FINALE: + csCtx->curFrame = cmd->startFrame - 1; // the cutscene runs forever + break; + + default: break; } } -// Command 0x97: Set Environment Lighting -void Cutscene_Command_SetLighting(PlayState* play, CutsceneContext* csCtx, CsCmdEnvLighting* cmd) { - if (csCtx->frames == cmd->startFrame) { - if (cmd->setting != 0x20) { - play->envCtx.lightSettingOverride = cmd->setting - 1; +void CutsceneCmd_SetLightSetting(PlayState* play, CutsceneContext* csCtx, CsCmdLightSetting* cmd) { + if (csCtx->curFrame == cmd->startFrame) { + if (cmd->settingPlusOne != 32) { + play->envCtx.lightSettingOverride = cmd->settingPlusOne - 1; play->envCtx.lightBlend = 1.0f; } else { play->envCtx.lightSettingOverride = 0xFF; @@ -375,51 +412,45 @@ void Cutscene_Command_SetLighting(PlayState* play, CutsceneContext* csCtx, CsCmd } } -// Command 0x12C: Plays a sequence (Background music or Fanfare) -void Cutscene_Command_PlaySequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceChange* cmd) { - if (csCtx->frames == cmd->startFrame) { - Audio_PlaySequenceInCutscene(cmd->sequence - 1); +void CutsceneCmd_StartSequence(PlayState* play, CutsceneContext* csCtx, CsCmdStartSeq* cmd) { + if (csCtx->curFrame == cmd->startFrame) { + Audio_PlaySequenceInCutscene(cmd->seqIdPlusOne - 1); } } -// Command 0x12D: Stops a sequence (Background music or Fanfare) -void Cutscene_Command_StopSequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceChange* cmd) { - if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) { - Audio_StopSequenceInCutscene(cmd->sequence - 1); +void CutsceneCmd_StopSequence(PlayState* play, CutsceneContext* csCtx, CsCmdStopSeq* cmd) { + if ((csCtx->curFrame >= cmd->startFrame) && (csCtx->curFrame <= cmd->endFrame)) { + Audio_StopSequenceInCutscene(cmd->seqIdPlusOne - 1); } } -// Command 0x9C: Fade a sequence (Background music or Fanfare) over duration -void Cutscene_Command_FadeSequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceFade* cmd) { - if ((csCtx->frames == cmd->startFrame) && (csCtx->frames < cmd->endFrame)) { - u8 fadeTimer = cmd->endFrame - cmd->startFrame; +void CutsceneCmd_FadeOutSequence(PlayState* play, CutsceneContext* csCtx, CsCmdFadeOutSeq* cmd) { + if ((csCtx->curFrame == cmd->startFrame) && (csCtx->curFrame < cmd->endFrame)) { + u8 fadeOutDuration = cmd->endFrame - cmd->startFrame; - if (cmd->type == 2) { - SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, fadeTimer); - } else { - SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, fadeTimer); + if (cmd->seqPlayer == CS_FADE_OUT_FANFARE) { + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, fadeOutDuration); + } else { // CS_FADE_OUT_BGM_MAIN + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, fadeOutDuration); } } } -// Command 0x12E: Play Ambience sequence -void Cutscene_Command_PlayAmbienceSequence(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if (csCtx->frames == cmd->startFrame) { +void CutsceneCmd_StartAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdStartAmbience* cmd) { + if (csCtx->curFrame == cmd->startFrame) { Audio_PlayAmbience(play->sequenceCtx.ambienceId); } } -// Command 0x130: -void func_800EAD48(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if (csCtx->frames == cmd->startFrame) { +void Cutscene_SetSfxReverbIndexTo2(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo2* cmd) { + if (csCtx->curFrame == cmd->startFrame) { // Audio_SetSfxReverbIndexExceptOcarinaBank func_801A4428(2); } } -// Command 0x131: -void func_800EAD7C(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if (csCtx->frames == cmd->startFrame) { +void Cutscene_SetSfxReverbIndexTo1(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo1* cmd) { + if (csCtx->curFrame == cmd->startFrame) { // Audio_SetSfxReverbIndexExceptOcarinaBank func_801A4428(1); } @@ -427,107 +458,103 @@ void func_800EAD7C(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { #ifdef NON_MATCHING // needs in-function static bss -// audio related -void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - static u16 seqId; +void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd) { + static u16 sSeqId; u8 dayMinusOne; - if (csCtx->frames == cmd->startFrame) { - dayMinusOne = (gSaveContext.save.day - 1); + if (csCtx->curFrame == cmd->startFrame) { + dayMinusOne = gSaveContext.save.day - 1; if (dayMinusOne >= 3) { dayMinusOne = 0; } - switch (cmd->base) { - case 1: - // func_801A246C(SEQ_PLAYER_BGM_MAIN, TYPE_1); + switch (cmd->type) { + case CS_MOD_SEQ_0: func_801A246C(SEQ_PLAYER_BGM_MAIN, 1); break; - case 2: - // func_801A246C(SEQ_PLAYER_BGM_MAIN, TYPE_0); + case CS_MOD_SEQ_1: func_801A246C(SEQ_PLAYER_BGM_MAIN, 0); break; - case 3: - // func_801A246C(SEQ_PLAYER_BGM_MAIN, TYPE_2); + case CS_MOD_SEQ_2: func_801A246C(SEQ_PLAYER_BGM_MAIN, 2); break; - case 4: - // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_1); + case CS_MOD_AMBIENCE_0: func_801A246C(SEQ_PLAYER_AMBIENCE, 1); break; - case 5: - // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_0); + case CS_MOD_AMBIENCE_1: func_801A246C(SEQ_PLAYER_AMBIENCE, 0); break; - case 6: - // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_2); + case CS_MOD_AMBIENCE_2: func_801A246C(SEQ_PLAYER_AMBIENCE, 2); break; - case 7: - seqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN); + case CS_MOD_SEQ_STORE: + sSeqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN); break; - case 8: - if (seqId != NA_BGM_DISABLED) { - Audio_PlaySceneSequence(seqId, dayMinusOne); + case CS_MOD_SEQ_RESTORE: + if (sSeqId != NA_BGM_DISABLED) { + Audio_PlaySceneSequence(sSeqId, dayMinusOne); } break; + + default: + break; } } } #else -void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/func_800EADB0.s") +void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/CutsceneCmd_ModifySequence.s") #endif -// Command 0x12F: Fade Ambience sequence -void Cutscene_Command_FadeAmbienceSequence(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if (csCtx->frames == cmd->startFrame && csCtx->frames < cmd->endFrame) { - u8 fadeTimer = cmd->endFrame - cmd->startFrame; +void CutsceneCmd_FadeOutAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdFadeOutAmbience* cmd) { + if ((csCtx->curFrame == cmd->startFrame) && (csCtx->curFrame < cmd->endFrame)) { + u8 fadeOutDuration = cmd->endFrame - cmd->startFrame; - SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_AMBIENCE, fadeTimer); + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_AMBIENCE, fadeOutDuration); } } -// Command 0x190: Rumble -void Cutscene_Command_Rumble(PlayState* play, CutsceneContext* csCtx, CsCmdRumble* cmd) { +void CutsceneCmd_RumbleController(PlayState* play, CutsceneContext* csCtx, CsCmdRumble* cmd) { switch (cmd->type) { - case 1: - if (csCtx->frames == cmd->startFrame) { + case CS_RUMBLE_ONCE: + if (csCtx->curFrame == cmd->startFrame) { Rumble_Request(0.0f, cmd->intensity, cmd->decayTimer, cmd->decayStep); } break; - case 2: - if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) { - if ((csCtx->frames == cmd->startFrame) || (play->state.frames % 64 == 0)) { + case CS_RUMBLE_PULSE: + if ((csCtx->curFrame >= cmd->startFrame) && (csCtx->curFrame <= cmd->endFrame)) { + if ((csCtx->curFrame == cmd->startFrame) || (play->state.frames % 64 == 0)) { Rumble_Request(0.0f, cmd->intensity, cmd->decayTimer, cmd->decayStep); } } break; + + default: + break; } } -// Command 0x9B: -void Cutscene_Command_FadeColorScreen(PlayState* play, CutsceneContext* csCtx, CsCmdFadeScreen* cmd) { - if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) { +void CutsceneCmd_TransitionGeneral(PlayState* play, CutsceneContext* csCtx, CsCmdTransitionGeneral* cmd) { + if ((csCtx->curFrame >= cmd->startFrame) && (cmd->endFrame >= csCtx->curFrame)) { f32 alpha; play->envCtx.fillScreen = true; - alpha = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames); + alpha = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->curFrame); - if (((cmd->unk0 == 1)) || (cmd->unk0 == 2)) { + if (((cmd->type == CS_TRANS_GENERAL_FILL_IN)) || (cmd->type == CS_TRANS_GENERAL_FILL_OUT)) { play->envCtx.screenFillColor[0] = cmd->color.r; play->envCtx.screenFillColor[1] = cmd->color.g; play->envCtx.screenFillColor[2] = cmd->color.b; - if (cmd->unk0 == 2) { + if (cmd->type == CS_TRANS_GENERAL_FILL_OUT) { play->envCtx.screenFillColor[3] = (1.0f - alpha) * 255.0f; } else { play->envCtx.screenFillColor[3] = 255.0f * alpha; @@ -536,43 +563,45 @@ void Cutscene_Command_FadeColorScreen(PlayState* play, CutsceneContext* csCtx, C } } -// Command 0x9D: Set Time of Day & Environment Time -void Cutscene_Command_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdDayTime* cmd) { - u16 nextTime; +void CutsceneCmd_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdTime* cmd) { u16 hourAsMinutes; u16 minutes; - if (csCtx->frames == cmd->startFrame) { + if (csCtx->curFrame == cmd->startFrame) { hourAsMinutes = CLOCK_TIME_ALT_F(cmd->hour, 0); minutes = CLOCK_TIME_ALT_F(0, cmd->minute + 1); - nextTime = hourAsMinutes + minutes; - gSaveContext.save.time = nextTime; - gSaveContext.skyboxTime = nextTime; + gSaveContext.save.time = hourAsMinutes + minutes; + gSaveContext.skyboxTime = hourAsMinutes + minutes; } } -void Cutscene_TerminatorImpl(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - csCtx->state = CS_STATE_4; +void CutsceneCmd_DestinationDefault(PlayState* play, CutsceneContext* csCtx, CsCmdDestination* cmd) { + csCtx->state = CS_STATE_RUN_UNSTOPPABLE; Play_DisableMotionBlur(); Audio_SetCutsceneFlag(false); gSaveContext.cutsceneTransitionControl = 1; - if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (csCtx->frames != cmd->startFrame)) { + // `hudVisibilityForceButtonAlphasByStatus` has a secondary purpose, which is to signal to the title + // screen actor that it should display immediately. This occurs when a title screen cutscene that + // is not the main clock town scene is skipped. + if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (csCtx->curFrame != cmd->startFrame)) { gSaveContext.hudVisibilityForceButtonAlphasByStatus = true; } - gSaveContext.save.cutscene = 0; - if (cmd->base == 1) { - play->nextEntrance = play->csCtx.sceneCsList[play->csCtx.currentCsIndex].nextEntrance; + gSaveContext.save.cutsceneIndex = 0; + + if (cmd->type == CS_DESTINATION_DEFAULT) { + play->nextEntrance = play->csCtx.scriptList[play->csCtx.scriptIndex].nextEntrance; gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; + if (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN) { Scene_SetExitFade(play); } else { - D_801BB12C++; - if (D_801BB12C >= 2) { - D_801BB12C = 0; + gOpeningEntranceIndex++; + if (gOpeningEntranceIndex >= 2) { + gOpeningEntranceIndex = 0; } play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; } @@ -585,19 +614,18 @@ void Cutscene_TerminatorImpl(PlayState* play, CutsceneContext* csCtx, CsCmdBase* } } -// Command 0x15E -void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if (cmd->base == 1) { - if (csCtx->frames == cmd->startFrame) { - Cutscene_TerminatorImpl(play, csCtx, cmd); +void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDestination* cmd) { + if (cmd->type == CS_DESTINATION_DEFAULT) { + if (csCtx->curFrame == cmd->startFrame) { + CutsceneCmd_DestinationDefault(play, csCtx, cmd); } - } else if (cmd->base == 2) { - if (csCtx->frames == cmd->startFrame) { + } else if (cmd->type == CS_DESTINATION_BOSS_WARP) { + if (csCtx->curFrame == cmd->startFrame) { Play_DisableMotionBlur(); - switch (D_801F4DE2) { - case 0x1F: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + switch (gDungeonBossWarpSceneId) { + case SCENE_MITURIN_BS: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1); play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; @@ -609,8 +637,8 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB } break; - case 0x44: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + case SCENE_HAKUGIN_BS: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7); play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; @@ -622,36 +650,38 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB } break; - case 0x5F: - SET_WEEKEVENTREG(WEEKEVENTREG_55_80); + case SCENE_SEA_BS: + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE); play->nextEntrance = ENTRANCE(ZORA_CAPE, 8); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; break; - case 0x36: - SET_WEEKEVENTREG(WEEKEVENTREG_52_20); + case SCENE_INISIE_BS: + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE); play->nextEntrance = ENTRANCE(IKANA_CANYON, 0); gSaveContext.nextCutsceneIndex = 0xFFF1; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; break; + + default: + break; } } } } -// Command 0x15F: Chooses between a cutscene or a rotating mask depending on whether the player has the corresponding -// mask -void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if ((csCtx->frames >= cmd->startFrame) && (func_801A3950(SEQ_PLAYER_BGM_MAIN, true) != 0xFF)) { - switch (cmd->base) { - case 1: - Cutscene_TerminatorImpl(play, csCtx, cmd); +// Chooses between a cutscene or a rotating mask depending on whether the player has the corresponding mask +void CutsceneCmd_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCtx, CsCmdChooseCreditsScene* cmd) { + if ((csCtx->curFrame >= cmd->startFrame) && (func_801A3950(SEQ_PLAYER_BGM_MAIN, true) != 0xFF)) { + switch (cmd->type) { + case CS_CREDITS_DESTINATION: + CutsceneCmd_DestinationDefault(play, csCtx, (CsCmdDestination*)cmd); break; - case 2: + case CS_CREDITS_MASK_KAMARO: if (INV_CONTENT(ITEM_MASK_KAMARO) == ITEM_MASK_KAMARO) { play->nextEntrance = ENTRANCE(MILK_BAR, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; @@ -662,7 +692,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 3: + case CS_CREDITS_MASK_GREAT_FAIRY: if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) { play->nextEntrance = ENTRANCE(FAIRY_FOUNTAIN, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; @@ -673,7 +703,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 4: + case CS_CREDITS_MASK_ROMANI: if (INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) { play->nextEntrance = ENTRANCE(ROMANI_RANCH, 0); gSaveContext.nextCutsceneIndex = 0xFFF1; @@ -684,7 +714,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 5: + case CS_CREDITS_MASK_BLAST: if (INV_CONTENT(ITEM_MASK_BLAST) == ITEM_MASK_BLAST) { play->nextEntrance = ENTRANCE(WEST_CLOCK_TOWN, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; @@ -695,7 +725,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 6: + case CS_CREDITS_MASK_CIRCUS_LEADER: if (INV_CONTENT(ITEM_MASK_CIRCUS_LEADER) == ITEM_MASK_CIRCUS_LEADER) { play->nextEntrance = ENTRANCE(MILK_BAR, 0); gSaveContext.nextCutsceneIndex = 0xFFF1; @@ -706,7 +736,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 7: + case CS_CREDITS_MASK_BREMEN: if (INV_CONTENT(ITEM_MASK_BREMEN) == ITEM_MASK_BREMEN) { play->nextEntrance = ENTRANCE(MILK_BAR, 0); gSaveContext.nextCutsceneIndex = 0xFFF3; @@ -717,13 +747,13 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 8: + case CS_CREDITS_IKANA: play->nextEntrance = ENTRANCE(IKANA_CANYON, 0); gSaveContext.nextCutsceneIndex = 0xFFF3; play->transitionTrigger = TRANS_TRIGGER_START; break; - case 9: + case CS_CREDITS_MASK_COUPLE: if (INV_CONTENT(ITEM_MASK_COUPLE) == ITEM_MASK_COUPLE) { play->nextEntrance = ENTRANCE(TERMINA_FIELD, 0); gSaveContext.nextCutsceneIndex = 0xFFF8; @@ -734,7 +764,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 10: + case CS_CREDITS_MASK_BUNNY: if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) { play->nextEntrance = ENTRANCE(CUCCO_SHACK, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; @@ -745,7 +775,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt play->transitionTrigger = TRANS_TRIGGER_START; break; - case 11: + case CS_CREDITS_MASK_POSTMAN: if (INV_CONTENT(ITEM_MASK_POSTMAN) == ITEM_MASK_POSTMAN) { play->nextEntrance = ENTRANCE(TERMINA_FIELD, 1); gSaveContext.nextCutsceneIndex = 0xFFF8; @@ -755,35 +785,36 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt } play->transitionTrigger = TRANS_TRIGGER_START; break; + + default: + break; } } } -// Command 0x99: Motion blur -void Cutscene_Command_MotionBlur(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) { - if ((csCtx->frames == cmd->startFrame) && (cmd->base == 1)) { +void CutsceneCmd_MotionBlur(PlayState* play, CutsceneContext* csCtx, CsCmdMotionBlur* cmd) { + if ((csCtx->curFrame >= cmd->startFrame) && (cmd->endFrame >= csCtx->curFrame)) { + if ((csCtx->curFrame == cmd->startFrame) && (cmd->type == CS_MOTION_BLUR_ENABLE)) { Play_EnableMotionBlur(180); } - if (cmd->base == 2) { - f32 progress = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames); + if (cmd->type == CS_MOTION_BLUR_DISABLE) { + f32 lerp = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->curFrame); - if (progress >= 0.9f) { + if (lerp >= 0.9f) { Play_DisableMotionBlur(); } else { - Play_SetMotionBlurAlpha((1.0f - progress) * 180.0f); + Play_SetMotionBlurAlpha((1.0f - lerp) * 180.0f); } } } } -// Command 0x9A: Gives Tatl to the player -void Cutscene_Command_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { +void CutsceneCmd_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, CsCmdGiveTatl* cmd) { Player* player = GET_PLAYER(play); - if (csCtx->frames == cmd->startFrame) { - if (cmd->base == 1) { + if (csCtx->curFrame == cmd->startFrame) { + if (cmd->giveTatl == true) { gSaveContext.save.hasTatl = true; if (player->tatlActor != NULL) { return; @@ -794,109 +825,112 @@ void Cutscene_Command_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, } } -// Command 0x98 -void Cutscene_Command_TransitionFX(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { - if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) { - f32 temp_f0; +void CutsceneCmd_Transition(PlayState* play, CutsceneContext* csCtx, CsCmdTransition* cmd) { + if ((csCtx->curFrame >= cmd->startFrame) && (cmd->endFrame >= csCtx->curFrame)) { + f32 lerp; play->envCtx.fillScreen = true; - temp_f0 = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames); + lerp = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->curFrame); - switch (cmd->base) { - case 1: - case 5: + switch (cmd->type) { + case CS_TRANS_GRAY_FILL_IN: + case CS_TRANS_GRAY_FILL_OUT: play->envCtx.screenFillColor[0] = 160; play->envCtx.screenFillColor[1] = 160; play->envCtx.screenFillColor[2] = 160; - if (cmd->base == 1) { - play->envCtx.screenFillColor[3] = 255.0f * temp_f0; - if (temp_f0 == 0.0f) { + + if (cmd->type == CS_TRANS_GRAY_FILL_IN) { + play->envCtx.screenFillColor[3] = 255.0f * lerp; + if (lerp == 0.0f) { func_8019F128(NA_SE_EV_S_STONE_FLASH); } } else { - play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f; + play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f; } break; - case 2: - case 6: + case CS_TRANS_BLUE_FILL_IN: + case CS_TRANS_BLUE_FILL_OUT: play->envCtx.screenFillColor[0] = 0; play->envCtx.screenFillColor[1] = 0; play->envCtx.screenFillColor[2] = 255; - if (cmd->base == 2) { - play->envCtx.screenFillColor[3] = 255.0f * temp_f0; + if (cmd->type == CS_TRANS_BLUE_FILL_IN) { + play->envCtx.screenFillColor[3] = 255.0f * lerp; } else { - play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f; + play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f; } break; - case 3: - case 7: + case CS_TRANS_RED_FILL_OUT: + case CS_TRANS_RED_FILL_IN: play->envCtx.screenFillColor[0] = 255; play->envCtx.screenFillColor[1] = 0; play->envCtx.screenFillColor[2] = 0; - if (cmd->base == 3) { - play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f; + if (cmd->type == CS_TRANS_RED_FILL_OUT) { + play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f; } else { - play->envCtx.screenFillColor[3] = 255.0f * temp_f0; + play->envCtx.screenFillColor[3] = 255.0f * lerp; } break; - case 4: - case 8: + case CS_TRANS_GREEN_FILL_OUT: + case CS_TRANS_GREEN_FILL_IN: play->envCtx.screenFillColor[0] = 0; play->envCtx.screenFillColor[1] = 255; play->envCtx.screenFillColor[2] = 0; - if (cmd->base == 4) { - play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f; + if (cmd->type == CS_TRANS_GREEN_FILL_OUT) { + play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f; } else { - play->envCtx.screenFillColor[3] = 255.0f * temp_f0; + play->envCtx.screenFillColor[3] = 255.0f * lerp; } break; - case 9: + case CS_TRANS_TRIGGER_INSTANCE: gSaveContext.cutsceneTransitionControl = 1; break; - case 10: - case 11: + case CS_TRANS_BLACK_FILL_OUT: + case CS_TRANS_BLACK_FILL_IN: play->envCtx.screenFillColor[0] = 0; play->envCtx.screenFillColor[1] = 0; play->envCtx.screenFillColor[2] = 0; - if (cmd->base == 10) { - play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f; + if (cmd->type == CS_TRANS_BLACK_FILL_OUT) { + play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f; } else { - play->envCtx.screenFillColor[3] = 255.0f * temp_f0; + play->envCtx.screenFillColor[3] = 255.0f * lerp; } break; - case 12: - play->envCtx.screenFillColor[0] = (160.0f * (1.0f - temp_f0)); + case CS_TRANS_GRAY_TO_BLACK: + play->envCtx.screenFillColor[0] = (1.0f - lerp) * 160.0f; play->envCtx.screenFillColor[1] = play->envCtx.screenFillColor[0]; play->envCtx.screenFillColor[2] = play->envCtx.screenFillColor[0]; play->envCtx.screenFillColor[3] = 255; break; - case 13: - play->envCtx.screenFillColor[0] = (160.0f * temp_f0); + case CS_TRANS_BLACK_TO_GRAY: + play->envCtx.screenFillColor[0] = 160.0f * lerp; play->envCtx.screenFillColor[1] = play->envCtx.screenFillColor[0]; play->envCtx.screenFillColor[2] = play->envCtx.screenFillColor[0]; play->envCtx.screenFillColor[3] = 255; break; + + default: + break; } } } -// Command 0x5A: Camera -s32 Cutscene_Command_Camera(PlayState* play, u8* cmd) { - s32 sp1C = 0; +s32 CutsceneCmd_UpdateCamSpline(PlayState* play, u8* script) { + s32 cmdBytes = 0; + + bcopy(script, &cmdBytes, sizeof(cmdBytes)); + script += sizeof(cmdBytes); - bcopy(cmd, &sp1C, sizeof(s32)); - cmd += sizeof(s32); if (!Play_IsDebugCamEnabled()) { - func_80161998(cmd, &sCutsceneCameraInfo); + CutsceneCamera_UpdateSplines(script, &sCutsceneCameraInfo); } - return sp1C + sizeof(s32); + return cmdBytes + sizeof(cmdBytes); } /** @@ -970,144 +1004,146 @@ s32 Cutscene_CountNormalMasks(void) { return count; } -// Command 0xA: Textbox -void Cutscene_Command_Textbox(PlayState* play, CutsceneContext* csCtx, CsCmdTextbox* cmd) { - static s32 D_801BB160 = CS_TEXTBOX_TYPE_DEFAULT; +void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { + static s32 sCutsceneTextboxType = CS_TEXT_TYPE_DEFAULT; u8 talkState; s32 pad; - u16 originalCsFrames; - s32 pad2; + u16 endFrame; - if ((cmd->startFrame >= csCtx->frames) || ((cmd->endFrame < csCtx->frames))) { + if ((csCtx->curFrame <= cmd->startFrame) || (csCtx->curFrame > cmd->endFrame)) { return; } - if (cmd->type != CS_TEXTBOX_TYPE_LEARN_SONG) { - if (D_801BB124 != cmd->base) { - if (D_801BB160 == CS_TEXTBOX_TYPE_3) { - csCtx->frames--; + if (cmd->type != CS_TEXT_OCARINA_ACTION) { + if (sCurTextId != cmd->textId) { + if (sCutsceneTextboxType == CS_TEXT_TYPE_3) { + csCtx->curFrame--; } - D_801BB160 = CS_TEXTBOX_TYPE_1; - D_801BB124 = cmd->base; - if (cmd->type == CS_TEXTBOX_TYPE_BOSSES_REMAINS) { + sCutsceneTextboxType = CS_TEXT_TYPE_1; + sCurTextId = cmd->textId; + if (cmd->type == CS_TEXT_TYPE_BOSSES_REMAINS) { if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { - if (cmd->textId1 != 0xFFFF) { - Message_StartTextbox(play, cmd->textId1, NULL); + if (cmd->altTextId1 != 0xFFFF) { + Message_StartTextbox(play, cmd->altTextId1, NULL); } } else { - Message_StartTextbox(play, cmd->base, NULL); + Message_StartTextbox(play, cmd->textId, NULL); } - } else if (cmd->type == CS_TEXTBOX_TYPE_ALL_NORMAL_MASKS) { + } else if (cmd->type == CS_TEXT_TYPE_ALL_NORMAL_MASKS) { if (Cutscene_CountNormalMasks() == 20) { - if (cmd->textId1 != 0xFFFF) { - Message_StartTextbox(play, cmd->textId1, NULL); + if (cmd->altTextId1 != 0xFFFF) { + Message_StartTextbox(play, cmd->altTextId1, NULL); } } else { - Message_StartTextbox(play, cmd->base, NULL); + Message_StartTextbox(play, cmd->textId, NULL); } } else { - Message_StartTextbox(play, cmd->base, NULL); + Message_StartTextbox(play, cmd->textId, NULL); } - } else { - goto else_label; + //! FAKE: return; + goto end; } - } else if (D_801BB128 != cmd->base) { - D_801BB160 = CS_TEXTBOX_TYPE_LEARN_SONG; - D_801BB128 = cmd->base; - func_80152434(play, cmd->base); } else { - else_label: - if (csCtx->frames >= cmd->endFrame) { - // The Textbox command can change the current cutscene frame, mainly to prevent advancing the cutscene when - // a textbox that is expected to be closed by the user is still open. - - originalCsFrames = csCtx->frames; - talkState = Message_GetState(&play->msgCtx); - if ((talkState != TEXT_STATE_CLOSING) && (talkState != TEXT_STATE_NONE) && (talkState != TEXT_STATE_7) && - (talkState != TEXT_STATE_8)) { - csCtx->frames--; - if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { - if (play->msgCtx.choiceIndex == 0) { - if (cmd->base == 0x33BD) { - func_8019F230(); - } - - if (cmd->textId1 != 0xFFFF) { - Message_ContinueTextbox(play, cmd->textId1); - if (cmd->type == CS_TEXTBOX_TYPE_3) { - D_801BB160 = CS_TEXTBOX_TYPE_3; - if (cmd->textId2 != 0xFFFF) { - csCtx->frames++; - } - } - } else { - Message_CloseTextbox(play); - csCtx->frames++; - } - } else { - if (cmd->base == 0x33BD) { - func_8019F208(); - } - - if (cmd->textId2 != 0xFFFF) { - Message_ContinueTextbox(play, cmd->textId2); - if (cmd->type == CS_TEXTBOX_TYPE_3) { - D_801BB160 = CS_TEXTBOX_TYPE_3; - if (cmd->textId1 != 0xFFFF) { - csCtx->frames++; - } - } - } else { - Message_CloseTextbox(play); - csCtx->frames++; - } - } - } - - if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - func_80152434(play, cmd->base); - } - } - - if ((talkState == TEXT_STATE_CLOSING) && (D_801BB160 == CS_TEXTBOX_TYPE_3)) { - csCtx->frames--; - D_801BB124++; - } - - if (originalCsFrames == csCtx->frames) { - Interface_SetHudVisibility(HUD_VISIBILITY_NONE); - D_801BB124 = 0; - D_801BB128 = 0; - func_80161C0C(); - } else { - func_80161BE0(1); - } + if (sCurOcarinaAction != cmd->textId) { + sCutsceneTextboxType = CS_TEXT_OCARINA_ACTION; + sCurOcarinaAction = cmd->textId; + func_80152434(play, cmd->textId); + return; } } -} -// Related to actorActions. Maybe a generic actorAction setter? -void func_800ECD7C(CutsceneContext* csCtx, u8** cutscenePtr, s16 index) { - s32 i; - s32 count; + if (csCtx->curFrame >= cmd->endFrame) { + // The Textbox command can change the current cutscene frame, mainly to prevent advancing the cutscene when + // a textbox that is expected to be closed by the user is still open. + endFrame = csCtx->curFrame; + talkState = Message_GetState(&play->msgCtx); + if ((talkState != TEXT_STATE_CLOSING) && (talkState != TEXT_STATE_NONE) && (talkState != TEXT_STATE_7) && + (talkState != TEXT_STATE_8)) { + csCtx->curFrame--; - bcopy(*cutscenePtr, &count, sizeof(s32)); - *cutscenePtr += sizeof(s32); + if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { + if (play->msgCtx.choiceIndex == 0) { + if (cmd->textId == 0x33BD) { + // Gorman Track: do you understand? + func_8019F230(); + } - for (i = 0; i < count; i++) { - CsCmdActorAction* actorAction = *(CsCmdActorAction**)cutscenePtr; + if (cmd->altTextId1 != 0xFFFF) { + Message_ContinueTextbox(play, cmd->altTextId1); + if (cmd->type == CS_TEXT_TYPE_3) { + sCutsceneTextboxType = CS_TEXT_TYPE_3; + if (cmd->altTextId2 != 0xFFFF) { + csCtx->curFrame++; + } + } + } else { + Message_CloseTextbox(play); + csCtx->curFrame++; + } + } else { + if (cmd->textId == 0x33BD) { + // Gorman Track: do you understand? + func_8019F208(); + } - if ((csCtx->frames >= actorAction->startFrame) && (csCtx->frames < actorAction->endFrame)) { - csCtx->actorActions[index] = actorAction; + if (cmd->altTextId2 != 0xFFFF) { + Message_ContinueTextbox(play, cmd->altTextId2); + if (cmd->type == CS_TEXT_TYPE_3) { + sCutsceneTextboxType = CS_TEXT_TYPE_3; + if (cmd->altTextId1 != 0xFFFF) { + csCtx->curFrame++; + } + } + } else { + Message_CloseTextbox(play); + csCtx->curFrame++; + } + } + } + + if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_80152434(play, cmd->textId); + } } - *cutscenePtr += sizeof(CsCmdActorAction); + if ((talkState == TEXT_STATE_CLOSING) && (sCutsceneTextboxType == CS_TEXT_TYPE_3)) { + csCtx->curFrame--; + sCurTextId++; + } + + if (endFrame == csCtx->curFrame) { + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + sCurTextId = 0; + sCurOcarinaAction = 0; + CutsceneCamera_Reset(); + } else { + CutsceneCamera_SetState(CS_CAM_STATE_UPDATE_SPLINE); + } + } +end:; +} + +void Cutscene_SetActorCue(CutsceneContext* csCtx, u8** script, s16 cueChannel) { + s32 i; + s32 numCues; + + bcopy(*script, &numCues, sizeof(numCues)); + *script += sizeof(numCues); + + for (i = 0; i < numCues; i++) { + CsCmdActorCue* cue = *(CsCmdActorCue**)script; + + if ((csCtx->curFrame >= cue->startFrame) && (csCtx->curFrame < cue->endFrame)) { + csCtx->actorCues[cueChannel] = cue; + } + + *script += sizeof(CsCmdActorCue); } } /** - * Loops over the cutscene data itself (`cutscenePtr`), applying the effects of each command instantaneously (for most + * Loops over the cutscene data itself (`script`), applying the effects of each command instantaneously (for most * commands). * * The cutscene data is an irregularly-structured array of words, which is made up of @@ -1124,15 +1160,15 @@ void func_800ECD7C(CutsceneContext* csCtx, u8** cutscenePtr, s16 index) { * has (N). This is followed by N commands of the said category. (The exception is Camera, which has the length of the * list in bytes instead of the number of commands). * - * For most command lists categories (all but the actorActions and Camera commands): + * For most command lists categories (all but the actorCues and Camera commands): * - For each command list found, read the number of commands and loop over them, passing each one to the corresponding * function which handles the command, applying its effects and checking the frame range stored in the command. * * This function is invoked once per frame that a cutscene is active. * - * TODO: consider changing the type of `cutscenePtr` to `uintptr_t` when this function matches. + * TODO: consider changing the type of `script` to `uintptr_t` when this function matches. */ -void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutscenePtr) { +void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script) { s32 i; s32 j; s32 pad; @@ -1140,44 +1176,46 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc u32 cmdType; s32 cmdEntries; s32 pad2; - s32 cutsceneEndFrame; - CsCmdBase* cmd; + s32 csFrameCount; + void* cmd; // Read the command list count and the ending frame for this cutscene - bcopy(cutscenePtr, &totalEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); - bcopy(cutscenePtr, &cutsceneEndFrame, sizeof(s32)); - cutscenePtr += sizeof(s32); + bcopy(script, &totalEntries, sizeof(totalEntries)); + script += sizeof(totalEntries); - if (((u16)cutsceneEndFrame < csCtx->frames) && (play->transitionTrigger != TRANS_TRIGGER_START) && - (csCtx->state != CS_STATE_4)) { - csCtx->state = CS_STATE_3; + bcopy(script, &csFrameCount, sizeof(csFrameCount)); + script += sizeof(csFrameCount); + + if ((csCtx->curFrame > (u16)csFrameCount) && (play->transitionTrigger != TRANS_TRIGGER_START) && + (csCtx->state != CS_STATE_RUN_UNSTOPPABLE)) { + csCtx->state = CS_STATE_STOP; return; } // Loop over every command list for (i = 0; i < totalEntries; i++) { // Read the command type of the current command list. - bcopy(cutscenePtr, &cmdType, sizeof(u32)); - cutscenePtr += sizeof(u32); + bcopy(script, &cmdType, sizeof(cmdType)); + script += sizeof(cmdType); - // TODO: This should probably be added to the CutsceneCmd enum. Consider doing it when this function matches. - if (cmdType == 0xFFFFFFFF) { + if (cmdType == CS_CAM_STOP) { break; } - // Check special cases of command types. This are generic ActorActions - // Ranges: [0x64, 0x96), 0xC9, [0x1C2, 0x258) - if (((cmdType >= 100) && (cmdType < 150)) || (cmdType == 201) || ((cmdType >= 450) && (cmdType < 600))) { - for (j = 0; j < ARRAY_COUNT(D_801F4DC8); j = (s16)(j + 1)) { - if (D_801F4DC8[j] == (u16)cmdType) { - func_800ECD7C(csCtx, &cutscenePtr, j); - cmdType = -2; + if (((cmdType >= CS_CMD_ACTOR_CUE_100) && (cmdType <= CS_CMD_ACTOR_CUE_149)) || + (cmdType == CS_CMD_ACTOR_CUE_201) || + ((cmdType >= CS_CMD_ACTOR_CUE_450) && (cmdType <= CS_CMD_ACTOR_CUE_599))) { + for (j = 0; j < ARRAY_COUNT(sCueTypeList); j = (s16)(j + 1)) { + if (sCueTypeList[j] == (u16)cmdType) { + Cutscene_SetActorCue(csCtx, &script, j); + cmdType = CS_CMD_ACTOR_CUE_POST_PROCESS; break; - } else if (D_801F4DC8[j] == 0) { - D_801F4DC8[j] = cmdType; - func_800ECD7C(csCtx, &cutscenePtr, j); - cmdType = -2; + } + + if (sCueTypeList[j] == 0) { + sCueTypeList[j] = cmdType; + Cutscene_SetActorCue(csCtx, &script, j); + cmdType = CS_CMD_ACTOR_CUE_POST_PROCESS; break; } } @@ -1185,203 +1223,227 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc switch (cmdType) { case CS_CMD_MISC: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_Misc(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_Misc(play, csCtx, (CsCmdMisc*)script); + script += sizeof(CsCmdMisc); } break; - case CS_CMD_SET_LIGHTING: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_LIGHT_SETTING: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_SetLighting(play, csCtx, (CsCmdEnvLighting*)cutscenePtr); - cutscenePtr += sizeof(CsCmdEnvLighting); + CutsceneCmd_SetLightSetting(play, csCtx, (CsCmdLightSetting*)script); + script += sizeof(CsCmdLightSetting); } break; - case CS_CMD_PLAYSEQ: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_START_SEQ: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_PlaySequence(play, csCtx, (CsCmdSequenceChange*)cutscenePtr); - cutscenePtr += sizeof(CsCmdSequenceChange); + CutsceneCmd_StartSequence(play, csCtx, (CsCmdStartSeq*)script); + script += sizeof(CsCmdStartSeq); } break; - case CS_CMD_STOPSEQ: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_STOP_SEQ: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_StopSequence(play, csCtx, (CsCmdSequenceChange*)cutscenePtr); - cutscenePtr += sizeof(CsCmdSequenceChange); + CutsceneCmd_StopSequence(play, csCtx, (CsCmdStopSeq*)script); + script += sizeof(CsCmdStartSeq); } break; - case CS_CMD_FADESEQ: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_FADE_OUT_SEQ: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_FadeSequence(play, csCtx, (CsCmdSequenceFade*)cutscenePtr); - cutscenePtr += sizeof(CsCmdSequenceFade); + CutsceneCmd_FadeOutSequence(play, csCtx, (CsCmdFadeOutSeq*)script); + script += sizeof(CsCmdFadeOutSeq); } break; - case CS_CMD_PLAYAMBIENCE: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_START_AMBIENCE: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_PlayAmbienceSequence(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_StartAmbience(play, csCtx, (CsCmdStartAmbience*)script); + script += sizeof(CsCmdStartAmbience); } break; - case CS_CMD_FADEAMBIENCE: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_FADE_OUT_AMBIENCE: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_FadeAmbienceSequence(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_FadeOutAmbience(play, csCtx, (CsCmdFadeOutAmbience*)script); + script += sizeof(CsCmdFadeOutAmbience); } break; - case CS_CMD_130: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_SFX_REVERB_INDEX_2: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - func_800EAD48(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + Cutscene_SetSfxReverbIndexTo2(play, csCtx, (CsCmdSfxReverbIndexTo2*)script); + script += sizeof(CsCmdSfxReverbIndexTo2); } break; - case CS_CMD_131: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_SFX_REVERB_INDEX_1: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - func_800EAD7C(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + Cutscene_SetSfxReverbIndexTo1(play, csCtx, (CsCmdSfxReverbIndexTo1*)script); + script += sizeof(CsCmdSfxReverbIndexTo1); } break; - case CS_CMD_132: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_MODIFY_SEQ: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - func_800EADB0(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_ModifySequence(play, csCtx, (CsCmdModifySeq*)script); + script += sizeof(CsCmdModifySeq); } break; case CS_CMD_RUMBLE: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_Rumble(play, csCtx, (CsCmdRumble*)cutscenePtr); - cutscenePtr += sizeof(CsCmdRumble); + CutsceneCmd_RumbleController(play, csCtx, (CsCmdRumble*)script); + script += sizeof(CsCmdRumble); } break; - case CS_CMD_FADESCREEN: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_TRANSITION_GENERAL: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_FadeColorScreen(play, csCtx, (CsCmdFadeScreen*)cutscenePtr); - cutscenePtr += sizeof(CsCmdFadeScreen); + CutsceneCmd_TransitionGeneral(play, csCtx, (CsCmdTransitionGeneral*)script); + script += sizeof(CsCmdTransitionGeneral); } break; - case CS_CMD_SETTIME: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_TIME: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_SetTime(play, csCtx, (CsCmdDayTime*)cutscenePtr); - cutscenePtr += sizeof(CsCmdDayTime); + CutsceneCmd_SetTime(play, csCtx, (CsCmdTime*)script); + script += sizeof(CsCmdTime); } break; - case CS_CMD_SET_PLAYER_ACTION: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_PLAYER_CUE: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - cmd = (CsCmdBase*)cutscenePtr; - if ((cmd->startFrame <= csCtx->frames) && (csCtx->frames < cmd->endFrame)) { - csCtx->playerAction = (CsCmdActorAction*)cmd; + cmd = script; + + if ((((CsCmdActorCue*)cmd)->startFrame <= csCtx->curFrame) && + (csCtx->curFrame < ((CsCmdActorCue*)cmd)->endFrame)) { + csCtx->playerCue = (CsCmdActorCue*)cmd; } - cutscenePtr += sizeof(CsCmdActorAction); + script += sizeof(CsCmdActorCue); } break; - case CS_CMD_CAMERA: - cutscenePtr += Cutscene_Command_Camera(play, cutscenePtr); + case CS_CMD_CAMERA_SPLINE: + script += CutsceneCmd_UpdateCamSpline(play, script); break; - case CS_CMD_TERMINATOR: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_DESTINATION: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_Terminator(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_Destination(play, csCtx, (CsCmdDestination*)script); + script += sizeof(CsCmdDestination); } break; case CS_CMD_CHOOSE_CREDITS_SCENES: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_ChooseCreditsScenes(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_ChooseCreditsScenes(play, csCtx, (CsCmdChooseCreditsScene*)script); + script += sizeof(CsCmdChooseCreditsScene); } break; - case CS_CMD_TEXTBOX: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_TEXT: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - cmd = (CsCmdBase*)cutscenePtr; - if (cmd->base != 0xFFFF) { - Cutscene_Command_Textbox(play, csCtx, (CsCmdTextbox*)cmd); + cmd = script; + + if (((CsCmdText*)cmd)->textId != 0xFFFF) { + CutsceneCmd_Text(play, csCtx, (CsCmdText*)cmd); } - cutscenePtr += sizeof(CsCmdTextbox); + script += sizeof(CsCmdText); } break; - case CS_CMD_SCENE_TRANS_FX: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_TRANSITION: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_TransitionFX(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_Transition(play, csCtx, (CsCmdTransition*)script); + script += sizeof(CsCmdTransition); } break; - case CS_CMD_MOTIONBLUR: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_MOTION_BLUR: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_MotionBlur(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_MotionBlur(play, csCtx, (CsCmdMotionBlur*)script); + script += sizeof(CsCmdMotionBlur); } break; - case CS_CMD_GIVETATL: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + case CS_CMD_GIVE_TATL: + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - Cutscene_Command_GiveTatlToPlayer(play, csCtx, (CsCmdBase*)cutscenePtr); - cutscenePtr += sizeof(CsCmdBase); + CutsceneCmd_GiveTatlToPlayer(play, csCtx, (CsCmdGiveTatl*)script); + script += sizeof(CsCmdGiveTatl); } break; - case -2: + case CS_CMD_ACTOR_CUE_POST_PROCESS: break; default: - bcopy(cutscenePtr, &cmdEntries, sizeof(s32)); - cutscenePtr += sizeof(s32); + bcopy(script, &cmdEntries, sizeof(cmdEntries)); + script += sizeof(cmdEntries); + for (j = 0; j < cmdEntries; j++) { - cutscenePtr += sizeof(CsCmdBase); + script += sizeof(CsCmdUnimplemented); } break; } @@ -1390,120 +1452,125 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc /* End of command handling section */ -void func_800ED980(PlayState* play, CutsceneContext* csCtx) { - if (gSaveContext.save.cutscene >= 0xFFF0) { - csCtx->frames++; - Cutscene_ProcessCommands(play, csCtx, (u8*)play->csCtx.csData); +void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) { + if (gSaveContext.save.cutsceneIndex >= 0xFFF0) { + csCtx->curFrame++; + Cutscene_ProcessScript(play, csCtx, (u8*)play->csCtx.script); } } -void func_800ED9C4(PlayState* play, CutsceneContext* csCtx) { - if (func_800EA220(play, csCtx, 0.0f)) { +void CutsceneHandler_StopManual(PlayState* play, CutsceneContext* csCtx) { + if (Cutscene_StepTimer(play, csCtx, 0.0f)) { Audio_SetCutsceneFlag(false); - csCtx->state = CS_STATE_0; + csCtx->state = CS_STATE_IDLE; } } -// unused -void func_800EDA04(PlayState* play, CutsceneContext* csCtx) { - if (func_800EA220(play, csCtx, 0.0f)) { +void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx) { + if (Cutscene_StepTimer(play, csCtx, 0.0f)) { s16 i; - csCtx->playerAction = NULL; + csCtx->playerCue = NULL; - for (i = 0; i < ARRAY_COUNT(csCtx->actorActions); i++) { - csCtx->actorActions[i] = NULL; + for (i = 0; i < ARRAY_COUNT(csCtx->actorCues); i++) { + csCtx->actorCues[i] = NULL; } - gSaveContext.save.cutscene = 0; + gSaveContext.save.cutsceneIndex = 0; gSaveContext.gameMode = GAMEMODE_NORMAL; - ActorCutscene_Stop(0x7F); + + CutsceneManager_Stop(CS_ID_GLOBAL_END); Audio_SetCutsceneFlag(false); - csCtx->state = CS_STATE_0; + csCtx->state = CS_STATE_IDLE; } } -void func_800EDA84(PlayState* play, CutsceneContext* csCtx) { - if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_0) && !Player_InCsMode(play)) { - gSaveContext.save.cutscene = 0xFFFD; +void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx) { + if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE) && !Player_InCsMode(play)) { + gSaveContext.save.cutsceneIndex = 0xFFFD; } - if ((gSaveContext.save.cutscene >= 0xFFF0) && (csCtx->state == CS_STATE_0)) { + if ((gSaveContext.save.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) { s16 i; - D_801BB124 = 0; - D_801BB128 = 0; - csCtx->playerAction = NULL; + sCurTextId = 0; + sCurOcarinaAction = 0; + csCtx->playerCue = NULL; - for (i = 0; i < ARRAY_COUNT(csCtx->actorActions); i++) { - csCtx->actorActions[i] = NULL; + for (i = 0; i < ARRAY_COUNT(csCtx->actorCues); i++) { + csCtx->actorCues[i] = NULL; } - csCtx->state++; - if (csCtx->state == CS_STATE_1) { + csCtx->state++; // CS_STATE_START + + if (csCtx->state == CS_STATE_START) { Audio_SetCutsceneFlag(true); - csCtx->frames = 0xFFFF; - csCtx->subCamId = ActorCutscene_GetCurrentSubCamId(0x7F); - func_8016119C(Play_GetCamera(play, csCtx->subCamId), &sCutsceneCameraInfo); - csCtx->unk_18 = 0xFFFF; + csCtx->curFrame = 0xFFFF; + + csCtx->subCamId = CutsceneManager_GetCurrentSubCamId(CS_ID_GLOBAL_END); + CutsceneCamera_Init(Play_GetCamera(play, csCtx->subCamId), &sCutsceneCameraInfo); + + // OoT Remnant + csCtx->camEyeSplinePointsAppliedFrame = CS_CAM_DATA_NOT_APPLIED; if (gSaveContext.cutsceneTrigger == 0) { Interface_SetHudVisibility(HUD_VISIBILITY_NONE); ShrinkWindow_Letterbox_SetSizeTarget(32); ShrinkWindow_Letterbox_SetSize(32); - csCtx->state++; + csCtx->state++; // CS_STATE_RUN } - func_800ED980(play, csCtx); + CutsceneHandler_RunScript(play, csCtx); } gSaveContext.cutsceneTrigger = 0; } } -// HandleFlags? -void func_800EDBE0(PlayState* play) { +void Cutscene_HandleEntranceTriggers(PlayState* play) { s32 pad; - s16 sp2A; - SceneTableEntry* sp24; - s32 temp_v0_3; + s16 csId; + SceneTableEntry* scene; + s32 scriptIndex; if (((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_TITLE_SCREEN)) && (gSaveContext.respawnFlag <= 0)) { - sp2A = func_800F21CC(); - if (sp2A != -1) { - temp_v0_3 = func_800F2138(sp2A); - if (temp_v0_3 != -1) { - if ((play->csCtx.sceneCsList[temp_v0_3].unk7 != 0xFF) && (gSaveContext.respawnFlag == 0)) { - if (play->csCtx.sceneCsList[temp_v0_3].unk7 == 0xFE) { - ActorCutscene_Start(sp2A, NULL); + // Try to find an actor cutscene that's triggered by the current spawn + csId = CutsceneManager_FindEntranceCsId(); + if (csId != CS_ID_NONE) { + scriptIndex = CutsceneManager_GetCutsceneScriptIndex(csId); + if (scriptIndex != CS_SCRIPT_ID_NONE) { + // A scripted cutscene is triggered by a spawn + if ((play->csCtx.scriptList[scriptIndex].spawnFlags != CS_SPAWN_FLAG_NONE) && + (gSaveContext.respawnFlag == 0)) { + if (play->csCtx.scriptList[scriptIndex].spawnFlags == CS_SPAWN_FLAG_ALWAYS) { + // Entrance cutscenes that always run + CutsceneManager_Start(csId, NULL); gSaveContext.showTitleCard = false; - } else if (!(((void)0, gSaveContext.save.saveInfo - .weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) & - (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)))) { - // TODO: macros for this kind of weekEventReg access - gSaveContext.save.saveInfo.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)] = - ((void)0, - gSaveContext.save.saveInfo.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) | - (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)); - ActorCutscene_Start(sp2A, NULL); + + } else if (!CHECK_CS_SPAWN_FLAG_WEEKEVENTREG(play->csCtx.scriptList[scriptIndex].spawnFlags)) { + // Entrance cutscenes that only run once + SET_CS_SPAWN_FLAG_WEEKEVENTREG(play->csCtx.scriptList[scriptIndex].spawnFlags); + CutsceneManager_Start(csId, NULL); + // The title card will be used by the cs misc command if necessary. gSaveContext.showTitleCard = false; } } } else { - ActorCutscene_StartAndSetUnkLinkFields(sp2A, NULL); + // A non-scripted cutscene is triggered by a spawn + CutsceneManager_StartWithPlayerCs(csId, NULL); } } } if ((gSaveContext.respawnFlag == 0) || (gSaveContext.respawnFlag == -2)) { - sp24 = play->loadedScene; - if ((sp24->titleTextId != 0) && gSaveContext.showTitleCard) { + scene = play->loadedScene; + if ((scene->titleTextId != 0) && gSaveContext.showTitleCard) { if ((Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer)) & 0x4000) != 0) { - func_80151A68(play, sp24->titleTextId); + func_80151A68(play, scene->titleTextId); } } @@ -1517,10 +1584,10 @@ void func_800EDDB0(PlayState* play) { void func_800EDDBC(UNK_TYPE arg0, UNK_TYPE arg1) { } -void Cutscene_LoadCutsceneData(PlayState* play, u8 csIndex) { - if (dREG(95) == 0) { - play->csCtx.currentCsIndex = csIndex; - play->csCtx.csData = Lib_SegmentedToVirtual(play->csCtx.sceneCsList[csIndex].segmentedData); +void Cutscene_StartScripted(PlayState* play, u8 scriptIndex) { + if (!R_USE_DEBUG_CUTSCENE) { + play->csCtx.scriptIndex = scriptIndex; + play->csCtx.script = Lib_SegmentedToVirtual(play->csCtx.scriptList[scriptIndex].script); } gSaveContext.cutsceneTrigger = 1; @@ -1532,32 +1599,32 @@ void Cutscene_LoadCutsceneData(PlayState* play, u8 csIndex) { * Interpolates the actor's position based on the corresponding actor action's position * and the current cutscene frame */ -void Cutscene_ActorTranslate(Actor* actor, PlayState* play, s32 actorActionIndex) { - Vec3f start; - Vec3f end; - CsCmdActorAction* entry = play->csCtx.actorActions[actorActionIndex]; - f32 progress; +void Cutscene_ActorTranslate(Actor* actor, PlayState* play, s32 cueChannel) { + Vec3f startPos; + Vec3f endPos; + CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel]; + f32 lerp; - start.x = entry->startPos.x; - start.y = entry->startPos.y; - start.z = entry->startPos.z; - end.x = entry->endPos.x; - end.y = entry->endPos.y; - end.z = entry->endPos.z; + startPos.x = cue->startPos.x; + startPos.y = cue->startPos.y; + startPos.z = cue->startPos.z; + endPos.x = cue->endPos.x; + endPos.y = cue->endPos.y; + endPos.z = cue->endPos.z; - progress = Environment_LerpWeight(entry->endFrame, entry->startFrame, play->csCtx.frames); + lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame); - VEC3F_LERPIMPDST(&actor->world.pos, &start, &end, progress); + VEC3F_LERPIMPDST(&actor->world.pos, &startPos, &endPos, lerp); } /** * Interpolates the actor's position based on the corresponding actor action's position * and the current cutscene frame, and sets the actor's yaw using the actor action yaw */ -void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 actorActionIndex) { - Cutscene_ActorTranslate(actor, play, actorActionIndex); +void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 cueChannel) { + Cutscene_ActorTranslate(actor, play, cueChannel); - actor->world.rot.y = play->csCtx.actorActions[actorActionIndex]->urot.y; + actor->world.rot.y = play->csCtx.actorCues[cueChannel]->rot.y; actor->shape.rot.y = actor->world.rot.y; } @@ -1565,25 +1632,25 @@ void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 actorActio * Interpolates the actor's position and yaw based on the corresponding actor action's * position and the current cutscene frame */ -void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex) { - Vec3f start; - Vec3f end; - CsCmdActorAction* entry; - f32 progress; +void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 cueChannel) { + Vec3f startPos; + Vec3f endPos; + CsCmdActorCue* cue; + f32 lerp; - start.x = play->csCtx.actorActions[actorActionIndex]->startPos.x; - start.y = play->csCtx.actorActions[actorActionIndex]->startPos.y; - start.z = play->csCtx.actorActions[actorActionIndex]->startPos.z; - end.x = play->csCtx.actorActions[actorActionIndex]->endPos.x; - end.y = play->csCtx.actorActions[actorActionIndex]->endPos.y; - end.z = play->csCtx.actorActions[actorActionIndex]->endPos.z; + startPos.x = play->csCtx.actorCues[cueChannel]->startPos.x; + startPos.y = play->csCtx.actorCues[cueChannel]->startPos.y; + startPos.z = play->csCtx.actorCues[cueChannel]->startPos.z; + endPos.x = play->csCtx.actorCues[cueChannel]->endPos.x; + endPos.y = play->csCtx.actorCues[cueChannel]->endPos.y; + endPos.z = play->csCtx.actorCues[cueChannel]->endPos.z; - entry = play->csCtx.actorActions[actorActionIndex]; - progress = Environment_LerpWeight(entry->endFrame, entry->startFrame, play->csCtx.frames); + cue = play->csCtx.actorCues[cueChannel]; + lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame); - VEC3F_LERPIMPDST(&actor->world.pos, &start, &end, progress); + VEC3F_LERPIMPDST(&actor->world.pos, &startPos, &endPos, lerp); - Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&start, &end), 10, 1000, 1); + Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&startPos, &endPos), 10, 1000, 1); actor->shape.rot.y = actor->world.rot.y; } @@ -1591,24 +1658,24 @@ void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 acto * Interpolates the actor's XZ position and yaw based on the corresponding actor action's * position and the current cutscene frame */ -void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex) { - Vec3f start; - Vec3f end; - CsCmdActorAction* entry; - f32 progress; +void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, PlayState* play, s32 cueChannel) { + Vec3f startPos; + Vec3f endPos; + CsCmdActorCue* cue; + f32 lerp; - start.x = play->csCtx.actorActions[actorActionIndex]->startPos.x; - start.z = play->csCtx.actorActions[actorActionIndex]->startPos.z; - end.x = play->csCtx.actorActions[actorActionIndex]->endPos.x; - end.z = play->csCtx.actorActions[actorActionIndex]->endPos.z; + startPos.x = play->csCtx.actorCues[cueChannel]->startPos.x; + startPos.z = play->csCtx.actorCues[cueChannel]->startPos.z; + endPos.x = play->csCtx.actorCues[cueChannel]->endPos.x; + endPos.z = play->csCtx.actorCues[cueChannel]->endPos.z; - entry = play->csCtx.actorActions[actorActionIndex]; - progress = Environment_LerpWeight(entry->endFrame, entry->startFrame, play->csCtx.frames); + cue = play->csCtx.actorCues[cueChannel]; + lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame); - actor->world.pos.x = start.x + (end.x - start.x) * progress; - actor->world.pos.z = start.z + (end.z - start.z) * progress; + actor->world.pos.x = startPos.x + (endPos.x - startPos.x) * lerp; + actor->world.pos.z = startPos.z + (endPos.z - startPos.z) * lerp; - Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&start, &end), 10, 1000, 1); + Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&startPos, &endPos), 10, 1000, 1); actor->shape.rot.y = actor->world.rot.y; } @@ -1621,25 +1688,35 @@ s32 Cutscene_GetSceneLayer(PlayState* play) { return sceneLayer; } -s32 Cutscene_GetActorActionIndex(PlayState* play, u16 actorActionCmd) { +/** + * @param play See `PlayState` + * @param cueType See `cmdType` + * @return cue channel + */ +s32 Cutscene_GetCueChannel(PlayState* play, u16 cueType) { s32 i; - s32 index = -1; + s32 cueChannel = -1; - for (i = 0; i < ARRAY_COUNT(D_801F4DC8); i++) { - if (actorActionCmd == D_801F4DC8[i]) { - index = i; + for (i = 0; i < ARRAY_COUNT(sCueTypeList); i++) { + if (cueType == sCueTypeList[i]) { + cueChannel = i; } } - return index; + return cueChannel; } -s32 Cutscene_CheckActorAction(PlayState* play, u16 actorActionCmd) { - if (play->csCtx.state != CS_STATE_0) { - s32 index = Cutscene_GetActorActionIndex(play, actorActionCmd); +/** + * @param play See `PlayState` + * @param cueType See `cmdType` + * @return is cuetype in a channel + */ +s32 Cutscene_IsCueInChannel(PlayState* play, u16 cueType) { + if (play->csCtx.state != CS_STATE_IDLE) { + s32 cueChannel = Cutscene_GetCueChannel(play, cueType); - if (index != -1) { - return play->csCtx.actorActions[index] != NULL; + if (cueChannel != -1) { + return play->csCtx.actorCues[cueChannel] != NULL; } } @@ -1647,7 +1724,7 @@ s32 Cutscene_CheckActorAction(PlayState* play, u16 actorActionCmd) { } u8 Cutscene_IsPlaying(PlayState* play) { - return (gSaveContext.cutsceneTrigger != 0) || (play->csCtx.state != CS_STATE_0); + return (gSaveContext.cutsceneTrigger != 0) || (play->csCtx.state != CS_STATE_IDLE); } /* End of actor utilities section */ diff --git a/src/code/z_env_flags.c b/src/code/z_env_flags.c index 06e216cd3..0057128e2 100644 --- a/src/code/z_env_flags.c +++ b/src/code/z_env_flags.c @@ -1,33 +1,33 @@ #include "global.h" -void EnvFlags_UnsetAll(PlayState* play) { +void CutsceneFlags_UnsetAll(PlayState* play) { u8 i; - for (i = 0; i < ARRAY_COUNT(play->envFlags); i++) { - play->envFlags[i] = 0; + for (i = 0; i < ARRAY_COUNT(play->cutsceneFlags); i++) { + play->cutsceneFlags[i] = 0; } } -void EnvFlags_Set(PlayState* play, s16 flag) { +void CutsceneFlags_Set(PlayState* play, s16 flag) { s16 index = flag / 16; s16 bit = flag % 16; s16 mask = 1 << bit; - play->envFlags[index] |= mask; + play->cutsceneFlags[index] |= mask; } -void EnvFlags_Unset(PlayState* play, s16 flag) { +void CutsceneFlags_Unset(PlayState* play, s16 flag) { s16 index = flag / 16; s16 bit = flag % 16; s16 mask = (1 << bit) ^ 0xFFFF; - play->envFlags[index] &= mask; + play->cutsceneFlags[index] &= mask; } -s32 EnvFlags_Get(PlayState* play, s16 flag) { +s32 CutsceneFlags_Get(PlayState* play, s16 flag) { s16 index = flag / 16; s16 bit = flag % 16; s16 mask = 1 << bit; - return play->envFlags[index] & mask; + return play->cutsceneFlags[index] & mask; } diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index 5b8b8dce3..2575899ca 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -1,52 +1,554 @@ +/** + * @file z_eventmgr.c + * + * Manages all cutscenes except for manual + */ #include "global.h" #include "z64shrink_window.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F1460.s") +ActorCutscene sGlobalCutsceneList[] = { + // CS_ID_GLOBAL_78 + { -100, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, 255, + 255 }, + // CS_ID_GLOBAL_79 + { -100, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, 255, + 255 }, + // CS_ID_GLOBAL_7A + { -100, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, 255, + 255 }, + // CS_ID_GLOBAL_ELEGY + { 2, -1, CS_CAM_ID_GLOBAL_ELEGY, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_NONE, + CS_END_CAM_0, 32 }, + // CS_ID_GLOBAL_TALK + { 32765, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, + CS_END_CAM_0, 255 }, + // CS_ID_GLOBAL_DOOR + { 32764, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, + CS_END_CAM_0, 255 }, + // CS_ID_GLOBAL_RETURN_TO_CAM + { 32766, -2, CS_CAM_ID_GLOBAL_CONNECT, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE, 255, + CS_HUD_VISIBILITY_ALL_ALT, CS_END_CAM_0, 32 }, + // CS_ID_GLOBAL_END + { 0, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE, 255, CS_HUD_VISIBILITY_ALL_ALT, + CS_END_CAM_0, 32 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutsceneImpl.s") +typedef enum { + /* 0 */ CS_START_0, + /* 1 */ CS_START_1, + /* 2 */ CS_START_2, +} ActorCutsceneStartMethod; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Init.s") +typedef struct { + /* 0x00 */ s16 csId; + /* 0x02 */ s16 length; + /* 0x04 */ s16 endCsId; + /* 0x06 */ s16 subCamId; + /* 0x08 */ Actor* targetActor; + /* 0x0C */ s32 startMethod; + /* 0x10 */ PlayState* play; + /* 0x14 */ s16 retCamId; + /* 0x16 */ s16 isCameraStored; +} CutsceneManager; // size = 0x18 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F15D8.s") +CutsceneManager sCutsceneMgr = { + CS_ID_NONE, 0, CS_ID_NONE, SUB_CAM_ID_DONE, NULL, CS_START_0, NULL, CAM_ID_MAIN, false, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearWaiting.s") +s16 CutsceneManager_SetHudVisibility(s16 csHudVisibility) { + u16 hudVisibility; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearNextCutscenes.s") + switch (csHudVisibility) { + case CS_HUD_VISIBILITY_NONE: + hudVisibility = HUD_VISIBILITY_NONE_ALT; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_MarkNextCutscenes.s") + case CS_HUD_VISIBILITY_ALL: + hudVisibility = HUD_VISIBILITY_ALL; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_End.s") + case CS_HUD_VISIBILITY_A_HEARTS_MAGIC: + hudVisibility = HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Update.s") + case CS_HUD_VISIBILITY_C_HEARTS_MAGIC: + hudVisibility = HUD_VISIBILITY_HEARTS_MAGIC_C; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_SetIntentToPlay.s") + case CS_HUD_VISIBILITY_ALL_NO_MINIMAP: + hudVisibility = HUD_VISIBILITY_ALL_NO_MINIMAP; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCanPlayNext.s") + case CS_HUD_VISIBILITY_A_B_C: + hudVisibility = HUD_VISIBILITY_A_B_C; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetUnkLinkFields.s") + case CS_HUD_VISIBILITY_B_MINIMAP: + hudVisibility = HUD_VISIBILITY_B_MINIMAP; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetFlag.s") + case CS_HUD_VISIBILITY_A: + hudVisibility = HUD_VISIBILITY_A; + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Start.s") + default: + hudVisibility = HUD_VISIBILITY_ALL; + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Stop.s") + Interface_SetHudVisibility(hudVisibility); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentIndex.s") + return hudVisibility; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutscene.s") +ActorCutscene* CutsceneManager_GetCutsceneEntryImpl(s16 csId) { + if (csId < CS_ID_GLOBAL_78) { + return &sSceneCutsceneList[csId]; + } else { + csId -= CS_ID_GLOBAL_78; + return &sGlobalCutsceneList[csId]; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetAdditionalCutscene.s") +void CutsceneManager_Init(PlayState* play, ActorCutscene* cutsceneList, s16 numEntries) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetLength.s") + sSceneCutsceneList = cutsceneList; + sSceneCutsceneCount = numEntries; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F2138.s") + for (i = 0; i < ARRAY_COUNT(sWaitingCutsceneList); i++) { + sWaitingCutsceneList[i] = 0; + sNextCutsceneList[i] = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F2178.s") + sCutsceneMgr.endCsId = CS_ID_NONE; + sCutsceneMgr.play = play; + sCutsceneMgr.length = -1; + sCutsceneMgr.targetActor = NULL; + sCutsceneMgr.subCamId = SUB_CAM_ID_DONE; + sCutsceneMgr.isCameraStored = false; + sCutsceneMgr.csId = sCutsceneMgr.endCsId; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentSubCamId.s") +/** + * Store camera into subCam 2, and keep subCam 2 INACTIVE to preserve the struct. + */ +void CutsceneManager_StoreCamera(Camera* camera) { + if (camera != NULL) { + memcpy(&sCutsceneMgr.play->subCameras[2], camera, sizeof(Camera)); + sCutsceneMgr.play->subCameras[2].camId = camera->camId; + Camera_ChangeStatus(&sCutsceneMgr.play->subCameras[2], CAM_STATUS_INACTIVE); + sCutsceneMgr.isCameraStored = true; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F21CC.s") +void CutsceneManager_ClearWaiting(void) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F22C4.s") + for (i = 0; i < ARRAY_COUNT(sWaitingCutsceneList); i++) { + sWaitingCutsceneList[i] = 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_SetReturnCamera.s") +void CutsceneManager_ClearNextCutscenes(void) { + s32 i; + + for (i = 0; i < ARRAY_COUNT(sNextCutsceneList); i++) { + sNextCutsceneList[i] = 0; + } +} + +s16 CutsceneManager_MarkNextCutscenes(void) { + s16 bit; + s32 i; + s32 j; + s32 count = 0; + s16 csIdMax = CS_ID_NONE; + s16 priorityMax = SHT_MAX; // lower number means higher priority + s16 csId; + s16 priority; + + for (i = 0; i < ARRAY_COUNT(sNextCutsceneList); i++) { + for (bit = 1, j = 0; j < 8; j++) { + if (sWaitingCutsceneList[i] & bit) { + csId = (i << 3) | j; + priority = CutsceneManager_GetCutsceneEntryImpl(csId)->priority; + + if ((priority ^ 0) == -1) { + sNextCutsceneList[i] |= bit; + } else if ((priority < priorityMax) && (priority > 0)) { + csIdMax = csId; + priorityMax = priority; + } + count++; + } + bit <<= 1; + } + } + if (csIdMax != CS_ID_NONE) { + sNextCutsceneList[csIdMax >> 3] |= 1 << (csIdMax & 7); + } + return count; +} + +#define RET_CAM sCutsceneMgr.play->cameraPtrs[sCutsceneMgr.retCamId] +#define CUR_CAM sCutsceneMgr.play->cameraPtrs[sCutsceneMgr.subCamId] + +void CutsceneManager_End(void) { + ActorCutscene* csEntry; + s16 oldCamId; + s16 oldStateFlags; + + switch (sCutsceneMgr.startMethod) { + case CS_START_2: + sCutsceneMgr.targetActor->flags &= ~ACTOR_FLAG_100000; + // fallthrough + case CS_START_1: + func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_END); + sCutsceneMgr.startMethod = CS_START_0; + break; + + default: + break; + } + + csEntry = CutsceneManager_GetCutsceneEntryImpl(sCutsceneMgr.csId); + + switch (csEntry->endSfx) { + case CS_END_SFX_TRE_BOX_APPEAR: + play_sound(NA_SE_SY_TRE_BOX_APPEAR); + break; + + case CS_END_SFX_CORRECT_CHIME: + play_sound(NA_SE_SY_CORRECT_CHIME); + break; + + default: // CS_END_SFX_NONE + break; + } + + switch (csEntry->endCam) { + case CS_END_CAM_SMOOTH: + Play_CopyCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId, sCutsceneMgr.subCamId); + RET_CAM->stateFlags = + (RET_CAM->stateFlags & ~CAM_STATE_UNDERWATER) | (CUR_CAM->stateFlags & CAM_STATE_UNDERWATER); + CutsceneManager_Queue(CS_ID_GLOBAL_RETURN_TO_CAM); + break; + + case CS_END_CAM_0: + default: + Play_CopyCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId, sCutsceneMgr.subCamId); + RET_CAM->stateFlags = + (RET_CAM->stateFlags & ~CAM_STATE_UNDERWATER) | (CUR_CAM->stateFlags & CAM_STATE_UNDERWATER); + break; + + case CS_END_CAM_1: + oldCamId = RET_CAM->camId; + oldStateFlags = RET_CAM->stateFlags; + + if (sCutsceneMgr.isCameraStored) { + // Restore the camera that was stored in subCam 2 + memcpy(RET_CAM, &sCutsceneMgr.play->subCameras[2], sizeof(Camera)); + + RET_CAM->stateFlags = + (RET_CAM->stateFlags & ~CAM_STATE_UNDERWATER) | (CUR_CAM->stateFlags & CAM_STATE_UNDERWATER); + + RET_CAM->stateFlags = (RET_CAM->stateFlags & ~CAM_STATE_2) | (oldStateFlags & CAM_STATE_2); + sCutsceneMgr.isCameraStored = false; + } + RET_CAM->camId = oldCamId; + break; + } + + if (sCutsceneMgr.subCamId != SUB_CAM_ID_DONE) { + Play_ClearCamera(sCutsceneMgr.play, sCutsceneMgr.subCamId); + Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.retCamId, CAM_STATUS_ACTIVE); + } + + sCutsceneMgr.csId = CS_ID_NONE; + sCutsceneMgr.endCsId = CS_ID_NONE; + sCutsceneMgr.length = -1; + sCutsceneMgr.targetActor = NULL; + sCutsceneMgr.subCamId = SUB_CAM_ID_DONE; +} + +s16 CutsceneManager_Update(void) { + s16 sp1E = 0; + + if (CutsceneManager_IsNext(CS_ID_GLOBAL_RETURN_TO_CAM)) { + CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_RETURN_TO_CAM, &GET_PLAYER(sCutsceneMgr.play)->actor); + } + + if (sCutsceneMgr.endCsId == CS_ID_NONE) { + if (sCutsceneMgr.csId != CS_ID_NONE) { + if (sCutsceneMgr.length > 0) { + sCutsceneMgr.length--; + } + sp1E = 1; + if (sCutsceneMgr.length == 0) { + CutsceneManager_Stop(sCutsceneMgr.csId); + } + } + } + + if (sCutsceneMgr.endCsId != CS_ID_NONE) { + CutsceneManager_End(); + sp1E = 2; + } + + CutsceneManager_ClearNextCutscenes(); + + if (sCutsceneMgr.csId == CS_ID_NONE) { + if ((CutsceneManager_MarkNextCutscenes() == 0) && (sp1E != 0)) { + ShrinkWindow_Letterbox_SetSizeTarget(0); + } else if (sp1E == 0) { + CutsceneManager_StoreCamera(Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId)); + } + } + return sp1E; +} + +void CutsceneManager_Queue(s16 csId) { + if (csId >= 0) { + sWaitingCutsceneList[csId >> 3] |= 1 << (csId & 7); + } +} + +s16 CutsceneManager_IsNext(s16 csId) { + if (csId == CS_ID_GLOBAL_END) { + if (sCutsceneMgr.csId == CS_ID_NONE) { + return 0x7F; + } else { + return 0; + } + } + if (csId <= CS_ID_NONE) { + return -1; + } + return (sNextCutsceneList[csId >> 3] & (1 << (csId & 7))) ? 1 : 0; +} + +/** + * Start an actor cutscene, activate Player Cutscene Mode "Wait" + */ +s16 CutsceneManager_StartWithPlayerCs(s16 csId, Actor* actor) { + s16 startCsId = CutsceneManager_Start(csId, actor); + + if (startCsId >= 0) { + func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT); + if (sCutsceneMgr.length == 0) { + CutsceneManager_Stop(sCutsceneMgr.csId); + } + sCutsceneMgr.startMethod = CS_START_1; + } + return startCsId; +} + +/** + * Start an actor cutscene, activate Player Cutscene Mode "Wait", turn on ACTOR_FLAG_100000 + */ +s16 CutsceneManager_StartWithPlayerCsAndSetFlag(s16 csId, Actor* actor) { + s16 startCsId = CutsceneManager_Start(csId, actor); + + if (startCsId >= 0) { + func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT); + if (sCutsceneMgr.length == 0) { + CutsceneManager_Stop(sCutsceneMgr.csId); + } + if (actor != NULL) { + actor->flags |= ACTOR_FLAG_100000; + sCutsceneMgr.startMethod = CS_START_2; + } else { + sCutsceneMgr.startMethod = CS_START_1; + } + } + return startCsId; +} + +s16 CutsceneManager_Start(s16 csId, Actor* actor) { + ActorCutscene* csEntry; + Camera* subCam; + Camera* retCam; + s32 csType = 0; + + if ((csId < 0) || (sCutsceneMgr.csId != CS_ID_NONE)) { + return csId; + } + + sCutsceneMgr.startMethod = CS_START_0; + csEntry = CutsceneManager_GetCutsceneEntryImpl(csId); + + ShrinkWindow_Letterbox_SetSizeTarget(csEntry->letterboxSize); + CutsceneManager_SetHudVisibility(csEntry->hudVisibility); + + if (csId == CS_ID_GLOBAL_END) { + csType = 1; + } else if (csEntry->scriptIndex != CS_SCRIPT_ID_NONE) { + // scripted cutscene + csType = 1; + } else if ((csId != CS_ID_GLOBAL_DOOR) && (csId != CS_ID_GLOBAL_TALK)) { + csType = 2; + } + + if (csType != 0) { + sCutsceneMgr.retCamId = Play_GetActiveCamId(sCutsceneMgr.play); + sCutsceneMgr.subCamId = Play_CreateSubCamera(sCutsceneMgr.play); + + subCam = Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.subCamId); + retCam = Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId); + + if ((retCam->setting == CAM_SET_START0) || (retCam->setting == CAM_SET_START2) || + (retCam->setting == CAM_SET_START1)) { + if (CutsceneManager_FindEntranceCsId() != csId) { + func_800E0348(retCam); + } else { + Camera_ClearFlags(retCam, CAM_STATE_2); + } + } + + memcpy(subCam, retCam, sizeof(Camera)); + subCam->camId = sCutsceneMgr.subCamId; + Camera_ClearFlags(subCam, CAM_STATE_6 | CAM_STATE_0); + + Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.retCamId, CAM_STATUS_WAIT); + Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.subCamId, CAM_STATUS_ACTIVE); + + subCam->target = sCutsceneMgr.targetActor = actor; + subCam->behaviorFlags = 0; + + if (csType == 1) { + Camera_ChangeSetting(subCam, CAM_SET_FREE0); + Cutscene_StartScripted(sCutsceneMgr.play, csEntry->scriptIndex); + sCutsceneMgr.length = csEntry->length; + } else { + if (csEntry->csCamId != CS_CAM_ID_NONE) { + Camera_ChangeDataIdx(subCam, csEntry->csCamId); + } else { + Camera_ChangeSetting(subCam, CAM_SET_FREE0); + } + sCutsceneMgr.length = csEntry->length; + } + } + sCutsceneMgr.csId = csId; + + return csId; +} + +s16 CutsceneManager_Stop(s16 csId) { + ActorCutscene* csEntry; + + if (csId < 0) { + return csId; + } + + csEntry = CutsceneManager_GetCutsceneEntryImpl(sCutsceneMgr.csId); + if ((sCutsceneMgr.length > 0) && (csEntry->scriptIndex == CS_SCRIPT_ID_NONE)) { + return -2; + } + if ((csId != CS_ID_GLOBAL_END) && (csEntry->scriptIndex != CS_SCRIPT_ID_NONE)) { + return -3; + } + + if (csId == CS_ID_GLOBAL_END) { + csId = sCutsceneMgr.csId; + } + if (csId == sCutsceneMgr.csId) { + sCutsceneMgr.endCsId = sCutsceneMgr.csId; + return sCutsceneMgr.endCsId; + } + return -1; +} + +s16 CutsceneManager_GetCurrentCsId(void) { + return sCutsceneMgr.csId; +} + +ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId) { + return CutsceneManager_GetCutsceneEntryImpl(csId); +} + +s16 CutsceneManager_GetAdditionalCsId(s16 csId) { + if (csId < 0) { + return CS_ID_NONE; + } + return CutsceneManager_GetCutsceneEntryImpl(csId)->additionalCsId; +} + +s16 CutsceneManager_GetLength(s16 csId) { + if (csId < 0) { + return -1; + } + return CutsceneManager_GetCutsceneEntryImpl(csId)->length; +} + +s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId) { + if (csId < 0) { + return -1; + } + return CutsceneManager_GetCutsceneEntryImpl(csId)->scriptIndex; +} + +s16 CutsceneManager_GetCutsceneCustomValue(s16 csId) { + if (csId < 0) { + return -1; + } + return CutsceneManager_GetCutsceneEntryImpl(csId)->customValue; +} + +s16 CutsceneManager_GetCurrentSubCamId(s16 csId) { + return sCutsceneMgr.subCamId; +} + +s16 CutsceneManager_FindEntranceCsId(void) { + PlayState* play; + s32 csId; + + for (csId = 0; csId < sSceneCutsceneCount; csId++) { + //! FAKE: + if ((sSceneCutsceneList[csId].scriptIndex != CS_SCRIPT_ID_NONE) && + (sSceneCutsceneList[csId].scriptIndex < (play = sCutsceneMgr.play)->csCtx.scriptListCount) && + (sCutsceneMgr.play->curSpawn == + sCutsceneMgr.play->csCtx.scriptList[sSceneCutsceneList[csId].scriptIndex].spawn)) { + return csId; + } + } + + for (csId = 0; csId < sSceneCutsceneCount; csId++) { + if ((sSceneCutsceneList[csId].customValue >= 100) && + (sSceneCutsceneList[csId].customValue == (sCutsceneMgr.play->curSpawn + 100))) { + return csId; + } + } + + return -1; +} + +s32 func_800F22C4(s16 csId, Actor* actor) { + f32 dist; + s16 screenPosX; + s16 screenPosY; + + if ((sCutsceneMgr.csId == CS_ID_NONE) || (csId == CS_ID_NONE)) { + return 4; + } + + Actor_GetScreenPos(sCutsceneMgr.play, actor, &screenPosX, &screenPosY); + + dist = OLib_Vec3fDist(&actor->focus.pos, &Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.subCamId)->eye); + + if ((screenPosX > 40) && (screenPosX < SCREEN_WIDTH - 40) && (screenPosY > 40) && + (screenPosY < SCREEN_HEIGHT - 40) && (dist < 700.0f)) { + return 1; + } + if (sCutsceneMgr.length < 6) { + return 2; + } + if (csId == sCutsceneMgr.csId) { + return 0; + } + return 3; +} + +void CutsceneManager_SetReturnCamera(s16 camId) { + sCutsceneMgr.retCamId = camId; +} diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index f873ea8ff..148aad84e 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -92,7 +92,7 @@ void KaleidoSetup_Update(PlayState* play) { if ((pauseCtx->state == PAUSE_STATE_OFF) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE)) { if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { - if ((gSaveContext.save.cutscene < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) { + if ((gSaveContext.save.cutsceneIndex < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) { if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) { if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 1072587af..88b8f14cc 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1990,7 +1990,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { - if (ActorCutscene_GetCurrentIndex() == -1) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { Interface_SetHudVisibility(HUD_VISIBILITY_ALL); } } @@ -2267,7 +2267,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { s32 pad; s32 restoreHudVisibility = false; - if (gSaveContext.save.cutscene < 0xFFF0) { + if (gSaveContext.save.cutsceneIndex < 0xFFF0) { gSaveContext.hudVisibilityForceButtonAlphasByStatus = false; if ((player->stateFlags1 & PLAYER_STATE1_800000) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) || (!(CHECK_EVENTINF(EVENTINF_41)) && (play->unk_1887C >= 2))) { @@ -2434,7 +2434,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { sPictoState = PICTO_BOX_STATE_OFF; } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || (func_801A5100() == 1)) { if (!(CHECK_EVENTINF(EVENTINF_41)) || - ((CHECK_EVENTINF(EVENTINF_41)) && (ActorCutscene_GetCurrentIndex() == -1))) { + ((CHECK_EVENTINF(EVENTINF_41)) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) { play_sound(NA_SE_SY_CAMERA_SHUTTER); SREG(89) = 1; play->haltAllActors = true; diff --git a/src/code/z_play.c b/src/code/z_play.c index 99073fb5c..bd4db8fec 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -567,11 +567,13 @@ void Play_UpdateTransition(PlayState* this) { if ((!(Entrance_GetTransitionFlags(this->nextEntrance + sceneLayer) & 0x8000) || ((this->nextEntrance == ENTRANCE(PATH_TO_MOUNTAIN_VILLAGE, 1)) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) || + !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) || ((this->nextEntrance == ENTRANCE(ROAD_TO_SOUTHERN_SWAMP, 1)) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) || - ((this->nextEntrance == ENTRANCE(TERMINA_FIELD, 2)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) || - ((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20))) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) || + ((this->nextEntrance == ENTRANCE(TERMINA_FIELD, 2)) && + !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) || (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) { func_801A4058(20); @@ -983,8 +985,8 @@ void Play_UpdateMain(PlayState* this) { if (!this->haltAllActors) { Actor_UpdateAll(this, &this->actorCtx); } - Cutscene_Update1(this, &this->csCtx); - Cutscene_Update2(this, &this->csCtx); + Cutscene_UpdateManual(this, &this->csCtx); + Cutscene_UpdateScripted(this, &this->csCtx); Effect_UpdateAll(this); EffectSS_UpdateAllParticles(this); EffFootmark_Update(this); @@ -1502,8 +1504,8 @@ void Play_Main(GameState* thisx) { *CONTROLLER1(&this->state) = input; } - ActorCutscene_Update(); - ActorCutscene_ClearWaiting(); + CutsceneManager_Update(); + CutsceneManager_ClearWaiting(); } s32 Play_InCsMode(PlayState* this) { @@ -2016,37 +2018,47 @@ s32 Play_IsDebugCamEnabled(void) { return gDbgCamEnabled; } -// A mapping from playerActorCsIds to sGlobalCamDataSettings indices. -s16 D_801D0D64[] = { -3, -2, -4, -5, -7, -11, -8, -9, -6, -16 }; +// A mapping from playerCsIds to sGlobalCamDataSettings indices. +s16 sPlayerCsIdToCsCamId[] = { + CS_CAM_ID_GLOBAL_ITEM_OCARINA, // PLAYER_CS_ID_ITEM_OCARINA + CS_CAM_ID_GLOBAL_ITEM_GET, // PLAYER_CS_ID_ITEM_GET + CS_CAM_ID_GLOBAL_ITEM_BOTTLE, // PLAYER_CS_ID_ITEM_BOTTLE + CS_CAM_ID_GLOBAL_ITEM_SHOW, // PLAYER_CS_ID_ITEM_SHOW + CS_CAM_ID_GLOBAL_WARP_PAD_MOON, // PLAYER_CS_ID_WARP_PAD_MOON + CS_CAM_ID_GLOBAL_MASK_TRANSFORMATION, // PLAYER_CS_ID_MASK_TRANSFORMATION + CS_CAM_ID_GLOBAL_DEATH, // PLAYER_CS_ID_DEATH + CS_CAM_ID_GLOBAL_REVIVE, // PLAYER_CS_ID_REVIVE + CS_CAM_ID_GLOBAL_SONG_WARP, // PLAYER_CS_ID_SONG_WARP + CS_CAM_ID_GLOBAL_WARP_PAD_ENTRANCE, // PLAYER_CS_ID_WARP_PAD_ENTRANCE +}; // Used by Player /** - * Extract the common actor cutscene ids used by Player from the scene and set the actor cutscene ids in - * this->playerActorCsIds. If a playerActorCsId is not present in the scene, then that particular id is set - * to -1. Otherwise, if there is an ActorCutscene where csCamSceneDataId matches the appropriate element of D_801D0D64, - * set the corresponding playerActorCsId (and possibly change its priority for the zeroth one) + * Extract the common cutscene ids used by Player from the scene and set the cutscene ids in this->playerCsIds. + * If a playerCsId is not present in the scene, then that particular id is set to CS_ID_NONE. + * Otherwise, if there is an ActorCutscene where csCamId matches the appropriate element of sPlayerCsIdToCsCamId, + * set the corresponding playerActorCsId (and possibly change its priority for the zeroth one). */ -void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId) { +void Play_AssignPlayerCsIdsFromScene(GameState* thisx, s32 spawnCsId) { PlayState* this = (PlayState*)thisx; s32 i; - s16* curPlayerActorCsId = this->playerActorCsIds; - s16* phi_s1 = D_801D0D64; + s16* curPlayerCsId = this->playerCsIds; + s16* csCamId = sPlayerCsIdToCsCamId; - for (i = 0; i < ARRAY_COUNT(this->playerActorCsIds); i++, curPlayerActorCsId++, phi_s1++) { - ActorCutscene* actorCutscene; - s32 curActorCsId; + for (i = 0; i < ARRAY_COUNT(this->playerCsIds); i++, curPlayerCsId++, csCamId++) { + ActorCutscene* csEntry; + s32 curCsId; - *curPlayerActorCsId = -1; + *curPlayerCsId = CS_ID_NONE; - for (curActorCsId = startActorCsId; curActorCsId != -1; curActorCsId = actorCutscene->additionalCutscene) { - actorCutscene = ActorCutscene_GetCutscene(curActorCsId); + for (curCsId = spawnCsId; curCsId != CS_ID_NONE; curCsId = csEntry->additionalCsId) { + csEntry = CutsceneManager_GetCutsceneEntry(curCsId); - if (actorCutscene->csCamSceneDataId == *phi_s1) { - if ((actorCutscene->csCamSceneDataId == -3) && - (actorCutscene->priority == 700)) { // override ocarina cs priority - actorCutscene->priority = 550; + if (csEntry->csCamId == *csCamId) { + if ((csEntry->csCamId == CS_CAM_ID_GLOBAL_ITEM_OCARINA) && (csEntry->priority == 700)) { + csEntry->priority = 550; } - *curPlayerActorCsId = curActorCsId; + *curPlayerCsId = curCsId; break; } } @@ -2101,7 +2113,7 @@ void Play_Init(GameState* thisx) { scene = ((void)0, gSaveContext.save.entrance) >> 9; spawn = (((void)0, gSaveContext.save.entrance) >> 4) & 0x1F; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { if (scene == ENTR_SCENE_MOUNTAIN_VILLAGE_WINTER) { scene = ENTR_SCENE_MOUNTAIN_VILLAGE_SPRING; } else if (scene == ENTR_SCENE_GORON_VILLAGE_WINTER) { @@ -2115,7 +2127,7 @@ void Play_Init(GameState* thisx) { } } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { if (scene == ENTR_SCENE_SOUTHERN_SWAMP_POISONED) { scene = ENTR_SCENE_SOUTHERN_SWAMP_CLEARED; } else if (scene == ENTR_SCENE_WOODFALL) { @@ -2123,11 +2135,11 @@ void Play_Init(GameState* thisx) { } } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && (scene == ENTR_SCENE_IKANA_CANYON)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (scene == ENTR_SCENE_IKANA_CANYON)) { gSaveContext.nextCutsceneIndex = 0xFFF2; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80) && + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE) && ((scene == ENTR_SCENE_GREAT_BAY_COAST) || (scene == ENTR_SCENE_ZORA_CAPE))) { gSaveContext.nextCutsceneIndex = 0xFFF0; } @@ -2179,15 +2191,15 @@ void Play_Init(GameState* thisx) { EffectSS_Init(this, 100); CollisionCheck_InitContext(this, &this->colChkCtx); AnimationContext_Reset(&this->animationCtx); - Cutscene_Init(this, &this->csCtx); + Cutscene_InitContext(this, &this->csCtx); if (gSaveContext.nextCutsceneIndex != 0xFFEF) { - gSaveContext.save.cutscene = gSaveContext.nextCutsceneIndex; + gSaveContext.save.cutsceneIndex = gSaveContext.nextCutsceneIndex; gSaveContext.nextCutsceneIndex = 0xFFEF; } - if (gSaveContext.save.cutscene == 0xFFFD) { - gSaveContext.save.cutscene = 0; + if (gSaveContext.save.cutsceneIndex == 0xFFFD) { + gSaveContext.save.cutsceneIndex = 0; } if (gSaveContext.nextDayTime != 0xFFFF) { @@ -2204,13 +2216,13 @@ void Play_Init(GameState* thisx) { func_800EDDB0(this); if (((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN)) || - (gSaveContext.save.cutscene >= 0xFFF0)) { + (gSaveContext.save.cutsceneIndex >= 0xFFF0)) { gSaveContext.unk_3DC0 = 0; Magic_Reset(this); - gSaveContext.sceneLayer = (gSaveContext.save.cutscene & 0xF) + 1; + gSaveContext.sceneLayer = (gSaveContext.save.cutsceneIndex & 0xF) + 1; // Set saved cutscene to 0 so it doesn't immediately play, but instead let the `CutsceneManager` handle it. - gSaveContext.save.cutscene = 0; + gSaveContext.save.cutsceneIndex = 0; } else { gSaveContext.sceneLayer = 0; } @@ -2296,7 +2308,7 @@ void Play_Init(GameState* thisx) { D_801F6D4C->envColor.g = 0; D_801F6D4C->envColor.b = 0; D_801F6D4C->envColor.a = 0; - EnvFlags_UnsetAll(this); + CutsceneFlags_UnsetAll(this); THA_GetRemaining(&this->state.heap); zAllocSize = THA_GetRemaining(&this->state.heap); zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.heap, zAllocSize); @@ -2319,13 +2331,13 @@ void Play_Init(GameState* thisx) { Camera_ChangeDataIdx(&this->mainCamera, player->actor.params & 0xFF); } - func_800F15D8(&this->mainCamera); + CutsceneManager_StoreCamera(&this->mainCamera); Interface_SetSceneRestrictions(this); func_800FB758(this); gSaveContext.seqId = this->sequenceCtx.seqId; gSaveContext.ambienceId = this->sequenceCtx.ambienceId; AnimationContext_Update(this, &this->animationCtx); - func_800EDBE0(this); + Cutscene_HandleEntranceTriggers(this); gSaveContext.respawnFlag = 0; sBombersNotebookOpen = false; BombersNotebook_Init(&sBombersNotebook); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 4c72496d0..f8b33b853 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -359,9 +359,9 @@ void func_80122F28(Player* player) { PLAYER_STATE1_20000000))) && (!(player->stateFlags2 & PLAYER_STATE2_1))) { if (player->doorType <= PLAYER_DOORTYPE_TALKING) { - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } else { - ActorCutscene_SetIntentToPlay(0x7D); + CutsceneManager_Queue(CS_ID_GLOBAL_DOOR); } } } diff --git a/src/code/z_scene.c b/src/code/z_scene.c index fc47c9bf7..26dc39507 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -402,7 +402,7 @@ void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) { play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f; play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f; - if ((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutscene < 0xFFF0)) { + if ((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) { gSaveContext.skyboxTime = gSaveContext.save.time; if ((gSaveContext.skyboxTime >= CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) { @@ -470,15 +470,15 @@ void Scene_CommandAltHeaderList(PlayState* play, SceneCmd* cmd) { } } -// SceneTableEntry Header Command 0x17: Cutscene List -void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd) { - play->csCtx.sceneCsCount = cmd->cutsceneList.sceneCsCount; - play->csCtx.sceneCsList = Lib_SegmentedToVirtual(cmd->cutsceneList.segment); +// SceneTableEntry Header Command 0x17: Cutscene Script List +void Scene_CommandCutsceneScriptList(PlayState* play, SceneCmd* cmd) { + play->csCtx.scriptListCount = cmd->scriptList.scriptListCount; + play->csCtx.scriptList = Lib_SegmentedToVirtual(cmd->scriptList.segment); } -// SceneTableEntry Header Command 0x1B: Actor Cutscene List -void Scene_CommandActorCutsceneList(PlayState* play, SceneCmd* cmd) { - ActorCutscene_Init(play, Lib_SegmentedToVirtual(cmd->cutsceneActorList.segment), cmd->cutsceneActorList.num); +// SceneTableEntry Header Command 0x1B: Cutscene List +void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd) { + CutsceneManager_Init(play, Lib_SegmentedToVirtual(cmd->cutsceneList.segment), cmd->cutsceneList.num); } // SceneTableEntry Header Command 0x1C: Mini Maps @@ -560,11 +560,11 @@ void (*sSceneCmdHandlers[])(PlayState*, SceneCmd*) = { NULL, Scene_CommandSoundSettings, Scene_CommandEchoSetting, - Scene_CommandCutsceneList, + Scene_CommandCutsceneScriptList, Scene_CommandAltHeaderList, Scene_CommandSetRegionVisitedFlag, Scene_CommandAnimatedMaterials, - Scene_CommandActorCutsceneList, + Scene_CommandCutsceneList, Scene_CommandMiniMap, Scene_Command1D, Scene_CommandMiniMapCompassInfo, @@ -601,7 +601,7 @@ u16 Entrance_Create(s32 scene, s32 spawn, s32 layer) { } /** - * Creates an layer 0 entranace from the current entrance and the given spawn. + * Creates an layer 0 entrance from the current entrance and the given spawn. */ u16 Entrance_CreateFromSpawn(s32 spawn) { return Entrance_Create((u32)gSaveContext.save.entrance >> 9, spawn, 0); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index c269e30f4..c10c1943e 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -939,10 +939,9 @@ void Sram_InitDebugSave(void) { Sram_GenerateRandomSaveFields(); } -// Unused -void func_80144A94(SramContext* sramCtx) { +void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { s32 i; - s32 cutscene = gSaveContext.save.cutscene; + s32 cutsceneIndex = gSaveContext.save.cutsceneIndex; bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); @@ -957,7 +956,7 @@ void func_80144A94(SramContext* sramCtx) { D_801C67F0[gSaveContext.fileNum * 2 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } - gSaveContext.save.cutscene = cutscene; + gSaveContext.save.cutsceneIndex = cutsceneIndex; for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) { gSaveContext.eventInf[i] = 0; @@ -1067,10 +1066,10 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { } else { gSaveContext.save.entrance = D_801C6A58[(void)0, gSaveContext.save.owlSaveLocation]; if ((gSaveContext.save.entrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && - CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { gSaveContext.save.entrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10); } else if ((gSaveContext.save.entrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) && - CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { gSaveContext.save.entrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8); } @@ -1532,7 +1531,7 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { if (gSaveContext.unk_3F3F) { Sram_InitNewSave(); if (fileSelect->unk_24480 == 0) { - gSaveContext.save.cutscene = 0xFFF0; + gSaveContext.save.cutsceneIndex = 0xFFF0; } for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); phi_v0++) { @@ -1634,7 +1633,7 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) { * Saves when beating the game, after showing the "Dawn of the New Day" message */ void Sram_SaveSpecialNewDay(PlayState* play) { - s32 cutscene = gSaveContext.save.cutscene; + s32 cutsceneIndex = gSaveContext.save.cutsceneIndex; s32 day; u16 time = gSaveContext.save.time; @@ -1647,7 +1646,7 @@ void Sram_SaveSpecialNewDay(PlayState* play) { gSaveContext.save.day = day; gSaveContext.save.time = time; - gSaveContext.save.cutscene = cutscene; + gSaveContext.save.cutsceneIndex = cutsceneIndex; func_80185F64(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]); } diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 210d6c36f..a4d95af64 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -1386,48 +1386,53 @@ void SubS_ChangeAnimationBySpeedInfo(SkelAnime* skelAnime, AnimationSpeedInfo* a *curAnimIndex = nextAnimIndex; } -s32 SubS_StartActorCutscene(Actor* actor, s16 nextCutscene, s16 curCutscene, s32 type) { +s32 SubS_StartCutscene(Actor* actor, s16 nextCsId, s16 curCsId, s32 type) { s32 isStarted = false; - if ((curCutscene != -1) && (ActorCutscene_GetCurrentIndex() == curCutscene)) { - ActorCutscene_Stop(curCutscene); - ActorCutscene_SetIntentToPlay(nextCutscene); - } else if (ActorCutscene_GetCanPlayNext(nextCutscene)) { + if ((curCsId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == curCsId)) { + CutsceneManager_Stop(curCsId); + CutsceneManager_Queue(nextCsId); + } else if (CutsceneManager_IsNext(nextCsId)) { switch (type) { - case SUBS_CUTSCENE_SET_UNK_LINK_FIELDS: - ActorCutscene_StartAndSetUnkLinkFields(nextCutscene, actor); + case SUBS_CUTSCENE_WITH_PLAYER: + CutsceneManager_StartWithPlayerCs(nextCsId, actor); break; + case SUBS_CUTSCENE_NORMAL: - ActorCutscene_Start(nextCutscene, actor); + CutsceneManager_Start(nextCsId, actor); break; - case SUBS_CUTSCENE_SET_FLAG: - ActorCutscene_StartAndSetFlag(nextCutscene, actor); + + case SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG: + CutsceneManager_StartWithPlayerCsAndSetFlag(nextCsId, actor); + break; + + default: break; } isStarted = true; } else { - ActorCutscene_SetIntentToPlay(nextCutscene); + CutsceneManager_Queue(nextCsId); } return isStarted; } -s32 SubS_FillCutscenesList(Actor* actor, s16 cutscenes[], s16 numCutscenes) { - s16 cs; +s32 SubS_FillCutscenesList(Actor* actor, s16 csIdList[], s16 numCutscenes) { + s16 csId; s32 i; for (i = 0; i < numCutscenes; i++) { - cutscenes[i] = -1; + csIdList[i] = CS_ID_NONE; } - cs = actor->cutscene; + csId = actor->csId; i = 0; - while (cs != -1) { - // Note: Infinite loop if numCutscenes is less than possible additional cutscenes + while (csId != CS_ID_NONE) { + // Note: Infinite loop if numCutscenes is less than possible additional csIdList if (i < numCutscenes) { - cutscenes[i] = cs; - cs = ActorCutscene_GetAdditionalCutscene(cs); + csIdList[i] = csId; + csId = CutsceneManager_GetAdditionalCsId(csId); i++; } } 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 a2af1839d..59348962a 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 @@ -113,7 +113,7 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) { return; } BgAstrBombwall_InitCollider(&sTrisInit, &this->dyna.actor.world.pos, &this->dyna.actor.shape.rot, &this->collider); - SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList)); func_80C0A378(this); } @@ -175,7 +175,7 @@ void func_80C0A400(BgAstrBombwall* this, PlayState* play) { } void func_80C0A418(BgAstrBombwall* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->dyna.actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->dyna.actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { func_80C0A458(this, play); } } 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 4f42a8b3c..224d94d7a 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 @@ -13,6 +13,6 @@ typedef struct BgAstrBombwall { /* 0x15C */ BgAstrBombwallActionFunc actionFunc; /* 0x160 */ ColliderTris collider; /* 0x180 */ ColliderTrisElement colliderElements[2]; - /* 0x238 */ s16 cutscenes[1]; + /* 0x238 */ s16 csIdList[1]; } BgAstrBombwall; #endif // Z_BG_ASTR_BOMBWALL_H 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 4c73987ec..b2e59a51b 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -153,7 +153,7 @@ s32 func_808B7380(BgBreakwall* this, PlayState* play) { } s32 func_808B73C4(BgBreakwall* this, PlayState* play) { - return CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_01); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_01); } s32 func_808B73FC(BgBreakwall* this, PlayState* play) { @@ -176,7 +176,7 @@ s32 func_808B7460(BgBreakwall* this, PlayState* play) { } s32 func_808B74A8(BgBreakwall* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { return false; } return true; @@ -285,7 +285,7 @@ void func_808B782C(BgBreakwall* this, PlayState* play) { } void func_808B78A4(BgBreakwall* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->dyna.actor); } } diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c index 5ee73366a..adf9b3c96 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c @@ -163,8 +163,8 @@ void BgCtowerGear_Update(Actor* thisx, PlayState* play) { void BgCtowerGear_UpdateOrgan(Actor* thisx, PlayState* play) { BgCtowerGear* this = THIS; - if (Cutscene_CheckActorAction(play, 104)) { - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 104)]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_104)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_104)]->id) { case 1: this->dyna.actor.draw = NULL; DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c index e94b28d88..571523fcb 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c @@ -88,7 +88,7 @@ void BgCtowerRot_CorridorRotate(BgCtowerRot* this, PlayState* play) { Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_DUNGEON0); this->dyna.actor.shape.rot.z = rotZ * 16.384f; - if (play->csCtx.frames == 132) { + if (play->csCtx.curFrame == 132) { play_sound(NA_SE_SY_SPIRAL_DASH); } } @@ -100,7 +100,7 @@ void BgCtowerRot_DoorClose(BgCtowerRot* this, PlayState* play) { if (!Math_SmoothStepToF(&this->timer, 0.0f, 0.1f, 15.0f, 0.1f)) { if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP); - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } this->actionFunc = BgCtowerRot_DoorDoNothing; } else if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) { @@ -119,19 +119,19 @@ void BgCtowerRot_DoorIdle(BgCtowerRot* this, PlayState* play) { Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos); if (offset.z > 30.0f) { this->unk160 = 0.0f; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = BgCtowerRot_SetupDoorClose; } } void BgCtowerRot_SetupDoorClose(BgCtowerRot* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); } this->actionFunc = BgCtowerRot_DoorClose; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } 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 51797185a..2a59a9b8f 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 @@ -627,16 +627,16 @@ void func_80B83518(Actor* thisx, PlayState* play) { if (this->unk_17F == 2) { this->unk_17E--; if (this->unk_17E <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->unk_17F = 0; } } else if ((this->unk_17F != 0) && (this->unk_17F == 1)) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->unk_17F = 2; this->unk_17E = 0x50; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } this->unk_16C = this->unk_170; 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 960006b93..570369f07 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 @@ -97,7 +97,7 @@ static AnimatedMaterial* sTexAnims[] = { s16 D_80A2B96C[] = { 0, 0x16C, -0x16C, 0 }; -s16 D_80A2B974[] = { -1, -1 }; +static s16 sCsIdList[] = { CS_ID_NONE, CS_ID_NONE }; static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneScale, 1500, ICHAIN_CONTINUE), @@ -197,7 +197,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { this->xluDList = sXluDLists[this->unk_160]; this->texAnim = sTexAnims[this->unk_160]; - SubS_FillCutscenesList(&this->dyna.actor, this->unk_1B6, ARRAY_COUNT(this->unk_1B6)); + SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList)); switch (this->unk_160) { case 1: @@ -254,8 +254,8 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { this->unk_2F8[1] = NULL; this->unk_2F8[0] = NULL; label: - for (i = 0; i < ARRAY_COUNT(D_80A2B974); i++) { - D_80A2B974[i] = this->unk_1B6[i]; + 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_1CC = D_80A2B96C[this->unk_178]; @@ -385,8 +385,8 @@ void func_80A2A32C(BgDblueMovebg* this, PlayState* play) { } if (phi_v1) { - this->unk_180 = func_800F2178(this->unk_1B6[0]); - this->unk_1D2 = this->unk_1B6[0]; + this->unk_180 = CutsceneManager_GetCutsceneCustomValue(this->csIdList[0]); + this->csId = this->csIdList[0]; this->unk_172 |= 8; this->actionFunc = func_80A2A444; } else { @@ -447,7 +447,7 @@ void func_80A2A670(BgDblueMovebg* this, PlayState* play) { void func_80A2A688(BgDblueMovebg* this, PlayState* play) { this->unk_180--; if (this->unk_180 <= 0) { - ActorCutscene_Stop(this->unk_1B6[0]); + CutsceneManager_Stop(this->csIdList[0]); } if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y - 60.0f, 2.0f) && @@ -477,8 +477,8 @@ void func_80A2A714(BgDblueMovebg* this, PlayState* play) { } this->unk_17E = phi_v0 * phi_f0; - this->unk_180 = func_800F2178(this->unk_1B6[0]); - this->unk_1D2 = this->unk_1B6[0]; + this->unk_180 = CutsceneManager_GetCutsceneCustomValue(this->csIdList[0]); + this->csId = this->csIdList[0]; this->unk_172 |= 8; this->actionFunc = func_80A2A7F8; } @@ -549,12 +549,12 @@ void func_80A2AAB8(BgDblueMovebg* this, PlayState* play) { s32 sp18; if (this->unk_180-- <= 0) { - ActorCutscene_Stop(this->unk_1B6[0]); + CutsceneManager_Stop(this->csIdList[0]); } sp18 = false; - if ((this->unk_1D0 > 0) && ((D_80A2B974[0] >= 0) || (D_80A2B974[1] >= 0))) { - if (ActorCutscene_GetCurrentIndex() != -1) { + if ((this->unk_1D0 > 0) && ((sCsIdList[0] >= 0) || (sCsIdList[1] >= 0))) { + if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) { sp18 = true; } } @@ -642,13 +642,13 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) { switch (temp_v0_3) { case 1: case 2: - this->unk_1D2 = this->unk_1B6[0]; + this->csId = this->csIdList[0]; this->unk_17E = 40; break; case 0: case 3: - this->unk_1D2 = this->unk_1B6[1]; + this->csId = this->csIdList[1]; this->unk_17E = 15; break; } @@ -721,7 +721,7 @@ void BgDblueMovebg_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_172 & 8) { - if (SubS_StartActorCutscene(&this->dyna.actor, this->unk_1D2, -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->dyna.actor, this->csId, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { this->unk_172 &= ~8; } } 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 8fc016585..6e81c24c1 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 @@ -37,7 +37,7 @@ typedef struct BgDblueMovebg { /* 0x19C */ Vec3f unk_19C; /* 0x1A8 */ Vec3f unk_1A8; /* 0x1B4 */ UNK_TYPE1 unk1B4[2]; - /* 0x1B6 */ s16 unk_1B6[2]; + /* 0x1B6 */ s16 csIdList[2]; /* 0x1BC */ s32 unk_1BC; /* 0x1C0 */ s32 unk_1C0; /* 0x1C4 */ s32 unk_1C4; @@ -45,7 +45,7 @@ typedef struct BgDblueMovebg { /* 0x1CC */ s16 unk_1CC; /* 0x1CE */ s16 unk_1CE; /* 0x1D0 */ s16 unk_1D0; - /* 0x1D2 */ s16 unk_1D2; + /* 0x1D2 */ s16 csId; /* 0x1D4 */ f32 unk_1D4; /* 0x1D8 */ s16 unk_1D8[2][8]; /* 0x1F8 */ f32 unk_1F8[2][8]; 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 3ba003ee5..8f3de2b2e 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 @@ -423,13 +423,13 @@ void func_80B84928(BgDblueWaterfall* this, PlayState* play) { if (sp30 != 0) { func_80B83EA4(this, play); if (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800) { - this->unk_1A4 = this->actor.cutscene; + this->csId = this->actor.csId; func_80B84AD4(this, play); } } else { func_80B841A0(this, play); if (this->collider.info.acHitInfo->toucher.dmgFlags & 0x1000) { - this->unk_1A4 = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); func_80B84AD4(this, play); } } @@ -448,9 +448,9 @@ void func_80B84AEC(BgDblueWaterfall* this, PlayState* play) { s32 pad; s32 sp20; - if (ActorCutscene_GetCanPlayNext(this->unk_1A4)) { + if (CutsceneManager_IsNext(this->csId)) { sp20 = func_80B83D04(this, play); - ActorCutscene_StartAndSetUnkLinkFields(this->unk_1A4, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_1A3 = true; if (sp20) { func_80B83D94(this, play); @@ -460,7 +460,7 @@ void func_80B84AEC(BgDblueWaterfall* this, PlayState* play) { func_80B84B9C(this, play); } } else { - ActorCutscene_SetIntentToPlay(this->unk_1A4); + CutsceneManager_Queue(this->csId); } } @@ -533,7 +533,7 @@ void func_80B84BCC(BgDblueWaterfall* this, PlayState* play) { func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } else { if (this->unk_1A3) { - ActorCutscene_Stop(this->unk_1A4); + CutsceneManager_Stop(this->csId); } func_80B8484C(this, play); } @@ -572,7 +572,7 @@ void func_80B84F20(BgDblueWaterfall* this, PlayState* play) { func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); } else { if (this->unk_1A3) { - ActorCutscene_Stop(this->unk_1A4); + CutsceneManager_Stop(this->csId); } func_80B8484C(this, play); } 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 5ab64495e..fae5cca6a 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 @@ -22,7 +22,7 @@ typedef struct BgDblueWaterfall { /* 0x1A0 */ u8 unk_1A0; /* 0x1A1 */ UNK_TYPE1 unk1A1[2]; /* 0x1A3 */ s8 unk_1A3; - /* 0x1A4 */ s16 unk_1A4; + /* 0x1A4 */ s16 csId; /* 0x1A6 */ UNK_TYPE1 unk1A6[1]; /* 0x1A7 */ s8 unk_1A7; /* 0x1A8 */ f32 unk_1A8; 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 eb1848c56..e9f8916d0 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 @@ -146,7 +146,7 @@ void BgDkjailIvy_WaitForCut(BgDkjailIvy* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; this->dyna.actor.flags |= ACTOR_FLAG_10; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); BgDkjailIvy_SetupCutscene(this); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); @@ -158,8 +158,8 @@ void BgDkjailIvy_SetupCutscene(BgDkjailIvy* this) { } void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + 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)); @@ -167,7 +167,7 @@ void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN); BgDkjailIvy_SetupFadeOut(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } 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 a39e10559..be1958cb4 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 @@ -157,16 +157,16 @@ s32 func_80BC3B00(BgF40Block* this) { } s32 func_80BC3CA4(BgF40Block* this) { - if (this->dyna.actor.cutscene == -1) { + if (this->dyna.actor.csId == CS_ID_NONE) { return true; } - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); return true; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); return false; } @@ -277,13 +277,13 @@ void func_80BC4228(BgF40Block* this, PlayState* play) { this->unk_164 = this->unk_160 + 1; } else { this->actionFunc = func_80BC4530; - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_C); } } if (func_80BC3D08(this, play, 0)) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->actionFunc = func_80BC41AC; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_F); return; @@ -337,13 +337,13 @@ void func_80BC4448(BgF40Block* this, PlayState* play) { this->unk_164 = this->unk_160 - 1; } else { this->actionFunc = func_80BC4380; - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_C); } } if (func_80BC3D08(this, play, 0)) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->actionFunc = func_80BC43CC; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_F); } 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 ffa9491d6..67703f0cd 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 @@ -147,7 +147,7 @@ void BgF40Switch_Press(BgF40Switch* this, PlayState* play) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_SWITCH); Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10); if (this->isInitiator) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->isInitiator = false; } this->actionFunc = BgF40Switch_IdlePressed; @@ -157,19 +157,19 @@ void BgF40Switch_Press(BgF40Switch* this, PlayState* play) { } void BgF40Switch_WaitToPress(BgF40Switch* this, PlayState* play) { - if (!this->isInitiator || this->dyna.actor.cutscene == -1) { + 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)); } - } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &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)); } } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c index 8b02330f3..7d0ed6a1a 100644 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c +++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c @@ -42,7 +42,7 @@ void func_80B40080(BgGoronOyu* this) { void func_80B4009C(BgGoronOyu* this) { this->unk_17E = 0; - this->initialActorCutscene = this->dyna.actor.cutscene; + this->initCsId = this->dyna.actor.csId; this->actionFunc = func_80B40100; this->unk_164 = 20.0f; } @@ -53,11 +53,11 @@ void func_80B400C8(BgGoronOyu* this, PlayState* play) { } void func_80B40100(BgGoronOyu* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->initialActorCutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->initialActorCutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->initCsId)) { + CutsceneManager_StartWithPlayerCs(this->initCsId, &this->dyna.actor); this->actionFunc = func_80B40160; } else { - ActorCutscene_SetIntentToPlay(this->initialActorCutscene); + CutsceneManager_Queue(this->initCsId); } } @@ -69,7 +69,7 @@ void func_80B40160(BgGoronOyu* this, PlayState* play) { BgGoronOyu_UpdateWaterBoxInfo(this, play); if (this->unk_164 <= 0.0f) { - ActorCutscene_Stop(this->initialActorCutscene); + CutsceneManager_Stop(this->initCsId); this->unk_164 = 0.0f; func_80B40080(this); } diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h index d17ff87b3..57459364b 100644 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h +++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h @@ -15,7 +15,7 @@ typedef struct BgGoronOyu { /* 0x168 */ Vec3f waterBoxPos; /* 0x174 */ f32 waterBoxXLength; /* 0x178 */ f32 waterBoxZLength; - /* 0x17C */ s16 initialActorCutscene; + /* 0x17C */ s16 initCsId; /* 0x17E */ u16 unk_17E; } BgGoronOyu; // size = 0x180 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 387f5ec83..fc209773b 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 @@ -191,13 +191,13 @@ void func_80BD6274(BgHakaBombwall* this, PlayState* play) { void BgHakaBombwall_SetupPlayCutscene(BgHakaBombwall* this) { this->dyna.actor.flags |= ACTOR_FLAG_10; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = BgHakaBombwall_PlayCutscene; } void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + 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)); @@ -205,7 +205,7 @@ void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); BgHakaBombwall_SetupEndCutscene(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -217,7 +217,7 @@ void BgHakaBombwall_SetupEndCutscene(BgHakaBombwall* this) { void BgHakaBombwall_EndCutscene(BgHakaBombwall* this, PlayState* play) { this->csTimer--; if (this->csTimer <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); } } diff --git a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c index b90774172..dfc176eff 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c +++ b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c @@ -79,12 +79,12 @@ void func_80B6DCEC(BgHakaCurtain* this) { } void func_80B6DD00(BgHakaCurtain* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); func_80B6DD5C(this); return; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } void func_80B6DD5C(BgHakaCurtain* this) { @@ -123,11 +123,11 @@ void func_80B6DEA8(BgHakaCurtain* this, PlayState* play) { void BgHakaCurtain_Update(Actor* thisx, PlayState* play) { BgHakaCurtain* this = THIS; - CsCmdActorAction* actorAction; + CsCmdActorCue* cue; - if (Cutscene_CheckActorAction(play, 469)) { - actorAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 469)]; - if (actorAction->startFrame == play->csCtx.frames && actorAction->action == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_469)) { + cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_469)]; + if ((cue->startFrame == play->csCtx.curFrame) && (cue->id == 2)) { func_80B6DD80(this); } } 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 94e7c57dc..693fff484 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 @@ -47,7 +47,7 @@ void BgHakaTomb_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000EE8); - SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList)); func_80BD6624(this); } @@ -61,15 +61,15 @@ void func_80BD6624(BgHakaTomb* this) { this->actionFunc = func_80BD66AC; } -s32 func_80BD6638(s16* arg0, s16* arg1, s32 arg2) { +s32 func_80BD6638(s16* csId, s16* csIdList, s32 numCutscenes) { s32 pad; s32 retVal = false; s32 i; - *arg0 = ActorCutscene_GetCurrentIndex(); - if (*arg0 >= 0) { - for (i = 0; i < arg2; i++) { - if (*arg0 == arg1[i]) { + *csId = CutsceneManager_GetCurrentCsId(); + if (*csId >= 0) { + for (i = 0; i < numCutscenes; i++) { + if (*csId == csIdList[i]) { retVal = true; break; } @@ -80,12 +80,13 @@ s32 func_80BD6638(s16* arg0, s16* arg1, s32 arg2) { } void func_80BD66AC(BgHakaTomb* this, PlayState* play) { - s16 temp; + s16 csId; if (Flags_GetClear(play, this->dyna.actor.room)) { this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); } - if (!func_80BD6638(&temp, this->cutscenes, 1) && (temp < 0) && Flags_GetClear(play, this->dyna.actor.room)) { + if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId < 0) && + Flags_GetClear(play, this->dyna.actor.room)) { this->dyna.actor.flags |= ACTOR_FLAG_1; if (this->dyna.actor.isTargeted) { func_80BD6754(this); @@ -100,7 +101,7 @@ void func_80BD6754(BgHakaTomb* this) { } void func_80BD6768(BgHakaTomb* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->dyna.actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->dyna.actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { BgHakaTomb_SetupDoNothing(this); } } diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h index 3c607e0e2..fa06a8695 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h +++ b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h @@ -10,7 +10,7 @@ typedef void (*BgHakaTombActionFunc)(struct BgHakaTomb*, PlayState*); typedef struct BgHakaTomb { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ BgHakaTombActionFunc actionFunc; - /* 0x160 */ s16 cutscenes[1]; + /* 0x160 */ s16 csIdList[1]; } BgHakaTomb; // size = 0x164 #endif // Z_BG_HAKA_TOMB_H 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 41112ccdc..99a5a759c 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 @@ -382,7 +382,7 @@ void func_80ABCCE4(BgHakuginBombwall* this, PlayState* play) { if (ptr->unk_20(this, play)) { this->dyna.actor.flags |= ACTOR_FLAG_10; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = func_80ABCD98; } else { this->collider.base.acFlags &= ~AC_HIT; @@ -393,10 +393,10 @@ void func_80ABCCE4(BgHakuginBombwall* this, PlayState* play) { void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) { s32 pad; - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { BgHakuginBombwallStruct* ptr = &D_80ABCFC0[BGHAKUGIN_BOMBWALL_100(&this->dyna.actor)]; - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); ptr->unk_24(this, play); this->dyna.actor.draw = NULL; this->unk_1AC = 20; @@ -404,7 +404,7 @@ void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80ABCE60; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -413,7 +413,7 @@ void func_80ABCE60(BgHakuginBombwall* this, PlayState* play) { this->unk_1AC--; if (this->unk_1AC <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); } else if (this->unk_1AC == ptr->unk_2C) { ptr->unk_28(this, play); 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 42a7c4e05..7cd94bd86 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 @@ -104,15 +104,15 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) { this->unk_15C = 0; } if (this->unk_160) { - if (this->dyna.actor.cutscene == -1) { + if (this->dyna.actor.csId == CS_ID_NONE) { this->unk_160 = false; return; - } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->unk_160 = false; return; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } 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 5a06fe415..a8b6ce702 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 @@ -28,9 +28,9 @@ void func_80A9CE00(BgHakuginPost* this); void func_80A9CE1C(BgHakuginPost* this, PlayState* play); void func_80A9D0A0(BgHakuginPost* this); void func_80A9D0B4(BgHakuginPost* this, PlayState* play); -void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4); +void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csLength, s16 csId); void func_80A9D260(BgHakuginPost* this, PlayState* play); -void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4); +void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csId, s16 additionalCsId); void func_80A9D360(BgHakuginPost* this, PlayState* play); void func_80A9D3E4(BgHakuginPost* this); void func_80A9D434(BgHakuginPost* this, PlayState* play); @@ -162,12 +162,12 @@ void func_80A9AFB4(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* } else { unkStruct->unk_0000[i].unk_34 = 1; } - unkStruct->unk_0000[i].unk_2A = this->dyna.actor.cutscene; - unkStruct->unk_0000[i].unk_2C = ActorCutscene_GetAdditionalCutscene(unkStruct->unk_0000[i].unk_2A); + unkStruct->unk_0000[i].csId = this->dyna.actor.csId; + unkStruct->unk_0000[i].additionalCsId = CutsceneManager_GetAdditionalCsId(unkStruct->unk_0000[i].csId); } else { unkStruct->unk_0000[i].unk_34 = 1; - unkStruct->unk_0000[i].unk_2A = -1; - unkStruct->unk_0000[i].unk_2C = -1; + unkStruct->unk_0000[i].csId = CS_ID_NONE; + unkStruct->unk_0000[i].additionalCsId = CS_ID_NONE; } unkStruct->unk_0000[i].unk_2F = 1; @@ -783,7 +783,7 @@ void func_80A9CC84(BgHakuginPost* this) { void func_80A9CCA0(BgHakuginPost* this, PlayState* play) { if (this->unk_174 != 0) { func_80A9D1E0(this, func_80A9CD00, (this->unk_164 - this->dyna.actor.home.pos.y) + 100.0f, 60, - this->dyna.actor.cutscene); + this->dyna.actor.csId); } } @@ -823,7 +823,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { if (this->unk_170 != 0) { func_80A9D1E0(this, func_80A9D0A0, (this->unk_164 - this->dyna.actor.home.pos.y) + 100.0f, 0x3C, - ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene)); + CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId)); return; } @@ -843,8 +843,8 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { func_8019F128(NA_SE_EV_SLIDE_DOOR_OPEN); Flags_SetSwitch(play, D_80A9E028.unk_0000[i].unk_2E); this->unk_178 = 20; - func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f, - D_80A9E028.unk_0000[i].unk_2A, D_80A9E028.unk_0000[i].unk_2C); + 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); break; } } @@ -884,12 +884,12 @@ void func_80A9D0B4(BgHakuginPost* this, PlayState* play) { } } -void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4) { +void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csLength, s16 csId) { this->unkFunc = unkFunc; - this->unk_184 = arg4; - this->unk_180 = ActorCutscene_GetLength(arg4); - if (this->unk_180 < 0) { - this->unk_180 = arg3; + this->csId = csId; + this->csLength = CutsceneManager_GetLength(csId); + if (this->csLength < 0) { + this->csLength = csLength; } this->dyna.actor.focus.pos.x = this->dyna.actor.home.pos.x; this->dyna.actor.focus.pos.y = this->unk_16C + arg2; @@ -898,22 +898,22 @@ void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 } void func_80A9D260(BgHakuginPost* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_184)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_184, &this->dyna.actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor); this->unkFunc(this); } else { - ActorCutscene_SetIntentToPlay(this->unk_184); + CutsceneManager_Queue(this->csId); } } -void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4) { +void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csId, s16 additionalCsId) { this->unkFunc = unkFunc; - this->unk_184 = arg3; - this->unk_186 = arg4; - this->unk_180 = -1; - this->unk_180 = ActorCutscene_GetLength(arg3); - if (this->unk_180 < 0) { - this->unk_180 = 15; + this->csId = csId; + this->additionalCsId = additionalCsId; + this->csLength = -1; + this->csLength = CutsceneManager_GetLength(csId); + if (this->csLength < 0) { + this->csLength = 15; } this->dyna.actor.focus.pos.x = this->dyna.actor.home.pos.x; this->dyna.actor.focus.pos.y = this->unk_16C + arg2; @@ -922,32 +922,32 @@ void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 } void func_80A9D360(BgHakuginPost* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_184)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_184, &this->dyna.actor); - if (this->unk_186 >= 0) { + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor); + if (this->additionalCsId >= 0) { func_80A9D3E4(this); } else { this->unkFunc(this); } } else { - ActorCutscene_SetIntentToPlay(this->unk_184); + CutsceneManager_Queue(this->csId); } } void func_80A9D3E4(BgHakuginPost* this) { - this->unk_182 = ActorCutscene_GetLength(this->unk_186); - if (this->unk_182 < 0) { - this->unk_182 = 30; + this->additionalCsLength = CutsceneManager_GetLength(this->additionalCsId); + if (this->additionalCsLength < 0) { + this->additionalCsLength = 30; } this->actionFunc = func_80A9D434; } void func_80A9D434(BgHakuginPost* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_186) != 0) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_186, &this->dyna.actor); + if (CutsceneManager_IsNext(this->additionalCsId)) { + CutsceneManager_StartWithPlayerCs(this->additionalCsId, &this->dyna.actor); this->unkFunc(this); } else { - ActorCutscene_SetIntentToPlay(this->unk_186); + CutsceneManager_Queue(this->additionalCsId); } } @@ -956,17 +956,17 @@ void BgHakuginPost_Update(Actor* thisx, PlayState* play) { f32 temp; func_80A9B46C(this, play); - if ((this->unk_180 >= 0) && ((this->actionFunc != func_80A9D260) || (this->actionFunc != func_80A9D360))) { - this->unk_180--; - if (this->unk_180 < 0) { - ActorCutscene_Stop(this->unk_184); + if ((this->csLength >= 0) && ((this->actionFunc != func_80A9D260) || (this->actionFunc != func_80A9D360))) { + this->csLength--; + if (this->csLength < 0) { + CutsceneManager_Stop(this->csId); } } - if ((this->unk_182 >= 0) && (this->actionFunc != func_80A9D434)) { - this->unk_182--; - if (this->unk_182 < 0) { - ActorCutscene_Stop(this->unk_186); + if ((this->additionalCsLength >= 0) && (this->actionFunc != func_80A9D434)) { + this->additionalCsLength--; + if (this->additionalCsLength < 0) { + CutsceneManager_Stop(this->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 5a23fa070..4797a684a 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 @@ -19,8 +19,8 @@ typedef struct { /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s16 unk_28; - /* 0x2A */ s16 unk_2A; - /* 0x2C */ s16 unk_2C; + /* 0x2A */ s16 csId; + /* 0x2C */ s16 additionalCsId; /* 0x2E */ u8 unk_2E; /* 0x2F */ u8 unk_2F; /* 0x30 */ s8 unk_30; @@ -64,10 +64,10 @@ typedef struct BgHakuginPost { /* 0x178 */ s8 unk_178; /* 0x179 */ s8 unk_179; /* 0x17C */ BgHakuginPostFunc unkFunc; - /* 0x180 */ s16 unk_180; - /* 0x182 */ s16 unk_182; - /* 0x184 */ s16 unk_184; - /* 0x186 */ s16 unk_186; + /* 0x180 */ s16 csLength; + /* 0x182 */ s16 additionalCsLength; + /* 0x184 */ s16 csId; + /* 0x186 */ s16 additionalCsId; } BgHakuginPost; // size = 0x188 #endif // Z_BG_HAKUGIN_POST_H 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 512a5b822..c7fa3d69e 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 @@ -143,12 +143,12 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) { this->collider.dim.yShift = 0x1D; this->unk_1A8 = object_goronswitch_DL_000268; - this->unk_1B8 = this->dyna.actor.cutscene; + this->csId = this->dyna.actor.csId; if (sp34 == 0) { - this->unk_1BA = -1; + this->additionalCsId = CS_ID_NONE; } else { - this->unk_1BA = ActorCutscene_GetAdditionalCutscene(this->unk_1B8); + this->additionalCsId = CutsceneManager_GetAdditionalCsId(this->csId); } if (sp30) { @@ -166,8 +166,8 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain2); this->unk_1A8 = D_80B1688C[sp34].unk_10; - this->unk_1B8 = this->dyna.actor.cutscene; - this->unk_1BA = ActorCutscene_GetAdditionalCutscene(this->unk_1B8); + this->csId = this->dyna.actor.csId; + this->additionalCsId = CutsceneManager_GetAdditionalCsId(this->csId); if (sp30 == sp28) { func_80B15F3C(this, play); @@ -186,9 +186,9 @@ void BgHakuginSwitch_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80B15A4C(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 arg2) { +void func_80B15A4C(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 csId) { this->unk_1B4 = func; - this->unk_1BC = arg2; + this->curCsId = csId; this->actionFunc = func_80B15A68; } @@ -197,14 +197,14 @@ void func_80B15A68(BgHakuginSwitch* this, PlayState* play) { BgHakuginSwitchStruct* s = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)]; s32 sp18 = !(s->unk_14 & 0x40); - if (ActorCutscene_GetCanPlayNext(this->unk_1BC)) { + if (CutsceneManager_IsNext(this->curCsId)) { if (sp18) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_1BC, &this->dyna.actor); + CutsceneManager_StartWithPlayerCs(this->curCsId, &this->dyna.actor); this->unk_1BF = 40; } this->unk_1B4(this, play); } else if (sp18) { - ActorCutscene_SetIntentToPlay(this->unk_1BC); + CutsceneManager_Queue(this->curCsId); } } @@ -281,7 +281,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { D_80B16AF0 = play->gameplayFrames; if (sp38->unk_14 & 0x10) { - func_80B15A4C(this, func_80B15E0C, this->unk_1B8); + func_80B15A4C(this, func_80B15E0C, this->csId); } else { func_80B15E0C(this, play); } @@ -343,7 +343,7 @@ void func_80B15F88(BgHakuginSwitch* this, PlayState* play) { if (phi_a0 != phi_v1) { if ((sp18->unk_14 & 0xFF) & 0x20) { if (D_80B16AF0 < play->gameplayFrames) { - func_80B15A4C(this, func_80B1606C, this->unk_1BA); + func_80B15A4C(this, func_80B1606C, this->additionalCsId); } } else { func_80B1606C(this, play); @@ -372,16 +372,16 @@ void func_80B160DC(BgHakuginSwitch* this, PlayState* play) { } } -void func_80B16180(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 arg2, s32 arg3) { +void func_80B16180(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 arg2, s32 csId) { this->unk_1B4 = func; this->unk_1BE = arg2; - this->unk_1BC = arg3; + this->curCsId = csId; this->actionFunc = func_80B161A0; } void func_80B161A0(BgHakuginSwitch* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_1BC)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_1BC, &this->dyna.actor); + 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)); } else { @@ -390,7 +390,7 @@ void func_80B161A0(BgHakuginSwitch* this, PlayState* play) { this->unk_1BF = 50; this->unk_1B4(this, play); } else { - ActorCutscene_SetIntentToPlay(this->unk_1BC); + CutsceneManager_Queue(this->curCsId); } } @@ -427,7 +427,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) { if (sp24) { if (sp28) { - func_80B16180(this, func_80B163C4, 1, this->unk_1B8); + func_80B16180(this, func_80B163C4, 1, this->csId); } else { func_80B163C4(this, play); } @@ -466,7 +466,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 (BGHAKUGINSWITCH_GET_7(&this->dyna.actor) == BGHAKUGINSWITCH_GET_7_1) { - func_80B16180(this, func_80B165A0, 0, this->unk_1BA); + func_80B16180(this, func_80B165A0, 0, this->additionalCsId); } else { func_80B165A0(this, play); } @@ -498,7 +498,7 @@ void BgHakuginSwitch_Update(Actor* thisx, PlayState* play) { if ((this->actionFunc != func_80B15A68) && (this->actionFunc != func_80B161A0)) { this->unk_1BF--; if (this->unk_1BF == 0) { - ActorCutscene_Stop(this->unk_1BC); + CutsceneManager_Stop(this->curCsId); } } } 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 164220b29..caf3c2f65 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 @@ -22,9 +22,9 @@ typedef struct BgHakuginSwitch { /* 0x1B0 */ s16 unk_1B0; /* 0x1B2 */ s8 unk_1B2; /* 0x1B4 */ BgHakuginSwitchUnkFunc unk_1B4; - /* 0x1B8 */ s16 unk_1B8; - /* 0x1BA */ s16 unk_1BA; - /* 0x1BC */ s16 unk_1BC; + /* 0x1B8 */ s16 csId; + /* 0x1BA */ s16 additionalCsId; + /* 0x1BC */ s16 curCsId; /* 0x1BE */ s8 unk_1BE; /* 0x1BF */ s8 unk_1BF; /* 0x1C0 */ s8 unk_1C0; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c index 622c84100..401d3543e 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c @@ -358,13 +358,13 @@ void BgIkanaBlock_Update(Actor* thisx, PlayState* play) { if (this->unk_17E != 0) { if (this->unk_17F > 0) { this->unk_17F--; - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->unk_17E = 0; - } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->unk_17F = 30; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } } 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 88f606ac0..edcda4b37 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 @@ -319,13 +319,13 @@ void func_80BD4F9C(BgIkanaBombwall* this, PlayState* play) { void func_80BD4FF8(BgIkanaBombwall* this) { this->dyna.actor.flags |= ACTOR_FLAG_10; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = func_80BD503C; } void func_80BD503C(BgIkanaBombwall* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) { func_80BD4720(this, play); } else { @@ -339,7 +339,7 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play) { } func_80BD5118(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -352,11 +352,11 @@ void func_80BD5134(BgIkanaBombwall* this, PlayState* play) { if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) { this->unk_1AC--; if (this->unk_1AC <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); } - } else if (this->dyna.actor.cutscene >= 0) { - if (ActorCutscene_GetCurrentIndex() != this->dyna.actor.cutscene) { + } else if (this->dyna.actor.csId >= 0) { + if (CutsceneManager_GetCurrentCsId() != this->dyna.actor.csId) { Actor_Kill(&this->dyna.actor); } } else { 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 aead34d28..44f81da9c 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 @@ -115,7 +115,7 @@ void BgIkanaDharma_Init(Actor* thisx, PlayState* play2) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_IKANA_DHARMA, this->dyna.actor.world.pos.x, segmentY, this->dyna.actor.world.pos.z, this->dyna.actor.shape.rot.x, this->dyna.actor.shape.rot.y, this->dyna.actor.shape.rot.z, - BGIKANADHARMA_PARAMS(0, true, 0), this->dyna.actor.cutscene, + BGIKANADHARMA_PARAMS(0, true, 0), this->dyna.actor.csId, this->dyna.actor.halfDaysBits, NULL); } @@ -173,16 +173,16 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { } void BgIkanaDharma_SetupStartCutscene(BgIkanaDharma* this) { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = BgIkanaDharma_StartCutscene; } void BgIkanaDharma_StartCutscene(BgIkanaDharma* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); BgIkanaDharma_SetupWaitForCutsceneToEnd(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -200,7 +200,7 @@ void BgIkanaDharma_WaitForCutsceneToEnd(BgIkanaDharma* this, PlayState* play) { sFirstHitBgIkanaDharma = NULL; } - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } 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 432a5b5ff..7398dbfd9 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 @@ -179,7 +179,7 @@ void func_80B80440(BgIkanaRotaryroom* this, PlayState* play) { this->unk_204.unk_00 = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_BG_IKANA_BLOCK, sp50.x, sp50.y, sp50.z, this->dyna.actor.shape.rot.x, this->dyna.actor.shape.rot.y, this->dyna.actor.shape.rot.z, -1, - ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene), this->dyna.actor.halfDaysBits, NULL); + CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId), this->dyna.actor.halfDaysBits, NULL); Matrix_Pop(); } @@ -515,7 +515,7 @@ void func_80B81010(BgIkanaRotaryroom* this, PlayState* play) { CollisionPoly* sp7C; s32 sp78; - if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) { phi_s7 = true; for (i = 0; i < ARRAY_COUNT(this->unk_3E0); i++) { @@ -582,7 +582,7 @@ void func_80B81234(BgIkanaRotaryroom* this, PlayState* play) { CollisionPoly* sp40; s32 sp3C; - if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) { if (player == NULL) { return; } @@ -646,7 +646,7 @@ void func_80B81234(BgIkanaRotaryroom* this, PlayState* play) { void func_80B814B8(BgIkanaRotaryroom* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) { if (player->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) { Player_PlaySfx(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->voiceSfxIdOffset); func_80169EFC(&play->state); @@ -791,14 +791,14 @@ void func_80B819DC(BgIkanaRotaryroom* this) { void func_80B819F0(Actor* thisx, PlayState* play) { BgIkanaRotaryroom* this = THIS; - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); - if (this->dyna.actor.cutscene >= 0) { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); + if (this->dyna.actor.csId >= 0) { + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); } func_80B81A64(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -926,7 +926,7 @@ void func_80B81DC8(Actor* thisx, PlayState* play) { this->unk_584--; if (this->unk_584 <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); func_80B818B4(this); } else if (this->unk_584 == 19) { s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); 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 a7ba89cdc..f39ca3b8c 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 @@ -106,12 +106,12 @@ void func_80BD5878(BgIkanaShutter* this) { } void func_80BD5894(BgIkanaShutter* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); func_80BD58F0(this); return; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } void func_80BD58F0(BgIkanaShutter* this) { @@ -177,13 +177,13 @@ void func_80BD5B44(BgIkanaShutter* this) { } void func_80BD5B60(BgIkanaShutter* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); Flags_SetClear(play, this->dyna.actor.room); func_80BD5BC4(this); return; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } void func_80BD5BC4(BgIkanaShutter* this) { 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 824c58ee6..5a69e3ca7 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 @@ -179,11 +179,11 @@ void func_80C0ACD4(BgIkninSusceil* this) { } void func_80C0ACE8(BgIkninSusceil* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); func_80C0AD44(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -198,7 +198,7 @@ void func_80C0AD64(BgIkninSusceil* this, PlayState* play) { if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 365.0f, 0.5f, this->dyna.actor.velocity.y, 1.0f) < 0.1f) { func_80C0A86C(this, play, 1, 14, 3); - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); func_80C0AB14(this); } else { func_800B9010(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_RISING - SFX_FLAG); 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 db343e84b..36f8e94fc 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c @@ -80,16 +80,16 @@ void func_80C07220(BgIkninside* this, PlayState* play) { } void func_80C07230(BgIkninside* this, PlayState* play) { - if (this->dyna.actor.cutscene == -1) { + if (this->dyna.actor.csId == CS_ID_NONE) { this->actionFunc = func_80C07220; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->dyna.actor.csId); + } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->actionFunc = func_80C07220; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c index 9cbfaec61..2c24a5580 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c @@ -51,9 +51,9 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) { switch (BGIKNVDOUKUTU_GET_F(&this->dyna.actor)) { case BGIKNVDOUKUTU_F_0: this->actionFunc = func_80BD71BC; - this->csAction = 0x204; + this->cueType = CS_CMD_ACTOR_CUE_516; this->unk_160 = 1.0f; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { this->dyna.actor.draw = func_80BD7768; this->actionFunc = func_80BD73D0; play->envCtx.lightSettingOverride = 25; @@ -65,7 +65,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) { case BGIKNVDOUKUTU_F_1: Actor_SetScale(&this->dyna.actor, 1.0f); this->dyna.actor.draw = func_80BD7820; - this->csAction = 0x204; + this->cueType = CS_CMD_ACTOR_CUE_516; DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_012788, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); @@ -75,7 +75,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) { break; case BGIKNVDOUKUTU_F_2: - this->csAction = 0x204; + this->cueType = CS_CMD_ACTOR_CUE_516; this->dyna.actor.draw = func_80BD78C4; DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_0117C8, &colHeader); @@ -116,8 +116,8 @@ void func_80BD716C(BgIknvDoukutu* this, PlayState* play) { void func_80BD71BC(BgIknvDoukutu* this, PlayState* play) { play->envCtx.lightSettingOverride = 24; - if (Cutscene_CheckActorAction(play, this->csAction) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action == 2)) { + if (Cutscene_IsCueInChannel(play, this->cueType) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) { this->actionFunc = func_80BD716C; this->dyna.actor.draw = func_80BD7538; } @@ -135,8 +135,8 @@ void func_80BD7250(BgIknvDoukutu* this, PlayState* play) { } void func_80BD72BC(BgIknvDoukutu* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, this->csAction) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action == 3)) { + if (Cutscene_IsCueInChannel(play, this->cueType) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) { this->actionFunc = func_80BD7250; } @@ -146,8 +146,8 @@ void func_80BD72BC(BgIknvDoukutu* this, PlayState* play) { } void func_80BD7360(BgIknvDoukutu* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, this->csAction) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action == 2)) { + if (Cutscene_IsCueInChannel(play, this->cueType) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) { this->actionFunc = func_80BD72BC; } } diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h index f36393869..beeeb0b81 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h @@ -18,7 +18,7 @@ enum { typedef struct BgIknvDoukutu { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ s16 unk_15C; // set and not used - /* 0x15E */ u16 csAction; + /* 0x15E */ u16 cueType; /* 0x160 */ f32 unk_160; /* 0x164 */ BgIknvDoukutuActionFunc actionFunc; } BgIknvDoukutu;// size = 0x168 diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c index 2651c52bc..1419c3466 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c @@ -107,20 +107,20 @@ void BgIknvObj_Destroy(Actor* thisx, PlayState* play) { } s32 func_80BD7CEC(BgIknvObj* this) { - if (this->dyna.actor.cutscene == -1) { + if (this->dyna.actor.csId == CS_ID_NONE) { return true; } - if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) { return true; } - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); return true; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); return false; } @@ -131,8 +131,8 @@ void BgIknvObj_UpdateWaterwheel(BgIknvObj* this, PlayState* play) { func_800B9010(&this->dyna.actor, NA_SE_EV_WOOD_WATER_WHEEL - SFX_FLAG); } - if ((play->csCtx.state != 0) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 4) && - (play->csCtx.frames == 1495)) { + if ((play->csCtx.state != 0) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 4) && + (play->csCtx.curFrame == 1495)) { func_8019F128(NA_SE_EV_DOOR_UNLOCK); } } @@ -166,7 +166,7 @@ void func_80BD7F4C(BgIknvObj* this, PlayState* play) { this->actionFunc = func_80BD7ED8; } if ((this->dyna.actor.home.rot.x == 1) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_58_80)) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->dyna.actor.home.rot.x = 0; } CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); 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 7ada76df8..502b29086 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -126,7 +126,7 @@ s32 func_80953DA8(BgIngate* this, PlayState* play) { Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN); if (CHECK_EVENTINF(EVENTINF_35)) { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); } else { SET_EVENTINF(EVENTINF_41); } @@ -169,7 +169,7 @@ void func_80953F14(BgIngate* this, PlayState* play) { if (this->timePath != NULL) { func_80953B40(this); } - this->unk16E = -1; + this->csId = CS_ID_NONE; this->actionFunc = func_80953F9C; } @@ -192,7 +192,7 @@ void func_80953F9C(BgIngate* this, PlayState* play) { if (this->timePath->unk1 != 0xFF) { func_80953E38(play); - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); this->dyna.actor.textId = 0x9E4; Message_StartTextbox(play, this->dyna.actor.textId, NULL); this->unk16C += 1; @@ -206,13 +206,13 @@ void func_80953F9C(BgIngate* this, PlayState* play) { } this->actionFunc = func_809542A0; } - } else if ((ActorCutscene_GetCurrentIndex() == -1) && (this->timePath != NULL)) { + } else if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (this->timePath != NULL)) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CRUISER - SFX_FLAG); func_80953BEC(this); } } - if (ActorCutscene_GetCurrentIndex() != this->unk16E) { - if (ActorCutscene_GetCurrentIndex() != -1) { + if (CutsceneManager_GetCurrentCsId() != this->csId) { + if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) { Camera_ChangeSetting(mainCam, CAM_SET_NORMAL0); player->stateFlags1 |= PLAYER_STATE1_20; play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON; @@ -221,7 +221,7 @@ void func_80953F9C(BgIngate* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20; } } - this->unk16E = ActorCutscene_GetCurrentIndex(); + this->csId = CutsceneManager_GetCurrentCsId(); } void func_809541B8(BgIngate* this, PlayState* play) { @@ -231,7 +231,7 @@ void func_809541B8(BgIngate* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_HUMAN) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->dyna.actor.xzDistToPlayer < 40.0f)) { if (this->dyna.actor.playerHeightRel > 15.0f) { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); this->dyna.actor.textId = 0x9E6; Message_StartTextbox(play, this->dyna.actor.textId, NULL); this->actionFunc = func_809543D4; @@ -261,7 +261,7 @@ void func_809542A0(BgIngate* this, PlayState* play) { void func_80954340(BgIngate* this, PlayState* play) { if (!DECR(this->unk16A)) { if (this->timePath != NULL) { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); this->timePath = &play->setupPathList[this->timePath->unk1]; func_80953F14(this, play); Environment_StopTime(); @@ -280,7 +280,7 @@ void func_809543D4(BgIngate* this, PlayState* play) { break; case 0x9E5: if (play->msgCtx.choiceIndex == 0) { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); this->unk160 &= ~0x4; this->actionFunc = func_809541B8; Environment_StartTime(); @@ -301,7 +301,7 @@ void func_809543D4(BgIngate* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); func_8019F208(); } else { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); this->unk160 &= ~0x4; this->actionFunc = func_809541B8; Environment_StartTime(); @@ -330,7 +330,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->dyna.actor, 1.0f); this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0); this->dyna.actor.room = -1; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); } if (!CHECK_EVENTINF(EVENTINF_35) && CHECK_WEEKEVENTREG(WEEKEVENTREG_90_40)) { diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h index cc0befd19..6046fc31e 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h @@ -17,7 +17,7 @@ typedef struct BgIngate { /* 0x168 */ s16 timePathTimeSpeed; /* 0x16A */ s16 unk16A; /* 0x16C */ s16 unk16C; - /* 0x16E */ s16 unk16E; + /* 0x16E */ s16 csId; /* 0x170 */ Vec3f timePathTargetPos; /* 0x17C */ f32 timePathProgress; /* 0x180 */ s32 timePathTotalTime; 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 77139783e..a868b355c 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 @@ -171,7 +171,7 @@ void BgKin2Bombwall_SetupWait(BgKin2Bombwall* this) { void BgKin2Bombwall_Wait(BgKin2Bombwall* this, PlayState* play) { if (BgKin2Bombwall_IsHitFromNearby(this, play)) { this->collider.base.acFlags &= ~AC_HIT; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); BgKin2Bombwall_SetupPlayCutscene(this); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); @@ -183,8 +183,8 @@ void BgKin2Bombwall_SetupPlayCutscene(BgKin2Bombwall* this) { } void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + 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)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); @@ -193,7 +193,7 @@ void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) { BgKin2Bombwall_SetupEndCutscene(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -205,7 +205,7 @@ void BgKin2Bombwall_SetupEndCutscene(BgKin2Bombwall* this) { void BgKin2Bombwall_EndCutscene(BgKin2Bombwall* this, PlayState* play) { this->timer--; if (this->timer <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); } } 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 1550711e1..66ac02634 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 @@ -217,13 +217,13 @@ void BgKin2Fence_SetupPlayOpenCutscene(BgKin2Fence* this) { } void BgKin2Fence_PlayOpenCutscene(BgKin2Fence* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); Flags_SetSwitch(play, this->dyna.actor.params & 0x7F); BgKin2Fence_SetupWaitBeforeOpen(this); return; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } void BgKin2Fence_SetupWaitBeforeOpen(BgKin2Fence* this) { diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c index 2d7b61d0c..7da9237bc 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c @@ -202,7 +202,7 @@ void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play) { // hit by projectile if (this->colliderTris.base.acFlags & AC_HIT) { this->colliderTris.base.acFlags &= ~AC_HIT; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); BgKin2Picture_SetupPlayCutscene(this); } else { // Gold Skulltula can be heard behind Skullkid's painting. if (this->skulltulaNoiseTimer >= 0) { @@ -227,12 +227,12 @@ void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this) { } void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->cutsceneStarted = true; BgKin2Picture_SetupShiver(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -314,7 +314,7 @@ void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play) { this->dyna.actor.shape.yOffset = 40.0f; if (this->cutsceneStarted) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); 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 aacd9b0a7..208babf77 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -90,20 +90,20 @@ void BgLadder_Destroy(Actor* thisx, PlayState* play) { void BgLadder_Wait(BgLadder* this, PlayState* play) { // Wait for the flag to be set, then trigger the cutscene if (Flags_GetSwitch(play, this->switchFlag)) { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->action = BgLadder_StartCutscene; } } void BgLadder_StartCutscene(BgLadder* this, PlayState* play) { // Trigger the cutscene, then make the ladder fade in - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->dyna.actor.draw = BgLadder_Draw; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SECRET_LADDER_APPEAR); this->action = BgLadder_FadeIn; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -112,7 +112,7 @@ void BgLadder_FadeIn(BgLadder* this, PlayState* play) { this->alpha += 5; if (this->alpha >= 255) { this->alpha = 255; - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.flags &= ~ACTOR_FLAG_10; // always update = off this->action = BgLadder_DoNothing; 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 63a973d8b..6085a93a2 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 @@ -164,7 +164,7 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) { BgLastBwall_InitCollider(&sTrisInit, &this->dyna.actor.world.pos, &this->dyna.actor.shape.rot, &this->colliderTris, D_80C18AC0[this->type]); - SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList)); func_80C187E4(this); } @@ -239,7 +239,7 @@ void func_80C1886C(BgLastBwall* this, PlayState* play) { } void func_80C18884(BgLastBwall* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->dyna.actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->dyna.actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { func_80C188C4(this, play); } } 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 3fafc71ea..e6d752c28 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 @@ -22,7 +22,7 @@ typedef struct BgLastBwall { /* 0x160 */ ColliderTris colliderTris; /* 0x180 */ ColliderTrisElement colliderTrisElement[2]; /* 0x238 */ u8 type; - /* 0x23A */ s16 cutscenes[1]; + /* 0x23A */ s16 csIdList[1]; } BgLastBwall; // size = 0x23C #endif // Z_BG_LAST_BWALL_H 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 4e9862001..3a11a2fdf 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 @@ -217,13 +217,13 @@ void BgNumaHana_SetupClosedIdle(BgNumaHana* this) { void BgNumaHana_ClosedIdle(BgNumaHana* this, PlayState* play) { if (this->fire.state != FIRE_STATE_NOT_LIT) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLAME_IGNITION); - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); SET_WEEKEVENTREG(WEEKEVENTREG_12_01); Flags_SetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor)); BgNumaHana_SetupUnfoldInnerPetals(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } } @@ -327,7 +327,7 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { this->flowerRotationalVelocity = 0x147; this->settleScale = 0.0f; - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); BgNumaHana_SetupOpenedIdle(this); } diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 99950a407..6acbc8aa8 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -166,18 +166,18 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) { void BgOpenShutter_Update(Actor* thisx, PlayState* play2) { BgOpenShutter* this = THIS; PlayState* play = play2; - s32 index; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 0x7C)) { - index = Cutscene_GetActorActionIndex(play, 0x7C); - if (play->csCtx.actorActions[index]->action == BGOPENSHUTTER_DOOR_OPEN) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_124)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_124); + if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_OPEN) { if (this->actionFunc == func_80ACAD88) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); this->actionFunc = func_80ACAE5C; this->dyna.actor.velocity.y = 0.0f; } this->unk_164 = 0; - } else if (play->csCtx.actorActions[index]->action == BGOPENSHUTTER_DOOR_CLOSED) { + } else if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_CLOSED) { if (this->actionFunc == func_80ACAE5C) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); this->actionFunc = func_80ACAEF0; diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c index dbe935b3f..275b1b565 100644 --- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c +++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c @@ -47,13 +47,13 @@ void BgOpenSpot_Destroy(Actor* thisx, PlayState* play) { void BgOpenSpot_Update(Actor* thisx, PlayState* play) { BgOpenSpot* this = THIS; - u32 action; + u32 cueId; - if (Cutscene_CheckActorAction(play, 0x7D)) { - action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x7D)]->action; - if (action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_125)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_125)]->id; + if (cueId == 1) { this->actor.draw = NULL; - } else if (action == 2) { + } else if (cueId == 2) { this->actor.draw = BgOpenSpot_Draw; } } diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c index 41ecaa19e..1b9e93009 100644 --- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c +++ b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c @@ -45,7 +45,7 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { Vec3f pos; s32 pad2; s32 shouldSpawnSeahorse; - s32 cs; + s32 csId; s32 i; DynaPolyActor_Init(&this->dyna, 0); @@ -54,11 +54,11 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&pos, &this->dyna.actor.world.pos); pos.x += Math_SinS(this->dyna.actor.world.rot.y + 0x8000) * 3000.0f; pos.z += Math_CosS(this->dyna.actor.world.rot.y + 0x8000) * 3000.0f; - cs = this->dyna.actor.cutscene; + csId = this->dyna.actor.csId; i = 0; // clang-format off - while (cs != -1) { this->cutscenes[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; } + while (csId != CS_ID_NONE) { this->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); i++; } // clang-format on this->dyna.actor.scale.x = 0.1f; @@ -74,9 +74,9 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { if (this->deepPython != NULL) { EnDragon* dragon = (EnDragon*)this->deepPython; - dragon->grabCutsceneIndex = this->cutscenes[0]; - dragon->deathCutsceneIndex = this->cutscenes[1]; - dragon->actor.cutscene = this->dyna.actor.cutscene; + dragon->grabCsId = this->csIdList[0]; + dragon->deathCsId = this->csIdList[1]; + dragon->actor.csId = this->dyna.actor.csId; Math_Vec3f_Copy(&dragon->burrowEntrancePos, &this->dyna.actor.world.pos); dragon->pythonIndex = this->pythonIndex; } @@ -99,7 +99,7 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { pos.z += (Math_CosS(this->dyna.actor.world.rot.y + 0x8000) * 500.0f); if (shouldSpawnSeahorse) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, pos.x, pos.y, pos.z, 0, - this->dyna.actor.shape.rot.y, 0, 0x4000, this->dyna.actor.cutscene, + this->dyna.actor.shape.rot.y, 0, 0x4000, this->dyna.actor.csId, this->dyna.actor.halfDaysBits, NULL); } diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h index abb341797..96c771c62 100644 --- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h +++ b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h @@ -12,7 +12,7 @@ typedef struct BgSinkaiKabe { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ BgSinkaiKabeActionFunc actionFunc; /* 0x160 */ Actor* deepPython; - /* 0x164 */ s16 cutscenes[2]; + /* 0x164 */ s16 csIdList[2]; /* 0x168 */ UNK_TYPE1 unk_168[0x4]; /* 0x16C */ s32 pythonIndex; } BgSinkaiKabe; // size = 0x170 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 4bc3c87af..0ebae5c1e 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -229,7 +229,7 @@ void func_809CE234(BgSpdweb* this, PlayState* play) { } if (this->unk_162 == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); return; } @@ -369,8 +369,8 @@ void func_809CE830(BgSpdweb* this, PlayState* play) { } if (this->unk_162 == 0) { - if (ActorCutscene_GetLength(this->dyna.actor.cutscene) == -1) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + if (CutsceneManager_GetLength(this->dyna.actor.csId) == -1) { + CutsceneManager_Stop(this->dyna.actor.csId); } Actor_Kill(&this->dyna.actor); return; @@ -470,16 +470,16 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) { } void func_809CEE74(BgSpdweb* this) { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = func_809CEEAC; } void func_809CEEAC(BgSpdweb* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); func_809CE1D0(this, play); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } 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 683bf322e..d4d2c7274 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -47,24 +47,24 @@ void func_80919F30(BgUmajump* this, PlayState* play) { } void BgUmajump_StopCutscene(BgUmajump* this, PlayState* play) { - if ((play->csCtx.frames >= 6) && !this->hasSoundPlayed) { + if ((play->csCtx.curFrame >= 6) && !this->hasSoundPlayed) { this->hasSoundPlayed = true; play_sound(NA_SE_EV_KID_HORSE_NEIGH); } - if (play->csCtx.state == CS_STATE_0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + if (play->csCtx.state == CS_STATE_IDLE) { + CutsceneManager_Stop(this->dyna.actor.csId); this->dyna.actor.update = Actor_Noop; } } void BgUmajump_PlayCutscene(BgUmajump* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); SET_WEEKEVENTREG(WEEKEVENTREG_89_20); this->actionFunc = BgUmajump_StopCutscene; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -95,7 +95,7 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { if ((thisx->params == BG_UMAJUMP_TYPE_2)) { if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) && !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) && - (thisx->cutscene != -1)) { + (thisx->csId != CS_ID_NONE)) { this->actionFunc = BgUmajump_CheckDistance; thisx->update = func_8091A5A0; thisx->flags |= ACTOR_FLAG_10; 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 1454fefa3..eae9fe0b3 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -550,7 +550,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { s32 i; s32 pad[2]; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && (this->actor.params == TWINMOLD_RED)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (this->actor.params == TWINMOLD_RED)) { sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f, 0.0f, 0, 0, 0, 1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0); @@ -1631,7 +1631,7 @@ void func_809DD934(Boss02* this, PlayState* play) { switch (this->unk_1D18) { case 0: if (player->stateFlags1 & PLAYER_STATE1_100) { - Cutscene_Start(play, &play->csCtx); + 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); @@ -1751,7 +1751,7 @@ void func_809DD934(Boss02* this, PlayState* play) { this->unk_1D18 = 0; func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); + Cutscene_StopManual(play, &play->csCtx); this->actor.flags |= ACTOR_FLAG_1; player->stateFlags1 &= ~PLAYER_STATE1_100; this->unk_1D70 = 0.01f; @@ -2050,10 +2050,11 @@ void func_809DEAC4(Boss02* this, PlayState* play) { break; case 1: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) || ((u32)(KREG(13) + 15) >= this->unk_1D1C)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) || + ((u32)(KREG(13) + 15) >= this->unk_1D1C)) { break; } - Cutscene_Start(play, &play->csCtx); + 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); @@ -2138,8 +2139,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) { if (this->unk_1D1C == (u32)(BREG(27) + 335)) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->actor.flags |= ACTOR_FLAG_1; this->unk_1D20 = 0; sRedTwinmold->unk_0144 = sBlueTwinmold->unk_0144 = 3; @@ -2149,8 +2150,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) { break; case 100: - if (ActorCutscene_GetCurrentIndex() == -1) { - Cutscene_Start(play, &play->csCtx); + if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { + 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); @@ -2199,8 +2200,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) { if (this->unk_1D1C == 30) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->unk_1D20 = 0; this->actor.flags |= ACTOR_FLAG_1; sp68->unk_0144 = 10; 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 506f8a1fa..c4c38982e 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -48,8 +48,6 @@ * - Effect Update/Draw * - 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" @@ -450,7 +448,7 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; Vec3f sp70; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0, 0, ENDOORWARP1_FF_1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, 0); @@ -1147,8 +1145,8 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { switch (this->csState) { case 0: if (player->actor.world.pos.y < 1350.0f) { - Cutscene_Start(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + Cutscene_StartManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); @@ -1369,8 +1367,8 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { mainCam->at = this->subCamAt; func_80169AFC(play, this->subCamId, 0); - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->subCamId = SUB_CAM_ID_DONE; func_809E344C(this, play); @@ -1446,8 +1444,8 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { switch (this->csState) { case 0: - if (ActorCutscene_GetCurrentIndex() == -1) { - Cutscene_Start(play, &play->csCtx); + if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { + Cutscene_StartManual(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_1); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); @@ -1628,8 +1626,8 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { mainCam->at = this->subCamAt; func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->csState = 3; Play_DisableMotionBlur(); Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_INIT_OLD); @@ -1661,8 +1659,8 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) { this->csTimer++; switch (this->csState) { case 0: - if (ActorCutscene_GetCurrentIndex() == -1) { - Cutscene_Start(play, &play->csCtx); + if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { + Cutscene_StartManual(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_1); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); @@ -1723,8 +1721,8 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); func_809E344C(this, play); this->workTimer[WORK_TIMER_UNK1_A] = 50; 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 6a6bc0c1d..a39b10143 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -254,16 +254,16 @@ void func_809EC568(Boss04* this, PlayState* play) { this->unk_2D0 = 2000.0f; if ((player->stateFlags1 & PLAYER_STATE1_100000) && (this->actor.projectedPos.z > 0.0f) && (fabsf(this->actor.projectedPos.x) < 300.0f) && (fabsf(this->actor.projectedPos.y) < 300.0f)) { - if ((this->unk_704 >= 15) && (ActorCutscene_GetCurrentIndex() == -1)) { + if ((this->unk_704 >= 15) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) { Actor* boss; this->unk_708 = 10; this->unk_704 = 0; - Cutscene_Start(play, &play->csCtx); + 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); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); player->actor.world.pos.x = this->unk_6E8; player->actor.world.pos.z = this->unk_6F0 + 410.0f; player->actor.shape.rot.y = 0x7FFF; @@ -389,8 +389,8 @@ void func_809EC568(Boss04* this, PlayState* play) { mainCam->at = this->subCamAt; func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); Play_DisableMotionBlur(); SET_EVENTINF(EVENTINF_60); } 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 13908ec4d..3d8beb79d 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -195,12 +195,12 @@ void func_809F24C8(Boss06* this, PlayState* play) { switch (this->unk_1C9) { case 0: - if (ActorCutscene_GetCurrentIndex() != -1) { + if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) { break; } - Cutscene_Start(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + Cutscene_StartManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); @@ -332,8 +332,8 @@ void func_809F24C8(Boss06* this, PlayState* play) { func_809F2ED0(this, play); func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); D_809F4970->unk_151 = 0; } break; 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 aa37e7b85..6882c189a 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c @@ -34,7 +34,7 @@ static s16 sObjectBankIndices[] = { OBJECT_GI_MASK14, OBJECT_GI_SWORD_4 }; static s16 sGetItemDraws[] = { GID_MASK_GREAT_FAIRY, GID_SWORD_GREAT_FAIRY }; -static u16 sCsActionIndices[] = { 0x6E, 0x236 }; +static u16 sCueTypes[] = { CS_CMD_ACTOR_CUE_110, CS_CMD_ACTOR_CUE_566 }; void DemoGetitem_Init(Actor* thisx, PlayState* play) { s32 pad; @@ -49,7 +49,7 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.25f); this->actionFunc = func_80A4FB10; this->item = sGetItemDraws[itemIndex]; - this->csAction = sCsActionIndices[itemIndex]; + this->cueType = sCueTypes[itemIndex]; objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]); if (objectIndex < 0) { Actor_Kill(&this->actor); @@ -74,14 +74,14 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) { PlayState* play = play2; u16 sp22 = (play->gameplayFrames * 1000) & 0xFFFF; - if (Cutscene_CheckActorAction(play, this->csAction)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action != 4) { + 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.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { case 2: this->actor.draw = DemoGetitem_Draw; - Cutscene_ActorTranslate(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction)); + Cutscene_ActorTranslate(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); this->actor.shape.rot.y += 0x3E8; break; @@ -91,7 +91,7 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) { case 4: this->actor.draw = DemoGetitem_Draw; - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); this->actor.shape.yOffset = Math_SinS(sp22) * 15.0f; break; 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 91c7dc97e..ca00f6048 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h @@ -12,7 +12,7 @@ typedef void (*DemoGetitemActionFunc)(struct DemoGetitem*, PlayState*); typedef struct DemoGetitem { /* 0x000 */ Actor actor; /* 0x144 */ s16 item; - /* 0x146 */ u16 csAction; + /* 0x146 */ u16 cueType; /* 0x148 */ s8 objectIndex; /* 0x14C */ DemoGetitemActionFunc actionFunc; } DemoGetitem; // size = 0x150 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 b1d5c7128..111ce284f 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -68,7 +68,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) { this->unk_3E6 = 0; this->unk_3DC = NULL; this->unk_3E0 = NULL; - this->unk_3F2 = 0; + this->cueId = 0; this->unk_3D8 = 1.0f; switch (DEMOSYOTEN_GET_F(&this->actor)) { @@ -81,7 +81,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) { this->actor.child = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_DUST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0); - this->unk_3F0 = 0x215; + this->cueType = CS_CMD_ACTOR_CUE_533; Actor_SetScale(&this->actor, 0.05f); break; @@ -91,14 +91,14 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) { this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_001448); this->unk_3E4 |= 1; this->actionFunc = func_80C16BD4; - this->unk_3F0 = 0x215; + this->cueType = CS_CMD_ACTOR_CUE_533; Actor_SetScale(&this->actor, 0.05f); break; case DEMOSYOTEN_F_2: this->unk_3DC = object_syoten_DL_001730; this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_0018B8); - this->unk_3F0 = 0x216; + this->cueType = CS_CMD_ACTOR_CUE_534; this->actionFunc = func_80C16DD4; this->unk_3E4 |= 2; Actor_SetScale(&this->actor, 4.0f); @@ -107,7 +107,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) { case DEMOSYOTEN_F_3: this->unk_3DC = object_syoten_DL_001DD0; this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_002B98); - this->unk_3F0 = 0x218; + this->cueType = CS_CMD_ACTOR_CUE_536; this->unk_3E4 |= 8; this->actionFunc = func_80C16EAC; Actor_SetScale(&this->actor, 0.5f); @@ -118,7 +118,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) { this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_002B88); this->unk_3E4 |= 2; this->actionFunc = func_80C17008; - this->unk_3F0 = 0x217; + this->cueType = CS_CMD_ACTOR_CUE_535; this->unk_3E4 |= 1; this->unk_3E4 |= 8; this->actor.draw = func_80C17690; @@ -219,20 +219,20 @@ void func_80C16A64(DemoSyoten* this, PlayState* play) { } void func_80C16A74(DemoSyoten* this, PlayState* play) { - u16 temp_a0; + u16 cueId; func_80183DE0(&this->unk_144); - if (Cutscene_CheckActorAction(play, this->unk_3F0)) { - if ((play->csCtx.frames >= 160) && (play->csCtx.frames < 322)) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + if ((play->csCtx.curFrame >= 160) && (play->csCtx.curFrame < 322)) { func_800B9010(&this->actor, NA_SE_EV_IKANA_SOUL_LV - SFX_FLAG); - } else if (play->csCtx.frames == 322) { + } else if (play->csCtx.curFrame == 322) { Actor_PlaySfx(&this->actor, NA_SE_EV_IKANA_SOUL_TRANSFORM); } - temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action; - if (this->unk_3F2 != temp_a0) { - this->unk_3F2 = temp_a0; - switch (temp_a0) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + if (this->cueId != cueId) { + this->cueId = cueId; + switch (cueId) { case 1: this->actor.draw = NULL; break; @@ -251,7 +251,7 @@ void func_80C16A74(DemoSyoten* this, PlayState* play) { } } - if (temp_a0 == 3) { + if (cueId == 3) { if (this->unk_3D8 > 0.0125f) { this->unk_3D8 -= 0.0125f; if (this->actor.child != NULL) { @@ -271,13 +271,13 @@ void func_80C16A74(DemoSyoten* this, PlayState* play) { void func_80C16BD4(DemoSyoten* this, PlayState* play) { s32 pad; - u16 temp_a0; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->unk_3F0)) { - temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action; - if (this->unk_3F2 != temp_a0) { - this->unk_3F2 = temp_a0; - switch (temp_a0) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + if (this->cueId != cueId) { + this->cueId = cueId; + switch (cueId) { default: this->actor.draw = NULL; break; @@ -304,7 +304,7 @@ void func_80C16BD4(DemoSyoten* this, PlayState* play) { } } - switch (temp_a0) { + switch (cueId) { case 3: if (this->actor.scale.x < 0.05f) { this->actor.scale.x += 0.000625f; @@ -314,7 +314,7 @@ void func_80C16BD4(DemoSyoten* this, PlayState* play) { case 4: this->actor.speed = - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->urot.z * 0.005493164f; + play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->rot.z * 0.005493164f; if (this->unk_3EC < this->unk_3E8->count) { if (func_80C16818(this)) { this->unk_3EC++; @@ -330,13 +330,13 @@ void func_80C16BD4(DemoSyoten* this, PlayState* play) { void func_80C16DD4(DemoSyoten* this, PlayState* play) { s32 pad; - u16 temp_a0; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->unk_3F0)) { - temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action; - if (this->unk_3F2 != temp_a0) { - this->unk_3F2 = temp_a0; - switch (temp_a0) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + if (this->cueId != cueId) { + this->cueId = cueId; + switch (cueId) { case 1: this->actor.draw = NULL; break; @@ -349,7 +349,7 @@ void func_80C16DD4(DemoSyoten* this, PlayState* play) { } } - if ((temp_a0 == 2) && (this->unk_3E6 < 40)) { + if ((cueId == 2) && (this->unk_3E6 < 40)) { this->unk_3E6++; } } else { @@ -359,13 +359,13 @@ void func_80C16DD4(DemoSyoten* this, PlayState* play) { void func_80C16EAC(DemoSyoten* this, PlayState* play) { s32 pad; - u16 temp_a0; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->unk_3F0)) { - temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action; - if (this->unk_3F2 != temp_a0) { - this->unk_3F2 = temp_a0; - switch (temp_a0) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + if (this->cueId != cueId) { + this->cueId = cueId; + switch (cueId) { case 1: this->actor.draw = NULL; this->unk_3D8 = 0.0f; @@ -378,7 +378,7 @@ void func_80C16EAC(DemoSyoten* this, PlayState* play) { } } - if (temp_a0 == 2) { + if (cueId == 2) { if (this->actor.scale.x < 8.0f) { this->actor.scale.x += 0.1875f; } @@ -401,13 +401,13 @@ void func_80C16EAC(DemoSyoten* this, PlayState* play) { } void func_80C17008(DemoSyoten* this, PlayState* play) { - u16 temp_a0; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->unk_3F0)) { - temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action; - if (this->unk_3F2 != temp_a0) { - this->unk_3F2 = temp_a0; - switch (temp_a0) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + if (this->cueId != cueId) { + this->cueId = cueId; + switch (cueId) { case 1: this->actor.draw = NULL; break; @@ -419,7 +419,7 @@ void func_80C17008(DemoSyoten* this, PlayState* play) { } } - if ((temp_a0 == 2) && (this->unk_3E6 < 15)) { + if ((cueId == 2) && (this->unk_3E6 < 15)) { this->unk_3E6++; } } else { diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h index 7b60ae951..1997a2bc5 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h @@ -32,8 +32,8 @@ typedef struct DemoSyoten { /* 0x3E6 */ s16 unk_3E6; /* 0x3E8 */ Path* unk_3E8; /* 0x3EC */ s32 unk_3EC; - /* 0x3F0 */ u16 unk_3F0; - /* 0x3F2 */ u16 unk_3F2; + /* 0x3F0 */ u16 cueType; + /* 0x3F2 */ u16 cueId; /* 0x3F4 */ DemoSyotenActionFunc actionFunc; } DemoSyoten; // size = 0x3F8 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 ccf41077d..b640b9ba4 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -124,23 +124,23 @@ Actor* func_80C1D78C(PlayState* play) { void func_80C1D7FC(DmAh* this, PlayState* play) { s32 D_80C1DE00[] = { 0, 0, 0, 0, 0 }; - u16 csAction; - s32 actionIndex; + u16 cueId; + s32 cueChannel; if (play->csCtx.state != 0) { if (!this->unk_29C) { - this->action = 0xFF; + this->cueId = 255; this->unk_29C = true; this->animationIndex2 = this->animationIndex; } - if (Cutscene_CheckActorAction(play, 0x232)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x232); - csAction = play->csCtx.actorActions[actionIndex]->action; - if (this->action != (u8)csAction) { - this->action = csAction; - func_80C1D410(this, D_80C1DE00[csAction]); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + this->cueId = cueId; + func_80C1D410(this, D_80C1DE00[cueId]); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } else if (this->unk_29C) { this->unk_29C = false; diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h index df179c6f6..b1e16f6e0 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h @@ -19,7 +19,7 @@ typedef struct DmAh { /* 0x1B0 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX]; /* 0x216 */ Vec3s jointTable[OBJECT_AH_LIMB_MAX]; /* 0x27C */ u16 unk_27C; - /* 0x27E */ u8 action; + /* 0x27E */ u8 cueId; /* 0x280 */ Actor* unk_280; /* 0x284 */ s16 unk_284; /* 0x286 */ s16 unk_286; 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 2d1e58678..d624f85ca 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -48,23 +48,23 @@ s32 DmAl_ChangeAnim(DmAl* this, s32 animIndex) { void func_80C1BDD8(DmAl* this, PlayState* play) { s32 D_80C1C280[] = { 0, 0, 0, 0, 0 }; - u16 csAction; - s32 actionIndex; + u16 cueId; + s32 cueChannel; if (play->csCtx.state != 0) { if (!this->unk_45C) { - this->action = 0xFF; + this->cueId = 255; this->unk_45C = true; this->animIndex2 = this->animIndex; } - if (Cutscene_CheckActorAction(play, 0x232)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x232); - csAction = play->csCtx.actorActions[actionIndex]->action; - if (this->action != (u8)csAction) { - this->action = csAction; - DmAl_ChangeAnim(this, D_80C1C280[csAction]); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + this->cueId = cueId; + DmAl_ChangeAnim(this, D_80C1C280[cueId]); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } else if (this->unk_45C) { this->unk_45C = false; diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h index 57e462de1..4114b9f9c 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h @@ -15,7 +15,7 @@ typedef struct DmAl { /* 0x18C */ MtxF shawlMatrices[6]; /* 0x30C */ Vec3s jointTable[MADAME_AROMA_LIMB_MAX]; /* 0x3AE */ Vec3s morphTable[MADAME_AROMA_LIMB_MAX]; - /* 0x450 */ u8 action; + /* 0x450 */ u8 cueId; /* 0x454 */ s32 animIndex; /* 0x458 */ s32 animIndex2; /* 0x45C */ s32 unk_45C; 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 555a04cc5..a9276d13b 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -195,28 +195,28 @@ void func_80C1C958(DmAn* this, PlayState* play) { void func_80C1CAB0(DmAn* this, PlayState* play) { s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 }; - u16 action; - s32 sp20; + u16 cueId; + s32 cueChannel; if (play->csCtx.state != 0) { if (this->unk_2D0 == 0) { - this->unk_2B0 = 255; + this->cueId = 255; this->unk_2D0 = 1; this->unk_2D4 = 0; this->unk_2CC = this->unk_2C8; } - if (Cutscene_CheckActorAction(play, 0x22D)) { - sp20 = Cutscene_GetActorActionIndex(play, 0x22D); - action = play->csCtx.actorActions[sp20]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_557); + cueId = play->csCtx.actorCues[cueChannel]->id; - if (this->unk_2B0 != (action & 0xFF)) { - this->unk_2B0 = action; + if (this->cueId != (u8)cueId) { + this->cueId = cueId; this->unk_2D4 = 1; - func_80C1C4D8(this, play, sp28[action]); + func_80C1C4D8(this, play, sp28[cueId]); } - switch (this->unk_2B0) { + switch (this->cueId) { case 2: case 4: case 5: @@ -230,7 +230,7 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { } break; } - Cutscene_ActorTranslateAndYaw(&this->actor, play, sp20); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } else if (this->unk_2D0 != 0) { this->unk_2D0 = 0; 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 2001a8ba6..6908e9342 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h @@ -21,7 +21,7 @@ typedef struct DmAn { /* 0x2AC */ s8 unk_2AC; /* 0x2AD */ s8 unk_2AD; /* 0x2AE */ u16 unk_2AE; - /* 0x2B0 */ u8 unk_2B0; + /* 0x2B0 */ u8 cueId; /* 0x2B4 */ Actor* unk_2B4; /* 0x2B8 */ s16 unk_2B8; /* 0x2BA */ s16 unk_2BA; 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 cfd804410..9e5ffed89 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -74,15 +74,15 @@ void DmBal_DoNothing(DmBal* this, PlayState* play) { } void func_80C1EAE8(DmBal* this, PlayState* play) { - static u16 D_80C1F2C0 = 0x63; - s32 actionIndex; + static u16 sCueId = 99; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 0x238)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x238); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_568)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_568); - if (D_80C1F2C0 != play->csCtx.actorActions[actionIndex]->action) { - D_80C1F2C0 = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (sCueId != play->csCtx.actorCues[cueChannel]->id) { + sCueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->keepEyesShut = false; this->eyeIndex = 0; @@ -96,7 +96,7 @@ void func_80C1EAE8(DmBal* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 13); break; } - } else if (D_80C1F2C0 == 3) { + } else if (sCueId == 3) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { this->keepEyesShut = true; } else if (Animation_OnFrame(&this->skelAnime, 29.0f)) { @@ -104,12 +104,12 @@ void func_80C1EAE8(DmBal* this, PlayState* play) { this->eyeIndex = 0; } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); this->actor.home.pos = this->actor.world.pos; } else { this->keepEyesShut = false; this->eyeIndex = 0; - D_80C1F2C0 = 0x63; + sCueId = 99; } } diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index 997004fea..210f2ad37 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -150,7 +150,7 @@ void func_80AA5580(SkelAnime* skelAnime, AnimationInfo* animation, u16 idx) { void func_80AA561C(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames + 20) { + switch (play->csCtx.curFrame + 20) { case 503: case 926: case 979: @@ -169,7 +169,7 @@ void func_80AA561C(DmChar00* this, PlayState* play) { break; } } else { - switch (play->csCtx.frames + 20) { + switch (play->csCtx.curFrame + 20) { case 503: case 926: case 979: @@ -188,14 +188,14 @@ void func_80AA561C(DmChar00* this, PlayState* play) { } void func_80AA5720(DmChar00* this, PlayState* play) { - if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.frames == 505)) { + if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.curFrame == 505)) { Actor_PlaySfx(&this->actor, NA_SE_EV_SPOT_LIGHT_OPEN); } } void func_80AA575C(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 474: case 489: case 495: @@ -227,24 +227,24 @@ void func_80AA575C(DmChar00* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE); break; } - } else if (play->csCtx.frames == 660) { + } else if (play->csCtx.curFrame == 660) { Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE); } } void func_80AA5890(DmChar00* this, PlayState* play) { - if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.frames == 20)) { + if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.curFrame == 20)) { Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); } } void func_80AA58CC(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - if (play->csCtx.frames == 568) { + if (play->csCtx.curFrame == 568) { Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE); } } else { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 375: case 479: Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); @@ -262,11 +262,11 @@ void func_80AA5950(DmChar00* this, PlayState* play) { void func_80AA5960(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - if (play->csCtx.frames == 280) { + if (play->csCtx.curFrame == 280) { Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE); } } else { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 87: case 190: Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); @@ -281,7 +281,7 @@ void func_80AA5960(DmChar00* this, PlayState* play) { void func_80AA59E4(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 125: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); break; @@ -291,14 +291,14 @@ void func_80AA59E4(DmChar00* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON); break; } - } else if (play->csCtx.frames == 125) { + } else if (play->csCtx.curFrame == 125) { Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); } } void func_80AA5A6C(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 44: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); break; @@ -308,14 +308,14 @@ void func_80AA5A6C(DmChar00* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON); break; } - } else if (play->csCtx.frames == 44) { + } else if (play->csCtx.curFrame == 44) { Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); } } void func_80AA5AF4(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 352: case 401: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); @@ -330,7 +330,7 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) { break; } } else { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 362: case 401: Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); @@ -341,7 +341,7 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) { break; } - if ((play->csCtx.frames >= 500) && (play->csCtx.frames < 602)) { + if ((play->csCtx.curFrame >= 500) && (play->csCtx.curFrame < 602)) { Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SHIVER - SFX_FLAG); } } @@ -349,7 +349,7 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) { void func_80AA5BF8(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 762: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_SHOT_DASH); break; @@ -358,7 +358,7 @@ void func_80AA5BF8(DmChar00* this, PlayState* play) { break; } } else { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 762: Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_SHOT_DASH); break; @@ -375,14 +375,14 @@ void func_80AA5BF8(DmChar00* this, PlayState* play) { } void func_80AA5CD4(DmChar00* this, PlayState* play) { - if ((DMCHAR00_GET(&this->actor) != DMCHAR00_0) && (play->csCtx.frames == 467)) { + if ((DMCHAR00_GET(&this->actor) != DMCHAR00_0) && (play->csCtx.curFrame == 467)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); } } void func_80AA5D10(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 8: Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE); break; @@ -396,7 +396,7 @@ void func_80AA5D10(DmChar00* this, PlayState* play) { void func_80AA5D6C(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 2: case 166: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); @@ -411,7 +411,7 @@ void func_80AA5D6C(DmChar00* this, PlayState* play) { void func_80AA5DC8(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 233: case 415: case 593: @@ -427,7 +427,7 @@ void func_80AA5DC8(DmChar00* this, PlayState* play) { void func_80AA5E2C(DmChar00* this, PlayState* play) { if (DMCHAR00_GET(&this->actor) == DMCHAR00_1) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 32: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); break; @@ -458,11 +458,11 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) { case SCENE_OPENINGDAN: if (gSaveContext.sceneLayer == 0) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { func_80AA5720(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { func_80AA575C(this, play); - } else if (play->csCtx.currentCsIndex == 2) { + } else if (play->csCtx.scriptIndex == 2) { func_80AA5890(this, play); } } @@ -470,17 +470,17 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) { case SCENE_OKUJOU: if (gSaveContext.sceneLayer == 0) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { func_80AA58CC(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { func_80AA5950(this, play); - } else if (play->csCtx.currentCsIndex == 2) { + } else if (play->csCtx.scriptIndex == 2) { func_80AA5960(this, play); } } else if (gSaveContext.sceneLayer == 2) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { func_80AA59E4(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { func_80AA5A6C(this, play); } } @@ -488,34 +488,34 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) { case SCENE_00KEIKOKU: if (gSaveContext.sceneLayer == 3) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { func_80AA5AF4(this, play); - } else if (play->csCtx.currentCsIndex == 2) { + } else if (play->csCtx.scriptIndex == 2) { func_80AA5E2C(this, play); } } else if (gSaveContext.sceneLayer == 7) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { func_80AA5BF8(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { func_80AA5CD4(this, play); } } break; case SCENE_MITURIN: - if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 1)) { + if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) { func_80AA5DC8(this, play); } break; case SCENE_INSIDETOWER: - if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0)) { + if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0)) { func_80AA5D10(this, play); } break; case SCENE_PIRATE: - if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0)) { + if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0)) { func_80AA5D6C(this, play); } break; @@ -535,7 +535,7 @@ void DmChar00_Init(Actor* thisx, PlayState* play) { this->unk_250 = D_80AA77D8[DMCHAR00_GET(thisx)]; thisx->targetArrowOffset = 3000.0f; - this->unk_260 = 99; + this->cueId = 99; this->unk_262 = DMCHAR00_GET_F800(thisx); ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f); @@ -551,18 +551,18 @@ void DmChar00_Destroy(Actor* thisx, PlayState* play) { } void func_80AA62FC(DmChar00* this, PlayState* play) { - u16 sp26 = DMCHAR00_GET(&this->actor) + 113; - s32 temp_v0; + u16 cueType = CS_CMD_ACTOR_CUE_113 + DMCHAR00_GET(&this->actor); + s32 cueChannel; s32 pad; - if (Cutscene_CheckActorAction(play, sp26)) { - temp_v0 = Cutscene_GetActorActionIndex(play, sp26); + if (Cutscene_IsCueInChannel(play, cueType)) { + cueChannel = Cutscene_GetCueChannel(play, cueType); - if (play->csCtx.frames == play->csCtx.actorActions[temp_v0]->startFrame) { - if (this->unk_260 != play->csCtx.actorActions[temp_v0]->action) { - this->unk_260 = play->csCtx.actorActions[temp_v0]->action; + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; - switch (play->csCtx.actorActions[temp_v0]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 0x1: this->unk_261 = 0; break; @@ -786,9 +786,9 @@ void func_80AA62FC(DmChar00* this, PlayState* play) { func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } else { - this->unk_260 = 99; + this->cueId = 99; } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { @@ -853,7 +853,7 @@ void func_80AA62FC(DmChar00* this, PlayState* play) { void func_80AA67F8(DmChar00* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((play->csCtx.state == 0) && (gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 1)) { + if ((play->csCtx.state == 0) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) { if (this->unk_261 != 42) { this->unk_261 = 42; func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); @@ -916,7 +916,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) { if ((play->csCtx.state == 0) && ((play->sceneId != SCENE_OPENINGDAN) || (gSaveContext.sceneLayer != 0) || (play->roomCtx.curRoom.num != 0) || - (play->csCtx.currentCsIndex != 1) || (DMCHAR00_GET(&this->actor) != DMCHAR00_0))) { + (play->csCtx.scriptIndex != 1) || (DMCHAR00_GET(&this->actor) != DMCHAR00_0))) { return; } diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h index 62ee0cb40..b4679647b 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h @@ -23,7 +23,7 @@ typedef struct DmChar00 { /* 0x23C */ DmChar00ActionFunc actionFunc; /* 0x240 */ Color_RGBAf unk_240; /* 0x250 */ Color_RGBAf unk_250; - /* 0x260 */ u8 unk_260; + /* 0x260 */ u8 cueId; /* 0x261 */ u8 unk_261; /* 0x262 */ u16 unk_262; } DmChar00; // size = 0x264 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 e49a1ec56..7b700f4eb 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -67,7 +67,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { switch (DMCHAR01_GET(&this->dyna.actor)) { case DMCHAR01_0: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { this->unk_34C = 2; this->actionFunc = func_80AA8F1C; break; @@ -97,7 +97,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { break; case DMCHAR01_1: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02) || (gSaveContext.sceneLayer == 1)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) || (gSaveContext.sceneLayer == 1)) { this->unk_34C = 1; this->actionFunc = func_80AA8F1C; } else { @@ -134,7 +134,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodfallSceneryTempleRampAndPlatformCol); this->unk_34D = true; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { this->actionFunc = func_80AA9020; this->dyna.actor.world.pos.y -= 120.0f; } else { @@ -187,19 +187,20 @@ void func_80AA8698(DmChar01* this, PlayState* play) { } void func_80AA884C(DmChar01* this, PlayState* play) { - s16 sp1E = this->dyna.actor.cutscene; + s16 csId = this->dyna.actor.csId; - if (ActorCutscene_GetCanPlayNext(sp1E)) { - ActorCutscene_Start(sp1E, &this->dyna.actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_Start(csId, &this->dyna.actor); this->actionFunc = func_80AA88A8; } else { - ActorCutscene_SetIntentToPlay(sp1E); + CutsceneManager_Queue(csId); } } void func_80AA88A8(DmChar01* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 135)) { - if (play->csCtx.frames == play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 135)]->startFrame) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_135)) { + if (play->csCtx.curFrame == + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_135)]->startFrame) { D_80AAAE24 = 1; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FORT_RISING); } @@ -344,11 +345,11 @@ void func_80AA8F2C(DmChar01* this, PlayState* play) { } void func_80AA9020(DmChar01* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 135)) { - CsCmdActorAction* temp_v1 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 135)]; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_135)) { + CsCmdActorCue* cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_135)]; - if ((temp_v1->startFrame == play->csCtx.frames) && (temp_v1->action == 2)) { - SET_WEEKEVENTREG(WEEKEVENTREG_20_02); + if ((cue->startFrame == play->csCtx.curFrame) && (cue->id == 2)) { + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE); this->actionFunc = func_80AA90AC; } } diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index f1759b7fb..7841d22f5 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -61,7 +61,7 @@ void DmChar02_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 } void DmChar02_PlaySfxForDroppingOcarinaCutscene(DmChar02* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 95: Actor_PlaySfx(&this->actor, NA_SE_EV_OCARINA_BOUND_0); break; @@ -75,7 +75,7 @@ void DmChar02_PlaySfxForDroppingOcarinaCutscene(DmChar02* this, PlayState* play) } void DmChar02_PlaySfxForCutscenes(DmChar02* this, PlayState* play) { - if ((play->csCtx.state != 0) && (play->sceneId == SCENE_OKUJOU) && (play->csCtx.currentCsIndex == 1)) { + if ((play->csCtx.state != 0) && (play->sceneId == SCENE_OKUJOU) && (play->csCtx.scriptIndex == 1)) { DmChar02_PlaySfxForDroppingOcarinaCutscene(this, play); } } @@ -101,12 +101,12 @@ void DmChar02_Destroy(Actor* thisx, PlayState* play) { void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play) { u8 shouldChangeAnimation = true; - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 0x83)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x83); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - switch (play->csCtx.actorActions[actionIndex]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_131)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_131); + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + switch (play->csCtx.actorCues[cueChannel]->id) { default: this->animIndex = DMCHAR02_ANIM_HIT_GROUND; shouldChangeAnimation = false; @@ -130,7 +130,7 @@ void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { @@ -174,8 +174,8 @@ void DmChar02_Draw(Actor* thisx, PlayState* play) { if ((play->csCtx.state == 0) && (this->actor.world.pos.y < 100.0f)) { shouldDraw = true; - } else if (Cutscene_CheckActorAction(play, 0x6B)) { - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x6B)]->action) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_107)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_107)]->id) { case 0x17: case 0x1C: case 0x26: 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 b960ce698..21b9f94df 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -76,14 +76,14 @@ void func_80AAB5F8(DmChar03* this, PlayState* play) { } void func_80AAB644(DmChar03* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x88)) { - s32 index = Cutscene_GetActorActionIndex(play, 0x88); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136); - if (play->csCtx.actorActions[index]->action == 4) { + if (play->csCtx.actorCues[cueChannel]->id == 4) { this->unk_18E = true; - this->offset.x = play->csCtx.actorActions[index]->startPos.x; - this->offset.y = play->csCtx.actorActions[index]->startPos.y; - this->offset.z = play->csCtx.actorActions[index]->startPos.z; + this->offset.x = play->csCtx.actorCues[cueChannel]->startPos.x; + this->offset.y = play->csCtx.actorCues[cueChannel]->startPos.y; + this->offset.z = play->csCtx.actorCues[cueChannel]->startPos.z; } } } @@ -94,11 +94,11 @@ void DmChar03_DoNothing(DmChar03* this, PlayState* play) { void func_80AAB710(DmChar03* this, PlayState* play) { u8 shouldChangeAnim = true; - if (Cutscene_CheckActorAction(play, 0x88)) { - s32 index = Cutscene_GetActorActionIndex(play, 0x88); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136); - if (play->csCtx.frames == play->csCtx.actorActions[index]->startFrame) { - switch (play->csCtx.actorActions[index]->action) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: shouldChangeAnim = false; break; @@ -124,7 +124,7 @@ void func_80AAB710(DmChar03* this, PlayState* play) { DmChar03_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, index); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } @@ -140,8 +140,8 @@ void func_80AAB838(DmChar03* this, PlayState* play) { void DmChar03_Update(Actor* thisx, PlayState* play) { DmChar03* this = THIS; - if (Cutscene_CheckActorAction(play, 0x88) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x88)]->action == 2)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id == 2)) { SkelAnime_Update(&this->skelAnime); } this->actionFunc(this, play); @@ -163,8 +163,8 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) { DmChar03* this = THIS; if (!this->unk_18E) { - if ((Cutscene_CheckActorAction(play, 0x88)) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x88)]->action != 1)) { + if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id != 1)) { func_8012C28C(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmChar03_OverrideLimbDraw, DmChar03_PostLimbDraw, diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c index 5c835152d..ac479344d 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c @@ -66,7 +66,7 @@ void DmChar04_Init(Actor* thisx, PlayState* play) { this->primColors = sPrimColors[this->actor.params]; this->envColors = sEnvColors[this->actor.params]; this->actor.targetArrowOffset = 3000.0f; - this->csAction = 0x63; + this->cueId = 99; this->timer = this->actor.params << 0xB; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable, @@ -81,15 +81,15 @@ void DmChar04_Destroy(Actor* thisx, PlayState* play) { } void func_80AABE34(DmChar04* this, PlayState* play) { - u16 params = this->actor.params + 0x71; + u16 cueType = CS_CMD_ACTOR_CUE_113 + this->actor.params; - if (Cutscene_CheckActorAction(play, params)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, params); + if (Cutscene_IsCueInChannel(play, cueType)) { + s32 cueChannel = Cutscene_GetCueChannel(play, cueType); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - if (this->csAction != play->csCtx.actorActions[actionIndex]->action) { - this->csAction = play->csCtx.actorActions[actionIndex]->action; - if (play->csCtx.actorActions[actionIndex]->action == 1) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + if (play->csCtx.actorCues[cueChannel]->id == 1) { this->animIndex = 0; } else { this->animIndex = 0; @@ -97,9 +97,9 @@ void func_80AABE34(DmChar04* this, PlayState* play) { DmChar04_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } else { - this->csAction = 0x63; + this->cueId = 99; } } diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h index 0f0fcb6a1..c3d809c63 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h @@ -15,7 +15,7 @@ typedef struct DmChar04 { /* 0x023C */ DmChar04ActionFunc actionFunc; /* 0x240 */ Color_RGBAf primColors; /* 0x250 */ Color_RGBAf envColors; - /* 0x260 */ u8 csAction; + /* 0x260 */ u8 cueId; /* 0x261 */ u8 animIndex; /* 0x262 */ u16 timer; } DmChar04; // size = 0x264 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 77c7c5dab..6b85df5d3 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -177,14 +177,14 @@ void func_80AAC990(DmChar05* this, PlayState* play) { } void func_80AAC9DC(DmChar05* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 109) != 0) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 109); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109); - if (play->csCtx.actorActions[actionIndex]->action == 4) { + if (play->csCtx.actorCues[cueChannel]->id == 4) { this->unk_18E = 1; - this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x; - this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y; - this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z; + this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x; + this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y; + this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z; } } } @@ -199,17 +199,17 @@ void func_80AACA98(DmChar05* this, PlayState* play) { } void func_80AACAE4(DmChar05* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 564)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 564); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_564)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_564); - if (play->csCtx.actorActions[actionIndex]->action == 2) { - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { + if (play->csCtx.actorCues[cueChannel]->id == 2) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { Item_Give(play, ITEM_MASK_COUPLE); } this->unk_18E = 1; - this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x; - this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y; - this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z; + this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x; + this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y; + this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z; } else { this->unk_18E = 0; } @@ -277,13 +277,13 @@ void func_80AACD1C(DmChar05* this, PlayState* play) { } void func_80AACD68(DmChar05* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 473)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 473); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473); this->unk_18E = 1; - this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x; - this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y; - this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z; + this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x; + this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y; + this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z; } } @@ -297,27 +297,27 @@ void func_80AACE10(DmChar05* this, PlayState* play) { } void func_80AACE5C(DmChar05* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 518)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 518); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518); this->unk_18E = 1; - this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x; - this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y; - this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z; + this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x; + this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y; + this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z; } } void func_80AACF04(DmChar05* this, PlayState* play) { u8 sp2F = true; - s32 actionIndex; + s32 cueChannel; switch (DMCHAR05_GET(&this->actor)) { case DMCHAR05_0: - if (Cutscene_CheckActorAction(play, 109)) { - actionIndex = Cutscene_GetActorActionIndex(play, 109); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - switch (play->csCtx.actorActions[actionIndex]->action) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: sp2F = false; break; @@ -351,16 +351,16 @@ void func_80AACF04(DmChar05* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } break; case DMCHAR05_1: - if (Cutscene_CheckActorAction(play, 473)) { - actionIndex = Cutscene_GetActorActionIndex(play, 473); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - switch (play->csCtx.actorActions[actionIndex]->action) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: sp2F = false; break; @@ -395,16 +395,16 @@ void func_80AACF04(DmChar05* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } break; case DMCHAR05_2: - if (Cutscene_CheckActorAction(play, 518)) { - actionIndex = Cutscene_GetActorActionIndex(play, 518); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - switch (play->csCtx.actorActions[actionIndex]->action) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: sp2F = false; break; @@ -438,16 +438,16 @@ void func_80AACF04(DmChar05* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } break; case DMCHAR05_3: - if (Cutscene_CheckActorAction(play, 559)) { - actionIndex = Cutscene_GetActorActionIndex(play, 559); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_559)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - switch (play->csCtx.actorActions[actionIndex]->action) { + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + switch (play->csCtx.actorCues[cueChannel]->id) { default: sp2F = false; break; @@ -474,10 +474,10 @@ void func_80AACF04(DmChar05* this, PlayState* play) { } } - if (play->csCtx.actorActions[actionIndex]->action != 4) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + if (play->csCtx.actorCues[cueChannel]->id != 4) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } else { - Cutscene_ActorTranslate(&this->actor, play, actionIndex); + Cutscene_ActorTranslate(&this->actor, play, cueChannel); } } @@ -492,29 +492,29 @@ void func_80AACF04(DmChar05* this, PlayState* play) { } void func_80AAD3F8(DmChar05* this, PlayState* play) { - if (play->csCtx.frames == 490) { + if (play->csCtx.curFrame == 490) { Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER); } - if (play->csCtx.frames > 550) { + if (play->csCtx.curFrame > 550) { Actor_PlaySfx(&this->actor, NA_SE_EN_MASK_FLOAT - SFX_FLAG); } } void func_80AAD450(DmChar05* this, PlayState* play) { - if (play->csCtx.frames == 262) { + if (play->csCtx.curFrame == 262) { Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER); } - if (play->csCtx.frames > 318) { + if (play->csCtx.curFrame > 318) { Actor_PlaySfx(&this->actor, NA_SE_EN_MASK_FLOAT - SFX_FLAG); } } void func_80AAD4A8(DmChar05* this, PlayState* play) { if (DMCHAR05_GET(&this->actor) == DMCHAR05_0) { - if (Cutscene_CheckActorAction(play, 109) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 109)]->action == 3)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id == 3)) { if (Animation_OnFrame(&this->skelAnime, 14.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_0); } else if (Animation_OnFrame(&this->skelAnime, 19.0f)) { @@ -522,15 +522,15 @@ void func_80AAD4A8(DmChar05* this, PlayState* play) { } } } else if (DMCHAR05_GET(&this->actor) == DMCHAR05_1) { - if (Cutscene_CheckActorAction(play, 473)) { - if ((play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 473)]->action == 3) && + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) { + if ((play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id == 3) && Animation_OnFrame(&this->skelAnime, 5.0f)) { Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_SAND); } } } else if (DMCHAR05_GET(&this->actor) == DMCHAR05_2) { - if (Cutscene_CheckActorAction(play, 518) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 518)]->action == 2)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id == 2)) { if (Animation_OnFrame(&this->skelAnime, 7.0f)) { Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_0); } @@ -546,18 +546,18 @@ void func_80AAD4A8(DmChar05* this, PlayState* play) { } else if (DMCHAR05_GET(&this->actor) == DMCHAR05_3) { if (play->sceneId == SCENE_OKUJOU) { if (gSaveContext.sceneLayer == 2) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { func_80AAD3F8(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { func_80AAD450(this, play); } } } else if (play->sceneId == SCENE_SPOT00) { if (gSaveContext.sceneLayer == 9) { - if ((play->csCtx.currentCsIndex == 0) && (play->csCtx.frames == 255)) { + if ((play->csCtx.scriptIndex == 0) && (play->csCtx.curFrame == 255)) { Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER); } - } else if ((gSaveContext.sceneLayer == 0xB) && (play->csCtx.frames == 115)) { + } else if ((gSaveContext.sceneLayer == 0xB) && (play->csCtx.curFrame == 115)) { Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER_PREDEMO); } } @@ -568,25 +568,25 @@ void DmChar05_Update(Actor* thisx, PlayState* play) { DmChar05* this = THIS; func_80AACF04(this, play); - if (Cutscene_CheckActorAction(play, 109)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 109)]->action == 3) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id == 3) { SkelAnime_Update(&this->skelAnime); } - } else if (Cutscene_CheckActorAction(play, 473)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 473)]->action == 3) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id == 3) { SkelAnime_Update(&this->skelAnime); } - } else if (Cutscene_CheckActorAction(play, 518)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 518)]->action == 2) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id == 2) { SkelAnime_Update(&this->skelAnime); } - } else if (Cutscene_CheckActorAction(play, 559)) { - if ((play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 559)]->action == 2) || - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 559)]->action == 3)) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_559)) { + if ((play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559)]->id == 2) || + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559)]->id == 3)) { SkelAnime_Update(&this->skelAnime); } - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 559)]->action == 4) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559)]->id == 4) { this->actor.world.rot.y += 0x258; this->actor.shape.rot.y += 0x258; } @@ -607,8 +607,8 @@ void func_80AAD998(Actor* thisx, PlayState* play) { s32 pad[2]; if (this->unk_18E == 0) { - if (Cutscene_CheckActorAction(play, 109) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 109)]->action != 1)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id != 1)) { OPEN_DISPS(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); @@ -628,8 +628,8 @@ void func_80AADA90(Actor* thisx, PlayState* play) { DmChar05* this = THIS; if (this->unk_18E == 0) { - if (Cutscene_CheckActorAction(play, 473) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 473)]->action != 1)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id != 1)) { func_8012C28C(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, DmChar05_PostLimbDraw, &this->actor); @@ -643,8 +643,8 @@ void func_80AADB4C(Actor* thisx, PlayState* play) { DmChar05* this = THIS; if (this->unk_18E == 0) { - if (Cutscene_CheckActorAction(play, 518) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 518)]->action != 1)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id != 1)) { func_8012C28C(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); @@ -657,19 +657,18 @@ void func_80AADB4C(Actor* thisx, PlayState* play) { void func_80AADC00(Actor* thisx, PlayState* play) { s32 pad; DmChar05* this = THIS; - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 559)) { - actionIndex = Cutscene_GetActorActionIndex(play, 559); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_559)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559); - if ((play->csCtx.actorActions[actionIndex]->action != 1) && - (play->csCtx.actorActions[actionIndex]->action != 4)) { + if ((play->csCtx.actorCues[cueChannel]->id != 1) && (play->csCtx.actorCues[cueChannel]->id != 4)) { func_8012C28C(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, DmChar05_PostLimbDraw, &this->actor); } - if (play->csCtx.actorActions[actionIndex]->action == 4) { + if (play->csCtx.actorCues[cueChannel]->id == 4) { Matrix_Translate(-600.0f, 0.0f, 0.0f, MTXMODE_APPLY); Gfx_DrawDListOpa(play, object_dmask_DL_001E70); } diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c index 0385a82d4..747b2e0c9 100644 --- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c +++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c @@ -37,7 +37,7 @@ void DmChar06_SetupAction(DmChar06* this, DmChar06ActionFunc actionFunc) { void DmChar06_Init(Actor* thisx, PlayState* play) { DmChar06* this = THIS; - SET_WEEKEVENTREG(WEEKEVENTREG_33_80); + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE); Actor_SetScale(&this->actor, 1.0f); this->alpha = 255; DmChar06_SetupAction(this, func_80AAE6F0); @@ -47,17 +47,17 @@ void DmChar06_Destroy(Actor* thisx, PlayState* play) { } void func_80AAE6F0(DmChar06* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x1CF)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 0x1CF); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_463)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_463); - if ((play->csCtx.frames >= play->csCtx.actorActions[actionIndex]->startFrame) && - (play->csCtx.actorActions[actionIndex]->endFrame >= play->csCtx.frames)) { - if (play->csCtx.actorActions[actionIndex]->action == 1) { + if ((play->csCtx.curFrame >= play->csCtx.actorCues[cueChannel]->startFrame) && + (play->csCtx.actorCues[cueChannel]->endFrame >= play->csCtx.curFrame)) { + if (play->csCtx.actorCues[cueChannel]->id == 1) { this->alpha = 255; - } else if (play->csCtx.actorActions[actionIndex]->action == 2) { - f32 lerp = 1.0f - Environment_LerpWeight(play->csCtx.actorActions[actionIndex]->endFrame, - play->csCtx.actorActions[actionIndex]->startFrame, - play->csCtx.frames); + } else if (play->csCtx.actorCues[cueChannel]->id == 2) { + f32 lerp = + 1.0f - Environment_LerpWeight(play->csCtx.actorCues[cueChannel]->endFrame, + play->csCtx.actorCues[cueChannel]->startFrame, play->csCtx.curFrame); this->alpha = 255 * lerp; } } 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 a1853d04d..1b6d667c2 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -275,27 +275,27 @@ void DmChar08_WaitForSong(DmChar08* this, PlayState* play) { } void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play) { - s16 cs1 = this->dyna.actor.cutscene; - s16 cs = ActorCutscene_GetAdditionalCutscene( - ActorCutscene_GetAdditionalCutscene(ActorCutscene_GetAdditionalCutscene(cs1))); + s16 csId = this->dyna.actor.csId; + s16 additionalCsId = + CutsceneManager_GetAdditionalCsId(CutsceneManager_GetAdditionalCsId(CutsceneManager_GetAdditionalCsId(csId))); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_08)) { - cs1 = cs; + csId = additionalCsId; } - if (ActorCutscene_GetCanPlayNext(cs1)) { - ActorCutscene_Start(cs1, &this->dyna.actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_Start(csId, &this->dyna.actor); SET_WEEKEVENTREG(WEEKEVENTREG_53_20); SET_WEEKEVENTREG(WEEKEVENTREG_93_08); DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80AAF884; } else { - ActorCutscene_SetIntentToPlay(cs1); + CutsceneManager_Queue(csId); } } void func_80AAF884(DmChar08* this, PlayState* play) { - if (play->csCtx.state == CS_STATE_0) { + 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; @@ -321,22 +321,22 @@ void func_80AAF8F4(DmChar08* this, PlayState* play) { } void func_80AAFA18(DmChar08* this, PlayState* play) { - s16 nextCs; - s16 nextCs2; - s16 nextCs1; + s16 nextCsId; + s16 nextCsId2; + s16 nextCsId1; - nextCs1 = ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene); - nextCs2 = nextCs1; - nextCs1 = ActorCutscene_GetAdditionalCutscene(nextCs1); + nextCsId1 = CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId); + nextCsId2 = nextCsId1; + nextCsId1 = CutsceneManager_GetAdditionalCsId(nextCsId1); - nextCs = CHECK_WEEKEVENTREG(WEEKEVENTREG_53_40) ? nextCs1 : nextCs2; + nextCsId = CHECK_WEEKEVENTREG(WEEKEVENTREG_53_40) ? nextCsId1 : nextCsId2; - if (ActorCutscene_GetCanPlayNext(nextCs) != 0) { + if (CutsceneManager_IsNext(nextCsId)) { SET_WEEKEVENTREG(WEEKEVENTREG_53_40); - ActorCutscene_Start(nextCs, &this->dyna.actor); + CutsceneManager_Start(nextCsId, &this->dyna.actor); this->actionFunc = DmChar08_DoNothing; } else { - ActorCutscene_SetIntentToPlay(nextCs); + CutsceneManager_Queue(nextCsId); } } @@ -390,7 +390,7 @@ void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play) { void func_80AAFCCC(DmChar08* this, PlayState* play) { switch (play->sceneId) { case SCENE_31MISAKI: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { switch (this->unk_206) { case 0: break; @@ -455,15 +455,15 @@ void DmChar08_DoNothing(DmChar08* this, PlayState* play) { } void func_80AAFE88(DmChar08* this, PlayState* play) { - s32 actorActionIndex; - CsCmdActorAction* csAction; + s32 cueChannel; + s32 pad; f32 phi_f12; - if (Cutscene_CheckActorAction(play, 474)) { - actorActionIndex = Cutscene_GetActorActionIndex(play, 474); - if (this->unk_1F6 != play->csCtx.actorActions[actorActionIndex]->action) { - this->unk_1F6 = play->csCtx.actorActions[actorActionIndex]->action; - switch (play->csCtx.actorActions[actorActionIndex]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_474)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_474); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->animIndex = TURTLE_ANIM_IDLE; break; @@ -514,12 +514,12 @@ void func_80AAFE88(DmChar08* this, PlayState* play) { break; } } - switch (play->csCtx.actorActions[actorActionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 2: this->unk_1FF = 1; - phi_f12 = 2.0f * Environment_LerpWeight(play->csCtx.actorActions[actorActionIndex]->endFrame, - play->csCtx.actorActions[actorActionIndex]->startFrame, - play->csCtx.frames); + phi_f12 = + 2.0f * Environment_LerpWeight(play->csCtx.actorCues[cueChannel]->endFrame, + play->csCtx.actorCues[cueChannel]->startFrame, play->csCtx.curFrame); if (phi_f12 > 1.0f) { phi_f12 = 1.0f; } @@ -529,30 +529,30 @@ void func_80AAFE88(DmChar08* this, PlayState* play) { this->unk_1FF = 2; } - Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actorActionIndex); + Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, cueChannel); break; case 5: - Cutscene_ActorTranslateAndYawSmooth(&this->dyna.actor, play, actorActionIndex); + Cutscene_ActorTranslateAndYawSmooth(&this->dyna.actor, play, cueChannel); break; case 14: - Cutscene_ActorTranslate(&this->dyna.actor, play, actorActionIndex); - Math_SmoothStepToS(&this->dyna.actor.world.rot.y, play->csCtx.actorActions[actorActionIndex]->rot.y, - 0xA, 0xDC, 1); + Cutscene_ActorTranslate(&this->dyna.actor, play, cueChannel); + Math_SmoothStepToS(&this->dyna.actor.world.rot.y, play->csCtx.actorCues[cueChannel]->rot.y, 0xA, 0xDC, + 1); this->dyna.actor.shape.rot.y = this->dyna.actor.world.rot.y; break; default: - Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actorActionIndex); + Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, cueChannel); break; } this->targetYPos = this->dyna.actor.world.pos.y; - if ((this->unk_1FF >= 2) || (play->csCtx.actorActions[actorActionIndex]->action == 2)) { + if ((this->unk_1FF >= 2) || (play->csCtx.actorCues[cueChannel]->id == 2)) { Math_SmoothStepToF(&this->unk_1F0, 1.0f, 0.02f, 0.1f, 0.00001f); } } else { - this->unk_1F6 = 99; + this->cueId = 99; } } @@ -894,8 +894,8 @@ void func_80AB032C(DmChar08* this, PlayState* play) { void func_80AB096C(DmChar08* this, PlayState* play) { if ((play->csCtx.state != 0) && (play->sceneId == SCENE_31MISAKI) && (gSaveContext.sceneLayer == 0) && - (play->csCtx.currentCsIndex == 0)) { - if ((play->csCtx.frames >= 890) && (play->csCtx.frames < 922)) { + (play->csCtx.scriptIndex == 0)) { + if ((play->csCtx.curFrame >= 890) && (play->csCtx.curFrame < 922)) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); } } @@ -1097,7 +1097,7 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex])); - if ((this->unk_1FF > 0) || (play->csCtx.state != CS_STATE_0)) { + if ((this->unk_1FF > 0) || (play->csCtx.state != CS_STATE_IDLE)) { SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmChar08_OverrideLimbDraw, DmChar08_PostLimbDraw, DmChar08_TransformLimbDraw, &this->dyna.actor); diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h index f339bceaa..9fdbade43 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h @@ -22,7 +22,7 @@ typedef struct DmChar08 { /* 0x1E8 */ UNK_TYPE1 unk_1E8[8]; /* 0x1F0 */ f32 unk_1F0; /* 0x1F4 */ s16 unk_1F4; - /* 0x1F6 */ s16 unk_1F6; + /* 0x1F6 */ s16 cueId; /* 0x1F6 */ s16 blinkTimer; /* 0x1FA */ s16 unk_1FA; /* 0x1FC */ u16 unk_1FC; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 442058677..567b33685 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -127,24 +127,24 @@ void func_80AB2268(DmChar09* this, PlayState* play) { Path* path; s32 pad; s32 i; - s32 actionIndex; + s32 cueChannel; s32 max = 0; s32 pathnum; u8 temp = false; if (!DMCHAR09_GET_F(&this->actor)) { - if (play->csCtx.currentCsIndex == 1) { + if (play->csCtx.scriptIndex == 1) { temp = true; } - } else if (play->csCtx.currentCsIndex == 0) { + } else if (play->csCtx.scriptIndex == 0) { temp = true; } - if (Cutscene_CheckActorAction(play, 0x1F7) && temp) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x1F7); - if (this->unk_22F != play->csCtx.actorActions[actionIndex]->action) { - this->unk_22F = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_503) && temp) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_503); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 2: max = 0; break; @@ -159,7 +159,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { break; } - if (play->csCtx.actorActions[actionIndex]->action >= 2) { + if (play->csCtx.actorCues[cueChannel]->id >= 2) { pathnum = DMCHAR09_GET_PATH(&this->actor); path = &play->setupPathList[pathnum]; @@ -175,7 +175,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { this->unk_220 = 1; this->unk_22E = true; - this->speed = (u16)play->csCtx.actorActions[actionIndex]->rot.z * 0.00390625f; + this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * 0.00390625f; this->actionFunc = func_80AB1FDC; } else { this->unk_22E = false; @@ -183,7 +183,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { } } } else { - this->unk_22F = 0x63; + this->cueId = 99; } } diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h index dffe65975..cfb3523e6 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h @@ -31,7 +31,7 @@ typedef struct DmChar09 { /* 0x22A */ s16 unk_22A; /* 0x22C */ UNK_TYPE1 pad22C[2]; /* 0x22E */ u8 unk_22E; - /* 0x22F */ u8 unk_22F; + /* 0x22F */ u8 cueId; } DmChar09; // size = 0x230 #endif // Z_DM_CHAR09_H 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 177a21394..f20c87cb4 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -195,28 +195,28 @@ void func_80C248A8(DmGm* this, PlayState* play) { void func_80C24A00(DmGm* this, PlayState* play) { s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 }; - u16 action; - s32 sp20; + u16 cueId; + s32 cueChannel; if (play->csCtx.state != 0) { if (this->unk_2D0 == 0) { - this->unk_2B0 = 255; + this->cueId = 255; this->unk_2D0 = 1; this->unk_2D4 = 0; this->unk_2CC = this->unk_2C8; } - if (Cutscene_CheckActorAction(play, 0x22D)) { - sp20 = Cutscene_GetActorActionIndex(play, 0x22D); - action = play->csCtx.actorActions[sp20]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_557); + cueId = play->csCtx.actorCues[cueChannel]->id; - if (this->unk_2B0 != (action & 0xFF)) { - this->unk_2B0 = action; + if (this->cueId != (u8)cueId) { + this->cueId = cueId; this->unk_2D4 = 1; - func_80C24428(this, play, sp28[action]); + func_80C24428(this, play, sp28[cueId]); } - switch (this->unk_2B0) { + switch (this->cueId) { case 2: case 4: case 5: @@ -230,7 +230,7 @@ void func_80C24A00(DmGm* this, PlayState* play) { } break; } - Cutscene_ActorTranslateAndYaw(&this->actor, play, sp20); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } else if (this->unk_2D0 != 0) { this->unk_2D0 = 0; 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 54db8d30f..8b6b3f652 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h @@ -21,7 +21,7 @@ typedef struct DmGm { /* 0x2AC */ s8 unk_2AC; /* 0x2AD */ s8 unk_2AD; /* 0x2AE */ u16 unk_2AE; - /* 0x2B0 */ u8 unk_2B0; + /* 0x2B0 */ u8 cueId; /* 0x2B4 */ Actor* unk_2B4; /* 0x2B8 */ s16 unk_2B8; /* 0x2BA */ s16 unk_2BA; 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 e9fa1cddd..da2bd225a 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -43,23 +43,23 @@ s32 func_80C1DED0(DmNb* this, s32 arg1) { void func_80C1DF18(DmNb* this, PlayState* play) { s32 sp2C[] = { 0, 0, 0, 0, 0 }; - u16 csAction; - s32 csActionIndex; + u16 cueId; + s32 cueChannel; if (play->csCtx.state != 0) { if (this->unk1F8 == 0) { - this->unk1EC = 0xFF; + this->cueId = 255; this->unk1F8 = 1; this->unk1F4 = this->unk1F0; } - if (Cutscene_CheckActorAction(play, 0x232)) { - csActionIndex = Cutscene_GetActorActionIndex(play, 0x232); - csAction = play->csCtx.actorActions[csActionIndex]->action; - if (this->unk1EC != (u8)csAction) { - this->unk1EC = csAction; - func_80C1DED0(this, sp2C[csAction]); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + this->cueId = cueId; + func_80C1DED0(this, sp2C[cueId]); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, csActionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } else if (this->unk1F8 != 0) { this->unk1F8 = 0; diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h index 3f35beea0..7bb7b39cd 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h @@ -14,7 +14,7 @@ typedef struct DmNb { /* 0x188 */ DmNbActionFunc actionFunc; /* 0x18C */ Vec3s jointTable[NB_LIMB_MAX]; /* 0x1BC */ Vec3s morphTable[NB_LIMB_MAX]; - /* 0x1EC */ u8 unk1EC; + /* 0x1EC */ u8 cueId; /* 0x1F0 */ s32 unk1F0; /* 0x1F4 */ s32 unk1F4; /* 0x1F8 */ s32 unk1F8; 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 db76db278..e0d2fc2a3 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c @@ -70,24 +70,24 @@ void DmOpstage_Destroy(Actor* thisx, PlayState* play) { } void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play) { - s32 actionIndex; + s32 cueChannel; if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) { - if (Cutscene_CheckActorAction(play, 0x73)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x73); - if (play->csCtx.actorActions[actionIndex]->action == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_115)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_115); + if (play->csCtx.actorCues[cueChannel]->id == 2) { this->dyna.actor.scale.x = 0.075f; this->dyna.actor.scale.z = 0.3f; } else { this->dyna.actor.scale.x = 0.1f; this->dyna.actor.scale.z = 0.1f; } - Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, cueChannel); } - } else if (Cutscene_CheckActorAction(play, DMOPSTAGE_GET_ACTORACTION(&this->dyna.actor) + 0x74)) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_116 + DMOPSTAGE_GET_CUE_TYPE_OFFSET(&this->dyna.actor))) { Cutscene_ActorTranslateAndYaw( &this->dyna.actor, play, - Cutscene_GetActorActionIndex(play, DMOPSTAGE_GET_ACTORACTION(&this->dyna.actor) + 0x74)); + Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_116 + DMOPSTAGE_GET_CUE_TYPE_OFFSET(&this->dyna.actor))); } } @@ -95,7 +95,7 @@ void DmOpstage_Update(Actor* thisx, PlayState* play) { DmOpstage* this = THIS; this->actionFunc(this, play); - if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0) && (play->csCtx.frames == 480)) { + if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0) && (play->csCtx.curFrame == 480)) { // This actor is responsible for playing the fairy sound during the exposition in the intro, // during the transition to Lost Woods, before Ocarina gets stolen. func_8019F128(NA_SE_EV_NAVY_FLY_REBIRTH); diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h index 3d9195413..03fd093f3 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h @@ -4,7 +4,7 @@ #include "global.h" #define DMOPSTAGE_GET_TYPE(thisx) ((thisx)->params & 0xFF) -#define DMOPSTAGE_GET_ACTORACTION(thisx) (((thisx)->params >> 8) & 0xFF) +#define DMOPSTAGE_GET_CUE_TYPE_OFFSET(thisx) (((thisx)->params >> 8) & 0xFF) struct DmOpstage; diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c index cd6890505..42a846357 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c @@ -63,7 +63,7 @@ void DmRavine_Update(Actor* thisx, PlayState* play) { play->roomCtx.unk7A[1]++; if (play->roomCtx.unk7A[1] > 254) { play->roomCtx.unk7A[1] = 254; - if (play->csCtx.frames > 700) { + if (play->csCtx.curFrame > 700) { play->roomCtx.unk7A[1] = 255; play->roomCtx.unk7A[0] = 0; this->state++; // -> DM_RAVINE_STATE_PENDING_DEATH 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 f8210a9de..164d6ea53 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -336,7 +336,7 @@ void DmStk_ChangeAnim(DmStk* this, PlayState* play, SkelAnime* skelAnime, Animat * after Skull Kid steals Epona. */ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) { - switch (play->csCtx.frames + 20) { + switch (play->csCtx.curFrame + 20) { case 1195: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR); break; @@ -427,7 +427,7 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) { * any sound in-game, since all sound effects are muted when it plays. */ void DmStk_PlaySfxForTitleCutscene(DmStk* this, PlayState* play) { - if (play->csCtx.frames == 535) { + if (play->csCtx.curFrame == 535) { func_8019F128(NA_SE_EV_CLOCK_TOWER_BELL); } } @@ -437,7 +437,7 @@ void DmStk_PlaySfxForTitleCutscene(DmStk* this, PlayState* play) { * that starts after the fade-to-white and ends when the player gains control. */ void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 78: case 89: case 100: @@ -469,7 +469,7 @@ void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) { * the Happy Mask Salesman. */ void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 18: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_GASAGOSO); break; @@ -490,7 +490,7 @@ void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play) * the hallucinatory Deku Scrubs scene. */ void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 415: func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 100); break; @@ -518,7 +518,7 @@ void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) { void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) { Player* player = GET_PLAYER(play); - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 10: func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 50); break; @@ -558,7 +558,7 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) { if (player) {} - if ((play->csCtx.frames >= 263) && (play->csCtx.frames < 698)) { + if ((play->csCtx.curFrame >= 263) && (play->csCtx.curFrame < 698)) { Actor_PlaySfx(&player->actor, NA_SE_EN_STALKIDS_BODY_LEV - SFX_FLAG); } } @@ -571,7 +571,7 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) { void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* play) { static s32 sMoonCallTimer = 0; - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 140: func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80); break; @@ -594,7 +594,7 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla break; } - if ((this->animIndex == SK_ANIM_OCARINA_JUGGLE) && (play->csCtx.frames < 700)) { + if ((this->animIndex == SK_ANIM_OCARINA_JUGGLE) && (play->csCtx.curFrame < 700)) { if (Animation_OnFrame(&this->skelAnime, 5.0f) || Animation_OnFrame(&this->skelAnime, 25.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_OTEDAMA1); } else if (Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 40.0f)) { @@ -602,7 +602,7 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla } } - if (play->csCtx.frames >= 700) { + if (play->csCtx.curFrame >= 700) { if (sMoonCallTimer < 128) { if ((sMoonCallTimer & 0x1F) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_STAL20_CALL_MOON); @@ -621,7 +621,7 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla * Handles sound effects for the cutscene where Skull Kid drops the Ocarina of Time. */ void DmStk_PlaySfxForDroppingOcarinaCutscene(DmStk* this, PlayState* play) { - if (play->csCtx.frames == 3) { + if (play->csCtx.curFrame == 3) { Actor_PlaySfx(&this->actor, NA_SE_EN_STAL06_SURPRISED); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_DOWN_K); } @@ -631,7 +631,7 @@ void DmStk_PlaySfxForDroppingOcarinaCutscene(DmStk* this, PlayState* play) { * Handles sound effects for the cutscene where Skull Kid is shivering in the rain. */ void DmStk_PlaySfxForShiveringInRainCutscene(DmStk* this, PlayState* play) { - if ((play->csCtx.frames >= 642) && (play->csCtx.frames < 845)) { + if ((play->csCtx.curFrame >= 642) && (play->csCtx.curFrame < 845)) { Actor_PlaySfx(&this->actor, NA_SE_NE_STAL23_COLD - SFX_FLAG); } } @@ -641,7 +641,7 @@ void DmStk_PlaySfxForShiveringInRainCutscene(DmStk* this, PlayState* play) { * in Termina Field. */ void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 58: case 61: case 68: @@ -668,7 +668,7 @@ void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) { * the Giants are walking away. */ void DmStk_PlaySfxForEndingCutsceneFirstPart(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 5: Audio_PlayAmbience(AMBIENCE_ID_0C); break; @@ -686,7 +686,7 @@ void DmStk_PlaySfxForEndingCutsceneFirstPart(DmStk* this, PlayState* play) { void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) { Player* player = GET_PLAYER(play); - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 5: Audio_PlayAmbience(AMBIENCE_ID_0C); break; @@ -760,7 +760,7 @@ void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) { void DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(DmStk* this, PlayState* play) { static s32 sMoonCallTimer = 0; - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 40: func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80); break; @@ -779,7 +779,7 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(DmStk* this, PlayState* pla break; } - if (play->csCtx.frames >= 408) { + if (play->csCtx.curFrame >= 408) { if (sMoonCallTimer < 128) { if ((sMoonCallTimer & 0x1F) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_STAL20_CALL_MOON); @@ -803,7 +803,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla this->oathToOrderCutsceneVoicePos.y = this->actor.projectedPos.y; this->oathToOrderCutsceneVoicePos.z = this->actor.projectedPos.z; - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 64: Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL06_SURPRISED); break; @@ -847,13 +847,13 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla if (1) {} - if ((play->csCtx.frames >= 62) && (play->csCtx.frames < 273)) { + if ((play->csCtx.curFrame >= 62) && (play->csCtx.curFrame < 273)) { if ((Rand_ZeroOne() < 0.75f) && ((play->state.frames % 2) != 0)) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_EARTHQUAKE); } } - if ((play->csCtx.frames >= 498) && (play->csCtx.frames < 577)) { + if ((play->csCtx.curFrame >= 498) && (play->csCtx.curFrame < 577)) { if ((play->state.frames % 4) == 0) { if ((play->state.frames & 4) != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_BODY_LEV); @@ -863,7 +863,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla } } - if (play->csCtx.frames >= 290) { + if (play->csCtx.curFrame >= 290) { func_8019F128(NA_SE_EV_KYOJIN_VOICE_SUCCESS - SFX_FLAG); } } @@ -874,7 +874,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla * moon, which is slightly longer. */ void DmStk_PlaySfxForMoonWarpCutsceneVersion1(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 551: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_PULLED); break; @@ -896,7 +896,7 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion1(DmStk* this, PlayState* play) { * warps to the moon, which is slightly shorter. */ void DmStk_PlaySfxForMoonWarpCutsceneVersion2(DmStk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 311: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_PULLED); break; @@ -923,7 +923,7 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) { DmStk_PlaySfxForIntroCutsceneFirstPart(this, play); } else if (gSaveContext.sceneLayer == 0) { DmStk_PlaySfxForIntroCutsceneSecondPart(this, play); - } else if ((gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) { + } else if ((gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) { DmStk_PlaySfxForObtainingMajorasMaskCutscene(this, play); } break; @@ -936,9 +936,9 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) { case SCENE_OPENINGDAN: if (gSaveContext.sceneLayer == 0) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { DmStk_PlaySfxForCurseCutsceneFirstPart(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { DmStk_PlaySfxForCurseCutsceneSecondPart(this, play); } } @@ -946,19 +946,19 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) { case SCENE_OKUJOU: if (gSaveContext.sceneLayer == 0) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { DmStk_PlaySfxForDroppingOcarinaCutscene(this, play); - } else if (play->csCtx.currentCsIndex == 2) { + } else if (play->csCtx.scriptIndex == 2) { DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(this, play); - } else if (play->csCtx.currentCsIndex == 3) { + } else if (play->csCtx.scriptIndex == 3) { DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(this, play); } } else if (gSaveContext.sceneLayer == 2) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { DmStk_PlaySfxForMoonWarpCutsceneVersion1(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { DmStk_PlaySfxForMoonWarpCutsceneVersion2(this, play); } } @@ -966,15 +966,15 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) { case SCENE_00KEIKOKU: if (gSaveContext.sceneLayer == 3) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { DmStk_PlaySfxForShiveringInRainCutscene(this, play); - } else if (play->csCtx.currentCsIndex == 2) { + } else if (play->csCtx.scriptIndex == 2) { DmStk_PlaySfxForPlayingWithFairiesCutscene(this, play); } } else if (gSaveContext.sceneLayer == 7) { - if (play->csCtx.currentCsIndex == 0) { + if (play->csCtx.scriptIndex == 0) { DmStk_PlaySfxForEndingCutsceneFirstPart(this, play); - } else if (play->csCtx.currentCsIndex == 1) { + } else if (play->csCtx.scriptIndex == 1) { DmStk_PlaySfxForEndingCutsceneSecondPart(this, play); } } @@ -1119,7 +1119,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->fadeOutTimer = 0; this->alpha = this->alpha; this->actor.targetArrowOffset = 1100.0f; - this->csAction = 99; + this->cueId = 99; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gSkullKidSkel, NULL, NULL, NULL, 0); DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0); @@ -1127,7 +1127,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); - if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.currentCsIndex > 0)) { + if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) { play->envCtx.unk_17 = 15; play->envCtx.unk_18 = 15; } @@ -1165,35 +1165,35 @@ void DmStk_WaitForTelescope(DmStk* this, PlayState* play) { * Plays the cutscene in the telescope where the Moon's Tear falls. */ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) { - s16 dayOneAndTwoCutscene = this->actor.cutscene; - s16 dayThreeCutscene = ActorCutscene_GetAdditionalCutscene(dayOneAndTwoCutscene); - s16 finalHoursCutscene = ActorCutscene_GetAdditionalCutscene(dayThreeCutscene); - s16 cutscene; + s16 dayOneAndTwoCsId = this->actor.csId; + s16 dayThreeCsId = CutsceneManager_GetAdditionalCsId(dayOneAndTwoCsId); + s16 finalHoursCsId = CutsceneManager_GetAdditionalCsId(dayThreeCsId); + s16 csId; if (gSaveContext.save.day < 3) { - cutscene = dayOneAndTwoCutscene; + csId = dayOneAndTwoCsId; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || ((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) { - cutscene = finalHoursCutscene; + csId = finalHoursCsId; } else { - cutscene = dayThreeCutscene; + csId = dayThreeCsId; } - if (ActorCutscene_GetCanPlayNext(cutscene)) { - ActorCutscene_Start(cutscene, &this->actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_Start(csId, &this->actor); Environment_StartTime(); this->actionFunc = DmStk_DoNothing; } else { - ActorCutscene_SetIntentToPlay(cutscene); + CutsceneManager_Queue(csId); } } void DmStk_ClockTower_StartIntroCutsceneVersion1(DmStk* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(9)) { - ActorCutscene_Start(9, &this->actor); + if (CutsceneManager_IsNext(9)) { + CutsceneManager_Start(9, &this->actor); this->actionFunc = DmStk_ClockTower_WaitForIntroCutsceneVersion1ToEnd; } else { - ActorCutscene_SetIntentToPlay(9); + CutsceneManager_Queue(9); } } @@ -1207,11 +1207,11 @@ void DmStk_ClockTower_WaitForIntroCutsceneVersion1ToEnd(DmStk* this, PlayState* } void DmStk_ClockTower_StartIntroCutsceneVersion2(DmStk* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(11)) { - ActorCutscene_Start(11, &this->actor); + if (CutsceneManager_IsNext(11)) { + CutsceneManager_Start(11, &this->actor); this->actionFunc = DmStk_ClockTower_WaitForIntroCutsceneVersion2ToEnd; } else { - ActorCutscene_SetIntentToPlay(11); + CutsceneManager_Queue(11); } } @@ -1224,21 +1224,21 @@ void DmStk_ClockTower_WaitForIntroCutsceneVersion2ToEnd(DmStk* this, PlayState* } void DmStk_ClockTower_StartDropOcarinaCutscene(DmStk* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(10)) { + if (CutsceneManager_IsNext(10)) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_DAMAGE); - ActorCutscene_Start(10, &this->actor); + CutsceneManager_Start(10, &this->actor); this->actor.shape.rot.x = 0; this->actor.world.rot.x = this->actor.shape.rot.x; this->actor.shape.rot.y = this->actor.shape.rot.x; this->actor.world.rot.y = this->actor.shape.rot.x; this->actionFunc = DmStk_ClockTower_WaitForDropOcarinaCutsceneToEnd; } else { - ActorCutscene_SetIntentToPlay(10); + CutsceneManager_Queue(10); } } void DmStk_ClockTower_WaitForDropOcarinaCutsceneToEnd(DmStk* this, PlayState* play) { - if ((play->csCtx.state != 0) && (play->csCtx.frames > 20)) { + if ((play->csCtx.state != 0) && (play->csCtx.curFrame > 20)) { this->actionFunc = DmStk_ClockTower_Idle; } } @@ -1307,21 +1307,21 @@ void DmStk_ClockTower_WaitForDeflectionToEnd(DmStk* this, PlayState* play) { */ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { s32 pad; - s32 actorActionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 107)) { - actorActionIndex = Cutscene_GetActorActionIndex(play, 107); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_107)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_107); - if (play->csCtx.frames == play->csCtx.actorActions[actorActionIndex]->startFrame) { - if (this->csAction != play->csCtx.actorActions[actorActionIndex]->action) { - this->csAction = play->csCtx.actorActions[actorActionIndex]->action; + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; if (play->sceneId == SCENE_CLOCKTOWER) { this->handType = SK_HAND_TYPE_HOLDING_FLUTE; } else { this->handType = SK_HAND_TYPE_DEFAULT; } - switch (play->csCtx.actorActions[actorActionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 0: case 1: this->animIndex = SK_ANIM_IDLE; @@ -1581,9 +1581,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actorActionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } else { - this->csAction = 99; + this->cueId = 99; } if (this->fadeInState == SK_FADE_IN_STATE_START) { @@ -1794,12 +1794,12 @@ void DmStk_Update(Actor* thisx, PlayState* play) { break; case SK_DEKU_PIPES_CS_STATE_PLAYER_USED_OCARINA: - if (ActorCutscene_GetCanPlayNext(16)) { + if (CutsceneManager_IsNext(16)) { this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_START; - ActorCutscene_Start(16, &this->actor); + CutsceneManager_Start(16, &this->actor); this->actionFunc = DmStk_ClockTower_Idle; } else { - ActorCutscene_SetIntentToPlay(16); + CutsceneManager_Queue(16); } break; @@ -1814,7 +1814,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { // 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) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && - (play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) && + (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (play->csCtx.state == 0)) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; if (R_TIME_SPEED != 0) { @@ -1824,7 +1824,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { } } - if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.currentCsIndex > 0)) { + if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) { play->envCtx.unk_17 = 15; play->envCtx.unk_18 = 15; } @@ -1888,7 +1888,7 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot case SK_MASK_TYPE_NORMAL: if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1) && - (play->csCtx.frames < 1400)) { + (play->csCtx.curFrame < 1400)) { if (this->fogN == this->fogF) { this->fogF = this->fogN; } @@ -1905,8 +1905,8 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL); gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMaskEyesDL); - if (Cutscene_CheckActorAction(play, 513) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 513)]->action == 2) && + 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)) { Matrix_Push(); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); 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 f55321ef7..0f58c534d 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h @@ -41,7 +41,7 @@ typedef struct DmStk { /* 0x32E */ u8 fadeInState; /* 0x32F */ u8 fadeOutState; /* 0x330 */ s32 fadeOutTimer; - /* 0x334 */ u8 csAction; + /* 0x334 */ u8 cueId; /* 0x335 */ u8 hasBeenHit; // set but never used /* 0x336 */ s8 objectStkObjectIndex; /* 0x337 */ s8 objectStk2ObjectIndex; 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 13a7e264f..fd945787d 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -65,37 +65,37 @@ Actor* func_80C22350(DmTag* this, PlayState* play, u8 actorCat, s16 actorId) { return foundActor; } -s32 func_80C22400(DmTag* this, s16 arg1) { +s32 func_80C22400(DmTag* this, s16 csId) { s32 ret = false; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(arg1); - } else if (ActorCutscene_GetCanPlayNext(arg1)) { - ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(csId); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); ret = true; } else { - ActorCutscene_SetIntentToPlay(arg1); + CutsceneManager_Queue(csId); } return ret; } -s16 func_80C2247C(DmTag* this, s32 arg1) { +s16 func_80C2247C(DmTag* this, s32 numCutscenes) { s32 i; - s16 cs = this->actor.cutscene; + s16 csId = this->actor.csId; - for (i = 0; i < arg1; i++) { - cs = ActorCutscene_GetAdditionalCutscene(cs); + for (i = 0; i < numCutscenes; i++) { + csId = CutsceneManager_GetAdditionalCsId(csId); } - return cs; + return csId; } s32 func_80C224D8(DmTag* this, PlayState* play) { s32 pad; Actor* sp30; Actor* sp2C; - s16 sp2A = this->actor.cutscene; + s16 csId = this->actor.csId; s32 ret = false; sp30 = func_80C22350(this, play, ACTORCAT_NPC, ACTOR_EN_AN); @@ -103,9 +103,9 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { switch (this->unk_1A4) { case 0: - if (func_80C22400(this, sp2A)) { + if (func_80C22400(this, csId)) { if ((sp2C != NULL) && (sp2C->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), sp2C); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), sp2C); } this->unk_1A4++; ret = true; @@ -114,7 +114,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { case 1: if ((sp30 != NULL) && (sp30->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(func_80C2247C(this, 0))), + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(func_80C2247C(this, 0))), sp30); } this->unk_1A4++; @@ -122,7 +122,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { break; case 2: - ActorCutscene_Stop(func_80C2247C(this, 0)); + CutsceneManager_Stop(func_80C2247C(this, 0)); if (func_80C22400(this, func_80C2247C(this, 1))) { this->unk_1A4++; ret = true; @@ -130,7 +130,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { break; case 3: - ActorCutscene_Stop(func_80C2247C(this, 1)); + CutsceneManager_Stop(func_80C2247C(this, 1)); if (func_80C22400(this, func_80C2247C(this, 2))) { this->unk_1A4++; ret = true; @@ -138,7 +138,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { break; case 4: - ActorCutscene_Stop(func_80C2247C(this, 2)); + CutsceneManager_Stop(func_80C2247C(this, 2)); if (func_80C22400(this, func_80C2247C(this, 3))) { this->unk_1A4++; ret = true; @@ -146,7 +146,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { break; case 5: - ActorCutscene_Stop(func_80C2247C(this, 3)); + CutsceneManager_Stop(func_80C2247C(this, 3)); if (func_80C22400(this, func_80C2247C(this, 4))) { this->unk_1A4++; ret = true; 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 a671fe3f2..4d2b4a54a 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -131,14 +131,14 @@ void DmZl_DoNothing(DmZl* this, PlayState* play) { } void DmZl_UpdateCutscene(DmZl* this, PlayState* play) { - s32 actionIndex; + s32 cueChannel; // reused as animIndex - if (Cutscene_CheckActorAction(play, 0x66)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x66); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_102)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_102); + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { s16 nextAnimIndex = ZELDA_ANIM_FACING_AWAY; - switch (play->csCtx.actorActions[actionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { default: case 1: break; @@ -159,14 +159,14 @@ void DmZl_UpdateCutscene(DmZl* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - actionIndex = this->animIndex; + cueChannel = this->animIndex; - if ((actionIndex == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (actionIndex == ZELDA_ANIM_GIVING_OCARINA_START) || - (actionIndex == ZELDA_ANIM_PLAYING_OCARINA_START)) { + if ((cueChannel == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (cueChannel == ZELDA_ANIM_GIVING_OCARINA_START) || + (cueChannel == ZELDA_ANIM_PLAYING_OCARINA_START)) { // these animations don't loop at the end, they lead into the next animation this->animIndex++; DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); 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 1e2a59b76..c889de158 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -100,7 +100,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play) { if (grottoType == DOORANA_TYPE_HIDDEN_STORMS) { //! @bug Implementation from OoT is not updated for MM, grotto does not open on Song of Storms - if (this->actor.xyzDistToPlayerSq < SQ(200.0f) && EnvFlags_Get(play, 5)) { + if (this->actor.xyzDistToPlayerSq < SQ(200.0f) && CutsceneFlags_Get(play, 5)) { grottoIsOpen = true; this->actor.flags &= ~ACTOR_FLAG_10; // always update OFF } @@ -176,11 +176,11 @@ void DoorAna_GrabLink(DoorAna* this, PlayState* play) { Player* player; s8 pad[2]; - if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 a0eefb83a..f8fef514d 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -310,20 +310,20 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { void func_808A0F88(DoorShutter* this, PlayState* play) { if (Flags_GetClear(play, this->actor.room) || Flags_GetClearTemp(play, this->actor.room)) { - this->unk_160 = this->actor.cutscene; + this->csId = this->actor.csId; if (this->doorType == 7) { - if (this->unk_160 != -1) { - this->unk_160 = ActorCutscene_GetAdditionalCutscene(this->unk_160); + if (this->csId != CS_ID_NONE) { + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); } } - if (ActorCutscene_GetCanPlayNext(this->unk_160)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_160, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); Flags_SetClear(play, this->actor.room); DoorShutter_SetupAction(this, func_808A1784); this->unk_167 = -1; } else { - ActorCutscene_SetIntentToPlay(this->unk_160); + CutsceneManager_Queue(this->csId); } } else if (func_808A0E28(this, play)) { Player* player = GET_PLAYER(play); @@ -454,7 +454,7 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_OPEN); } - if ((this->unk_160 != -1) && (ActorCutscene_GetCurrentIndex() == this->unk_160)) { + if ((this->csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->csId)) { func_800B724C(play, &this->actor, PLAYER_CSMODE_1); } } @@ -468,13 +468,13 @@ 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->actor))) { - this->unk_160 = this->actor.cutscene; - if (ActorCutscene_GetCanPlayNext(this->unk_160)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_160, &this->actor); + this->csId = this->actor.csId; + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); DoorShutter_SetupAction(this, func_808A1784); this->unk_167 = -1; } else { - ActorCutscene_SetIntentToPlay(this->unk_160); + CutsceneManager_Queue(this->csId); } } else if (func_808A0E28(this, play)) { Player* player = GET_PLAYER(play); @@ -521,7 +521,7 @@ void func_808A1684(DoorShutter* this, PlayState* play) { void func_808A1784(DoorShutter* this, PlayState* play) { if (this->unk_167 != 0) { - if (func_800F22C4(this->unk_160, &this->actor)) { + if (func_800F22C4(this->csId, &this->actor) != 0) { if (this->unk_167 < 0) { if ((play->state.frames % 2) != 0) { this->unk_167++; @@ -569,9 +569,9 @@ void func_808A1884(DoorShutter* this, PlayState* play) { if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_800)) { DoorShutter_SetupAction(this, func_808A1C50); - if (ActorCutscene_GetCurrentIndex() == 0x7D) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) { func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data)); - player->unk_A86 = -1; + player->csId = CS_ID_NONE; func_800B7298(play, NULL, PLAYER_CSMODE_115); } } @@ -624,7 +624,7 @@ void func_808A1B48(DoorShutter* this, PlayState* play) { void func_808A1C50(DoorShutter* this, PlayState* play) { if (this->unk_167++ > 30) { if (GET_PLAYER(play)->csMode == PLAYER_CSMODE_115) { - func_800B7298(play, NULL, PLAYER_CSMODE_6); + func_800B7298(play, NULL, PLAYER_CSMODE_END); } 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 c64d3d523..7f18e0546 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h @@ -17,7 +17,7 @@ typedef struct DoorShutter { /* 0x0144 */ UNK_TYPE1 unk144[0x18]; /* 0x015C */ s16 unk_15C; /* 0x015E */ s16 unk_15E; - /* 0x0160 */ s16 unk_160; + /* 0x0160 */ s16 csId; /* 0x0162 */ u8 doorType; /* 0x0163 */ u8 unk_163; /* 0x0164 */ u8 unk_164; 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 d942903a1..0b4b59f1c 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -280,15 +280,15 @@ void func_808B8E78(DoorWarp1* this, PlayState* play) { } s32 func_808B900C(DoorWarp1* this, PlayState* play) { - s32 index; + s32 cueChannel; u8 ret = false; - if (Cutscene_CheckActorAction(play, 569)) { - index = Cutscene_GetActorActionIndex(play, 569); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_569)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_569); - if (this->unk_208 != play->csCtx.actorActions[index]->action) { - this->unk_208 = play->csCtx.actorActions[index]->action; - if (play->csCtx.actorActions[index]->action == 2) { + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + if (play->csCtx.actorCues[cueChannel]->id == 2) { ret = true; } } @@ -345,7 +345,7 @@ void func_808B921C(DoorWarp1* this, PlayState* play) { } if (func_808B866C(this, play) && !Play_InCsMode(play)) { - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); Message_StartTextbox(play, 0xF2, &this->dyna.actor); DoorWarp1_SetupAction(this, func_808B93A0); } @@ -368,7 +368,7 @@ void func_808B93A0(DoorWarp1* this, PlayState* play) { DoorWarp1_SetupAction(this, func_808B9524); } else { func_8019F230(); - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); DoorWarp1_SetupAction(this, func_808B94A4); } } @@ -377,7 +377,7 @@ void func_808B93A0(DoorWarp1* this, PlayState* play) { } void func_808B94A4(DoorWarp1* this, PlayState* play) { - if (!func_808B866C(this, play) && (ActorCutscene_GetCurrentIndex() != play->playerActorCsIds[8])) { + if (!func_808B866C(this, play) && (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { DoorWarp1_SetupAction(this, func_808B921C); } func_808BB8D4(this, play, 1); @@ -385,10 +385,10 @@ void func_808B94A4(DoorWarp1* this, PlayState* play) { } void func_808B9524(DoorWarp1* this, PlayState* play) { - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[9])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE]); } else { - ActorCutscene_Start(play->playerActorCsIds[9], NULL); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE], NULL); DoorWarp1_SetupAction(this, func_808B958C); } } @@ -458,10 +458,10 @@ void func_808B977C(DoorWarp1* this, PlayState* play) { } void func_808B9840(DoorWarp1* this, PlayState* play) { - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[9])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE]); } else { - ActorCutscene_Start(play->playerActorCsIds[9], NULL); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE], NULL); DoorWarp1_SetupAction(this, func_808B98A8); } } @@ -617,10 +617,10 @@ void func_808B9FD0(DoorWarp1* this, PlayState* play) { return; } - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[9])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE]); } else { - ActorCutscene_Start(play->playerActorCsIds[9], NULL); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE], NULL); AudioSfx_PlaySfx(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); Animation_ChangeImpl(&this->skelAnime, &gWarpCrystalAnim, 1.0f, Animation_GetLastFrame(&gWarpCrystalAnim), @@ -638,7 +638,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { if ((play->sceneId == SCENE_MITURIN_BS) || (play->sceneId == SCENE_HAKUGIN_BS) || (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_SEA_BS)) { - D_801F4DE2 = play->sceneId; + gDungeonBossWarpSceneId = play->sceneId; if (play->sceneId == SCENE_MITURIN_BS) { phi_v0_2 = 0; } else if (play->sceneId == SCENE_HAKUGIN_BS) { @@ -711,7 +711,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { } else { switch (phi_v0_2) { case 0: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { // Skips the entrance cutscene as this flag is attached to `ENTRANCE(WOODFALL_TEMPLE, 1)` SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON); play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1); @@ -728,7 +728,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { break; case 1: - SET_WEEKEVENTREG(WEEKEVENTREG_33_80); + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE); play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7); play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; @@ -736,14 +736,14 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { break; case 3: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { play->nextEntrance = ENTRANCE(ZORA_CAPE, 9); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_55_80); + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE); play->nextEntrance = ENTRANCE(ZORA_CAPE, 8); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; @@ -753,7 +753,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { break; case 2: - SET_WEEKEVENTREG(WEEKEVENTREG_52_20); + SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE); play->nextEntrance = ENTRANCE(IKANA_CANYON, 15); gSaveContext.nextCutsceneIndex = 0xFFF2; play->transitionTrigger = TRANS_TRIGGER_START; @@ -880,7 +880,7 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { void func_808BAAF4(DoorWarp1* this, PlayState* play) { Player* player = GET_PLAYER(play); - s16 cutscene; + s16 csId; f32 phi_f2; phi_f2 = 200.0f; @@ -891,14 +891,14 @@ void func_808BAAF4(DoorWarp1* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_80) && (fabsf(this->dyna.actor.xzDistToPlayer) < phi_f2) && ((player->actor.world.pos.y - 20.0f) < this->dyna.actor.world.pos.y) && (this->dyna.actor.world.pos.y < (player->actor.world.pos.y + 20.0f))) { - cutscene = this->dyna.actor.cutscene; + csId = this->dyna.actor.csId; - if (ActorCutscene_GetCanPlayNext(cutscene)) { - ActorCutscene_Start(cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_Start(csId, &this->dyna.actor); SET_WEEKEVENTREG(WEEKEVENTREG_86_80); DoorWarp1_SetupAction(this, func_808BABF4); } else { - ActorCutscene_SetIntentToPlay(cutscene); + CutsceneManager_Queue(csId); } } } diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h index 076999e57..1bc7e13bc 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h @@ -53,7 +53,7 @@ typedef struct DoorWarp1 { /* 0x202 */ u8 unk_202; /* 0x203 */ u8 unk_203; /* 0x204 */ f32 unk_204; - /* 0x208 */ u8 unk_208; + /* 0x208 */ u8 cueId; } DoorWarp1; // size = 0x20C #endif // Z_DOOR_WARP1_H 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 9174fafc0..65fb8da2f 100644 --- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c +++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c @@ -56,7 +56,7 @@ void EffChange_Init(Actor* thisx, PlayState* play) { this->step = 0; this->actor.shape.rot.y = 0; this->skeletonInfo.frameCtrl.unk_C = (2.0f / 3.0f); - ActorCutscene_SetIntentToPlay(0x7B); + CutsceneManager_Queue(CS_ID_GLOBAL_ELEGY); } void EffChange_Destroy(Actor* thisx, PlayState* play) { @@ -80,7 +80,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) { if (func_80183DE0(&this->skeletonInfo)) { Actor_Kill(&this->actor); - ActorCutscene_Stop(0x7B); + CutsceneManager_Stop(CS_ID_GLOBAL_ELEGY); func_800FD2B4(play, 0.0f, 850.0f, 0.2f, 0.0f); return; } @@ -109,11 +109,11 @@ void func_80A4C5CC(EffChange* this, PlayState* play) { phi_fv0 = 0.0f; } func_800FD2B4(play, phi_fv0, 850.0f, 0.2f, 0.0f); - if (ActorCutscene_GetCurrentIndex() != 0x7B) { - if (ActorCutscene_GetCanPlayNext(0x7B)) { - ActorCutscene_Start(0x7B, &this->actor); + if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_ELEGY) { + if (CutsceneManager_IsNext(CS_ID_GLOBAL_ELEGY)) { + CutsceneManager_Start(CS_ID_GLOBAL_ELEGY, &this->actor); } else { - ActorCutscene_SetIntentToPlay(0x7B); + CutsceneManager_Queue(CS_ID_GLOBAL_ELEGY); } } } 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 0ebb5139d..fbe4c27cf 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 @@ -82,9 +82,9 @@ void func_80BCEBC0(EffKamejimaWave* this, PlayState* play) { } void func_80BCEC6C(EffKamejimaWave* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x1E0)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x1E0)); - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x1E0)]->action == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_480)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_480)); + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_480)]->id == 2) { this->scaleOffset = 0.05f; this->actionFunc = func_80BCEBC0; this->actor.draw = EffKamejimaWave_Draw; @@ -117,9 +117,9 @@ void func_80BCED34(EffKamejimaWave* this, PlayState* play) { } void func_80BCEDE0(EffKamejimaWave* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x1F6)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x1F6)); - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x1F6)]->action == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_502)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_502)); + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_502)]->id == 2) { this->scaleOffset = 0.03f; this->actor.scale.x = 0.35f; this->actionFunc = func_80BCED34; diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c index 015e9e715..a37f4ec07 100644 --- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c +++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c @@ -49,7 +49,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { case EFFLASTDAY_PARAMS_1: this->dList = object_lastday_DL_000510; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000608); - this->csActionCmd = 0x1FC; + this->cueType = CS_CMD_ACTOR_CUE_508; this->actionFunc = func_80BEBDF8; Actor_SetScale(&this->actor, 1.0f); break; @@ -57,7 +57,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { case EFFLASTDAY_PARAMS_2: this->dList = object_lastday_DL_000210; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000308); - this->csActionCmd = 0x1FD; + this->cueType = CS_CMD_ACTOR_CUE_509; this->actionFunc = func_80BEBEB8; Actor_SetScale(&this->actor, 0.5f); break; @@ -65,7 +65,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { case EFFLASTDAY_PARAMS_3: this->dList = object_lastday_DL_000060; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000148); - this->csActionCmd = 0x1FE; + this->cueType = CS_CMD_ACTOR_CUE_510; this->actionFunc = func_80BEBF78; Actor_SetScale(&this->actor, 0.2f); this->actor.home.rot.z = 0; @@ -74,7 +74,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { default: this->dList = object_lastday_DL_000370; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000448); - this->csActionCmd = 0x1FB; + this->cueType = CS_CMD_ACTOR_CUE_507; this->actionFunc = func_80BEBD0C; Actor_SetScale(&this->actor, 1.0f); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, @@ -94,12 +94,12 @@ void EffLastday_Destroy(Actor* thisx, PlayState* play) { } void func_80BEBD0C(EffLastday* this, PlayState* play) { - u16 csAction; + u16 cueId; - if ((Cutscene_CheckActorAction(play, this->csActionCmd))) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd)); - csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action; - switch (csAction) { + if ((Cutscene_IsCueInChannel(play, this->cueType))) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + switch (cueId) { default: this->actor.draw = NULL; this->alpha = 0; @@ -128,12 +128,12 @@ void func_80BEBD0C(EffLastday* this, PlayState* play) { } void func_80BEBDF8(EffLastday* this, PlayState* play) { - u16 csAction; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->csActionCmd)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd)); - csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action; - switch (csAction) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + switch (cueId) { default: this->actor.draw = NULL; this->step = 0; @@ -154,12 +154,12 @@ void func_80BEBDF8(EffLastday* this, PlayState* play) { } void func_80BEBEB8(EffLastday* this, PlayState* play) { - u16 csAction; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->csActionCmd)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd)); - csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action; - switch (csAction) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + switch (cueId) { default: this->actor.draw = NULL; this->step = 0; @@ -180,12 +180,12 @@ void func_80BEBEB8(EffLastday* this, PlayState* play) { } void func_80BEBF78(EffLastday* this, PlayState* play) { - u16 csAction; + u16 cueId; - if (Cutscene_CheckActorAction(play, this->csActionCmd)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd)); - csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action; - switch (csAction) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + switch (cueId) { default: this->actor.draw = NULL; this->alpha = 0; diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h index 89266d744..0b5002863 100644 --- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h +++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h @@ -15,7 +15,7 @@ typedef struct EffLastday { /* 0x148 */ AnimatedMaterial* matAnim; /* 0x14C */ s16 step; /* 0x14E */ s16 alpha; - /* 0x150 */ s16 csActionCmd; + /* 0x150 */ s16 cueType; /* 0x154 */ EffLastdayActionFunc actionFunc; } EffLastday; // size = 0x158 diff --git a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c index 842ae4b9e..2b1c01c59 100644 --- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c +++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c @@ -43,12 +43,12 @@ void EffZoraband_Destroy(Actor* thisx, PlayState* play) { } void EffZoraband_MikauFadeOut(EffZoraband* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x20F)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_527)) { if ((EFFZORABAND_GET_F(&this->actor) + 2) == - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x20F)]->action) { + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_527)]->id) { this->stateFlags |= 2; } - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x20F)]->action == 7) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_527)]->id == 7) { this->actor.draw = NULL; } else { this->actor.draw = EffZoraband_Draw; 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 3d7df7c27..c88835373 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c @@ -111,21 +111,21 @@ void func_8092E284(ElfMsg* this, PlayState* play) { if ((player->tatlActor != NULL) && ((func_8092E1FC(this)))) { player->tatlTextId = func_8092E1D0(this); - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); tatl->elfMsg = &this->actor; - if (this->actor.cutscene == -1) { - this->actor.cutscene = 0x7C; + if (this->actor.csId == CS_ID_NONE) { + this->actor.csId = CS_ID_GLOBAL_TALK; } if ((player->tatlTextId < 0) && (this->actor.home.rot.x < 0)) { - if (ActorCutscene_GetCurrentIndex() == 0x7D) { - ActorCutscene_Stop(0x7D); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { this->actor.home.rot.x = 0; - ActorCutscene_Start(this->actor.cutscene, &this->actor); + CutsceneManager_Start(this->actor.csId, &this->actor); func_800E0348(play->cameraPtrs[CAM_ID_MAIN]); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } 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 a29b226b0..8244c7fb6 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -100,9 +100,9 @@ s32 func_8096EE50(ElfMsg2* this) { void func_8096EE64(ElfMsg2* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { - if (this->actor.cutscene != -1) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (this->actor.csId != CS_ID_NONE) { + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } } @@ -115,14 +115,14 @@ void func_8096EE64(ElfMsg2* this, PlayState* play) { } ElfMsg2_SetupAction(this, func_8096EF98); - } else if ((this->actor.cutscene != -1) && (ActorCutscene_GetCurrentIndex() != this->actor.cutscene)) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + } else if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->actor.csId)) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } 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 da6b29180..e3e8b7bc5 100644 --- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c +++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c @@ -110,20 +110,20 @@ void func_80A2CF7C(ElfMsg3* this, PlayState* play) { ((player->actor.world.pos.y - this->actor.world.pos.y) < (100.0f * this->actor.scale.y))) && (fabsf(player->actor.world.pos.z - this->actor.world.pos.z) < (100.0f * this->actor.scale.z))) { player->tatlTextId = func_80A2CF50(this); - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); tatl->elfMsg = &this->actor; - if (this->actor.cutscene == -1) { - this->actor.cutscene = 0x7C; + if (this->actor.csId == CS_ID_NONE) { + this->actor.csId = CS_ID_GLOBAL_TALK; } if ((player->tatlTextId < 0) && (this->actor.home.rot.x < 0)) { - if (ActorCutscene_GetCurrentIndex() == 0x7D) { - ActorCutscene_Stop(0x7D); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); func_800E0348(play->cameraPtrs[CAM_ID_MAIN]); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } 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 7fbf402fa..c917f01a7 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c @@ -115,20 +115,20 @@ void func_80AFD668(ElfMsg4* this, PlayState* play) { if ((player->tatlActor != NULL) && func_80AFD5E0(this)) { player->tatlTextId = ElfMsg4_GetTextId(this); - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); tatl->elfMsg = this->elfMsg5; - if (this->actor.cutscene == -1) { - this->actor.cutscene = 0x7C; + if (this->actor.csId == CS_ID_NONE) { + this->actor.csId = CS_ID_GLOBAL_TALK; } if ((player->tatlTextId < 0) && (this->actor.home.rot.x < 0)) { - if (ActorCutscene_GetCurrentIndex() == 0x7D) { - ActorCutscene_Stop(0x7D); - ActorCutscene_SetIntentToPlay((s16)this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext((s16)this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); func_800E0348(play->cameraPtrs[CAM_ID_MAIN]); } else { - ActorCutscene_SetIntentToPlay((s16)this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } @@ -139,7 +139,7 @@ void func_80AFD770(ElfMsg4* this, PlayState* play) { while (bgActor != NULL) { if ((bgActor->id != ACTOR_ELF_MSG5) || (ELFMSG4_GET_TEXT(&this->actor) != ELFMSG5_GET_FF(bgActor)) || - (this->actor.cutscene != bgActor->cutscene)) { + (this->actor.csId != bgActor->csId)) { bgActor = bgActor->next; } else { this->elfMsg5 = bgActor; 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 d05c099e9..89fbd9f6b 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.cutscene == -1) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && - Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) { + if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && + Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) { Actor_Kill(&this->actor); return; } @@ -246,10 +246,10 @@ void func_80BA1C88(ElfMsg6* this, PlayState* play, s16 arg2) { if (player->tatlActor != NULL) { player->tatlTextId = arg2; - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); sp20->elfMsg = &this->actor; - if (this->actor.cutscene == -1) { - this->actor.cutscene = 0x7C; + if (this->actor.csId == CS_ID_NONE) { + this->actor.csId = CS_ID_GLOBAL_TALK; } } } @@ -280,10 +280,10 @@ void func_80BA1CF8(ElfMsg6* this, PlayState* play) { this->actor.textId = 0x25B; } else if (func_80BA1C00(this) && (player->actor.speed > 1.0f)) { player->tatlTextId = -this->actor.textId; - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); sp20->elfMsg = &this->actor; - if (this->actor.cutscene == -1) { - this->actor.cutscene = 0x7C; + if (this->actor.csId == CS_ID_NONE) { + this->actor.csId = CS_ID_GLOBAL_TALK; } } } @@ -321,10 +321,10 @@ void func_80BA1E30(ElfMsg6* this, PlayState* play) { if (func_80BA1C00(this) && (player->actor.speed > 1.0f)) { player->tatlTextId = -this->actor.textId; - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); sp20->elfMsg = &this->actor; - if (this->actor.cutscene == -1) { - this->actor.cutscene = 0x7C; + if (this->actor.csId == CS_ID_NONE) { + this->actor.csId = CS_ID_GLOBAL_TALK; } } } @@ -336,14 +336,14 @@ void func_80BA1F80(ElfMsg6* this, PlayState* play) { } if (func_80BA1C00(this)) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, NULL); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, NULL); Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); Actor_Kill(&this->actor); return; } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 99779f20b..41dba0aab 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -1417,14 +1417,14 @@ void func_80BEF518(EnAkindonuts* this, PlayState* play) { } if (this->unk_35E == 0) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_35E = 1; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); return; } } @@ -1546,14 +1546,14 @@ void func_80BEFAF0(EnAkindonuts* this, PlayState* play) { if (func_80BECD10(this, this->path, this->unk_334) && (sp34 < 10.0f)) { if (this->unk_334 >= (this->path->count - 1)) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->actionFunc = func_80BEFD74; } else { this->unk_334++; } } } else if (this->actor.playerHeightRel > 500.0f) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->actionFunc = func_80BEFD74; } @@ -1569,17 +1569,17 @@ void func_80BEFAF0(EnAkindonuts* this, PlayState* play) { func_80BECBE0(this, sp32); if (this->unk_35E == 2) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_35E = 3; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); return; } } else if ((this->unk_35E == 1) && (this->unk_356 == 20)) { - ActorCutscene_Stop(this->cutscene); - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); this->unk_35E = 2; } this->unk_356++; @@ -1617,7 +1617,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) { this->unk_32C |= 0x2; this->unk_32C |= 0x4; this->unk_338 = 4; - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; func_80BEE938(this, play); this->actionFunc = func_80BEEB20; } diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h index 72c932d0c..180d73ed4 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h @@ -43,7 +43,7 @@ typedef struct EnAkindonuts { /* 0x358 */ f32 unk_358; /* 0x35C */ s16 unk_35C; /* 0x35E */ s16 unk_35E; - /* 0x360 */ s16 cutscene; + /* 0x360 */ s16 csId; /* 0x362 */ s16 unk_362; /* 0x364 */ s16 unk_364; /* 0x366 */ s8 unk_366; 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 443065633..87b83e670 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -219,30 +219,30 @@ Actor* func_80BDE384(EnAl* this, PlayState* play) { return actor; } -s32 func_80BDE408(EnAl* this, s16 arg1) { +s32 func_80BDE408(EnAl* this, s16 csId) { s32 ret = false; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(arg1); - } else if (ActorCutscene_GetCanPlayNext(arg1)) { - ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(csId); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); ret = true; } else { - ActorCutscene_SetIntentToPlay(arg1); + CutsceneManager_Queue(csId); } return ret; } -s16 func_80BDE484(EnAl* this, s32 arg1) { - s16 cs = this->actor.cutscene; +s16 func_80BDE484(EnAl* this, s32 numCutscenes) { + s16 csId = this->actor.csId; s32 i; - for (i = 0; i < arg1; i++) { - cs = ActorCutscene_GetAdditionalCutscene(cs); + for (i = 0; i < numCutscenes; i++) { + csId = CutsceneManager_GetAdditionalCsId(csId); } - return cs; + return csId; } s32 func_80BDE4E0(EnAl* this, s16* arg1, s16 arg2) { @@ -317,13 +317,13 @@ s32 func_80BDE678(EnAl* this, s16* arg1, s16 arg2) { s32 func_80BDE7FC(EnAl* this, PlayState* play) { s32 pad; - s16 sp2A = func_80BDE484(this, 0); + s16 csId = func_80BDE484(this, 0); s32 pad2; s32 sp20 = false; switch (this->unk_4E6) { case 0: - if (!func_80BDE408(this, sp2A)) { + if (!func_80BDE408(this, csId)) { break; } @@ -332,7 +332,8 @@ s32 func_80BDE7FC(EnAl* this, PlayState* play) { case 6: case 8: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), + this->actor.child); } this->unk_4E6++; sp20 = true; @@ -342,13 +343,13 @@ s32 func_80BDE7FC(EnAl* this, PlayState* play) { case 3: case 5: case 7: - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor); this->unk_4E6++; sp20 = true; break; case 9: - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); this->unk_4E6++; sp20 = true; break; 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 6d6488383..d4c980055 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -305,15 +305,15 @@ void EnAni_Update(Actor* thisx, PlayState* play) { this->blinkFunc(this); if (this->stateFlags & ANI_STATE_FALLING) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { this->stateFlags &= ~ANI_STATE_FALLING; - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); - this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - Camera_SetToTrackActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->actor.cutscene)), + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); + this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); + Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->actor.csId)), &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } 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 0f66d5cf4..5aa746298 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 @@ -130,7 +130,7 @@ void func_809C11EC(EnAob01* this, PlayState* play) { this->unk_3F8[i] = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_EN_DG, D_809C384C[i].unk_00.x, D_809C384C[i].unk_00.y, D_809C384C[i].unk_00.z, - 0, DEG_TO_BINANG(D_809C384C[i].unk_04), 0, enDgParams, 0xFFFF, this->actor.halfDaysBits, NULL); + 0, DEG_TO_BINANG(D_809C384C[i].unk_04), 0, enDgParams, (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL); } } @@ -140,7 +140,7 @@ void func_809C1304(EnAob01* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++) { this->unk_3F8[i] = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_EN_RACEDOG, (i * 15.0f) + -3897.0f, 130.0f, 1290.0f - (i * 10.0f), 0, 0x1555, - 0, (i << 5) | ENAOB01_GET_7E00_1(&this->actor), 0xFFFF, this->actor.halfDaysBits, NULL); + 0, (i << 5) | ENAOB01_GET_7E00_1(&this->actor), (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL); } } @@ -394,7 +394,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) { if (this->unk_2D2 & 2) { this->unk_2D2 &= ~2; Rupees_ChangeBy(-this->unk_434); - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->actionFunc = func_809C1C9C; @@ -602,10 +602,11 @@ s32 func_809C2504(EnAob01* this, PlayState* play) { Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first; while (npc != NULL) { - if ((npc->id == ACTOR_EN_RACEDOG) && (func_800F2178(this->unk_430) == ((EnRacedog*)npc)->currentPoint)) { - ActorCutscene_Stop(this->unk_430); + if ((npc->id == ACTOR_EN_RACEDOG) && + (CutsceneManager_GetCutsceneCustomValue(this->csId) == ((EnRacedog*)npc)->currentPoint)) { + CutsceneManager_Stop(this->csId); this->unk_3F4 = npc; - this->unk_430 = ActorCutscene_GetAdditionalCutscene(this->unk_430); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); return true; } npc = npc->next; @@ -650,22 +651,22 @@ s32 func_809C25E4(EnAob01* this, PlayState* play) { } s32 func_809C2680(EnAob01* this) { - if ((ActorCutscene_GetLength(this->unk_430) > 0) && (ActorCutscene_GetCurrentIndex() != this->unk_430)) { - this->unk_430 = ActorCutscene_GetAdditionalCutscene(this->unk_430); + if ((CutsceneManager_GetLength(this->csId) > 0) && (CutsceneManager_GetCurrentCsId() != this->csId)) { + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); return true; } return false; } void func_809C26E4(EnAob01* this, PlayState* play) { - ActorCutscene_Stop(this->unk_430); - this->unk_430 = ActorCutscene_GetAdditionalCutscene(this->unk_430); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); this->actionFunc = func_809C2824; } void func_809C2730(EnAob01* this, PlayState* play) { if (func_809C2504(this, play) || func_809C2680(this)) { - ActorCutscene_SetIntentToPlay(this->unk_430); + CutsceneManager_Queue(this->csId); this->actionFunc = func_809C2824; } } @@ -684,9 +685,9 @@ void func_809C2788(EnAob01* this, PlayState* play) { } void func_809C2824(EnAob01* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_430)) { - ActorCutscene_Start(this->unk_430, this->unk_3F4); - switch (func_800F2178(this->unk_430)) { + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, this->unk_3F4); + switch (CutsceneManager_GetCutsceneCustomValue(this->csId)) { case 255: this->actionFunc = func_809C26E4; break; @@ -699,7 +700,7 @@ void func_809C2824(EnAob01* this, PlayState* play) { this->actionFunc = func_809C2730; } } else { - ActorCutscene_SetIntentToPlay(this->unk_430); + CutsceneManager_Queue(this->csId); } } @@ -947,9 +948,9 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { this->unk_440 = 500; func_809C1304(this, play); this->actor.draw = NULL; - this->unk_430 = this->actor.cutscene; + this->csId = this->actor.csId; func_809C2594(this, play); - ActorCutscene_SetIntentToPlay(this->unk_430); + CutsceneManager_Queue(this->csId); this->actor.flags &= ~ACTOR_FLAG_1; func_809C2F34(this, play); this->actionFunc = func_809C2824; diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h index 2507b1728..5432f74ae 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h @@ -34,7 +34,7 @@ typedef struct EnAob01 { /* 0x3F0 */ s16 blinkTimer; /* 0x3F4 */ Actor* unk_3F4; /* 0x3F8 */ Actor* unk_3F8[14]; - /* 0x430 */ s16 unk_430; + /* 0x430 */ s16 csId; /* 0x432 */ s16 unk_432; /* 0x434 */ s32 unk_434; /* 0x438 */ UNK_TYPE1 unk438[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 2878d1fc6..1c2cdf533 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -253,7 +253,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { if (this->unk_2F8 == 0) { this->unk_374 |= 2; } - SubS_FillCutscenesList(&this->actor, this->unk_3D0, ARRAY_COUNT(this->unk_3D0)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); if (D_80A9913C == NULL) { D_80A9913C = THIS; this->unk_374 |= 1; @@ -595,7 +595,7 @@ void func_80A95CEC(EnAz* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN); } - if (SubS_StartActorCutscene(&this->actor, 0x7C, this->unk_3D0[0], SUBS_CUTSCENE_NORMAL)) { + if (SubS_StartCutscene(&this->actor, CS_ID_GLOBAL_TALK, this->csIdList[0], SUBS_CUTSCENE_NORMAL)) { func_80A97C0C(this, play); } } @@ -649,10 +649,10 @@ void func_80A95F94(EnAz* this, PlayState* play) { void func_80A95FE8(EnAz* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (ActorCutscene_GetCanPlayNext(this->unk_3D0[0])) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_3D0[0], &this->actor); + if (CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->unk_3D0[0]); + CutsceneManager_Queue(this->csIdList[0]); } if (Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos) > 20.0f) { func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); @@ -672,7 +672,7 @@ void func_80A95FE8(EnAz* this, PlayState* play) { this->actor.shape.rot.x = 0; this->actor.gravity = 0.0f; func_80A97C0C(this, play); - ActorCutscene_Stop(this->unk_3D0[0]); + CutsceneManager_Stop(this->csIdList[0]); } Actor_MoveWithGravity(&this->actor); } @@ -688,7 +688,8 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case TEXT_STATE_5: case TEXT_STATE_DONE: if ((play->msgCtx.currentTextId == 0x10DD) && (this->unk_374 & 0x8000)) { - if (SubS_StartActorCutscene(&brother->actor, brother->unk_3D0[0], 0x7C, SUBS_CUTSCENE_NORMAL)) { + if (SubS_StartCutscene(&brother->actor, brother->csIdList[0], CS_ID_GLOBAL_TALK, + SUBS_CUTSCENE_NORMAL)) { brother->unk_374 |= 0x8000; play->msgCtx.msgMode = 0x44; ret = 0; @@ -1398,7 +1399,7 @@ void func_80A97A28(EnAz* this, PlayState* play) { } void func_80A97A40(EnAz* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->actor, 0, -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->actor, 0, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { play->msgCtx.msgMode = 0; play->msgCtx.msgLength = 0; func_80A97A9C(this, play); diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.h b/src/overlays/actors/ovl_En_Az/z_en_az.h index 2a219eb24..a4c1785fe 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.h +++ b/src/overlays/actors/ovl_En_Az/z_en_az.h @@ -45,7 +45,7 @@ typedef struct EnAz { /* 0x3C4 */ s16 unk_3C4; /* 0x3C6 */ UNK_TYPE1 unk3C6[6]; /* 0x3CC */ s32 getItemId; - /* 0x3D0 */ s16 unk_3D0[1]; + /* 0x3D0 */ s16 csIdList[1]; /* 0x3D2 */ u16 unk_3D2; /* 0x3D4 */ s16 unk_3D4; /* 0x3D6 */ s16 unk_3D6; 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 9e2d8abe2..963bc4104 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -165,7 +165,7 @@ void EnBat_Init(Actor* thisx, PlayState* play) { &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + randPlusMinusPoint5Scaled(200.0f), thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f), thisx->world.pos.z + randPlusMinusPoint5Scaled(200.0f), randPlusMinusPoint5Scaled(0x2000), - 0xFFFF * Rand_ZeroOne(), 0, BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), -1, + 0xFFFF * Rand_ZeroOne(), 0, BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE, thisx->halfDaysBits, NULL); BAD_BAT_GET_NUMBER_TO_SPAWN(thisx)--; } 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 80ad3e7a2..f93d18bf5 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -104,7 +104,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) { sNumLoadedBees++; this->actor.shape.shadowScale = 12.0f; - if (ActorCutscene_GetCurrentIndex() != -1) { + if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) { func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ITEMACTION); } @@ -149,7 +149,7 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) { Vec3f nextPos; s32 pad[2]; - if ((this->actor.category != ACTORCAT_ENEMY) && (ActorCutscene_GetCurrentIndex() == -1)) { + if ((this->actor.category != ACTORCAT_ENEMY) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) { func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); } 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 2ffe6c8ef..f331666d3 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -102,9 +102,9 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->shellCollider, &this->picto.actor, &sShellCylinderInit); Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->picto.actor, &sBodyCylinderInit); CollisionCheck_SetInfo(&this->picto.actor.colChkInfo, NULL, &sColChkInfoInit); - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->picto.actor.cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02) || + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) || ((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) { Actor_Kill(&this->picto.actor); } else { @@ -129,8 +129,8 @@ void EnBigokuta_Destroy(Actor* thisx, PlayState* play) { void EnBigokuta_SetupCutsceneCamera(EnBigokuta* this, PlayState* play, Vec3f* subCamAt, Vec3f* subCamEye) { s16 angle; - ActorCutscene_Start(this->picto.actor.cutscene, &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_Start(this->picto.actor.csId, &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); Play_SetCameraAtEye(play, this->subCamId, subCamAt, subCamEye); angle = BINANG_SUB(Actor_WorldYawTowardPoint(&this->picto.actor, subCamEye), this->picto.actor.home.rot.y); @@ -160,7 +160,7 @@ void EnBigokuta_ResetCamera(EnBigokuta* this, PlayState* play) { subCam = Play_GetCamera(play, this->subCamId); Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye); this->subCamId = SUB_CAM_ID_DONE; - ActorCutscene_Stop(this->picto.actor.cutscene); + CutsceneManager_Stop(this->picto.actor.csId); } } @@ -267,15 +267,15 @@ void EnBigokuta_IdleAboveWater(EnBigokuta* this, PlayState* play) { } void EnBigokuta_UpdateOrSetupCam(EnBigokuta* this, PlayState* play) { - if (this->picto.actor.cutscene != -1) { + if (this->picto.actor.csId != CS_ID_NONE) { if (this->subCamId != SUB_CAM_ID_DONE) { EnBigokuta_MoveCamera(this, play); - } else if (ActorCutscene_GetCanPlayNext(this->picto.actor.cutscene)) { + } else if (CutsceneManager_IsNext(this->picto.actor.csId)) { Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN); EnBigokuta_SetupCutsceneCamera(this, play, &mainCam->at, &mainCam->eye); } else { - ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene); + CutsceneManager_Queue(this->picto.actor.csId); } } } @@ -289,7 +289,7 @@ void EnBigokuta_SetupSuckInPlayer(EnBigokuta* this, PlayState* play) { this->timer = 0; Animation_Change(&this->skelAnime, &gBigOctoIdleAnim, 1.0f, 12.0f, 12.0f, ANIMMODE_ONCE, -3.0f); - ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene); + CutsceneManager_Queue(this->picto.actor.csId); this->playerHoldPos.x = (Math_SinS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.x; this->playerHoldPos.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f; @@ -355,7 +355,7 @@ void EnBigokuta_HoldPlayer(EnBigokuta* this, PlayState* play) { } void EnBigokuta_SetupDeathCutscene(EnBigokuta* this) { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->timer = 0; this->bodyCollider.base.acFlags &= ~AC_ON; this->actionFunc = EnBigokuta_PlayDeathCutscene; @@ -374,11 +374,11 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) { Actor_SpawnIceEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f); EnBigokuta_SetupDeathEffects(this); } - } else if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->picto.actor); + } else if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->picto.actor); if (!CHECK_EVENTINF(EVENTINF_41) && !CHECK_EVENTINF(EVENTINF_35)) { - func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_7); + func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_WAIT); } else { player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; @@ -390,7 +390,7 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) { EnBigokuta_SetupDeathEffects(this); } } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } @@ -450,11 +450,11 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) { Flags_SetSwitch(play, this->picto.actor.params); } - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); Actor_Kill(&this->picto.actor); if (!CHECK_EVENTINF(EVENTINF_41) && !CHECK_EVENTINF(EVENTINF_35)) { - func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_6); + func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_END); } else { Player* player = GET_PLAYER(play); 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 6bcfa79fb..41ae325e0 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h @@ -16,7 +16,7 @@ typedef struct EnBigokuta { /* 0x190 */ u8 drawDmgEffType; /* 0x192 */ s16 timer; /* 0x194 */ s16 subCamId; - /* 0x196 */ s16 cutscene; + /* 0x196 */ s16 csId; /* 0x198 */ Vec3s jointTable[BIGOKUTA_LIMB_MAX]; /* 0x210 */ Vec3s morphTable[BIGOKUTA_LIMB_MAX]; /* 0x288 */ f32 drawDmgEffAlpha; 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 30f857a89..c360681e8 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -293,22 +293,22 @@ void EnBigpo_WellWaitForProximity(EnBigpo* this, PlayState* play) { } void EnBigpo_SetupSpawnCutscene(EnBigpo* this) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = EnBigpo_WaitCutsceneQueue; } void EnBigpo_WaitCutsceneQueue(EnBigpo* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); - func_800B724C(play, &this->actor, PLAYER_CSMODE_7); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); + func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); if (this->actor.params == ENBIGPO_REGULAR) { // and SUMMONED, got switched earlier EnBigpo_SpawnCutsceneStage1(this, play); } else { // ENBIGPO_REVEALEDFIRE EnBigpo_SetupFlameCirclePositions(this, play); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -464,14 +464,14 @@ void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, PlayState* play) { dampe = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_TK); if (dampe != NULL) { // if dampe exists, switch to viewing his running away cutscene - dampe->params = this->actor.cutscene; + dampe->params = this->actor.csId; } else { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } } else { // ENBIGPO_REGULAR - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } - func_800B724C(play, &this->actor, PLAYER_CSMODE_6); + func_800B724C(play, &this->actor, PLAYER_CSMODE_END); EnBigpo_SetupIdleFlying(this); // setup idle flying } } 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 47df4b75b..c9b31571f 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -347,7 +347,7 @@ void EnBigslime_Init(Actor* thisx, PlayState* play2) { return; } - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; this->actor.scale.x = this->actor.scale.z = 0.15f; this->actor.scale.y = 0.075f; this->vtxScaleX = this->vtxScaleZ = 0.015000001f; @@ -847,9 +847,9 @@ void EnBigslime_EndCutscene(EnBigslime* this, PlayState* play) { subCam = Play_GetCamera(play, this->subCamId); Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye); this->subCamId = SUB_CAM_ID_DONE; - ActorCutscene_Stop(this->cutscene); - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - func_800B724C(play, &this->actor, PLAYER_CSMODE_6); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); + func_800B724C(play, &this->actor, PLAYER_CSMODE_END); } } @@ -986,7 +986,7 @@ void EnBigslime_SetupCallMinislime(EnBigslime* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 5.0f); EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_GREET); this->callTimer = 0; - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = EnBigslime_CallMinislime; } @@ -2523,31 +2523,31 @@ void EnBigslime_InitEntrance(EnBigslime* this, PlayState* play) { } void EnBigslime_SetupCutscene(EnBigslime* this) { - if (ActorCutscene_GetCurrentIndex() == 0x7D) { - ActorCutscene_Stop(0x7D); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); } if (this->actor.colChkInfo.health == 0) { - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->actionFuncStored = this->actionFunc; this->actionFunc = EnBigslime_PlayCutscene; this->actor.speed = 0.0f; } void EnBigslime_PlayCutscene(EnBigslime* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() == 0x7D) { - ActorCutscene_Stop(0x7D); - ActorCutscene_SetIntentToPlay(this->cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + CutsceneManager_Queue(this->csId); + } else if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->actor); if (this->actionFuncStored != EnBigslime_SquishFlat) { - func_800B724C(play, &this->actor, PLAYER_CSMODE_7); + func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT); } - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->csId); if (this->actor.colChkInfo.health == 0) { EnBigslime_SetupCutsceneDefeat(this, play); } else if ((this->actionFuncStored == EnBigslime_DamageGekko) || @@ -2560,7 +2560,7 @@ void EnBigslime_PlayCutscene(EnBigslime* this, PlayState* play) { EnBigslime_SetupCutsceneStartBattle(this, play); } } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h index 52a29013c..f10938b37 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h @@ -66,7 +66,7 @@ typedef struct EnBigslime { /* 0x02B4 */ u8 shockwaveAlpha; /* 0x02B5 */ u8 gekkoDrawDmgEffType; /* 0x02B6 */ s16 gekkoYaw; - /* 0x02B8 */ s16 cutscene; + /* 0x02B8 */ s16 csId; /* 0x02BA */ union { // multi-use timer s16 idleTimer; s16 noticeTimer; 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 6cdca73a7..43e87a90a 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 @@ -337,7 +337,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) { this->animIndex = -1; Actor_SetScale(&this->actor, 0.01f); - SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); this->moonsTear = (ObjMoonStone*)SubS_FindActor(play, NULL, ACTORCAT_PROP, ACTOR_OBJ_MOON_STONE); switch (gSaveContext.save.entrance) { diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h index 29afaf533..84c346a1c 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h @@ -31,7 +31,7 @@ typedef struct EnBji01 { /* 0x2A6 */ s16 headZRotStep; /* 0x2A8 */ s16 headXRotStep; /* 0x2AA */ u16 textId; - /* 0x2AC */ s16 cutscenes[1]; + /* 0x2AC */ s16 csIdList[1]; /* 0x2B0 */ ObjMoonStone* moonsTear; } EnBji01; // size = 0x2B4 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 6b54c387c..ae45b0cc5 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 @@ -99,8 +99,8 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) && !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - this->unk_2D6 = this->actor.cutscene; - if (this->unk_2D6 == 0) { + this->csId3 = this->actor.csId; + if (this->csId3 == 0) { Actor_Kill(&this->actor); } func_809C52B4(this); @@ -192,11 +192,11 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) { } } - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D0); - } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D0)) { - ActorCutscene_SetIntentToPlay(this->unk_2D0); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId1); + } else if (!CutsceneManager_IsNext(this->csId1)) { + CutsceneManager_Queue(this->csId1); } func_809C493C(this, 3, 1.0f); @@ -214,18 +214,18 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { if (this->unk_2B8 == 0) { Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D0); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId1); return; } - if (!ActorCutscene_GetCanPlayNext(this->unk_2D0)) { - ActorCutscene_SetIntentToPlay(this->unk_2D0); + if (!CutsceneManager_IsNext(this->csId1)) { + CutsceneManager_Queue(this->csId1); return; } - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D0, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId1, &this->actor); this->unk_2B8 = 1; this->unk_2C0 = 0; this->unk_2D4 = this->actor.yawTowardsPlayer; @@ -248,7 +248,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { case 0: this->unk_2C0 = 1; D_809C6104 = 1; - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->unk_2D0)), + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId1)), &this->unk_2D8[0]->actor); this->unk_2D4 = 0; this->unk_2BC = 10; @@ -268,7 +268,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { case 2: if (player->transformation == PLAYER_FORM_HUMAN) { this->unk_2B8 = 2; - ActorCutscene_Stop(this->unk_2D0); + CutsceneManager_Stop(this->csId1); func_809C59A4(this, play); sp28 = true; } else { @@ -276,13 +276,13 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { play->msgCtx.msgLength = 0; func_809C493C(this, 1, 1.0f); D_809C6100 = 1; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D2); - } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D2)) { - ActorCutscene_SetIntentToPlay(this->unk_2D2); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId2); + } else if (!CutsceneManager_IsNext(this->csId2)) { + CutsceneManager_Queue(this->csId2); } - ActorCutscene_Stop(this->unk_2D0); + CutsceneManager_Stop(this->csId1); this->actionFunc = func_809C5B1C; sp28 = true; } @@ -299,7 +299,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { case 4: if (this->unk_2B8 != 2) { - ActorCutscene_Stop(this->unk_2D0); + CutsceneManager_Stop(this->csId1); } play->msgCtx.msgLength = 0; func_809C493C(this, 1, 1.0f); @@ -365,7 +365,7 @@ void func_809C5310(EnBomBowlMan* this, PlayState* play) { if (player->actor.world.pos.x < 1510.0f) { if (player->transformation != PLAYER_FORM_DEKU) { if (this->actor.xzDistToPlayer < this->unk_2C8) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); func_809C53A4(this); } } else { @@ -423,7 +423,7 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { } else if (this->actor.textId == 0x734) { this->actor.textId = 0x715; } else if (this->actor.textId == 0x715) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); func_809C493C(this, 17, 1.0f); func_809C59A4(this, play); return; @@ -435,7 +435,7 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { func_80151BB4(play, 0x24); func_80151BB4(play, 0x25); func_80151BB4(play, 0); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = func_809C5738; return; } @@ -452,25 +452,25 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { this->unk_2C2 = 1; func_809C4B6C(this); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D6); - } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId3); + } else if (!CutsceneManager_IsNext(this->csId3)) { + CutsceneManager_Queue(this->csId3); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId3, &this->actor); this->unk_2C2 = 2; func_809C493C(this, 18, 1.0f); } } } else if (this->unk_2C2 == 1) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D6); - } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId3); + } else if (!CutsceneManager_IsNext(this->csId3)) { + CutsceneManager_Queue(this->csId3); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId3, &this->actor); this->unk_2C2 = 2; func_809C493C(this, 18, 1.0f); } @@ -485,7 +485,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { if (this->unk_298 >= this->path->count) { SET_WEEKEVENTREG(WEEKEVENTREG_84_80); CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); - ActorCutscene_Stop(this->unk_2D6); + CutsceneManager_Stop(this->csId3); Actor_Kill(&this->actor); return; } @@ -530,13 +530,13 @@ void func_809C5AA4(EnBomBowlMan* this, PlayState* play) { } void func_809C5B1C(EnBomBowlMan* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D2); - } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D2)) { - ActorCutscene_SetIntentToPlay(this->unk_2D2); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId2); + } else if (!CutsceneManager_IsNext(this->csId2)) { + CutsceneManager_Queue(this->csId2); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D2, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId2, &this->actor); func_809C5BA0(this); } } @@ -574,7 +574,7 @@ void func_809C5BF4(EnBomBowlMan* this, PlayState* play) { } if (this->unk_2F4 == 0) { - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->unk_2D2)); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId2)); if (D_809C6100 > 5) { Player* player = GET_PLAYER(play); diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h index fc911dd04..e958b84a1 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h @@ -17,44 +17,44 @@ typedef void (*EnBomBowlManActionFunc)(struct EnBomBowlMan*, PlayState*); #define ENBOMBOWLMAN_FF00_MINUS1 -1 typedef struct EnBomBowlMan { - /* 0x0000 */ Actor actor; - /* 0x0144 */ SkelAnime skelAnime; - /* 0x0188 */ Vec3s jointTable[21]; - /* 0x0206 */ Vec3s morphTable[21]; - /* 0x0284 */ EnBomBowlManActionFunc actionFunc; - /* 0x0288 */ s16 unk_288; - /* 0x028A */ s16 unk_28A; - /* 0x028C */ UNK_TYPE1 unk28C[2]; - /* 0x028E */ s16 unk_28E; - /* 0x0290 */ s16 unk_290; - /* 0x0292 */ UNK_TYPE1 unk292[2]; - /* 0x0294 */ Path* path; - /* 0x0298 */ s16 unk_298; - /* 0x029A */ s16 unk_29A; - /* 0x029C */ s16 unk_29C; - /* 0x029E */ s16 unk_29E; - /* 0x02A0 */ Vec3f unk_2A0; - /* 0x02AC */ UNK_TYPE1 unk2AC[0xC]; - /* 0x02B8 */ s16 unk_2B8; - /* 0x02BA */ s16 unk_2BA; - /* 0x02BC */ s16 unk_2BC; - /* 0x02BE */ UNK_TYPE1 unk2BE[2]; - /* 0x02C0 */ s16 unk_2C0; - /* 0x02C2 */ s16 unk_2C2; - /* 0x02C4 */ f32 unk_2C4; - /* 0x02C8 */ f32 unk_2C8; - /* 0x02CC */ s16 unk_2CC[2]; - /* 0x02D0 */ s16 unk_2D0; - /* 0x02D2 */ s16 unk_2D2; - /* 0x02D4 */ s16 unk_2D4; - /* 0x02D6 */ s16 unk_2D6; - /* 0x02D8 */ struct EnBomBowlMan* unk_2D8[5]; - /* 0x02EC */ UNK_TYPE1 unk2EC[0x4]; - /* 0x02F0 */ s16 unk_2F0; - /* 0x02F2 */ s16 unk_2F2; - /* 0x02F4 */ s16 unk_2F4; - /* 0x02F6 */ s16 unk_2F6; - /* 0x02F8 */ s32 unk_2F8; + /* 0x000 */ Actor actor; + /* 0x144 */ SkelAnime skelAnime; + /* 0x188 */ Vec3s jointTable[21]; + /* 0x206 */ Vec3s morphTable[21]; + /* 0x284 */ EnBomBowlManActionFunc actionFunc; + /* 0x288 */ s16 unk_288; + /* 0x28A */ s16 unk_28A; + /* 0x28C */ UNK_TYPE1 unk28C[2]; + /* 0x28E */ s16 unk_28E; + /* 0x290 */ s16 unk_290; + /* 0x292 */ UNK_TYPE1 unk292[2]; + /* 0x294 */ Path* path; + /* 0x298 */ s16 unk_298; + /* 0x29A */ s16 unk_29A; + /* 0x29C */ s16 unk_29C; + /* 0x29E */ s16 unk_29E; + /* 0x2A0 */ Vec3f unk_2A0; + /* 0x2AC */ UNK_TYPE1 unk2AC[0xC]; + /* 0x2B8 */ s16 unk_2B8; + /* 0x2BA */ s16 unk_2BA; + /* 0x2BC */ s16 unk_2BC; + /* 0x2BE */ UNK_TYPE1 unk2BE[2]; + /* 0x2C0 */ s16 unk_2C0; + /* 0x2C2 */ s16 unk_2C2; + /* 0x2C4 */ f32 unk_2C4; + /* 0x2C8 */ f32 unk_2C8; + /* 0x2CC */ s16 csIdList[2]; + /* 0x2D0 */ s16 csId1; + /* 0x2D2 */ s16 csId2; + /* 0x2D4 */ s16 unk_2D4; + /* 0x2D6 */ s16 csId3; + /* 0x2D8 */ struct EnBomBowlMan* unk_2D8[5]; + /* 0x2EC */ UNK_TYPE1 unk2EC[0x4]; + /* 0x2F0 */ s16 unk_2F0; + /* 0x2F2 */ s16 unk_2F2; + /* 0x2F4 */ s16 unk_2F4; + /* 0x2F6 */ s16 unk_2F6; + /* 0x2F8 */ s32 unk_2F8; } EnBomBowlMan; // size = 0x2FC #endif // Z_EN_BOM_BOWL_MAN_H 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 c8c8b8ed3..b67ca6820 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -66,7 +66,7 @@ void EnBombal_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 6; this->actor.colChkInfo.health = 1; this->scale = 0.1f; - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; func_80C05B24(this); } @@ -109,16 +109,16 @@ void func_80C05C44(EnBombal* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->cutscene); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); return; } - if (!ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_SetIntentToPlay(this->cutscene); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); phi_s0 = true; } } else { @@ -147,7 +147,7 @@ void func_80C05DE8(EnBombal* this, PlayState* play) { if (this->timer == 0) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h index 7c72f3eea..67550c59b 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h @@ -23,7 +23,7 @@ typedef struct EnBombal { /* 0x144 */ EnBombalActionFunc actionFunc; /* 0x148 */ s16 timer; /* 0x14A */ s16 isPopped; - /* 0x14C */ s16 cutscene; + /* 0x14C */ s16 csId; /* 0x150 */ f32 scale; /* 0x154 */ f32 oscillationAngle; /* 0x158 */ ColliderCylinder collider; 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 5086513db..64f900f32 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -124,11 +124,11 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 0); if (bomBowlMan != NULL) { - s32 cs = this->actor.cutscene; + s32 csId = this->actor.csId; s32 i = 0; // clang-format off - while (cs != -1) { bomBowlMan->unk_2CC[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; } + while (csId != CS_ID_NONE) { bomBowlMan->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); i++; } // clang-format on CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_01); 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 9591fbbb9..b47a9630f 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -101,8 +101,8 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) { this->unk_2AC = 1; this->actor.world.pos.z += cos; } - this->cutscene = this->actor.cutscene; - if (this->cutscene == 0) { + this->csId = this->actor.csId; + if (this->csId == 0) { Actor_Kill(&this->actor); } func_80C04B40(this); @@ -309,13 +309,13 @@ void func_80C050B8(EnBombers2* this, PlayState* play) { void func_80C0520C(EnBombers2* this, PlayState* play) { if (this->unk_2A8 == 0) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->cutscene) == 0) { - ActorCutscene_SetIntentToPlay(this->cutscene); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); + } else if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_2A8 = 1; } } else { @@ -332,7 +332,7 @@ void func_80C0520C(EnBombers2* this, PlayState* play) { this->unk_2A8 = 0; this->unk_2C0 = 1; SET_WEEKEVENTREG(WEEKEVENTREG_73_80); - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->unk_2AC = 1; this->actor.textId = sTextIds[this->textIdIndex]; Message_StartTextbox(play, this->actor.textId, &this->actor); diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h index 4a79e6615..9e6f6b577 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h @@ -27,7 +27,7 @@ typedef struct EnBombers2 { /* 0x2A8 */ s32 unk_2A8; /* 0x2AC */ u8 unk_2AC; /* 0x2AE */ s16 animIndex; - /* 0x2B0 */ s16 cutscene; + /* 0x2B0 */ s16 csId; /* 0x2B2 */ s16 unk_2B2; /* 0x2B4 */ s16 unk_2B4; /* 0x2B6 */ s16 unk_2B6; 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 a1a1b0a32..aad6d9bc3 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -119,7 +119,7 @@ s16 D_80C00AF8[] = { void EnBomjima_Init(Actor* thisx, PlayState* play) { EnBomjima* this = THIS; - s32 cs; + s32 csId; s32 i; this->actor.colChkInfo.mass = MASS_IMMOVABLE; @@ -135,12 +135,12 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); if (this->unk_2E6 == 0) { - cs = this->actor.cutscene; + csId = this->actor.csId; i = 0; - while (cs != -1) { + while (csId != CS_ID_NONE) { // clang-format off - this->cutscenes[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); + this->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); // clang-format on i++; } @@ -340,8 +340,8 @@ void func_80BFEA94(EnBomjima* this, PlayState* play) { this->bombal = (EnBombal*)actor; Math_Vec3f_Copy(&this->unk_2B0, &actor->world.pos); - if (this->bombalCutscene == 0) { - this->bombalCutscene = this->bombal->actor.cutscene; + if (this->bombalCsId == 0) { + this->bombalCsId = this->bombal->actor.csId; } func_80BFEB1C(this); break; @@ -389,7 +389,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { return; } - if (ActorCutscene_GetCurrentIndex() == -1) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { func_800B8614(&this->actor, play, 70.0f); } @@ -465,17 +465,17 @@ void func_80BFEFF0(EnBomjima* this) { void func_80BFF03C(EnBomjima* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->cutscenes[0]); - } else if (!ActorCutscene_GetCanPlayNext(this->cutscenes[0])) { - ActorCutscene_SetIntentToPlay(this->cutscenes[0]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[0]); + } else if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); } else { player->stateFlags1 &= ~PLAYER_STATE1_20; CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); this->actor.world.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)); this->unk_2DC = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)); - ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[0], &this->actor); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor); func_80BFF120(this); } } @@ -494,7 +494,7 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->cutsceneTimer == 1) { - ActorCutscene_Stop(this->cutscenes[0]); + CutsceneManager_Stop(this->csIdList[0]); this->cutsceneEnded = true; } @@ -576,7 +576,7 @@ void func_80BFF430(EnBomjima* this, PlayState* play) { if (bombal != NULL) { bombal->scale = 0.0f; - bombal->cutscene = this->bombalCutscene; + bombal->csId = this->bombalCsId; Actor_ChangeFocus(&this->actor, play, &bombal->actor); CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); func_80BFE65C(this); @@ -653,14 +653,14 @@ void func_80BFF754(EnBomjima* this, PlayState* play) { f32 y; f32 z; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->cutscenes[1]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[1]); return; } - if (!ActorCutscene_GetCanPlayNext(this->cutscenes[1])) { - ActorCutscene_SetIntentToPlay(this->cutscenes[1]); + if (!CutsceneManager_IsNext(this->csIdList[1])) { + CutsceneManager_Queue(this->csIdList[1]); return; } @@ -690,7 +690,7 @@ void func_80BFF754(EnBomjima* this, PlayState* play) { } D_80C009F0 = 0; - ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[1], &this->actor); + CutsceneManager_StartWithPlayerCs(this->csIdList[1], &this->actor); this->actionFunc = func_80BFF9B0; } @@ -774,7 +774,7 @@ void func_80BFFBC4(EnBomjima* this, PlayState* play) { play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_86; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; - ActorCutscene_Stop(this->cutscenes[1]); + CutsceneManager_Stop(this->csIdList[1]); } } diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h index 6a434be42..b8196b344 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h @@ -40,7 +40,7 @@ typedef struct EnBomjima { /* 0x2CA */ s16 unk_2CA; /* 0x2CC */ f32 animLastFrame; /* 0x2D0 */ f32 unk_2D0; - /* 0x2D4 */ s16 cutscenes[2]; + /* 0x2D4 */ s16 csIdList[2]; /* 0x2D8 */ UNK_TYPE1 unk2D8[4]; // maybe a part of the above? /* 0x2DC */ s16 unk_2DC; /* 0x2DE */ s16 cutsceneEnded; @@ -52,7 +52,7 @@ typedef struct EnBomjima { /* 0x2EA */ s16 unk_2EA; /* 0x2EC */ s32 animIndex; /* 0x2F0 */ EnBombal* bombal; - /* 0x2F4 */ s16 bombalCutscene; + /* 0x2F4 */ s16 bombalCsId; /* 0x2F8 */ ColliderCylinder collider; } EnBomjima; // size = 0x344 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 dbe25cdf4..302547c26 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -187,7 +187,7 @@ void EnBox_ClipToGround(EnBox* this, PlayState* play) { void EnBox_Init(Actor* thisx, PlayState* play) { s32 pad; EnBox* this = THIS; - s16 cutsceneIdx; + s16 csId; CollisionHeader* colHeader; f32 animFrame; f32 animFrameEnd; @@ -290,17 +290,17 @@ void EnBox_Init(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->dyna.actor, 40.0f); } - this->cutsceneIdxA = -1; - this->cutsceneIdxB = -1; - cutsceneIdx = this->dyna.actor.cutscene; + this->csId1 = CS_ID_NONE; + this->csId2 = CS_ID_NONE; + csId = this->dyna.actor.csId; - while (cutsceneIdx != -1) { - if (func_800F2178(cutsceneIdx) == 1) { - this->cutsceneIdxB = cutsceneIdx; + while (csId != CS_ID_NONE) { + if (CutsceneManager_GetCutsceneCustomValue(csId) == 1) { + this->csId2 = csId; } else { - this->cutsceneIdxA = cutsceneIdx; + this->csId1 = csId; } - cutsceneIdx = ActorCutscene_GetAdditionalCutscene(cutsceneIdx); + csId = CutsceneManager_GetAdditionalCsId(csId); } func_80867BDC(&this->unk_1F4, play, &this->dyna.actor.home.pos); } @@ -388,12 +388,12 @@ void EnBox_FallOnSwitchFlag(EnBox* this, PlayState* play) { void EnBox_AppearSwitchFlag(EnBox* this, PlayState* play) { Actor_SetClosestSecretDistance(&this->dyna.actor, play); if (Flags_GetSwitch(play, this->switchFlag)) { - if (ActorCutscene_GetCanPlayNext(this->cutsceneIdxA)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutsceneIdxA, &this->dyna.actor); + if (CutsceneManager_IsNext(this->csId1)) { + CutsceneManager_StartWithPlayerCs(this->csId1, &this->dyna.actor); EnBox_SetupAction(this, func_80868AFC); this->unk_1A0 = -30; } else { - ActorCutscene_SetIntentToPlay(this->cutsceneIdxA); + CutsceneManager_Queue(this->csId1); } } } @@ -401,19 +401,19 @@ void EnBox_AppearSwitchFlag(EnBox* this, PlayState* play) { void EnBox_AppearOnRoomClear(EnBox* this, PlayState* play) { Actor_SetClosestSecretDistance(&this->dyna.actor, play); if (Flags_GetClearTemp(play, this->dyna.actor.room)) { - if (ActorCutscene_GetCanPlayNext(this->cutsceneIdxA)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutsceneIdxA, &this->dyna.actor); + if (CutsceneManager_IsNext(this->csId1)) { + CutsceneManager_StartWithPlayerCs(this->csId1, &this->dyna.actor); Flags_SetClear(play, this->dyna.actor.room); EnBox_SetupAction(this, func_80868AFC); this->unk_1A0 = -30; } else { - ActorCutscene_SetIntentToPlay(this->cutsceneIdxA); + CutsceneManager_Queue(this->csId1); } } } void func_80868AFC(EnBox* this, PlayState* play) { - if ((func_800F22C4(this->cutsceneIdxA, &this->dyna.actor) != 0) || (this->unk_1A0 != 0)) { + if ((func_800F22C4(this->csId1, &this->dyna.actor) != 0) || (this->unk_1A0 != 0)) { EnBox_SetupAction(this, func_80868B74); this->unk_1A0 = 0; func_80867FBC(&this->unk_1F4, play, (this->movementFlags & ENBOX_MOVE_0x80) != 0); @@ -432,7 +432,7 @@ void func_80868B74(EnBox* this, PlayState* play) { this->dyna.actor.world.pos.y += 1.25f; } this->unk_1A0++; - if ((this->cutsceneIdxA != -1) && ActorCutscene_GetCurrentIndex() == this->cutsceneIdxA) { + if ((this->csId1 != -1) && CutsceneManager_GetCurrentCsId() == this->csId1) { if (this->unk_1A0 == 2) { func_800B724C(play, &this->dyna.actor, PLAYER_CSMODE_4); } else if (this->unk_1A0 == 22) { @@ -445,7 +445,7 @@ void func_80868B74(EnBox* this, PlayState* play) { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y; } else { EnBox_SetupAction(this, EnBox_WaitOpen); - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } @@ -460,8 +460,8 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { this->alpha = 255; this->movementFlags |= ENBOX_MOVE_IMMOBILE; - if ((this->unk_1EC != 0) && ((this->cutsceneIdxB < 0) || (ActorCutscene_GetCurrentIndex() == this->cutsceneIdxB) || - (ActorCutscene_GetCurrentIndex() == -1))) { + if ((this->unk_1EC != 0) && ((this->csId2 < 0) || (CutsceneManager_GetCurrentCsId() == this->csId2) || + (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) { if (this->unk_1EC < 0) { animHeader = &gBoxChestOpenAnim; playbackSpeed = 1.5f; diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.h b/src/overlays/actors/ovl_En_Box/z_en_box.h index 9cb5af18d..75d9f09c9 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.h +++ b/src/overlays/actors/ovl_En_Box/z_en_box.h @@ -60,8 +60,8 @@ typedef struct EnBox { /* 0x1F2 */ u8 iceSmokeTimer; /* 0x1F3 */ s8 unk_1F3; /* 0x1F4 */ struct_80867BDC_a0 unk_1F4; - /* 0x218 */ s16 cutsceneIdxA; - /* 0x21A */ s16 cutsceneIdxB; + /* 0x218 */ s16 csId1; + /* 0x21A */ s16 csId2; /* 0x21C */ s32 getItemId; /* 0x220 */ s32 collectableFlag; } EnBox; // size = 0x224 diff --git a/src/overlays/actors/ovl_En_Cha/z_en_cha.c b/src/overlays/actors/ovl_En_Cha/z_en_cha.c index 92030934f..cbe96e0f0 100644 --- a/src/overlays/actors/ovl_En_Cha/z_en_cha.c +++ b/src/overlays/actors/ovl_En_Cha/z_en_cha.c @@ -72,13 +72,13 @@ void EnCha_Destroy(Actor* thisx, PlayState* play) { void EnCha_Ring(EnCha* this, PlayState* play) { EnCha_Idle(this, play); - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { this->actionFunc = EnCha_Idle; - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = EnCha_Idle; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 15d087ea7..21278af9f 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 @@ -556,7 +556,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) { } break; case 1: - Cutscene_Start(play, &play->csCtx); + 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); @@ -585,8 +585,8 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) { mainCam->eyeNext = this->subCamEye; mainCam->at = this->subCamAt; func_80169AFC(play, this->subCamId, 0); - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->cameraState = 0; this->subCamId = SUB_CAM_ID_DONE; this->activeTimer = 20; 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 fbd829212..7b3f97ded 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -176,13 +176,13 @@ s32 func_80B3E5DC(EnDai* this, s32 arg1) { s32 func_80B3E69C(EnDai* this, PlayState* play) { s32 ret = false; - if ((play->csCtx.state != CS_STATE_0) && (play->sceneId == SCENE_12HAKUGINMAE) && - (play->csCtx.currentCsIndex == 0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) { + if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_12HAKUGINMAE) && + (play->csCtx.scriptIndex == 0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) { if (!(this->unk_1CE & 0x10)) { Flags_SetSwitch(play, 20); this->unk_1CE |= (0x80 | 0x10); this->unk_1CE &= ~(0x100 | 0x20); - this->unk_1CC = 0xFF; + this->cueId = 255; this->unk_1DC = 0; this->unk_1CD = 0; this->unk_1F0 = D_80B3FBF0; @@ -240,7 +240,7 @@ static s32 D_80B3FC8C[] = { 0x920C0F0C, 0x930C1211, 0x5520100E, 0x0C940C12, 0x10000000, }; -s16 func_80B3E8BC(EnDai* this, s32 arg1) { +s16 func_80B3E8BC(EnDai* this, s32 cueId) { static f32 D_80B3FCB4[] = { 1.0f, 6.0f, 16.0f, 19.0f, 46.0f, 48.0f, 50.0f, 52.0f, 54.0f, 1.0f, 6.0f, 36.0f, }; @@ -256,10 +256,10 @@ s16 func_80B3E8BC(EnDai* this, s32 arg1) { s32 i; s32 end; - if (arg1 == 3) { + if (cueId == 3) { end = 9; i = 0; - } else if (arg1 == 4) { + } else if (cueId == 4) { end = 12; i = 9; } else { @@ -402,12 +402,12 @@ s32 func_80B3ED88(EnDai* this) { } void func_80B3EE8C(EnDai* this, PlayState* play) { - s16 cutscene = this->actor.cutscene; + s16 csId = this->actor.csId; - if (ActorCutscene_GetCanPlayNext(cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); } else { - ActorCutscene_SetIntentToPlay(cutscene); + CutsceneManager_Queue(csId); } } @@ -445,15 +445,15 @@ void func_80B3F044(EnDai* this, PlayState* play) { static s32 D_80B3FE38[] = { 0, 0, 6, 7, 8, }; - s32 sp2C = 0; - s32 sp28; + s32 cueChannel = 0; + s32 cueId; - if (Cutscene_CheckActorAction(play, 472)) { - sp2C = Cutscene_GetActorActionIndex(play, 472); - sp28 = play->csCtx.actorActions[sp2C]->action; - if (this->unk_1CC != (u8)sp28) { - func_80B3E5DC(this, D_80B3FE38[sp28]); - switch (sp28) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_472)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_472); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + func_80B3E5DC(this, D_80B3FE38[cueId]); + switch (cueId) { case 1: this->unk_1E0 = 0.0f; break; @@ -467,10 +467,10 @@ void func_80B3F044(EnDai* this, PlayState* play) { break; } } - this->unk_1CC = sp28; + this->cueId = cueId; } - switch (this->unk_1CC) { + switch (this->cueId) { case 1: this->unk_1E0 += 1.0f; if (this->unk_1E0 < 30.0f) { @@ -481,20 +481,20 @@ void func_80B3F044(EnDai* this, PlayState* play) { break; case 2: - if (play->csCtx.frames == 360) { + if (play->csCtx.curFrame == 360) { Actor_PlaySfx(&this->actor, NA_SE_EN_DAIGOLON_SLEEP3 - SFX_FLAG); } if (Animation_OnFrame(&this->skelAnime, 43.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_BOUND_1); } - this->unk_1D6 = func_80B3E8BC(this, this->unk_1CC); + this->unk_1D6 = func_80B3E8BC(this, this->cueId); break; case 3: if (Animation_OnFrame(&this->skelAnime, 6.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DAIGOLON_SLEEP1); } - this->unk_1D6 = func_80B3E8BC(this, this->unk_1CC); + this->unk_1D6 = func_80B3E8BC(this, this->cueId); break; case 4: @@ -504,11 +504,11 @@ void func_80B3F044(EnDai* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 35.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_BOUND_0); } - this->unk_1D6 = func_80B3E8BC(this, this->unk_1CC); + this->unk_1D6 = func_80B3E8BC(this, this->cueId); break; } - Cutscene_ActorTranslateAndYaw(&this->actor, play, sp2C); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } void EnDai_Init(Actor* thisx, PlayState* play) { @@ -525,7 +525,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { this->unk_1CE = 0; this->unk_1D6 = 0; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { SubS_UpdateFlags(&this->unk_1CE, 3, 7); this->unk_1CE |= 0x80; this->unk_1CD = 0xFF; diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.h b/src/overlays/actors/ovl_En_Dai/z_en_dai.h index 4dc059c39..35928388f 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.h +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.h @@ -26,7 +26,7 @@ typedef struct EnDai { /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnDaiActionFunc actionFunc; /* 0x18C */ MtxF unk_18C; - /* 0x1CC */ u8 unk_1CC; + /* 0x1CC */ u8 cueId; /* 0x1CD */ u8 unk_1CD; /* 0x1CE */ u16 unk_1CE; /* 0x1D0 */ s32 unk_1D0; 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 3ccf3fb6d..535b0d65f 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -248,7 +248,7 @@ static TexturePtr D_8089E33C[] = { object_dinofos_Tex_009030, }; -static s16 D_8089E34C = -1; +static s16 sCsId = CS_ID_NONE; static s32 D_8089E350 = 0; static InitChainEntry sInitChain[] = { @@ -291,13 +291,13 @@ void EnDinofos_Init(Actor* thisx, PlayState* play) { } this->unk_28B = 0; - if (thisx->cutscene == -1) { + if (thisx->csId == CS_ID_NONE) { func_8089B7B0(this); } else { this->actor.flags |= ACTOR_FLAG_100000; this->actor.gravity = 0.0f; this->actor.velocity.y = 0.0f; - D_8089E34C = thisx->cutscene; + sCsId = thisx->csId; func_8089D2E0(this); } @@ -367,9 +367,9 @@ void func_8089ABF4(EnDinofos* this, PlayState* play) { Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye); this->subCamId = SUB_CAM_ID_DONE; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); if (this->actor.colChkInfo.health == 0) { - func_800B724C(play, &this->actor, PLAYER_CSMODE_6); + func_800B724C(play, &this->actor, PLAYER_CSMODE_END); } } } @@ -584,7 +584,7 @@ void func_8089B72C(EnDinofos* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { func_8089ABF4(this, play); this->actor.flags &= ~ACTOR_FLAG_100000; - this->actor.cutscene = -1; + this->actor.csId = CS_ID_NONE; func_8089B7B0(this); } } @@ -972,7 +972,7 @@ void func_8089C7B8(EnDinofos* this, PlayState* play) { if (this->unk_290 == 0) { func_8089ACEC(this, play); if (this->actor.colChkInfo.health == 0) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { func_8089CFAC(this); } else { func_8089D2E0(this); @@ -1004,7 +1004,7 @@ void func_8089C938(EnDinofos* this, PlayState* play) { Math_StepToF(&this->actor.speed, 0.0f, 0.5f); if (SkelAnime_Update(&this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { if (this->actor.colChkInfo.health == 0) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { func_8089CFAC(this); } else { func_8089D2E0(this); @@ -1196,21 +1196,21 @@ void func_8089D1E0(EnDinofos* this, PlayState* play) { } void func_8089D2E0(EnDinofos* this) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_8089D318; } void func_8089D318(EnDinofos* this, PlayState* play) { Vec3f subCamEye; - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { if (this->actor.colChkInfo.health == 0) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); - func_800B724C(play, &this->actor, PLAYER_CSMODE_7); + CutsceneManager_Start(this->actor.csId, &this->actor); + func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); if (this->actor.colChkInfo.health == 0) { subCamEye.x = (Math_SinS(this->actor.shape.rot.y) * 150.0f) + this->actor.focus.pos.x; subCamEye.y = this->actor.focus.pos.y; @@ -1221,7 +1221,7 @@ void func_8089D318(EnDinofos* this, PlayState* play) { func_8089B100(this, play); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -1273,12 +1273,12 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); D_8089E350--; if (D_8089E350 == 0) { - if (D_8089E34C != -1) { - this->actor.cutscene = D_8089E34C; + if (sCsId != CS_ID_NONE) { + this->actor.csId = sCsId; } } - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { Audio_RestorePrevBgm(); } } 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 fd60eca75..427e206aa 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -213,8 +213,8 @@ void func_80A51648(EnDnk* this, PlayState* play) { } void func_80A51890(EnDnk* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 126)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 126)); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_126)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_126)); } } @@ -423,7 +423,7 @@ void func_80A52018(Actor* thisx, PlayState* play) { } void func_80A52074(EnDnk* this, PlayState* play) { - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 80: func_8019F128(NA_SE_EN_DEKNUTS_DANCE1); break; @@ -441,7 +441,7 @@ void func_80A52074(EnDnk* this, PlayState* play) { break; } - if ((play->csCtx.frames >= 198) && (play->csCtx.frames < 438)) { + if ((play->csCtx.curFrame >= 198) && (play->csCtx.curFrame < 438)) { func_8019F128(NA_SE_EN_DEKNUTS_DANCE - SFX_FLAG); } } 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 d42e2e233..a9128b1bd 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -243,7 +243,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { this->unk_3BE = 0x3E93; this->unk_3C0 = 60.0f; this->unk_3B0 = 0; - this->unk_468 = 99; + this->cueId = 99; this->skelAnime.playSpeed = 0.0f; switch (EN_DNO_GET_C000(thisx)) { @@ -916,12 +916,12 @@ void func_80A732C8(EnDno* this, PlayState* play) { void func_80A73408(EnDno* this, PlayState* play) { s32 phi_a2; u8 sp33 = true; - s32 temp_v0; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 475)) { - temp_v0 = Cutscene_GetActorActionIndex(play, 475); - if (this->unk_468 != play->csCtx.actorActions[temp_v0]->action) { - switch (play->csCtx.actorActions[temp_v0]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_475)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_475); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: phi_a2 = 13; break; @@ -940,7 +940,7 @@ void func_80A73408(EnDno* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, phi_a2, &this->animIndex); } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.h b/src/overlays/actors/ovl_En_Dno/z_en_dno.h index 470c82ee8..f9a55cd4e 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.h +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.h @@ -47,7 +47,7 @@ typedef struct EnDno { /* 0x460 */ Actor* unk_460; /* 0x464 */ u16 textId; /* 0x466 */ s16 unk_466; - /* 0x468 */ u8 unk_468; + /* 0x468 */ u8 cueId; } EnDno; // size = 0x46C #endif // Z_EN_DNO_H 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 745987344..dedbe30b4 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -269,7 +269,7 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { if (!(this->unk_322 & 0x200)) { this->unk_322 |= (0x200 | 0x10); this->actor.flags &= ~ACTOR_FLAG_1; - this->unk_324 = 0xFF; + this->cueId = 255; } SubS_UpdateFlags(&this->unk_322, 0, 7); this->actionFunc = func_80B3D11C; @@ -292,20 +292,19 @@ void func_80B3D11C(EnDnp* this, PlayState* play) { EN_DNP_ANIM_ANGRY_START, EN_DNP_ANIM_JUMP, EN_DNP_ANIM_BOUNCE_START, EN_DNP_ANIM_GLARE_START, EN_DNP_ANIM_BOW, }; - s32 temp_v0; - s32 val; + s32 cueChannel; + s32 cueId; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40) && (play->sceneId == SCENE_MITURIN) && - (play->csCtx.currentCsIndex == 0)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40) && (play->sceneId == SCENE_MITURIN) && (play->csCtx.scriptIndex == 0)) { this->unk_322 |= 0x20; SET_WEEKEVENTREG(WEEKEVENTREG_29_40); } - if (Cutscene_CheckActorAction(play, 101)) { - temp_v0 = Cutscene_GetActorActionIndex(play, 101); - val = play->csCtx.actorActions[temp_v0]->action; - if (this->unk_324 != (u8)val) { - EnDnp_ChangeAnim(this, sCsAnimations[val]); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_101)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_101); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + EnDnp_ChangeAnim(this, sCsAnimations[cueId]); if (this->animIndex == EN_DNP_ANIM_CUTSCENE_IDLE) { this->unk_322 |= 8; } else { @@ -323,14 +322,14 @@ void func_80B3D11C(EnDnp* this, PlayState* play) { } } - this->unk_324 = val; + this->cueId = cueId; if (((this->animIndex == EN_DNP_ANIM_THINK_START) || (this->animIndex == EN_DNP_ANIM_ARMS_TOGETHER_START) || (this->animIndex == EN_DNP_ANIM_LAUGH_START) || (this->animIndex == EN_DNP_ANIM_ANGRY_START) || (this->animIndex == EN_DNP_ANIM_BOUNCE_START) || (this->animIndex == EN_DNP_ANIM_GLARE_START)) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnDnp_ChangeAnim(this, this->animIndex + 1); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } @@ -387,11 +386,11 @@ void func_80B3D47C(EnDnp* this, PlayState* play) { } void func_80B3D558(EnDnp* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); SET_WEEKEVENTREG(WEEKEVENTREG_23_20); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -415,7 +414,7 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { SubS_UpdateFlags(&this->unk_322, 0, 7); this->actor.shape.rot.x = 0; this->actor.world.rot.x = this->actor.shape.rot.x; - this->actor.cutscene = 0x10; + this->actor.csId = 16; this->actionFunc = func_80B3D47C; } else if (((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_WOODFALL_TEMPLE) && !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) || diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h index a41a63615..64f0baf93 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h @@ -26,7 +26,7 @@ typedef struct EnDnp { /* 0x1EA */ Vec3s jointTable[DEKU_PRINCESS_LIMB_MAX]; /* 0x286 */ Vec3s morphTable[DEKU_PRINCESS_LIMB_MAX]; /* 0x322 */ u16 unk_322; - /* 0x324 */ u8 unk_324; + /* 0x324 */ u8 cueId; /* 0x328 */ s32 unk_328; /* 0x32C */ UNK_TYPE1 unk_32C[0x2]; /* 0x32E */ s16 unk_32E; 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 0c5227bd4..ea5bd4e94 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -124,7 +124,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { if (play->csCtx.state != 0) { if (!(this->unk_37C & 0x20)) { this->picto.actor.flags &= ~ACTOR_FLAG_1; - this->unk_1DC = 0xFF; + this->cueId = 255; this->unk_37C |= 0x20; } SubS_UpdateFlags(&this->unk_37C, 0, 7); @@ -132,7 +132,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { } else { if (this->unk_37C & 0x20) { this->picto.actor.flags |= ACTOR_FLAG_1; - this->unk_1DC = 0xFF; + this->cueId = 255; this->unk_37C &= ~0x20; SubS_UpdateFlags(&this->unk_37C, 3, 7); } @@ -346,7 +346,7 @@ void func_80A52DC8(EnDnq* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { this->unk_390 = 70.0f; if (Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !Play_InCsMode(play) && - (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (ActorCutscene_GetCurrentIndex() == -1)) { + (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) { if ((DECR(this->unk_384) == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) { Message_StartTextbox(play, 0x969, NULL); this->unk_384 = 200; @@ -391,15 +391,15 @@ void func_80A53038(EnDnq* this, PlayState* play) { static s32 D_80A535FC[] = { 0, 1, 2, 3, 5, 6, }; - s32 temp_v0; - u32 temp_v1; + s32 cueChannel; + u32 cueId; - if (Cutscene_CheckActorAction(play, 105)) { - temp_v0 = Cutscene_GetActorActionIndex(play, 105); - temp_v1 = play->csCtx.actorActions[temp_v0]->action; - if (this->unk_1DC != (u8)temp_v1) { - func_80A5257C(this, D_80A535FC[temp_v1]); - this->unk_1DC = temp_v1; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_105)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_105); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + func_80A5257C(this, D_80A535FC[cueId]); + this->cueId = cueId; } if ((this->unk_398 == 4) && Animation_OnFrame(&this->skelAnime, 2.0f)) { @@ -411,7 +411,7 @@ void func_80A53038(EnDnq* this, PlayState* play) { func_80A5257C(this, this->unk_398 + 1); } - Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, temp_v0); + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, cueChannel); } } diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h index 5afb8bdf8..6ede37a55 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h @@ -14,7 +14,7 @@ typedef struct EnDnq { /* 0x148 */ SkelAnime skelAnime; /* 0x18C */ EnDnqActionFunc actionFunc; /* 0x190 */ ColliderCylinder collider; - /* 0x1DC */ u8 unk_1DC; + /* 0x1DC */ u8 cueId; /* 0x1E0 */ s32 unk_1E0; /* 0x1E4 */ Vec3s jointTable[DEKU_KING_LIMB_MAX]; /* 0x2AA */ Vec3s morphTable[DEKU_KING_LIMB_MAX]; 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 7a540ad49..6837e5367 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -205,19 +205,19 @@ s32* func_8092C9BC(EnDns* this, PlayState* play) { return 0; } -s32 func_8092CA74(EnDns* this) { +s32 EnDns_GetCueType(EnDns* this) { switch (ENDNS_GET_7(&this->actor)) { case ENDNS_GET_7_0: - return 465; + return CS_CMD_ACTOR_CUE_465; case ENDNS_GET_7_1: - return 466; + return CS_CMD_ACTOR_CUE_466; case ENDNS_GET_7_2: - return 467; + return CS_CMD_ACTOR_CUE_467; case ENDNS_GET_7_3: - return 468; + return CS_CMD_ACTOR_CUE_468; } return 0; @@ -251,11 +251,11 @@ s32 func_8092CB98(EnDns* this, PlayState* play) { if (play->csCtx.state != 0) { if (!(this->unk_2C6 & 0x80)) { - this->unk_2C8 = func_8092CA74(this); + this->cueType = EnDns_GetCueType(this); this->actor.flags &= ~ACTOR_FLAG_1; SubS_UpdateFlags(&this->unk_2C6, 0, 7); this->unk_2C6 |= 0x80; - this->unk_1D8 = 0xFF; + this->cueId = 255; } phi_v1 = 1; } else if (this->unk_2C6 & 0x80) { @@ -479,15 +479,15 @@ void func_8092D5E8(EnDns* this, PlayState* play) { EN_DNS_ANIM_SURPRISE_START, EN_DNS_ANIM_RUN_START, }; - s32 temp_v0; - u32 temp_v1; + s32 cueChannel; + u32 cueId; - if (Cutscene_CheckActorAction(play, this->unk_2C8)) { - temp_v0 = Cutscene_GetActorActionIndex(play, this->unk_2C8); - temp_v1 = play->csCtx.actorActions[temp_v0]->action; - if (this->unk_1D8 != (u8)temp_v1) { - func_8092C63C(this, D_8092DE0C[temp_v1]); - this->unk_1D8 = temp_v1; + if (Cutscene_IsCueInChannel(play, this->cueType)) { + cueChannel = Cutscene_GetCueChannel(play, this->cueType); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + func_8092C63C(this, D_8092DE0C[cueId]); + this->cueId = cueId; } if (((this->animIndex == EN_DNS_ANIM_SURPRISE_START) || (this->animIndex == EN_DNS_ANIM_RUN_START)) && @@ -495,7 +495,7 @@ void func_8092D5E8(EnDns* this, PlayState* play) { func_8092C63C(this, this->animIndex + 1); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.h b/src/overlays/actors/ovl_En_Dns/z_en_dns.h index b54e49a6a..4b730abd3 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h @@ -25,8 +25,7 @@ typedef struct EnDns { /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnDnsActionFunc actionFunc; /* 0x18C */ ColliderCylinder collider; - /* 0x1D8 */ u8 unk_1D8; - /* 0x1D9 */ UNK_TYPE1 unk_1D9[0x3]; + /* 0x1D8 */ u8 cueId; /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ s32* unk_1E0; /* 0x1E4 */ Gfx* unk_1E4[13]; @@ -35,7 +34,7 @@ typedef struct EnDns { /* 0x22A */ Vec3s jointTable[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX]; /* 0x278 */ Vec3s morphTable[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX]; /* 0x2C6 */ u16 unk_2C6; - /* 0x2C8 */ u16 unk_2C8; + /* 0x2C8 */ u16 cueType; /* 0x2CA */ UNK_TYPE1 unk_2CA[0x2]; /* 0x2CC */ s16 unk_2CC; /* 0x2CE */ s16 unk_2CE; 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 aa9d9c89a..e2b225e23 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -240,7 +240,7 @@ u8 D_80867744[] = { }; u8 D_8086775C[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_52_20, 0x1B - 0x04), + /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE, 0x1B - 0x04), /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_20, 0x1B - 0x08), /* 0x08 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_14_04, 0x0E - 0x0C), /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(29), 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 c5936c4e2..605d0d807 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -447,7 +447,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { } void EnDragon_SetSubCamEyeAt(EnDragon* this, PlayState* play, Vec3f subCamEye, Vec3f subCamAt) { - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); Math_Vec3f_Copy(&this->subCamEye, &subCamEye); Math_Vec3f_Copy(&this->subCamAt, &subCamAt); Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye); @@ -458,10 +458,10 @@ void EnDragon_SetupGrab(EnDragon* this, PlayState* play) { Vec3f extendedPos; s16 yaw; - if (!ActorCutscene_GetCanPlayNext(this->grabCutsceneIndex)) { - ActorCutscene_SetIntentToPlay(this->grabCutsceneIndex); + if (!CutsceneManager_IsNext(this->grabCsId)) { + CutsceneManager_Queue(this->grabCsId); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->grabCutsceneIndex, &this->actor); + CutsceneManager_StartWithPlayerCs(this->grabCsId, &this->actor); Math_Vec3f_Copy(&extendedPos, &this->burrowEntrancePos); extendedPos.x += Math_SinS(this->actor.world.rot.y) * -530.0f; extendedPos.z += Math_CosS(this->actor.world.rot.y) * -530.0f; @@ -496,7 +496,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) { Vec3f pos; // used as both the extended position and the camera eye Vec3f subCamAt; - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); SkelAnime_Update(&this->skelAnime); if (this->grabTimer == 0) { @@ -535,7 +535,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) { if (this->grabTimer > sMaxGrabTimerPerPython[this->pythonIndex]) { if (this->state == DEEP_PYTHON_GRAB_STATE_START) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->state = DEEP_PYTHON_GRAB_STATE_GRABBED; } @@ -617,7 +617,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { (this->collider.elements[2].info.bumperFlags & BUMP_HIT)) { player->actor.parent = NULL; this->grabWaitTimer = 30; - ActorCutscene_Stop(this->grabCutsceneIndex); + CutsceneManager_Stop(this->grabCsId); if (player->stateFlags2 & PLAYER_STATE2_80) { player->unk_AE8 = 100; } @@ -634,10 +634,10 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { } void EnDragon_SetupDead(EnDragon* this, PlayState* play) { - if (!ActorCutscene_GetCanPlayNext(this->deathCutsceneIndex)) { - ActorCutscene_SetIntentToPlay(this->deathCutsceneIndex); + if (!CutsceneManager_IsNext(this->deathCsId)) { + CutsceneManager_Queue(this->deathCsId); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->deathCutsceneIndex, &this->actor); + CutsceneManager_StartWithPlayerCs(this->deathCsId, &this->actor); this->endFrame = Animation_GetLastFrame(&gDeepPythonSmallSideSwayAnim); Animation_Change(&this->skelAnime, &gDeepPythonSmallSideSwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); this->timer = 20; @@ -682,7 +682,7 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) { seahorsePos.y += -100.0f + BREG(33); seahorsePos.z += (Math_CosS((this->actor.parent->world.rot.y + 0x8000)) * (500.0f + BREG(38))); if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, seahorsePos.x, seahorsePos.y, - seahorsePos.z, 0, this->actor.shape.rot.y, 0, 0x4000, this->actor.cutscene, + seahorsePos.z, 0, this->actor.shape.rot.y, 0, 0x4000, this->actor.csId, this->actor.halfDaysBits, NULL)) { SET_WEEKEVENTREG(WEEKEVENTREG_13_01); switch (this->pythonIndex) { diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h index cb2ab9490..2d5f31b54 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h @@ -47,8 +47,8 @@ typedef struct EnDragon { /* 0x2BA */ s16 action; /* 0x2BC */ UNK_TYPE1 unk_2BC[0x2]; /* 0x2BE */ s16 state; - /* 0x2C0 */ s16 grabCutsceneIndex; - /* 0x2C2 */ s16 deathCutsceneIndex; + /* 0x2C0 */ s16 grabCsId; + /* 0x2C2 */ s16 deathCsId; /* 0x2C4 */ UNK_TYPE1 unk_2C4[0x4]; /* 0x2C8 */ s16 subCamId; /* 0x2CA */ s16 grabTimer; // Counts up from the time a grab starts until the time the actor begins attacking 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 8172ded90..6f9c0e73a 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1043,11 +1043,11 @@ void EnEgol_Damaged(EnEgol* this, PlayState* play) { } void EnEgol_StartDeathCutscene(EnEgol* this, PlayState* play) { - if (!ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + if (!CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Queue(this->actor.csId); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); this->subCamFovTarget = 60.0f; EnEgol_ChangeAnim(this, EYEGORE_ANIM_DEATH); this->action = EYEGORE_ACTION_DYING; @@ -1075,7 +1075,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { if (this->switchFlag > -1) { Flags_SetSwitch(play, this->switchFlag); } - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); Actor_Kill(&this->actor); } else { if (Animation_OnFrame(&this->skelAnime, 46.0f)) { 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 751c24aab..f70b60b57 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -855,8 +855,8 @@ void func_8088E60C(EnElf* this, PlayState* play) { glowLightRadius = 0; } - if (Cutscene_CheckActorAction(play, 201)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action == 6) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id == 6) { glowLightRadius = 0; } } @@ -883,18 +883,18 @@ void func_8088E850(EnElf* this, PlayState* play) { Actor* arrowPointedActor; f32 xScale; f32 distFromLinksHead; - u32 sp38; + u32 cueChannel; func_8088F214(this, play); func_8088E5A8(this, play); xScale = 0.0f; - if (Cutscene_CheckActorAction(play, 201)) { - sp38 = Cutscene_GetActorActionIndex(play, 201); - func_808908D0(&nextPos, play, sp38); - this->actor.shape.rot.y = play->csCtx.actorActions[sp38]->urot.y; - this->actor.shape.rot.x = play->csCtx.actorActions[sp38]->urot.x; - if (play->csCtx.actorActions[sp38]->action == 5) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201); + func_808908D0(&nextPos, play, cueChannel); + this->actor.shape.rot.y = play->csCtx.actorCues[cueChannel]->rot.y; + this->actor.shape.rot.x = play->csCtx.actorCues[cueChannel]->rot.x; + if (play->csCtx.actorCues[cueChannel]->id == 5) { func_8088F5F4(this, play, 16); } @@ -904,14 +904,13 @@ void func_8088E850(EnElf* this, PlayState* play) { func_8088D660(this, &nextPos, 0.2f); } - if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 0) && - (play->csCtx.currentCsIndex == 0) && - ((play->csCtx.frames == 149) || (play->csCtx.frames == 381) || (play->csCtx.frames == 591))) { + if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0) && + ((play->csCtx.curFrame == 149) || (play->csCtx.curFrame == 381) || (play->csCtx.curFrame == 591))) { Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); } - if ((play->sceneId == SCENE_SECOM) && (gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 4) && - (play->csCtx.frames == 95)) { + if ((play->sceneId == SCENE_SECOM) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 4) && + (play->csCtx.curFrame == 95)) { Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); } } else { @@ -1016,7 +1015,7 @@ void func_8088E850(EnElf* this, PlayState* play) { func_8088E60C(this, play); - if (!Cutscene_CheckActorAction(play, 0xC9)) { + if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) { this->actor.shape.rot.y = this->unk_258; } } @@ -1107,8 +1106,8 @@ void func_8088F214(EnElf* this, PlayState* play) { s32 pad; if (play->csCtx.state != 0) { - if (Cutscene_CheckActorAction(play, 201)) { - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id) { case 4: sp34 = 7; break; @@ -1325,19 +1324,19 @@ void func_8088FC34(EnElf* this, PlayState* play) { } void func_8088FD04(EnElf* this) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { this->unk_264 &= ~1; this->unk_264 |= 2; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); this->unk_264 |= 1; - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); this->unk_264 &= ~1; this->unk_264 |= 2; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->unk_264 |= 1; } } @@ -1348,8 +1347,8 @@ void func_8088FDCC(EnElf* this) { this->fairyFlags &= ~0x20; this->actor.focus.pos = this->actor.world.pos; this->unk_234 = NULL; - if ((this->unk_264 & 2) && (this->actor.cutscene != 0x7C)) { - ActorCutscene_Stop(this->actor.cutscene); + if ((this->unk_264 & 2) && (this->actor.csId != CS_ID_GLOBAL_TALK)) { + CutsceneManager_Stop(this->actor.csId); } this->unk_264 &= ~0x20; } @@ -1485,8 +1484,8 @@ void func_8089010C(Actor* thisx, PlayState* play) { func_8088C51C(this, 3); if (this->elfMsg != NULL) { this->elfMsg->flags |= ACTOR_FLAG_TALK_REQUESTED; - thisx->cutscene = this->elfMsg->cutscene; - if (thisx->cutscene != -1) { + thisx->csId = this->elfMsg->csId; + if (thisx->csId != CS_ID_NONE) { func_8088FD04(this); } if (this->elfMsg->home.rot.x == -0x961) { @@ -1494,7 +1493,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { Actor_ChangeFocus(thisx, play, this->elfMsg); } } else { - thisx->cutscene = -1; + thisx->csId = CS_ID_NONE; } thisx->flags &= ~ACTOR_FLAG_10000; } else if (this->unk_264 & 4) { @@ -1580,8 +1579,8 @@ void EnElf_Draw(Actor* thisx, PlayState* play) { if (player->currentMask != PLAYER_MASK_GIANT) { if (!(this->fairyFlags & 8) && - (!Cutscene_CheckActorAction(play, 201) || - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action != 6)) && + (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201) || + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id != 6)) && (!(player->stateFlags1 & PLAYER_STATE1_100000) || (kREG(90) < this->actor.projectedPos.z))) { Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx)); f32 alphaScale; @@ -1624,17 +1623,17 @@ void EnElf_Draw(Actor* thisx, PlayState* play) { void func_808908D0(Vec3f* vec, PlayState* play, u32 action) { Vec3f startPos; Vec3f endPos; - CsCmdActorAction* npcAction = play->csCtx.actorActions[action]; + CsCmdActorCue* cue = play->csCtx.actorCues[action]; f32 lerp; - startPos.x = npcAction->startPos.x; - startPos.y = npcAction->startPos.y; - startPos.z = npcAction->startPos.z; + startPos.x = cue->startPos.x; + startPos.y = cue->startPos.y; + startPos.z = cue->startPos.z; - endPos.x = npcAction->endPos.x; - endPos.y = npcAction->endPos.y; - endPos.z = npcAction->endPos.z; + endPos.x = cue->endPos.x; + endPos.y = cue->endPos.y; + endPos.z = cue->endPos.z; - lerp = Environment_LerpWeight(npcAction->endFrame, npcAction->startFrame, play->csCtx.frames); + lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame); VEC3F_LERPIMPDST(vec, &startPos, &endPos, lerp); } 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 7f6067d9c..a3f17f605 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -47,14 +47,14 @@ ActorInit En_Elfgrp_InitVars = { (ActorFunc)NULL, }; -void func_80A396B0(EnElfgrp* this, s32 arg1) { - while (arg1 > 0) { - if (this->actor.cutscene == -1) { +void func_80A396B0(EnElfgrp* this, s32 numCutscenes) { + while (numCutscenes > 0) { + if (this->actor.csId == CS_ID_NONE) { break; } - this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); - arg1--; + numCutscenes--; } } @@ -345,9 +345,9 @@ void func_80A3A044(PlayState* play) { } void func_80A3A0AC(EnElfgrp* this, PlayState* play) { - if (!Cutscene_CheckActorAction(play, 0x64)) { + if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { this->actionFunc = func_80A3A600; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } } @@ -386,12 +386,12 @@ void func_80A3A210(EnElfgrp* this, PlayState* play) { } void func_80A3A274(EnElfgrp* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x64)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { if (this->unk_14A & 1) { func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); } - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x64)]->action) { + 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) { @@ -414,8 +414,8 @@ void func_80A3A274(EnElfgrp* this, PlayState* play) { } void func_80A3A398(EnElfgrp* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + 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) { @@ -431,7 +431,7 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) { } this->unk_14A &= ~8; } else if (this->actor.xzDistToPlayer < 350.0f) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -443,9 +443,10 @@ void func_80A3A484(EnElfgrp* this, PlayState* play) { } void func_80A3A4AC(EnElfgrp* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x64)) { - s32 temp = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x64)]->action; - if (temp == 3) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { + s32 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id; + + if (cueId == 3) { this->actionFunc = func_80A3A484; this->unk_144 = 90; } @@ -453,10 +454,10 @@ void func_80A3A4AC(EnElfgrp* this, PlayState* play) { } void func_80A3A520(EnElfgrp* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x67)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) { this->actionFunc = func_80A3A600; - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + } 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)); @@ -468,7 +469,7 @@ void func_80A3A520(EnElfgrp* this, PlayState* play) { Flags_SetSwitch(play, this->actor.home.rot.z); } } else if (this->actor.xzDistToPlayer < 350.0f) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 542d739e6..871665cc6 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -431,16 +431,16 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20000000; Actor_Kill(&this->actor); SET_WEEKEVENTREG(WEEKEVENTREG_08_80); - ActorCutscene_Stop(0x7C); + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); return; } func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); - if (ActorCutscene_GetCurrentIndex() != 0x7C) { - if (ActorCutscene_GetCanPlayNext(0x7C)) { - ActorCutscene_Start(0x7C, &this->actor); + if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_TALK) { + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + CutsceneManager_Start(CS_ID_GLOBAL_TALK, &this->actor); } else { - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } } } @@ -485,7 +485,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { // Bring me back to North Clock Town! Message_StartTextbox(play, 0x579, NULL); this->actionFunc = EnElforg_ClockTownFairyCollected; - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); return; } 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 b83799ea6..94087bfb1 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -315,7 +315,7 @@ void EnFall_Setup(EnFall* this, PlayState* play) { void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { static s32 sGiantsCutsceneState = 0; - if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) { + if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { switch (sGiantsCutsceneState) { case 0: if (play->csCtx.state != 0) { @@ -327,20 +327,20 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_04)) { - if (ActorCutscene_GetCanPlayNext(0xC)) { - ActorCutscene_Start(0xC, &this->actor); + if (CutsceneManager_IsNext(12)) { + CutsceneManager_Start(12, &this->actor); sGiantsCutsceneState++; } else { - ActorCutscene_SetIntentToPlay(0xC); + CutsceneManager_Queue(12); } - } else if (ActorCutscene_GetCanPlayNext(0xB)) { - ActorCutscene_Start(0xB, &this->actor); + } else if (CutsceneManager_IsNext(11)) { + CutsceneManager_Start(11, &this->actor); SET_WEEKEVENTREG(WEEKEVENTREG_93_04); sGiantsCutsceneState++; } else { - ActorCutscene_SetIntentToPlay(0xB); + CutsceneManager_Queue(11); } - } else if (play->csCtx.frames > 1600) { + } else if (play->csCtx.curFrame > 1600) { play->nextEntrance = ENTRANCE(CLOCK_TOWER_ROOFTOP, 0); gSaveContext.nextCutsceneIndex = 0xFFF2; play->transitionTrigger = TRANS_TRIGGER_START; @@ -351,7 +351,7 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { break; case 9: - play->csCtx.frames--; + play->csCtx.curFrame--; break; } } @@ -359,15 +359,15 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { void EnFall_CrashingMoon_PerformCutsceneActions(EnFall* this, PlayState* play) { EnFall_CrashingMoon_HandleGiantsCutscene(this, play); - if (Cutscene_CheckActorAction(play, 0x85)) { - if (Cutscene_CheckActorAction(play, 133) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 1) { this->actor.draw = NULL; } else { this->actor.draw = EnFall_Moon_Draw; - if (Cutscene_CheckActorAction(play, 133) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 2) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 133)); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 2) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)); } } } else { @@ -376,8 +376,8 @@ void EnFall_CrashingMoon_PerformCutsceneActions(EnFall* this, PlayState* play) { } void EnFall_StoppedOpenMouthMoon_PerformCutsceneActions(EnFall* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 133)) { - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id) { case 3: if (this->eyeGlowIntensity == 0.0f) { Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_EYE_FLASH); @@ -396,10 +396,10 @@ void EnFall_StoppedOpenMouthMoon_PerformCutsceneActions(EnFall* this, PlayState* } void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 133)) { - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id) { case 2: - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 133)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)); break; case 4: @@ -409,9 +409,9 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat } if ((play->sceneId == SCENE_OKUJOU) && (gSaveContext.sceneLayer == 2)) { - switch (play->csCtx.currentCsIndex) { + switch (play->csCtx.scriptIndex) { case 0: - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 1060: Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1); break; @@ -424,13 +424,13 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat Actor_PlaySfx(&this->actor, NA_SE_EV_SLIP_MOON); break; } - if (play->csCtx.frames >= 1145) { + if (play->csCtx.curFrame >= 1145) { func_800B9010(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); } break; case 1: - switch (play->csCtx.frames) { + switch (play->csCtx.curFrame) { case 561: Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1); break; @@ -443,7 +443,7 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat Actor_PlaySfx(&this->actor, NA_SE_EV_SLIP_MOON); break; } - if (play->csCtx.frames >= 650) { + if (play->csCtx.curFrame >= 650) { func_800B9010(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); } break; @@ -463,16 +463,16 @@ void EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions(EnFall* this, Pla void EnFall_Moon_PerformDefaultActions(EnFall* this, PlayState* play) { u16 currentDay; - if (Cutscene_CheckActorAction(play, 133)) { - if (Cutscene_CheckActorAction(play, 133) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 1) { this->actor.draw = NULL; } else { Actor_SetScale(&this->actor, this->scale * 3.6f); this->actor.draw = EnFall_Moon_Draw; - if (Cutscene_CheckActorAction(play, 133) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 2) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 133)); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 2) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)); } } } else { @@ -510,8 +510,9 @@ void EnFall_MoonsTear_DoNothing(EnFall* this, PlayState* play) { void EnFall_MoonsTear_Fall(EnFall* this, PlayState* play) { s32 pad; - if (Cutscene_CheckActorAction(play, 517) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 517)]->action == 2 && this->actor.draw == NULL) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_517) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_517)]->id == 2) && + (this->actor.draw == NULL)) { EnFall_MoonsTear_Initialize(this); } @@ -574,11 +575,11 @@ void EnFall_Fireball_SetPerVertexAlpha(f32 fireballAlpha) { void EnFall_Fireball_Update(Actor* thisx, PlayState* play) { EnFall* this = THIS; - if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 2)) { + if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 2)) { play->skyboxCtx.rot.y -= 0.05f; } - if (Cutscene_CheckActorAction(play, 450)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450)) { this->actor.draw = EnFall_Fireball_Draw; if (this->flags & FLAG_FIRE_BALL_INTENSIFIES) { this->fireballIntensity += 0.01f; @@ -586,9 +587,9 @@ void EnFall_Fireball_Update(Actor* thisx, PlayState* play) { this->fireballIntensity = 1.0f; } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 450)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, 450)); - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 450)]->action) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, 450)]->id) { default: this->actor.draw = NULL; this->fireballAlpha = 0; @@ -625,7 +626,7 @@ void EnFall_Fireball_Update(Actor* thisx, PlayState* play) { this->actor.draw = NULL; } - if (Cutscene_CheckActorAction(play, 0x1C2) && this->fireballAlpha > 0) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450) && (this->fireballAlpha > 0)) { func_8019F128(NA_SE_EV_MOON_FALL_LAST - SFX_FLAG); } Actor_SetScale(&this->actor, this->scale * 1.74f); @@ -682,9 +683,9 @@ s32 EnFall_RisingDebris_InitializeEffect(EnFall* this) { void EnFall_RisingDebris_Update(Actor* thisx, PlayState* play) { EnFall* this = THIS; - if (Cutscene_CheckActorAction(play, 451)) { - if (Cutscene_CheckActorAction(play, 451) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 451)]->action == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_451)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_451) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_451)]->id == 2) { EnFall_RisingDebris_UpdateEffects(this); EnFall_RisingDebris_InitializeEffect(this); } else if (this->activeDebrisEffectCount != 0) { @@ -699,8 +700,8 @@ void EnFall_RisingDebris_Update(Actor* thisx, PlayState* play) { void EnFall_FireRing_Update(Actor* thisx, PlayState* play) { EnFall* this = THIS; - if (Cutscene_CheckActorAction(play, 450) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 450)]->action == 5) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_450)]->id == 5) { if (!(this->flags & FLAG_FIRE_RING_APPEARS)) { Actor_PlaySfx(&this->actor, NA_SE_IT_DM_RING_EXPLOSION); } diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c index 33cf9a64d..28a6cc74c 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c @@ -44,7 +44,7 @@ void EnFall2_Init(Actor* thisx, PlayState* play) { this->unk2DC = Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840); Actor_SetScale(&this->actor, 0.02f); this->actionFunc = func_80C1B9D4; - this->csActionIndex = 0x231; + this->cueType = CS_CMD_ACTOR_CUE_561; this->alphaLevel = 0.0f; } @@ -92,13 +92,13 @@ void EnFall2_DoNothing(EnFall2* this, PlayState* play) { void func_80C1B8B4(EnFall2* this) { this->actor.draw = EnFall2_Draw; - if (this->csActorAction == 1) { + if (this->cueId == 1) { Actor_SetScale(&this->actor, 0.02f); } } void func_80C1B8F0(EnFall2* this) { - switch (this->csActorAction) { + switch (this->cueId) { case 1: if (this->alphaLevel < 1.0f) { this->alphaLevel += 1.0f / 30.0f; @@ -125,12 +125,10 @@ void func_80C1B8F0(EnFall2* this) { void func_80C1B9D4(EnFall2* this, PlayState* play) { func_80183DE0(&this->skeletonInfo); - if (Cutscene_CheckActorAction(play, this->csActionIndex)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionIndex)); - if (this->csActorAction != - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionIndex)]->action) { - this->csActorAction = - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionIndex)]->action; + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { + this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; func_80C1B8B4(this); } func_80C1B8F0(this); diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h index 41f064498..3555595f3 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h @@ -15,8 +15,8 @@ typedef struct EnFall2 { /* 0x228 */ Vec3s unk228[30]; /* 0x2DC */ AnimatedMaterial* unk2DC; /* 0x2E0 */ f32 alphaLevel; - /* 0x2E4 */ s16 csActorAction; - /* 0x2E6 */ u16 csActionIndex; + /* 0x2E4 */ s16 cueId; + /* 0x2E6 */ u16 cueType; /* 0x2E8 */ EnFall2ActionFunc actionFunc; } EnFall2; // size = 0x2EC 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 47244f9d3..b7952c1bc 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -151,7 +151,7 @@ s32 func_80B28478(EnFish2* this) { void EnFish2_Init(Actor* thisx, PlayState* play) { EnFish2* this = THIS; s32 i; - s32 cs; + s32 csId; Math_Vec3f_Copy(&this->unk_324, &this->actor.home.pos); this->unk_344 = D_80B2B2F0; @@ -187,12 +187,12 @@ void EnFish2_Init(Actor* thisx, PlayState* play) { this->unk_2C0 = 3; } } - cs = this->actor.cutscene; + csId = this->actor.csId; this->unk_330 = D_80B2B370[this->unk_2C0]; i = 0; // clang-format off - while (cs != -1) { this->unk_2BA[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; } + while (csId != CS_ID_NONE) { this->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); i++; } // clang-format on Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); @@ -416,7 +416,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) { if (this->unk_354 != NULL) { D_80B2B2E4 = 0; D_80B2B2E0 = 1; - fish->unk_2BA[0] = this->unk_2BA[0]; + fish->csIdList[0] = this->csIdList[0]; fish->unk_350 = this->unk_350; } } @@ -784,11 +784,11 @@ void func_80B29EE4(EnFish2* this, PlayState* play) { void func_80B2A01C(EnFish2* this, PlayState* play) { if (this->unk_2B4 == 0) { - if (!ActorCutscene_GetCanPlayNext(this->unk_2BA[0])) { - ActorCutscene_SetIntentToPlay(this->unk_2BA[0]); + if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); } else { this->unk_2B4 = 15; - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2BA[0], &this->actor); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor); this->actionFunc = func_80B2A094; } } @@ -801,13 +801,13 @@ void func_80B2A094(EnFish2* this, PlayState* play) { D_80B2B2E4 = 1; } - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->unk_2BA[0]); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->csIdList[0]); if (D_80B2B2EC != 0) { D_80B2B2EC++; if (D_80B2B2EC > 200) { Actor_Kill(&this->actor); - ActorCutscene_Stop(this->unk_2BA[0]); + CutsceneManager_Stop(this->csIdList[0]); return; } } @@ -862,7 +862,7 @@ void func_80B2A23C(EnFish2* this, PlayState* play) { if ((this->unk_2B4 == 0) && (D_80B2B2E4 == 3)) { D_80B2B2E0 = D_80B2B2EC = D_80B2B2E4 = 0; D_80B2B2F4 = NULL; - ActorCutscene_Stop(this->unk_2BA[0]); + CutsceneManager_Stop(this->csIdList[0]); Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h index 49941d67e..20b1ff21b 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h @@ -28,7 +28,7 @@ typedef struct EnFish2 { /* 0x02B4 */ s16 unk_2B4; /* 0x02B6 */ s16 unk_2B6; /* 0x02B8 */ s16 unk_2B8; - /* 0x02BA */ s16 unk_2BA[3]; + /* 0x02BA */ s16 csIdList[3]; /* 0x02C0 */ s32 unk_2C0; /* 0x02C4 */ s32 unk_2C4; /* 0x02C8 */ u8 unk_2C8; 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 4bbd4b5cc..306f1d94d 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -3,7 +3,7 @@ * Overlay: ovl_En_Fishing * 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" @@ -3776,7 +3776,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { player->unk_B28 = 3; Rumble_Override(0.0f, 1, 3, 1); D_809171D8++; - Cutscene_Start(play, &play->csCtx); + Cutscene_StartManual(play, &play->csCtx); D_8090CD4C = 100; D_80911F48 = 45.0f; D_8090CD14 = 5; @@ -5278,7 +5278,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { mainCam->at = sSubCamAt; } func_80169AFC(play, sSubCamId, 0); - Cutscene_End(play, &play->csCtx); + Cutscene_StopManual(play, &play->csCtx); D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; func_800F6834(play, 0); @@ -5288,7 +5288,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { break; case 10: - Cutscene_Start(play, &play->csCtx); + Cutscene_StartManual(play, &play->csCtx); sSubCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, sSubCamId, CAM_STATUS_ACTIVE); @@ -5318,8 +5318,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { mainCam->at = sSubCamAt; func_80169AFC(play, sSubCamId, 0); - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; D_8090CD50 = 30; @@ -5329,7 +5329,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { break; case 20: - Cutscene_Start(play, &play->csCtx); + Cutscene_StartManual(play, &play->csCtx); sSubCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, sSubCamId, CAM_STATUS_ACTIVE); @@ -5419,9 +5419,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { mainCam->eyeNext = sSubCamEye; mainCam->at = sSubCamAt; func_80169AFC(play, sSubCamId, 0); - Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, - PLAYER_CSMODE_6); // arg2 changed from PLAYER_CSMODE_7 to PLAYER_CSMODE_6 in MM + Cutscene_StopManual(play, &play->csCtx); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; player->unk_B28 = -5; 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 680f4f830..ffd456af4 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -176,7 +176,7 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) { this->actor.parent = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_EN_FLOORMAS, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, params + 0x10, -1, this->actor.halfDaysBits, NULL); + this->actor.world.pos.z, 0, 0, 0, params + 0x10, CS_ID_NONE, this->actor.halfDaysBits, NULL); if (this->actor.parent == NULL) { Actor_Kill(&this->actor); return; @@ -184,7 +184,7 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) { this->actor.child = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_FLOORMAS, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, - params + 0x10, -1, this->actor.halfDaysBits, NULL); + params + 0x10, CS_ID_NONE, this->actor.halfDaysBits, NULL); if (this->actor.child == NULL) { Actor_Kill(this->actor.parent); Actor_Kill(&this->actor); 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 81e261a00..8130f3cc9 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -228,21 +228,21 @@ void EnFsn_UpdateCollider(EnFsn* this, PlayState* play) { } void EnFsn_HandleLookToShopkeeperBuyingCutscene(EnFsn* this) { - if ((this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) && - (this->lookToShopkeeperBuyingCutscene != this->cutscene) && (this->actor.textId == 0x29CE)) { - ActorCutscene_Stop(this->cutscene); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if ((this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) && (this->lookToShopkeeperBuyingCsId != this->csId) && + (this->actor.textId == 0x29CE)) { + CutsceneManager_Stop(this->csId); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperBuyingCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperBuyingCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -387,7 +387,7 @@ void EnFsn_SpawnShopItems(EnFsn* this, PlayState* play) { void EnFsn_EndInteraction(EnFsn* this, PlayState* play) { if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); @@ -737,11 +737,11 @@ void EnFsn_Idle(EnFsn* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING; } this->actor.textId = EnFsn_GetWelcome(play); @@ -797,8 +797,8 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) { void EnFsn_BeginInteraction(EnFsn* this, PlayState* play) { if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; if (Player_GetMask(play) == PLAYER_MASK_NONE) { func_8011552C(play, DO_ACTION_NEXT); @@ -812,7 +812,7 @@ void EnFsn_BeginInteraction(EnFsn* this, PlayState* play) { this->actionFunc = EnFsn_SetupEndInteractionImmediately; } } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -958,7 +958,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED; } switch (this->price) { @@ -1021,17 +1021,17 @@ void EnFsn_ResumeInteraction(EnFsn* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (ENFSN_IS_SHOP(&this->actor)) { if (!this->isSelling) { - this->cutscene = this->lookToShopkeeperBuyingCutscene; + this->csId = this->lookToShopkeeperBuyingCsId; this->actor.textId = 0x29D0; } else { - this->cutscene = this->lookToShopkeeperCutscene; + this->csId = this->lookToShopkeeperCsId; this->actor.textId = (this->numSellingItems <= 0) ? 0x29DE : 0x29D6; } Message_StartTextbox(play, this->actor.textId, &this->actor); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->actionFunc = EnFsn_ResumeShoppingInteraction; } else { EnFsn_HandleConversationBackroom(this, play); @@ -1044,8 +1044,8 @@ void EnFsn_ResumeInteraction(EnFsn* this, PlayState* play) { void EnFsn_ResumeShoppingInteraction(EnFsn* this, PlayState* play) { if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; if (!this->isSelling) { this->actionFunc = EnFsn_AskCanBuyMore; @@ -1058,33 +1058,33 @@ void EnFsn_ResumeShoppingInteraction(EnFsn* this, PlayState* play) { this->actionFunc = EnFsn_FaceShopkeeperSelling; } } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = !this->isSelling ? this->lookToShopkeeperBuyingCutscene : this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = !this->isSelling ? this->lookToShopkeeperBuyingCsId : this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } } void EnFsn_LookToShelf(EnFsn* this, PlayState* play) { if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + CutsceneManager_Stop(this->csId); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene) != 0) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; EnFsn_UpdateCursorPos(this, play); this->actionFunc = EnFsn_BrowseShelf; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -1117,16 +1117,16 @@ void EnFsn_BrowseShelf(EnFsn* this, PlayState* play) { void EnFsn_LookToShopkeeperFromShelf(EnFsn* this, PlayState* play) { if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + CutsceneManager_Stop(this->csId); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperFromShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperFromShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; @@ -1134,7 +1134,7 @@ void EnFsn_LookToShopkeeperFromShelf(EnFsn* this, PlayState* play) { Message_ContinueTextbox(play, this->actor.textId); this->actionFunc = EnFsn_FaceShopkeeperSelling; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -1148,7 +1148,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_33_04); case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED; } func_8019F208(); @@ -1231,15 +1231,15 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } if (talkState == TEXT_STATE_CHOICE) { @@ -1277,15 +1277,15 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } if (talkState == TEXT_STATE_CHOICE) { @@ -1380,10 +1380,10 @@ void EnFsn_ConverseBackroom(EnFsn* this, PlayState* play) { } void EnFsn_GetCutscenes(EnFsn* this) { - this->lookToShopkeeperCutscene = this->actor.cutscene; - this->lookToShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperCutscene); - this->lookToShopkeeperFromShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShelfCutscene); - this->lookToShopkeeperBuyingCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperFromShelfCutscene); + this->lookToShopkeeperCsId = this->actor.csId; + this->lookToShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperCsId); + this->lookToShopkeeperFromShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToShelfCsId); + this->lookToShopkeeperBuyingCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperFromShelfCsId); } void EnFsn_Blink(EnFsn* this) { diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h index 35b654c3d..f214dcbd9 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h @@ -33,11 +33,11 @@ typedef struct EnFsn { /* 0x364 */ s16 eyeTexIndex; /* 0x366 */ s16 blinkTimer; /* 0x368 */ s16 cutsceneState; - /* 0x36A */ s16 cutscene; - /* 0x36C */ s16 lookToShopkeeperCutscene; - /* 0x36E */ s16 lookToShelfCutscene; - /* 0x370 */ s16 lookToShopkeeperFromShelfCutscene; - /* 0x372 */ s16 lookToShopkeeperBuyingCutscene; + /* 0x36A */ s16 csId; + /* 0x36C */ s16 lookToShopkeeperCsId; + /* 0x36E */ s16 lookToShelfCsId; + /* 0x370 */ s16 lookToShopkeeperFromShelfCsId; + /* 0x372 */ s16 lookToShopkeeperBuyingCsId; /* 0x374 */ s16 price; /* 0x376 */ u16 textId; /* 0x378 */ u8 isSelling; 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 2626d1cbd..7435d0ddc 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -727,9 +727,9 @@ void func_80962D60(EnFu* this, PlayState* play) { void func_80962EBC(EnFu* this, PlayState* play) { if (this->unk_542 != 0) { - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { Camera_ChangeDataIdx(play->cameraPtrs[CAM_ID_MAIN], - ActorCutscene_GetCutscene(this->actor.cutscene)->csCamSceneDataId); + CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId); } } } diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c index b4542956c..add0814bd 100644 --- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c +++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c @@ -219,13 +219,13 @@ void EnGakufu_GiveReward(EnGakufu* this, PlayState* play) { } void EnGakufu_PlayRewardCutscene(EnGakufu* this, PlayState* play) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { EnGakufu_GiveReward(this, play); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); EnGakufu_GiveReward(this, play); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 0575494c8..14afe3270 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -241,9 +241,9 @@ u16 func_80B0F97C(EnGb2* this) { } void func_80B0FA04(EnGb2* this) { - this->unk_282[0] = this->actor.cutscene; - this->unk_282[1] = ActorCutscene_GetAdditionalCutscene(this->unk_282[0]); - this->unk_282[2] = ActorCutscene_GetAdditionalCutscene(this->unk_282[1]); + this->csIdList[0] = this->actor.csId; + this->csIdList[1] = CutsceneManager_GetAdditionalCsId(this->csIdList[0]); + this->csIdList[2] = CutsceneManager_GetAdditionalCsId(this->csIdList[1]); } s32 func_80B0FA48(EnGb2* this, PlayState* play) { @@ -433,7 +433,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { Rupees_ChangeBy(-this->unk_288); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = func_80B11344; break; @@ -451,10 +451,10 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { void func_80B10240(EnGb2* this, PlayState* play) { this->unk_27C = D_80B119B0[this->unk_280].unk_00; this->unk_27E = D_80B119B0[this->unk_280].unk_10; - this->unk_282[0] = this->actor.cutscene; + this->csIdList[0] = this->actor.csId; this->unk_268 = NULL; - if (ActorCutscene_GetCanPlayNext(this->unk_282[0])) { - ActorCutscene_Start(this->unk_282[0], &this->actor); + if (CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Start(this->csIdList[0], &this->actor); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, this->unk_27C, D_80B119B0[this->unk_280].unk_04.x, D_80B119B0[this->unk_280].unk_04.y, D_80B119B0[this->unk_280].unk_04.z, 0, 0, 0, this->unk_27E); @@ -463,7 +463,7 @@ void func_80B10240(EnGb2* this, PlayState* play) { } this->actionFunc = func_80B10344; } else { - ActorCutscene_SetIntentToPlay(this->unk_282[0]); + CutsceneManager_Queue(this->csIdList[0]); } } @@ -585,7 +585,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { Rupees_ChangeBy(-this->unk_288); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = func_80B11344; } break; @@ -601,16 +601,16 @@ void func_80B10634(EnGb2* this, PlayState* play) { } void func_80B10868(EnGb2* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() != this->unk_282[2]) { - if (ActorCutscene_GetCanPlayNext(this->unk_282[this->unk_290])) { + if (CutsceneManager_GetCurrentCsId() != this->csIdList[2]) { + if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { this->actionFunc = func_80B10A48; - ActorCutscene_StartAndSetFlag(this->unk_282[this->unk_290], &this->actor); + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csIdList[this->csIdIndex], &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } else { - this->unk_290 = 1; - ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]); + this->csIdIndex = 1; + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } @@ -656,12 +656,12 @@ void func_80B10A48(EnGb2* this, PlayState* play) { break; case ENGB2_7_1: - ActorCutscene_Stop(this->unk_282[this->unk_290]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); Actor_Kill(&this->actor); break; case ENGB2_7_2: - ActorCutscene_Stop(this->unk_282[this->unk_290]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); if (this->unk_26E == 0x14FB) { Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor)); Actor_Kill(&this->actor); @@ -694,7 +694,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { this->unk_26C |= 2; } Message_StartTextbox(play, this->unk_26E, &this->actor); - this->unk_290 = 1; + this->csIdIndex = 1; this->unk_26C &= ~0x40; this->actionFunc = func_80B10DAC; } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { @@ -712,7 +712,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_80_20); } this->unk_26C &= ~0x20; - this->unk_290 = 0; + this->csIdIndex = 0; this->unk_26C |= 0x80; this->actionFunc = func_80B10DAC; } else if (this->actor.xzDistToPlayer < 300.0f) { @@ -726,9 +726,9 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { } void func_80B10DAC(EnGb2* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_282[this->unk_290])) { + if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { if (ENGB2_GET_7(&this->actor) == ENGB2_7_1) { - if (this->unk_290 != 2) { + if (this->csIdIndex != 2) { this->actionFunc = func_80B10E98; } else { Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor)); @@ -737,12 +737,12 @@ void func_80B10DAC(EnGb2* this, PlayState* play) { } else { this->actionFunc = func_80B110F8; } - ActorCutscene_StartAndSetFlag(this->unk_282[this->unk_290], &this->actor); + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csIdList[this->csIdIndex], &this->actor); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } @@ -753,14 +753,14 @@ void func_80B10E98(EnGb2* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) { - ActorCutscene_Stop(this->unk_282[this->unk_290]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->actionFunc = func_80B10B5C; } else if (Flags_GetSwitch(play, ENGB2_GET_7F8(&this->actor))) { this->actionFunc = func_80B10A48; } else { - ActorCutscene_Stop(this->unk_282[this->unk_290]); - this->unk_290 = 2; - ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 2; + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); this->actionFunc = func_80B10DAC; } } else { @@ -770,9 +770,9 @@ void func_80B10E98(EnGb2* this, PlayState* play) { Message_StartTextbox(play, this->unk_26E, &this->actor); temp = this->unk_26E; if ((temp == 0x14E7) || (temp == 0x14E9) || (temp == 0x14EC) || (temp == 0x14F0)) { - ActorCutscene_Stop(this->unk_282[this->unk_290]); - this->unk_290 = 1; - ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 1; + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); this->actionFunc = func_80B10DAC; } } @@ -839,8 +839,8 @@ void func_80B111AC(EnGb2* this, PlayState* play) { void func_80B11268(EnGb2* this, PlayState* play) { if (play->roomCtx.curRoom.num == 1) { - this->unk_290 = 0; - this->unk_282[0] = this->actor.cutscene; + this->csIdIndex = 0; + this->csIdList[0] = this->actor.csId; 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; @@ -887,7 +887,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { case ENGB2_7_0: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_80)) { Actor_Kill(&this->actor); - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } @@ -927,8 +927,8 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { break; case ENGB2_7_2: - this->unk_290 = 0; - this->unk_282[0] = this->actor.cutscene; + this->csIdIndex = 0; + this->csIdList[0] = this->actor.csId; if (Flags_GetSwitch(play, ENGB2_GET_7F8(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 ec3b379a1..87cee9e99 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -31,11 +31,11 @@ typedef struct EnGb2 { /* 0x27C */ s16 unk_27C; /* 0x27E */ s16 unk_27E; /* 0x280 */ s16 unk_280; - /* 0x282 */ s16 unk_282[3]; + /* 0x282 */ s16 csIdList[3]; /* 0x288 */ s16 unk_288; /* 0x28A */ u8 unk_28A; /* 0x28C */ s32 unk_28C; - /* 0x290 */ s16 unk_290; + /* 0x290 */ s16 csIdIndex; } EnGb2; // size = 0x294 #endif // Z_EN_GB2_H 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 dd53d9ea8..6cfbb4718 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -88,7 +88,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) { this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; this->picto.actor.targetMode = 6; Actor_SetScale(&this->picto.actor, 0.01f); - this->animIndex = this->csAction = -1; // GERUDO_WHITE_ANIM_NONE + this->animIndex = this->cueId = -1; // GERUDO_WHITE_ANIM_NONE this->stateFlags = 0; EnGe1_ChangeAnim(this, GERUDO_WHITE_ANIM_ARMS_FOLDED, ANIMMODE_LOOP, 0.0f); this->actionFunc = EnGe1_Wait; @@ -255,16 +255,16 @@ void EnGe1_Wait(EnGe1* this, PlayState* play) { } void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) { - s16 csAction; + s16 cueId; - if (SkelAnime_Update(&this->skelAnime) && (this->csAction == 3)) { + if (SkelAnime_Update(&this->skelAnime) && (this->cueId == 3)) { EnGe1_ChangeAnim(this, GERUDO_WHITE_ANIM_STIFF_SHIVERING, ANIMMODE_LOOP, 0.0f); } - if (Cutscene_CheckActorAction(play, 121)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_121)) { this->picto.actor.draw = EnGe1_Draw; - csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 121)]->action; - switch (csAction) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_121)]->id; + switch (cueId) { case 8: this->stateFlags &= ~GERUDO_WHITE_STATE_DISABLE_MOVEMENT; break; @@ -275,14 +275,15 @@ void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) { default: this->stateFlags &= ~GERUDO_WHITE_STATE_DISABLE_MOVEMENT; - Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetActorActionIndex(play, 0x79)); + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, + Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_121)); break; } - if (this->csAction != csAction) { - this->csAction = csAction; + if (this->cueId != cueId) { + this->cueId = cueId; - switch (this->csAction) { + switch (this->cueId) { // Aveil cutscene case 1: EnGe1_ChangeAnim(this, GERUDO_WHITE_ANIM_ARMS_FOLDED, ANIMMODE_LOOP, 0.0f); @@ -340,7 +341,7 @@ void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) { this->picto.actor.draw = NULL; } - switch (this->csAction) { + switch (this->cueId) { case 9: if ((this->curPointIndex < this->path->count) && EnGe1_FollowPath(this)) { this->curPointIndex++; diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h index 1cf716b0f..63a2a3c7f 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h @@ -34,7 +34,7 @@ typedef struct EnGe1 { /* 0x2BA */ s16 blinkTimer; /* 0x2BC */ u16 stateFlags; /* 0x2BE */ s16 animIndex; - /* 0x2C0 */ s16 csAction; + /* 0x2C0 */ s16 cueId; /* 0x2C2 */ s16 screamTimer; /* 0x2C4 */ u8 hairstyle; /* 0x2C8 */ EnGe1ActionFunc actionFunc; 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 3753ccf5c..922472f9a 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -100,7 +100,7 @@ void EnGe2_Init(Actor* thisx, PlayState* play) { this->picto.actor.targetMode = 6; this->stateFlags = 0; this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; - this->csAction = -1; + this->cueId = -1; this->picto.actor.terminalVelocity = -9.0f; this->picto.actor.gravity = -1.0f; @@ -592,33 +592,34 @@ void EnGe2_Walk(EnGe2* this, PlayState* play) { void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (Cutscene_CheckActorAction(play, 476)) { - s16 csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 476)]->action; - if (this->csAction != csAction) { - this->csAction = csAction; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_476)) { + s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_476)]->id; - switch (csAction) { - case ENGE2_CSACTION_BEEHIVE_PATROL: + if (this->cueId != cueId) { + this->cueId = cueId; + + switch (cueId) { + case ENGE2_CUEID_BEEHIVE_PATROL: Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); EnGe2_GetNextPath(this, play); break; - case ENGE2_CSACTION_BEEHIVE_RUN_AWAY: + case ENGE2_CUEID_BEEHIVE_RUN_AWAY: Animation_Change(&this->skelAnime, &gGerudoPurpleRunningAwayCutsceneAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), 0, -5.0f); this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); break; - case ENGE2_CSACTION_BEEHIVE_EXIT: + case ENGE2_CUEID_BEEHIVE_EXIT: Actor_Kill(&this->picto.actor); break; - case ENGE2_CSACTION_GBT_ENTR_STAND_STILL: + case ENGE2_CUEID_GBT_ENTR_STAND_STILL: Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, 2, 0.0f); break; - case ENGE2_CSACTION_GBT_ENTR_BLOWN_AWAY: + case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY: Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, 2, 0.0f); EnGe2_SetupBlownAwayPath(this, play); this->stateFlags |= GERUDO_PURPLE_STATE_DISABLE_MOVEMENT; @@ -631,8 +632,8 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { } } - switch (this->csAction) { - case ENGE2_CSACTION_BEEHIVE_RUN_AWAY: + switch (this->cueId) { + case ENGE2_CUEID_BEEHIVE_RUN_AWAY: EnGe2_FollowPath(this); this->picto.actor.speed = 5.0f; @@ -648,7 +649,7 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { } break; - case ENGE2_CSACTION_GBT_ENTR_BLOWN_AWAY: + case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY: if ((this->curPointIndex < this->path->count) && EnGe2_FollowPathWithoutGravity(this)) { this->curPointIndex++; } @@ -704,7 +705,7 @@ void EnGe2_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->picto.actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - if (Cutscene_CheckActorAction(play, 476)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_476)) { this->actionFunc = EnGe2_PerformCutsceneActions; this->stateFlags &= ~GERUDO_PURPLE_STATE_KO; this->stateFlags &= ~GERUDO_PURPLE_STATE_PATH_REVERSE; diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h index 739e94277..0a85e3bfe 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h @@ -27,11 +27,11 @@ typedef enum { //! TODO: work out where to put this typedef enum { - /* 1 */ ENGE2_CSACTION_BEEHIVE_PATROL = 1, - /* 2 */ ENGE2_CSACTION_BEEHIVE_RUN_AWAY, - /* 3 */ ENGE2_CSACTION_BEEHIVE_EXIT, - /* 4 */ ENGE2_CSACTION_GBT_ENTR_STAND_STILL, - /* 5 */ ENGE2_CSACTION_GBT_ENTR_BLOWN_AWAY + /* 1 */ ENGE2_CUEID_BEEHIVE_PATROL = 1, + /* 2 */ ENGE2_CUEID_BEEHIVE_RUN_AWAY, + /* 3 */ ENGE2_CUEID_BEEHIVE_EXIT, + /* 4 */ ENGE2_CUEID_GBT_ENTR_STAND_STILL, + /* 5 */ ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY } EnGe2CsAction; typedef struct EnGe2 { @@ -51,7 +51,7 @@ typedef struct EnGe2 { /* 0x2FC */ f32 verticalDetectRange; //!< vertical range to look for the player within /* 0x300 */ u8 timer; /* 0x301 */ u8 detectedStatus; - /* 0x302 */ s16 csAction; + /* 0x302 */ s16 cueId; /* 0x304 */ s16 unk304; // unused /* 0x306 */ s16 screamTimer; /* 0x308 */ EnGe2ActionFunc actionFunc; 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 44cf5215e..4b5e8e311 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -304,10 +304,10 @@ u8 func_80BB1B14(EnGeg* this, PlayState* play) { void func_80BB1C1C(EnGeg* this) { u16 i; - this->unk_49C[0] = this->actor.cutscene; + this->csIdList[0] = this->actor.csId; - for (i = 1; i < ARRAY_COUNT(this->unk_49C); i++) { - this->unk_49C[i] = ActorCutscene_GetAdditionalCutscene(this->unk_49C[i - 1]); + for (i = 1; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = CutsceneManager_GetAdditionalCsId(this->csIdList[i - 1]); } } @@ -432,15 +432,15 @@ void func_80BB221C(EnGeg* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 4)) { if (sp27 == 1) { this->unk_496 = 0xD66; - this->unk_49A = this->unk_49C[3]; + this->nextCsId = this->csIdList[3]; } else if (sp27 == 2) { this->unk_496 = 0xD64; - this->unk_49A = this->unk_49C[2]; + this->nextCsId = this->csIdList[2]; this->unk_230 &= ~4; } else if (sp27 == 3) { this->unk_230 |= 0x200; this->unk_496 = 0xD64; - this->unk_49A = this->unk_49C[2]; + this->nextCsId = this->csIdList[2]; this->unk_230 &= ~4; } Message_StartTextbox(play, this->unk_496, &this->actor); @@ -466,7 +466,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { } else if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 8)) { SET_WEEKEVENTREG(WEEKEVENTREG_35_40); this->unk_496 = 0xD5E; - this->unk_49A = this->unk_49C[0]; + this->nextCsId = this->csIdList[0]; Message_StartTextbox(play, this->unk_496, &this->actor); this->actionFunc = func_80BB2520; this->unk_230 &= ~8; @@ -481,18 +481,18 @@ void func_80BB221C(EnGeg* this, PlayState* play) { void func_80BB2520(EnGeg* this, PlayState* play) { if (this->unk_230 & 0x10) { - ActorCutscene_Stop(this->unk_498); + CutsceneManager_Stop(this->csId); this->unk_230 &= ~0x10; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->unk_498 = this->unk_49A; - ActorCutscene_SetIntentToPlay(this->unk_498); + this->csId = this->nextCsId; + CutsceneManager_Queue(this->csId); return; } - if (ActorCutscene_GetCanPlayNext(this->unk_498)) { - ActorCutscene_StartAndSetFlag(this->unk_498, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->unk_230 |= 0x10; switch (this->unk_496) { @@ -517,7 +517,7 @@ void func_80BB2520(EnGeg* this, PlayState* play) { break; case 0xD67: - this->unk_498 = this->unk_49C[5]; + this->csId = this->csIdList[5]; this->actionFunc = func_80BB2B1C; break; @@ -534,11 +534,11 @@ void func_80BB2520(EnGeg* this, PlayState* play) { break; } } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->unk_498 = this->unk_49A; - ActorCutscene_SetIntentToPlay(this->unk_498); + this->csId = this->nextCsId; + CutsceneManager_Queue(this->csId); } } @@ -546,12 +546,12 @@ void func_80BB26EC(EnGeg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (this->unk_496) { case 0xD5E: - this->unk_49A = this->unk_49C[1]; + this->nextCsId = this->csIdList[1]; this->actionFunc = func_80BB2520; break; case 0xD61: - ActorCutscene_Stop(this->unk_498); + CutsceneManager_Stop(this->csId); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_230 &= ~0x10; @@ -574,7 +574,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { break; case 0xD69: - this->unk_49A = this->unk_49C[6]; + this->nextCsId = this->csIdList[6]; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB2520; @@ -594,7 +594,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_230 &= ~0x10; - this->unk_49A = this->unk_49C[7]; + this->nextCsId = this->csIdList[7]; this->actionFunc = func_80BB2520; break; @@ -620,7 +620,7 @@ void func_80BB2944(EnGeg* this, PlayState* play) { if (this->unk_496 == 0xD67) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->unk_49A = this->unk_49C[4]; + this->nextCsId = this->csIdList[4]; this->actionFunc = func_80BB2520; } else { this->unk_496 = func_80BB16D0(this); @@ -632,7 +632,7 @@ void func_80BB2944(EnGeg* this, PlayState* play) { void func_80BB2A54(EnGeg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_496 == 0xD65) { - ActorCutscene_Stop(this->unk_498); + CutsceneManager_Stop(this->csId); this->unk_230 &= ~0x10; this->unk_244 = 65; play->msgCtx.msgMode = 0x43; @@ -654,14 +654,14 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { this->actor.child->world.pos = this->unk_4B4; this->actor.child->shape.rot = this->actor.shape.rot; - if (ActorCutscene_GetCurrentIndex() != this->unk_49C[4]) { - if (ActorCutscene_GetCanPlayNext(this->unk_498)) { + if (CutsceneManager_GetCurrentCsId() != this->csIdList[4]) { + if (CutsceneManager_IsNext(this->csId)) { SET_WEEKEVENTREG(WEEKEVENTREG_37_08); if (this->actor.child != NULL) { Actor_Kill(this->actor.child); } this->unk_230 |= 0x10; - ActorCutscene_StartAndSetFlag(this->unk_498, &this->actor); + 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); @@ -671,10 +671,10 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { } this->actionFunc = func_80BB27D4; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->unk_498); + CutsceneManager_Queue(this->csId); } } else { temp_f20 = this->unk_4E0 * 0.005f; @@ -711,7 +711,7 @@ void func_80BB2E00(EnGeg* 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 (sp2E == sp2C) { - ActorCutscene_Stop(this->unk_498); + CutsceneManager_Stop(this->csId); this->unk_4AC = 20; func_80BB2020(this, play); this->actionFunc = func_80BB30B4; @@ -837,7 +837,7 @@ void func_80BB3318(EnGeg* this, PlayState* play) { this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId); } - if (ActorCutscene_GetCurrentIndex() != this->unk_49C[7]) { + if (CutsceneManager_GetCurrentCsId() != this->csIdList[7]) { func_800AEF44(Effect_GetByIndex(this->unk_4DC)); Actor_Kill(&this->actor); } else { 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 ea29fd6cf..71639bdac 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h @@ -33,9 +33,9 @@ typedef struct EnGeg { /* 0x484 */ Vec3f unk_484; /* 0x490 */ Vec3s unk_490; /* 0x496 */ u16 unk_496; - /* 0x498 */ s16 unk_498; - /* 0x49A */ s16 unk_49A; - /* 0x49C */ s16 unk_49C[8]; + /* 0x498 */ s16 csId; + /* 0x49A */ s16 nextCsId; + /* 0x49C */ s16 csIdList[8]; /* 0x4AC */ s32 unk_4AC; /* 0x4B0 */ s16 unk_4B0; /* 0x4B4 */ Vec3f unk_4B4; 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 b27d60302..ed10fd51a 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -265,15 +265,15 @@ void func_80B3556C(EnGg* this, PlayState* play) { void func_80B35634(EnGg* this, PlayState* play) { s32 pad; - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 119)) { - actionIndex = Cutscene_GetActorActionIndex(play, 119); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_119)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_119); - if (this->unk_2DB != play->csCtx.actorActions[actionIndex]->action) { - this->unk_2DB = play->csCtx.actorActions[actionIndex]->action; + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; - switch (play->csCtx.actorActions[actionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->unk_2DA = 0; this->unk_2E6 = 0; @@ -334,10 +334,10 @@ void func_80B35634(EnGg* this, PlayState* play) { func_80B358D8(this, play); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); this->actor.shape.yOffset = 0.0f; } else { - this->unk_2DB = 99; + this->cueId = 99; } } @@ -407,16 +407,16 @@ void func_80B359DC(EnGg* this, PlayState* play) { this->unk_307 = true; } - if (ActorCutscene_GetCanPlayNext(this->unk_2DC)) { - ActorCutscene_Start(this->unk_2DC, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->actor); this->unk_307 = false; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } if (this->unk_307) { - ActorCutscene_SetIntentToPlay(this->unk_2DC); + CutsceneManager_Queue(this->csId); } } } else { @@ -666,7 +666,7 @@ void EnGg_Init(Actor* thisx, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; this->unk_310 = this->actor.home.pos.y; - this->unk_2DC = this->actor.cutscene; + this->csId = this->actor.csId; this->actor.flags |= ACTOR_FLAG_2000000; this->unk_308 = 0; this->unk_309 = 0; 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 cb9f9e7cb..cc744cffa 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h @@ -34,8 +34,8 @@ typedef struct EnGg { /* 0x25C */ Vec3s morphTable[20]; /* 0x2D4 */ UNK_TYPE1 unk_2D4[0x6]; /* 0x2DA */ u8 unk_2DA; - /* 0x2DB */ u8 unk_2DB; - /* 0x2DC */ s16 unk_2DC; + /* 0x2DB */ u8 cueId; + /* 0x2DC */ s16 csId; /* 0x2DE */ UNK_TYPE1 unk2DE[4]; /* 0x2E2 */ s16 unk_2E2; /* 0x2E4 */ s16 unk_2E4; 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 2ae04a6ec..fdd099fff 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -204,7 +204,7 @@ void func_80B3B120(EnGg2* this, PlayState* play) { void func_80B3B21C(EnGg2* this, PlayState* play) { this->actor.speed = 0.0f; if ((this->actor.xzDistToPlayer < 100.0f) && CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) { - this->unk_2E4 = ActorCutscene_GetAdditionalCutscene(this->unk_2E4); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); this->actionFunc = func_80B3B5D4; } } @@ -274,14 +274,14 @@ void func_80B3B4B0(EnGg2* this, PlayState* play) { } void func_80B3B5D4(EnGg2* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_2E4)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2E4, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->actionFunc = func_80B3AE60; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->unk_2E4); + CutsceneManager_Queue(this->csId); } } @@ -376,7 +376,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { this->unk_2F2 = 0; this->unk_2F4 = 0; this->unk_2F6 = 0; - this->unk_2E4 = this->actor.cutscene; + this->csId = this->actor.csId; this->unk_2EC = 20; this->unk_2EA = 0; 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 f91310775..ff7aec4a6 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h @@ -21,7 +21,7 @@ typedef struct EnGg2 { /* 0x1EC */ Vec3s jointTable[20]; /* 0x264 */ Vec3s morphTable[20]; /* 0x2DC */ UNK_TYPE1 unk2DC[0x8]; - /* 0x2E4 */ s16 unk_2E4; + /* 0x2E4 */ s16 csId; /* 0x2E6 */ UNK_TYPE1 unk2E6[4]; /* 0x2EA */ s16 unk_2EA; /* 0x2EC */ s16 unk_2EC; 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 d62f9e6df..07c01b288 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -51,26 +51,26 @@ typedef enum { } GiantAnimation; /** - * Used as values for csAction. The UNKNOWN ones are never used in-game. + * Used as values for cueId. The UNKNOWN ones are never used in-game. */ typedef enum { - /* 0 */ GIANT_CS_ACTION_NONE, - /* 1 */ GIANT_CS_ACTION_IDLE, - /* 2 */ GIANT_CS_ACTION_WALKING, - /* 3 */ GIANT_CS_ACTION_LOOKING_UP, - /* 4 */ GIANT_CS_ACTION_RAISING_ARMS, - /* 5 */ GIANT_CS_ACTION_STRUGGLING, - /* 6 */ GIANT_CS_ACTION_FALLING_OVER, - /* 7 */ GIANT_CS_ACTION_IDLE_FADE_IN, - /* 8 */ GIANT_CS_ACTION_TALKING, - /* 9 */ GIANT_CS_ACTION_DONE_TALKING, - /* 10 */ GIANT_CS_ACTION_TEACHING_OATH_TO_ORDER, - /* 11 */ GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER, - /* 12 */ GIANT_CS_ACTION_UNKNOWN_12, - /* 13 */ GIANT_CS_ACTION_UNKNOWN_13, - /* 14 */ GIANT_CS_ACTION_UNKNOWN_14, - /* 15 */ GIANT_CS_ACTION_HOLDING_UP_MOON_IN_CLOCK_TOWER -} GiantCsActionIndex; + /* 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, @@ -154,31 +154,35 @@ 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->csAction = GIANT_CS_ACTION_NONE; + this->cueId = GIANT_CUE_ID_NONE; this->actionFunc = EnGiant_PerformCutsceneActions; this->actor.draw = NULL; this->alpha = 0; this->actor.velocity.y = -10.0f; this->actor.terminalVelocity = -10.0f; this->actor.gravity = -5.0f; + switch (type) { case GIANT_TYPE_CANYON_TERMINA_FIELD: case GIANT_TYPE_CANYON_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_CANYON_GIANTS_CHAMBER_AND_ENDING: - this->actorActionCommand = 454; + this->cueType = CS_CMD_ACTOR_CUE_454; break; + case GIANT_TYPE_SWAMP_TERMINA_FIELD: case GIANT_TYPE_SWAMP_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_SWAMP_GIANTS_CHAMBER_AND_ENDING: - this->actorActionCommand = 455; + this->cueType = CS_CMD_ACTOR_CUE_455; break; + case GIANT_TYPE_OCEAN_TERMINA_FIELD: case GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING: - this->actorActionCommand = 456; + this->cueType = CS_CMD_ACTOR_CUE_456; break; + default: - this->actorActionCommand = 453; + this->cueType = CS_CMD_ACTOR_CUE_453; break; } @@ -188,7 +192,7 @@ void EnGiant_Init(Actor* thisx, PlayState* play) { return; } - this->actorActionCommand = 0x1C5; + this->cueType = CS_CMD_ACTOR_CUE_453; Actor_SetScale(&this->actor, 0.32f); this->actionFunc = EnGiant_PerformClockTowerSuccessActions; Animation_Change(&this->skelAnime, &gGiantRaisedArmsStartAnim, 0.0f, @@ -259,65 +263,80 @@ void EnGiant_ChangeToStartOrLoopAnimation(EnGiant* this, s16 requestedAnimIndex) } /** - * Immediately switches to the specified animation for this cutscene action. + * Immediately switches to the specified animation for this cueId. */ -void EnGiant_ChangeAnimBasedOnCsAction(EnGiant* this) { - switch (this->csAction) { - case GIANT_CS_ACTION_IDLE: +void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) { + switch (this->cueId) { + case GIANT_CUE_ID_IDLE: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CS_ACTION_WALKING: + + case GIANT_CUE_ID_WALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); break; - case GIANT_CS_ACTION_STRUGGLING: + + case GIANT_CUE_ID_STRUGGLING: EnGiant_ChangeAnim(this, GIANT_ANIM_STRUGGLE_START); break; - case GIANT_CS_ACTION_FALLING_OVER: + + case GIANT_CUE_ID_FALLING_OVER: EnGiant_ChangeAnim(this, GIANT_ANIM_FALLING_OVER); break; - case GIANT_CS_ACTION_IDLE_FADE_IN: + + case GIANT_CUE_ID_IDLE_FADE_IN: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); this->alpha = 0; break; - case GIANT_CS_ACTION_TALKING: + + case GIANT_CUE_ID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_START); break; - case GIANT_CS_ACTION_DONE_TALKING: + + case GIANT_CUE_ID_DONE_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_END); break; - case GIANT_CS_ACTION_TEACHING_OATH_TO_ORDER: + + case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_START); break; - case GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER: + + case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_END); break; - case GIANT_CS_ACTION_UNKNOWN_12: + + case GIANT_CUE_ID_UNKNOWN_12: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CS_ACTION_UNKNOWN_13: + + case GIANT_CUE_ID_UNKNOWN_13: EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); break; - case GIANT_CS_ACTION_UNKNOWN_14: + + case GIANT_CUE_ID_UNKNOWN_14: if (this->animIndex != GIANT_ANIM_WALKING_LOOP) { EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); } break; - case GIANT_CS_ACTION_HOLDING_UP_MOON_IN_CLOCK_TOWER: + + case GIANT_CUE_ID_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); break; + + default: + break; } } void EnGiant_UpdateAlpha(EnGiant* this) { - switch (this->csAction) { - case GIANT_CS_ACTION_FALLING_OVER: + switch (this->cueId) { + case GIANT_CUE_ID_FALLING_OVER: if (this->skelAnime.curFrame >= 90.0f && this->alpha > 0) { this->alpha -= 12; } break; - case GIANT_CS_ACTION_UNKNOWN_14: + case GIANT_CUE_ID_UNKNOWN_14: this->alpha -= 12; break; default: @@ -336,30 +355,30 @@ void EnGiant_UpdateAlpha(EnGiant* this) { */ void EnGiant_PlayAndUpdateAnimation(EnGiant* this) { if (SkelAnime_Update(&this->skelAnime) && - (this->animIndex != GIANT_ANIM_FALLING_OVER || this->csAction != GIANT_CS_ACTION_FALLING_OVER)) { + (this->animIndex != GIANT_ANIM_FALLING_OVER || this->cueId != GIANT_CUE_ID_FALLING_OVER)) { EnGiant_ChangeAnim(this, this->animIndex); - switch (this->csAction) { - case GIANT_CS_ACTION_LOOKING_UP: + switch (this->cueId) { + case GIANT_CUE_ID_LOOKING_UP: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START); break; - case GIANT_CS_ACTION_RAISING_ARMS: + case GIANT_CUE_ID_RAISING_ARMS: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START); break; - case GIANT_CS_ACTION_STRUGGLING: + case GIANT_CUE_ID_STRUGGLING: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START); break; - case GIANT_CS_ACTION_FALLING_OVER: + case GIANT_CUE_ID_FALLING_OVER: // Unused EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER); break; - case GIANT_CS_ACTION_TALKING: + case GIANT_CUE_ID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP); break; - case GIANT_CS_ACTION_DONE_TALKING: - case GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER: + case GIANT_CUE_ID_DONE_TALKING: + case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CS_ACTION_TEACHING_OATH_TO_ORDER: + case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP); break; } @@ -388,30 +407,28 @@ void EnGiant_PlaySound(EnGiant* this) { } } -void EnGiant_UpdatePosition(EnGiant* this, PlayState* play, u32 actionIndex) { - CsCmdActorAction* actorAction = play->csCtx.actorActions[actionIndex]; - f32 startPosY = actorAction->startPos.y; +void EnGiant_UpdatePosition(EnGiant* this, PlayState* play, u32 cueChannel) { + CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel]; + f32 startPosY = cue->startPos.y; s32 pad[2]; - f32 endPosY = actorAction->endPos.y; - f32 scale = Environment_LerpWeight(actorAction->endFrame, actorAction->startFrame, play->csCtx.frames); + f32 endPosY = cue->endPos.y; + f32 scale = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame); this->actor.world.pos.y = ((endPosY - startPosY) * scale) + startPosY; } void EnGiant_PerformClockTowerSuccessActions(EnGiant* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, this->actorActionCommand)) { - EnGiant_UpdatePosition(this, play, Cutscene_GetActorActionIndex(play, this->actorActionCommand)); - if (this->csAction != - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action) { - this->csAction = - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action; - EnGiant_ChangeAnimBasedOnCsAction(this); + if (Cutscene_IsCueInChannel(play, this->cueType)) { + EnGiant_UpdatePosition(this, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { + this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + EnGiant_ChangeAnimBasedOnCueId(this); } EnGiant_UpdateAlpha(this); } EnGiant_PlaySound(this); - if (this->csAction == GIANT_CS_ACTION_STRUGGLING) { + if (this->cueId == GIANT_CUE_ID_STRUGGLING) { func_800B9010(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG); } EnGiant_PlayAndUpdateAnimation(this); @@ -424,13 +441,11 @@ void EnGiant_PlayClockTowerFailureAnimation(EnGiant* this, PlayState* play) { void EnGiant_PerformCutsceneActions(EnGiant* this, PlayState* play) { this->actor.draw = EnGiant_Draw; - if (Cutscene_CheckActorAction(play, this->actorActionCommand)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCommand)); - if (this->csAction != - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action) { - this->csAction = - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action; - EnGiant_ChangeAnimBasedOnCsAction(this); + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { + this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + EnGiant_ChangeAnimBasedOnCueId(this); } EnGiant_UpdateAlpha(this); } diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.h b/src/overlays/actors/ovl_En_Giant/z_en_giant.h index 9ce182a98..45e89dd55 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.h +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.h @@ -48,8 +48,8 @@ typedef struct EnGiant { /* 0x188 */ Vec3s jointTable[GIANT_LIMB_MAX]; /* 0x1E8 */ Vec3s morphTable[GIANT_LIMB_MAX]; /* 0x248 */ s16 animIndex; - /* 0x24A */ u16 actorActionCommand; - /* 0x24C */ u16 csAction; + /* 0x24A */ u16 cueType; + /* 0x24C */ u16 cueId; /* 0x24E */ s16 alpha; /* 0x250 */ u16 sfxId; /* 0x254 */ MtxF headDrawMtxF; 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 45dd9f749..38e6ad976 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -511,19 +511,19 @@ void func_80B51410(EnGk* this, PlayState* play) { this->unk_1E4 |= 0x20; } - if (ActorCutscene_GetCanPlayNext(this->unk_318)) { + if (CutsceneManager_IsNext(this->csId)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLONKID_SOB_TALK); - ActorCutscene_Start(this->unk_318, &this->actor); + CutsceneManager_Start(this->csId, &this->actor); this->unk_1E4 &= ~0x20; return; } - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } if (this->unk_1E4 & 0x20) { - ActorCutscene_SetIntentToPlay(this->unk_318); + CutsceneManager_Queue(this->csId); } } else { this->unk_1E4 &= ~0x20; @@ -532,16 +532,16 @@ void func_80B51410(EnGk* this, PlayState* play) { void func_80B51510(EnGk* this, PlayState* play) { s32 pad; - s32 actionIndex; + s32 cueChannel; if (this) {} - if (Cutscene_CheckActorAction(play, 479)) { - actionIndex = Cutscene_GetActorActionIndex(play, 479); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_479)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_479); - if (play->csCtx.actorActions[actionIndex]->action != this->unk_31B) { - this->unk_31B = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->unk_31A = 0; this->unk_2E4 = 0; @@ -585,10 +585,10 @@ void func_80B51510(EnGk* this, PlayState* play) { func_80B51308(this, play); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); this->actor.shape.yOffset = 0.0f; } else { - this->unk_31B = 0x63; + this->cueId = 99; } } @@ -662,9 +662,9 @@ void func_80B51970(EnGk* this, PlayState* play) { if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) { if ((this->unk_31C == 0xE84) || (this->unk_31C == 0xE99)) { - ActorCutscene_Stop(this->unk_318); - this->unk_318 = ActorCutscene_GetAdditionalCutscene(this->unk_318); - ActorCutscene_SetIntentToPlay(this->unk_318); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); this->actionFunc = func_80B51D9C; return; } @@ -773,8 +773,8 @@ void func_80B51B40(EnGk* this, PlayState* play) { void func_80B51D9C(EnGk* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCanPlayNext(this->unk_318)) { - ActorCutscene_StartAndSetFlag(this->unk_318, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); if (this->unk_1E4 & 4) { this->unk_1E4 &= ~4; this->unk_2E4 = 6; @@ -791,10 +791,10 @@ void func_80B51D9C(EnGk* this, PlayState* play) { this->actionFunc = func_80B51970; } } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->unk_318); + CutsceneManager_Queue(this->csId); } func_80B50954(this); } @@ -810,7 +810,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) { sp36 = this->actor.shape.rot.y - sp38.y; if (func_80B50C78(this, this->path, this->unk_1EC)) { if (this->unk_1EC >= (this->path->count - 1)) { - ActorCutscene_Stop(this->unk_318); + CutsceneManager_Stop(this->csId); Actor_Kill(&this->actor); } else { this->unk_1EC++; @@ -985,7 +985,7 @@ void func_80B525E0(EnGk* this, PlayState* play) { void func_80B52654(EnGk* this, PlayState* play) { this->unk_350 += 0x400; - if ((this->unk_1E4 & 0x80) && (play->csCtx.frames == 250)) { + if ((this->unk_1E4 & 0x80) && (play->csCtx.curFrame == 250)) { SET_WEEKEVENTREG(WEEKEVENTREG_22_04); } @@ -1023,12 +1023,12 @@ void EnGk_Init(Actor* thisx, PlayState* play) { if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { Actor_Kill(&this->actor); } else { - this->unk_318 = this->actor.cutscene; + this->csId = this->actor.csId; this->path = SubS_GetPathByIndex(play, ENGK_GET_F0(&this->actor), 0xF); this->actionFunc = func_80B51760; } } else if (play->sceneId == SCENE_GORONRACE) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) { this->actionFunc = func_80B51760; } else if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2)) { @@ -1053,7 +1053,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { } } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { this->unk_2E4 = 0; - this->unk_318 = this->actor.cutscene; + this->csId = this->actor.csId; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); 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 bebe6c6c9..0f74c1d65 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -39,9 +39,9 @@ typedef struct EnGk { /* 0x2F4 */ Vec3f unk_2F4; /* 0x300 */ Vec3f unk_300; /* 0x30C */ Vec3f unk_30C; - /* 0x318 */ s16 unk_318; + /* 0x318 */ s16 csId; /* 0x31A */ u8 unk_31A; - /* 0x31B */ u8 unk_31B; + /* 0x31B */ u8 cueId; /* 0x31C */ u16 unk_31C; /* 0x31E */ s16 unk_31E; /* 0x320 */ s16 unk_320; 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 86dcead70..b76ed7066 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -425,48 +425,48 @@ void func_8094E2D0(EnGm* this) { } } -s32 func_8094E454(EnGm* this, s16 arg1) { +s32 func_8094E454(EnGm* this, s16 csId) { s32 ret = false; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(arg1); - } else if (ActorCutscene_GetCanPlayNext(arg1)) { - ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(csId); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); ret = true; } else { - ActorCutscene_SetIntentToPlay(arg1); + CutsceneManager_Queue(csId); } return ret; } -s16 func_8094E4D0(EnGm* this, s32 arg1) { +s16 func_8094E4D0(EnGm* this, s32 numCutscenes) { s32 i; - s16 cutscene = this->actor.cutscene; + s16 csId = this->actor.csId; - for (i = 0; i < arg1; i++) { - cutscene = ActorCutscene_GetAdditionalCutscene(cutscene); + for (i = 0; i < numCutscenes; i++) { + csId = CutsceneManager_GetAdditionalCsId(csId); } - return cutscene; + return csId; } s32 func_8094E52C(EnGm* this, PlayState* play) { s32 pad; - s16 sp2A = func_8094E4D0(this, 0); + s16 csId = func_8094E4D0(this, 0); s32 ret = false; switch (this->unk_3E0) { case 0: - if (!func_8094E454(this, sp2A)) { + if (!func_8094E454(this, csId)) { break; } case 2: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_40) && (this->unk_3E0 == 2)) { - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); } else { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor); } this->unk_3E0++; ret = true; @@ -474,14 +474,15 @@ s32 func_8094E52C(EnGm* this, PlayState* play) { case 1: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), + this->actor.child); } this->unk_3E0++; ret = true; break; case 3: - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); this->unk_3E0++; ret = true; break; @@ -492,7 +493,7 @@ s32 func_8094E52C(EnGm* this, PlayState* play) { s32 func_8094E69C(EnGm* this, PlayState* play) { Camera* subCam; - s16 sp4A = func_8094E4D0(this, 0); + s16 csId = func_8094E4D0(this, 0); s16 sp48; Vec3f sp3C; Vec3f sp30; @@ -530,10 +531,10 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { break; case 2: - if (func_8094E454(this, sp4A)) { + if (func_8094E454(this, csId)) { case 4: case 6: - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp4A)); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)); Camera_SetTargetActor(subCam, &this->actor); this->unk_3E0++; ret = true; @@ -544,7 +545,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { case 5: case 7: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp4A)); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)); Camera_SetTargetActor(subCam, this->actor.child); } this->unk_3E0++; @@ -553,7 +554,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { case 8: Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - ActorCutscene_Stop(sp4A); + CutsceneManager_Stop(csId); this->unk_3E2 = 0; this->unk_3E0++; break; @@ -766,7 +767,7 @@ s32 func_8094EFC4(EnGm* this, PlayState* play) { func_8094E054(this, play, 0); this->unk_258 = 255; } - this->unk_259 = 255; + this->cueId = 255; this->unk_3F8 = 1; } ret = true; @@ -1634,20 +1635,20 @@ void func_80950F2C(EnGm* this, PlayState* play) { s32 pad; Vec3f sp3C; Vec3f sp30; - s32 sp2C; + s32 cueId; s16 yaw; - if (Cutscene_CheckActorAction(play, 526)) { - sp2C = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 526)]->action; - if (this->unk_259 != (sp2C & 0xFF)) { - if (sp2C == 3) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_526)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_526)]->id; + if (this->cueId != (u8)cueId) { + if (cueId == 3) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); } - this->unk_259 = sp2C; - func_8094E054(this, play, sp50[sp2C]); + this->cueId = cueId; + func_8094E054(this, play, sp50[cueId]); } - if ((this->unk_259 == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) { + if ((this->cueId == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) { Math_Vec3f_Copy(&sp3C, &player->actor.world.pos); Math_Vec3f_Copy(&sp30, &this->actor.world.pos); yaw = Math_Vec3f_Yaw(&sp30, &sp3C); @@ -1763,7 +1764,7 @@ void EnGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp30; s32 pad2; - if ((ActorCutscene_GetCurrentIndex() == -1) && (limbIndex == 16)) { + if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == 16)) { Matrix_MultVec3f(&D_80951E24, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } 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 3bed5335a..6eede0744 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -26,7 +26,7 @@ typedef struct EnGm { /* 0x250 */ s32 timePathWaypoint; /* 0x254 */ s32 timePathElapsedTime; /* 0x258 */ u8 unk_258; - /* 0x259 */ u8 unk_259; + /* 0x259 */ u8 cueId; /* 0x25C */ s32 unk_25C; /* 0x260 */ s8 unk_260; /* 0x261 */ s8 unk_261; 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 02ee6d342..12a98228f 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -539,7 +539,7 @@ s32 func_80A1222C(EnGo* this, PlayState* play) { (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->unk_3EC == 0) && (this->actor.xzDistToPlayer < 400.0f)) || (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) && - (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.currentCsIndex == 1))) { + (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.scriptIndex == 1))) { ret = true; } return ret; @@ -712,10 +712,10 @@ s32 func_80A12868(EnGo* this, PlayState* play) { s32 func_80A12954(EnGo* this, PlayState* play) { if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != 0) && (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && - (play->csCtx.currentCsIndex == 0)) { + (play->csCtx.scriptIndex == 0)) { if (this->unk_3F0 == 0) { this->actor.flags &= ~ACTOR_FLAG_1; - this->unk_394 = 255; + this->cueId = 255; this->unk_3F0 = 1; this->unk_18C = this->actionFunc; } @@ -723,7 +723,7 @@ s32 func_80A12954(EnGo* this, PlayState* play) { this->actionFunc = func_80A14FC8; } else if (this->unk_3F0 != 0) { this->actor.flags |= ACTOR_FLAG_1; - this->unk_394 = 255; + this->cueId = 255; this->unk_3F0 = 0; SubS_UpdateFlags(&this->unk_390, 3, 7); this->actionFunc = this->unk_18C; @@ -995,14 +995,14 @@ void func_80A134B0(EnGo* this, PlayState* play, s32 arg2) { } } -s32 func_80A134F4(EnGo* this, s16 arg1) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - } else if (ActorCutscene_GetCanPlayNext(arg1)) { - ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor); +s32 func_80A134F4(EnGo* this, s16 csId) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); return true; } - ActorCutscene_SetIntentToPlay(arg1); + CutsceneManager_Queue(csId); return false; } @@ -1112,8 +1112,8 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) { switch (this->unk_3C0) { case 0: - this->unk_3B8 = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - if (func_80A134F4(this, this->unk_3B8)) { + this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); + if (func_80A134F4(this, this->csId)) { this->unk_3C4 = 1; this->unk_3C0 = 1; } else { @@ -1121,26 +1121,26 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) { } case 1: - if (ActorCutscene_GetCurrentIndex() != this->unk_3B8) { - this->unk_3B8 = ActorCutscene_GetAdditionalCutscene(this->unk_3B8); + if (CutsceneManager_GetCurrentCsId() != this->csId) { + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); this->unk_3C0 = 2; } else { break; } case 2: - if (func_80A134F4(this, this->unk_3B8)) { + if (func_80A134F4(this, this->csId)) { this->unk_3C0 = 3; } else { break; } case 3: - if (ActorCutscene_GetCanPlayNext(0x7C)) { - ActorCutscene_StartAndSetUnkLinkFields(0x7C, NULL); + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_TALK, NULL); this->unk_3C0 = 4; - } else if (ActorCutscene_GetCurrentIndex() == this->unk_3B8) { - ActorCutscene_SetIntentToPlay(0x7C); + } else if (CutsceneManager_GetCurrentCsId() == this->csId) { + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } } @@ -1230,8 +1230,8 @@ s32 func_80A13E80(EnGo* this, PlayState* play) { switch (this->unk_3C0) { case 0: - this->unk_3B8 = this->actor.cutscene; - if (func_80A134F4(this, this->unk_3B8)) { + this->csId = this->actor.csId; + if (func_80A134F4(this, this->csId)) { this->unk_3C0++; } break; @@ -1258,7 +1258,7 @@ s32 func_80A13E80(EnGo* this, PlayState* play) { case 3: if (this->unk_3C2 >= 60) { - ActorCutscene_Stop(this->unk_3B8); + CutsceneManager_Stop(this->csId); this->unk_3C2 = 0; this->unk_3C0 = 0; ret = true; @@ -1376,7 +1376,7 @@ void func_80A143A8(EnGo* this, PlayState* play) { void func_80A14430(EnGo* this, PlayState* play) { if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) || (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) && - (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80))) { + (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { func_80A14018(this, play); this->actionFunc = func_80A149B0; } else { @@ -1413,7 +1413,7 @@ void func_80A144F4(EnGo* this, PlayState* play) { void func_80A145AC(EnGo* this, PlayState* play) { if ((ENGO_GET_70(&this->actor) == ENGO_70_1) && (((play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && - (play->csCtx.currentCsIndex == 0)) || + (play->csCtx.scriptIndex == 0)) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08))) { this->actor.child = func_80A13400(this, play); this->actor.child->child = &this->actor; @@ -1611,7 +1611,7 @@ void func_80A14E14(EnGo* this, PlayState* play) { } void func_80A14E74(EnGo* this, PlayState* play) { - if (func_80A134F4(this, this->actor.cutscene)) { + if (func_80A134F4(this, this->actor.csId)) { this->actionFunc = func_80A14EB0; } } @@ -1625,7 +1625,7 @@ void func_80A14EB0(EnGo* this, PlayState* play) { this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f; func_80A139E4(this); } else { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); func_80A143A8(this, play); if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (ENGO_GET_70(&this->actor) == ENGO_70_1)) { SubS_UpdateFlags(&this->unk_390, 4, 7); @@ -1640,35 +1640,35 @@ void func_80A14FC8(EnGo* this, PlayState* play) { s32 sp38[] = { 0, 2, 6, 20, 18, 5, 5, 15, }; - u16 actorActionCmd = 0; - s32 sp30; - s32 actionIndex; + u16 cueType = 0; + s32 cueId; + s32 cueChannel; switch (ENGO_GET_70(&this->actor)) { case ENGO_70_0: - actorActionCmd = 128; + cueType = CS_CMD_ACTOR_CUE_128; break; case ENGO_70_1: - actorActionCmd = 129; + cueType = CS_CMD_ACTOR_CUE_129; break; } - if ((actorActionCmd == 128) || (actorActionCmd == 129)) { - if (Cutscene_CheckActorAction(play, actorActionCmd)) { - actionIndex = Cutscene_GetActorActionIndex(play, actorActionCmd); - sp30 = play->csCtx.actorActions[actionIndex]->action; + if ((cueType == CS_CMD_ACTOR_CUE_128) || (cueType == CS_CMD_ACTOR_CUE_129)) { + if (Cutscene_IsCueInChannel(play, cueType)) { + cueChannel = Cutscene_GetCueChannel(play, cueType); + cueId = play->csCtx.actorCues[cueChannel]->id; - if (this->unk_394 != (u8)sp30) { - this->unk_394 = sp30; - func_80A12C48(this, play, sp38[sp30]); + if (this->cueId != (u8)cueId) { + this->cueId = cueId; + func_80A12C48(this, play, sp38[cueId]); this->unk_390 = 0; this->unk_390 |= 0x20; this->unk_3BE = 0; this->unk_39C = 0.0f; this->unk_3A0 = 0.0f; - switch (sp30) { + switch (cueId) { case 1: this->unk_390 |= 0x80; this->skelAnime.curFrame = this->skelAnime.endFrame; @@ -1681,7 +1681,7 @@ void func_80A14FC8(EnGo* this, PlayState* play) { } } - switch (this->unk_394) { + switch (this->cueId) { case 3: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 20)) { func_80A12C48(this, play, 21); @@ -1706,8 +1706,8 @@ void func_80A14FC8(EnGo* this, PlayState* play) { break; } - if (actorActionCmd == 128) { - switch (play->csCtx.frames) { + if (cueType == 128) { + switch (play->csCtx.curFrame) { case 55: case 100: case 130: @@ -1730,8 +1730,8 @@ void func_80A14FC8(EnGo* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL); break; } - } else if (actorActionCmd == 129) { - switch (play->csCtx.frames) { + } else if (cueType == 129) { + switch (play->csCtx.curFrame) { case 360: case 390: Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD); @@ -1752,7 +1752,7 @@ void func_80A14FC8(EnGo* this, PlayState* play) { } SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } } 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 fd4876430..9d12dfdce 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -67,7 +67,7 @@ typedef struct EnGo { /* 0x38C */ Actor* unk_38C; /* 0x390 */ u16 unk_390; /* 0x392 */ u16 unk_392; - /* 0x394 */ u8 unk_394; + /* 0x394 */ u8 cueId; /* 0x398 */ f32 unk_398; /* 0x39C */ f32 unk_39C; /* 0x3A0 */ f32 unk_3A0; @@ -79,7 +79,7 @@ typedef struct EnGo { /* 0x3B2 */ s16 unk_3B2; /* 0x3B4 */ s16 unk_3B4; /* 0x3B6 */ s16 unk_3B6; - /* 0x3B8 */ s16 unk_3B8; + /* 0x3B8 */ s16 csId; /* 0x3BA */ s16 unk_3BA; /* 0x3BC */ s16 unk_3BC; /* 0x3BE */ s16 unk_3BE; 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 003ac43e0..2f4257347 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -156,7 +156,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) { this->unk_1F4 = this->unk_1FA; Math_Vec3f_Copy(&this->unk_1B0[0], &gOneVec3f); Math_Vec3f_Copy(&this->unk_1B0[1], &gOneVec3f); - SubS_FillCutscenesList(&this->actor, this->unk_212, ARRAY_COUNT(this->unk_212)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); func_801A5080(0); if (this->actor.params == ENGS_1) { Actor_SetScale(&this->actor, 0.15f); @@ -262,7 +262,8 @@ void func_80997E4C(EnGs* this, PlayState* play) { } void func_80997FF0(EnGs* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->actor, play->playerActorCsIds[0], -1, SUBS_CUTSCENE_NORMAL)) { + if (SubS_StartCutscene(&this->actor, play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA], CS_ID_NONE, + SUBS_CUTSCENE_NORMAL)) { func_80998040(this, play); } } @@ -338,8 +339,8 @@ void func_8099807C(EnGs* this, PlayState* play) { } void func_80998300(EnGs* this, PlayState* play) { - if (this->actor.cutscene != -1) { - ActorCutscene_Stop(play->playerActorCsIds[0]); + if (this->actor.csId != CS_ID_NONE) { + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); } } @@ -372,7 +373,7 @@ void func_809984F4(EnGs* this, PlayState* play) { } } while (gossipStone != NULL); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = func_809985B8; } @@ -380,7 +381,7 @@ void func_809985B8(EnGs* this, PlayState* play) { EnGs* gossipStone; Vec3f sp38; - if (SubS_StartActorCutscene(&this->actor, this->unk_212[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { Player* player = GET_PLAYER(play); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); @@ -446,7 +447,7 @@ void func_8099874C(EnGs* this, PlayState* play) { if ((this->unk_19C == 5) && (this->unk_194 != 0)) { s32 i; - ActorCutscene_Stop(this->unk_212[0]); + CutsceneManager_Stop(this->csIdList[0]); phi_v0 = 1; for (i = 0; i < 4; i++) { @@ -1012,7 +1013,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) { } else if (func_800B8718(&this->actor, &play->state)) { this->unk_19A |= 0x200; this->collider.base.acFlags &= ~AC_HIT; - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { this->actionFunc = func_80997FF0; } else { func_80998040(this, play); 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 51e899fcc..fb2d62816 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -49,7 +49,7 @@ typedef struct EnGs { /* 0x208 */ s32 unk_208; /* 0x20C */ s32 unk_20C; /* 0x210 */ u16 unk_210; - /* 0x212 */ s16 unk_212[2]; + /* 0x212 */ s16 csIdList[2]; /* 0x216 */ s16 unk_216; /* 0x218 */ s16 unk_218; /* 0x21A */ s16 unk_21A; 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 8eaa6b444..c54703ef9 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -324,14 +324,14 @@ void func_80B23910(EnHanabi* this, PlayState* play) { void func_80B23934(EnHanabi* this, PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(TERMINA_FIELD, 1)) && (gSaveContext.sceneLayer == 7)) { - if (play->csCtx.frames > 1650) { + if (play->csCtx.curFrame > 1650) { func_80B236C8(this, play); func_800B8FE8(&this->actor, NA_SE_EV_FIREWORKS_LAUNCH - SFX_FLAG); } } - if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 7) && (play->csCtx.currentCsIndex == 0) && - (play->csCtx.frames == 610)) { + if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 7) && (play->csCtx.scriptIndex == 0) && + (play->csCtx.curFrame == 610)) { Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_GROAN); } } 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 4b610de8f..b5ad5fa40 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -133,7 +133,7 @@ static u32 sHasSoundPlayed = false; void EnHg_Init(Actor* thisx, PlayState* play) { EnHg* this = THIS; - s16 currentCutscene = this->actor.cutscene; + s16 csId = this->actor.csId; s32 i; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 36.0f); @@ -142,18 +142,18 @@ void EnHg_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } this->actor.targetMode = 1; this->actor.colChkInfo.health = 0; this->actor.gravity = -1.0f; - for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) { - if (currentCutscene == -1) { + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + if (csId == CS_ID_NONE) { break; } - this->cutscenes[i] = currentCutscene; - currentCutscene = ActorCutscene_GetAdditionalCutscene(currentCutscene); + this->csIdList[i] = csId; + csId = CutsceneManager_GetAdditionalCsId(csId); } EnHg_SetupWait(this); } @@ -171,12 +171,12 @@ void EnHg_SetupWait(EnHg* this) { void EnHg_Wait(EnHg* this, PlayState* play) { if (this->actor.colChkInfo.health == 1) { - if ((this->actor.xzDistToPlayer < 200.0f && this->actor.playerHeightRel < 40.0f) && - !Cutscene_CheckActorAction(play, 0x1E3)) { + if (((this->actor.xzDistToPlayer < 200.0f) && (this->actor.playerHeightRel < 40.0f)) && + !Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_483)) { EnHg_SetupChasePlayer(this); } - if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0) && - ((play->csCtx.frames == 20) || (play->csCtx.frames == 60))) { + if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0) && + ((play->csCtx.curFrame == 20) || (play->csCtx.curFrame == 60))) { Actor_PlaySfx(&this->actor, NA_SE_EN_HALF_REDEAD_SURPRISE); } } @@ -270,51 +270,51 @@ void EnHg_SetupCutscene(EnHg* this) { } void EnHg_PlayCutscene(EnHg* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) { - ActorCutscene_Start(this->cutscenes[this->cutsceneIndex], &this->actor); + if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor); EnHg_SetupCsAction(this); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } void EnHg_SetupCsAction(EnHg* this) { - this->cutscenes[3] = 0x63; - this->cutscenes[2] = 0; + this->csIdList[3] = 99; + this->csIdList[2] = 0; this->actionFunc = EnHg_HandleCsAction; } void EnHg_HandleCsAction(EnHg* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 484)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 484); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_484)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_484); - if (this->cutscenes[3] != play->csCtx.actorActions[actionIndex]->action) { - this->cutscenes[3] = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (this->csIdList[3] != play->csCtx.actorCues[cueChannel]->id) { + this->csIdList[3] = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->animIndex = 0; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE); break; case 2: - this->cutscenes[2] = 0; + this->csIdList[2] = 0; this->animIndex = HG_ANIM_LEAN_FORWARD; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LEAN_FORWARD); break; case 3: - this->cutscenes[2] = 0; + this->csIdList[2] = 0; this->animIndex = HG_ANIM_CURL_UP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CURL_UP); break; case 4: - this->cutscenes[2] = 0; + this->csIdList[2] = 0; this->animIndex = HG_ANIM_PANIC; - if ((this->cutsceneIndex == HG_CS_GET_MASK) || (this->cutsceneIndex == HG_CS_SONG_OF_HEALING)) { + if ((this->csIdIndex == HG_CS_GET_MASK) || (this->csIdIndex == HG_CS_SONG_OF_HEALING)) { func_8019F128(NA_SE_EN_HALF_REDEAD_TRANS); } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_PANIC); @@ -356,21 +356,20 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { break; case HG_ANIM_PANIC: - if ((this->cutsceneIndex == HG_CS_FIRST_ENCOUNTER) || - (this->cutsceneIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) { + if ((this->csIdIndex == HG_CS_FIRST_ENCOUNTER) || (this->csIdIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) { func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); } break; } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); return; } else if (play->csCtx.state == 0) { EnHg_SetupWait(this); } - this->cutscenes[3] = 0x63; + this->csIdList[3] = 99; } void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { @@ -394,9 +393,9 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) { - this->cutsceneIndex = HG_CS_SONG_OF_HEALING; + this->csIdIndex = HG_CS_SONG_OF_HEALING; } else { - this->cutsceneIndex = HG_CS_GET_MASK; + this->csIdIndex = HG_CS_GET_MASK; } EnHg_SetupCutscene(this); @@ -407,9 +406,9 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { if ((this->actionFunc != EnHg_PlayCutscene) && (this->actionFunc != EnHg_HandleCsAction)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_02)) { SET_WEEKEVENTREG(WEEKEVENTREG_61_02); - this->cutsceneIndex = HG_CS_FIRST_ENCOUNTER; + this->csIdIndex = HG_CS_FIRST_ENCOUNTER; } else { - this->cutsceneIndex = HG_CS_SUBSEQUENT_ENCOUNTER; + this->csIdIndex = HG_CS_SUBSEQUENT_ENCOUNTER; } EnHg_SetupCutscene(this); diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.h b/src/overlays/actors/ovl_En_Hg/z_en_hg.h index 1211a4cf3..b79269e9b 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.h +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.h @@ -15,12 +15,12 @@ typedef struct EnHg { /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnHgActionFunc actionFunc; /* 0x1D8 */ MtxF mf; - /* 0x218 */ s32 cutsceneIndex; + /* 0x218 */ s32 csIdIndex; /* 0x21C */ s32 animIndex; /* 0x220 */ Vec3s jointTable[PAMELAS_FATHER_GIBDO_LIMB_MAX]; /* 0x292 */ Vec3s morphTable[PAMELAS_FATHER_GIBDO_LIMB_MAX]; /* 0x304 */ UNK_TYPE1 pad304[0xC]; - /* 0x310 */ u16 cutscenes[4]; + /* 0x310 */ u16 csIdList[4]; } EnHg; // size = 0x318 #endif // Z_EN_HG_H 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 af801ebd4..bbef58b1a 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -109,7 +109,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_52_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { EnHgo_SetupTalk(this); } else { thisx->draw = NULL; @@ -276,13 +276,13 @@ void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) { } s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 486)) { - actionIndex = Cutscene_GetActorActionIndex(play, 486); - if (this->csAction != play->csCtx.actorActions[actionIndex]->action) { - this->csAction = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_486)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_486); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->animIndex = HGO_ANIM_ARMS_FOLDED; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); @@ -321,7 +321,7 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { (this->isInCutscene == false)) { this->isInCutscene = true; if ((gSaveContext.sceneLayer == 0) && - ((play->csCtx.currentCsIndex == 2) || (play->csCtx.currentCsIndex == 4))) { + ((play->csCtx.scriptIndex == 2) || (play->csCtx.scriptIndex == 4))) { Actor_PlaySfx(&this->actor, NA_SE_VO_GBVO02); } } @@ -338,11 +338,11 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); return true; } - if ((play->csCtx.state == CS_STATE_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && + if ((play->csCtx.state == CS_STATE_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && (this->actionFunc == EnHgo_DoNothing)) { this->actor.shape.rot.y = this->actor.world.rot.y; Actor_Spawn(&play->actorCtx, play, ACTOR_ELF_MSG2, this->actor.focus.pos.x, this->actor.focus.pos.y, @@ -350,7 +350,7 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { EnHgo_SetupInitCollision(this); } - this->csAction = 0x63; + this->cueId = 99; return false; } diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h index 6882c1127..da7b7c40e 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h @@ -24,7 +24,7 @@ typedef struct EnHgo { /* 0x310 */ s16 talkFlags; /* 0x312 */ s16 isInCutscene; /* 0x314 */ u16 textId; - /* 0x316 */ u16 csAction; + /* 0x316 */ u16 cueId; } EnHgo; // size = 0x318 #endif // Z_EN_HGO_H 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 c3052e80f..29a7c6a8e 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 @@ -105,7 +105,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { } this->path = SubS_GetPathByIndex(play, this->unk_21E, 0x3F); - this->unk_226 = this->actor.cutscene; + this->csId = this->actor.csId; func_801A5080(2); func_80BDB268(this); } @@ -243,18 +243,18 @@ void func_80BDB788(EnHiddenNuts* this) { void func_80BDB7E8(EnHiddenNuts* this, PlayState* play) { Vec3f sp3C; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_226); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); return; } - if (!ActorCutscene_GetCanPlayNext(this->unk_226)) { - ActorCutscene_SetIntentToPlay(this->unk_226); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); return; } - ActorCutscene_StartAndSetUnkLinkFields(this->unk_226, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_228 = -1200.0f; Math_Vec3f_Copy(&sp3C, &this->actor.world.pos); 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 e40a89193..435e4662c 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 @@ -26,7 +26,7 @@ typedef struct EnHiddenNuts { /* 0x21E */ s16 unk_21E; /* 0x220 */ s32 unk_220; /* 0x224 */ s16 unk_224; - /* 0x226 */ s16 unk_226; + /* 0x226 */ s16 csId; /* 0x228 */ f32 unk_228; /* 0x22C */ f32 unk_22C; /* 0x230 */ UNK_TYPE1 unk230[4]; 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 4b5878110..df4f17d4c 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -50,40 +50,40 @@ void func_80881290(EnHorse* this, PlayState* play); void func_8088159C(EnHorse* this, PlayState* play); void func_80881634(EnHorse* this); void func_8088168C(EnHorse* this); -void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action); +void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue); void EnHorse_CsPlayHighJumpAnim(EnHorse* this, PlayState* play); -void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action); +void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue); void EnHorse_InitCutscene(EnHorse* this, PlayState* play); void EnHorse_InitHorsebackArchery(EnHorse* this); void EnHorse_UpdateHbaAnim(EnHorse* this); -void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80884010(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80884194(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80884314(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80884444(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80884564(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorAction* action); -void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorAction* action); +void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80884010(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80884194(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80884314(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80884444(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80884564(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_80884604(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue); +void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorCue* cue); void func_808846F0(EnHorse* this, PlayState* play); void func_80884994(EnHorse* this); void func_80884D04(EnHorse* this, PlayState* play); @@ -91,7 +91,7 @@ void EnHorse_StickDirection(Vec2f* curStick, f32* stickMag, s16* angle); s32 EnHorse_GetMountSide(EnHorse* this, PlayState* play); typedef struct { - s32 csAction; + s32 cueId; s32 csFuncIdx; } CsActionEntry; @@ -673,7 +673,7 @@ s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) { (player->stateFlags1 & PLAYER_STATE1_100000) || (((this->stateFlags & ENHORSE_FLAG_19) || (this->stateFlags & ENHORSE_FLAG_29)) && !this->inRace) || (this->action == ENHORSE_ACTION_HBA) || (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || - (play->csCtx.state != CS_STATE_0) || (ActorCutscene_GetCurrentIndex() != -1) || + (play->csCtx.state != CS_STATE_IDLE) || (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) || (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != PLAYER_CSMODE_0)) { return false; } @@ -1001,7 +1001,7 @@ void EnHorse_Frozen(EnHorse* this, PlayState* play) { EnHorse_StartMountedIdleResetAnim(this); } else if (this->actor.params == ENHORSE_11) { this->actor.params = ENHORSE_7; - if (play->csCtx.state != CS_STATE_0) { + if (play->csCtx.state != CS_STATE_IDLE) { EnHorse_StartMountedIdle(this); } else { this->actor.speed = 8.0f; @@ -1642,8 +1642,8 @@ void EnHorse_Reverse(EnHorse* this, PlayState* play) { } else if (stickMag < 10.0f) { stickAngle = -0x7FFF; } - } else if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || (play->csCtx.state != CS_STATE_0) || - (ActorCutscene_GetCurrentIndex() != -1) || (player->stateFlags1 & PLAYER_STATE1_20)) { + } else if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || (play->csCtx.state != CS_STATE_IDLE) || + (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) || (player->stateFlags1 & PLAYER_STATE1_20)) { EnHorse_StartMountedIdleResetAnim(this); this->actor.speed = 0.0f; return; @@ -2479,20 +2479,20 @@ void func_808819D8(EnHorse* this, PlayState* play) { } } -void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->animIndex = ENHORSE_ANIM_GALLOP; this->cutsceneAction = 1; Animation_PlayOnceSetSpeed(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], this->actor.speed * 0.2f * 1.5f); } -void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { Vec3f endPos; s32 pad; - endPos.x = action->endPos.x; - endPos.y = action->endPos.y; - endPos.z = action->endPos.z; + endPos.x = cue->endPos.x; + endPos.y = cue->endPos.y; + endPos.z = cue->endPos.z; if (Math3D_Distance(&endPos, &this->actor.world.pos) > 8.0f) { EnHorse_RotateToPoint(this, play, &endPos, 0x320); @@ -2543,20 +2543,20 @@ void EnHorse_CsPlayHighJumpAnim(EnHorse* this, PlayState* play) { Rumble_Request(0.0f, 170, 10, 10); } -void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { EnHorse_CsSetAnimHighJump(this, play); this->cutsceneAction = 2; this->cutsceneFlags &= ~1; } -void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { f32 curFrame; f32 y; Vec3s* jointTable; s32 pad[2]; if (this->cutsceneFlags & 1) { - EnHorse_CsMoveToPoint(this, play, action); + EnHorse_CsMoveToPoint(this, play, cue); return; } @@ -2608,7 +2608,7 @@ void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action) { } } -void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->animIndex = ENHORSE_ANIM_REARING; this->cutsceneAction = 3; this->cutsceneFlags &= ~4; @@ -2624,7 +2624,7 @@ void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* act Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f); } -void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->actor.speed = 0.0f; if (this->curFrame > 25.0f) { if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) { @@ -2652,13 +2652,13 @@ void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action) } } -void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - this->actor.world.pos.x = action->startPos.x; - this->actor.world.pos.y = action->startPos.y; - this->actor.world.pos.z = action->startPos.z; +void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + this->actor.world.pos.x = cue->startPos.x; + this->actor.world.pos.y = cue->startPos.y; + this->actor.world.pos.z = cue->startPos.z; this->actor.prevPos = this->actor.world.pos; - this->actor.world.rot.y = action->urot.y; + this->actor.world.rot.y = cue->rot.y; this->actor.shape.rot = this->actor.world.rot; this->animIndex = ENHORSE_ANIM_GALLOP; @@ -2667,13 +2667,13 @@ void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* acti this->actor.speed * 0.3f); } -void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { Vec3f endPos; s32 pad; - endPos.x = action->endPos.x; - endPos.y = action->endPos.y; - endPos.z = action->endPos.z; + endPos.x = cue->endPos.x; + endPos.y = cue->endPos.y; + endPos.z = cue->endPos.z; if (Math3D_Distance(&endPos, &this->actor.world.pos) > 8.0f) { EnHorse_RotateToPoint(this, play, &endPos, 0x320); @@ -2692,13 +2692,13 @@ void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* } } -void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - this->actor.world.pos.x = action->startPos.x; - this->actor.world.pos.y = action->startPos.y; - this->actor.world.pos.z = action->startPos.z; +void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + this->actor.world.pos.x = cue->startPos.x; + this->actor.world.pos.y = cue->startPos.y; + this->actor.world.pos.z = cue->startPos.z; this->actor.prevPos = this->actor.world.pos; - this->actor.world.rot.y = action->urot.y; + this->actor.world.rot.y = cue->rot.y; this->actor.shape.rot = this->actor.world.rot; this->animIndex = ENHORSE_ANIM_REARING; @@ -2717,7 +2717,7 @@ void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f); } -void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->actor.speed = 0.0f; if (this->curFrame > 25.0f) { if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) { @@ -2752,16 +2752,16 @@ void EnHorse_InitCutscene(EnHorse* this, PlayState* play) { this->actor.speed = 0.0f; } -s32 EnHorse_GetCutsceneFunctionIndex(s32 csAction) { +s32 EnHorse_GetCutsceneFunctionIndex(s32 cueId) { s32 numActions = ARRAY_COUNT(sCsActionTable); // prevents unrolling s32 i; for (i = 0; i < numActions; i++) { - if (csAction == sCsActionTable[i].csAction) { + if (cueId == sCsActionTable[i].cueId) { return sCsActionTable[i].csFuncIdx; } - if (csAction < sCsActionTable[i].csAction) { + if (cueId < sCsActionTable[i].cueId) { return 0; } } @@ -2770,9 +2770,9 @@ s32 EnHorse_GetCutsceneFunctionIndex(s32 csAction) { void EnHorse_CutsceneUpdate(EnHorse* this, PlayState* play) { s32 csFunctionIdx; - CsCmdActorAction* playerAction = play->csCtx.playerAction; + CsCmdActorCue* playerCue = play->csCtx.playerCue; - if (play->csCtx.state == CS_STATE_3) { + if (play->csCtx.state == CS_STATE_STOP) { this->playerControlled = true; this->actor.params = ENHORSE_12; this->action = ENHORSE_ACTION_IDLE; @@ -2780,23 +2780,23 @@ void EnHorse_CutsceneUpdate(EnHorse* this, PlayState* play) { return; } - if (playerAction != NULL) { - csFunctionIdx = EnHorse_GetCutsceneFunctionIndex(playerAction->action); + if (playerCue != NULL) { + csFunctionIdx = EnHorse_GetCutsceneFunctionIndex(playerCue->id); if (csFunctionIdx != 0) { if (csFunctionIdx != this->cutsceneAction) { if (this->cutsceneAction == 0) { - this->actor.world.pos.x = playerAction->startPos.x; - this->actor.world.pos.y = playerAction->startPos.y; - this->actor.world.pos.z = playerAction->startPos.z; + this->actor.world.pos.x = playerCue->startPos.x; + this->actor.world.pos.y = playerCue->startPos.y; + this->actor.world.pos.z = playerCue->startPos.z; - this->actor.world.rot.y = playerAction->urot.y; + this->actor.world.rot.y = playerCue->rot.y; this->actor.shape.rot = this->actor.world.rot; this->actor.prevPos = this->actor.world.pos; } this->cutsceneAction = csFunctionIdx; - sCutsceneInitFuncs[csFunctionIdx](this, play, playerAction); + sCutsceneInitFuncs[csFunctionIdx](this, play, playerCue); } - sCutsceneActionFuncs[this->cutsceneAction](this, play, playerAction); + sCutsceneActionFuncs[this->cutsceneAction](this, play, playerCue); } } } @@ -2925,7 +2925,7 @@ void EnHorse_UpdateHorsebackArchery(EnHorse* this, PlayState* play) { if (((this->hbaFlags & 1) || (this->hbaTimer > 45)) && (sp28 != 1) && (gSaveContext.minigameStatus != MINIGAME_STATUS_END)) { - gSaveContext.save.cutscene = 0; + gSaveContext.save.cutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_64; } @@ -3108,28 +3108,28 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { } } -void func_80883B70(EnHorse* this, CsCmdActorAction* action) { - this->actor.world.pos.x = action->startPos.x; - this->actor.world.pos.y = action->startPos.y; - this->actor.world.pos.z = action->startPos.z; +void func_80883B70(EnHorse* this, CsCmdActorCue* cue) { + this->actor.world.pos.x = cue->startPos.x; + this->actor.world.pos.y = cue->startPos.y; + this->actor.world.pos.z = cue->startPos.z; - this->actor.world.rot.y = action->urot.y; + this->actor.world.rot.y = cue->rot.y; this->actor.shape.rot = this->actor.world.rot; this->actor.prevPos = this->actor.world.pos; } -void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - func_80883B70(this, action); +void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + func_80883B70(this, cue); this->animIndex = ENHORSE_ANIM_IDLE; - this->unk_3E0 = 1; + this->cueId = 1; this->stateFlags &= ~ENHORSE_SANDDUST_SOUND; Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f); this->stateFlags |= ENHORSE_SANDDUST_SOUND; } -void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { EnHorse_IdleAnimSounds(this, play); if (SkelAnime_Update(&this->skin.skelAnime)) { this->animIndex = ENHORSE_ANIM_IDLE; @@ -3138,74 +3138,74 @@ void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorAction* action) { } } -void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - func_80883B70(this, action); - this->unk_3E0 = 2; +void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + func_80883B70(this, cue); + this->cueId = 2; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00A8DC, 0.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00A8DC), ANIMMODE_ONCE, 0.0f); } -void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { SkelAnime_Update(&this->skin.skelAnime); } -void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - func_80883B70(this, action); - this->unk_3E0 = 3; +void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + func_80883B70(this, cue); + this->cueId = 3; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00A8DC, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00A8DC), ANIMMODE_ONCE, -3.0f); Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } -void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { if (SkelAnime_Update(&this->skin.skelAnime)) { Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00B3E0, 1.0f, 11.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00B3E0), ANIMMODE_ONCE, 0.0f); } } -void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - func_80883B70(this, action); - this->unk_3E0 = 4; +void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + func_80883B70(this, cue); + this->cueId = 4; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00AD08, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00AD08), ANIMMODE_ONCE, -3.0f); } -void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { if (Animation_OnFrame(&this->skin.skelAnime, Animation_GetLastFrame(&object_horse_link_child_Anim_00AD08) - 1.0f)) { Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } SkelAnime_Update(&this->skin.skelAnime); } -void func_80884010(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - func_80883B70(this, action); - this->unk_3E0 = 5; +void func_80884010(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + func_80883B70(this, cue); + this->cueId = 5; this->animIndex = ENHORSE_ANIM_WALK; Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f); } -void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { EnHorse_PlayWalkingSound(this); - Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530); + Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel); if (SkelAnime_Update(&this->skin.skelAnime)) { Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f); } } -void func_80884194(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - func_80883B70(this, action); - this->unk_3E0 = 6; +void func_80884194(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + func_80883B70(this, cue); + this->cueId = 6; this->animIndex = ENHORSE_ANIM_GALLOP; Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f); func_8087C1C0(this); } -void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530); +void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel); if (SkelAnime_Update(&this->skin.skelAnime)) { Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f); @@ -3213,36 +3213,36 @@ void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorAction* action) { } } -void func_80884314(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80884314(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 20.0f); - func_80883B70(this, action); - this->unk_3E0 = 7; + func_80883B70(this, cue); + this->cueId = 7; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D178, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00D178), ANIMMODE_ONCE, 0.0f); Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } -void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { SkelAnime_Update(&this->skin.skelAnime); if (this->curFrame > 42.0f) { if (((s32)this->curFrame % 11) == 0) { func_8087C1C0(this); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530); + Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel); } } -void func_80884444(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80884444(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 20.0f); - func_80883B70(this, action); + func_80883B70(this, cue); this->cutsceneAction = 8; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D4E8, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00D4E8), ANIMMODE_ONCE, 0.0f); func_8087C1C0(this); } -void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530); +void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel); if (SkelAnime_Update(&this->skin.skelAnime)) { Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D4E8, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00D4E8), ANIMMODE_ONCE, 0.0f); @@ -3250,17 +3250,17 @@ void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorAction* action) { } } -void func_80884564(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_80884564(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 20.0f); - func_80883B70(this, action); + func_80883B70(this, cue); this->cutsceneAction = 8; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00BDE0, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00BDE0), ANIMMODE_ONCE, -3.0f); func_8087C1C0(this); } -void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530); +void func_80884604(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel); if (SkelAnime_Update(&this->skin.skelAnime)) { Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00BDE0, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00BDE0), ANIMMODE_ONCE, 0.0f); @@ -3271,48 +3271,48 @@ void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action) { } } -void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { Actor_Kill(&this->actor); } -void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorAction* action) { +void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { } void func_808846F0(EnHorse* this, PlayState* play) { this->playerControlled = false; this->action = ENHORSE_ACTION_21; - this->unk_3E0 = -1; + this->cueId = -1; this->actor.speed = 0.0f; } void func_80884718(EnHorse* this, PlayState* play) { - CsCmdActorAction* action; + CsCmdActorCue* cue; - if (Cutscene_CheckActorAction(play, 0x70)) { - this->unk_530 = Cutscene_GetActorActionIndex(play, 0x70); - action = play->csCtx.actorActions[this->unk_530]; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_112)) { + this->cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_112); + cue = play->csCtx.actorCues[this->cueChannel]; this->unk_1EC |= 0x20; - if (this->unk_3E0 != action->action) { - if (this->unk_3E0 == -1) { - this->actor.world.pos.x = action->startPos.x; - this->actor.world.pos.y = action->startPos.y; - this->actor.world.pos.z = action->startPos.z; + if (this->cueId != cue->id) { + if (this->cueId == -1) { + this->actor.world.pos.x = cue->startPos.x; + this->actor.world.pos.y = cue->startPos.y; + this->actor.world.pos.z = cue->startPos.z; - this->actor.world.rot.y = action->urot.y; + this->actor.world.rot.y = cue->rot.y; this->actor.shape.rot = this->actor.world.rot; this->actor.prevPos = this->actor.world.pos; } - this->unk_3E0 = action->action; - if (D_808890F0[this->unk_3E0] != NULL) { - D_808890F0[this->unk_3E0](this, play, action); + this->cueId = cue->id; + if (D_808890F0[this->cueId] != NULL) { + D_808890F0[this->cueId](this, play, cue); } } - if (D_8088911C[this->unk_3E0] != NULL) { - D_8088911C[this->unk_3E0](this, play, action); + if (D_8088911C[this->cueId] != NULL) { + D_8088911C[this->cueId](this, play, cue); } } } @@ -4227,7 +4227,7 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) { EnHorse_RegenBoost(this, play); } - if (ActorCutscene_GetCurrentIndex() != -1) { + if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) { thisx->speed = 0.0f; } 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 97ab2c898..b2c58bcad 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -11,7 +11,7 @@ struct EnIn; typedef void (*EnHorseActionFunc)(struct EnHorse*, PlayState*); typedef void (*EnHorsePostdrawFunc)(struct EnHorse*, PlayState*); -typedef void (*EnHorseCsFunc)(struct EnHorse*, PlayState*, CsCmdActorAction*); +typedef void (*EnHorseCsFunc)(struct EnHorse*, PlayState*, CsCmdActorCue*); #define ENHORSE_BOOST (1 << 0) /* 0x1 */ #define ENHORSE_BOOST_DECEL (1 << 1) /* 0x2 */ @@ -190,7 +190,7 @@ typedef struct EnHorse { /* 0x3BC */ Vec3f frontLeftHoof; /* 0x3C8 */ Vec3f backRightHoof; /* 0x3D4 */ Vec3f backLeftHoof; - /* 0x3E0 */ s32 unk_3E0; + /* 0x3E0 */ s32 cueId; /* 0x3E4 */ UNK_TYPE1 unk_3E4[0x4]; /* 0x3E8 */ f32 unk_3E8; /* 0x3EC */ s16 unk_3EC; @@ -198,7 +198,7 @@ typedef struct EnHorse { /* 0x48A */ Vec3s morphTable[OBJECT_HA_1_LIMB_MAX]; /* 0x528 */ f32 unk_528; /* 0x52C */ s32 unk_52C; - /* 0x530 */ s32 unk_530; + /* 0x530 */ s32 cueChannel; /* 0x534 */ s32 unk_534; /* 0x538 */ s32 unk_538; /* 0x53C */ s32 unk_53C; 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 8ecc26857..4d535292f 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -225,7 +225,7 @@ void EnHs_SceneTransitToBunnyHoodDialogue(EnHs* this, PlayState* play) { void func_80953354(EnHs* this, PlayState* play) { if (!Play_InCsMode(play)) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = EnHs_SceneTransitToBunnyHoodDialogue; } } 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 fde467ddc..e053a8528 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -320,49 +320,49 @@ void func_80BF15EC(EnIg* this) { } } -s32 func_80BF16C8(EnIg* this, s16 arg1) { +s32 func_80BF16C8(EnIg* this, s16 csId) { s32 ret = false; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(arg1); - } else if (ActorCutscene_GetCanPlayNext(arg1)) { - ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(csId); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); ret = true; } else { - ActorCutscene_SetIntentToPlay(arg1); + CutsceneManager_Queue(csId); } return ret; } -s16 func_80BF1744(EnIg* this, s32 arg1) { - s16 cs = -1; +s16 func_80BF1744(EnIg* this, s32 numCutscenes) { + s16 csId = CS_ID_NONE; s32 i; if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - cs = this->actor.child->cutscene; - for (i = 0; i < arg1; i++) { - cs = ActorCutscene_GetAdditionalCutscene(cs); + csId = this->actor.child->csId; + for (i = 0; i < numCutscenes; i++) { + csId = CutsceneManager_GetAdditionalCsId(csId); } } - return cs; + return csId; } s32 func_80BF17BC(EnIg* this, PlayState* play) { s32 pad; - s16 sp2A; + s16 csId; s32 ret; - sp2A = func_80BF1744(this, 0); + csId = func_80BF1744(this, 0); ret = false; switch (this->unk_3F6) { case 0: - if (func_80BF16C8(this, sp2A)) { + if (func_80BF16C8(this, csId)) { case 2: case 4: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), this->actor.child); } this->unk_3F6++; @@ -373,17 +373,17 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { case 1: case 3: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) { - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); this->unk_3F6 = 5; } else { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor); } this->unk_3F6++; ret = true; break; case 5: - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); this->unk_3F6++; ret = true; break; 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 5c1244faa..fc7fafdcf 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -651,7 +651,7 @@ void EnIk_ReactToAttack(EnIk* this, PlayState* play) { } if (SkelAnime_Update(&this->skelAnime)) { if (this->subCamId != SUB_CAM_ID_DONE) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); this->subCamId = SUB_CAM_ID_DONE; EnIk_SetupIdle(this); } else { @@ -693,7 +693,7 @@ void EnIk_Die(EnIk* this, PlayState* play) { } if (this->timer == 0) { Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xB0); - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); Actor_Kill(&this->actor); } } @@ -723,7 +723,7 @@ void EnIk_Frozen(EnIk* this, PlayState* play) { } void EnIk_SetupCutscene(EnIk* this) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actor.speed = 0.0f; if (this->actor.colChkInfo.health != 0) { func_800BE504(&this->actor, &this->colliderCylinder); @@ -735,10 +735,10 @@ void EnIk_PlayCutscene(EnIk* this, PlayState* play) { Vec3f subCamEye; this->invincibilityFrames = 12; - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - if (this->actor.cutscene != -1) { - ActorCutscene_StartAndSetFlag(this->actor.cutscene, &this->actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + if (CutsceneManager_IsNext(this->actor.csId)) { + if (this->actor.csId != CS_ID_NONE) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->actor.csId, &this->actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); subCamEye.x = (Math_SinS((this->actor.shape.rot.y - 0x2000)) * 120.0f) + this->actor.focus.pos.x; subCamEye.y = this->actor.focus.pos.y + 20.0f; subCamEye.z = (Math_CosS((this->actor.shape.rot.y - 0x2000)) * 120.0f) + this->actor.focus.pos.z; @@ -750,7 +750,7 @@ void EnIk_PlayCutscene(EnIk* this, PlayState* play) { EnIk_SetupDie(this); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 e90ddcafd..84ed7a605 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -354,7 +354,7 @@ void func_8095E204(EnIshi* this, PlayState* play) { for (i = 0; i < 3; i++) { if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1, - this->actor.cutscene, this->actor.halfDaysBits, NULL) == NULL) { + this->actor.csId, this->actor.halfDaysBits, NULL) == NULL) { break; } } @@ -660,7 +660,7 @@ void func_8095EBDC(EnIshi* this, PlayState* play) { void func_8095F060(EnIshi* this) { this->actor.flags |= ACTOR_FLAG_10; - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_8095F0A4; } @@ -668,15 +668,15 @@ void func_8095F0A4(EnIshi* this, PlayState* play) { s32 pad; s32 sp28 = ENISHI_GET_1(&this->actor); - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, D_8095F6D4[sp28], D_8095F6D0[sp28]); D_8095F6D8[sp28](&this->actor, play); D_8095F6E0[sp28](this, play); this->actor.draw = NULL; func_8095F180(this); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -685,9 +685,9 @@ void func_8095F180(EnIshi* this) { } void func_8095F194(EnIshi* this, PlayState* play) { - if (this->actor.cutscene < 0) { + if (this->actor.csId < 0) { Actor_Kill(&this->actor); - } else if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { + } else if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { Actor_Kill(&this->actor); } } 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 4ef7ee42a..451b9e553 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -251,32 +251,32 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) { return reached; } -s16 EnJg_GetCutsceneForTeachingLullabyIntro(EnJg* this) { +s16 EnJg_GetCsIdForTeachingLullabyIntro(EnJg* this) { s16 temp = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; if (temp > 0) { - return this->actor.cutscene; + return this->actor.csId; } - return ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + return CutsceneManager_GetAdditionalCsId(this->actor.csId); } void EnJg_SetupGoronShrineCheer(EnJg* this) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); if (this->focusedShrineGoronParam == 10) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { this->actionFunc = EnJg_GoronShrineTalk; } else { - this->cutscene = 0x7C; + this->csId = CS_ID_GLOBAL_TALK; } } else { - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->actionFunc = EnJg_GoronShrineCheer; switch (this->textId) { @@ -374,7 +374,7 @@ void EnJg_GoronShrineTalk(EnJg* this, PlayState* play) { } void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { + if (CutsceneManager_IsNext(this->csId)) { switch (this->textId) { case 0xDD0: // The greatest Goron hero of all? case 0xDD2: // The immortal Goron? @@ -383,26 +383,26 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) { case 0xDD6: // Darmani, greatest in the world! // Focus on a specifc Goron for these lines this->shrineGoron = EnJg_GetShrineGoronToFocusOn(play, this->focusedShrineGoronParam); - ActorCutscene_Start(this->cutscene, this->shrineGoron); + CutsceneManager_Start(this->csId, this->shrineGoron); Camera_SetTargetActor(play->cameraPtrs[CAM_ID_MAIN], this->shrineGoron); break; default: // Focus on the whole group for these lines - ActorCutscene_Start(this->cutscene, &this->actor); + CutsceneManager_Start(this->csId, &this->actor); Camera_SetTargetActor(play->cameraPtrs[CAM_ID_MAIN], this->shrineGoron); break; } this->actionFunc = EnJg_GoronShrineTalk; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { if (this->focusedShrineGoronParam == 10) { this->actionFunc = EnJg_GoronShrineTalk; } else { - ActorCutscene_Stop(0x7C); + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } @@ -514,11 +514,11 @@ void EnJg_Talk(EnJg* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; - this->cutscene = EnJg_GetCutsceneForTeachingLullabyIntro(this); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + this->csId = EnJg_GetCsIdForTeachingLullabyIntro(this); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->actionFunc = EnJg_TeachLullabyIntro; } } else { @@ -609,27 +609,27 @@ void EnJg_EndFrozenInteraction(EnJg* this, PlayState* play) { } void EnJg_TeachLullabyIntro(EnJg* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->actor); this->actionFunc = EnJg_LullabyIntroCutsceneAction; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { s32 pad; - if (Cutscene_CheckActorAction(play, 470)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 470); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_470)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_470); - if (this->csAction != play->csCtx.actorActions[actionIndex]->action) { - this->csAction = play->csCtx.actorActions[actionIndex]->action; + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; - switch (play->csCtx.actorActions[actionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->cutsceneAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE; if (this->drum != NULL) { @@ -688,7 +688,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { this->drum = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_OBJ_JG_GAKKI, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, this->actor.shape.rot.z, - this->actor.params, this->actor.cutscene, this->actor.halfDaysBits, NULL); + this->actor.params, this->actor.csId, this->actor.halfDaysBits, NULL); } if (this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) { @@ -699,7 +699,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { } } } else { - this->csAction = 99; + this->cueId = 99; this->freezeTimer = 1000; SET_WEEKEVENTREG(WEEKEVENTREG_24_40); this->actionFunc = EnJg_Idle; @@ -758,10 +758,10 @@ s32 EnJg_GetNextTextId(EnJg* this) { case 0xDCF: // Spring has come thanks to you this->focusedShrineGoronParam = 3; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->actionFunc = EnJg_GoronShrineCheer; return 0xDD0; // The greatest Goron hero of all? @@ -949,7 +949,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); if (!EN_JG_IS_IN_GORON_SHRINE(thisx)) { - if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7) && (play->csCtx.currentCsIndex == 0)) { + if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7) && (play->csCtx.scriptIndex == 0)) { // This is the elder that appears in the cutscene for learning the full Goron Lullaby. this->animIndex = EN_JG_ANIM_IDLE; this->action = EN_JG_ACTION_LULLABY_INTRO_CS; @@ -968,7 +968,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) { } else { // This is the elder that appears in Goron Shrine in spring. this->animIndex = EN_JG_ANIM_IDLE; - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnJg_GoronShrineIdle; } 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 757a8bd86..ad8eee0a8 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h @@ -32,9 +32,9 @@ typedef struct EnJg { /* 0x3A4 */ Vec3f breathPos; /* 0x3B0 */ Vec3f breathVelocity; /* 0x3BC */ Vec3f breathAccel; - /* 0x3C8 */ s16 cutscene; + /* 0x3C8 */ s16 csId; /* 0x3CA */ u8 cutsceneAnimIndex; - /* 0x3CB */ u8 csAction; + /* 0x3CB */ u8 cueId; /* 0x3CC */ u16 flags; /* 0x3CE */ u16 textId; /* 0x3D0 */ u8 focusedShrineGoronParam; 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 263b4fab4..5efca1bcd 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 @@ -231,15 +231,15 @@ void func_80C13F88(EnJgameTsn* this) { } void func_80C13F9C(EnJgameTsn* this, PlayState* play) { - if (this->actor.cutscene != -1) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (this->actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); func_80C14030(this); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } else { func_80C14030(this); @@ -268,8 +268,8 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } func_80C13B74(this); } @@ -468,8 +468,8 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { break; case 0x109E: - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } Message_CloseTextbox(play); func_80C1476C(this, play); 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 f6056664f..8f48622c8 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -76,7 +76,7 @@ Vec3f D_8096AC30 = { 500.0f, -500.0f, 0.0f }; void EnJs_Init(Actor* thisx, PlayState* play) { s32 pad; - s16 cs; + s16 csId; s32 i; EnJs* this = THIS; @@ -92,17 +92,17 @@ void EnJs_Init(Actor* thisx, PlayState* play) { this->actor.terminalVelocity = -9.0f; this->actor.gravity = -1.0f; - cs = this->actor.cutscene; + csId = this->actor.csId; - for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) { - this->cutscenes[i] = cs; - if (cs != -1) { - this->actor.cutscene = cs; - cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } - this->cutsceneIndex = -1; + this->csIdIndex = -1; switch (ENJS_GET_TYPE(&this->actor)) { case 0: @@ -511,17 +511,17 @@ s32 func_809695FC(EnJs* this, PlayState* play) { } void func_80969688(EnJs* this) { - if (this->cutsceneIndex != -1) { - if (ActorCutscene_GetCurrentIndex() == this->cutscenes[this->cutsceneIndex]) { - ActorCutscene_Stop(this->cutscenes[this->cutsceneIndex]); + if (this->csIdIndex != -1) { + if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) { + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } - this->cutsceneIndex = -1; + this->csIdIndex = -1; } } -void func_809696EC(EnJs* this, s16 arg1) { +void func_809696EC(EnJs* this, s16 csIdIndex) { func_80969688(this); - this->cutsceneIndex = arg1; + this->csIdIndex = csIdIndex; } void func_8096971C(EnJs* this, PlayState* play) { @@ -1019,14 +1019,14 @@ void EnJs_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if ((this->cutsceneIndex != -1) && (ActorCutscene_GetCurrentIndex() != this->cutscenes[this->cutsceneIndex])) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]); - } else if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) { - ActorCutscene_Start(this->cutscenes[this->cutsceneIndex], &this->actor); + if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } } diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.h b/src/overlays/actors/ovl_En_Js/z_en_js.h index 4508e4944..c4dd3e3a2 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.h +++ b/src/overlays/actors/ovl_En_Js/z_en_js.h @@ -24,8 +24,8 @@ typedef struct EnJs { /* 0x2B8 */ u16 unk_2B8; /* 0x2BA */ s16 maskType; /* 0x2BC */ s16 unk_2BC; - /* 0x2BE */ s16 cutscenes[2]; - /* 0x2C2 */ s16 cutsceneIndex; + /* 0x2BE */ s16 csIdList[2]; + /* 0x2C2 */ s16 csIdIndex; /* 0x2C4 */ EnJsActionFunc actionFunc; } EnJs; // size = 0x2C8 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 e4e01467f..7d8f46f91 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -298,7 +298,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { this->bodyCollider.dim.radius = 20; this->bodyCollider.dim.height = 65; this->bodyCollider.dim.yShift = 0; - this->unk_2D6 = this->picto.actor.cutscene; + this->csId = this->picto.actor.csId; this->picto.actor.world.pos.y = player->actor.world.pos.y + 160.0f; this->picto.validationFunc = EnKaizoku_ValidatePictograph; this->picto.actor.flags |= ACTOR_FLAG_400; @@ -474,14 +474,14 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { break; } - if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); return; } - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); func_800B7298(play, &this->picto.actor, 0x15); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; sp54 = (this->unk_2CA * 4) + this->unk_2C8; @@ -609,7 +609,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { case 7: if (this->unk_598 == 0) { func_800B7298(play, &this->picto.actor, 6); - ActorCutscene_Stop(this->unk_2D6); + CutsceneManager_Stop(this->csId); this->unk_59C = 0; this->subCamId = 0; this->picto.actor.flags &= ~ACTOR_FLAG_100000; @@ -666,15 +666,15 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { void func_80B86804(EnKaizoku* this, PlayState* play) { if (this->subCamId == 0) { - if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); return; } - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); } func_800B7298(play, &this->picto.actor, 0x60); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->unk_2B2 = 30; this->picto.actor.flags &= ~ACTOR_FLAG_1; this->unk_598 = 0; @@ -724,7 +724,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); func_800B7298(play, &this->picto.actor, 6); - ActorCutscene_Stop(this->unk_2D6); + CutsceneManager_Stop(this->csId); this->subCamId = 0; play->nextEntrance = play->setupExitList[this->exitIndex]; gSaveContext.nextCutsceneIndex = 0; @@ -863,7 +863,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { this->unk_59C = 0; this->subCamId = 0; func_800B7298(play, &this->picto.actor, 6); - ActorCutscene_Stop(this->unk_2D6); + CutsceneManager_Stop(this->csId); if (this->switchFlag >= 0) { Flags_SetSwitch(play, this->switchFlag); } @@ -1716,12 +1716,12 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { if (curFrame >= 25.0f) { player = GET_PLAYER(play); if (this->subCamId == 0) { - if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); return; } - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); } Math_Vec3f_Copy(&this->unk_3C4, &gZeroVec3f); @@ -1776,12 +1776,12 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { this->subCamId = 0; this->picto.actor.flags |= ACTOR_FLAG_100000; - if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); this->actionFunc = func_80B86804; } else { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->actionFunc = func_80B86804; } return; @@ -1794,12 +1794,12 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { this->subCamId = 0; this->picto.actor.flags |= ACTOR_FLAG_100000; - if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { - ActorCutscene_SetIntentToPlay(this->unk_2D6); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); this->actionFunc = func_80B86804; } else { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->actionFunc = func_80B86804; } return; 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 ad161088e..6366c4f7f 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -58,7 +58,7 @@ typedef struct EnKaizoku { /* 0x2D0 */ s16 unk_2D0; /* 0x2D2 */ s16 swordState; /* 0x2D4 */ s16 exitIndex; - /* 0x2D6 */ s16 unk_2D6; + /* 0x2D6 */ s16 csId; /* 0x2D8 */ u8 unk_2D8; /* 0x2D9 */ u8 unk_2D9; /* 0x2DC */ f32 frameCount; 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 7af84b5e4..19fd2c19f 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -143,7 +143,7 @@ void EnKakasi_Destroy(Actor* thisx, PlayState* play) { void EnKakasi_Init(Actor* thisx, PlayState* play) { EnKakasi* this = THIS; - s32 tempCutscene; + s32 csId; s32 i; Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80); @@ -169,10 +169,10 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->picto.actor, 0.01f); i = 0; - tempCutscene = this->picto.actor.cutscene; - while (tempCutscene != -1) { + csId = this->picto.actor.csId; + while (csId != CS_ID_NONE) { //! FAKE: - tempCutscene = ActorCutscene_GetAdditionalCutscene(this->actorCutscenes[i] = tempCutscene); + csId = CutsceneManager_GetAdditionalCsId(this->csIdList[i] = csId); i++; } @@ -418,7 +418,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { if (this->talkState == TEXT_STATE_5) { // bad song input if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) { - func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); } // after timeskip @@ -446,17 +446,17 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } else if (this->picto.actor.textId == 0x165D || this->picto.actor.textId == 0x165F || this->picto.actor.textId == 0x1660 || this->picto.actor.textId == 0x1652) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[0]); this->actionFunc = EnKakasi_DancingRemark; } else { - if (!ActorCutscene_GetCanPlayNext(this->actorCutscenes[0])) { - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); this->actionFunc = EnKakasi_DancingRemark; } else { - ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->actionFunc = EnKakasi_DancingRemark; } } @@ -561,19 +561,19 @@ void EnKakasi_OcarinaRemark(EnKakasi* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { func_80152434(play, 0x35); this->unkState1A8 = 0; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[0]); this->actionFunc = EnKakasi_TeachingSong; - } else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) { - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + } else if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); this->actionFunc = EnKakasi_TeachingSong; } else { this->unkState1A8 = 1; - ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos); this->actionFunc = EnKakasi_TeachingSong; } @@ -586,17 +586,17 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { EnKakasi_CheckPlayerPosition(this, play); Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0); if (this->unkState1A8 == 0) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[0]); return; } - if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) { - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); return; } - ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos); this->unkState1A8 = 1; this->unkState1A8 = 1; @@ -619,7 +619,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { if (play->msgCtx.ocarinaMode == 4) { // song failed this->unk190 = 0; this->unkCounter1A4 = 0; - ActorCutscene_Stop(this->actorCutscenes[0]); + CutsceneManager_Stop(this->csIdList[0]); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_YASE_DEAD); if (this) {} this->unkState196 = 2; @@ -652,7 +652,7 @@ void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) { } void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play) { - ActorCutscene_Stop(this->actorCutscenes[0]); + CutsceneManager_Stop(this->csIdList[0]); play->msgCtx.ocarinaMode = 4; this->unk190 = 0; this->unkCounter1A4 = 0; @@ -699,18 +699,18 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { } if (this->unkState1A8 == 0) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[0]); return; } - if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) { - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); return; } Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos); - ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_86); this->unkState1A8 = 1; } @@ -744,7 +744,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { } if (this->picto.actor.textId == 0x1648) { - func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_WAIT); this->picto.actor.textId = 0x1649; if (this->animIndex != ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); @@ -789,14 +789,14 @@ void EnKakasi_DancingRemark(EnKakasi* this, PlayState* play) { u32 currentDay = gSaveContext.save.day; this->unkState196 = 3; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); - } else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) { - ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[0]); + } else if (!CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Queue(this->csIdList[0]); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); if (currentDay == 3 && gSaveContext.save.isNight) { EnKakasi_SetupDigAway(this); } else { @@ -1014,8 +1014,8 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) { Math_ApproachF(&this->picto.actor.shape.yOffset, -6000.0f, 0.5f, 200.0f); if (fabsf(this->picto.actor.shape.yOffset + 6000.0f) < 10.0f) { SET_WEEKEVENTREG(WEEKEVENTREG_79_08); - func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_6); - ActorCutscene_Stop(this->actorCutscenes[0]); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); + CutsceneManager_Stop(this->csIdList[0]); this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE; this->songSummonDist = 80.0f; EnKakasi_SetupIdleUnderground(this); @@ -1040,22 +1040,20 @@ void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) { } void EnKakasi_SetupRiseOutOfGround(EnKakasi* this, PlayState* play) { - s32 cutsceneIndex; + s32 csIdIndex; - cutsceneIndex = 0; + csIdIndex = 0; if (this->aboveGroundStatus == ENKAKASI_ABOVE_GROUND_TYPE) { - cutsceneIndex = 1; + csIdIndex = 1; } - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actorCutscenes[cutsceneIndex]); - - } else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[cutsceneIndex]) == 0) { - ActorCutscene_SetIntentToPlay(this->actorCutscenes[cutsceneIndex]); - + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[csIdIndex]); + } else if (!CutsceneManager_IsNext(this->csIdList[csIdIndex])) { + CutsceneManager_Queue(this->csIdList[csIdIndex]); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[cutsceneIndex], &this->picto.actor); + CutsceneManager_StartWithPlayerCs(this->csIdList[csIdIndex], &this->picto.actor); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE); this->picto.actor.draw = EnKakasi_Draw; this->unkState196 = 6; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h index c278ef050..cff35d183 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h @@ -21,7 +21,7 @@ typedef struct EnKakasi { /* 0x1A4 */ s32 unkCounter1A4; // counter, counts up to F while he digs away, reused elsewhere /* 0x1A8 */ s32 unkState1A8; /* 0x1AC */ s16 talkState; - /* 0x1AE */ s16 actorCutscenes[3]; + /* 0x1AE */ s16 csIdList[3]; /* 0x1B4 */ f32 animeFrameCount; /* 0x1B8 */ f32 unkHeight; /* 0x1BC */ Vec3f unk1BC; // set by post limbdraw func for one limb 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 eceaac242..c72aa9f5f 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 @@ -680,9 +680,9 @@ void func_80B27774(EnKendoJs* this, PlayState* play) { } void func_80B2783C(EnKendoJs* this, PlayState* play) { - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { Camera_ChangeDataIdx(play->cameraPtrs[CAM_ID_MAIN], - ActorCutscene_GetCutscene(this->actor.cutscene)->csCamSceneDataId); + CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId); } } 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 d85924b14..f30f55a33 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -45,7 +45,7 @@ ActorInit En_Kgy_InitVars = { void EnKgy_Init(Actor* thisx, PlayState* play) { EnKgy* this = THIS; - s16 cs; + s16 csId; s32 i; Actor_SetScale(&this->actor, 0.01f); @@ -58,7 +58,8 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { 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)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { Flags_SetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); play->envCtx.lightSettingOverride = 1; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); @@ -86,12 +87,12 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80B42D28; } - cs = this->actor.cutscene; - for (i = 0; i < ARRAY_COUNT(this->unk_2D4); i++) { - this->unk_2D4[i] = cs; - if (cs != -1) { - this->actor.cutscene = cs; - cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + csId = this->actor.csId; + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } @@ -227,14 +228,14 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { } } - if ((this->unk_2E0 != -1) && (ActorCutscene_GetCurrentIndex() != this->unk_2D4[this->unk_2E0])) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_2D4[this->unk_2E0]); - } else if (ActorCutscene_GetCanPlayNext(this->unk_2D4[this->unk_2E0])) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D4[this->unk_2E0], &this->actor); + if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->unk_2D4[this->unk_2E0]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } @@ -304,7 +305,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { case 0: this->unk_2B4 = this->unk_2A8; this->actor.focus.pos = this->unk_2A8; - this->unk_2E0 = 0; + this->csIdIndex = 0; break; case 1: @@ -312,7 +313,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { this->unk_2B4 = this->zubora->actor.focus.pos; this->actor.focus.pos = this->zubora->actor.focus.pos; } - this->unk_2E0 = 1; + this->csIdIndex = 1; break; case 2: @@ -320,7 +321,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { this->unk_2B4 = this->iceBlock->actor.world.pos; this->actor.focus.pos = this->iceBlock->actor.focus.pos; } - this->unk_2E0 = 2; + this->csIdIndex = 2; break; case 3: @@ -328,7 +329,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { if (this->zubora != NULL) { this->actor.focus.pos = this->zubora->actor.focus.pos; } - this->unk_2E0 = 3; + this->csIdIndex = 3; break; case 4: @@ -336,13 +337,13 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { this->unk_2B4 = this->zubora->actor.focus.pos; this->actor.focus.pos = this->zubora->actor.focus.pos; } - this->unk_2E0 = 4; + this->csIdIndex = 4; break; } } void func_80B41368(EnKgy* this, PlayState* play, s32 arg2) { - ActorCutscene_Stop(this->unk_2D4[this->unk_2E0]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); func_80B411DC(this, play, arg2); this->unk_2E6 = 20; this->unk_29C |= 2; @@ -353,8 +354,8 @@ void func_80B413C8(EnKgy* this) { this->unk_2B4 = sp1C; this->actor.focus.pos = sp1C; - ActorCutscene_Stop(this->unk_2D4[this->unk_2E0]); - this->unk_2E0 = -1; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = -1; this->unk_2E6 = 0; this->unk_29C &= ~2; } @@ -467,12 +468,12 @@ void func_80B417B8(EnKgy* this, PlayState* play) { void func_80B41858(EnKgy* this, PlayState* play) { func_80B4163C(this, play); - if (ActorCutscene_GetCanPlayNext(this->unk_2D4[5])) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D4[5], &this->actor); + if (CutsceneManager_IsNext(this->csIdList[5])) { + CutsceneManager_StartWithPlayerCs(this->csIdList[5], &this->actor); this->actionFunc = func_80B419B0; func_80B40E18(this, 7); } else { - ActorCutscene_SetIntentToPlay(this->unk_2D4[5]); + CutsceneManager_Queue(this->csIdList[5]); } } @@ -484,7 +485,7 @@ void func_80B418C4(EnKgy* this, PlayState* play) { Message_CloseTextbox(play); this->actor.textId = 0xC4F; func_80B413C8(this); - ActorCutscene_SetIntentToPlay(this->unk_2D4[5]); + CutsceneManager_Queue(this->csIdList[5]); this->actionFunc = func_80B41858; this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; } 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 d9423783d..8207678fd 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -25,8 +25,8 @@ typedef struct EnKgy { /* 0x2C0 */ Vec3f unk_2C0; /* 0x2CC */ Vec3s unk_2CC; /* 0x2D2 */ s16 unk_2D2; - /* 0x2D4 */ s16 unk_2D4[6]; - /* 0x2E0 */ s16 unk_2E0; + /* 0x2D4 */ s16 csIdList[6]; + /* 0x2E0 */ s16 csIdIndex; /* 0x2E2 */ s16 unk_2E2; /* 0x2E4 */ s16 unk_2E4; /* 0x2E6 */ s16 unk_2E6; 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 3e54fd0f9..f3005ca05 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -296,18 +296,18 @@ void EnKujiya_SetupTurnToOpen(EnKujiya* this) { } void EnKujiya_TurnToOpen(EnKujiya* this, PlayState* play) { - if (this->actor.cutscene != -1) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (this->actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } if (!Math_SmoothStepToS(&this->actor.shape.rot.y, 0x7555, 0xA, 0x16C, 0x16C)) { if (this->timer > 20) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } EnKujiya_SetupWait(this); } else { @@ -324,18 +324,18 @@ void EnKujiya_SetupTurnToClosed(EnKujiya* this) { } void EnKujiya_TurnToClosed(EnKujiya* this, PlayState* play) { - if (this->actor.cutscene != -1) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (this->actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } if (!Math_SmoothStepToS(&this->actor.shape.rot.y, 0, 0xA, 0x16C, 0x16C)) { if (this->timer > 20) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } EnKujiya_SetupWait(this); } else { 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 4432fcf6d..b858fc502 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -329,7 +329,7 @@ void EnKusa_SpawnBugs(EnKusa* this, PlayState* play) { for (numBugs = 0; numBugs < 3; numBugs++) { Actor* bug = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1, - this->actor.cutscene, this->actor.halfDaysBits, 0); + this->actor.csId, this->actor.halfDaysBits, 0); if (bug == NULL) { break; 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 e178e7a4e..8e2d194a6 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -100,10 +100,9 @@ void func_80A5B160(EnKusa2* this, PlayState* play) { if (this->unk_194[0] == NULL) { ptr = this->unk_194; - actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_KUSA2, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, - Rand_Next() >> 0x10, 0, 1, this->actor.cutscene, - this->actor.halfDaysBits, NULL); + actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene( + &play->actorCtx, play, ACTOR_EN_KUSA2, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, Rand_Next() >> 0x10, 0, 1, this->actor.csId, this->actor.halfDaysBits, NULL); *ptr = actor; if (*ptr != NULL) { @@ -119,7 +118,7 @@ void func_80A5B160(EnKusa2* this, PlayState* play) { actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_EN_KUSA2, (Math_SinS(temp_s1) * 80.0f) + this->actor.world.pos.x, this->actor.world.pos.y, (Math_CosS(temp_s1) * 80.0f) + this->actor.world.pos.z, 0, Rand_Next() >> 0x10, - 0, 1, this->actor.cutscene, this->actor.halfDaysBits, NULL); + 0, 1, this->actor.csId, this->actor.halfDaysBits, NULL); *ptr = actor; if (*ptr != NULL) { (*ptr)->actor.room = this->actor.room; @@ -160,7 +159,7 @@ void func_80A5B3BC(EnKusa2* this) { void func_80A5B490(EnKusa2* this, PlayState* play) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_KITAN, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, - ENKUSA2_GET_7F00(&this->actor) << 9, this->actor.cutscene, this->actor.halfDaysBits, + ENKUSA2_GET_7F00(&this->actor) << 9, this->actor.csId, this->actor.halfDaysBits, NULL); } 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 0bbbce26a..1242de4ba 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -780,16 +780,16 @@ void EnMa4_SetupBeginEponasSongCs(EnMa4* this) { // Epona's Song cutscene is an ActorCutscene void EnMa4_BeginEponasSongCs(EnMa4* this, PlayState* play) { - s16 cutsceneIndex = this->actor.cutscene; + s16 csId = this->actor.csId; - if (ActorCutscene_GetCanPlayNext(cutsceneIndex) != 0) { - ActorCutscene_Start(cutsceneIndex, &this->actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_Start(csId, &this->actor); EnMa4_SetupEponasSongCs(this); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(cutsceneIndex); + CutsceneManager_Queue(csId); } } @@ -798,17 +798,17 @@ void EnMa4_SetupEponasSongCs(EnMa4* this) { this->actionFunc = EnMa4_EponasSongCs; } -static u16 D_80AC0260 = 99; +static u16 sCueId = 99; void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 120)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 120); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_120)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_120); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - if (play->csCtx.actorActions[actionIndex]->action != D_80AC0260) { - D_80AC0260 = play->csCtx.actorActions[actionIndex]->action; + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + if (sCueId != play->csCtx.actorCues[cueChannel]->id) { + sCueId = play->csCtx.actorCues[cueChannel]->id; this->animTimer = 0; - switch (play->csCtx.actorActions[actionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->hasBow = true; EnMa4_ChangeAnim(this, 1); @@ -822,8 +822,8 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); - if (D_80AC0260 == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); + if (sCueId == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMa4_ChangeAnim(this, 7); } } else { @@ -831,7 +831,7 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); - D_80AC0260 = 99; + sCueId = 99; this->hasBow = true; EnMa4_SetupEndEponasSongCs(this); } 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 89f1582ba..6d0b027eb 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 @@ -1005,14 +1005,14 @@ void EnMaYto_SetupBeginWarmFuzzyFeelingCs(EnMaYto* this) { } void EnMaYto_BeginWarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); EnMaYto_SetupWarmFuzzyFeelingCs(this); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -1021,20 +1021,20 @@ void EnMaYto_SetupWarmFuzzyFeelingCs(EnMaYto* this) { this->actionFunc = EnMaYto_WarmFuzzyFeelingCs; } -static u16 D_80B915F0 = 99; +static u16 sCueId = 99; void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 556)) { - s32 csActionIndex = Cutscene_GetActorActionIndex(play, 556); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_556)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_556); - if (play->csCtx.frames == play->csCtx.actorActions[csActionIndex]->startFrame) { - u16 action = play->csCtx.actorActions[csActionIndex]->action; + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + u16 cueId = play->csCtx.actorCues[cueChannel]->id; if (1) {} - if (action != D_80B915F0) { - D_80B915F0 = action; - switch (action) { + if (cueId != sCueId) { + sCueId = cueId; + switch (cueId) { case 1: EnMaYto_ChangeAnim(this, 0); break; @@ -1051,13 +1051,13 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, csActionIndex); - if (D_80B915F0 == 2 && this->skelAnime.animation == &gCremiaHugStartAnim && + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); + if (sCueId == 2 && this->skelAnime.animation == &gCremiaHugStartAnim && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMaYto_ChangeAnim(this, 20); } } else { - D_80B915F0 = 99; + sCueId = 99; } } @@ -1068,7 +1068,7 @@ void EnMaYto_SetupPostMilkRunWaitDialogueEnd(EnMaYto* this) { void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE || Message_GetState(&play->msgCtx) == TEXT_STATE_5) { if (Message_ShouldAdvance(play) && Message_GetState(&play->msgCtx) == TEXT_STATE_5) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); Message_CloseTextbox(play); } } 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 1987fa72a..edf0e41f2 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 @@ -377,16 +377,16 @@ void EnMaYts_SetupEndCreditsHandler(EnMaYts* this) { this->actionFunc = EnMaYts_EndCreditsHandler; } -static u16 D_80B8E32C = 99; +static u16 sCueId = 99; void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 120)) { - s32 actionIndex = Cutscene_GetActorActionIndex(play, 120); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_120)) { + s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_120); - if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) { - if (play->csCtx.actorActions[actionIndex]->action != D_80B8E32C) { - D_80B8E32C = play->csCtx.actorActions[actionIndex]->action; + if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { + if (sCueId != play->csCtx.actorCues[cueChannel]->id) { + sCueId = play->csCtx.actorCues[cueChannel]->id; this->endCreditsFlag = 0; - switch (play->csCtx.actorActions[actionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->hasBow = true; EnMaYts_ChangeAnim(this, 0); @@ -410,14 +410,14 @@ void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); - if ((D_80B8E32C == 2) && (this->endCreditsFlag == 0) && + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); + if ((sCueId == 2) && (this->endCreditsFlag == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->endCreditsFlag++; EnMaYts_ChangeAnim(this, 5); } } else { - D_80B8E32C = 99; + sCueId = 99; this->hasBow = true; } } 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 513964338..15aa42bda 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -239,7 +239,7 @@ void EnMag_Update(Actor* thisx, PlayState* play) { CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) { - if (!EnvFlags_Get(play, 4)) { + if (!CutsceneFlags_Get(play, 4)) { play_sound(NA_SE_SY_PIECE_OF_HEART); this->state = MAG_STATE_CALLED; this->unk11F00 = 0; @@ -383,16 +383,16 @@ void EnMag_Update(Actor* thisx, PlayState* play) { CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) { if (play->transitionTrigger != TRANS_TRIGGER_START) { Audio_SetCutsceneFlag(false); - D_801BB12C++; - if (D_801BB12C >= 2) { - D_801BB12C = 0; + gOpeningEntranceIndex++; + if (gOpeningEntranceIndex >= 2) { + gOpeningEntranceIndex = 0; } play_sound(NA_SE_SY_PIECE_OF_HEART); gSaveContext.gameMode = GAMEMODE_FILE_SELECT; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_BLACK; play->nextEntrance = ENTRANCE(CUTSCENE, 0); - gSaveContext.save.cutscene = 0; + gSaveContext.save.cutsceneIndex = 0; gSaveContext.sceneLayer = 0; } this->unk11F54 = 15; @@ -438,12 +438,12 @@ void EnMag_Update(Actor* thisx, PlayState* play) { } if (this->state == MAG_STATE_INITIAL) { - if (EnvFlags_Get(play, 3)) { + if (CutsceneFlags_Get(play, 3)) { this->unk11F02 = 40; this->state = MAG_STATE_FADE_IN_MASK_EFFECTS; } } else if (this->state < MAG_STATE_FADE_OUT) { - if (EnvFlags_Get(play, 4)) { + if (CutsceneFlags_Get(play, 4)) { this->state = MAG_STATE_FADE_OUT; } } 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 2a81da583..7ac16e1b0 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -263,7 +263,7 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) { break; case 0xD82: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { Message_ContinueTextbox(play, 0xD83); } else { Message_ContinueTextbox(play, 0xD86); @@ -277,9 +277,9 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) { Message_CloseTextbox(play); EnMinifrog_SpawnDust(this, play); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_NPC_FADEAWAY); - if (this->actor.cutscene != -1) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (this->actor.csId != CS_ID_NONE) { + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } } @@ -289,14 +289,14 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) { } if (this->flags & 1) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); this->flags &= ~1; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } @@ -319,7 +319,7 @@ void EnMinifrog_Idle(EnMinifrog* this, PlayState* play) { EnMinifrog_JumpTimer(this); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnMinifrog_ReturnFrogCutscene; - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { this->flags |= 1; } } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && @@ -366,19 +366,19 @@ void EnMinifrog_CheckChoirSuccess(EnMinifrog* this, PlayState* play) { void EnMinifrog_ContinueChoirCutscene(EnMinifrog* this, PlayState* play) { EnMinifrog_Jump(this); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { EnMinifrog_CheckChoirSuccess(this, play); return; // necessary to match - } else if (ActorCutscene_GetCanPlayNext(0x7C)) { - ActorCutscene_Start(0x7C, NULL); + } else if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + CutsceneManager_Start(CS_ID_GLOBAL_TALK, NULL); EnMinifrog_CheckChoirSuccess(this, play); return; // necessary to match - } else if (this->actor.cutscene != -1 && ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); - ActorCutscene_SetIntentToPlay(0x7C); + } else if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->actor.csId)) { + CutsceneManager_Stop(this->actor.csId); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); return; // necessary to match } else { - ActorCutscene_SetIntentToPlay(0x7C); + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } } @@ -440,20 +440,20 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) { void EnMinifrog_BeginChoirCutscene(EnMinifrog* this, PlayState* play) { EnMinifrog_Jump(this); - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { this->actionFunc = EnMinifrog_SetupNextFrogChoir; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); this->actionFunc = EnMinifrog_SetupNextFrogChoir; this->timer = 5; func_801A1F00(3, NA_BGM_FROG_SONG); this->flags |= 0x100; play->setPlayerTalkAnim(play, &gPlayerAnim_pn_gakkiplay, ANIMMODE_LOOP); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 930fb13d5..616481d85 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -76,7 +76,7 @@ s32 func_809592E0(EnMk* this, s16 index) { void EnMk_Init(Actor* thisx, PlayState* play) { EnMk* this = THIS; - s16 cs; + s16 csId; s32 i; this->actor.terminalVelocity = -4.0f; @@ -101,16 +101,16 @@ void EnMk_Init(Actor* thisx, PlayState* play) { this->unk_27A |= 2; } - cs = this->actor.cutscene; - for (i = 0; i < ARRAY_COUNT(this->unk_276); i++) { - this->unk_276[i] = cs; - if (cs != -1) { - this->actor.cutscene = cs; - cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + csId = this->actor.csId; + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } - this->actor.cutscene = this->unk_276[0]; + this->actor.csId = this->csIdList[0]; } void EnMk_Destroy(Actor* thisx, PlayState* play) { @@ -124,16 +124,16 @@ s32 func_80959524(PlayState* play) { } void func_8095954C(EnMk* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 0x7F)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x7F)); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_127)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127)); - switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x7F)]->action) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127)]->id) { case 1: case 2: case 3: case 4: case 5: - func_809592E0(this, play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x7F)]->action - 1); + func_809592E0(this, play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127)]->id - 1); break; } } else { @@ -147,7 +147,7 @@ void func_80959624(EnMk* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { if (this->unk_27A & 4) { textId = 0xFB9; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { textId = 0xFBC; } else { textId = 0xFBB; @@ -212,7 +212,7 @@ void func_80959844(EnMk* this, PlayState* play) { switch (gSaveContext.save.playerForm) { case PLAYER_FORM_DEKU: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_10)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { textId = 0xFAF; } else { textId = 0xFAE; @@ -224,7 +224,7 @@ void func_80959844(EnMk* this, PlayState* play) { case PLAYER_FORM_GORON: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_08)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { textId = 0xFAB; } else { textId = 0xFAA; @@ -239,7 +239,7 @@ void func_80959844(EnMk* this, PlayState* play) { if (func_80959524(play) > 0) { textId = 0xFA7; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_04)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { textId = 0xFBF; } else { textId = 0xFA6; @@ -283,7 +283,7 @@ void func_80959A24(EnMk* this, PlayState* play) { break; case 0xFA2: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Message_CloseTextbox(play); this->actionFunc = func_80959E18; } else { @@ -314,7 +314,7 @@ void func_80959A24(EnMk* this, PlayState* play) { case 0xFA8: SET_WEEKEVENTREG(WEEKEVENTREG_19_08); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Message_ContinueTextbox(play, 0xFBD); } else { Message_ContinueTextbox(play, 0xFA9); @@ -323,7 +323,7 @@ void func_80959A24(EnMk* this, PlayState* play) { case 0xFAC: SET_WEEKEVENTREG(WEEKEVENTREG_19_10); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Message_ContinueTextbox(play, 0xFBE); } else { Message_ContinueTextbox(play, 0xFAD); @@ -372,7 +372,7 @@ void func_80959C94(EnMk* this, PlayState* play) { void func_80959D28(EnMk* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if ((play->csCtx.state == 0) && (this->actor.cutscene == -1)) { + if ((play->csCtx.state == 0) && (this->actor.csId == CS_ID_NONE)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) { this->unk_27A &= ~1; this->actionFunc = func_80959774; @@ -381,14 +381,14 @@ void func_80959D28(EnMk* this, PlayState* play) { } else { this->actionFunc = func_80959E18; } - this->actor.cutscene = this->unk_276[0]; + this->actor.csId = this->csIdList[0]; } else { - if (this->actor.cutscene != -1) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); - this->actor.cutscene = -1; + if (this->actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); + this->actor.csId = CS_ID_NONE; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } func_8095954C(this, play); @@ -412,13 +412,13 @@ void func_80959E18(EnMk* this, PlayState* play) { play->msgCtx.ocarinaMode = 4; this->actionFunc = func_80959D28; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - this->actor.cutscene = this->unk_276[0]; + this->actor.csId = this->csIdList[0]; SET_WEEKEVENTREG(WEEKEVENTREG_20_40); Item_Give(play, ITEM_SONG_NOVA); } else { - this->actor.cutscene = this->unk_276[1]; + this->actor.csId = this->csIdList[1]; } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80959844(this, play); this->actionFunc = func_80959A24; @@ -449,7 +449,7 @@ void EnMk_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if ((this->unk_27A & 1) && !Cutscene_CheckActorAction(play, 0x7F)) { + if ((this->unk_27A & 1) && !Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_127)) { Actor_TrackPlayer(play, &this->actor, &this->unk_270, &sp38, this->actor.focus.pos); } else { Math_SmoothStepToS(&this->unk_270.x, 0, 6, 0x1838, 0x64); 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 bbf126f4e..518b0406d 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.h +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.h @@ -15,7 +15,7 @@ typedef struct EnMk { /* 0x1D4 */ Vec3s jointTable[OBJECT_MK_LIMB_MAX]; /* 0x222 */ Vec3s morphTable[OBJECT_MK_LIMB_MAX]; /* 0x270 */ Vec3s unk_270; - /* 0x276 */ s16 unk_276[2]; + /* 0x276 */ s16 csIdList[2]; /* 0x27A */ u16 unk_27A; /* 0x27C */ s16 unk_27C; /* 0x280 */ EnMkActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index 3aef8341a..67a0a1e77 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -87,7 +87,7 @@ void EnMm_Init(Actor* thisx, PlayState* play) { func_80965BBC(this); return; } - if (this->actor.cutscene >= 0) { + if (this->actor.csId >= 0) { action = func_80965D3C; } else { action = func_80965DB4; @@ -102,13 +102,13 @@ void EnMm_Destroy(Actor* thisx, PlayState* play) { } void func_80965D3C(EnMm* this, PlayState* play) { - s16 cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + s16 csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); - if (ActorCutscene_GetCanPlayNext(cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); EnMm_SetupAction(this, func_80965DB4); } else { - ActorCutscene_SetIntentToPlay(cutscene); + CutsceneManager_Queue(csId); } } 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 e772e12fa..c94a94b12 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 @@ -235,7 +235,7 @@ s32 EnMttag_UpdateCheckpoints(EnMttag* this, PlayState* play) { s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType) { CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI; play->nextEntrance = ENTRANCE(GORON_RACETRACK, 2); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { // Spring gSaveContext.nextCutsceneIndex = 0xFFF0; } else { @@ -256,7 +256,7 @@ s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF; Message_StartTextbox(play, 0xE95, NULL); // An entrant made a false start - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20); this->actionFunc = EnMttag_PotentiallyRestartRace; } @@ -267,7 +267,7 @@ void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) { */ void EnMttag_ShowCantWinMessage(EnMttag* this, PlayState* play) { Message_StartTextbox(play, 0xE97, NULL); // You can't win now... - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = EnMttag_HandleCantWinChoice; } @@ -275,11 +275,11 @@ void EnMttag_ShowCantWinMessage(EnMttag* this, PlayState* play) { * Shows the cutscene that pans over the race track and shows all five race entrants. */ void EnMttag_ShowIntroCutscene(EnMttag* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = EnMttag_WaitForIntroCutsceneToEnd; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -288,7 +288,7 @@ void EnMttag_ShowIntroCutscene(EnMttag* this, PlayState* play) { * from showing again and starts the race. */ void EnMttag_WaitForIntroCutsceneToEnd(EnMttag* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { SET_WEEKEVENTREG(WEEKEVENTREG_12_02); this->actionFunc = EnMttag_RaceStart; } @@ -421,7 +421,7 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) { if (this->shouldRestartRace) { play->nextEntrance = ENTRANCE(GORON_RACETRACK, 1); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { // Spring gSaveContext.nextCutsceneIndex = 0xFFF0; } else { @@ -433,7 +433,7 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) { play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; Message_CloseTextbox(play); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); Magic_Add(play, MAGIC_FILL_TO_CAPACITY); CLEAR_EVENTINF(EVENTINF_10); @@ -468,7 +468,7 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) { // Keep racing func_8019F208(); Message_CloseTextbox(play); - func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); CLEAR_EVENTINF(EVENTINF_13); this->timer = 100; this->actionFunc = EnMttag_Race; diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index 2d77519bd..4bf4db0e0 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -178,7 +178,7 @@ void func_80A68A78(EnMushi2* this, PlayState* play) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_MUSHI2, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y + (D_80A6B998 + i)->unk_02, this->actor.shape.rot.z, - (D_80A6B998 + i)->unk_00, this->actor.cutscene, this->actor.halfDaysBits, NULL); + (D_80A6B998 + i)->unk_00, this->actor.csId, this->actor.halfDaysBits, NULL); } } 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 b5d558a71..c5a8b2498 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -227,31 +227,31 @@ Actor* func_80BBFF90(EnNb* this, PlayState* play) { return actor; } -s32 func_80BBFFD4(EnNb* this, s16 index) { +s32 func_80BBFFD4(EnNb* this, s16 csId) { s32 ret = false; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(index); - } else if (ActorCutscene_GetCanPlayNext(index)) { - ActorCutscene_StartAndSetUnkLinkFields(index, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(csId); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); ret = true; } else { - ActorCutscene_SetIntentToPlay(index); + CutsceneManager_Queue(csId); } return ret; } -s16 func_80BC0050(EnNb* this, s32 arg1) { - s16 cutscene = this->actor.cutscene; +s16 func_80BC0050(EnNb* this, s32 numCutscenes) { + s16 csId = this->actor.csId; s32 i; - for (i = 0; i < arg1; i++) { - cutscene = ActorCutscene_GetAdditionalCutscene(cutscene); + for (i = 0; i < numCutscenes; i++) { + csId = CutsceneManager_GetAdditionalCsId(csId); } - return cutscene; + return csId; } typedef enum EnNbBehaviour { @@ -269,12 +269,12 @@ typedef enum EnNbBehaviour { s32 func_80BC00AC(Actor* thisx, PlayState* play) { EnNb* this = THIS; - s16 cutscene = func_80BC0050(this, 0); + s16 csId = func_80BC0050(this, 0); s32 ret = false; switch (this->behaviour) { case ENNB_BEHAVIOUR_0: - if (!func_80BBFFD4(this, cutscene)) { + if (!func_80BBFFD4(this, csId)) { break; } // fallthrough @@ -282,7 +282,7 @@ s32 func_80BC00AC(Actor* thisx, PlayState* play) { case ENNB_BEHAVIOUR_4: case ENNB_BEHAVIOUR_6: case ENNB_BEHAVIOUR_8: - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(cutscene)), &this->actor); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor); this->behaviour++; ret = true; break; @@ -292,7 +292,7 @@ s32 func_80BC00AC(Actor* thisx, PlayState* play) { case ENNB_BEHAVIOUR_5: case ENNB_BEHAVIOUR_7: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(cutscene)), + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), this->actor.child); } this->behaviour++; @@ -300,7 +300,7 @@ s32 func_80BC00AC(Actor* thisx, PlayState* play) { break; case ENNB_BEHAVIOUR_9: - ActorCutscene_Stop(cutscene); + CutsceneManager_Stop(csId); this->behaviour++; ret = true; break; @@ -745,7 +745,7 @@ void EnNb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnNb* this = THIS; Vec3f focusTarget; - if ((ActorCutscene_GetCurrentIndex() == -1) && (limbIndex == NB_LIMB_HEAD)) { + if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == NB_LIMB_HEAD)) { Matrix_MultVec3f(&gZeroVec3f, &focusTarget); Math_ApproachF(&thisx->focus.pos.x, focusTarget.x, 0.6f, 10000.0f); Math_ApproachF(&thisx->focus.pos.y, focusTarget.y, 0.6f, 10000.0f); 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 929a3c90d..cd20f489c 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -86,14 +86,14 @@ Actor* func_80B11F44(PlayState* play) { void func_80B11F78(EnOnpuman* this, PlayState* play) { if (play->msgCtx.ocarinaMode == 4) { this->actionFunc = func_80B121D8; - if (this->actor.cutscene != -1) { - ActorCutscene_Stop(this->actor.cutscene); + if (this->actor.csId != CS_ID_NONE) { + CutsceneManager_Stop(this->actor.csId); } } else if (play->msgCtx.ocarinaMode == 3) { play_sound(NA_SE_SY_CORRECT_CHIME); play->msgCtx.ocarinaMode = 4; - if (this->actor.cutscene != -1) { - ActorCutscene_Stop(this->actor.cutscene); + if (this->actor.csId != CS_ID_NONE) { + CutsceneManager_Stop(this->actor.csId); } this->actionFunc = func_80B121D8; } @@ -126,13 +126,13 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) { } } if (this->unk_2A4 & 1) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { this->unk_2A4 &= ~1; - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + } else if (CutsceneManager_IsNext(this->actor.csId)) { this->unk_2A4 &= ~1; - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } 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 2b938a35f..3f10f6771 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -66,7 +66,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BF5F60; this->unk_254 = -1; - this->unk_256 = -1; + this->cueId = -1; this->actor.flags &= ~ACTOR_FLAG_1; switch (ENOSK_GET_F(&this->actor)) { @@ -75,7 +75,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) { this->jointTable, this->morphTable, 7); Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_006808); this->actionFunc = func_80BF656C; - this->unk_258 = 0x210; + this->cueType = CS_CMD_ACTOR_CUE_528; break; case ENOSK_2: @@ -83,7 +83,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) { this->jointTable, this->morphTable, 7); Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_006808); this->actionFunc = func_80BF6A20; - this->unk_258 = 0x211; + this->cueType = CS_CMD_ACTOR_CUE_529; break; default: @@ -92,7 +92,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) { this->jointTable, this->morphTable, 17); Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_0000B8); this->actionFunc = func_80BF61EC; - this->unk_258 = 0x212; + this->cueType = CS_CMD_ACTOR_CUE_530; this->actor.home.rot.z = 0; this->unk_25C = 0.0f; break; @@ -129,12 +129,12 @@ void func_80BF5F60(EnOsk* this, PlayState* play) { } void func_80BF5F70(EnOsk* this) { - if ((this->unk_256 != 1) && (this->unk_256 != 6)) { + if ((this->cueId != 1) && (this->cueId != 6)) { this->actor.draw = EnOsk_Draw; Actor_SetScale(&this->actor, 0.017f); } - switch (this->unk_256) { + switch (this->cueId) { case 1: this->actor.draw = NULL; break; @@ -205,10 +205,10 @@ void func_80BF609C(EnOsk* this, PlayState* play) { void func_80BF61EC(EnOsk* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (Cutscene_CheckActorAction(play, this->unk_258)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->unk_258)); - if (this->unk_256 != play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action) { - this->unk_256 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action; + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { + this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; func_80BF5F70(this); } func_80BF609C(this, play); @@ -216,7 +216,7 @@ void func_80BF61EC(EnOsk* this, PlayState* play) { this->actor.draw = NULL; } - if (this->unk_256 == 6) { + if (this->cueId == 6) { if (this->actor.scale.x > 0.85f * 0.001f) { this->actor.scale.x -= 0.85f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); @@ -229,12 +229,12 @@ void func_80BF61EC(EnOsk* this, PlayState* play) { } void func_80BF6314(EnOsk* this) { - if ((this->unk_256 != 1) && (this->unk_256 != 9)) { + if ((this->cueId != 1) && (this->cueId != 9)) { this->actor.draw = EnOsk_Draw; Actor_SetScale(&this->actor, 0.013f); } - switch (this->unk_256) { + switch (this->cueId) { case 1: this->actor.draw = NULL; break; @@ -329,10 +329,10 @@ void func_80BF656C(EnOsk* this, PlayState* play) { } } - if (Cutscene_CheckActorAction(play, this->unk_258)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->unk_258)); - if (this->unk_256 != play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action) { - this->unk_256 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action; + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { + this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; func_80BF6314(this); } func_80BF6478(this); @@ -340,12 +340,12 @@ void func_80BF656C(EnOsk* this, PlayState* play) { this->actor.draw = NULL; } - if ((this->unk_256 == 2) && (this->actor.scale.x < 13.0f * 0.001f)) { + if ((this->cueId == 2) && (this->actor.scale.x < 13.0f * 0.001f)) { this->actor.scale.x += 0.65f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); } - if (this->unk_256 == 9) { + if (this->cueId == 9) { if (this->actor.scale.x > 0.65f * 0.001f) { this->actor.scale.x -= 0.65f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); @@ -358,12 +358,12 @@ void func_80BF656C(EnOsk* this, PlayState* play) { } void func_80BF67A8(EnOsk* this) { - if ((this->unk_256 != 1) && (this->unk_256 != 8)) { + if ((this->cueId != 1) && (this->cueId != 8)) { this->actor.draw = EnOsk_Draw; Actor_SetScale(&this->actor, 0.013f); } - switch (this->unk_256) { + switch (this->cueId) { case 1: this->actor.draw = NULL; break; @@ -466,10 +466,10 @@ void func_80BF6A20(EnOsk* this, PlayState* play) { } } - if (Cutscene_CheckActorAction(play, this->unk_258)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->unk_258)); - if (this->unk_256 != play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action) { - this->unk_256 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action; + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { + this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; func_80BF67A8(this); } func_80BF68E0(this); @@ -477,7 +477,7 @@ void func_80BF6A20(EnOsk* this, PlayState* play) { this->actor.draw = NULL; } - if (this->unk_256 == 8) { + if (this->cueId == 8) { if (this->actor.scale.x > 0.65f * 0.001f) { this->actor.scale.x -= 0.65f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.h b/src/overlays/actors/ovl_En_Osk/z_en_osk.h index 0358911d3..c83cc5d91 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.h +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.h @@ -18,8 +18,8 @@ typedef struct EnOsk { /* 0x188 */ Vec3s jointTable[17]; /* 0x1EE */ Vec3s morphTable[17]; /* 0x254 */ s16 unk_254; - /* 0x256 */ s16 unk_256; - /* 0x258 */ u16 unk_258; + /* 0x256 */ s16 cueId; + /* 0x258 */ u16 cueType; /* 0x25C */ f32 unk_25C; /* 0x260 */ EnOskActionFunc actionFunc; } EnOsk; // size = 0x264 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 e5540a292..6cc29578a 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -692,14 +692,14 @@ void EnOsn_HandleConversation(EnOsn* this, PlayState* play) { } void EnOsn_InitCutscene(EnOsn* this) { - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) || (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) || (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); } } } @@ -707,7 +707,7 @@ void EnOsn_InitCutscene(EnOsn* this) { void EnOsn_ChooseAction(EnOsn* this, PlayState* play) { u32 isFlagSet = Flags_GetSwitch(play, 0); - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_IDLE); if (!isFlagSet) { @@ -739,27 +739,27 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { } void EnOsn_StartCutscene(EnOsn* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->actor); this->actionFunc = EnOsn_HandleCsAction; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } void EnOsn_HandleCsAction(EnOsn* this, PlayState* play) { u8 pad; - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 130)) { - actionIndex = Cutscene_GetActorActionIndex(play, 130); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_130)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_130); this->shouldRotateHead = false; - if (this->csAction != play->csCtx.actorActions[actionIndex]->action) { - this->csAction = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->animIndex = OSN_ANIM_BOWING; break; @@ -852,7 +852,7 @@ void EnOsn_HandleCsAction(EnOsn* this, PlayState* play) { } if ((this->animIndex == OSN_ANIM_BELIEVE) && (play->sceneId == SCENE_SPOT00) && - (gSaveContext.sceneLayer == 0xB) && (play->csCtx.frames == 400)) { + (gSaveContext.sceneLayer == 0xB) && (play->csCtx.curFrame == 400)) { Actor_PlaySfx(&this->actor, NA_SE_VO_OMVO00); } @@ -874,10 +874,10 @@ void EnOsn_HandleCsAction(EnOsn* this, PlayState* play) { (Animation_OnFrame(&this->skelAnime, 57.0f)) || (Animation_OnFrame(&this->skelAnime, 67.0f)))) { Actor_PlaySfx(&this->actor, NA_SE_EV_OMENYA_WALK); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } else { this->shouldRotateHead = true; - this->csAction = 0x63; + this->cueId = 99; EnOsn_ChooseAction(this, play); } } diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.h b/src/overlays/actors/ovl_En_Osn/z_en_osn.h index 638f31e4e..906c0b6c9 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.h +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.h @@ -26,8 +26,8 @@ typedef struct EnOsn { /* 0x1E4 */ UNK_TYPE1 unk_1E4[0x6]; /* 0x1EA */ u16 stateFlags; /* 0x1EC */ u8 animIndex; - /* 0x1ED */ u8 csAction; - /* 0x1EE */ s16 cutscene; + /* 0x1ED */ u8 cueId; + /* 0x1EE */ s16 csId; /* 0x1F0 */ u8 shouldRotateHead; /* 0x1F1 */ UNK_TYPE1 unk_1F1[0x3]; /* 0x1F4 */ u16 textId; 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 c26a1a2c7..2444acca5 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -310,7 +310,7 @@ void EnOssan_EndInteraction(PlayState* play, EnOssan* this) { play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; } if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) { @@ -369,11 +369,11 @@ void EnOssan_Idle(EnOssan* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; EnOssan_SetupAction(this, EnOssan_BeginInteraction); if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } } else { @@ -397,11 +397,11 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { frameCount = 0; } if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) { @@ -622,11 +622,11 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { u8 cursorIndex; if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } else { if (talkState == TEXT_STATE_CHOICE) { @@ -676,26 +676,26 @@ void EnOssan_TalkToShopkeeper(EnOssan* this, PlayState* play) { void EnOssan_LookToLeftShelf(EnOssan* this, PlayState* play) { if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToLeftShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToLeftShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } else { if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING; EnOssan_UpdateCursorPos(play, this); EnOssan_SetupAction(this, EnOssan_BrowseLeftShelf); Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } this->stickAccumX = 0; @@ -704,26 +704,26 @@ void EnOssan_LookToLeftShelf(EnOssan* this, PlayState* play) { void EnOssan_LookToRightShelf(EnOssan* this, PlayState* play) { if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToRightShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToRightShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } else { if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING; EnOssan_UpdateCursorPos(play, this); EnOssan_SetupAction(this, EnOssan_BrowseRightShelf); Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } this->stickAccumX = 0; @@ -956,24 +956,24 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { void EnOssan_LookToShopkeeperFromShelf(EnOssan* this, PlayState* play) { if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopKeeperFromShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopKeeperFromShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING; EnOssan_UpdateCursorPos(play, this); EnOssan_StartShopping(play, this); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -1006,7 +1006,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { switch (item->canBuyFunc(play, item)) { case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; } func_8019F208(); @@ -1103,11 +1103,11 @@ void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) { play->msgCtx.stateTimer = 4; EnOssan_SetupAction(this, EnOssan_ItemPurchased); if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } @@ -1158,17 +1158,17 @@ void EnOssan_ItemPurchased(EnOssan* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); player->stateFlags2 |= PLAYER_STATE2_20000000; EnOssan_SetupAction(this, EnOssan_ContinueShopping); this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -1474,7 +1474,7 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) { this->cursorPos.y = this->cursorPos.x = 100.0f; this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; - this->cutscene = this->lookToShopkeeperCutscene; + this->csId = this->lookToShopkeeperCsId; this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.colChkInfo.cylRadius = 50; this->stickAccumX = this->stickAccumY = 0; @@ -1538,10 +1538,10 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) { } void EnOssan_GetCutscenes(EnOssan* this, PlayState* play) { - this->lookToShopkeeperCutscene = this->actor.cutscene; - this->lookToLeftShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperCutscene); - this->lookToRightShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToLeftShelfCutscene); - this->lookToShopKeeperFromShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToRightShelfCutscene); + this->lookToShopkeeperCsId = this->actor.csId; + this->lookToLeftShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperCsId); + this->lookToRightShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToLeftShelfCsId); + this->lookToShopKeeperFromShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToRightShelfCsId); } void EnOssan_Update(Actor* thisx, PlayState* play) { 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 a4787cc14..c5de183d5 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h @@ -43,11 +43,11 @@ typedef struct EnOssan { /* 0x2B0 */ u8 arrowAnimState; /* 0x2B1 */ u8 stickAnimState; /* 0x2B4 */ f32 shopItemSelectedTween; - /* 0x2B8 */ s16 lookToShopkeeperCutscene; - /* 0x2BA */ s16 lookToLeftShelfCutscene; - /* 0x2BC */ s16 lookToRightShelfCutscene; - /* 0x2BE */ s16 lookToShopKeeperFromShelfCutscene; - /* 0x2C0 */ s16 cutscene; + /* 0x2B8 */ s16 lookToShopkeeperCsId; + /* 0x2BA */ s16 lookToLeftShelfCsId; + /* 0x2BC */ s16 lookToRightShelfCsId; + /* 0x2BE */ s16 lookToShopKeeperFromShelfCsId; + /* 0x2C0 */ s16 csId; /* 0x2C2 */ s16 cutsceneState; /* 0x2C4 */ u16 textId; /* 0x2C6 */ Vec3s headRot; 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 b98fb8971..a4d820364 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -161,7 +161,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.z = 0; this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.gravity = 0.0f; - SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 0, &this->animIndex); this->skelAnime.curFrame = Rand_ZeroOne() * this->skelAnime.endFrame; this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); @@ -300,20 +300,20 @@ void func_80B5BB38(Color_RGB8* arg0, Color_RGB8* arg1, f32 arg2) { void func_80B5BDA8(EnOt* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 1, &this->animIndex); - SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); this->actionFunc = func_80B5BE04; } void func_80B5BE04(EnOt* this, PlayState* play) { switch (this->unk_388) { case 0: - if (SubS_StartActorCutscene(&this->actor, this->cutscenes[2], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->actor, this->csIdList[2], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { func_80B5BF60(this, play); } break; case 1: - if (SubS_StartActorCutscene(&this->actor, this->cutscenes[3], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->actor, this->csIdList[3], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { func_80B5BF60(this, play); } break; @@ -508,11 +508,11 @@ void func_80B5C6DC(EnOt* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_84_10); switch (this->unk_388) { case 0: - ActorCutscene_Stop(this->cutscenes[2]); + CutsceneManager_Stop(this->csIdList[2]); break; case 1: - ActorCutscene_Stop(this->cutscenes[3]); + CutsceneManager_Stop(this->csIdList[3]); break; } this->unk_73C = -1; @@ -591,7 +591,7 @@ void func_80B5CA30(EnOt* this, PlayState* play) { } void func_80B5CAD0(EnOt* this, PlayState* play) { - SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes) / 2); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList) / 2); this->actionFunc = func_80B5CB0C; } @@ -626,7 +626,7 @@ void func_80B5CC88(EnOt* this, PlayState* play) { } void func_80B5CCA0(EnOt* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->actor, this->cutscenes[0], 0x7C, SUBS_CUTSCENE_NORMAL)) { + if (SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_GLOBAL_TALK, SUBS_CUTSCENE_NORMAL)) { Player* player = GET_PLAYER(play); player->stateFlags2 |= PLAYER_STATE2_20000000; @@ -665,7 +665,7 @@ void func_80B5CD40(EnOt* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1069)) { this->unk_32C |= 4; - ActorCutscene_Stop(this->cutscenes[0]); + CutsceneManager_Stop(this->csIdList[0]); player->stateFlags2 &= ~PLAYER_STATE2_20000000; func_80B5CE6C(this, play); } @@ -993,7 +993,7 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) { func_80B5B2E0(play, &this->actor.world.pos, ENOT_GET_7F(&this->actor), &sp50, &this->unk_340); if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, sp50.x, sp50.y, sp50.z, 0, this->actor.shape.rot.y, 1, ENOT_GET_3FFF(&this->actor) | 0x8000, - this->actor.cutscene, this->actor.halfDaysBits, NULL) != NULL) { + this->actor.csId, this->actor.halfDaysBits, NULL) != NULL) { this->unk_32C |= 8; } } else if (D_80B5E888 != NULL) { @@ -1011,7 +1011,7 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) { temp->unk_32C |= 8; temp->unk_346 = ENOT_GET_7F(&this->actor); temp->actor.params = this->actor.params; - temp->actor.cutscene = this->actor.cutscene; + temp->actor.csId = this->actor.csId; this->unk_32C |= 8; } } else if (SurfaceType_IsHorseBlocked(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) { diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.h b/src/overlays/actors/ovl_En_Ot/z_en_ot.h index 7e8d7f651..8b01c6654 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.h +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.h @@ -45,7 +45,7 @@ typedef struct EnOt { /* 0x346 */ s16 unk_346; /* 0x348 */ Vec3f unk_348; /* 0x354 */ s16 unk_354; - /* 0x356 */ s16 cutscenes[4]; + /* 0x356 */ s16 csIdList[4]; /* 0x360 */ struct EnOt* unk_360; /* 0x364 */ LightNode* lightNode; /* 0x368 */ LightInfo lightInfo; 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 a5bb03a72..f71d227f6 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -102,19 +102,19 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { s32 pad; EnOwl* this = THIS; s32 i; - s16 cutscene = this->actor.cutscene; + s16 csId = this->actor.csId; s32 owlType; s32 switchFlag; - for (i = 0; i < ARRAY_COUNT(this->unk_400); i++) { - this->unk_400[i] = cutscene; - if (cutscene != -1) { - this->actor.cutscene = cutscene; - cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } - this->actor.cutscene = this->unk_400[0]; + this->actor.csId = this->csIdList[0]; Actor_ProcessInitChain(&this->actor, sInitChain); if (ENOWL_GET_TYPE(&this->actor) == ENOWL_GET_TYPE_30) { Actor_SetScale(&this->actor, 0.1f); @@ -144,7 +144,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { this->unk_409 = 4; this->unk_40B = this->unk_408 = 0; this->unk_40C = 4; - this->unk_406 = -1; + this->csIdIndex = -1; owlType = ENOWL_GET_TYPE(&this->actor); switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor); @@ -315,11 +315,11 @@ void func_8095AC50(EnOwl* this, PlayState* play) { void func_8095ACEC(EnOwl* this) { this->actionFlags &= ~0x40; - if (this->unk_406 >= 0) { - if (ActorCutscene_GetCurrentIndex() == this->unk_400[this->unk_406]) { - ActorCutscene_Stop(this->unk_400[this->unk_406]); + if (this->csIdIndex >= 0) { + if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) { + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } - this->unk_406 = -1; + this->csIdIndex = -1; } } @@ -387,7 +387,7 @@ void func_8095AFEC(EnOwl* this, PlayState* play) { if (func_8095A978(this, play, 0xBF6, 200.0f, 100.0f)) { Audio_PlayFanfare(NA_BGM_OWL); this->actionFunc = func_8095AF2C; - this->unk_406 = 0; + this->csIdIndex = 0; this->actionFlags |= 0x40; } } @@ -502,7 +502,7 @@ void func_8095B574(EnOwl* this, PlayState* play) { this->actionFunc = func_8095BA84; Audio_PlayFanfare(NA_BGM_OWL); this->actionFlags |= 0x40; - this->unk_406 = 2; + this->csIdIndex = 2; } else if (this->actor.xzDistToPlayer < 200.0f) { this->actor.flags |= ACTOR_FLAG_10000; func_800B8500(&this->actor, play, 200.0f, 400.0f, PLAYER_IA_NONE); @@ -674,7 +674,7 @@ void func_8095BA84(EnOwl* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; this->actor.home.rot.x = 0; func_8095ACEC(this); - this->unk_406 = 0; + this->csIdIndex = 0; this->actionFlags |= 0x40; break; @@ -714,7 +714,7 @@ void func_8095BE0C(EnOwl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_8095BA84; Audio_PlayFanfare(NA_BGM_OWL); - this->unk_406 = 1; + this->csIdIndex = 1; this->actionFlags |= 0x40; } else if (this->actor.textId == 0xBF0) { if (this->actor.isTargeted) { @@ -865,16 +865,16 @@ s32 func_8095C510(EnOwl* this) { void func_8095C568(EnOwl* this) { if (this->actionFlags & 0x40) { - if ((this->unk_406 < 0) || (this->unk_400[this->unk_406] < 0)) { + if ((this->csIdIndex < 0) || (this->csIdList[this->csIdIndex] < 0)) { this->actionFlags &= ~0x40; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_400[this->unk_406]); - } else if (ActorCutscene_GetCanPlayNext(this->unk_400[this->unk_406])) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_400[this->unk_406], &this->actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor); this->actionFlags &= ~0x40; } else { - ActorCutscene_SetIntentToPlay(this->unk_400[this->unk_406]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } } 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 033857886..5e02aba94 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h @@ -44,8 +44,8 @@ typedef struct EnOwl { /* 0x3F4 */ Path* path; /* 0x3F8 */ s32 unk_3F8; /* 0x3FC */ s32 unk_3FC; - /* 0x400 */ s16 unk_400[3]; - /* 0x406 */ s16 unk_406; + /* 0x400 */ s16 csIdList[3]; + /* 0x406 */ s16 csIdIndex; /* 0x408 */ u8 unk_408; /* 0x409 */ u8 unk_409; /* 0x40A */ u8 unk_40A; 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 966f21354..a4158e2c7 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -156,7 +156,7 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { if (1) {} - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) || + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) { Actor_Kill(&this->actor); } @@ -216,14 +216,14 @@ void func_80BD8588(EnPamera* this, PlayState* play) { void func_80BD8658(EnPamera* this) { s32 i; - s16 nextCutscene = this->actor.cutscene; + s16 csId = this->actor.csId; - for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) { - if (nextCutscene == -1) { + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + if (csId == CS_ID_NONE) { break; } - this->cutscenes[i] = nextCutscene; - nextCutscene = ActorCutscene_GetAdditionalCutscene(nextCutscene); + this->csIdList[i] = csId; + csId = CutsceneManager_GetAdditionalCsId(csId); } } @@ -242,9 +242,9 @@ void func_80BD8700(EnPamera* this) { void func_80BD8758(EnPamera* this, PlayState* play) { if (this->hideInisdeTimer++ > 1800) { - if (ActorCutscene_GetCanPlayNext(this->cutscenes[0]) && (this->cutscenes[0] != -1)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[0], &this->actor); - Camera_SetToTrackActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->cutscenes[0])), + if (CutsceneManager_IsNext(this->csIdList[0]) && (this->csIdList[0] != -1)) { + CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor); + Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[0])), &this->actor); this->actor.speed = 1.5f; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); @@ -252,8 +252,8 @@ void func_80BD8758(EnPamera* this, PlayState* play) { this->actor.world.rot.y = this->actor.home.rot.y; func_80BD9338(this, play); func_80BD8908(this); - } else if ((this->cutscenes[0] != -1) && (this->actor.xzDistToPlayer < 1000.0f)) { - ActorCutscene_SetIntentToPlay(this->cutscenes[0]); + } else if ((this->csIdList[0] != -1) && (this->actor.xzDistToPlayer < 1000.0f)) { + CutsceneManager_Queue(this->csIdList[0]); } else { this->actor.speed = 1.5f; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); @@ -429,13 +429,13 @@ void func_80BD90AC(EnPamera* this, PlayState* play) { ((this->actor.xzDistToPlayer < 150.0f) || ((this->actionFunc == func_80BD909C) && (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 200.0f)))) { - if ((ActorCutscene_GetCanPlayNext(this->cutscenes[1])) && ((this->cutscenes[1] != -1))) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[1], &this->actor); - Camera_SetToTrackActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->cutscenes[1])), + if ((CutsceneManager_IsNext(this->csIdList[1])) && ((this->csIdList[1] != -1))) { + CutsceneManager_StartWithPlayerCs(this->csIdList[1], &this->actor); + Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[1])), &this->actor); EnPamera_LookDownWell(this); - } else if (this->cutscenes[1] != -1) { - ActorCutscene_SetIntentToPlay(this->cutscenes[1]); + } else if (this->csIdList[1] != -1) { + CutsceneManager_Queue(this->csIdList[1]); } else { EnPamera_LookDownWell(this); } @@ -569,7 +569,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) { this->actor.update = func_80BDA344; this->actor.flags |= ACTOR_FLAG_2000000; this->actor.flags |= ACTOR_FLAG_100000; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { func_80BD9E60(this); func_80BD9938(this); } else { @@ -605,7 +605,8 @@ void func_80BD994C(EnPamera* this, PlayState* play) { this->unk_324 = 0x15A8; } else if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || - (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20))) { + (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20))) { func_80BD93CC(this, 1, 0); Message_StartTextbox(play, 0x158E, &this->actor); this->unk_324 = 0x158E; @@ -695,14 +696,14 @@ void func_80BD9C70(EnPamera* this, PlayState* play) { } s32 func_80BD9CB8(EnPamera* this, PlayState* play) { - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 0x1E5)) { - actionIndex = Cutscene_GetActorActionIndex(play, 0x1E5); - if (this->unk_326 != play->csCtx.actorActions[actionIndex]->action) { - this->unk_326 = play->csCtx.actorActions[actionIndex]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_485)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_485); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; - switch (play->csCtx.actorActions[actionIndex]->action) { + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: func_80BD9E88(this); break; @@ -727,7 +728,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) { break; } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); this->setupFunc(this, play); return 1; } @@ -738,7 +739,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) { func_80BD9E60(this); } } - this->unk_326 = 0x63; + this->cueId = 99; return 0; } diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h index 34f18e815..59bf40e09 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h @@ -28,13 +28,13 @@ typedef struct EnPamera { /* 0x312 */ s16 unk_312; /* 0x314 */ s16 unk_314; /* 0x316 */ s16 unk_316; - /* 0x318 */ s16 cutscenes[2]; + /* 0x318 */ s16 csIdList[2]; /* 0x31C */ s16 hideInisdeTimer; /* 0x31E */ s16 unk_31E; /* 0x320 */ UNK_TYPE1 unk_320[0x2]; /* 0x322 */ s16 unk_322; /* 0x324 */ u16 unk_324; - /* 0x326 */ u16 unk_326; + /* 0x326 */ u16 cueId; } EnPamera; // size = 0x328 #endif // Z_EN_PAMERA_H 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 4172457f1..62dff4188 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -341,8 +341,8 @@ void EnPametfrog_StopCutscene(EnPametfrog* this, PlayState* play) { subCam = Play_GetCamera(play, this->subCamId); Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye); this->subCamId = SUB_CAM_ID_DONE; - ActorCutscene_Stop(this->cutscene); - func_800B724C(play, &this->actor, PLAYER_CSMODE_6); + CutsceneManager_Stop(this->csId); + func_800B724C(play, &this->actor, PLAYER_CSMODE_END); } } @@ -991,22 +991,22 @@ void EnPametfrog_SpawnFrog(EnPametfrog* this, PlayState* play) { void EnPametfrog_SetupCutscene(EnPametfrog* this) { if (this->actor.colChkInfo.health == 0) { - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; } else { - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); this->actionFunc = EnPametfrog_PlayCutscene; this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; } void EnPametfrog_PlayCutscene(EnPametfrog* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene); - func_800B724C(play, &this->actor, PLAYER_CSMODE_7); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->csId); + func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT); if (this->actor.colChkInfo.health == 0) { if (this->actor.params == GEKKO_PRE_SNAPPER) { EnPametfrog_SetupCallSnapper(this, play); @@ -1017,7 +1017,7 @@ void EnPametfrog_PlayCutscene(EnPametfrog* this, PlayState* play) { EnPametfrog_SetupFallOffSnapper(this, play); } } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h index 9ae2f76df..90bc0cb1b 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h @@ -30,7 +30,7 @@ typedef struct EnPametfrog { /* 0x2AC */ u8 drawDmgEffType; /* 0x2AD */ u8 wallPauseTimer; // Gekko stops 10 times along wall/ceiling after being blown off of Snapper /* 0x2AE */ u8 unk_2AE; // True/False - /* 0x2B0 */ s16 cutscene; + /* 0x2B0 */ s16 csId; /* 0x2B2 */ s16 params; /* 0x2B4 */ s16 quakeIndex; /* 0x2B6 */ s16 timer; 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 81f6c8b09..d10f0884b 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -789,43 +789,43 @@ Actor* func_80AF8040(EnPm* this, PlayState* play) { return actor; } -s32 func_80AF80F4(EnPm* this, s16 arg1) { +s32 func_80AF80F4(EnPm* this, s16 csId) { s32 ret = false; - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(arg1); - } else if (ActorCutscene_GetCanPlayNext(arg1)) { - ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(csId); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->actor); ret = true; } else { - ActorCutscene_SetIntentToPlay(arg1); + CutsceneManager_Queue(csId); } return ret; } -s16 func_80AF8170(EnPm* this, s32 arg1) { +s16 func_80AF8170(EnPm* this, s32 numCutscenes) { s32 i; - s16 cs = -1; + s16 csId = CS_ID_NONE; if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - cs = this->actor.child->cutscene; + csId = this->actor.child->csId; - for (i = 0; i < arg1; i++) { - cs = ActorCutscene_GetAdditionalCutscene(cs); + for (i = 0; i < numCutscenes; i++) { + csId = CutsceneManager_GetAdditionalCsId(csId); } } - return cs; + return csId; } s32 func_80AF81E8(EnPm* this, PlayState* play) { s32 pad; - s16 sp2A = func_80AF8170(this, 0); + s16 csId = func_80AF8170(this, 0); s32 ret = false; switch (this->unk_378) { case 0: - if (!func_80AF80F4(this, sp2A)) { + if (!func_80AF80F4(this, csId)) { break; } @@ -833,7 +833,8 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) { case 4: case 6: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), + this->actor.child); } this->unk_378++; ret = true; @@ -843,16 +844,16 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) { case 3: case 5: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_08) && (this->unk_378 == 3)) { - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); } else { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor); } this->unk_378++; ret = true; break; case 7: - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); this->unk_378++; ret = true; break; @@ -862,12 +863,12 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) { s32 func_80AF8348(EnPm* this, PlayState* play) { s32 pad; - s16 sp2A = func_80AF8170(this, 0); + s16 csId = func_80AF8170(this, 0); s32 ret = false; switch (this->unk_378) { case 0: - if (!func_80AF80F4(this, sp2A)) { + if (!func_80AF80F4(this, csId)) { break; } @@ -875,7 +876,7 @@ s32 func_80AF8348(EnPm* this, PlayState* play) { case 4: case 6: case 8: - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor); this->unk_378++; ret = true; break; @@ -885,14 +886,15 @@ s32 func_80AF8348(EnPm* this, PlayState* play) { case 5: case 7: if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child); + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), + this->actor.child); } this->unk_378++; ret = true; break; case 9: - ActorCutscene_Stop(sp2A); + CutsceneManager_Stop(csId); this->unk_378++; ret = true; break; @@ -2112,7 +2114,7 @@ void EnPm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, switch (limbIndex) { case 15: - if (ActorCutscene_GetCurrentIndex() == -1) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { Matrix_MultVec3f(&gZeroVec3f, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } 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 405ed1838..10d654cc7 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 @@ -296,7 +296,7 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) { this->unk_3F8 = 0; } - if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) { + if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { this->actor.flags |= ACTOR_FLAG_100000; } 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 2e85f081d..853dbfd61 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -44,7 +44,7 @@ s32 EnRailgibud_MoveToIdealGrabPositionAndRotation(EnRailgibud* this, PlayState* void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play); void EnRailgibud_MainGibdo_DeadUpdate(Actor* thisx, PlayState* play); void EnRailgibud_InitCutsceneGibdo(EnRailgibud* this, PlayState* play); -void EnRailgibud_InitActorActionCommand(EnRailgibud* this); +void EnRailgibud_InitCueType(EnRailgibud* this); void EnRailgibud_SetupDoNothing(EnRailgibud* this); void EnRailgibud_DoNothing(EnRailgibud* this, PlayState* play); void EnRailgibud_SinkIntoGround(EnRailgibud* this, PlayState* play); @@ -1106,8 +1106,8 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { void EnRailgibud_InitCutsceneGibdo(EnRailgibud* this, PlayState* play) { s32 pad[2]; - EnRailgibud_InitActorActionCommand(this); - this->csAction = 99; + EnRailgibud_InitCueType(this); + this->cueId = 99; this->actor.flags |= ACTOR_FLAG_100000; this->actor.flags |= ACTOR_FLAG_10; @@ -1126,30 +1126,30 @@ void EnRailgibud_InitCutsceneGibdo(EnRailgibud* this, PlayState* play) { this->actor.update = EnRailgibud_Cutscene_Update; } -void EnRailgibud_InitActorActionCommand(EnRailgibud* this) { +void EnRailgibud_InitCueType(EnRailgibud* this) { switch (ENRAILGIBUD_GET_CUTSCENE_TYPE(&this->actor)) { case 1: - this->actorActionCommand = 519; + this->cueType = CS_CMD_ACTOR_CUE_519; break; case 2: - this->actorActionCommand = 520; + this->cueType = CS_CMD_ACTOR_CUE_520; break; case 3: - this->actorActionCommand = 521; + this->cueType = CS_CMD_ACTOR_CUE_521; break; case 4: - this->actorActionCommand = 522; + this->cueType = CS_CMD_ACTOR_CUE_522; break; case 5: - this->actorActionCommand = 523; + this->cueType = CS_CMD_ACTOR_CUE_523; break; default: - this->actorActionCommand = 519; + this->cueType = CS_CMD_ACTOR_CUE_519; break; } } @@ -1177,13 +1177,13 @@ void EnRailgibud_SinkIntoGround(EnRailgibud* this, PlayState* play) { } s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, this->actorActionCommand)) { - actionIndex = Cutscene_GetActorActionIndex(play, this->actorActionCommand); - if (this->csAction != play->csCtx.actorActions[actionIndex]->action) { - this->csAction = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + cueChannel = Cutscene_GetCueChannel(play, this->cueType); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_IDLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_IDLE); @@ -1221,7 +1221,7 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { } } - switch (this->csAction) { + switch (this->cueId) { case 3: case 4: if (this->actionFunc == EnRailgibud_SinkIntoGround) { @@ -1233,7 +1233,7 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { case 5: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - if (play->csCtx.frames < 280) { + if (play->csCtx.curFrame < 280) { Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY); } else { Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_WEAKENED1); @@ -1242,11 +1242,11 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { break; } - Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); return true; } - this->csAction = 99; + this->cueId = 99; return false; } 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 cf06d1996..95a2bbd7b 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h @@ -47,8 +47,8 @@ typedef struct EnRailgibud { /* 0x3F6 */ s16 drawDmgEffTimer; /* 0x3F8 */ s16 type; /* 0x3FA */ s16 isInvincible; - /* 0x3FC */ u16 actorActionCommand; - /* 0x3FE */ u16 csAction; + /* 0x3FC */ u16 cueType; + /* 0x3FE */ u16 cueId; /* 0x400 */ u16 textId; /* 0x402 */ s16 timeInitialized; // unused other than setting it /* 0x404 */ u8 drawDmgEffType; 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 eaf54000f..e270f1515 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -504,7 +504,7 @@ void EnRuppecrow_HandleSong(EnRuppecrow* this, PlayState* play) { } } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = EnRuppecrow_HandleSongCutscene; } @@ -526,12 +526,12 @@ void EnRuppecrow_HandleSong(EnRuppecrow* this, PlayState* play) { void EnRuppecrow_HandleSongCutscene(EnRuppecrow* this, PlayState* play) { EnRuppecrow_UpdatePosition(this, play); - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); EnRuppecrow_UpdateSpeed(this, play); this->actionFunc = EnRuppecrow_FlyWhileDroppingRupees; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } Actor_MoveWithoutGravity(&this->actor); @@ -554,7 +554,7 @@ void EnRuppecrow_FlyWhileDroppingRupees(EnRuppecrow* this, PlayState* play) { this->skelAnime.playSpeed = 1.0f; Actor_MoveWithGravity(&this->actor); } else { - if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { EnRuppecrow_UpdateSpeed(this, play); Math_ApproachF(&this->actor.speed, this->speedModifier, 0.2f, 0.5f); } 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 42e2dd013..c870027bb 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -87,14 +87,14 @@ static ColliderCylinderInit sCylinderInit = { void EnRz_Init(Actor* thisx, PlayState* play) { EnRz* this = THIS; - s16 tempCutscene = this->actor.cutscene; + s16 csId = this->actor.csId; s32 i; - for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) { - this->cutscenes[i] = tempCutscene; - if (tempCutscene != -1) { - this->actor.cutscene = tempCutscene; - tempCutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } @@ -156,12 +156,12 @@ void EnRz_Init(Actor* thisx, PlayState* play) { } if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) { - this->csAction = 0x226; + this->cueType = CS_CMD_ACTOR_CUE_550; } else { // EN_RZ_MARILLA - this->csAction = 0x227; + this->cueType = CS_CMD_ACTOR_CUE_551; } - this->actionIndex = 0; + this->cueId = 0; } /** @@ -359,18 +359,18 @@ void EnRz_Destroy(Actor* thisx, PlayState* play) { } s32 func_80BFBE70(EnRz* this, PlayState* play) { - u16 action; + u16 cueId; if ((EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) && (this->animIndex == EN_RZ_ANIM_APPLAUDING)) { func_800B9010(&this->actor, NA_SE_EV_CLAPPING_2P - SFX_FLAG); } - if (Cutscene_CheckActorAction(play, this->csAction)) { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction)); - action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action; - if (this->actionIndex != action) { - this->actionIndex = action; - switch (this->actionIndex) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { case 1: func_80BFBA1C(play, this, EN_RZ_ANIM_STANDING); break; @@ -395,18 +395,18 @@ s32 func_80BFBE70(EnRz* this, PlayState* play) { } s32 func_80BFBFAC(EnRz* this, PlayState* play) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { Message_StartTextbox(play, 0x2925, &this->actor); this->actionFunc = func_80BFC078; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); return false; - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); return true; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } return false; } @@ -498,7 +498,7 @@ void func_80BFC36C(EnRz* this, PlayState* play) { this->actionFunc = func_80BFC2F4; SET_WEEKEVENTREG(WEEKEVENTREG_75_80); } - this->actor.cutscene = this->cutscenes[1]; + this->actor.csId = this->csIdList[1]; } } @@ -518,7 +518,7 @@ void func_80BFC3F8(EnRz* this, PlayState* play) { if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_10000)) { this->actionFunc = func_80BFC36C; - this->actor.cutscene = this->cutscenes[0]; + this->actor.csId = this->csIdList[0]; this->actor.flags &= ~ACTOR_FLAG_10000; } else if (Player_GetMask(play) == PLAYER_MASK_KAMARO) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.h b/src/overlays/actors/ovl_En_Rz/z_en_rz.h index 38a7088e8..c6d8fe3c8 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.h +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.h @@ -40,9 +40,9 @@ typedef struct EnRz { /* 0x420 */ u16 stateFlags; /* 0x422 */ s16 animIndex; /* 0x424 */ s16 timer; - /* 0x426 */ u16 csAction; - /* 0x428 */ u16 actionIndex; - /* 0x42A */ s16 cutscenes[2]; + /* 0x426 */ u16 cueType; + /* 0x428 */ u16 cueId; + /* 0x42A */ s16 csIdList[2]; /* 0x430 */ EnRzActionFunc actionFunc; } EnRz; // size = 0x434 diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index b6bd75d83..321c790d1 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -166,7 +166,7 @@ void func_80BCD2BC(EnScopecrow* this, PlayState* play) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_SC_RUPPE, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, this->actor.shape.rot.z, this->actor.params, - this->actor.cutscene, this->actor.halfDaysBits, NULL); + this->actor.csId, this->actor.halfDaysBits, NULL); } s32 func_80BCD334(EnScopecrow* this, Path* path, s32 pointIndex) { 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 1c82887b4..07e2646a0 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -448,14 +448,14 @@ void func_80BCBA00(EnScopenuts* this, PlayState* play) { } if (this->unk_36C == 0) { - if (ActorCutscene_GetCanPlayNext(this->unk_338)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_338, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_36C = 1; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->unk_338); + CutsceneManager_Queue(this->csId); return; } } @@ -593,7 +593,7 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) { if (sp32 == 3) { if (this->unk_334 >= (this->path->count - 1)) { - ActorCutscene_Stop(this->unk_338); + CutsceneManager_Stop(this->csId); CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_40); this->actionFunc = func_80BCC288; } else { @@ -601,7 +601,7 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) { } } } else if (this->actor.playerHeightRel > 500.0f) { - ActorCutscene_Stop(this->unk_338); + CutsceneManager_Stop(this->csId); this->actionFunc = func_80BCC288; } @@ -609,17 +609,17 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) { func_80BCAD64(this, sp32); if (this->unk_36C == 2) { - if (ActorCutscene_GetCanPlayNext(this->unk_338)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_338, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_36C = 3; } else { - ActorCutscene_SetIntentToPlay(this->unk_338); + CutsceneManager_Queue(this->csId); return; } } else if ((this->unk_36C == 1) && (this->unk_36E == 20)) { - ActorCutscene_Stop(this->unk_338); - this->unk_338 = ActorCutscene_GetAdditionalCutscene(this->unk_338); - ActorCutscene_SetIntentToPlay(this->unk_338); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); this->unk_36C = 2; } this->unk_36E++; @@ -723,7 +723,7 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { } else { this->actor.gravity = -1.0f; this->actor.draw = EnScopenuts_Draw; - this->unk_338 = this->actor.cutscene; + this->csId = this->actor.csId; this->unk_33C = 0; this->unk_358 = 150; this->unk_348 = 4; diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h index 5ea0d15eb..ef2ea74d8 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h @@ -24,7 +24,7 @@ typedef struct EnScopenuts { /* 0x32C */ f32 unk_32C; /* 0x330 */ Path* path; /* 0x334 */ s32 unk_334; - /* 0x338 */ s16 unk_338; + /* 0x338 */ s16 csId; /* 0x33A */ UNK_TYPE1 unk33A[2]; /* 0x33C */ u16 unk_33C; /* 0x33E */ s16 unk_33E; 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 c02120532..871bb85a8 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -532,14 +532,14 @@ void func_80ADBE80(EnSellnuts* this, PlayState* play) { func_80ADAE64(this); if (this->unk_366 == 0) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_366 = 1; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); return; } } @@ -659,31 +659,31 @@ void func_80ADC37C(EnSellnuts* this, PlayState* play) { this->actor.world.rot.x = -sp30.x; if (func_80ADCE4C(this, this->path, this->unk_334) && (sp2C < 500.0f)) { if (this->unk_334 >= (this->path->count - 1)) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->actionFunc = func_80ADC580; } else { this->unk_334++; } } } else if (this->actor.playerHeightRel > 500.0f) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->actionFunc = func_80ADC580; } Math_ApproachF(&this->actor.speed, 2.0f, 0.2f, 1.0f); Actor_MoveWithoutGravity(&this->actor); if (this->unk_366 == 2) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_366 = 3; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); return; } } else if ((this->unk_366 == 1) && (this->unk_368 == 20)) { - ActorCutscene_Stop(this->cutscene); - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); this->unk_366 = 2; } @@ -741,22 +741,22 @@ void func_80ADC7B4(EnSellnuts* this, PlayState* play) { s32 talkState = Message_GetState(&play->msgCtx); if (this->unk_366 == 0) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_366 = 1; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } else if ((this->unk_366 == 1) && (talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_366 = 0; - ActorCutscene_Stop(this->cutscene); - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); this->unk_338 |= 8; this->actionFunc = func_80ADC8C4; } @@ -766,14 +766,14 @@ void func_80ADC8C4(EnSellnuts* this, PlayState* play) { Vec3s sp30; if (this->unk_366 == 0) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_366 = 1; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); return; } } @@ -816,7 +816,7 @@ void func_80ADCA64(EnSellnuts* this, PlayState* play) { this->actor.shape.rot.y += 0x4000; this->unk_360 *= 0.93f; if (this->actor.world.pos.y < -50.0f) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->unk_338 &= ~8; this->unk_34E = 20; this->unk_350 = 4; @@ -835,7 +835,7 @@ void func_80ADCA64(EnSellnuts* this, PlayState* play) { this->collider.dim.height = 0; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17); } else if (this->unk_34C == 17) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); SET_WEEKEVENTREG(WEEKEVENTREG_73_04); Actor_Kill(&this->actor); } @@ -959,7 +959,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_FC00(&this->actor), 0x3F); - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.cylRadius = 0; this->actor.colChkInfo.mass = MASS_IMMOVABLE; diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h index b9793a6d3..3acf7a3e0 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h @@ -23,7 +23,7 @@ typedef struct EnSellnuts { /* 0x334 */ s32 unk_334; /* 0x338 */ u16 unk_338; /* 0x33A */ u16 unk_33A; - /* 0x33C */ s16 cutscene; + /* 0x33C */ s16 csId; /* 0x33E */ UNK_TYPE1 unk33E[0x2]; /* 0x340 */ u16 unk_340; /* 0x342 */ u16 unk_342; 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 0e1b182e6..bdd5b787f 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -259,7 +259,7 @@ s32 func_80AE6704(Actor* thisx, PlayState* play) { case 6: CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 6); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; 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 f6e311d61..735111a2b 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -230,7 +230,7 @@ void EnSkb_Init(Actor* thisx, PlayState* play) { this->unk_3D6 = ENSKB_GET_F0(&this->actor); this->actor.floorHeight = this->actor.world.pos.y; - if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) { + if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { this->actor.flags |= ACTOR_FLAG_100000; } 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 55d6cd8e0..3aab4b3ce 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -843,7 +843,7 @@ void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_OBJ_ICEBLOCK, this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, 0); if (this->actor.child != NULL) { - this->actor.child->cutscene = this->actor.cutscene; + this->actor.child->csId = this->actor.csId; EnSlime_SetupIceBlock(this); } else { this->actor.colorFilterTimer = 0; 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 a083d6ded..baf3ccdfa 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -208,7 +208,7 @@ void EnSnowman_Init(Actor* thisx, PlayState* play) { thisx->world.pos.z, 0, 0, 0, EN_SNOWMAN_TYPE_SPLIT); thisx->parent = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_SNOWMAN, thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, 0, 0, 0, - EN_SNOWMAN_TYPE_SPLIT, -1, thisx->halfDaysBits, NULL); + EN_SNOWMAN_TYPE_SPLIT, CS_ID_NONE, thisx->halfDaysBits, NULL); if ((thisx->child == NULL) || (thisx->parent == NULL)) { if (thisx->child != NULL) { Actor_Kill(thisx->child); 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 a716545bd..a23600fb9 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -406,7 +406,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { this->shopType = ZORA_SHOP; break; case GORON_SHOP: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { this->shopType = GORON_SHOP_SPRING; } else { this->shopType = GORON_SHOP; @@ -456,7 +456,7 @@ void EnSob1_EndInteraction(PlayState* play, EnSob1* this) { Player* player = GET_PLAYER(play); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); @@ -546,11 +546,11 @@ void EnSob1_Idle(EnSob1* this, PlayState* play) { this->headRotTarget = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookFowardCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookFowardCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING; } player->stateFlags2 |= PLAYER_STATE2_20000000; @@ -623,11 +623,11 @@ void EnSob1_Hello(EnSob1* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play) && @@ -664,19 +664,19 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) { u8 cursorIndex; if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookFowardCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookFowardCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING; } else { if (talkState == TEXT_STATE_CHOICE) { @@ -707,23 +707,23 @@ void EnSob1_TalkingToShopkeeper(EnSob1* this, PlayState* play) { void EnSob1_LookToShopkeeperFromShelf(EnSob1* this, PlayState* play) { if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; EnSob1_StartShopping(play, this); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -765,11 +765,11 @@ void EnSob1_Walk(EnSob1* this, PlayState* play) { f32 distSq; if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if (this->path != NULL) { @@ -794,20 +794,20 @@ void EnSob1_Walking(EnSob1* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookFowardCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookFowardCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING; } player->stateFlags2 |= PLAYER_STATE2_20000000; @@ -828,17 +828,17 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); player->stateFlags2 |= PLAYER_STATE2_20000000; EnSob1_SetupAction(this, EnSob1_ContinueShopping); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -850,25 +850,25 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) { void EnSob1_LookToShelf(EnSob1* this, PlayState* play) { if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene) != 0) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING; EnSob1_UpdateCursorPos(play, this); EnSob1_SetupAction(this, EnSob1_BrowseShelf); Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -975,7 +975,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { switch (item->canBuyFunc(play, item)) { case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } func_8019F208(); @@ -1094,11 +1094,11 @@ void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) { play->msgCtx.stateTimer = 4; EnSob1_SetupAction(this, EnSob1_ItemPurchased); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } @@ -1290,9 +1290,9 @@ s16 EnSob1_GetDistSqAndOrient(Path* path, s32 pointIndex, Vec3f* pos, f32* distS } void EnSob1_GetCutscenes(EnSob1* this) { - this->lookFowardCutscene = this->actor.cutscene; - this->lookToShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookFowardCutscene); - this->lookToShopkeeperCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShelfCutscene); + this->lookFowardCsId = this->actor.csId; + this->lookToShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookFowardCsId); + this->lookToShopkeeperCsId = CutsceneManager_GetAdditionalCsId(this->lookToShelfCsId); } void EnSob1_WaitForBlink(EnSob1* this) { @@ -1387,7 +1387,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; EnSob1_GetCutscenes(this); - this->cutscene = this->lookFowardCutscene; + this->csId = this->lookFowardCsId; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); sInitFuncs[this->shopType](this, play); this->actor.colChkInfo.mass = MASS_IMMOVABLE; 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 eee86c112..1509868ee 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h @@ -60,10 +60,10 @@ typedef struct EnSob1 { /* 0x39C */ u8 arrowAnimState; /* 0x39D */ u8 stickAnimState; /* 0x39E */ s16 cutsceneState; - /* 0x3A0 */ s16 cutscene; - /* 0x3A2 */ s16 lookFowardCutscene; - /* 0x3A4 */ s16 lookToShelfCutscene; - /* 0x3A6 */ s16 lookToShopkeeperCutscene; + /* 0x3A0 */ s16 csId; + /* 0x3A2 */ s16 lookFowardCsId; + /* 0x3A4 */ s16 lookToShelfCsId; + /* 0x3A6 */ s16 lookToShopkeeperCsId; /* 0x3A8 */ UNK_TYPE1 pad3A8[0x4]; /* 0x3AC */ f32 shopItemSelectedTween; /* 0x3B0 */ UNK_TYPE1 pad3B0[0x4]; 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 ad40c241c..a7cd6617a 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -306,60 +306,60 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { switch (this->textId) { case 0: this->flags1 |= 0x20; - this->cutsceneIdx = 0; + this->csIdIndex = 0; this->textId = 0x29E5; break; case 0x29E5: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 1; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 1; this->textId = 0x29E6; break; case 0x29E6: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 0; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 0; this->textId = 0x29E7; break; case 0x29E7: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 1; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 1; this->textId = 0x29E8; break; case 0x29E8: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 0; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 0; this->textId = 0x29E9; break; case 0x29E9: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 1; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 1; this->textId = 0x29EA; break; case 0x29EA: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 0; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 0; this->textId = 0x29EB; break; case 0x29EB: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 1; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 1; this->textId = 0x29EC; break; case 0x29EC: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); - this->cutsceneIdx = 0; + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); + this->csIdIndex = 0; this->textId = 0x29ED; break; case 0x29ED: - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->flags1 |= 0x400; - this->cutsceneIdx = 1; + this->csIdIndex = 1; this->textId = 0x29EE; break; } - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIdx]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); this->actionFunc = func_80BADD0C; } else if (this->flags1 & 1) { switch (this->textId) { @@ -859,8 +859,8 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_83_04) && !(this->flags1 & 0x1000)) { - if (ActorCutscene_GetCanPlayNext(this->cutscenes[0])) { - ActorCutscene_Start(this->cutscenes[0], &this->actor); + if (CutsceneManager_IsNext(this->csIdList[0])) { + CutsceneManager_Start(this->csIdList[0], &this->actor); if (!(player->stateFlags1 & PLAYER_STATE1_10000000)) { this->flags2 |= 0x10; player->stateFlags1 |= PLAYER_STATE1_10000000; @@ -868,7 +868,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->flags1 |= 0x1000; this->flags2 |= 2; } else { - ActorCutscene_SetIntentToPlay(this->cutscenes[0]); + CutsceneManager_Queue(this->csIdList[0]); } } func_80BABFD4(this, play); @@ -969,8 +969,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40)) { Actor_Kill(&this->actor); } - this->cutscenes[0] = this->actor.cutscene; - this->cutscenes[1] = ActorCutscene_GetAdditionalCutscene(this->cutscenes[0]); + this->csIdList[0] = this->actor.csId; + this->csIdList[1] = CutsceneManager_GetAdditionalCsId(this->csIdList[0]); this->flags1 |= 0x80; this->flags1 |= 8; this->animIndex = 1; @@ -994,8 +994,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { } this->animIndex = 0; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); - this->cutscenes[0] = this->actor.cutscene; - this->cutscenes[1] = ActorCutscene_GetAdditionalCutscene(this->cutscenes[0]); + this->csIdList[0] = this->actor.csId; + this->csIdList[1] = CutsceneManager_GetAdditionalCsId(this->csIdList[0]); this->flags1 |= 4; this->actionFunc = func_80BAD7F8; return; @@ -1168,26 +1168,26 @@ void func_80BAD130(EnSuttari* this, PlayState* play) { } void func_80BAD230(EnSuttari* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscenes[1])) { - ActorCutscene_Start(this->cutscenes[1], &this->actor); + if (CutsceneManager_IsNext(this->csIdList[1])) { + CutsceneManager_Start(this->csIdList[1], &this->actor); this->textId = 0x2A31; Message_StartTextbox(play, this->textId, &this->actor); this->flags1 |= 0x4000; SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CHASE | SEQ_FLAG_ASYNC); this->actionFunc = func_80BAD380; } else { - ActorCutscene_SetIntentToPlay(this->cutscenes[1]); + CutsceneManager_Queue(this->csIdList[1]); } } void func_80BAD2B4(EnSuttari* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->textId == 0x2A30) { - ActorCutscene_Stop(this->cutscenes[0]); - ActorCutscene_SetIntentToPlay(this->cutscenes[1]); + CutsceneManager_Stop(this->csIdList[0]); + CutsceneManager_Queue(this->csIdList[1]); this->actionFunc = func_80BAD230; } else { - ActorCutscene_Stop(this->cutscenes[1]); + CutsceneManager_Stop(this->csIdList[1]); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->flags1 |= 0x40; @@ -1211,7 +1211,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { this->flags2 &= ~0x10; player->stateFlags1 &= ~PLAYER_STATE1_10000000; this->flags1 &= ~0x4000; - ActorCutscene_Stop(this->cutscenes[1]); + CutsceneManager_Stop(this->csIdList[1]); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->flags1 |= 0x40; @@ -1346,7 +1346,7 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->flags1 & 0x400) { if (this->textId == 0x29EE) { - ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]); + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } this->flags1 &= ~0x400; if (this->flags2 & 1) { @@ -1385,16 +1385,16 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { } void func_80BADD0C(EnSuttari* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIdx])) { - if (this->cutsceneIdx == 0) { - ActorCutscene_Start(this->cutscenes[this->cutsceneIdx], &this->enFsn->actor); + if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + if (this->csIdIndex == 0) { + CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->enFsn->actor); } else { - ActorCutscene_Start(this->cutscenes[this->cutsceneIdx], &this->actor); + CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor); } func_80BAAA94(this); this->actionFunc = func_80BADA9C; } else { - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIdx]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h index 669cf549e..071000763 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h @@ -56,8 +56,8 @@ typedef struct EnSuttari { /* 0x444 */ Vec3f unk444; /* 0x450 */ s32 animIndex; /* 0x454 */ UNK_TYPE1 unk_454[0x2]; - /* 0x456 */ s16 cutscenes[2]; - /* 0x45A */ s16 cutsceneIdx; + /* 0x456 */ s16 csIdList[2]; + /* 0x45A */ s16 csIdIndex; } EnSuttari; // size = 0x45C #endif // Z_EN_SUTTARI_H 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 f37605707..1bb664416 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -1090,14 +1090,14 @@ void func_808DB100(EnSw* this, PlayState* play) { } void func_808DB25C(EnSw* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); func_808D9C18(this); this->actionFunc = func_808DB2E0; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } 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 7941ea758..d5ea5f9df 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -339,11 +339,11 @@ s32 func_80A3E97C(EnTest3* this, PlayState* play) { } s32 func_80A3E9DC(EnTest3* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_D8D)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_D8D, &this->player.actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->player.actor); return true; } else { - ActorCutscene_SetIntentToPlay(this->unk_D8D); + CutsceneManager_Queue(this->csId); return false; } } @@ -357,8 +357,8 @@ s32 func_80A3EA30(EnTest3* this, PlayState* play) { } } if (this->unk_D78->unk_1 != 0) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_D8D); + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); play->msgCtx.msgMode = 0x44; } return false; @@ -374,9 +374,9 @@ s32 func_80A3EAC4(EnTest3* this, PlayState* play) { s32 func_80A3EAF8(EnTest3* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_D78->textId == 0x145F) { - ActorCutscene_Stop(this->unk_D8D); - this->unk_D8D = 0x7C; - ActorCutscene_SetIntentToPlay(this->unk_D8D); + CutsceneManager_Stop(this->csId); + this->csId = CS_ID_GLOBAL_TALK; + CutsceneManager_Queue(this->csId); this->player.targetedActor = &GET_PLAYER(play)->actor; } return 1; @@ -452,7 +452,7 @@ void EnTest3_Init(Actor* thisx, PlayState* play2) { D_80A41D24 = true; this->player.actor.room = -1; - this->player.unk_A86 = -1; + this->player.csId = CS_ID_NONE; this->player.transformation = PLAYER_FORM_HUMAN; this->player.ageProperties = &sAgeProperties; this->player.heldItemAction = PLAYER_IA_NONE; @@ -526,8 +526,8 @@ void func_80A3F0B0(EnTest3* this, PlayState* play) { } void func_80A3F114(EnTest3* this, PlayState* play) { - if (this->player.csMode != 0) { - play->startPlayerCutscene(play, &this->player, 6); + if (this->player.csMode != PLAYER_CSMODE_0) { + play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_END); } } @@ -596,7 +596,7 @@ s32 func_80A3F384(EnTest3* this, PlayState* play) { this->player.doorType = 1; this->player.doorDirection = (offset.z >= 0.0f) ? 1.0f : -1.0f; this->player.doorActor = &door->dyna.actor; - this->player.unk_A86 = -1; + this->player.csId = CS_ID_NONE; return true; } return false; @@ -616,7 +616,7 @@ void func_80A3F534(EnTest3* this, PlayState* play) { } else { this->unk_D78 = &D_80A41854[1]; } - this->unk_D8D = this->player.actor.cutscene; + this->csId = this->player.actor.csId; } void func_80A3F5A4(EnTest3* this, PlayState* play) { @@ -628,7 +628,7 @@ void func_80A3F5A4(EnTest3* this, PlayState* play) { } else { this->unk_D78 = &D_80A41854[12]; } - this->unk_D8D = this->player.actor.cutscene; + this->csId = this->player.actor.csId; } s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { @@ -666,8 +666,8 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) { this->unk_D90->stateFlags1 |= PLAYER_STATE1_20; func_800BC154(play, &play->actorCtx, &this->unk_D90->actor, 4); func_800BC154(play, &play->actorCtx, &this->player.actor, 2); - ActorCutscene_SetReturnCamera(this->subCamId); - play->startPlayerCutscene(play, &this->player, 7); + CutsceneManager_SetReturnCamera(this->subCamId); + play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_WAIT); } func_800B863C(&this->player.actor, play); if (this->unk_D88 == 3) { @@ -689,7 +689,7 @@ s32 func_80A3F8D4(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul ((postActor = func_80A3F2BC(play, this, ACTOR_EN_PM, ACTORCAT_NPC, 100.0f, 20.0f)) != NULL)) { this->player.actor.home.rot.y = Actor_WorldYawTowardActor(&this->player.actor, postActor); } - play->startPlayerCutscene(play, &this->player, 0x61); + play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_97); return true; } @@ -736,7 +736,7 @@ s32 func_80A3FA58(EnTest3* this, PlayState* play) { return false; } if (this->unk_D8A == 90) { - play->startPlayerCutscene(play, &this->player, 0x15); + play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_21); } } else { this->unk_D8A++; @@ -757,20 +757,20 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { if (!Play_InCsMode(play)) { D_80A41D20 = 1; this->unk_D78 = &D_80A41854[20]; - this->unk_D8D = this->player.actor.cutscene; + this->csId = this->player.actor.csId; this->player.actor.textId = this->unk_D78->textId; } } else if (D_80A41D20 == 1) { - if (this->unk_D8D >= 0) { + if (this->csId >= 0) { if (func_80A3E9DC(this, play)) { - this->unk_D8D = -1; + this->csId = CS_ID_NONE; Environment_StopTime(); } } else if ((play->actorCtx.flags & ACTORCTX_FLAG_6) || (play->actorCtx.flags & ACTORCTX_FLAG_5)) { - this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->player.actor.csId); SET_WEEKEVENTREG(WEEKEVENTREG_90_02); if (play->actorCtx.flags & ACTORCTX_FLAG_5) { - this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->unk_D8D); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); } SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1); D_80A41D20 = 2; @@ -778,7 +778,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { func_80A3F73C(this, play); } } else if ((D_80A41D20 == 2) && func_80A3E9DC(this, play)) { - ActorCutscene_SetReturnCamera(CAM_ID_MAIN); + 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)))); @@ -793,7 +793,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { } s32 func_80A3FDE4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { - this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->player.actor.csId); return true; } @@ -813,7 +813,7 @@ s32 func_80A3FE20(EnTest3* this, PlayState* play) { } else if (D_80A41D64 == 1) { func_80A40230(this, play); } else if (D_80A41D64 == 2) { - ActorCutscene_Stop(this->unk_D8D); + CutsceneManager_Stop(this->csId); SET_WEEKEVENTREG(WEEKEVENTREG_90_02); D_80A41D64 = 3; } @@ -835,9 +835,9 @@ s32 func_80A3FF10(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul return true; } else { func_80A3F15C(this, play, arg2); - this->unk_D8D = this->player.actor.cutscene; + this->csId = this->player.actor.csId; if (play->roomCtx.curRoom.num == 2) { - this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->unk_D8D); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); } return true; } @@ -856,7 +856,7 @@ s32 func_80A3FFD0(EnTest3* this, PlayState* play2) { } } else { SET_WEEKEVENTREG(WEEKEVENTREG_51_40); - play->startPlayerCutscene(play, &this->player, 0x6E); + play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_110); } return false; } @@ -1032,7 +1032,7 @@ void func_80A409D4(EnTest3* this, PlayState* play) { if ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)) { play->actorCtx.flags &= ~ACTORCTX_FLAG_4; func_80A3F0B0(this, play); - ActorCutscene_SetReturnCamera(CAM_ID_MAIN); + CutsceneManager_SetReturnCamera(CAM_ID_MAIN); } else { sEnTest3_Input = *CONTROLLER1(&play->state); } @@ -1055,16 +1055,16 @@ void EnTest3_Update(Actor* thisx, PlayState* play2) { this->player.actor.draw = EnTest3_Draw; D_80A41D48 = false; this->player.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); - if (Cutscene_CheckActorAction(play, 0x1FA) && + 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)))) { - if (this->player.csMode != 5) { - play->startPlayerCutscene(play, &this->player, 5); + if (this->player.csMode != PLAYER_CSMODE_5) { + play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_5); } play->actorCtx.flags &= ~ACTORCTX_FLAG_4; } else if (this->player.actor.category == ACTORCAT_PLAYER) { func_80A409D4(this, play); - } else if (play->startPlayerCutscene(play, &this->player, 0)) { + } else if (play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_0)) { if (this->unk_D88 >= 7) { Vec3f worldPos; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.h b/src/overlays/actors/ovl_En_Test3/z_en_test3.h index a4f1ff659..36cd15c27 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.h +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.h @@ -26,7 +26,7 @@ typedef struct EnTest3 { /* 0xD89 */ u8 unk_D89; /* 0xD8A */ s16 unk_D8A; /* 0xD8C */ u8 unk_D8C; - /* 0xD8D */ s8 unk_D8D; + /* 0xD8D */ s8 csId; /* 0xD8E */ s16 subCamId; /* 0xD90 */ Player* unk_D90; /* 0xD94 */ EnTest3ActionFunc unk_D94; 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 59af8f7e8..24d8b4137 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -43,19 +43,19 @@ static s16 sNightMessages2[] = { 0x1BB4, 0x1BB5, 0x1BB6 }; static s16 sDayMessages2[] = { 0x1BB2, 0x1BB2, 0x1BB3 }; static u16 D_80A43364[] = { CLOCK_TIME(6, 0), CLOCK_TIME(18, 0) }; -static s16 sCutscenes[2]; -static s16 sCurrentCs; +static s16 sCsIdList[2]; +static s16 sCurCsId; void func_80A41D70(EnTest4* this, PlayState* play) { - if (this->unk_144 != 0) { + if (this->csIdIndex != 0) { func_80151A68(play, sNightMessages1[CURRENT_DAY - 1]); - } else if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_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]); } else { - this->unk_144 = 0; + this->csIdIndex = 0; this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; } @@ -67,22 +67,22 @@ void func_80A41D70(EnTest4* this, PlayState* play) { } if (gSaveContext.cutsceneTrigger == 0) { - if ((sCutscenes[this->unk_144] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { + if ((sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { this->actionFunc = func_80A42F20; - sCurrentCs = sCutscenes[this->unk_144]; + sCurCsId = sCsIdList[this->csIdIndex]; this->transitionCsTimer = 0; SET_EVENTINF(EVENTINF_17); - } else if (this->unk_144 == 0) { + } else if (this->csIdIndex == 0) { play_sound(NA_SE_EV_CHICKEN_CRY_M); } else { func_8019F128(NA_SE_EV_DOG_CRY_EVENING); } } else { this->actionFunc = func_80A42AB8; - if (this->unk_144 == 0) { - this->unk_144 = 1; + if (this->csIdIndex == 0) { + this->csIdIndex = 1; } else { - this->unk_144 = 0; + this->csIdIndex = 0; } this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; @@ -90,9 +90,9 @@ void func_80A41D70(EnTest4* this, PlayState* play) { } void func_80A41FA4(EnTest4* this, PlayState* play) { - if (this->unk_144 != 0) { + if (this->csIdIndex != 0) { func_80151A68(play, sNightMessages2[CURRENT_DAY - 1]); - } else if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_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); @@ -104,22 +104,22 @@ void func_80A41FA4(EnTest4* this, PlayState* play) { } if (gSaveContext.cutsceneTrigger == 0) { - if ((sCutscenes[this->unk_144] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { + if ((sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { this->actionFunc = func_80A42F20; - sCurrentCs = sCutscenes[this->unk_144]; + sCurCsId = sCsIdList[this->csIdIndex]; this->transitionCsTimer = 0; SET_EVENTINF(EVENTINF_17); - } else if (this->unk_144 == 0) { + } else if (this->csIdIndex == 0) { play_sound(NA_SE_EV_CHICKEN_CRY_M); } else { func_8019F128(NA_SE_EV_DOG_CRY_EVENING); } } else { this->actionFunc = func_80A42AB8; - if (this->unk_144 == 0) { - this->unk_144 = 1; + if (this->csIdIndex == 0) { + this->csIdIndex = 1; } else { - this->unk_144 = 0; + this->csIdIndex = 0; } this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; @@ -278,7 +278,7 @@ void func_80A425E4(EnTest4* this, PlayState* play) { this->nextBellTime = CLOCK_TIME(17, 30); } - if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1) || (CURRENT_DAY == 3) || + if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1) || (CURRENT_DAY == 3) || (gSaveContext.save.time >= CLOCK_TIME(17, 0))) { gSaveContext.screenScale = 1000.0f; } @@ -292,17 +292,17 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { s32 dayTemp; EnTest4* this = THIS; Player* player = GET_PLAYER(play); - s8 temp_v0 = this->actor.cutscene; + s8 csId = this->actor.csId; - sCutscenes[0] = temp_v0; - if (temp_v0 >= 0) { - ActorCutscene* temp_v0_2 = ActorCutscene_GetCutscene(sCutscenes[0]); + sCsIdList[0] = csId; + if (csId >= 0) { + ActorCutscene* actorCutscene = CutsceneManager_GetCutsceneEntry(sCsIdList[0]); SET_EVENTINF(EVENTINF_52); - sCutscenes[1] = temp_v0_2->additionalCutscene; + sCsIdList[1] = actorCutscene->additionalCsId; } else { CLEAR_EVENTINF(EVENTINF_52); - sCutscenes[1] = sCutscenes[0]; + sCsIdList[1] = sCsIdList[0]; } if (sIsLoaded || (CHECK_EVENTINF(EVENTINF_27))) { @@ -318,29 +318,29 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { gSaveContext.gameMode = GAMEMODE_NORMAL; STOP_GAMESTATE(&play->state); SET_NEXT_GAMESTATE(&play->state, DayTelop_Init, sizeof(DayTelopState)); - this->unk_144 = 1; + this->csIdIndex = 1; gSaveContext.save.time = CLOCK_TIME(6, 0); Actor_Kill(&this->actor); } else { gSaveContext.save.day = 1; dayTemp = gSaveContext.save.day; gSaveContext.save.daysElapsed = dayTemp; - this->unk_144 = 1; + this->csIdIndex = 1; this->unk_146 = gSaveContext.save.time; this->actionFunc = func_80A42AB8; } } else if (gSaveContext.save.time == CLOCK_TIME(6, 0)) { - this->unk_144 = 0; + this->csIdIndex = 0; func_80A41D70(this, play); - if ((gSaveContext.cutsceneTrigger == 0) && (sCutscenes[this->unk_144] >= 0) && + if ((gSaveContext.cutsceneTrigger == 0) && (sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { player->stateFlags1 |= PLAYER_STATE1_200; } } else { if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) { - this->unk_144 = 0; + this->csIdIndex = 0; } else { - this->unk_144 = 1; + this->csIdIndex = 1; } this->unk_146 = gSaveContext.save.time; this->actionFunc = func_80A42AB8; @@ -354,7 +354,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { } this->lastBellTime = gSaveContext.save.time; - if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { + if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { gSaveContext.screenScaleFlag = false; gSaveContext.screenScale = 1000.0f; } @@ -369,7 +369,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { if ((play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play) && (play->numSetupActors <= 0) && (play->roomCtx.status == 0) && !Play_IsDebugCamEnabled()) { s16 temp_a2; - u16 temp_a0 = D_80A43364[this->unk_144]; + u16 temp_a0 = D_80A43364[this->csIdIndex]; s16 temp_a3; s16 bellDiff; s16 new_var; @@ -392,7 +392,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { Interface_StartMoonCrash(play); Actor_Kill(&this->actor); SET_EVENTINF(EVENTINF_17); - } else if (((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) && + } else if (((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) && (CURRENT_DAY != 3)) { func_80A41FA4(this, play); } else { @@ -418,14 +418,14 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { } } - if ((sCutscenes[this->unk_144] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { + if ((sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) { player->stateFlags1 |= PLAYER_STATE1_200; this->unk_146 = gSaveContext.save.time; } else { - if (this->unk_144 == 0) { - this->unk_144 = 1; + if (this->csIdIndex == 0) { + this->csIdIndex = 1; } else { - this->unk_144 = 0; + this->csIdIndex = 0; } this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; @@ -470,11 +470,11 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { void func_80A42F20(EnTest4* this, PlayState* play) { if (!this->transitionCsTimer) { - if (sCurrentCs >= 0) { - if (ActorCutscene_GetCanPlayNext(sCurrentCs) == 0) { - ActorCutscene_SetIntentToPlay(sCurrentCs); + if (sCurCsId >= 0) { + if (!CutsceneManager_IsNext(sCurCsId)) { + CutsceneManager_Queue(sCurCsId); } else { - ActorCutscene_Start(sCurrentCs, &this->actor); + CutsceneManager_Start(sCurCsId, &this->actor); this->transitionCsTimer = 1; } } else { @@ -483,7 +483,7 @@ void func_80A42F20(EnTest4* this, PlayState* play) { } else if (this->transitionCsTimer < 60) { this->transitionCsTimer++; if (this->transitionCsTimer == 10) { - if (this->unk_144 == 0) { + if (this->csIdIndex == 0) { play_sound(NA_SE_EV_CHICKEN_CRY_M); } else { func_8019F128(NA_SE_EV_DOG_CRY_EVENING); @@ -499,14 +499,14 @@ void func_80A42F20(EnTest4* this, PlayState* play) { } } else { this->actionFunc = func_80A42AB8; - if (this->unk_144 == 0) { - this->unk_144 = 1; + if (this->csIdIndex == 0) { + this->csIdIndex = 1; } else { - this->unk_144 = 0; + this->csIdIndex = 0; } - if (sCurrentCs >= 0) { - ActorCutscene_Stop(sCurrentCs); + if (sCurCsId >= 0) { + CutsceneManager_Stop(sCurCsId); } gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.h b/src/overlays/actors/ovl_En_Test4/z_en_test4.h index 0a372f245..106a5a9aa 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.h +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.h @@ -9,7 +9,7 @@ typedef void (*EnTest4ActionFunc)(struct EnTest4*, PlayState*); typedef struct EnTest4 { /* 0x000 */ Actor actor; - /* 0x144 */ s8 unk_144; // 0 on night, 1 on day + /* 0x144 */ s8 csIdIndex; // 0 on night, 1 on day /* 0x145 */ u8 transitionCsTimer; /* 0x146 */ u16 unk_146; /* 0x148 */ u16 nextBellTime; // Next time the bell will sound 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 2b57ecf51..42ff16ccf 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -7,6 +7,7 @@ #include "z_en_test6.h" #include "z64quake.h" #include "objects/gameplay_keep/gameplay_keep.h" +#include "z64cutscene_commands.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | ACTOR_FLAG_2000000) @@ -54,30 +55,57 @@ ActorInit En_Test6_InitVars = { (ActorFunc)EnTest6_Draw, }; -u8 D_80A93E80[] = { - 0x00, 0x0D, 0x01, 0xA8, 0x00, 0x00, 0x00, 0x64, 0x04, 0x64, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xED, 0x00, - 0x00, 0x04, 0x64, 0x00, 0x12, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xED, 0x00, 0x00, 0x04, 0x64, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x15, 0xFF, 0xED, 0x00, 0x00, 0x04, 0x64, 0x00, 0x11, 0xFF, 0xE6, 0xFF, 0xFB, 0xFF, 0xE0, 0x00, 0x00, 0x04, - 0x64, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x12, 0xFF, 0xE0, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x16, - 0xFF, 0xE5, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFB, 0x00, 0x00, 0x04, 0x64, 0x00, - 0x07, 0x00, 0x10, 0x00, 0x1D, 0xFF, 0xB3, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0x00, 0x01, 0x00, 0x13, 0x00, 0x6F, - 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFF, 0xC5, 0x00, 0x15, 0x00, 0x5B, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFF, - 0xED, 0x00, 0x3B, 0x00, 0x54, 0x00, 0x00, 0x04, 0x64, 0x00, 0x88, 0xFF, 0xED, 0x00, 0x3B, 0x00, 0x54, 0x00, 0x00, - 0x04, 0x64, 0x00, 0x6C, 0xFF, 0xEF, 0x00, 0x39, 0x00, 0x52, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x32, 0x02, 0xA9, 0x00, 0x00, 0x04, 0x64, 0x00, 0x12, 0x00, 0x00, 0x00, 0x32, 0x02, 0xA9, 0x00, 0x00, 0x04, 0x64, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x02, 0xA9, 0x00, 0x00, 0x04, 0x64, 0x00, 0x11, 0xFF, 0x98, 0x01, 0x77, 0x01, - 0x59, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0F, 0x00, 0x00, 0xFF, 0xC2, 0x01, 0x21, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0E, - 0xFF, 0xD1, 0x00, 0x7D, 0x00, 0xCD, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0C, 0xFF, 0xC6, 0xFF, 0xEF, 0x00, 0xC7, 0x00, - 0x00, 0x04, 0x64, 0x00, 0x07, 0x00, 0x10, 0x00, 0x35, 0x00, 0xD3, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFF, 0xE1, - 0x00, 0x3F, 0x02, 0x6F, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFE, 0xAB, 0x01, 0xD0, 0x02, 0x1E, 0x00, 0x00, 0x04, - 0x64, 0x00, 0x03, 0xFE, 0xAB, 0x01, 0xD0, 0x02, 0x1E, 0x00, 0x00, 0x04, 0x64, 0x00, 0x88, 0xFE, 0xAB, 0x01, 0xD0, - 0x02, 0x1E, 0x00, 0x00, 0x04, 0x64, 0x00, 0x6C, 0xFE, 0xAD, 0x01, 0xCE, 0x02, 0x1C, 0x00, 0x00, 0x00, 0x0F, 0x00, - 0x0A, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0x46, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xEC, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x05, 0xFF, 0xFB, - 0x00, 0x32, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDC, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD8, 0x00, 0x78, 0x00, - 0x00, 0x00, 0x02, 0xFF, 0xC4, 0x00, 0x78, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xBA, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02, - 0xFF, 0xB0, 0x00, 0x8C, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x04, +CutsceneData D_80A93E80[] = { + // Header + CS_CAM_SPLINE(13, 424, 0, 100), + + // Camera At Data + /* 0x0 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 13, 0, 21, -19, CS_CAM_REL_0), + /* 0x1 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 18, 0, 21, -19, CS_CAM_REL_0), + /* 0x2 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 16, 0, 21, -19, CS_CAM_REL_0), + /* 0x3 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 17, -26, -5, -32, CS_CAM_REL_0), + /* 0x4 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 15, 0, 18, -32, CS_CAM_REL_0), + /* 0x5 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 14, 1, 22, -27, CS_CAM_REL_0), + /* 0x6 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 12, 0, 1, -5, CS_CAM_REL_0), + /* 0x7 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 7, 16, 29, -77, CS_CAM_REL_0), + /* 0x8 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, 1, 19, 111, CS_CAM_REL_0), + /* 0x9 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -59, 21, 91, CS_CAM_REL_0), + /* 0xA */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -19, 59, 84, CS_CAM_REL_0), + /* 0xB */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 136, -19, 59, 84, CS_CAM_REL_0), + /* 0xC */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 108, -17, 57, 82, CS_CAM_REL_0), + + // Camera Eye Data + /* 0x0 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 13, 0, 50, 681, CS_CAM_REL_0), + /* 0x1 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 18, 0, 50, 681, CS_CAM_REL_0), + /* 0x2 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 16, 0, 50, 681, CS_CAM_REL_0), + /* 0x3 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 17, -104, 375, 345, CS_CAM_REL_0), + /* 0x4 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 15, 0, -62, 289, CS_CAM_REL_0), + /* 0x5 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 14, -47, 125, 205, CS_CAM_REL_0), + /* 0x6 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 12, -58, -17, 199, CS_CAM_REL_0), + /* 0x7 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 7, 16, 53, 211, CS_CAM_REL_0), + /* 0x8 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -31, 63, 623, CS_CAM_REL_0), + /* 0x9 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -341, 464, 542, CS_CAM_REL_0), + /* 0xA */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -341, 464, 542, CS_CAM_REL_0), + /* 0xB */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 136, -341, 464, 542, CS_CAM_REL_0), + /* 0xC */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 108, -339, 462, 540, CS_CAM_REL_0), + + // Camera Roll and Fov Data + /* 0x0 */ CS_CAM_MISC(15, 0xA, 70, 0), + /* 0x1 */ CS_CAM_MISC(15, 0xA, 70, 0), + /* 0x2 */ CS_CAM_MISC(15, 0xA, 70, 0), + /* 0x3 */ CS_CAM_MISC(10, 0x2, 60, 0), + /* 0x4 */ CS_CAM_MISC(10, -0x14, 55, 0), + /* 0x5 */ CS_CAM_MISC(16, 0x0, 43, 0), + /* 0x6 */ CS_CAM_MISC(12, 0x6, 47, 0), + /* 0x7 */ CS_CAM_MISC(5, -0x5, 50, 0), + /* 0x8 */ CS_CAM_MISC(2, -0x24, 108, 0), + /* 0x9 */ CS_CAM_MISC(2, -0x28, 120, 0), + /* 0xA */ CS_CAM_MISC(2, -0x3C, 120, 0), + /* 0xB */ CS_CAM_MISC(2, -0x46, 130, 0), + /* 0xC */ CS_CAM_MISC(2, -0x50, 140, 0), + + // Terminate + CS_CAM_END() }; TexturePtr D_80A9402C[] = { @@ -113,12 +141,12 @@ void func_80A90730(EnTest6* this, PlayState* play) { case ENTEST6_24: case ENTEST6_25: func_80A91690(this, play); - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); return; case ENTEST6_26: func_80A920C8(this, play); - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); return; } @@ -301,7 +329,7 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) { if (((ENTEST6_GET(&this->actor) == ENTEST6_24) || (ENTEST6_GET(&this->actor) == ENTEST6_25) || (ENTEST6_GET(&this->actor) == ENTEST6_26)) && - (play->playerActorCsIds[8] == -1)) { + (play->playerCsIds[PLAYER_CS_ID_SONG_WARP] == CS_ID_NONE)) { Actor_Kill(&this->actor); return; } @@ -313,7 +341,7 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) { } this->unk_286 = 0; - this->unk_274 = 0; + this->cueId = 0; this->unk_278 = 0; this->unk_276 = 99; func_80A90730(this, play); @@ -350,21 +378,21 @@ void func_80A9156C(EnTest6* this, PlayState* play) { switch (ENTEST6_GET(&this->actor)) { case ENTEST6_24: case ENTEST6_25: - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); } else { - ActorCutscene_Start(play->playerActorCsIds[8], NULL); - this->subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); + this->subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); EnTest6_SetupAction(this, func_80A91760); } break; case ENTEST6_26: - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); } else { - ActorCutscene_Start(play->playerActorCsIds[8], NULL); - this->subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); + this->subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); EnTest6_SetupAction(this, func_80A92188); } break; @@ -379,7 +407,7 @@ void func_80A9156C(EnTest6* this, PlayState* play) { } void func_80A91690(EnTest6* this, PlayState* play) { - this->unk_274 = 90; + this->cueId = 90; this->unk_27A = 100; this->unk_286 = 0; if (ENTEST6_GET(&this->actor) == ENTEST6_25) { @@ -394,8 +422,8 @@ void func_80A916F0(EnTest6* this, PlayState* play) { player->actor.freezeTimer = 0; play->unk_18844 = false; - ActorCutscene_Stop(play->playerActorCsIds[8]); - func_800B7298(play, NULL, PLAYER_CSMODE_6); + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); + func_800B7298(play, NULL, PLAYER_CSMODE_END); EnTest6_DisableMotionBlur(); Distortion_ClearType(DISTORTION_TYPE_5); Actor_Kill(&this->actor); @@ -415,14 +443,14 @@ void func_80A91760(EnTest6* this, PlayState* play) { mainCam = Play_GetCamera(play, CAM_ID_MAIN); - switch (this->unk_274) { + switch (this->cueId) { case 90: this->unk_276 = 2; this->unk_15C = 0.0f; this->unk_14C = 0.1f; this->unk_282 = 0; this->unk_278 = 0; - this->unk_274 = 91; + this->cueId = 91; break; case 91: @@ -466,7 +494,7 @@ void func_80A91760(EnTest6* this, PlayState* play) { Distortion_SetType(DISTORTION_TYPE_5); Distortion_SetCountdown(80); play->unk_18844 = true; - this->unk_274 = 95; + this->cueId = 95; } break; @@ -523,7 +551,7 @@ void func_80A91760(EnTest6* this, PlayState* play) { if (this->unk_254 != NULL) { ZeldaArena_Free(this->unk_254); } - this->unk_274 = 99; + this->cueId = 99; } break; @@ -537,7 +565,7 @@ void func_80A91760(EnTest6* this, PlayState* play) { } if (this->unk_286 != 0) { - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); } else { if (this->unk_27A == 90) { func_800B7298(play, NULL, PLAYER_CSMODE_66); @@ -615,8 +643,8 @@ void func_80A92118(EnTest6* this, PlayState* play) { player->actor.freezeTimer = 0; play->unk_18844 = false; - ActorCutscene_Stop(play->playerActorCsIds[8]); - func_800B7298(play, NULL, PLAYER_CSMODE_6); + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); + func_800B7298(play, NULL, PLAYER_CSMODE_END); EnTest6_DisableMotionBlur(); Distortion_ClearType(DISTORTION_TYPE_5); Actor_Kill(&this->actor); @@ -687,7 +715,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { EnTest6_EnableMotionBlur(20); Distortion_SetType(DISTORTION_TYPE_5); Distortion_SetCountdown(90); - this->unk_274 = 2; + this->cueId = 2; break; case 110: @@ -696,34 +724,34 @@ void func_80A92188(EnTest6* this, PlayState* play) { case 38: case 114: - this->unk_274 = 1; + this->cueId = 1; break; case 76: - this->unk_274 = 3; + this->cueId = 3; break; case 61: EnTest6_EnableMotionBlur(150); - this->unk_274 = 4; + this->cueId = 4; break; case 51: EnTest6_EnableMotionBlur(180); - this->unk_274 = 5; + this->cueId = 5; break; case 14: case 15: EnTest6_EnableMotionBlur(50); Distortion_ClearType(DISTORTION_TYPE_5); - this->unk_274 = 0; + this->cueId = 0; break; case 1: EnTest6_DisableMotionBlur(); if (CHECK_EVENTINF(EVENTINF_52)) { - this->unk_274 = 9; + this->cueId = 9; } break; } @@ -731,19 +759,19 @@ void func_80A92188(EnTest6* this, PlayState* play) { func_80A92950(this, play); if (this->unk_27A == 115) { - subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]); + subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); subCam = Play_GetCamera(play, subCamId); this->subCamAt = subCam->at; this->subCamEye = subCam->eye; this->subCamFov = subCam->fov; - func_8016119C(subCam, &this->unk_18C); + CutsceneCamera_Init(subCam, &this->unk_18C); } if ((this->unk_27A <= 115) && (this->unk_27A >= 16)) { - func_80161998(D_80A93E80, &this->unk_18C); + CutsceneCamera_UpdateSplines((u8*)D_80A93E80, &this->unk_18C); } else if (this->unk_27A < 16) { - subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]); + subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); Play_SetCameraAtEyeUp(play, subCamId, &this->subCamAt, &this->subCamEye, &sSubCamUp); Play_SetCameraFov(play, subCamId, this->subCamFov); @@ -780,7 +808,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { break; case 38: - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); break; case 14: @@ -825,13 +853,13 @@ void func_80A92950(EnTest6* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 temp_f0; s32 i; - s32 temp_v0; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 0x1F9)) { - temp_v0 = Cutscene_GetActorActionIndex(play, 0x1F9); - this->unk_274 = play->csCtx.actorActions[temp_v0]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_505)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_505); + this->cueId = play->csCtx.actorCues[cueChannel]->id; - switch (this->unk_274) { + switch (this->cueId) { case 1: break; @@ -841,39 +869,39 @@ void func_80A92950(EnTest6* this, PlayState* play) { this->unk_27C = 0; player->actor.shape.shadowDraw = NULL; - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_154 = (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { this->unk_154 = 150.0f; } - if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) { - this->unk_280 = play->csCtx.actorActions[temp_v0]->startPos.y; + if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { + this->unk_280 = play->csCtx.actorCues[cueChannel]->startPos.y; } else { this->unk_280 = 38; } - if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) { - this->unk_150 = (u32)play->csCtx.actorActions[temp_v0]->startPos.z; + if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { + this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { this->unk_150 = 480.0f; } break; case 3: - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_154 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } - if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) { - this->unk_280 += (s16)play->csCtx.actorActions[temp_v0]->startPos.y; + if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { + this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; } else { this->unk_280 += 6; } - if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) { - this->unk_158 = (u32)play->csCtx.actorActions[temp_v0]->startPos.z; + if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { + this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { this->unk_158 = -32.0f; } @@ -881,30 +909,30 @@ void func_80A92950(EnTest6* this, PlayState* play) { break; case 4: - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_154 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } - if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) { - this->unk_280 += (s16)play->csCtx.actorActions[temp_v0]->startPos.y; + if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { + this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; } else { this->unk_280 -= 4; } break; case 5: - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_154 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } - if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) { - this->unk_280 += (s16)play->csCtx.actorActions[temp_v0]->startPos.y; + if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { + this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; } else { this->unk_280 -= 8; } - if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) { - this->unk_158 += (u32)play->csCtx.actorActions[temp_v0]->startPos.z; + if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { + this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { this->unk_158 += 20.0f; } @@ -912,7 +940,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { this->unk_150 += this->unk_158; if (this->unk_150 > 3500.0f) { this->unk_150 = 3500.0f; - this->unk_274 = 0; + this->cueId = 0; } break; @@ -922,20 +950,20 @@ void func_80A92950(EnTest6* this, PlayState* play) { this->unk_27C = 0; player->actor.shape.shadowDraw = NULL; - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_154 = (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { this->unk_154 = 100.0f; } - if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) { - this->unk_14C = (u32)play->csCtx.actorActions[temp_v0]->startPos.y; + if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { + this->unk_14C = (u32)play->csCtx.actorCues[cueChannel]->startPos.y; } else { this->unk_14C = 20.0f; } - if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) { - this->unk_150 = (u32)play->csCtx.actorActions[temp_v0]->startPos.z; + if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { + this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { this->unk_150 = 300.0f; } @@ -943,8 +971,8 @@ void func_80A92950(EnTest6* this, PlayState* play) { break; case 7: - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_158 = (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { this->unk_158 = -5.0f; } @@ -952,8 +980,8 @@ void func_80A92950(EnTest6* this, PlayState* play) { break; case 8: - if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) { - this->unk_158 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x; + if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { + this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { this->unk_158 += 2.0f; } @@ -961,7 +989,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { this->unk_154 += this->unk_158; if (this->unk_154 > 10000.0f) { this->unk_154 = 10000.0f; - this->unk_274 = 0; + this->cueId = 0; } break; @@ -987,7 +1015,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { return; } } else { - switch (this->unk_274) { + switch (this->cueId) { case 2: this->unk_276 = 0; this->unk_278 = 0; @@ -1016,7 +1044,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { this->unk_150 += this->unk_158; if (this->unk_150 > 3500.0f) { this->unk_150 = 3500.0f; - this->unk_274 = 0; + this->cueId = 0; } break; @@ -1041,7 +1069,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { this->unk_154 += this->unk_158; if (this->unk_154 > 10000.0f) { this->unk_154 = 10000.0f; - this->unk_274 = 0; + this->cueId = 0; } break; @@ -1231,7 +1259,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - switch (this->unk_274) { + switch (this->cueId) { case 91: case 93: Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f, @@ -1297,7 +1325,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) { void EnTest6_Draw(Actor* thisx, PlayState* play) { EnTest6* this = THIS; - if (this->unk_274 != 0) { + if (this->cueId != 0) { switch (this->unk_276) { case 1: func_80A93298(this, play); diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.h b/src/overlays/actors/ovl_En_Test6/z_en_test6.h index ec06afb91..d7e40a983 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h @@ -31,13 +31,13 @@ typedef struct EnTest6 { /* 0x15C */ f32 unk_15C; /* 0x160 */ f32 unk_160; /* 0x164 */ EnTest6Light lights[2]; - /* 0x18C */ DbCameraUnkStruct unk_18C; + /* 0x18C */ CutsceneCamera unk_18C; /* 0x20C */ Vec3f unk_20C[6]; /* 0x254 */ Vec3f (*unk_254)[64]; /* 0x258 */ Vec3f subCamAt; /* 0x264 */ Vec3f subCamEye; /* 0x270 */ f32 subCamFov; - /* 0x274 */ s16 unk_274; + /* 0x274 */ s16 cueId; /* 0x276 */ s16 unk_276; /* 0x278 */ s16 unk_278; /* 0x27A */ s16 unk_27A; 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 56b6c6f81..9c672ed51 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -412,12 +412,12 @@ void EnTest7_Init(Actor* thisx, PlayState* play2) { Audio_PlayBgm_StorePrevBgm(NA_BGM_SONG_OF_SOARING); } - if (play->playerActorCsIds[8] == -1) { + if (play->playerCsIds[PLAYER_CS_ID_SONG_WARP] == CS_ID_NONE) { Actor_Kill(&this->actor); return; } - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); player2->stateFlags1 |= PLAYER_STATE1_20; Lights_PointNoGlowSetInfo(&this->lightInfo, (Math_SinS(this->unk_1E8E) * 90.0f) + player->actor.world.pos.x, player->actor.world.pos.y + 10.0f, @@ -428,15 +428,15 @@ void EnTest7_Init(Actor* thisx, PlayState* play2) { void EnTest7_Destroy(Actor* thisx, PlayState* play) { EnTest7* this = THIS; - ActorCutscene_Stop(play->playerActorCsIds[8]); + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); } void func_80AF19A8(EnTest7* this, PlayState* play) { - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); } else { - ActorCutscene_Start(play->playerActorCsIds[8], NULL); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); func_80AF082C(this, func_80AF1A2C); play->unk_18844 = true; } @@ -452,7 +452,8 @@ void func_80AF1A2C(EnTest7* this, PlayState* play) { func_800FD698(play, 2000, 4000, sp2C); if (this->unk_1E54 >= 10) { - Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + Camera* subCam = + Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); this->subCamEye = subCam->eye; this->subCamAt = subCam->at; @@ -514,7 +515,8 @@ void func_80AF1CA0(EnTest7* this, PlayState* play) { } if (Rand_ZeroOne() < 0.3f) { - Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + Camera* subCam = + Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); f32 rand = Rand_ZeroOne(); sp34.x = ((subCam->eye.x - this->actor.world.pos.x) * rand) + this->actor.world.pos.x; @@ -537,7 +539,7 @@ void func_80AF1E44(EnTest7* this, PlayState* play) { func_80AF1B68(this, play); if (Rand_ZeroOne() < 0.3f) { - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); rand = Rand_ZeroOne(); sp34.x = ((subCam->eye.x - this->actor.world.pos.x) * rand) + this->actor.world.pos.x; sp34.y = ((subCam->eye.y - this->actor.world.pos.y) * rand) + this->actor.world.pos.y; @@ -585,7 +587,7 @@ void func_80AF2030(EnTest7* this, PlayState* play) { this->unk_148.unk_10 -= 0x2EE0; this->actor.world.pos.y += 100.0f; - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); subCam->focalActor = NULL; subCam->eye.x = ((subCam->eye.x - this->subCamEye.x) * sp1C) + this->subCamEye.x; @@ -667,10 +669,11 @@ void func_80AF2350(EnTest7* this, PlayState* play) { gSaveContext.respawnFlag = -6; } else { play->nextEntrance = D_80AF343C[ENTEST7_GET(&this->actor) - ENTEST7_1C]; - if ((play->nextEntrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if ((play->nextEntrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10); } else if ((play->nextEntrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) && - CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8); } } @@ -685,7 +688,8 @@ void func_80AF24D8(EnTest7* this, PlayState* play, f32 arg2) { Vec3f sp3C; Vec3f* pos; Player* player = GET_PLAYER(play); - Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + Camera* subCam = + Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); pos = &player->actor.world.pos; subCam->focalActor = NULL; @@ -708,7 +712,7 @@ void func_80AF2654(EnTest7* this, PlayState* play, f32 arg2) { Camera* subCam; Vec3f sp30; - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); subCam->focalActor = NULL; pos = &player->actor.world.pos; @@ -777,7 +781,8 @@ void func_80AF29C0(EnTest7* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); Vec3f* pos = &player->actor.world.pos; - Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + Camera* subCam = + Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); subCam->at.x = ((D_80AF3454 * Math_SinS(D_80AF3450[0]) * Math_CosS(D_80AF3450[1]))) + pos->x; subCam->at.y = (Math_SinS(D_80AF3450[1]) * D_80AF3454) + pos->y; @@ -791,15 +796,15 @@ void func_80AF29C0(EnTest7* this, PlayState* play) { void func_80AF2AE8(EnTest7* this, PlayState* play) { Camera* subCam; - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); return; } - ActorCutscene_Start(play->playerActorCsIds[8], NULL); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); func_80AF082C(this, func_80AF2C48); - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); this->subCamEye = subCam->eye; this->subCamAt = subCam->at; @@ -810,7 +815,8 @@ void func_80AF2BAC(EnTest7* this, PlayState* play, Vec3f* arg2, f32 arg3) { f32 x; f32 y; f32 z; - Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + Camera* subCam = + Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); subCam->focalActor = NULL; x = ((subCam->at.x - arg2->x) * arg3) + arg2->x; @@ -836,7 +842,7 @@ void func_80AF2C48(EnTest7* this, PlayState* play) { this->actor.world.pos.y = ((this->actor.world.pos.y - this->actor.home.pos.y) * sp24) + this->actor.home.pos.y; this->actor.world.pos.z = ((this->actor.world.pos.z - this->actor.home.pos.z) * sp24) + this->actor.home.pos.z; - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); func_80AF2BAC(this, play, &this->actor.home.pos, sp24); subCam->at.x = this->actor.world.pos.x; @@ -855,7 +861,7 @@ void func_80AF2DB4(EnTest7* this, PlayState* play) { Player* player = GET_PLAYER(play); Vec3f* pos = &player->actor.world.pos; - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); subCam->eye.x = (Math_SinS(-player->actor.shape.rot.y) * 200.0f * -0.83907f) + pos->x; subCam->eye.y = pos->y + 108.8042f; @@ -869,13 +875,13 @@ void func_80AF2DB4(EnTest7* this, PlayState* play) { void func_80AF2EC8(EnTest7* this, PlayState* play) { Camera* subCam; - if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]); + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); } else { - ActorCutscene_Start(play->playerActorCsIds[8], NULL); + CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); func_80AF082C(this, func_80AF2F98); - subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8])); + subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])); this->subCamEye = subCam->eye; this->subCamAt = subCam->at; this->unk_1E54 = 40; 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 c0ae22fd5..10f3ea529 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 @@ -98,8 +98,8 @@ void EnTimeTag_RooftopOath_DoNothing(EnTimeTag* this, PlayState* play) { } void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = EnTimeTag_RooftopOath_DoNothing; gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; @@ -109,7 +109,7 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_25_02); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -117,9 +117,9 @@ void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) { EnTimeTag* this2 = this; if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { this->actionFunc = EnTimeTag_RooftopOath_Cutscene; - ActorCutscene_SetIntentToPlay(this2->actor.cutscene); + CutsceneManager_Queue(this2->actor.csId); gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; } play->msgCtx.ocarinaMode = 4; @@ -127,7 +127,7 @@ void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) { } void EnTimeTag_SoaringEngraving_GetSong(EnTimeTag* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { this->actionFunc = EnTimeTag_SoaringEngraving_Wait; this->actor.textId = 0xC02; Item_Give(play, ITEM_SONG_SOARING); @@ -135,14 +135,14 @@ void EnTimeTag_SoaringEngraving_GetSong(EnTimeTag* this, PlayState* play) { } void EnTimeTag_SoaringEngraving_StartCutscene(EnTimeTag* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); this->actionFunc = EnTimeTag_SoaringEngraving_GetSong; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -211,8 +211,8 @@ void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) { case 0x1230: // Mikau diary part 4 Message_CloseTextbox(play); this->actionFunc = EnTimeTag_Diary_Wait; - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - ActorCutscene_Stop(this->actor.cutscene); + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { + CutsceneManager_Stop(this->actor.csId); } break; @@ -240,16 +240,16 @@ void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) { } if (TIMETAG_DIARY_TIMER(&this->actor) != 0) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { TIMETAG_DIARY_TIMER(&this->actor) = 0; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); TIMETAG_DIARY_TIMER(&this->actor) = 0; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } @@ -301,7 +301,7 @@ void EnTimeTag_KickOut_Transition(EnTimeTag* this, PlayState* play) { */ void EnTimeTag_KickOut_WaitForTrigger(EnTimeTag* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); Message_StartTextbox(play, 0x1883 + TIMETAG_KICKOUT_GET_TEXT(&this->actor), NULL); this->actionFunc = EnTimeTag_KickOut_Transition; } @@ -334,7 +334,7 @@ void EnTimeTag_KickOut_WaitForTime(EnTimeTag* this, PlayState* play) { } } else if ((hour == TIMETAG_KICKOUT_HOUR(&this->actor)) && (minute == TIMETAG_KICKOUT_MINUTE(&this->actor)) && !Play_InCsMode(play)) { - func_800B7298(play, &this->actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); Message_StartTextbox(play, 0x1883 + TIMETAG_KICKOUT_GET_TEXT(&this->actor), NULL); this->actionFunc = EnTimeTag_KickOut_Transition; } 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 91fd66635..d434bacaa 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -247,7 +247,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; this->actor.flags |= ACTOR_FLAG_10; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 0, &this->unk_2D4); - SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); switch (this->unk_2B0) { case 4: @@ -705,16 +705,16 @@ void func_80AED940(EnTk* this, PlayState* play) { void func_80AEDBEC(EnTk* this, PlayState* play) { this->actor.params = -1; - this->unk_2E8 = 0; + this->csLength = 0; this->actor.speed = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4); this->actionFunc = func_80AEDC4C; } void func_80AEDC4C(EnTk* this, PlayState* play) { - if ((this->actor.params >= 0) && SubS_StartActorCutscene(&this->actor, this->cutscenes[1], this->actor.params, - SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { - this->unk_2E8 = ActorCutscene_GetLength(this->cutscenes[1]); + if ((this->actor.params >= 0) && + SubS_StartCutscene(&this->actor, this->csIdList[1], this->actor.params, SUBS_CUTSCENE_WITH_PLAYER)) { + this->csLength = CutsceneManager_GetLength(this->csIdList[1]); Message_ContinueTextbox(play, 0x1411); func_80AEDCBC(this, play); } @@ -731,9 +731,9 @@ void func_80AEDCBC(EnTk* this, PlayState* play) { } void func_80AEDD4C(EnTk* this, PlayState* play) { - this->unk_2E8--; - if (this->unk_2E8 <= 0) { - ActorCutscene_Stop(this->cutscenes[1]); + this->csLength--; + if (this->csLength <= 0) { + CutsceneManager_Stop(this->csIdList[1]); Message_CloseTextbox(play); Actor_Kill(&this->actor); } @@ -901,7 +901,7 @@ void func_80AEE2A8(EnTk* this, PlayState* play) { } void func_80AEE2C0(EnTk* this, PlayState* play) { - if (SubS_StartActorCutscene(&this->actor, this->cutscenes[0], 0x7C, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + if (SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_GLOBAL_TALK, SUBS_CUTSCENE_WITH_PLAYER)) { func_80AEE374(this, play); } } @@ -995,15 +995,15 @@ void func_80AEE650(EnTk* this, PlayState* play) { void func_80AEE6B8(EnTk* this, PlayState* play) { if (this->unk_2CA & 0x20) { if (this->unk_2E4 >= 3) { - ActorCutscene_Stop(this->cutscenes[0]); + CutsceneManager_Stop(this->csIdList[0]); Message_CloseTextbox(play); func_80AEDBEC(this, play); - } else if (SubS_StartActorCutscene(&this->actor, 0x7C, this->cutscenes[0], SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + } else if (SubS_StartCutscene(&this->actor, CS_ID_GLOBAL_TALK, this->csIdList[0], SUBS_CUTSCENE_WITH_PLAYER)) { this->unk_310 = 3; func_80AEDE10(this, play); this->unk_2CA &= ~0x20; } - } else if (SubS_StartActorCutscene(&this->actor, 0x7C, this->cutscenes[0], SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + } else if (SubS_StartCutscene(&this->actor, CS_ID_GLOBAL_TALK, this->csIdList[0], SUBS_CUTSCENE_WITH_PLAYER)) { this->unk_310 = 4; func_80AEDE10(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 42a8aa96a..9604133e7 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h @@ -36,13 +36,13 @@ typedef struct EnTk { /* 0x2E0 */ s32 unk_2E0; /* 0x2E4 */ s16 unk_2E4; /* 0x2E6 */ u16 unk_2E6; - /* 0x2E8 */ s16 unk_2E8; + /* 0x2E8 */ s16 csLength; /* 0x2EC */ Vec3f unk_2EC; /* 0x2F8 */ Vec3s unk_2F8; /* 0x300 */ Vec3f unk_300; /* 0x30C */ EnTkUnkFunc unk_30C; /* 0x310 */ s16 unk_310; - /* 0x312 */ s16 cutscenes[2]; + /* 0x312 */ s16 csIdList[2]; /* 0x316 */ s16 unk_316; /* 0x318 */ s16 unk_318; /* 0x31A */ s16 unk_31A; 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 54ed5babc..3a563ab60 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -312,7 +312,7 @@ void func_80BA3CC4(EnToto* this, PlayState* play) { } void func_80BA3D38(EnToto* this, PlayState* play) { - this->cutscene = this->actor.cutscene; + this->csId = this->actor.csId; this->text = ENTOTO_WEEK_EVENT_FLAGS ? D_80BA50BC : D_80BA5088; func_80BA4C0C(this, play); play->actorCtx.flags |= ACTORCTX_FLAG_5; @@ -343,7 +343,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { } func_80BA36C0(this, play, 0); - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); play->actorCtx.flags &= ~ACTORCTX_FLAG_5; } @@ -357,7 +357,7 @@ s32 func_80BA3ED4(EnToto* this, PlayState* play) { s32 func_80BA3EE8(EnToto* this, PlayState* play) { if (this->text->unk1 == 2) { - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); } return 0; } @@ -389,21 +389,21 @@ s32 func_80BA3FCC(EnToto* this, PlayState* play) { } s32 func_80BA402C(EnToto* this, PlayState* play) { - s16 prevCutscene = this->cutscene; + s16 prevCsId = this->csId; - this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); - ActorCutscene_SetIntentToPlay(this->cutscene); - ActorCutscene_Stop(prevCutscene); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); + CutsceneManager_Stop(prevCsId); return 0; } s32 func_80BA407C(EnToto* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &GET_PLAYER(play)->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &GET_PLAYER(play)->actor); return 1; } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); return 0; } @@ -452,7 +452,7 @@ s32 func_80BA42BC(EnToto* this, PlayState* play) { Vec3s* end = &D_80BA510C[3]; func_80BA3FB0(this, play); - func_800B7298(play, NULL, PLAYER_CSMODE_6); + func_800B7298(play, NULL, PLAYER_CSMODE_END); if (player->actor.world.pos.z > -310.0f) { if ((player->actor.world.pos.x > -150.0f) || (player->actor.world.pos.z > -172.0f)) { phi_s0 = 3; @@ -480,14 +480,14 @@ s32 func_80BA43F4(EnToto* this, PlayState* play) { s32 func_80BA445C(EnToto* this, PlayState* play) { if (func_80BA4128(this, play)) { - func_800B7298(play, NULL, PLAYER_CSMODE_6); + func_800B7298(play, NULL, PLAYER_CSMODE_END); return 1; } return 0; } s32 func_80BA44A0(EnToto* this, PlayState* play) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->unk2B1 = 0; return 0; } @@ -675,17 +675,17 @@ s32 func_80BA4C44(EnToto* this, PlayState* play) { } void func_80BA4CB4(EnToto* this, PlayState* play) { - CsCmdActorAction* action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 525)]; + CsCmdActorCue* cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_525)]; - if (this->unk2B5 != action->action) { - this->unk2B5 = action->action; - if (this->unk2B5 != 4) { - if (this->unk2B5 == 3) { + if (this->cueId != cue->id) { + this->cueId = cue->id; + if (this->cueId != 4) { + if (this->cueId == 3) { Animation_MorphToPlayOnce(&this->skelAnime, &object_zm_Anim_001DF0, -4.0f); } else { Animation_PlayOnce(&this->skelAnime, - this->unk2B5 == 1 ? &object_zm_Anim_0016A4 : &object_zm_Anim_0022C8); - if (this->unk2B5 == 2 && this->unk2B3 != 0xF) { + (this->cueId == 1) ? &object_zm_Anim_0016A4 : &object_zm_Anim_0022C8); + if ((this->cueId == 2) && (this->unk2B3 != 0xF)) { func_80151BB4(play, 9); func_80151BB4(play, 10); } @@ -694,11 +694,11 @@ void func_80BA4CB4(EnToto* this, PlayState* play) { } Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x320); if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk2B5 != 3) { - Animation_PlayLoop(&this->skelAnime, this->unk2B5 == 1 ? &object_zm_Anim_00C880 : &object_zm_Anim_001324); + if (this->cueId != 3) { + Animation_PlayLoop(&this->skelAnime, (this->cueId == 1) ? &object_zm_Anim_00C880 : &object_zm_Anim_001324); } } - if (this->unk2B5 == 4 && !Actor_HasParent(&this->actor, play)) { + if ((this->cueId == 4) && !Actor_HasParent(&this->actor, play)) { Actor_OfferGetItem(&this->actor, play, GI_MASK_CIRCUS_LEADER, 9999.9f, 9999.9f); } } @@ -707,7 +707,7 @@ void EnToto_Update(Actor* thisx, PlayState* play) { EnToto* this = THIS; s32 pad; - if (Cutscene_CheckActorAction(play, 0x20D)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_525)) { func_80BA4CB4(this, play); } else { D_80BA51B8[this->actionFuncIndex](this, play); 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 3c95a7dbb..cf9f3c718 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h @@ -30,10 +30,10 @@ typedef struct EnToto { /* 0x264 */ ColliderCylinder collider; /* 0x2B0 */ u8 actionFuncIndex; /* 0x2B1 */ u8 unk2B1; - /* 0x2B2 */ s8 cutscene; + /* 0x2B2 */ s8 csId; /* 0x2B3 */ u8 unk2B3; /* 0x2B4 */ u8 unk2B4; - /* 0x2B5 */ u8 unk2B5; + /* 0x2B5 */ u8 cueId; /* 0x2B6 */ u8 unk2B6; /* 0x2B7 */ u8 unk2B7; /* 0x2B8 */ EnTotoText* text; 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 6decc1150..e4a4a4ab8 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -170,22 +170,22 @@ void EnTrt_UpdateCursorPos(PlayState* play, EnTrt* this) { void EnTrt_SetupGetMushroomCutscene(EnTrt* this) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - if (this->cutscene != this->tmpGetMushroomCutscene) { - ActorCutscene_Stop(this->cutscene); - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (this->csId != this->tmpGetMushroomCsId) { + CutsceneManager_Stop(this->csId); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->tmpGetMushroomCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->tmpGetMushroomCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } } if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -213,7 +213,7 @@ void EnTrt_EndInteraction(PlayState* play, EnTrt* this) { Player* player = GET_PLAYER(play); if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); @@ -318,11 +318,11 @@ void EnTrt_Hello(EnTrt* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { @@ -337,7 +337,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); Player* player = GET_PLAYER(play); - this->tmpGetMushroomCutscene = this->getMushroomCutscene; + this->tmpGetMushroomCsId = this->getMushroomCsId; if (this->cutsceneState != ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { EnTrt_SetupGetMushroomCutscene(this); if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { @@ -357,7 +357,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { break; case 0x889: if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } play->msgCtx.msgMode = 0x43; @@ -402,7 +402,7 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { if (this->textId == 0x88F) { if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } play->msgCtx.msgMode = 0x43; @@ -465,18 +465,18 @@ void EnTrt_GivenRedPotionForKoume(EnTrt* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); player->stateFlags2 |= PLAYER_STATE2_20000000; //! @bug: EnTrt_ContinueShopping gets overwritten by EnTrt_ItemGiven this->actionFunc = EnTrt_ContinueShopping; this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); @@ -517,19 +517,19 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { u8 cursorIndex; if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookForwardCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookForwardCutscene; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } else if (talkState == TEXT_STATE_CHOICE) { func_8011552C(play, DO_ACTION_DECIDE); @@ -551,25 +551,25 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { void EnTrt_LookToShelf(EnTrt* this, PlayState* play) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShelfCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShelfCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; EnTrt_UpdateCursorPos(play, this); this->actionFunc = EnTrt_BrowseShelf; Message_ContinueTextbox(play, EnTrt_GetItemTextId(this)); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -675,7 +675,7 @@ void EnTrt_HandleCanBuyItem(PlayState* play, EnTrt* this) { switch (item->canBuyFunc(play, item)) { case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } func_8019F208(); @@ -746,7 +746,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { EnTrt_SetupCannotBuy(play, this, 0x846); } else { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } EnTrt_SetupBuyItemWithFanfare(play, this); @@ -790,11 +790,11 @@ void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) { this->flags |= ENTRT_MET; } if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookForwardCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookForwardCutscene; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } player->stateFlags2 |= PLAYER_STATE2_20000000; @@ -831,11 +831,11 @@ void EnTrt_IdleAwake(EnTrt* this, PlayState* play) { } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookForwardCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookForwardCutscene; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } player->stateFlags2 |= PLAYER_STATE2_20000000; @@ -866,11 +866,11 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { s16 animLastFrame = Animation_GetLastFrame(&gKotakeWakeUpAnim) / (s16)this->skelAnime.playSpeed; if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } else if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { if (this->animIndex != TRT_ANIM_HANDS_ON_COUNTER) { @@ -923,11 +923,11 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { void EnTrt_Surprised(EnTrt* this, PlayState* play) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL; } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } else if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { if (DECR(this->timer) == 0) { @@ -954,7 +954,7 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(EnTrt* this, PlayState* play) { if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } this->actionFunc = EnTrt_GiveRedPotionForKoume; @@ -973,7 +973,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) { if (this->textId == 0x83C) { if (Inventory_HasEmptyBottle()) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } play->msgCtx.msgMode = 0x43; @@ -997,17 +997,17 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); player->stateFlags2 |= PLAYER_STATE2_20000000; this->actionFunc = EnTrt_ContinueShopping; this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -1054,7 +1054,7 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) { } } if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 5); } else { play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 5); @@ -1098,11 +1098,11 @@ void EnTrt_SetupItemGiven(EnTrt* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { this->actionFunc = EnTrt_ItemGiven; if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); } func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } @@ -1440,23 +1440,23 @@ void EnTrt_SetupLookToShopkeeperFromShelf(PlayState* play, EnTrt* this) { void EnTrt_LookToShopkeeperFromShelf(EnTrt* this, PlayState* play) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { - ActorCutscene_Stop(this->cutscene); + CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - this->cutscene = this->lookToShopkeeperCutscene; - ActorCutscene_SetIntentToPlay(this->cutscene); + this->csId = this->lookToShopkeeperCsId; + CutsceneManager_Queue(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } else if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; EnTrt_StartShopping(play, this); } else { - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } } @@ -1473,7 +1473,7 @@ void EnTrt_InitShopkeeper(EnTrt* this, PlayState* play) { void EnTrt_InitShop(EnTrt* this, PlayState* play) { EnTrt_GetCutscenes(this, play); - this->cutscene = this->lookForwardCutscene; + this->csId = this->lookForwardCutscene; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); EnTrt_InitShopkeeper(this, play); this->actor.colChkInfo.mass = MASS_IMMOVABLE; @@ -1553,10 +1553,10 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { } void EnTrt_GetCutscenes(EnTrt* this, PlayState* play) { - this->lookForwardCutscene = this->actor.cutscene; - this->lookToShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookForwardCutscene); - this->lookToShopkeeperCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShelfCutscene); - this->getMushroomCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperCutscene); + this->lookForwardCutscene = this->actor.csId; + this->lookToShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookForwardCutscene); + this->lookToShopkeeperCsId = CutsceneManager_GetAdditionalCsId(this->lookToShelfCsId); + this->getMushroomCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperCsId); } void EnTrt_DrawCursor(PlayState* play, EnTrt* this, f32 x, f32 y, f32 z, u8 drawCursor) { diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.h b/src/overlays/actors/ovl_En_Trt/z_en_trt.h index c81032af5..dfa3ba5c4 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.h +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.h @@ -35,8 +35,8 @@ typedef struct EnTrt { /* 0x3D6 */ s16 blinkTimer; /* 0x3D8 */ s16 eyeTexIndex; /* 0x3DC */ EnTrtBlinkFunc blinkFunc; - /* 0x3E0 */ s16 cutscene; - /* 0x3E2 */ s16 tmpGetMushroomCutscene; + /* 0x3E0 */ s16 csId; + /* 0x3E2 */ s16 tmpGetMushroomCsId; /* 0x3E4 */ Vec3f cursorPos; /* 0x3F0 */ Color_RGBAu32 cursorColor; /* 0x400 */ u8 drawCursor; @@ -46,9 +46,9 @@ typedef struct EnTrt { /* 0x408 */ u16 prevTextId; /* 0x40A */ u16 talkOptionTextId; /* 0x40C */ s16 lookForwardCutscene; - /* 0x40E */ s16 lookToShelfCutscene; - /* 0x410 */ s16 lookToShopkeeperCutscene; - /* 0x412 */ s16 getMushroomCutscene; + /* 0x40E */ s16 lookToShelfCsId; + /* 0x410 */ s16 lookToShopkeeperCsId; + /* 0x412 */ s16 getMushroomCsId; /* 0x414 */ UNK_TYPE1 pad414[0x2]; /* 0x416 */ Vec3s headRot; /* 0x41C */ Vec3f headPos; 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 cdf1c6483..67f52e064 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -189,15 +189,15 @@ void func_80AD3530(EnTrt2* this, PlayState* play) { } void func_80AD3664(EnTrt2* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); if (this->unk_3D9 == 0) { this->unk_3B2 = 1; } else { this->unk_3B2 = 2; } } else { - ActorCutscene_SetIntentToPlay(this->unk_3DA); + CutsceneManager_Queue(this->csId); return; } func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); @@ -217,9 +217,9 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) { this->unk_3D9 = 1; this->actor.velocity.y = 0.0f; this->path = SubS_GetPathByIndex(play, this->path->unk1, -1); - ActorCutscene_Stop(this->unk_3DA); - this->unk_3DA = ActorCutscene_GetAdditionalCutscene(this->unk_3DA); - ActorCutscene_SetIntentToPlay(this->unk_3DA); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + CutsceneManager_Queue(this->csId); this->unk_3B2 = 0; } else { this->unk_1E4++; @@ -262,7 +262,7 @@ void func_80AD38B8(EnTrt2* this, PlayState* play) { this->actor.world.rot.x = -this->actor.shape.rot.x; if (func_80AD475C(this, this->path, this->unk_1E4)) { if (this->unk_1E4 >= (this->path->count - 1)) { - ActorCutscene_Stop(this->unk_3DA); + CutsceneManager_Stop(this->csId); this->unk_3D9 = 2; } else { this->unk_1E4++; @@ -271,7 +271,7 @@ void func_80AD38B8(EnTrt2* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { if (this->unk_1E4 >= (this->path->count - 1)) { - ActorCutscene_Stop(this->unk_3DA); + CutsceneManager_Stop(this->csId); this->unk_3D9 = 2; } else { sp30.y = this->actor.wallYaw; @@ -466,15 +466,15 @@ void func_80AD417C(EnTrt2* this, PlayState* play) { void func_80AD4298(EnTrt2* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); player->stateFlags1 |= PLAYER_STATE1_20; this->unk_3B2 = 6; } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->unk_3DA); + CutsceneManager_Queue(this->csId); } } @@ -492,7 +492,7 @@ void func_80AD434C(EnTrt2* this, PlayState* play) { if (this->actor.world.pos.y > 200.0f) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->unk_3B2 = 0x13; - ActorCutscene_Stop(this->unk_3DA); + CutsceneManager_Stop(this->csId); } else { s32 i; Vec3f sp68; @@ -738,7 +738,7 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) { this->unk_3C0 = 0; this->unk_3D8 = false; - this->unk_3DA = this->actor.cutscene; + this->csId = this->actor.csId; this->unk_3B6 = 20; this->unk_3B8 = 0; this->unk_3BC = func_80AD4608; diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h index 44c2565f7..f30f41d80 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h @@ -38,7 +38,7 @@ typedef struct EnTrt2 { /* 0x3D6 */ s16 unk_3D6; /* 0x3D8 */ u8 unk_3D8; /* 0x3D9 */ u8 unk_3D9; - /* 0x3DA */ s16 unk_3DA; + /* 0x3DA */ s16 csId; } EnTrt2; // size = 0x3DC #endif // Z_EN_TRT2_H 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 a9335f850..bb146784d 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -771,7 +771,7 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) { switch (this->unk_364) { case 0: if ((this->unk_34E & 0x40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { - this->unk_374 = this->actor.cutscene; + this->csId = this->actor.csId; this->unk_364++; } else { this->unk_364++; @@ -780,14 +780,14 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) { } case 1: - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_374); - } else if (ActorCutscene_GetCanPlayNext(this->unk_374)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_374, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); + } else if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_364++; } else { - ActorCutscene_SetIntentToPlay(this->unk_374); + CutsceneManager_Queue(this->csId); } break; @@ -867,19 +867,19 @@ s32 func_80A87880(Actor* thisx, PlayState* play) { switch (this->unk_364) { case 0: - ActorCutscene_Stop(this->unk_374); - this->unk_374 = ActorCutscene_GetAdditionalCutscene(this->unk_374); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); this->unk_364++; case 1: - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_374); - } else if (ActorCutscene_GetCanPlayNext(this->unk_374)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_374, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); + } else if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_364++; } else { - ActorCutscene_SetIntentToPlay(this->unk_374); + CutsceneManager_Queue(this->csId); } break; @@ -999,19 +999,19 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { switch (this->unk_364) { case 0: - ActorCutscene_Stop(this->unk_374); - this->unk_374 = ActorCutscene_GetAdditionalCutscene(this->unk_374); + CutsceneManager_Stop(this->csId); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); this->unk_364++; case 1: - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_374); - } else if (ActorCutscene_GetCanPlayNext(this->unk_374)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_374, &this->actor); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csId); + } else if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); this->unk_364++; } else { - ActorCutscene_SetIntentToPlay(this->unk_374); + CutsceneManager_Queue(this->csId); } break; @@ -1102,8 +1102,8 @@ void func_80A881E0(EnTru* this, PlayState* play) { this->unk_34E |= 0x80; } - if (ActorCutscene_GetCurrentIndex() != -1) { - ActorCutscene_Stop(ActorCutscene_GetCurrentIndex()); + if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) { + CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); } if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.h b/src/overlays/actors/ovl_En_Tru/z_en_tru.h index 48964b555..c6d2af00c 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.h +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.h @@ -49,7 +49,7 @@ typedef struct EnTru { /* 0x36E */ s16 eyeTexIndex; /* 0x370 */ s16 unk_370; /* 0x372 */ s16 unk_372; - /* 0x374 */ s16 unk_374; + /* 0x374 */ s16 csId; /* 0x378 */ EnTruUnkFunc unk_378; /* 0x37C */ s32 animIndex; /* 0x380 */ UNK_TYPE1 unk380[0x4]; 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 aaa022f7a..22ce0600c 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -103,7 +103,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) { break; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { if ((ENTSN_GET_F(&this->actor)) == ENTSN_F_0) { this->actionFunc = func_80AE0D78; } else { @@ -144,7 +144,7 @@ void EnTsn_Init(Actor* thisx, PlayState* play) { this->actor.terminalVelocity = -9.0f; this->actor.gravity = -1.0f; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } } @@ -369,7 +369,7 @@ void func_80AE0698(EnTsn* this, PlayState* play) { this->actionFunc = func_80AE0C88; this->unk_220 &= ~2; this->actor.focus.pos = this->actor.world.pos; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); ENTSN_SET_Z(&this->unk_1D8->actor, false); } @@ -433,7 +433,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { func_80AE0460(this, play); this->unk_220 &= ~2; this->actor.focus.pos = this->actor.world.pos; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH); } else { @@ -515,16 +515,16 @@ void func_80AE0704(EnTsn* this, PlayState* play) { } if (this->unk_220 & 4) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { this->unk_220 &= ~4; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->unk_220 &= ~4; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } @@ -545,7 +545,7 @@ void func_80AE0D10(EnTsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); this->actionFunc = func_80AE0D78; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } } 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 3f15ff8c8..6d5522e8a 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 @@ -126,9 +126,9 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) { */ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) { if (play->msgCtx.ocarinaMode == 9) { - func_800B7298(play, NULL, PLAYER_CSMODE_7); + func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = EnWarpTag_RespawnPlayer; - ActorCutscene_Stop(ActorCutscene_GetCurrentIndex()); + CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); } else if (play->msgCtx.ocarinaMode >= 2) { play->msgCtx.ocarinaMode = 4; @@ -141,7 +141,7 @@ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) { */ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { ActorEntry* playerActorEntry; - Player* player; + Player* player = GET_PLAYER(play); s32 playerSpawnIndex; s32 new15E; s32 entrance; @@ -149,13 +149,13 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { u8 playerForm; s16 playerParams; - player = GET_PLAYER(play); - if (play->playerActorCsIds[4] >= 0 && ActorCutscene_GetCurrentIndex() != play->playerActorCsIds[4]) { - if (ActorCutscene_GetCanPlayNext(play->playerActorCsIds[4]) == 0) { - ActorCutscene_SetIntentToPlay(play->playerActorCsIds[4]); + if (play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0 && + CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]) { + if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) { + CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]); } else { - ActorCutscene_StartAndSetUnkLinkFields(play->playerActorCsIds[4], &this->dyna.actor); + CutsceneManager_StartWithPlayerCs(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON], &this->dyna.actor); Player_PlaySfx(player, NA_SE_PL_WARP_PLATE); Play_EnableMotionBlur(0); } @@ -231,11 +231,11 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { * ActionFunc: Deku Playground, return to North Clock Town. */ void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() != this->dyna.actor.cutscene) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_GetCurrentCsId() != this->dyna.actor.csId) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } 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 530b75b0e..e81b5dabc 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 @@ -77,7 +77,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { EnWeatherTag_SetupAction(this, func_80966A08); break; case WEATHERTAG_TYPE_UNK1: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } EnWeatherTag_SetupAction(this, func_80966B08); @@ -246,11 +246,11 @@ void func_80966B08(EnWeatherTag* this, PlayState* play) { // because it uses cutsecnes.. is this the clear ikana cutcsene? void func_80966BF4(EnWeatherTag* this, PlayState* play) { u8 newUnk20; - CsCmdActorAction* tmpAction; + CsCmdActorCue* cue; - if (Cutscene_CheckActorAction(play, 567)) { - tmpAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 567)]; - if ((play->csCtx.frames >= tmpAction->startFrame) && (tmpAction->action >= 2)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_567)) { + cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_567)]; + if ((play->csCtx.curFrame >= cue->startFrame) && (cue->id >= 2)) { switch (gSaveContext.save.day) { case 0: case 1: @@ -379,14 +379,13 @@ void func_80967060(EnWeatherTag* this, PlayState* play) { // type 4_3, start cutscene then die? void func_80967148(EnWeatherTag* this, PlayState* play) { - s16 tempCutscene; + s16 csId = this->actor.csId; - tempCutscene = this->actor.cutscene; - if (ActorCutscene_GetCanPlayNext(tempCutscene)) { - ActorCutscene_Start(tempCutscene, &this->actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_Start(csId, &this->actor); EnWeatherTag_SetupAction(this, EnWeatherTag_DoNothing); } else { - ActorCutscene_SetIntentToPlay(tempCutscene); + CutsceneManager_Queue(csId); } } @@ -485,7 +484,7 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && - (play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) && + (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (play->csCtx.state == 0)) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; 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 ac8375c24..125be5056 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -668,13 +668,13 @@ void EnWiz_MoveGhosts(EnWiz* this) { } void EnWiz_StartIntroCutscene(EnWiz* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetFlag(this->actor.cutscene, &this->actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCsAndSetFlag(this->actor.csId, &this->actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); this->actor.flags |= ACTOR_FLAG_100000; EnWiz_SetupAppear(this, play); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -828,13 +828,13 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) { } void EnWiz_SetupSecondPhaseCutscene(EnWiz* this, PlayState* play) { - s16 secondPhaseCutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + s16 secondPhaseCsId = CutsceneManager_GetAdditionalCsId(this->actor.csId); - if (!ActorCutscene_GetCanPlayNext(secondPhaseCutscene)) { - ActorCutscene_SetIntentToPlay(secondPhaseCutscene); + if (!CutsceneManager_IsNext(secondPhaseCsId)) { + CutsceneManager_Queue(secondPhaseCsId); } else { - ActorCutscene_StartAndSetFlag(secondPhaseCutscene, &this->actor); - this->subCamId = ActorCutscene_GetCurrentSubCamId(secondPhaseCutscene); + CutsceneManager_StartWithPlayerCsAndSetFlag(secondPhaseCsId, &this->actor); + this->subCamId = CutsceneManager_GetCurrentSubCamId(secondPhaseCsId); this->actor.flags |= ACTOR_FLAG_100000; EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DANCE, false); this->action = EN_WIZ_ACTION_RUN_BETWEEN_PLATFORMS; @@ -885,7 +885,7 @@ void EnWiz_SecondPhaseCutscene(EnWiz* this, PlayState* play) { this->platformCount = 0; this->fightState = EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE; this->timer = 0; - ActorCutscene_Stop(ActorCutscene_GetAdditionalCutscene(this->actor.cutscene)); + CutsceneManager_Stop(CutsceneManager_GetAdditionalCsId(this->actor.csId)); this->actor.flags &= ~ACTOR_FLAG_100000; EnWiz_SetupDisappear(this); return; @@ -1037,7 +1037,7 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) { if ((this->introCutsceneState == EN_WIZ_INTRO_CS_DISAPPEAR) && (this->introCutsceneTimer == 0)) { this->introCutsceneState = EN_WIZ_INTRO_CS_END; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); this->actor.flags &= ~ACTOR_FLAG_100000; } diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index 9b74a97ac..3c0357999 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -202,7 +202,7 @@ void EnWood02_Init(Actor* thisx, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ANI, this->actor.world.pos.x, this->actor.world.pos.y + 120.0f, this->actor.world.pos.z - 15.0f, 0, 0, 0, 1); if (this->actor.child != NULL) { - this->actor.child->cutscene = this->actor.cutscene; + this->actor.child->csId = this->actor.csId; } this->unk_151 = 1; } else { 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 35bd7113e..c5224f8e8 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -81,7 +81,7 @@ static Vec3f D_80BFB300 = { 500.0f, -500.0f, 0.0f }; void EnYb_Init(Actor* thisx, PlayState* play) { EnYb* this = THIS; - s16 tempCutscene; + s16 csId; s32 i; Actor_SetScale(&this->actor, 0.01f); @@ -102,17 +102,17 @@ void EnYb_Init(Actor* thisx, PlayState* play) { EnYb_ChangeAnim(play, this, 2, ANIMMODE_LOOP, 0.0f); - tempCutscene = this->actor.cutscene; - for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) { - this->cutscenes[i] = tempCutscene; - if (tempCutscene != -1) { - this->actor.cutscene = tempCutscene; - tempCutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + csId = this->actor.csId; + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } - this->cutsceneIndex = -1; - this->actor.cutscene = this->cutscenes[0]; + this->csIdIndex = -1; + this->actor.csId = this->csIdList[0]; // between midnight and morning start spawned if (gSaveContext.save.time < CLOCK_TIME(6, 0)) { @@ -215,17 +215,17 @@ void EnYb_UpdateAnimation(EnYb* this, PlayState* play) { } void EnYb_FinishTeachingCutscene(EnYb* this) { - if (this->cutsceneIndex != -1) { - if (ActorCutscene_GetCurrentIndex() == this->cutscenes[this->cutsceneIndex]) { - ActorCutscene_Stop(this->cutscenes[this->cutsceneIndex]); + if (this->csIdIndex != -1) { + if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) { + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } - this->cutsceneIndex = -1; + this->csIdIndex = -1; } } -void EnYb_ChangeCutscene(EnYb* this, s16 cutsceneId) { +void EnYb_ChangeCutscene(EnYb* this, s16 csIdIndex) { EnYb_FinishTeachingCutscene(this); - this->cutsceneIndex = cutsceneId; + this->csIdIndex = csIdIndex; } /** @@ -414,16 +414,16 @@ void EnYb_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->cutsceneIndex != -1 && ActorCutscene_GetCurrentIndex() != this->cutscenes[this->cutsceneIndex]) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]); - } else if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) { - if (this->cutsceneIndex == 0) { - ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[this->cutsceneIndex], &this->actor); + if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + if (this->csIdIndex == 0) { + CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor); } } else { - ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } } diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.h b/src/overlays/actors/ovl_En_Yb/z_en_yb.h index c7b977653..4728ef44e 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.h +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.h @@ -20,8 +20,8 @@ typedef struct EnYb { /* 0x410 */ u16 playerOcarinaOut; /* 0x412 */ s16 animIndex; /* 0x414 */ s16 alpha; - /* 0x416 */ s16 cutscenes[2]; - /* 0x41A */ s16 cutsceneIndex; + /* 0x416 */ s16 csIdList[2]; + /* 0x41A */ s16 csIdIndex; /* 0x41C */ s16 teachingCutsceneTimer; /* 0x420 */ EnYbActionFunc actionFunc; } EnYb; // size = 0x424 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 263272464..5f1b16e35 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -80,7 +80,7 @@ Vec3f D_80BA1120 = { 300.0f, 900.0f, 0.0f }; void EnZob_Init(Actor* thisx, PlayState* play) { EnZob* this = THIS; s32 i; - s16 cs; + s16 csId; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; @@ -90,8 +90,8 @@ void EnZob_Init(Actor* thisx, PlayState* play) { Animation_PlayLoop(&this->skelAnime, &object_zob_Anim_006998); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_2F4 = 0; - this->unk_30E = -1; - this->unk_310 = 0; + this->csIdIndex = -1; + this->cueId = 0; this->unk_302 = 9; this->unk_304 = 0; this->actor.terminalVelocity = -4.0f; @@ -100,16 +100,16 @@ void EnZob_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BA0728; this->actor.textId = 0; - cs = this->actor.cutscene; - for (i = 0; i < ARRAY_COUNT(this->unk_306); i++) { - this->unk_306[i] = cs; - if (cs != -1) { - this->actor.cutscene = cs; - cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + csId = this->actor.csId; + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } - this->actor.cutscene = this->unk_306[0]; + this->actor.csId = this->csIdList[0]; this->actor.flags |= ACTOR_FLAG_2000000; switch (ENZOB_GET_F(&this->actor)) { @@ -120,7 +120,7 @@ void EnZob_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BA0AD8; } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); return; } @@ -135,7 +135,7 @@ void EnZob_Init(Actor* thisx, PlayState* play) { break; default: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_10; @@ -253,17 +253,17 @@ void func_80B9FA3C(EnZob* this, PlayState* play) { } void func_80B9FC0C(EnZob* this) { - if (this->unk_30E != -1) { - if (ActorCutscene_GetCurrentIndex() == this->unk_306[this->unk_30E]) { - ActorCutscene_Stop(this->unk_306[this->unk_30E]); + if (this->csIdIndex != -1) { + if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) { + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } - this->unk_30E = -1; + this->csIdIndex = -1; } } -void func_80B9FC70(EnZob* this, s16 arg1) { +void func_80B9FC70(EnZob* this, s16 csIdIndex) { func_80B9FC0C(this); - this->unk_30E = arg1; + this->csIdIndex = csIdIndex; } void func_80B9FCA0(EnZob* this, PlayState* play) { @@ -278,19 +278,19 @@ void func_80B9FCA0(EnZob* this, PlayState* play) { } void func_80B9FD24(EnZob* this, PlayState* play) { - s32 actionIndex; - s16 action; + s32 cueChannel; + s16 cueId; func_80B9F86C(this); - if (Cutscene_CheckActorAction(play, 500)) { - this->unk_30E = -1; - actionIndex = Cutscene_GetActorActionIndex(play, 500); - action = play->csCtx.actorActions[actionIndex]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_500)) { + this->csIdIndex = -1; + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_500); + cueId = play->csCtx.actorCues[cueChannel]->id; - if (action != this->unk_310) { - this->unk_310 = action; - switch (action) { + if (this->cueId != cueId) { + this->cueId = cueId; + switch (cueId) { case 1: func_80B9F7E4(this, 8, ANIMMODE_LOOP); break; @@ -549,7 +549,7 @@ void func_80BA0610(EnZob* this, PlayState* play) { void func_80BA06BC(EnZob* this, PlayState* play) { func_80B9FD24(this, play); - if (!Cutscene_CheckActorAction(play, 500)) { + if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_500)) { this->actionFunc = func_80BA0610; this->actor.flags |= ACTOR_FLAG_10000; func_80BA0610(this, play); @@ -572,12 +572,12 @@ void func_80BA0728(EnZob* this, PlayState* play) { this->actionFunc = func_80BA00BC; this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); - this->unk_30E = 0; + this->csIdIndex = 0; this->unk_2F4 |= 1; } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80BA0374; func_80B9FA3C(this, play); - } else if (Cutscene_CheckActorAction(play, 500)) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_500)) { this->actionFunc = func_80BA06BC; } else if ((this->actor.xzDistToPlayer < 180.0f) && (this->actor.xzDistToPlayer > 60.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { @@ -684,8 +684,8 @@ void func_80BA0C14(EnZob* this, PlayState* play) { this->unk_312 = 999; } - if (Cutscene_CheckActorAction(play, 515)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 1) { this->actionFunc = func_80BA0CF4; this->unk_312 = -1; } @@ -697,8 +697,8 @@ void func_80BA0C14(EnZob* this, PlayState* play) { void func_80BA0CF4(EnZob* this, PlayState* play) { func_80B9F86C(this); - if (Cutscene_CheckActorAction(play, 515) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 2)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 2)) { this->actionFunc = func_80BA0C14; } } @@ -715,14 +715,14 @@ void EnZob_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if ((this->unk_30E != -1) && (ActorCutscene_GetCurrentIndex() != this->unk_306[this->unk_30E])) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_306[this->unk_30E]); - } else if (ActorCutscene_GetCanPlayNext(this->unk_306[this->unk_30E])) { - ActorCutscene_Start(this->unk_306[this->unk_30E], &this->actor); + if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor); } else { - ActorCutscene_SetIntentToPlay(this->unk_306[this->unk_30E]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.h b/src/overlays/actors/ovl_En_Zob/z_en_zob.h index 25ce14fdc..e0bd7bf79 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.h +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.h @@ -25,9 +25,9 @@ typedef struct EnZob { /* 0x2FC */ Vec3s unk_2FC; /* 0x302 */ s16 unk_302; /* 0x304 */ u16 unk_304; - /* 0x306 */ s16 unk_306[4]; - /* 0x30E */ s16 unk_30E; - /* 0x310 */ s16 unk_310; + /* 0x306 */ s16 csIdList[4]; + /* 0x30E */ s16 csIdIndex; + /* 0x310 */ s16 cueId; /* 0x312 */ s16 unk_312; /* 0x314 */ EnZobActionFunc actionFunc; } EnZob; // size = 0x318 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 7808e8089..aaf3b85f0 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -119,12 +119,12 @@ void EnZod_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BAFDB4; EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE); this->actor.flags |= ACTOR_FLAG_10; - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); break; } this->actionFunc = func_80BAFB84; - if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80))) { + if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE))) { Actor_Kill(&this->actor); break; } @@ -137,7 +137,7 @@ void EnZod_Init(Actor* thisx, PlayState* play) { break; default: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_10; @@ -445,20 +445,20 @@ void EnZod_DoNothing(EnZod* this, PlayState* play) { void EnZod_Rehearse(EnZod* this, PlayState* play) { EnZod_UpdateAnimation(this); - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); - this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - if (this->actor.cutscene == -1) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); + this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); + if (this->actor.csId == CS_ID_NONE) { this->actionFunc = EnZod_DoNothing; play->nextEntrance = play->setupExitList[ENZOD_GET_ENTRANCE_INDEX(&this->actor)]; play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; CLEAR_WEEKEVENTREG(WEEKEVENTREG_78_01); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -468,9 +468,9 @@ void EnZod_SetupRehearse(EnZod* this, PlayState* play) { Message_CloseTextbox(play); EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE); this->actionFunc = EnZod_Rehearse; - ActorCutscene_Stop(this->actor.cutscene); - this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); + this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); + CutsceneManager_Queue(this->actor.csId); SET_WEEKEVENTREG(WEEKEVENTREG_79_01); SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_INDIGO_GO_SESSION | SEQ_FLAG_ASYNC); } @@ -478,13 +478,13 @@ void EnZod_SetupRehearse(EnZod* this, PlayState* play) { void func_80BAFDB4(EnZod* this, PlayState* play) { EnZod_UpdateAnimation(this); - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); func_800B7298(play, NULL, 0x44); Message_StartTextbox(play, 0x103A, &this->actor); this->actionFunc = EnZod_SetupRehearse; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -500,8 +500,8 @@ void func_80BAFE34(EnZod* this, PlayState* play) { this->fogNear = 999; } - if (Cutscene_CheckActorAction(play, 0x203)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x203)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 1) { this->actionFunc = func_80BAFF14; this->fogNear = -1; } @@ -513,8 +513,8 @@ void func_80BAFE34(EnZod* this, PlayState* play) { void func_80BAFF14(EnZod* this, PlayState* play) { EnZod_UpdateAnimation(this); - if (Cutscene_CheckActorAction(play, 0x203) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x203)]->action == 4)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 4)) { this->actionFunc = func_80BAFE34; } } 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 fe5c1cd62..ccbb1f752 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -181,7 +181,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) { s32 pad; EnZog* this = THIS; s32 i; - s16 cs; + s16 csId; if (!D_80B95E10) { for (i = 0; i < ARRAY_COUNT(D_80B958AC); i++) { @@ -206,7 +206,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; if ((ENZOG_GET_F(&this->actor) != ENZOG_F_2) && (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA) && - ((play->csCtx.currentCsIndex != 2) || (gSaveContext.sceneLayer != 0) || (play->sceneId != SCENE_30GYOSON))) { + ((play->csCtx.scriptIndex != 2) || (gSaveContext.sceneLayer != 0) || (play->sceneId != SCENE_30GYOSON))) { Actor_Kill(&this->actor); return; } @@ -219,7 +219,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) { this->unk_30A = 0; this->unk_31C = 2; this->unk_31E = 0; - this->unk_31A = -1; + this->csIdIndex = -1; this->unk_322 = 100; Math_Vec3f_Copy(&this->unk_2F0, &this->actor.world.pos); @@ -245,13 +245,13 @@ void EnZog_Init(Actor* thisx, PlayState* play) { this->unk_304 = 0; this->unk_2FE = this->unk_2FC; this->unk_300 = this->unk_302; - cs = this->actor.cutscene; + csId = this->actor.csId; - for (i = 0; i < ARRAY_COUNT(this->unk_30C); i++) { - this->unk_30C[i] = cs; - if (cs != -1) { - this->actor.cutscene = cs; - cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); } } @@ -331,17 +331,17 @@ void func_80B93A48(EnZog* this, PlayState* play) { void func_80B93B44(EnZog* this) { if (!(this->unk_30A & 4)) { - if (this->unk_31A != -1) { - ActorCutscene_Stop(this->unk_30C[this->unk_31A]); + if (this->csIdIndex != -1) { + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } } - this->unk_31A = -1; + this->csIdIndex = -1; this->unk_30A &= ~4; } -void func_80B93BA8(EnZog* this, s16 arg1) { +void func_80B93BA8(EnZog* this, s16 csIdIndex) { func_80B93B44(this); - this->unk_31A = arg1; + this->csIdIndex = csIdIndex; this->unk_30A |= 4; } @@ -401,10 +401,10 @@ void func_80B93DE8(Vec3f* arg0, PlayState* play, s32 arg2) { } s32 func_80B93EA0(EnZog* this, PlayState* play) { - s16 sp3E; + s16 cueId; if (SkelAnime_Update(&this->skelAnime)) { - switch (this->unk_306) { + switch (this->cueId) { case 2: case 3: Animation_PlayLoop(&this->skelAnime, *D_80B958F0); @@ -458,13 +458,13 @@ s32 func_80B93EA0(EnZog* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } - if (Cutscene_CheckActorAction(play, 471)) { - sp3E = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 471)]->action; - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 471)); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_471)) { + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_471)]->id; + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_471)); - switch (this->unk_306) { + switch (this->cueId) { case 2: - if (play->csCtx.frames == 60) { + if (play->csCtx.curFrame == 60) { Actor_PlaySfx(&this->actor, NA_SE_EV_JUMP_SAND); } break; @@ -497,10 +497,10 @@ s32 func_80B93EA0(EnZog* this, PlayState* play) { break; } - if (this->unk_306 != sp3E) { - this->unk_306 = sp3E; + if (this->cueId != cueId) { + this->cueId = cueId; - switch (this->unk_306) { + switch (this->cueId) { case 1: func_80B939C0(this, 7, ANIMMODE_LOOP); this->unk_31C = 2; @@ -593,7 +593,7 @@ void func_80B943A0(EnZog* this, PlayState* play) { void func_80B943C0(EnZog* this, PlayState* play) { if (!(this->unk_30A & 4)) { this->actionFunc = func_80B943A0; - this->unk_306 = -1; + this->cueId = -1; } } @@ -657,7 +657,7 @@ void func_80B946B4(EnZog* this, PlayState* play) { func_80B93A48(this, play); if (!(this->unk_30A & 4)) { this->actionFunc = func_80B9461C; - this->unk_306 = -1; + this->cueId = -1; } } @@ -957,7 +957,7 @@ void EnZog_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); - if (Cutscene_CheckActorAction(play, 0x1D7) && (ENZOG_GET_F(&this->actor) != ENZOG_F_2)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_471) && (ENZOG_GET_F(&this->actor) != ENZOG_F_2)) { this->actionFunc = func_80B9461C; this->actor.shape.yOffset = 0.0f; } @@ -982,18 +982,18 @@ void EnZog_Update(Actor* thisx, PlayState* play) { this->actor.focus.pos.y += 30.0f; if (this->unk_30A & 4) { - if (this->unk_31A == -1) { + if (this->csIdIndex == -1) { this->unk_30A &= ~4; - } else if (this->unk_30C[this->unk_31A] == -1) { + } else if (this->csIdList[this->csIdIndex] == CS_ID_NONE) { this->unk_30A &= ~4; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_30C[this->unk_31A]); - } else if (ActorCutscene_GetCanPlayNext(this->unk_30C[this->unk_31A])) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_30C[this->unk_31A], &this->actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor); this->unk_30A &= ~4; } else { - ActorCutscene_SetIntentToPlay(this->unk_30C[this->unk_31A]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } } diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.h b/src/overlays/actors/ovl_En_Zog/z_en_zog.h index 9971d77fa..737168250 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.h +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.h @@ -27,11 +27,11 @@ typedef struct EnZog { /* 0x300 */ s16 unk_300; /* 0x302 */ s16 unk_302; /* 0x304 */ s16 unk_304; - /* 0x306 */ s16 unk_306; + /* 0x306 */ s16 cueId; /* 0x308 */ s16 unk_308; /* 0x30A */ u16 unk_30A; - /* 0x30C */ s16 unk_30C[7]; - /* 0x31A */ s16 unk_31A; + /* 0x30C */ s16 csIdList[7]; + /* 0x31A */ s16 csIdIndex; /* 0x31C */ s16 unk_31C; /* 0x31E */ s16 unk_31E; /* 0x320 */ s16 unk_320; 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 17abb250d..21201346a 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -75,7 +75,10 @@ void func_80B31590(EnZoraegg* this) { void EnZoraegg_Init(Actor* thisx, PlayState* play) { s32 pad; EnZoraegg* this = THIS; - u16 sp40[] = { 457, 458, 459, 460, 461, 462, 464 }; + u16 cueTypes[] = { + CS_CMD_ACTOR_CUE_457, CS_CMD_ACTOR_CUE_458, CS_CMD_ACTOR_CUE_459, CS_CMD_ACTOR_CUE_460, + CS_CMD_ACTOR_CUE_461, CS_CMD_ACTOR_CUE_462, CS_CMD_ACTOR_CUE_464, + }; Actor_SetScale(&this->actor, 0.006f); SkelAnime_InitFlex(play, &this->skelAnime, &object_zoraegg_Skel_004C90, &object_zoraegg_Anim_005098, @@ -162,7 +165,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { case ENZORAEGG_1F_07: case ENZORAEGG_1F_08: case ENZORAEGG_1F_09: - this->actorActionCmd = sp40[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_03]; + this->cueType = cueTypes[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_03]; Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_001E08); this->unk_1EC = 1; this->unk_1EE = 0; @@ -181,7 +184,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { case ENZORAEGG_1F_0E: case ENZORAEGG_1F_0F: case ENZORAEGG_1F_10: - this->actorActionCmd = sp40[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_0A]; + this->cueType = cueTypes[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_0A]; this->unk_1EC = 2; this->actionFunc = func_80B324B0; Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); @@ -352,7 +355,7 @@ void func_80B320E0(EnZoraegg* this, PlayState* play) { } void func_80B321D0(EnZoraegg* this, PlayState* play) { - if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { + if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { this->actionFunc = func_80B322BC; func_80B319D0(play, func_80B319A8(play) + 1); } @@ -362,26 +365,26 @@ void func_80B32228(EnZoraegg* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, this->unk_1DC); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, this->unk_1DC); this->actionFunc = func_80B321D0; } else { if (this->unk_1E8 > 0) { this->unk_1E8--; } else if (this->unk_1E8 == 0) { - ActorCutscene_Stop(player->unk_A86); - player->unk_A86 = -1; + CutsceneManager_Stop(player->csId); + player->csId = CS_ID_NONE; this->unk_1E8 = -1; } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } void func_80B322BC(EnZoraegg* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (this->actor.cutscene != -1) { + if (this->actor.csId != CS_ID_NONE) { this->unk_1DC = func_80B31CB4(play); if (this->unk_1DC != NULL) { this->unk_1E8 = 3; @@ -400,11 +403,11 @@ void func_80B32390(EnZoraegg* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { Actor* temp_v0 = func_80B31D14(play); if (temp_v0 != NULL) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, temp_v0); + CutsceneManager_StartWithPlayerCs(this->actor.csId, temp_v0); SET_EVENTINF(EVENTINF_33); Actor_Kill(&this->actor); } @@ -412,29 +415,29 @@ void func_80B32390(EnZoraegg* this, PlayState* play) { (fabsf(player->actor.world.pos.x - this->actor.world.pos.x) < (100.0f * this->actor.scale.x)) && (fabsf(player->actor.world.pos.z - this->actor.world.pos.z) < (100.0f * this->actor.scale.z)) && (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 30.0f)) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } void func_80B324B0(EnZoraegg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (Cutscene_CheckActorAction(play, this->actorActionCmd)) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { if (this->unk_1EA & 4) { - if (Cutscene_CheckActorAction(play, this->actorActionCmd) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 3)) { + if (Cutscene_IsCueInChannel(play, this->cueType) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) { Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); this->unk_1EA &= ~4; } } else { - if (Cutscene_CheckActorAction(play, this->actorActionCmd) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 4)) { + if (Cutscene_IsCueInChannel(play, this->cueType) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 4)) { Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004E04); this->unk_1EA |= 4; } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); if ((this->unk_1EA & 4) && Animation_OnFrame(&this->skelAnime, this->unk_1E4)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1); @@ -453,10 +456,10 @@ void func_80B32644(EnZoraegg* this, PlayState* play) { this->unk_1EA |= 2; } - if (!Cutscene_CheckActorAction(play, this->actorActionCmd)) { + if (!Cutscene_IsCueInChannel(play, this->cueType)) { this->actionFunc = func_80B324B0; } else { - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); if (this->unk_1EE > 25) { this->unk_1EE -= 25; @@ -469,8 +472,8 @@ void func_80B32644(EnZoraegg* this, PlayState* play) { void func_80B326F4(EnZoraegg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (Cutscene_CheckActorAction(play, this->actorActionCmd) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 3)) { + 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); this->unk_1E8 = 0; @@ -481,7 +484,7 @@ void func_80B326F4(EnZoraegg* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_2); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); if (Animation_OnFrame(&this->skelAnime, 4.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1); @@ -504,7 +507,7 @@ void func_80B32820(EnZoraegg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); if (Animation_OnFrame(&this->skelAnime, 16.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_0); @@ -538,7 +541,7 @@ void func_80B32928(EnZoraegg* this, PlayState* play) { } } - Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd)); + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); if (Animation_OnFrame(&this->skelAnime, 97.0f) || Animation_OnFrame(&this->skelAnime, 101.0f) || Animation_OnFrame(&this->skelAnime, 105.0f)) { @@ -547,8 +550,8 @@ void func_80B32928(EnZoraegg* this, PlayState* play) { } void func_80B32A88(EnZoraegg* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, this->actorActionCmd) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 2)) { + if (Cutscene_IsCueInChannel(play, this->cueType) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) { this->unk_1E8 = 0; this->actionFunc = func_80B32928; } @@ -570,7 +573,7 @@ void func_80B32B3C(EnZoraegg* this, PlayState* play) { void func_80B32B70(EnZoraegg* this, PlayState* play) { func_80B31C40(this, play); - if (Cutscene_CheckActorAction(play, 0x1C9)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_457)) { Actor_Kill(&this->actor); } } @@ -583,7 +586,7 @@ void func_80B32BB8(EnZoraegg* this, PlayState* play) { this->actionFunc = func_80B32B70; } - if (Cutscene_CheckActorAction(play, 0x1C9)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_457)) { Actor_Kill(&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 f36f77c2b..18a421272 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h @@ -53,7 +53,7 @@ typedef struct EnZoraegg { /* 0x1ED */ u8 unk_1ED; /* 0x1EE */ u8 unk_1EE; /* 0x1EF */ u8 unk_1EF; - /* 0x1F0 */ u16 actorActionCmd; + /* 0x1F0 */ u16 cueType; /* 0x1F2 */ s16 unk_1F2; /* 0x1F4 */ s16 unk_1F4; /* 0x1F8 */ EnZoraeggActionFunc actionFunc; 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 3898e754c..3c11d1bce 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -100,7 +100,7 @@ void EnZos_Init(Actor* thisx, PlayState* play) { switch (ENZOS_GET_F(&this->actor)) { case ENZOS_F_1: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } @@ -120,7 +120,7 @@ void EnZos_Init(Actor* thisx, PlayState* play) { break; default: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_10; @@ -280,13 +280,13 @@ void func_80BBB354(EnZos* this, PlayState* play) { void func_80BBB414(EnZos* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (Cutscene_CheckActorAction(play, 501)) { - s16 action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 501)]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) { + s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_501)]->id; - if (action != this->unk_2BA) { - this->unk_2BA = action; + if (this->cueId != cueId) { + this->cueId = cueId; - switch (action) { + switch (cueId) { case 1: EnZos_ChangeAnim(this, EN_ZOS_ANIM_LEAN_ON_KEYBOARD_AND_SIGH, ANIMMODE_LOOP); break; @@ -302,15 +302,15 @@ void func_80BBB414(EnZos* this, PlayState* play) { void func_80BBB4CC(EnZos* this, PlayState* play) { func_80BBB414(this, play); - if ((this->actor.cutscene != -1) && (ActorCutscene_GetCurrentIndex() != this->actor.cutscene)) { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); - this->actor.cutscene = -1; + if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->actor.csId)) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); + this->actor.csId = CS_ID_NONE; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } @@ -534,7 +534,7 @@ void func_80BBBCBC(EnZos* this, PlayState* play) { void func_80BBBD5C(EnZos* this, PlayState* play) { func_80BBB414(this, play); - if (!Cutscene_CheckActorAction(play, 0x1F5)) { + if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) { this->actionFunc = func_80BBBCBC; this->actor.flags |= ACTOR_FLAG_10000; func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); @@ -567,7 +567,7 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80BBB8AC; func_80BBB15C(this, play); - } else if (Cutscene_CheckActorAction(play, 0x1F5)) { + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) { this->actionFunc = func_80BBBD5C; } else if (func_80BBAF5C(this, play)) { func_800B8614(&this->actor, play, 120.0f); @@ -675,8 +675,8 @@ void func_80BBC298(EnZos* this, PlayState* play) { this->unk_2BC = 999; } - if (Cutscene_CheckActorAction(play, 515)) { - if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515)) { + if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 1) { this->actionFunc = func_80BBC37C; this->unk_2BC = -1; } @@ -688,8 +688,8 @@ void func_80BBC298(EnZos* this, PlayState* play) { void func_80BBC37C(EnZos* this, PlayState* play) { func_80BBAFFC(this, play); - if (Cutscene_CheckActorAction(play, 515) && - (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 3)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 3)) { this->actionFunc = func_80BBC298; } } diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.h b/src/overlays/actors/ovl_En_Zos/z_en_zos.h index e3ede7b28..669430a0c 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.h +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.h @@ -26,7 +26,7 @@ typedef struct EnZos { /* 0x2B0 */ UNK_TYPE1 unk2B0[6]; /* 0x2B6 */ u16 unk_2B6; /* 0x2B8 */ s16 animIndex; - /* 0x2BA */ s16 unk_2BA; + /* 0x2BA */ s16 cueId; /* 0x2BC */ s16 unk_2BC; /* 0x2C0 */ EnZosActionFunc actionFunc; } EnZos; // size = 0x2C4 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 a24791080..f382cdf80 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -185,14 +185,14 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { func_80B96BEC(this, 2, ANIMMODE_LOOP); this->actor.colChkInfo.cylRadius = 0; this->actor.shape.yOffset = -1400.0f; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } break; case 18: this->actionFunc = func_80B99384; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } break; @@ -220,7 +220,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { break; } - if ((ENZOT_GET_1F(thisx) >= 2) && (ENZOT_GET_1F(thisx) < 11) && CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if ((ENZOT_GET_1F(thisx) >= 2) && (ENZOT_GET_1F(thisx) < 11) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); } } @@ -488,8 +489,8 @@ void func_80B973BC(EnZot* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; this->actor.textId = 0; this->actionFunc = func_80B97708; - if ((this->actor.cutscene != -1) && !(this->unk_2F2 & 1)) { - ActorCutscene_Stop(this->actor.cutscene); + if ((this->actor.csId != CS_ID_NONE) && !(this->unk_2F2 & 1)) { + CutsceneManager_Stop(this->actor.csId); } this->unk_2F2 &= ~1; break; @@ -497,16 +498,16 @@ void func_80B973BC(EnZot* this, PlayState* play) { } if (this->unk_2F2 & 1) { - if (this->actor.cutscene == -1) { + if (this->actor.csId == CS_ID_NONE) { this->unk_2F2 &= ~1; - } else if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); - } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->actor.csId); + } else if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->unk_2F2 &= ~1; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } 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 5a93d91cc..c6dca4bd7 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -91,10 +91,10 @@ void EnZov_Init(Actor* thisx, PlayState* play) { Animation_PlayLoop(&this->skelAnime, &object_zov_Anim_00D3EC); this->unk_320 = 0; - this->unk_32C = -1; - this->unk_326 = -1; - this->unk_328[0] = this->picto.actor.cutscene; - this->unk_328[1] = 0x7C; + this->csIdIndex = -1; + this->cueId = -1; + this->csIdList[0] = this->picto.actor.csId; + this->csIdList[1] = CS_ID_GLOBAL_TALK; this->unk_322 = 0; this->actionFunc = func_80BD1C84; this->picto.validationFunc = EnZov_ValidatePictograph; @@ -107,7 +107,7 @@ void EnZov_Init(Actor* thisx, PlayState* play) { case ENZOV_F_1: this->actionFunc = func_80BD1F1C; func_80BD1570(this, 9, ANIMMODE_LOOP); - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->picto.actor); return; } @@ -120,7 +120,7 @@ void EnZov_Init(Actor* thisx, PlayState* play) { default: this->unk_320 |= 2; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { Actor_Kill(&this->picto.actor); } break; @@ -134,17 +134,17 @@ void EnZov_Destroy(Actor* thisx, PlayState* play) { } void func_80BD13DC(EnZov* this) { - if (this->unk_32C != -1) { - if (ActorCutscene_GetCurrentIndex() == this->unk_328[this->unk_32C]) { - ActorCutscene_Stop(this->unk_328[this->unk_32C]); + if (this->csIdIndex != -1) { + if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) { + CutsceneManager_Stop(this->csIdList[this->csIdIndex]); } - this->unk_32C = -1; + this->csIdIndex = -1; } } void func_80BD1440(EnZov* this, s16 arg1) { func_80BD13DC(this); - this->unk_32C = arg1; + this->csIdIndex = arg1; } void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) { @@ -328,12 +328,12 @@ void func_80BD19FC(EnZov* this, PlayState* play) { s32 func_80BD1AE0(EnZov* this, PlayState* play) { func_80BD1764(this); - if (Cutscene_CheckActorAction(play, 504)) { - s16 action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 504)]->action; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) { + s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_504)]->id; - if (action != this->unk_326) { - this->unk_326 = action; - switch (this->unk_326) { + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { case 1: func_80BD1570(this, 0, ANIMMODE_LOOP); break; @@ -367,7 +367,7 @@ void func_80BD1BF0(EnZov* this, PlayState* play) { void func_80BD1C38(EnZov* this, PlayState* play) { if (func_80BD1AE0(this, play)) { - Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetActorActionIndex(play, 504)); + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_504)); } } @@ -381,7 +381,7 @@ void func_80BD1C84(EnZov* this, PlayState* play) { func_800B8614(&this->picto.actor, play, 120.0f); } - if (Cutscene_CheckActorAction(play, 0x1F8)) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) { this->actionFunc = func_80BD1BF0; func_80BD1BF0(this, play); } @@ -480,7 +480,7 @@ void EnZov_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (!Cutscene_CheckActorAction(play, 0x1F8)) { + if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) { this->unk_320 &= ~0x10; } @@ -506,14 +506,14 @@ void EnZov_Update(Actor* thisx, PlayState* play) { this->unk_2EC = 0; } - if ((this->unk_32C != -1) && (ActorCutscene_GetCurrentIndex() != this->unk_328[this->unk_32C])) { - if ((this->unk_32C == 0) && (ActorCutscene_GetCurrentIndex() == 0x7C)) { - ActorCutscene_Stop(0x7C); - ActorCutscene_SetIntentToPlay(this->unk_328[this->unk_32C]); - } else if (ActorCutscene_GetCanPlayNext(this->unk_328[this->unk_32C])) { - ActorCutscene_Start(this->unk_328[this->unk_32C], &this->picto.actor); + if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) { + if ((this->csIdIndex == 0) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK)) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); + } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) { + CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->picto.actor); } else { - ActorCutscene_SetIntentToPlay(this->unk_328[this->unk_32C]); + CutsceneManager_Queue(this->csIdList[this->csIdIndex]); } } } 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 a5e217ca3..7e1204100 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.h +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.h @@ -30,9 +30,9 @@ typedef struct EnZov { /* 0x320 */ u16 unk_320; /* 0x322 */ s16 unk_322; /* 0x324 */ s16 unk_324; - /* 0x326 */ s16 unk_326; - /* 0x328 */ s16 unk_328[2]; - /* 0x32C */ s16 unk_32C; + /* 0x326 */ s16 cueId; + /* 0x328 */ s16 csIdList[2]; + /* 0x32C */ s16 csIdIndex; /* 0x330 */ EnZovActionFunc actionFunc; } EnZov; // size = 0x334 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 638fa0263..446470dbe 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -357,7 +357,7 @@ void func_80BDD1E0(EnZow* this, PlayState* play) { u16 phi_a1; if (ENZOW_GET_F(&this->actor) == ENZOW_F_1) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_04)) { phi_a1 = 0x12FD; @@ -384,7 +384,7 @@ void func_80BDD1E0(EnZow* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_78_10); phi_a1 = 0x12FF; } - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { phi_a1 = 0x12EC; } else { 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 b6c5be123..7cc5dfb17 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -588,20 +588,20 @@ void func_809381B0(ObjBean* this) { void func_809381C4(ObjBean* this, PlayState* play) { this->unk_1E8(this); - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); - if (this->dyna.actor.cutscene >= 0) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); + if (this->dyna.actor.csId >= 0) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } this->unk_1E4 = 2; func_80938284(this); } else if (this->unk_1E4 == 4) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); play_sound(NA_SE_SY_ERROR); this->unk_1E4 = 0; func_80937FB0(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -618,7 +618,7 @@ void func_80938298(ObjBean* this, PlayState* play) { this->unk_1E4 = 5; func_8093833C(this); } else if (this->unk_1E4 == 4) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); play_sound(NA_SE_SY_ERROR); this->unk_1E4 = 0; func_80937FB0(this); @@ -634,7 +634,7 @@ void func_80938358(ObjBean* this, PlayState* play) { this->unk_1E8(this); if (this->unk_1B2 <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); func_80937FB0(this); } } @@ -735,7 +735,7 @@ void func_80938704(ObjBean* this) { void func_80938728(ObjBean* this, PlayState* play) { if (this->unk_200 != 0) { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); func_8093876C(this); } } @@ -745,16 +745,16 @@ void func_8093876C(ObjBean* this) { } void func_80938780(ObjBean* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); - if (this->dyna.actor.cutscene >= 0) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); + if (this->dyna.actor.csId >= 0) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } this->unk_1B4 = 36; func_80937130(this); func_80938AA4(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -909,7 +909,7 @@ void ObjBean_Update(Actor* thisx, PlayState* play) { if (this->unk_1B4 > 0) { this->unk_1B4--; if (this->unk_1B4 == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } 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 1146175fd..85468c59c 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c @@ -182,7 +182,7 @@ void func_80AE8FD4(ObjBigicicle* this, PlayState* play) { if ((this->collider1.base.acFlags & AC_HIT) || ((this->collider2.base.acFlags & AC_HIT) && (this->collider2.info.acHitInfo->toucher.dmgFlags & 0x3820))) { if ((this->unk_148 == 0) || (this->unk_149 == 1)) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_80AE9090; return; } @@ -195,8 +195,8 @@ void func_80AE8FD4(ObjBigicicle* this, PlayState* play) { } void func_80AE9090(ObjBigicicle* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->unk_149++; func_80AE8DE4(this, play); if (this->unk_149 == 2) { @@ -213,7 +213,7 @@ void func_80AE9090(ObjBigicicle* this, PlayState* play) { this->actionFunc = func_80AE9180; } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -227,7 +227,7 @@ void func_80AE9180(ObjBigicicle* this, PlayState* play) { } else { this->actor.shape.rot.x = 0x4000; this->actor.shape.rot.z = 0; - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); this->actionFunc = func_80AE8FD4; } } @@ -284,7 +284,7 @@ void func_80AE939C(ObjBigicicle* this, PlayState* play) { } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_GLASSBROKEN_IMPACT); - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); Actor_Kill(&this->actor); } 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 437f0c234..a4f44973f 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c @@ -48,7 +48,7 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) { s32 params = OBJOSHIHIKI_GET_F(prop); if (params < 3) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = ObjBlockstop_TryPlayCutscene; } } @@ -57,15 +57,15 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) { } void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { Flags_SetSwitch(play, this->actor.params); - if (ActorCutscene_GetLength(this->actor.cutscene) != -1) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetLength(this->actor.csId) != -1) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } Actor_Kill(&this->actor); return; } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } void ObjBlockstop_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c index 6f426bfdd..43f137326 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c @@ -151,29 +151,29 @@ void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjBoat* this = THIS; - if (Cutscene_CheckActorAction(play, 511)) { - CsCmdActorAction* actionIndex = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 511)]; - if (this->csAction != actionIndex->action) { - this->dyna.actor.shape.rot.x = actionIndex->urot.x; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_511)) { + CsCmdActorCue* cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_511)]; - if (actionIndex->action != 1) { + if (this->cueId != cue->id) { + this->dyna.actor.shape.rot.x = cue->rot.x; + if (cue->id != 1) { Path* path = &play->setupPathList[OBJBOAT_GET_PATH(&this->dyna.actor)]; - if (actionIndex->action == 3) { + if (cue->id == 3) { path = &play->setupPathList[path->unk1]; } this->maxPointIndex = path->count; this->points = Lib_SegmentedToVirtual(path->points); Math_Vec3s_ToVec3f(&this->dyna.actor.world.pos, this->points); - this->dyna.actor.speed = actionIndex->urot.z * (45.0f / 0x2000); + this->dyna.actor.speed = cue->rot.z * (45.0f / 0x2000); this->points++; this->curPointIndex = 1; } - this->csAction = actionIndex->action; + this->cueId = cue->id; } else { - if (actionIndex->action != 1) { + if (cue->id != 1) { Vec3f posTarget; f32 distRemaining; @@ -185,9 +185,9 @@ void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) { } } - if (actionIndex->action != 3) { + if (cue->id != 3) { ObjBoat_SetRotations(this); - if (actionIndex->action == 2) { + if (cue->id == 2) { func_800B9010(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG); } } else { diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h index 879e2e50c..bfc7c7c2b 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h @@ -15,7 +15,7 @@ typedef struct ObjBoat { /* 0x15E */ u8 lastPointIndex; // max point if direction is negative, first point if forwards /* 0x15F */ union { u8 timer; - u8 csAction; + u8 cueId; }; /* 0x160 */ s16 angle; // Angle used to set rotations /* 0x162 */ UNK_TYPE1 pad_162; 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 d05c68571..66c927f1d 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -92,7 +92,7 @@ void ObjChan_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sObjChanCylinderInit); - SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); + SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); switch (OBJCHAN_SUBTYPE(&this->actor)) { case OBJCHAN_SUBTYPE_CHANDELIER: this->rotation = this->actor.shape.rot.y; @@ -178,12 +178,12 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) { (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); temp_v0 = (ObjChan*)Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, childPos.z, childRot.x, childRot.y, childRot.z, - (this->actor.params & 0xFFF) | 0x1000, this->actor.cutscene, + (this->actor.params & 0xFFF) | 0x1000, this->actor.csId, this->actor.halfDaysBits, &this->actor); if (temp_v0 != NULL) { this->pots[i] = temp_v0; temp_v0->myPotIndex = i; - temp_v0->actor.cutscene = this->actor.cutscene; + temp_v0->actor.csId = this->actor.csId; } else { Actor_Kill(&this->actor); } @@ -232,13 +232,13 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { } this->actor.shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0); if ((this->stateFlags & OBJCHAN_STATE_START_CUTSCENE) && - SubS_StartActorCutscene(&this->actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { this->stateFlags |= OBJCHAN_STATE_CUTSCENE; this->stateFlags &= ~OBJCHAN_STATE_START_CUTSCENE; } if ((this->stateFlags & OBJCHAN_STATE_CUTSCENE) && this->rotationSpeed == OBJCHAN_ROTATION_SPEED) { this->stateFlags &= ~OBJCHAN_STATE_CUTSCENE; - ActorCutscene_Stop(this->cutscenes[0]); + CutsceneManager_Stop(this->csIdList[0]); } Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); @@ -315,7 +315,7 @@ void ObjChan_PotAction(ObjChan* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_37_10); Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_MM, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0x8000, - this->actor.cutscene, this->actor.halfDaysBits, NULL); + this->actor.csId, this->actor.halfDaysBits, NULL); } } Actor_Kill(&this->actor); 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 f08f18adf..0e6fbca86 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h @@ -54,7 +54,7 @@ typedef struct ObjChan { /* 0x1D8 */ f32 flameSize; /* 0x1DC */ s16 rotationSpeed; // Main object only. Slowly ramps up under some circumstances. In other circumstances it's immediately set to maximum speed. /* 0x1DE */ s16 rotation; // Increases as the chandelier spins. Don't know why they didn't use the actor's rotation variable. - /* 0x1E0 */ s16 cutscenes[2]; + /* 0x1E0 */ s16 csIdList[2]; } ObjChan; // size = 0x1E4 #endif // Z_OBJ_CHAN_H 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 957ac1433..412bade05 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -493,8 +493,8 @@ void func_8098E0B8(ObjComb* this, PlayState* play) { return; } - if ((this->unk_1B4 == 10) && (this->unk_1B6 != 0) && (this->unk_1B5 == 2) && (this->actor.cutscene >= 0)) { - if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { + if ((this->unk_1B4 == 10) && (this->unk_1B6 != 0) && (this->unk_1B5 == 2) && (this->actor.csId >= 0)) { + if (CutsceneManager_GetCurrentCsId() == this->actor.csId) { func_800B7298(play, &this->actor, PLAYER_CSMODE_4); } } @@ -518,17 +518,17 @@ void ObjComb_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->actor.update == NULL) { - if ((this->unk_1B5 == 2) && (func_800F2138(this->actor.cutscene) == -1)) { - ActorCutscene_Stop(this->actor.cutscene); + if ((this->unk_1B5 == 2) && (CutsceneManager_GetCutsceneScriptIndex(this->actor.csId) == -1)) { + CutsceneManager_Stop(this->actor.csId); this->unk_1B5 = 0; } } else { if (this->unk_1B5 != 0) { Actor_SetFocus(&this->actor, 0.0f); if (this->unk_1B5 == 1) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); - if (this->actor.cutscene >= 0) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); + if (this->actor.csId >= 0) { func_800B7298(play, &this->actor, PLAYER_CSMODE_1); } @@ -539,7 +539,7 @@ void ObjComb_Update(Actor* thisx, PlayState* play) { this->unk_1B5 = 2; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } } diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c index 43edd11e0..a33bf2a43 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c @@ -167,7 +167,7 @@ void ObjDanpeilift_Update(Actor* thisx, PlayState* play) { if (this->cutsceneTimer > 0) { this->cutsceneTimer--; if (this->cutsceneTimer == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } if (OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx)) { 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 8af30b3fd..ee76dd9d4 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c @@ -69,37 +69,37 @@ void func_80983678(ObjDemo* this, PlayState* play) { func_80983634(play); if ((this->actor.xzDistToPlayer < this->xzRange) && (fabsf(this->actor.playerHeightRel) < this->yRange)) { if (this->unk_148 == 1) { - ActorCutscene_Stop(0x7D); + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_80983704; } } void func_80983704(ObjDemo* this, PlayState* play) { - if ((this->unk_148 == 1) && (ActorCutscene_GetCurrentIndex() == 0x7D)) { - ActorCutscene_Stop(0x7D); - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + if ((this->unk_148 == 1) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR)) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + CutsceneManager_Queue(this->actor.csId); } else { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { if (this->unk_148 == 1) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + CutsceneManager_Start(this->actor.csId, &this->actor); func_800E0348(play->cameraPtrs[CAM_ID_MAIN]); } else { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } if (play->sceneId == SCENE_CASTLE) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_IKANA_CASTLE | SEQ_FLAG_ASYNC); } - this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - if (this->actor.cutscene == -1) { + 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); } Actor_Kill(&this->actor); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); func_80983634(play); } } 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 a4c4e21d2..f9f86501d 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -77,7 +77,7 @@ static InitChainEntry sInitChain[] = { }; void func_80A4CA90(ObjFireshield* this) { - if (this->actor.cutscene >= 0) { + if (this->actor.csId >= 0) { this->actionFunc = func_80A4CABC; } else { this->actionFunc = func_80A4CC54; @@ -87,17 +87,17 @@ void func_80A4CA90(ObjFireshield* this) { void func_80A4CABC(ObjFireshield* this) { s32 pad; - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor); s32 temp_a0 = (sp18 & ~0x1F) >> 5; - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A4CB7C; this->unk_194 = 20; D_80A4D884[temp_a0] |= 1 << (sp18 & 0x1F); D_80A4D894[temp_a0] |= 1 << (sp18 & 0x1F); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -113,7 +113,7 @@ void func_80A4CB7C(ObjFireshield* this) { return; } - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); this->actionFunc = func_80A4CD28; D_80A4D894[(sp18 & ~0x1F) >> 5] &= ~(1 << (sp18 & 0x1F)); } 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 2a2e23c13..73aa848a2 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -61,10 +61,10 @@ void func_80B3C2B0(ObjGhaka* this) { void func_80B3C2C4(ObjGhaka* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 0, - this->dyna.actor.cutscene, this->dyna.actor.halfDaysBits, 0); + this->dyna.actor.csId, this->dyna.actor.halfDaysBits, 0); } else { - Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 1, -1, - this->dyna.actor.halfDaysBits, 0); + Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 1, + CS_ID_NONE, this->dyna.actor.halfDaysBits, 0); } } 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 d35c9f11e..8b851285a 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -113,7 +113,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { this->unk_19A = 0; this->unk_198 = 0; this->switchFlag = OBJHAKAISI_GET_SWITCHFLAG(thisx); - this->unk_196 = this->dyna.actor.cutscene; + this->csId = this->dyna.actor.csId; if (this->switchFlag == 0xFF) { this->switchFlag = -1; @@ -192,11 +192,11 @@ void func_80B14558(ObjHakaisi* this) { } void func_80B1456C(ObjHakaisi* this, PlayState* play) { - if (this->unk_196 != -1) { - if (ActorCutscene_GetCanPlayNext(this->unk_196)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_196, &this->dyna.actor); + if (this->csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor); } else { - ActorCutscene_SetIntentToPlay(this->unk_196); + CutsceneManager_Queue(this->csId); } } if (this->dyna.actor.colChkInfo.health < 30) { @@ -258,8 +258,8 @@ void func_80B149A8(ObjHakaisi* this) { void func_80B149C0(ObjHakaisi* this, PlayState* play) { if (this->unk_19A < 60) { this->unk_19A++; - } else if ((this->unk_196 != -1) && !ActorCutscene_GetCanPlayNext(this->unk_196)) { - ActorCutscene_Stop(this->unk_196); + } else if ((this->csId != CS_ID_NONE) && !CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Stop(this->csId); } } 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 ed5341a82..1454181dd 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h @@ -17,7 +17,7 @@ typedef struct ObjHakaisi { /* 0x184 */ Vec3f unk_184; /* 0x190 */ s32 switchFlag; /* 0x194 */ s16 unk_194; - /* 0x196 */ s16 unk_196; + /* 0x196 */ s16 csId; /* 0x198 */ s16 unk_198; /* 0x19A */ s16 unk_19A; /* 0x19C */ s16 unk_19C; diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c index 5be919068..7b0351e78 100644 --- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c +++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c @@ -79,7 +79,7 @@ void ObjHgdoor_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, header); this->rotation = 0; this->timer = 0; - this->cutscene = this->dyna.actor.cutscene; + this->csId = this->dyna.actor.csId; ObjHgdoor_SetupIdle(this); } @@ -94,7 +94,7 @@ void ObjHgdoor_SetupIdle(ObjHgdoor* this) { } void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (this->dyna.actor.xzDistToPlayer < 100.0f) && (this->dyna.actor.playerHeightRel < 40.0f) && OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) { ObjHgdoor_SetChild(this, play); @@ -108,31 +108,31 @@ void ObjHgdoor_SetupCutscene(ObjHgdoor* this) { } void ObjHgdoor_PlayCutscene(ObjHgdoor* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Start(this->cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Start(this->csId, &this->dyna.actor); ObjHgdoor_SetupCsAction(this); ObjHgdoor_SetupCsAction((ObjHgdoor*)this->dyna.actor.child); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->cutscene); + CutsceneManager_Queue(this->csId); } } void ObjHgdoor_SetupCsAction(ObjHgdoor* this) { - this->csAction = 0x63; + this->cueId = 99; this->actionFunc = ObjHgdoor_HandleCsAction; } void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play) { - s32 actionIndex; + s32 cueChannel; - if (Cutscene_CheckActorAction(play, 483)) { - actionIndex = Cutscene_GetActorActionIndex(play, 483); - if (this->csAction != play->csCtx.actorActions[actionIndex]->action) { - this->csAction = play->csCtx.actorActions[actionIndex]->action; - switch (play->csCtx.actorActions[actionIndex]->action) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_483)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_483); + if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { + this->cueId = play->csCtx.actorCues[cueChannel]->id; + switch (play->csCtx.actorCues[cueChannel]->id) { case 1: Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOOD_DOOR_OPEN_SPEEDY); if ((this->dyna.actor.parent != NULL) && (this->dyna.actor.parent->id == ACTOR_EN_HG)) { @@ -149,7 +149,7 @@ void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play) { ObjHgdoor_SetupStopCs(this); } } else { - this->csAction = 0x63; + this->cueId = 99; } } @@ -160,8 +160,8 @@ void ObjHgdoor_SetupStopCs(ObjHgdoor* this) { void ObjHgdoor_StopCs(ObjHgdoor* this, PlayState* play) { if (this->timer++ > 80) { - if (!ActorCutscene_GetCanPlayNext(this->cutscene)) { - ActorCutscene_Stop(this->cutscene); + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Stop(this->csId); } } } diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h index 7172952bb..1411a5e66 100644 --- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h +++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h @@ -13,10 +13,10 @@ typedef void (*ObjHgdoorActionFunc)(struct ObjHgdoor*, PlayState*); typedef struct ObjHgdoor { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ObjHgdoorActionFunc actionFunc; - /* 0x160 */ s16 cutscene; + /* 0x160 */ s16 csId; /* 0x162 */ s16 rotation; /* 0x164 */ s16 timer; - /* 0x166 */ u16 csAction; + /* 0x166 */ u16 cueId; } ObjHgdoor; // size = 0x168 #endif // Z_OBJ_HGDOOR_H 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 cade13522..e69729b92 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -380,7 +380,7 @@ void func_80A54C04(ObjHugebombiwa* this, PlayState* play) { } if (func_80A54A0C(this)) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); func_80A54CD8(this); return; } @@ -407,8 +407,8 @@ void func_80A54CD8(ObjHugebombiwa* this) { void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) { s32 pad; - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + 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)) && ((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_17SETUGEN2))) { @@ -429,7 +429,7 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) { func_80A55310(this); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -523,7 +523,7 @@ void func_80A55064(ObjHugebombiwa* this, PlayState* play) { this->unk_4B2--; if ((this->unk_4B0 >= 20) || (this->unk_4B2 <= 0)) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); Actor_Kill(&this->actor); } } @@ -619,7 +619,7 @@ void func_80A55564(ObjHugebombiwa* this, PlayState* play) { this->unk_4B2--; if ((this->unk_4B0 >= 20) || (this->unk_4B2 <= 0)) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); Actor_Kill(&this->actor); } } 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 089cddf02..41cdd8369 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -213,7 +213,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { D_80B9DED0 = Lib_SegmentedToVirtual(object_hunsui_Matanimheader_000BF0); D_80B9DED4 = Lib_SegmentedToVirtual(object_hunsui_Matanimheader_001888); - SubS_FillCutscenesList(&this->dyna.actor, this->unk_170, ARRAY_COUNT(this->unk_170)); + SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList)); this->unk_18C = 0; switch (this->unk_160) { @@ -327,7 +327,7 @@ void ObjHunsui_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if ((this->unk_172 & 0x40) && - SubS_StartActorCutscene(&this->dyna.actor, this->unk_17C, -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) { + SubS_StartCutscene(&this->dyna.actor, this->csId, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { this->unk_172 &= ~0x40; } @@ -355,7 +355,7 @@ void func_80B9CE64(ObjHunsui* this, PlayState* play) { if (!(this->unk_172 & 1)) { if (sp2C != this->unk_180) { - this->unk_17C = this->unk_170[0]; + this->csId = this->csIdList[0]; this->unk_172 |= 0x40; } } @@ -447,7 +447,7 @@ void func_80B9D120(ObjHunsui* this, PlayState* play) { } if (func_80B9C450(play, this->unk_168, this->unk_164)) { - this->unk_17C = this->unk_170[0]; + this->csId = this->csIdList[0]; this->unk_172 |= 0x40; func_80B9D4D0(this, play); } @@ -560,7 +560,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) { } if (!(this->unk_172 & 1) && !func_80B9C450(play, this->unk_168, this->unk_164)) { - this->unk_17C = this->unk_170[0]; + this->csId = this->csIdList[0]; this->unk_172 |= 0x40; func_80B9D0FC(this, play); } @@ -569,7 +569,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) { void func_80B9D714(ObjHunsui* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); - s16 cs; + s16 csId; f32 sp28; if ((this->unk_16C != play->roomCtx.curRoom.num) && (this->unk_16C != play->roomCtx.prevRoom.num) && @@ -579,19 +579,19 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) { if (Flags_GetSwitch(play, this->unk_168)) { this->unk_172 &= ~2; this->unk_172 |= 0x10; - cs = this->dyna.actor.cutscene; + csId = this->dyna.actor.csId; if (this->unk_16E == 0) { - if ((cs >= 0) && !ActorCutscene_GetCanPlayNext(cs)) { - ActorCutscene_SetIntentToPlay(cs); - } else if (cs >= 0) { - ActorCutscene_StartAndSetUnkLinkFields(cs, &this->dyna.actor); + if ((csId >= 0) && !CutsceneManager_IsNext(csId)) { + CutsceneManager_Queue(csId); + } else if (csId >= 0) { + CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); this->unk_16E = -1; } else { this->unk_16E = 40; } } else if (this->unk_16E < 0) { - if (func_800F22C4(cs, &this->dyna.actor)) { + if (func_800F22C4(csId, &this->dyna.actor) != 0) { this->unk_16E = 40; } } else { 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 14a2eea62..c06abbe7d 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h @@ -31,11 +31,11 @@ typedef struct ObjHunsui { /* 0x16C */ s8 unk_16C; /* 0x16D */ s8 unk_16D; /* 0x16E */ s8 unk_16E; - /* 0x170 */ s16 unk_170[1]; + /* 0x170 */ s16 csIdList[1]; /* 0x172 */ u16 unk_172; /* 0x174 */ f32 unk_174; /* 0x178 */ f32 unk_178; - /* 0x17C */ s16 unk_17C; + /* 0x17C */ s16 csId; /* 0x180 */ s32 unk_180; /* 0x184 */ s16 unk_184; /* 0x186 */ s16 unk_186; 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 dc95eec27..0ef50dc98 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 @@ -116,7 +116,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { thisx->shape.rot.z = -0x500; if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) || - ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80))) { + ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { Actor_Kill(thisx); return; } @@ -200,7 +200,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) { (this->colliders2[1].info.acHitInfo->toucher.dmgFlags == 0x800)) || ((this->colliders2[1].base.ac->id == ACTOR_OBJ_AQUA) && (this->colliders2[1].base.ac->params == OBJAQUA_1))))) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->unk_14A = 0; this->actionFunc = func_80931E58; this->actor.focus.rot.y = this->actor.yawTowardsPlayer; @@ -220,7 +220,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)) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->unk_14A = 1; this->actionFunc = func_80931E58; } else { @@ -265,8 +265,8 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) { } void func_80931E58(ObjIcePoly* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); if (this->unk_14A == 1) { func_80931828(this, play); Actor_Kill(&this->actor); @@ -277,7 +277,7 @@ void func_80931E58(ObjIcePoly* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT); this->actionFunc = func_80931EEC; } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -327,7 +327,7 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) { this->unk_148 -= 6; if (this->unk_14A == 0) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); if (this->unk_149 != OBJICEPOLY_FF_FF) { Flags_SetSwitch(play, this->unk_149); } diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index 886762306..a1e0d64bc 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -971,13 +971,13 @@ void ObjIceBlock_SetupAttemptSpawnCutscene(ObjIceblock* this) { } void ObjIceBlock_AttemptSpawnCutscene(ObjIceblock* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->extendedDrawFunc = func_80A26BF8; this->spawnCutsceneTimer = 80; func_80A25824(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -1209,7 +1209,7 @@ void func_80A25FD4(ObjIceblock* this, PlayState* play) { func_80A23370(this, sp2C); func_80A260E8(this); sp30 = false; - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); this->unk_1B0 |= 1; } @@ -1255,7 +1255,7 @@ void func_80A26144(ObjIceblock* this, PlayState* play) { if ((this->unk_1B0 & 1) && (isBool || sp28 || (this->dyna.actor.xzDistToPlayer > 400.0f))) { this->unk_1B0 &= ~1; - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); } if (isBool) { @@ -1454,7 +1454,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) { this->unk_1B0 &= ~0x100; if (this->unk_1B0 & 1) { this->unk_1B0 &= ~1; - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); } func_80A266C4(this); } @@ -1463,7 +1463,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) { if (this->spawnCutsceneTimer > 0) { this->spawnCutsceneTimer--; if (this->spawnCutsceneTimer == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } diff --git a/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c b/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c index 0f4f83503..276c4a28e 100644 --- a/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c +++ b/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c @@ -36,7 +36,7 @@ void ObjJgGakki_Init(Actor* thisx, PlayState* play2) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &gGoronElderDrumSkel, NULL, NULL, NULL, 0); - if (((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7)) && (play->csCtx.currentCsIndex == 0)) { + if (((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7)) && (play->csCtx.scriptIndex == 0)) { Animation_Change(&this->skelAnime, &gGoronElderDrumTakeOutAnim, 1.0f, frameCount, frameCount, ANIMMODE_ONCE, 0.0f); } else if ((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_10YUKIYAMANOMURA)) { 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 65ebe75b6..31e6905ec 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -78,11 +78,11 @@ void func_80C08BBC(ObjKzsaku* this) { } void ObjKzsaku_Rise(ObjKzsaku* this, PlayState* play) { - if (this->dyna.actor.cutscene != -1) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (this->dyna.actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } if (this->raisedAmount < 450.0f) { @@ -103,8 +103,8 @@ void func_80C08C84(ObjKzsaku* this) { void func_80C08CB0(ObjKzsaku* this, PlayState* play) { if (this->timer <= 20) { if (this->timer == 20) { - if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) { + CutsceneManager_Stop(this->dyna.actor.csId); } this->timer = 21; } else { 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 8225c6c49..c54378a74 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -134,7 +134,7 @@ void func_80AF3ADC(ObjLightblock* this, PlayState* play) { } if (this->collisionCounter >= 8) { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); func_80AF3B8C(this); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); @@ -146,13 +146,13 @@ void func_80AF3B8C(ObjLightblock* this) { } void func_80AF3BA0(ObjLightblock* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + 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); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -162,12 +162,12 @@ void func_80AF3C18(ObjLightblock* this) { } void func_80AF3C34(ObjLightblock* this, PlayState* play) { - s8 temp_a0; + s8 csId; this->timer--; if (this->timer <= 0) { - temp_a0 = this->dyna.actor.cutscene; - ActorCutscene_Stop(temp_a0); + csId = this->dyna.actor.csId; + CutsceneManager_Stop(csId); Actor_Kill(&this->dyna.actor); return; } 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 4518e4e29..34479a72a 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -189,13 +189,13 @@ void ObjLightswitch_SetAction(ObjLightswitch* this, ObjLightswitchSetupFunc setu } void ObjLightswitch_PlayCinema(ObjLightswitch* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); ObjLightswitch_UpdateSwitchFlags(this, play, this->switchFlagSetType); this->cutsceneTimer = 50; this->setupFunc(this); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -351,7 +351,7 @@ void ObjLightswitch_Update(Actor* thisx, PlayState* play) { if ((this->cutsceneTimer > 0) && ((s32)this->actionFunc != (s32)ObjLightswitch_PlayCinema)) { this->cutsceneTimer--; if (this->cutsceneTimer == 0) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } } 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 d544fcbfc..da16d938f 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c @@ -109,7 +109,7 @@ void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) { if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) { this->actor.update = func_8099FD7C; - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } else { if (this->unk144 >= 0) { if (this->unk144 == 0) { @@ -127,15 +127,15 @@ void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) { } void func_8099FD7C(Actor* thisx, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(thisx->cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(thisx->cutscene, thisx); - if (thisx->cutscene >= 0) { + if (CutsceneManager_IsNext(thisx->csId)) { + CutsceneManager_StartWithPlayerCs(thisx->csId, thisx); + if (thisx->csId >= 0) { func_800B7298(play, thisx, PLAYER_CSMODE_4); } func_8099FB64(thisx, play); thisx->update = Actor_Noop; thisx->flags &= ~ACTOR_FLAG_10; } else { - ActorCutscene_SetIntentToPlay(thisx->cutscene); + CutsceneManager_Queue(thisx->csId); } } 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 e2750e639..b0ac87b4e 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 @@ -40,7 +40,7 @@ ActorInit Obj_Mu_Pict_InitVars = { void ObjMuPict_Init(Actor* thisx, PlayState* play) { ObjMuPict* this = THIS; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } @@ -64,14 +64,14 @@ void func_80C06B70(ObjMuPict* this, PlayState* play) { s16 yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (this->actor.cutscene < 0) { + if (this->actor.csId < 0) { func_80C06DC8(this, play); func_80C06CC4(this); } else { - if (ActorCutscene_GetCurrentIndex() == 0x7C) { - ActorCutscene_Stop(0x7C); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); func_80C06DC8(this, play); func_80C06C54(this); } @@ -85,11 +85,11 @@ void func_80C06C54(ObjMuPict* this) { } void func_80C06C68(ObjMuPict* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_Start(this->actor.csId, &this->actor); func_80C06CC4(this); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -113,8 +113,8 @@ void func_80C06CD8(ObjMuPict* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { func_80C06B5C(this); - if (this->actor.cutscene >= 0) { - ActorCutscene_Stop(this->actor.cutscene); + if (this->actor.csId >= 0) { + CutsceneManager_Stop(this->actor.csId); } } break; diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c index 678f76ed0..95c43a4bf 100644 --- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c +++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c @@ -139,7 +139,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) { ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i); this->children[i] = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, this->actor.world.rot.x, - this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.cutscene, + this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.csId, this->actor.halfDaysBits, NULL); if (this->children[i] != NULL) { if (this->type == 0x90) { @@ -152,7 +152,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) { ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i); this->children[i] = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, this->actor.world.rot.x, - this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.cutscene, + this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.csId, this->actor.halfDaysBits, NULL); if (this->children[i] != NULL) { this->children[i]->room = this->actor.room; @@ -174,7 +174,7 @@ void ObjMure_SpawnActors1(ObjMure* this, PlayState* play2) { this->children[i] = Actor_SpawnAsChildAndCutscene( &play2->actorCtx, play, sSpawnActorIds[this->type], spawnPos.x, spawnPos.y, spawnPos.z, actor->world.rot.x, actor->world.rot.y, actor->world.rot.z, - (this->type == OBJMURE_TYPE_BUTTERFLY && i == 0) ? 1 : sSpawnParams[this->type], this->actor.cutscene, + (this->type == OBJMURE_TYPE_BUTTERFLY && i == 0) ? 1 : sSpawnParams[this->type], this->actor.csId, this->actor.halfDaysBits, NULL); if (this->children[i] != NULL) { this->childrenStates[i] = OBJMURE_CHILD_STATE_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 bf20758ca..7f7f9550a 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -69,7 +69,7 @@ void ObjNozoki_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->dyna.actor.shape.rot.x = 0; this->dyna.actor.shape.rot.z = 0; - this->unk_15F = this->dyna.actor.cutscene; + this->csId = this->dyna.actor.csId; if (play->sceneId == SCENE_AYASHIISHOP) { this->unk_15C = 4; @@ -107,7 +107,7 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) { if (this->unk_15C == 0) { Actor_SetObjectDependency(play, &this->dyna.actor); DynaPolyActor_LoadMesh(play, &this->dyna, &object_secom_obj_Colheader_0001C0); - if (ActorCutscene_GetAdditionalCutscene(this->unk_15F) >= 0) { + if (CutsceneManager_GetAdditionalCsId(this->csId) >= 0) { this->dyna.actor.params |= OBJNOZOKI_400; } ObjNozoki_SetupAction(this, func_80BA27C4); @@ -129,16 +129,16 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) { } s32 func_80BA26A8(ObjNozoki* this) { - if (this->unk_15F < 0) { + if (this->csId < 0) { return true; } - if (ActorCutscene_GetCanPlayNext(this->unk_15F)) { - ActorCutscene_StartAndSetUnkLinkFields(this->unk_15F, &this->dyna.actor); + if (CutsceneManager_IsNext(this->csId)) { + CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor); return true; } - ActorCutscene_SetIntentToPlay(this->unk_15F); + CutsceneManager_Queue(this->csId); return false; } @@ -185,7 +185,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) { this->unk_15E = 25; play_sound(NA_SE_SY_SECOM_WARNING); } else { - this->unk_15E = ActorCutscene_GetLength(this->unk_15F); + this->unk_15E = CutsceneManager_GetLength(this->csId); if (this->unk_15E < 0) { this->unk_15E = 50; } @@ -213,23 +213,23 @@ void func_80BA28DC(ObjNozoki* this, PlayState* play) { return; } } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { - s32 cs = this->dyna.actor.cutscene; + s32 csId = this->dyna.actor.csId; - if (cs == this->unk_15F) { + if (csId == this->csId) { if (OBJNOZOKI_GET_400(&this->dyna.actor)) { Vec3f sp28; Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &sp28, &GET_PLAYER(play)->actor.world.pos); if (sp28.z < -20.0f) { - this->unk_15F = ActorCutscene_GetAdditionalCutscene(this->unk_15F); + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); } } } else if (D_80BA36B4 == 0) { if (func_80BA26A8(this)) { D_80BA36B4 = 1; } - } else if (ActorCutscene_GetCurrentIndex() != this->unk_15F) { - this->unk_15F = cs; + } else if (CutsceneManager_GetCurrentCsId() != this->csId) { + this->csId = csId; this->dyna.actor.params &= ~OBJNOZOKI_400; SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_ENEMY | 0x800 | SEQ_FLAG_ASYNC); } @@ -275,13 +275,13 @@ void func_80BA2BA4(ObjNozoki* this, PlayState* play) { s32 func_80BA2C28(ObjNozoki* this) { s32 i; - s16 cs = this->unk_15F; + s16 csId = this->csId; for (i = 0; i < 3; i++) { - if (ActorCutscene_GetCurrentIndex() == cs) { + if (CutsceneManager_GetCurrentCsId() == csId) { return i; } - cs = ActorCutscene_GetAdditionalCutscene(cs); + csId = CutsceneManager_GetAdditionalCsId(csId); } return -1; 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 4c4b74916..8bfc9818e 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h @@ -20,7 +20,7 @@ typedef struct ObjNozoki { /* 0x15C */ u8 unk_15C; /* 0x15D */ u8 unk_15D; /* 0x15E */ s8 unk_15E; - /* 0x15F */ s8 unk_15F; + /* 0x15F */ s8 csId; /* 0x160 */ ObjNozokiActionFunc actionFunc; } ObjNozoki; // size = 0x164 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 0b4e4e14b..eab144cbd 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -221,7 +221,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) { Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)); } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); func_80AC9C20(this); } } else { @@ -239,12 +239,12 @@ void func_80AC9C20(ObjOcarinalift* this) { } void func_80AC9C48(ObjOcarinalift* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->cutsceneTimer = 50; func_80AC96B4(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -256,7 +256,7 @@ void ObjOcarinalift_Update(Actor* thisx, PlayState* play) { if (this->cutsceneTimer > 0) { this->cutsceneTimer--; if (this->cutsceneTimer == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } } 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 ee26937da..dbd0dfe31 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -113,7 +113,7 @@ s32 ObjPurify_IsPurified(ObjPurify* this) { return true; } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { return true; } } 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 5788f1585..3c8a7ecc0 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -198,18 +198,18 @@ void ObjRaillift_Wait(ObjRaillift* this, PlayState* play) { void ObjRaillift_Idle(ObjRaillift* this, PlayState* play) { if (Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(&this->dyna.actor))) { this->dyna.actor.speed = 0.0f; - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = ObjRaillift_StartCutscene; } } void ObjRaillift_StartCutscene(ObjRaillift* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->cutsceneTimer = 50; this->actionFunc = ObjRaillift_Move; } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -223,7 +223,7 @@ void ObjRaillift_Update(Actor* thisx, PlayState* play) { if (this->cutsceneTimer > 0) { this->cutsceneTimer--; if (this->cutsceneTimer == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); } } if (OBJRAILLIFT_REACT_TO_PLAYER_ON_TOP(thisx)) { 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 154f662f8..3871508ba 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -64,7 +64,7 @@ void func_80973D3C(ObjRoomtimer* this, PlayState* play) { if (this->actor.params != 0x1FF) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_80973DE0; } else if ((this->actor.params != 0x1FF) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF)) { play_sound(NA_SE_OC_ABYSS); @@ -74,17 +74,17 @@ void func_80973D3C(ObjRoomtimer* this, PlayState* play) { } void func_80973DE0(ObjRoomtimer* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { Flags_SetClear(play, this->actor.room); Flags_SetSwitch(play, this->switchFlag); - if (ActorCutscene_GetLength(this->actor.cutscene) != -1) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_GetLength(this->actor.csId) != -1) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } Actor_Kill(&this->actor); return; } - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } void ObjRoomtimer_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c index 385bb65fb..fa04972ef 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -535,7 +535,7 @@ void func_80A22334(ObjSkateblock* this, PlayState* play) { func_80A21C88(this, sp2C); func_80A2244C(this); sp30 = false; - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); this->unk_1C1 |= 1; } @@ -591,7 +591,7 @@ void func_80A224A4(ObjSkateblock* this, PlayState* play) { if ((this->unk_1C1 & 1) && (sp24 || sp28 || (this->dyna.actor.xzDistToPlayer > 400.0f))) { this->unk_1C1 &= ~1; - func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); } func_80A21F74(this, play); 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 b0416cc58..c94d67860 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -106,7 +106,7 @@ void func_80B02CD0(ObjSnowball* this, PlayState* play) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, this->actor.home.rot.x, 0, this->actor.home.rot.z, - ptr->unk_02, -1, this->actor.halfDaysBits, NULL); + ptr->unk_02, CS_ID_NONE, this->actor.halfDaysBits, NULL); } void func_80B02D58(ObjSnowball* this, PlayState* play) { @@ -121,10 +121,10 @@ void func_80B02DB0(ObjSnowball* this, PlayState* play) { s32 pad; ObjSnowballStruct2* ptr = &D_80B04F84[this->actor.home.rot.y]; - Actor_SpawnAsChildAndCutscene( - &play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, - this->actor.home.rot.x, 0, this->actor.home.rot.z, this->actor.params | ptr->unk_02, - ActorCutscene_GetAdditionalCutscene(this->actor.cutscene), this->actor.halfDaysBits, NULL); + Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y, + this->actor.home.pos.z, this->actor.home.rot.x, 0, this->actor.home.rot.z, + this->actor.params | ptr->unk_02, CutsceneManager_GetAdditionalCsId(this->actor.csId), + this->actor.halfDaysBits, NULL); } void func_80B02E54(ObjSnowball* this, PlayState* play) { @@ -132,7 +132,7 @@ void func_80B02E54(ObjSnowball* this, PlayState* play) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, this->actor.home.rot.x, 0, this->actor.home.rot.z, - this->actor.params | ptr->unk_02, -1, this->actor.halfDaysBits, NULL); + this->actor.params | ptr->unk_02, CS_ID_NONE, this->actor.halfDaysBits, NULL); } void func_80B02EE4(ObjSnowball* this, PlayState* play) { @@ -549,7 +549,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) { this->unk_20A = 0; } - if (this->actor.cutscene < 0) { + if (this->actor.csId < 0) { func_80B03FF8(this, play); if (this->unk_20A == 0) { func_80B04608(this, play); @@ -584,13 +584,13 @@ void func_80B04350(ObjSnowball* this, PlayState* play) { } void func_80B04540(ObjSnowball* this, PlayState* play) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_80B0457C; } void func_80B0457C(ObjSnowball* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); func_80B03FF8(this, play); this->unk_20B = 1; if (this->unk_20A == 0) { @@ -599,7 +599,7 @@ void func_80B0457C(ObjSnowball* this, PlayState* play) { func_80B046E4(this, play); } } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -615,7 +615,7 @@ void func_80B04648(ObjSnowball* this, PlayState* play) { this->unk_208--; if (this->unk_208 <= 0) { if (this->unk_20B != 0) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } if (this->actor.home.rot.y == 1) { @@ -719,7 +719,7 @@ void func_80B047C0(ObjSnowball* this, PlayState* play) { if ((this->unk_208 <= 0) || ((this->unk_1A8[0].unk_2D & 1) && (this->unk_1A8[1].unk_2D & 1))) { if (this->unk_20B != 0) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); } if (this->actor.home.rot.y == 1) { 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 6e959a8dc..907df33fc 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -676,15 +676,15 @@ void func_80B30A2C(ObjSpidertent* this) { } void func_80B30A4C(ObjSpidertent* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); - if (this->dyna.actor.cutscene >= 0) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); + if (this->dyna.actor.csId >= 0) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor)); func_80B30AD4(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -791,7 +791,7 @@ void func_80B30AF8(ObjSpidertent* this, PlayState* play) { } } } else if (this->unk_3C1 <= 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); } } 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 9a1ab7095..2c03f8689 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -266,7 +266,7 @@ void ObjSwitch_CrystalUpdateTimer(ObjSwitch* this) { void ObjSwitch_StopCutscene(ObjSwitch* this) { if (this->isPlayingCutscene) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); this->isPlayingCutscene = false; } } @@ -486,8 +486,8 @@ void ObjSwitch_TryPlayCutsceneInit(ObjSwitch* this, PlayState* play, ObjSwitchSe } void ObjSwitch_TryPlayCutscene(ObjSwitch* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); ObjSwitch_SetSwitchFlagState(this, play, this->nextSwitchFlagState); if (this->floorSwitchPlayerSnapState == 1) { this->floorSwitchPlayerSnapState = 2; @@ -495,7 +495,7 @@ void ObjSwitch_TryPlayCutscene(ObjSwitch* this, PlayState* play) { this->isPlayingCutscene = true; this->setupFunc(this); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } diff --git a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c index 5e6f399a8..f1b7bfa6f 100644 --- a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c +++ b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c @@ -109,12 +109,12 @@ void func_80C25698(ObjSwprize* this) { } void func_80C256AC(ObjSwprize* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); func_80C253D0(this, play); func_80C25710(this); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -127,7 +127,7 @@ void func_80C2572C(ObjSwprize* this, PlayState* play) { if (this->timer > 0) { this->timer--; if (this->timer == 0) { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); ObjSwprize_SetupDoNothing(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 96716d107..902caa42b 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -143,16 +143,16 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { s32 pad1; if (this->pendingAction != OBJ_SYOKUDAI_PENDING_ACTION_NONE) { - if (ActorCutscene_GetCurrentIndex() != thisx->cutscene) { - if (ActorCutscene_GetCanPlayNext(thisx->cutscene) != 0) { - ActorCutscene_StartAndSetUnkLinkFields(thisx->cutscene, thisx); + if (CutsceneManager_GetCurrentCsId() != thisx->csId) { + if (CutsceneManager_IsNext(thisx->csId)) { + CutsceneManager_StartWithPlayerCs(thisx->csId, thisx); if (this->pendingAction >= OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH) { Flags_SetSwitch(play, switchFlag); } } else { - ActorCutscene_SetIntentToPlay(thisx->cutscene); + CutsceneManager_Queue(thisx->csId); } - } else if (func_800F22C4(thisx->cutscene, thisx) != 0) { + } else if (func_800F22C4(thisx->csId, thisx) != 0) { this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER; this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_NONE; } @@ -171,6 +171,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { } else { s32 interaction = OBJ_SYOKUDAI_INTERACTION_NONE; u32 flameColliderHurtboxDmgFlags = 0; + player = GET_PLAYER(play); if (OBJ_SYOKUDAI_GET_START_LIT(thisx)) { @@ -240,7 +241,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { if (groupSize == 0) { if ((type == OBJ_SYOKUDAI_TYPE_NO_SWITCH) && (switchFlag == 0x7F)) { this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER; - } else if (thisx->cutscene >= 0) { + } else if (thisx->csId >= 0) { this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH; } else { Flags_SetSwitch(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 9a01a8da3..aeaddd2ee 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c @@ -296,14 +296,14 @@ void func_80B9C174(ObjTaru* this, PlayState* play) { } void func_80B9C1A0(ObjTaru* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + 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)); Actor_Kill(&this->dyna.actor); return; } - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } void ObjTaru_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index ec47acd86..6cdada70b 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -195,7 +195,7 @@ void ObjTokeiStep_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); - if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) { + if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) { DynaPolyActor_LoadMesh(play, &this->dyna, &gClocktowerPanelCol); ObjTokeiStep_InitSteps(this); ObjTokeiStep_SetupBeginOpen(this); @@ -221,12 +221,12 @@ void ObjTokeiStep_SetupBeginOpen(ObjTokeiStep* this) { } void ObjTokeiStep_BeginOpen(ObjTokeiStep* this, PlayState* play) { - CsCmdActorAction* action; + CsCmdActorCue* cue; - if (Cutscene_CheckActorAction(play, 134)) { - action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 134)]; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_134)) { + cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_134)]; - if ((action->startFrame == play->csCtx.frames) && (action->action != 0)) { + if ((cue->startFrame == play->csCtx.curFrame) && (cue->id != 0)) { this->dyna.actor.draw = ObjTokeiStep_DrawOpen; ObjTokeiStep_SetupOpen(this); } 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 00dd90b94..7dd00abc3 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -121,8 +121,8 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) { this->opaDList = gClockTowerExteriorGearDL; ObjTokeidai_SetupClockOrExteriorGear(this); - if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) || - ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0))) { + if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || + ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { ObjTokeidai_SetupTowerOpening(this); } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle; @@ -138,8 +138,8 @@ void ObjTokeidai_TowerClock_Init(ObjTokeidai* this, PlayState* play) { this->actor.draw = ObjTokeidai_Clock_Draw; ObjTokeidai_Clock_Init(this); - if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) || - ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0))) { + if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || + ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { ObjTokeidai_SetupTowerOpening(this); } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { this->actor.world.pos.y += (this->actor.scale.y * 5191.0f) - 50.0f; @@ -171,8 +171,8 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) { this->spotlightIntensity = 0; } - if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) || - ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0))) { + if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || + ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { this->spotlightIntensity = 0; ObjTokeidai_SetupTowerOpening(this); @@ -329,8 +329,8 @@ void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_ExteriorGear_OpenedIdle(ObjTokeidai* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 132) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && + play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 2) { this->actionFunc = ObjTokeidai_ExteriorGear_Collapse; this->actor.speed = this->actor.scale.y * 5.0f; this->actor.velocity.y = 0.0f; @@ -397,8 +397,8 @@ void ObjTokeidai_TowerClock_SlideOff(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_TowerClock_OpenedIdle(ObjTokeidai* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 132) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 1)) { this->actionFunc = ObjTokeidai_TowerClock_SlideOff; this->slidingClockFaceAngle = 0; this->aerialClockFaceSpeed = -0xD; @@ -415,8 +415,8 @@ void ObjTokeidai_Counterweight_Collapse(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_Counterweight_OpenedIdle(ObjTokeidai* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 132) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 3) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 3)) { this->actionFunc = ObjTokeidai_Counterweight_Collapse; this->xRotation = 0; this->actor.velocity.y = 0.0f; @@ -432,22 +432,20 @@ void ObjTokeidai_TerminaFieldWalls_Collapse(ObjTokeidai* this, PlayState* play) } void ObjTokeidai_TerminaFieldWalls_Idle(ObjTokeidai* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 132) != 0 && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 1) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 1)) { this->actionFunc = ObjTokeidai_TerminaFieldWalls_Collapse; } } void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) { - if (Cutscene_CheckActorAction(play, 132) != 0 && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 5) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 5)) { SET_WEEKEVENTREG(WEEKEVENTREG_08_40); - if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && - (play->csCtx.currentCsIndex == 0)) || - ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && - (play->csCtx.currentCsIndex == 0))) { + if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || + ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { Audio_SetCutsceneFlag(false); - gSaveContext.save.cutscene = 0; + gSaveContext.save.cutsceneIndex = 0; gSaveContext.nextCutsceneIndex = 0; gSaveContext.respawnFlag = 2; play->transitionTrigger = TRANS_TRIGGER_START; @@ -587,8 +585,8 @@ void ObjTokeidai_TowerOpening_RaiseTower(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_TowerOpening_Start(ObjTokeidai* this, PlayState* play) { - if ((Cutscene_CheckActorAction(play, 132) && - play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 4) || + if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 4)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { this->actionFunc = ObjTokeidai_TowerOpening_RaiseTower; } @@ -698,7 +696,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { } else { if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) && OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD && - ActorCutscene_GetCurrentIndex() == -1) { + CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { this->actor.draw = NULL; } this->clockTime = gSaveContext.save.time; @@ -731,7 +729,7 @@ void ObjTokeidai_ExteriorGear_Idle(ObjTokeidai* this, PlayState* play) { } else { if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) && (OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_TERMINA_FIELD) && - (ActorCutscene_GetCurrentIndex() == -1)) { + (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) { this->actor.draw = NULL; } this->clockTime = gSaveContext.save.time; 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 46fbe067c..f80c44751 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -1139,7 +1139,7 @@ void ObjUm_RanchWaitPathFinished(ObjUm* this, PlayState* play) { case OBJUM_PATH_STATE_1: case OBJUM_PATH_STATE_FINISH: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); play->nextEntrance = ENTRANCE(MILK_ROAD, 5); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; @@ -1158,12 +1158,12 @@ void ObjUm_RanchWaitPathFinished(ObjUm* this, PlayState* play) { void ObjUm_RanchStartCs(ObjUm* this, PlayState* play) { ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_IDLE); - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->lastTime = gSaveContext.save.time; ObjUm_SetupAction(this, func_80B7A0E0); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -1276,12 +1276,12 @@ void ObjUm_PreMilkRunStartCs(ObjUm* this, PlayState* play) { ObjUm_SetPlayerPosition(this, play); this->flags |= OBJ_UM_FLAG_0004; player->stateFlags1 |= PLAYER_STATE1_20; - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->lastTime = gSaveContext.save.time; ObjUm_SetupAction(this, func_80B7A394); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -1357,17 +1357,17 @@ void func_80B7A614(ObjUm* this, PlayState* play) { } if (this->flags & OBJ_UM_FLAG_MINIGAME_FINISHED) { - s32 sp20 = ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene); + s32 csId = CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId); if (this->areAllPotsBroken) { - sp20 = ActorCutscene_GetAdditionalCutscene(sp20); + csId = CutsceneManager_GetAdditionalCsId(csId); } - if (ActorCutscene_GetCanPlayNext(sp20)) { - ActorCutscene_StartAndSetUnkLinkFields(sp20, &this->dyna.actor); + if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); ObjUm_SetupAction(this, ObjUm_RunMinigame); this->flags &= ~OBJ_UM_FLAG_PLAYING_MINIGAME; } else { - ActorCutscene_SetIntentToPlay(sp20); + CutsceneManager_Queue(csId); } } @@ -1396,14 +1396,14 @@ void func_80B7A860(ObjUm* this, PlayState* play) { ObjUm_RotatePlayer(this, play, 0); this->flags |= OBJ_UM_FLAG_0004; - if (play->csCtx.frames == 449) { + if (play->csCtx.curFrame == 449) { ObjUm_InitBandits(this, play); - } else if (play->csCtx.frames >= 450) { + } else if (play->csCtx.curFrame >= 450) { func_80B78DF0(this, play); } if (play->csCtx.state == 0) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); ObjUm_SetupAction(this, func_80B7A7AC); } @@ -1526,12 +1526,12 @@ void ObjUm_StartCs(ObjUm* this, PlayState* play) { ObjUm_RotatePlayer(this, play, 0); this->flags |= OBJ_UM_FLAG_0004; - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->lastTime = gSaveContext.save.time; ObjUm_SetupAction(this, func_80B7ABE4); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } @@ -1546,7 +1546,7 @@ void ObjUm_PostMilkRunWaitPathFinished(ObjUm* this, PlayState* play) { ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_TROT); if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Audio_SetCutsceneFlag(false); SET_WEEKEVENTREG(WEEKEVENTREG_59_02); gSaveContext.nextCutsceneIndex = 0xFFF3; @@ -1568,11 +1568,11 @@ void ObjUm_PostMilkRunStartCs(ObjUm* this, PlayState* play) { this->flags |= OBJ_UM_FLAG_0004; ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_IDLE); - if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); ObjUm_SetupAction(this, ObjUm_PostMilkRunWaitPathFinished); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } } diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c index 81efe0fc5..46a6b994d 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c @@ -172,18 +172,18 @@ void func_80C081C8(ObjUsiyane* this, PlayState* play) { } void func_80C082CC(ObjUsiyane* this, PlayState* play) { - this->unk_164 = -1; + this->cueId = -1; } void func_80C082E0(ObjUsiyane* this, PlayState* play) { - CsCmdActorAction* csAction; + CsCmdActorCue* cue; - if (Cutscene_CheckActorAction(play, 0x228)) { - this->unk_160 = Cutscene_GetActorActionIndex(play, 0x228); - csAction = play->csCtx.actorActions[this->unk_160]; - if (this->unk_164 != csAction->action) { - this->unk_164 = csAction->action; - if (this->unk_164 == 2) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_552)) { + this->cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_552); + cue = play->csCtx.actorCues[this->cueChannel]; + if (this->cueId != cue->id) { + this->cueId = cue->id; + if (this->cueId == 2) { func_80C07F30(this, play); this->actionFunc = func_80C081C8; } diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h index 2abc2a38b..92bd96549 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h @@ -24,8 +24,8 @@ typedef struct { typedef struct ObjUsiyane { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ObjUsiyaneActionFunc actionFunc; - /* 0x160 */ s32 unk_160; - /* 0x164 */ s32 unk_164; + /* 0x160 */ s32 cueChannel; + /* 0x164 */ s32 cueId; /* 0x168 */ ObjUsiyaneStruct unk_168[10][4]; /* 0x708 */ f32 unk_708; /* 0x70C */ f32 unk_70C; 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 b7eef869d..075ad18db 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -97,19 +97,19 @@ s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, PlayState* play) { } s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, PlayState* play) { - if (this->dyna.actor.cutscene < 0 || ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { - ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); + if ((this->dyna.actor.csId < 0) || CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); ObjWarpstone_SetupAction(this, ObjWarpstone_PlayOpeningCutscene); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON); } else { - ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); + CutsceneManager_Queue(this->dyna.actor.csId); } return true; } s32 ObjWarpstone_PlayOpeningCutscene(ObjWarpstone* this, PlayState* play) { if (this->openingCSTimer++ >= OBJ_WARPSTONE_TIMER_ACTIVATE_THRESHOLD) { - ActorCutscene_Stop(this->dyna.actor.cutscene); + CutsceneManager_Stop(this->dyna.actor.csId); Sram_ActivateOwl(OBJ_WARPSTONE_GET_ID(&this->dyna.actor)); ObjWarpstone_SetupAction(this, ObjWarpstone_OpenedIdle); } else if (this->openingCSTimer < OBJ_WARPSTONE_TIMER_OPEN_THRESHOLD) { 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 4558a6a75..54ebe8cc7 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -52,15 +52,15 @@ void func_808A7968(ObjWturn* this, PlayState* play) { } void func_808A7A24(ObjWturn* this) { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_808A7A5C; } void func_808A7A5C(ObjWturn* this, PlayState* play) { - if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + if (CutsceneManager_IsNext(this->actor.csId)) { func_808A7AAC(this, play); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } @@ -69,9 +69,9 @@ void func_808A7AAC(ObjWturn* this, PlayState* play) { Vec3f subCamEye; Vec3f subCamAt; - ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); Play_EnableMotionBlur(140); - this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); func_800B7298(play, &this->actor, PLAYER_CSMODE_21); subCamAt.x = player->actor.focus.pos.x; subCamAt.z = player->actor.focus.pos.z; 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 1196cb0be..cea1a4e71 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c @@ -105,19 +105,19 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) { if (this->settleTimer == 0) { if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) { - s16 cutscene = this->dyna.actor.cutscene; + s16 csId = this->dyna.actor.csId; if (this->openTimer == 0) { - if ((cutscene >= 0) && !ActorCutscene_GetCanPlayNext(cutscene)) { - ActorCutscene_SetIntentToPlay(cutscene); - } else if (cutscene >= 0) { - ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->dyna.actor); + if ((csId >= 0) && !CutsceneManager_IsNext(csId)) { + CutsceneManager_Queue(csId); + } else if (csId >= 0) { + CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); this->openTimer = -1; } else { ObjY2shutter_SetupOpen(this, info, shutterType); } } else if (this->openTimer < 0) { - if (func_800F22C4(cutscene, &this->dyna.actor)) { + if (func_800F22C4(csId, &this->dyna.actor) != 0) { ObjY2shutter_SetupOpen(this, info, shutterType); } } else { 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 0d0db6385..7915551c2 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -79,7 +79,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) { f32 phi_fv1 = 1220.0f; if ((((OCEFF_WIPE5_GET_SONG_TYPE(thisx) == 2) && (play->sceneId == SCENE_LABO)) && - ((play->csCtx.currentCsIndex == 0) || (play->csCtx.currentCsIndex == 1))) && + ((play->csCtx.scriptIndex == 0) || (play->csCtx.scriptIndex == 1))) && (play->csCtx.state != 0)) { phi_fv1 = 1150.0f; } 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 23713aa71..f237bed47 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -87,7 +87,7 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) { if (this->timer > 0) { this->timer--; } else { - ActorCutscene_Stop(this->actor.cutscene); + CutsceneManager_Stop(this->actor.csId); switch (params) { case SHOTSUN_FAIRY_SPAWNER_SUNS: fairyType = ENELF_TYPE_7; @@ -103,9 +103,9 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) { } void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { - if ((this->actor.cutscene == -1) || ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { - if (this->actor.cutscene != -1) { - ActorCutscene_Start(this->actor.cutscene, &this->actor); + if ((this->actor.csId == CS_ID_NONE) || CutsceneManager_IsNext(this->actor.csId)) { + if (this->actor.csId != CS_ID_NONE) { + CutsceneManager_Start(this->actor.csId, &this->actor); } this->actionFunc = ShotSun_SpawnFairy; this->timer = 50; @@ -113,7 +113,7 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { this->actor.home.pos.z, 0, 0, 0, 0x11); Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR); } else { - ActorCutscene_SetIntentToPlay(this->actor.cutscene); + CutsceneManager_Queue(this->actor.csId); } } diff --git a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c index 5e42daffb..5523ded78 100644 --- a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c +++ b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c @@ -91,7 +91,7 @@ void TGSw_ActionExecuteOneShot(TGSw* this, PlayState* play) { void TGSw_Init(Actor* thisx, PlayState* play) { TGSw* this = THIS; - this->actor.cutscene = this->actor.world.rot.z; + this->actor.csId = this->actor.world.rot.z; this->actionFunc = TGSw_ActionDecider; } diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index 7edfb8e78..9697b111f 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -17,8 +17,8 @@ void TitleSetup_SetupTitleScreen(TitleSetupState* this) { Sram_InitNewSave(); - gSaveContext.save.entrance = sOpeningEntrances[D_801BB12C]; - gSaveContext.nextCutsceneIndex = gSaveContext.save.cutscene = sOpeningCutscenes[D_801BB12C]; + gSaveContext.save.entrance = sOpeningEntrances[gOpeningEntranceIndex]; + gSaveContext.nextCutsceneIndex = gSaveContext.save.cutsceneIndex = sOpeningCutscenes[gOpeningEntranceIndex]; gSaveContext.sceneLayer = 0; gSaveContext.save.time = CLOCK_TIME(8, 0); diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index ab34ebffe..08bf65262 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -533,69 +533,69 @@ void MapSelect_UpdateMenu(MapSelectState* this) { } if (CHECK_BTN_ALL(controller1->press.button, BTN_Z)) { - if (gSaveContext.save.cutscene == 0x8000) { - gSaveContext.save.cutscene = 0; - } else if (gSaveContext.save.cutscene == 0) { - gSaveContext.save.cutscene = 0x8800; - } else if (gSaveContext.save.cutscene == 0x8800) { - gSaveContext.save.cutscene = 0xFFF0; - } else if (gSaveContext.save.cutscene == 0xFFF0) { - gSaveContext.save.cutscene = 0xFFF1; - } else if (gSaveContext.save.cutscene == 0xFFF1) { - gSaveContext.save.cutscene = 0xFFF2; - } else if (gSaveContext.save.cutscene == 0xFFF2) { - gSaveContext.save.cutscene = 0xFFF3; - } else if (gSaveContext.save.cutscene == 0xFFF3) { - gSaveContext.save.cutscene = 0xFFF4; - } else if (gSaveContext.save.cutscene == 0xFFF4) { - gSaveContext.save.cutscene = 0xFFF5; - } else if (gSaveContext.save.cutscene == 0xFFF5) { - gSaveContext.save.cutscene = 0xFFF6; - } else if (gSaveContext.save.cutscene == 0xFFF6) { - gSaveContext.save.cutscene = 0xFFF7; - } else if (gSaveContext.save.cutscene == 0xFFF7) { - gSaveContext.save.cutscene = 0xFFF8; - } else if (gSaveContext.save.cutscene == 0xFFF8) { - gSaveContext.save.cutscene = 0xFFF9; - } else if (gSaveContext.save.cutscene == 0xFFF9) { - gSaveContext.save.cutscene = 0xFFFA; - } else if (gSaveContext.save.cutscene == 0xFFFA) { - gSaveContext.save.cutscene = 0x8000; + if (gSaveContext.save.cutsceneIndex == 0x8000) { + gSaveContext.save.cutsceneIndex = 0; + } else if (gSaveContext.save.cutsceneIndex == 0) { + gSaveContext.save.cutsceneIndex = 0x8800; + } else if (gSaveContext.save.cutsceneIndex == 0x8800) { + gSaveContext.save.cutsceneIndex = 0xFFF0; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF0) { + gSaveContext.save.cutsceneIndex = 0xFFF1; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF1) { + gSaveContext.save.cutsceneIndex = 0xFFF2; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF2) { + gSaveContext.save.cutsceneIndex = 0xFFF3; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF3) { + gSaveContext.save.cutsceneIndex = 0xFFF4; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF4) { + gSaveContext.save.cutsceneIndex = 0xFFF5; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF5) { + gSaveContext.save.cutsceneIndex = 0xFFF6; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF6) { + gSaveContext.save.cutsceneIndex = 0xFFF7; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF7) { + gSaveContext.save.cutsceneIndex = 0xFFF8; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF8) { + gSaveContext.save.cutsceneIndex = 0xFFF9; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF9) { + gSaveContext.save.cutsceneIndex = 0xFFFA; + } else if (gSaveContext.save.cutsceneIndex == 0xFFFA) { + gSaveContext.save.cutsceneIndex = 0x8000; } } else if (CHECK_BTN_ALL(controller1->press.button, BTN_R)) { - if (gSaveContext.save.cutscene == 0x8000) { - gSaveContext.save.cutscene = 0xFFFA; - } else if (gSaveContext.save.cutscene == 0) { - gSaveContext.save.cutscene = 0x8000; - } else if (gSaveContext.save.cutscene == 0x8800) { - gSaveContext.save.cutscene = 0; - } else if (gSaveContext.save.cutscene == 0xFFF0) { - gSaveContext.save.cutscene = 0x8800; - } else if (gSaveContext.save.cutscene == 0xFFF1) { - gSaveContext.save.cutscene = 0xFFF0; - } else if (gSaveContext.save.cutscene == 0xFFF2) { - gSaveContext.save.cutscene = 0xFFF1; - } else if (gSaveContext.save.cutscene == 0xFFF3) { - gSaveContext.save.cutscene = 0xFFF2; - } else if (gSaveContext.save.cutscene == 0xFFF4) { - gSaveContext.save.cutscene = 0xFFF3; - } else if (gSaveContext.save.cutscene == 0xFFF5) { - gSaveContext.save.cutscene = 0xFFF4; - } else if (gSaveContext.save.cutscene == 0xFFF6) { - gSaveContext.save.cutscene = 0xFFF5; - } else if (gSaveContext.save.cutscene == 0xFFF7) { - gSaveContext.save.cutscene = 0xFFF6; - } else if (gSaveContext.save.cutscene == 0xFFF8) { - gSaveContext.save.cutscene = 0xFFF7; - } else if (gSaveContext.save.cutscene == 0xFFF9) { - gSaveContext.save.cutscene = 0xFFF8; - } else if (gSaveContext.save.cutscene == 0xFFFA) { - gSaveContext.save.cutscene = 0xFFF9; + if (gSaveContext.save.cutsceneIndex == 0x8000) { + gSaveContext.save.cutsceneIndex = 0xFFFA; + } else if (gSaveContext.save.cutsceneIndex == 0) { + gSaveContext.save.cutsceneIndex = 0x8000; + } else if (gSaveContext.save.cutsceneIndex == 0x8800) { + gSaveContext.save.cutsceneIndex = 0; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF0) { + gSaveContext.save.cutsceneIndex = 0x8800; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF1) { + gSaveContext.save.cutsceneIndex = 0xFFF0; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF2) { + gSaveContext.save.cutsceneIndex = 0xFFF1; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF3) { + gSaveContext.save.cutsceneIndex = 0xFFF2; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF4) { + gSaveContext.save.cutsceneIndex = 0xFFF3; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF5) { + gSaveContext.save.cutsceneIndex = 0xFFF4; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF6) { + gSaveContext.save.cutsceneIndex = 0xFFF5; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF7) { + gSaveContext.save.cutsceneIndex = 0xFFF6; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF8) { + gSaveContext.save.cutsceneIndex = 0xFFF7; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF9) { + gSaveContext.save.cutsceneIndex = 0xFFF8; + } else if (gSaveContext.save.cutsceneIndex == 0xFFFA) { + gSaveContext.save.cutsceneIndex = 0xFFF9; } } gSaveContext.save.isNight = false; - if (gSaveContext.save.cutscene == 0x8800) { + if (gSaveContext.save.cutsceneIndex == 0x8800) { gSaveContext.save.isNight = true; } @@ -995,7 +995,7 @@ void MapSelect_DrawMenu(MapSelectState* this) { MapSelect_PrintMenu(this, printer); MapSelect_PrintAgeSetting(this, printer, GET_PLAYER_FORM); - MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutscene)); + MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutsceneIndex)); POLY_OPA_DISP = GfxPrint_Close(printer); GfxPrint_Destroy(printer); @@ -1085,7 +1085,7 @@ void MapSelect_Init(GameState* thisx) { } Game_SetFramerateDivisor(&this->state, 1); - gSaveContext.save.cutscene = 0; + gSaveContext.save.cutsceneIndex = 0; gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; gSaveContext.save.linkAge = 0; } diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 372557384..88fab2cab 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -440,7 +440,7 @@ 0x8015E750 : "z_message_staff", 0x80160A90 : "z_player_call", 0x80160C00 : "z_shrink_window", - 0x80161180 : "db_camera", + 0x80161180 : "cutscene_camera", 0x80163700 : "z_kaleido_manager", 0x801639A0 : "z_kaleido_scope_call", 0x80163C90 : "z_fbdemo_dlftbls", @@ -652,7 +652,7 @@ 0x801DF150 : "z_message", 0x801DF730 : "z_message_nes", 0x801DF860 : "z_message_staff", - 0x801DF900 : "db_camera", + 0x801DF900 : "cutscene_camera", 0x801DF9C0 : "z_kaleido_manager", 0x801DF9E0 : "z_fbdemo_circle", 0x801DFA00 : "z_play", @@ -723,7 +723,7 @@ 0x801F6B00 : "z_message", 0x801F6B30 : "z_player_call", 0x801F6B40 : "z_shrink_window", - 0x801F6B50 : "db_camera", + 0x801F6B50 : "cutscene_camera", 0x801F6BF0 : "z_kaleido_manager", 0x801F6C00 : "z_kaleido_scope_call", 0x801F6C10 : "z_play", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 126407393..8cbc8f13f 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1533,54 +1533,54 @@ 0x800E9DBC:("DebugCamera_ScreenText",), 0x800E9E94:("DebugCamera_DrawScreenText",), 0x800E9F78:("Debug_DrawText",), - 0x800EA060:("Cutscene_Init",), - 0x800EA0D4:("Cutscene_Start",), - 0x800EA0EC:("Cutscene_End",), - 0x800EA110:("Cutscene_Update1",), - 0x800EA15C:("Cutscene_Update2",), - 0x800EA210:("Cutscene_DoNothing",), - 0x800EA220:("func_800EA220",), - 0x800EA258:("func_800EA258",), - 0x800EA2B8:("func_800EA2B8",), - 0x800EA324:("Cutscene_Command_Misc",), - 0x800EABAC:("Cutscene_Command_SetLighting",), - 0x800EAC08:("Cutscene_Command_PlaySequence",), - 0x800EAC44:("Cutscene_Command_StopSequence",), - 0x800EAC94:("Cutscene_Command_FadeSequence",), - 0x800EAD14:("Cutscene_Command_PlayAmbienceSequence",), - 0x800EAD48:("func_800EAD48",), - 0x800EAD7C:("func_800EAD7C",), - 0x800EADB0:("func_800EADB0",), - 0x800EAECC:("Cutscene_Command_FadeAmbienceSequence",), - 0x800EAF20:("Cutscene_Command_Rumble",), - 0x800EAFE0:("Cutscene_Command_FadeColorScreen",), - 0x800EB1DC:("Cutscene_Command_SetTime",), - 0x800EB364:("Cutscene_TerminatorImpl",), - 0x800EB4B4:("Cutscene_Command_Terminator",), - 0x800EB6F8:("Cutscene_Command_ChooseCreditsScenes",), - 0x800EBB68:("Cutscene_Command_MotionBlur",), - 0x800EBCD0:("Cutscene_Command_GiveTatlToPlayer",), - 0x800EBD60:("Cutscene_Command_TransitionFX",), - 0x800EC678:("Cutscene_Command_Camera",), + 0x800EA060:("Cutscene_InitContext",), + 0x800EA0D4:("Cutscene_StartManual",), + 0x800EA0EC:("Cutscene_StopManual",), + 0x800EA110:("Cutscene_UpdateManual",), + 0x800EA15C:("Cutscene_UpdateScripted",), + 0x800EA210:("CutsceneHandler_DoNothing",), + 0x800EA220:("Cutscene_StepTimer",), + 0x800EA258:("CutsceneHandler_StartManual",), + 0x800EA2B8:("CutsceneHandler_StartScript",), + 0x800EA324:("CutsceneCmd_Misc",), + 0x800EABAC:("CutsceneCmd_SetLightSetting",), + 0x800EAC08:("CutsceneCmd_StartSequence",), + 0x800EAC44:("CutsceneCmd_StopSequence",), + 0x800EAC94:("CutsceneCmd_FadeOutSequence",), + 0x800EAD14:("CutsceneCmd_StartAmbience",), + 0x800EAD48:("Cutscene_SetSfxReverbIndexTo2",), + 0x800EAD7C:("Cutscene_SetSfxReverbIndexTo1",), + 0x800EADB0:("CutsceneCmd_ModifySequence",), + 0x800EAECC:("CutsceneCmd_FadeOutAmbience",), + 0x800EAF20:("CutsceneCmd_RumbleController",), + 0x800EAFE0:("CutsceneCmd_TransitionGeneral",), + 0x800EB1DC:("CutsceneCmd_SetTime",), + 0x800EB364:("CutsceneCmd_DestinationDefault",), + 0x800EB4B4:("CutsceneCmd_Destination",), + 0x800EB6F8:("CutsceneCmd_ChooseCreditsScenes",), + 0x800EBB68:("CutsceneCmd_MotionBlur",), + 0x800EBCD0:("CutsceneCmd_GiveTatlToPlayer",), + 0x800EBD60:("CutsceneCmd_Transition",), + 0x800EC678:("CutsceneCmd_UpdateCamSpline",), 0x800EC6D4:("Cutscene_CountNormalMasks",), - 0x800EC924:("Cutscene_Command_Textbox",), - 0x800ECD7C:("func_800ECD7C",), - 0x800ECE40:("Cutscene_ProcessCommands",), - 0x800ED980:("func_800ED980",), - 0x800ED9C4:("func_800ED9C4",), - 0x800EDA04:("func_800EDA04",), - 0x800EDA84:("func_800EDA84",), - 0x800EDBE0:("func_800EDBE0",), + 0x800EC924:("CutsceneCmd_Text",), + 0x800ECD7C:("Cutscene_SetActorCue",), + 0x800ECE40:("Cutscene_ProcessScript",), + 0x800ED980:("CutsceneHandler_RunScript",), + 0x800ED9C4:("CutsceneHandler_StopManual",), + 0x800EDA04:("CutsceneHandler_StopScript",), + 0x800EDA84:("Cutscene_SetupScripted",), + 0x800EDBE0:("Cutscene_HandleEntranceTriggers",), 0x800EDDB0:("func_800EDDB0",), 0x800EDDBC:("func_800EDDBC",), - 0x800EDDCC:("Cutscene_LoadCutsceneData",), + 0x800EDDCC:("Cutscene_StartScripted",), 0x800EDE34:("Cutscene_ActorTranslate",), 0x800EDF24:("Cutscene_ActorTranslateAndYaw",), 0x800EDF78:("Cutscene_ActorTranslateAndYawSmooth",), 0x800EE0CC:("Cutscene_ActorTranslateXZAndYawSmooth",), 0x800EE1D8:("Cutscene_GetSceneLayer",), - 0x800EE200:("Cutscene_GetActorActionIndex",), - 0x800EE29C:("Cutscene_CheckActorAction",), + 0x800EE200:("Cutscene_GetCueChannel",), + 0x800EE29C:("Cutscene_IsCueInChannel",), 0x800EE2F4:("Cutscene_IsPlaying",), 0x800EE320:("GetItem_Draw",), 0x800EE364:("GetItem_DrawBombchu",), @@ -1632,35 +1632,35 @@ 0x800F10AC:("EnHy_UpdateCollider",), 0x800F112C:("EnHy_PlayWalkingSound",), 0x800F1250:("Text_GetFaceReaction",), - 0x800F12D0:("EnvFlags_UnsetAll",), - 0x800F1304:("EnvFlags_Set",), - 0x800F1374:("EnvFlags_Unset",), - 0x800F13E8:("EnvFlags_Get",), - 0x800F1460:("func_800F1460",), - 0x800F14F8:("ActorCutscene_GetCutsceneImpl",), - 0x800F1544:("ActorCutscene_Init",), - 0x800F15D8:("func_800F15D8",), - 0x800F1648:("ActorCutscene_ClearWaiting",), - 0x800F1678:("ActorCutscene_ClearNextCutscenes",), - 0x800F16A8:("ActorCutscene_MarkNextCutscenes",), - 0x800F17FC:("ActorCutscene_End",), - 0x800F1A7C:("ActorCutscene_Update",), - 0x800F1BA4:("ActorCutscene_SetIntentToPlay",), - 0x800F1BE4:("ActorCutscene_GetCanPlayNext",), - 0x800F1C68:("ActorCutscene_StartAndSetUnkLinkFields",), - 0x800F1CE0:("ActorCutscene_StartAndSetFlag",), - 0x800F1D84:("ActorCutscene_Start",), - 0x800F1FBC:("ActorCutscene_Stop",), - 0x800F207C:("ActorCutscene_GetCurrentIndex",), - 0x800F208C:("ActorCutscene_GetCutscene",), - 0x800F20B8:("ActorCutscene_GetAdditionalCutscene",), - 0x800F20F8:("ActorCutscene_GetLength",), - 0x800F2138:("func_800F2138",), - 0x800F2178:("func_800F2178",), - 0x800F21B8:("ActorCutscene_GetCurrentSubCamId",), - 0x800F21CC:("func_800F21CC",), + 0x800F12D0:("CutsceneFlags_UnsetAll",), + 0x800F1304:("CutsceneFlags_Set",), + 0x800F1374:("CutsceneFlags_Unset",), + 0x800F13E8:("CutsceneFlags_Get",), + 0x800F1460:("CutsceneManager_SetHudVisibility",), + 0x800F14F8:("CutsceneManager_GetCutsceneEntryImpl",), + 0x800F1544:("CutsceneManager_Init",), + 0x800F15D8:("CutsceneManager_StoreCamera",), + 0x800F1648:("CutsceneManager_ClearWaiting",), + 0x800F1678:("CutsceneManager_ClearNextCutscenes",), + 0x800F16A8:("CutsceneManager_MarkNextCutscenes",), + 0x800F17FC:("CutsceneManager_End",), + 0x800F1A7C:("CutsceneManager_Update",), + 0x800F1BA4:("CutsceneManager_Queue",), + 0x800F1BE4:("CutsceneManager_IsNext",), + 0x800F1C68:("CutsceneManager_StartWithPlayerCs",), + 0x800F1CE0:("CutsceneManager_StartWithPlayerCsAndSetFlag",), + 0x800F1D84:("CutsceneManager_Start",), + 0x800F1FBC:("CutsceneManager_Stop",), + 0x800F207C:("CutsceneManager_GetCurrentCsId",), + 0x800F208C:("CutsceneManager_GetCutsceneEntry",), + 0x800F20B8:("CutsceneManager_GetAdditionalCsId",), + 0x800F20F8:("CutsceneManager_GetLength",), + 0x800F2138:("CutsceneManager_GetCutsceneScriptIndex",), + 0x800F2178:("CutsceneManager_GetCutsceneCustomValue",), + 0x800F21B8:("CutsceneManager_GetCurrentSubCamId",), + 0x800F21CC:("CutsceneManager_FindEntranceCsId",), 0x800F22C4:("func_800F22C4",), - 0x800F23C4:("ActorCutscene_SetReturnCamera",), + 0x800F23C4:("CutsceneManager_SetReturnCamera",), 0x800F23E0:("Curve_CubicHermiteSpline",), 0x800F2478:("Curve_Interpolate",), 0x800F2620:("SkelCurve_Clear",), @@ -2447,8 +2447,8 @@ 0x801303E0:("Scene_CommandSoundSettings",), 0x8013043C:("Scene_CommandEchoSetting",), 0x80130454:("Scene_CommandAltHeaderList",), - 0x801304CC:("Scene_CommandCutsceneList",), - 0x80130500:("Scene_CommandActorCutsceneList",), + 0x801304CC:("Scene_CommandCutsceneScriptList",), + 0x80130500:("Scene_CommandCutsceneList",), 0x80130540:("Scene_CommandMiniMap",), 0x80130578:("Scene_Command1D",), 0x80130588:("Scene_CommandMiniMapCompassInfo",), @@ -2701,7 +2701,7 @@ 0x8013E07C:("SubS_ActorPathing_MoveWithoutGravityReverse",), 0x8013E0A4:("SubS_ActorPathing_SetNextPoint",), 0x8013E1C8:("SubS_ChangeAnimationBySpeedInfo",), - 0x8013E2D4:("SubS_StartActorCutscene",), + 0x8013E2D4:("SubS_StartCutscene",), 0x8013E3B8:("SubS_FillCutscenesList",), 0x8013E4B0:("SubS_ConstructPlane",), 0x8013E5CC:("SubS_LineSegVsPlane",), @@ -2797,7 +2797,7 @@ 0x80144684:("Sram_GenerateRandomSaveFields",), 0x80144890:("Sram_InitNewSave",), 0x80144968:("Sram_InitDebugSave",), - 0x80144A94:("func_80144A94",), + 0x80144A94:("Sram_ResetSaveFromMoonCrash",), 0x80144E78:("Sram_OpenSave",), 0x8014546C:("func_8014546C",), 0x80145698:("func_80145698",), @@ -2905,13 +2905,13 @@ 0x80160CE4:("ShrinkWindow_Update",), 0x80160D98:("ShrinkWindow_Draw",), 0x80161180:("func_80161180",), - 0x8016119C:("func_8016119C",), - 0x8016122C:("func_8016122C",), - 0x801612B8:("func_801612B8",), - 0x80161998:("func_80161998",), + 0x8016119C:("CutsceneCamera_Init",), + 0x8016122C:("CutsceneCamera_Interpolate",), + 0x801612B8:("CutsceneCamera_ProcessSpline",), + 0x80161998:("CutsceneCamera_UpdateSplines",), 0x80161BAC:("func_80161BAC",), - 0x80161BE0:("func_80161BE0",), - 0x80161C0C:("func_80161C0C",), + 0x80161BE0:("CutsceneCamera_SetState",), + 0x80161C0C:("CutsceneCamera_Reset",), 0x80161C20:("func_80161C20",), 0x80161E4C:("func_80161E4C",), 0x801620CC:("func_801620CC",), @@ -3037,7 +3037,7 @@ 0x8016A02C:("func_8016A02C",), 0x8016A0AC:("Play_IsUnderwater",), 0x8016A168:("Play_IsDebugCamEnabled",), - 0x8016A178:("Play_AssignPlayerActorCsIdsFromScene",), + 0x8016A178:("Play_AssignPlayerCsIdsFromScene",), 0x8016A268:("Play_FillScreen",), 0x8016A2C8:("Play_Init",), 0x8016AC10:("func_8016AC10",), @@ -3845,7 +3845,7 @@ 0x8019D488:("AudioOcarina_MemoryGameInit",), 0x8019D4F8:("AudioOcarina_MemoryGameNextNote",), 0x8019D600:("AudioOcarina_Update",), - 0x8019D758:("AudioOcarina_PlayLongScarecrowAfterCredits",), + 0x8019D758:("AudioOcarina_PlayLongScarecrowSong",), 0x8019D864:("AudioOcarina_SetCustomSequence",), 0x8019D8B4:("AudioOcarina_PlayCustomSequence",), 0x8019D8E4:("AudioOcarina_CreateCustomSequence",), @@ -7124,7 +7124,7 @@ 0x8092C86C:("func_8092C86C",), 0x8092C934:("func_8092C934",), 0x8092C9BC:("func_8092C9BC",), - 0x8092CA74:("func_8092CA74",), + 0x8092CA74:("EnDns_GetCueType",), 0x8092CAD0:("func_8092CAD0",), 0x8092CB98:("func_8092CB98",), 0x8092CC68:("func_8092CC68",), @@ -12870,7 +12870,7 @@ 0x80B01B30:("EnGiant_Init",), 0x80B01E74:("EnGiant_Destroy",), 0x80B01E84:("EnGiant_ChangeToStartOrLoopAnimation",), - 0x80B01EE8:("EnGiant_ChangeAnimBasedOnCsAction",), + 0x80B01EE8:("EnGiant_ChangeAnimBasedOnCueId",), 0x80B020A0:("EnGiant_UpdateAlpha",), 0x80B0211C:("EnGiant_PlayAndUpdateAnimation",), 0x80B02234:("EnGiant_PlaySound",), @@ -14411,7 +14411,7 @@ 0x80B73AE4:("EnJg_UpdateCollision",), 0x80B73B98:("EnJg_GetWalkingYRotation",), 0x80B73C58:("EnJg_ReachedPoint",), - 0x80B73DF4:("EnJg_GetCutsceneForTeachingLullabyIntro",), + 0x80B73DF4:("EnJg_GetCsIdForTeachingLullabyIntro",), 0x80B73E3C:("EnJg_SetupGoronShrineCheer",), 0x80B73F1C:("EnJg_SetupTalk",), 0x80B7406C:("EnJg_Idle",), @@ -15161,7 +15161,7 @@ 0x80BA78F8:("EnRailgibud_PostLimbDraw",), 0x80BA79D4:("EnRailgibud_Draw",), 0x80BA7B6C:("EnRailgibud_InitCutsceneGibdo",), - 0x80BA7C78:("EnRailgibud_InitActorActionCommand",), + 0x80BA7C78:("EnRailgibud_InitCueType",), 0x80BA7CF0:("EnRailgibud_SetupDoNothing",), 0x80BA7D04:("EnRailgibud_DoNothing",), 0x80BA7D14:("EnRailgibud_SetupSinkIntoGround",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6ed78a348..855900bb2 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -923,14 +923,14 @@ 0x801BB0DC:("D_801BB0DC","UNK_TYPE1","",0x1), 0x801BB0FC:("D_801BB0FC","UNK_TYPE2","",0x2), 0x801BB100:("D_801BB100","UNK_TYPE1","",0x1), - 0x801BB124:("D_801BB124","UNK_TYPE2","",0x2), - 0x801BB128:("D_801BB128","UNK_TYPE2","",0x2), - 0x801BB12C:("D_801BB12C","UNK_TYPE1","",0x1), + 0x801BB124:("sCurTextId","UNK_TYPE2","",0x2), + 0x801BB128:("sCurOcarinaAction","UNK_TYPE2","",0x2), + 0x801BB12C:("gOpeningEntranceIndex","UNK_TYPE1","",0x1), 0x801BB130:("sCutsceneStoredPlayerForm","UNK_TYPE1","",0x1), - 0x801BB134:("sCsStateHandlers1","cutscene_update_func","[5]",0x14), - 0x801BB148:("sCsStateHandlers2","cutscene_update_func","[5]",0x14), + 0x801BB134:("sManualCutsceneHandlers","cutscene_update_func","[5]",0x14), + 0x801BB148:("sScriptedCutsceneHandlers","cutscene_update_func","[5]",0x14), 0x801BB15C:("D_801BB15C","UNK_TYPE2","",0x2), - 0x801BB160:("D_801BB160","UNK_TYPE4","",0x4), + 0x801BB160:("sCutsceneTextboxType","UNK_TYPE4","",0x4), 0x801BB170:("sDrawItemTable","DrawItemTableEntry","[118]",0x1098), 0x801BC210:("gEffFootprintVtx","UNK_TYPE1","",0x1), 0x801BC240:("gEffFootprintMaterialDL","Gfx","[9]",0x48), @@ -940,16 +940,8 @@ 0x801BC400:("gEnHyParentBodyParts","UNK_TYPE1","",0x1), 0x801BC410:("gEnHyShadowSizes","s32",[],0x10), 0x801BC420:("sReactionTextIds","u16","[]",0x140A), - 0x801BD830:("actorCutscenesGlobalCutscenes","ActorCutscene","[8]",0x80), - 0x801BD8B0:("actorCutsceneCurrent","s16","",0x2), - 0x801BD8B2:("actorCutsceneCurrentLength","s16","",0x2), - 0x801BD8B4:("actorCutsceneEnding","s16","",0x2), - 0x801BD8B6:("actorCutsceneCurrentCamera","s16","",0x2), - 0x801BD8B8:("actorCutsceneCurrentCutsceneActor","Actor*","",0x4), - 0x801BD8BC:("actorCutsceneStartMethod","UNK_TYPE4","",0x4), - 0x801BD8C0:("actorCutscenesPlayState","PlayState*","",0x4), - 0x801BD8C4:("actorCutsceneReturnCamera","s16","",0x2), - 0x801BD8C6:("D_801BD8C6","s16","",0x2), + 0x801BD830:("sGlobalCutsceneList","ActorCutscene","[8]",0x80), + 0x801BD8B0:("sCutsceneMgr","ActorCutsceneManager","",0x18), 0x801BD8D0:("sFireObjCollisionInit","ColliderCylinderInit","",0x2c), 0x801BD8FC:("sFireObjColors","FireObjColors","[1]",0x08), 0x801BD904:("sFireObjLightParams","FireObjLightParams","[1]",0x08), @@ -2145,7 +2137,7 @@ 0x801D0D58:("sQuakeIndex","UNK_TYPE2","",0x2), 0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2), 0x801D0D60:("D_801D0D60","Input*","",0x4), - 0x801D0D64:("D_801D0D64","s16","[10]",0x14), + 0x801D0D64:("sPlayerCsIdToCsCamId","s16","[10]",0x14), 0x801D0D78:("D_801D0D78","u16","[4]",0x4), 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1), 0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1), @@ -3931,18 +3923,18 @@ 0x801F3F60:("gRegEditor","RegEditor*","",0x4), 0x801F3F70:("sDebugObjectListHead","UNK_TYPE1","",0x1), 0x801F3F80:("D_801F3F80","UNK_TYPE1","",0xDC0), - 0x801F4D40:("seqId","u16","",0x2), + 0x801F4D40:("sSeqId","u16","",0x2), 0x801F4D42:("sCutsceneQuakeIndex","UNK_TYPE2","",0x2), 0x801F4D48:("sCutsceneCameraInfo","UNK_TYPE","",0x80), - 0x801F4DC8:("D_801F4DC8","u16","[10]",0x14), + 0x801F4DC8:("sCueTypeList","u16","[10]",0x14), 0x801F4DDC:("D_801F4DDC","UNK_TYPE1","",0x1), - 0x801F4DE0:("D_801F4DE0","UNK_TYPE1","",0x1), - 0x801F4DE2:("D_801F4DE2","UNK_TYPE2","",0x2), - 0x801F4DF0:("actorCutscenes","ActorCutscene*","",0x4), - 0x801F4DF4:("actorCutsceneCount","s16","",0x2), - 0x801F4DF8:("actorCutsceneWaiting","u8","[16]",0x10), + 0x801F4DE0:("gDisablePlayerCsModeStartPos","UNK_TYPE1","",0x1), + 0x801F4DE2:("gDungeonBossWarpSceneId","UNK_TYPE2","",0x2), + 0x801F4DF0:("sSceneCutsceneList","ActorCutscene*","",0x4), + 0x801F4DF4:("sSceneCutsceneCount","s16","",0x2), + 0x801F4DF8:("sWaitingCutsceneList","u8","[16]",0x10), 0x801F4E08:("D_801F4E08","UNK_TYPE1","",0x1), - 0x801F4E10:("actorCutsceneNextCutscenes","u8","[16]",0x10), + 0x801F4E10:("sNextCutsceneList","u8","[16]",0x10), 0x801F4E20:("D_801F4E20","UNK_TYPE1","",0x1), 0x801F4E30:("D_801F4E30","UNK_TYPE1","",0x1), 0x801F4E31:("D_801F4E31","UNK_TYPE1","",0x1), @@ -4049,7 +4041,7 @@ 0x801F6B3C:("sPlayerCallDrawFunc","UNK_TYPE1","",0x1), 0x801F6B40:("sShrinkWindow","ShrinkWindow","",0x4), 0x801F6B44:("sShrinkWindowPtr","ShrinkWindow*","",0x4), - 0x801F6B50:("D_801F6B50","UNK_TYPE4","",0x4), + 0x801F6B50:("sCurCsCamera","UNK_TYPE4","",0x4), 0x801F6B58:("D_801F6B58","UNK_TYPE1","",0x1), 0x801F6BF0:("sKaleidoMgrFaultAddrConvClient","FaultAddrConvClient","",0xC), 0x801F6C00:("sKaleidoScopeUpdateFunc","void*","",0x4), @@ -6194,7 +6186,7 @@ 0x8089E314:("D_8089E314","UNK_TYPE1","",0x1), 0x8089E334:("D_8089E334","UNK_TYPE1","",0x1), 0x8089E33C:("D_8089E33C","UNK_TYPE4","",0x4), - 0x8089E34C:("D_8089E34C","UNK_TYPE2","",0x2), + 0x8089E34C:("sCsId","UNK_TYPE2","",0x2), 0x8089E350:("D_8089E350","UNK_TYPE4","",0x4), 0x8089E354:("D_8089E354","UNK_TYPE1","",0x1), 0x8089E364:("D_8089E364","UNK_TYPE4","",0x4), @@ -11094,7 +11086,7 @@ 0x80A2B90C:("sColHeaders","UNK_TYPE1","",0x1), 0x80A2B93C:("sTexAnims","UNK_TYPE1","",0x1), 0x80A2B96C:("D_80A2B96C","UNK_TYPE1","",0x1), - 0x80A2B974:("D_80A2B974","UNK_TYPE2","",0x2), + 0x80A2B974:("sCsIdList","UNK_TYPE2","",0x2), 0x80A2B978:("D_80A2B978","UNK_TYPE1","",0x1), 0x80A2B988:("D_80A2B988","UNK_TYPE1","",0x1), 0x80A2B9A0:("jtbl_80A2B9A0","UNK_PTR","",0x4), @@ -11483,8 +11475,8 @@ 0x80A43352:("sNightMessages2","s16","[3]",0x6), 0x80A4335A:("sDayMessages2","s16","[3]",0x6), 0x80A43364:("D_80A43364","u16","[2]",0x4), - 0x80A434D0:("sCutscenes","s16","[2]",0x4), - 0x80A434D4:("sCurrentCs","s16","",0x2), + 0x80A434D0:("sCsIdList","s16","[2]",0x4), + 0x80A434D4:("sCurCsId","s16","",0x2), 0x80A449E0:("En_Bat_InitVars","ActorInit","",0x1), 0x80A44A00:("sSphereInit","ColliderSphereInit","",0x1), 0x80A44A2C:("sDamageTable","DamageTable","4",0x1), @@ -12831,7 +12823,7 @@ 0x80AC0254:("D_80AC0254","UNK_TYPE2","",0x2), 0x80AC0258:("D_80AC0258","UNK_TYPE2","",0x2), 0x80AC025C:("D_80AC025C","UNK_TYPE4","",0x4), - 0x80AC0260:("D_80AC0260","UNK_TYPE2","",0x2), + 0x80AC0260:("sCueId","UNK_TYPE2","",0x2), 0x80AC0264:("D_80AC0264","UNK_TYPE4","",0x4), 0x80AC0270:("D_80AC0270","f32","",0x4), 0x80AC0274:("D_80AC0274","f32","",0x4), @@ -15211,14 +15203,14 @@ 0x80B8E19C:("D_80B8E19C","CollisionCheckInfoInit2","",0xC), 0x80B8E308:("D_80B8E308","void*","",0x4), 0x80B8E318:("D_80B8E318","UNK_TYPE1","",0x1), - 0x80B8E32C:("D_80B8E32C","UNK_TYPE2","",0x2), + 0x80B8E32C:("sCueId","UNK_TYPE2","",0x2), 0x80B8E330:("jtbl_80B8E330","UNK_PTR","",0x4), 0x80B8E34C:("jtbl_80B8E34C","UNK_PTR","",0x4), 0x80B913F0:("En_Ma_Yto_InitVars","UNK_TYPE1","",0x1), 0x80B91410:("D_80B91410","UNK_TYPE1","",0x1), 0x80B9143C:("D_80B9143C","UNK_TYPE1","",0x1), 0x80B91448:("D_80B91448","UNK_TYPE1","",0x1), - 0x80B915F0:("D_80B915F0","UNK_TYPE2","",0x2), + 0x80B915F0:("sCueId","UNK_TYPE2","",0x2), 0x80B91600:("jtbl_80B91600","UNK_PTR","",0x4), 0x80B91614:("jtbl_80B91614","UNK_PTR","",0x4), 0x80B91628:("jtbl_80B91628","UNK_PTR","",0x4), @@ -16606,7 +16598,7 @@ 0x80C1E984:("D_80C1E984","UNK_TYPE1","",0x1), 0x80C1F150:("Dm_Bal_InitVars","UNK_TYPE1","",0x1), 0x80C1F170:("sAnimationInfo","UNK_PTR","",0x4), - 0x80C1F2C0:("D_80C1F2C0","UNK_TYPE2","",0x2), + 0x80C1F2C0:("sCueId","UNK_TYPE2","",0x2), 0x80C1F2C4:("D_80C1F2C4","UNK_TYPE4","",0x4), 0x80C1F2D0:("D_80C1F2D0","UNK_TYPE1","",0x1), 0x80C1F2E0:("D_80C1F2E0","f32","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index b037f9415..d5493bbfc 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -590,18 +590,43 @@ wordReplace = { "func_800FE498": "Environment_StartTime", "func_800FE4A8": "Environment_IsTimeStopped", "func_800F5A8C": "Environment_LerpWeight", + "func_801A3F54": "Audio_SetCutsceneFlag", - "func_800EA0D4": "Cutscene_Start", - "func_800EA0EC": "Cutscene_End", + "func_800EA0D4": "Cutscene_StartManual", + "Cutscene_Start": "Cutscene_StartManual", + "func_800EA0EC": "Cutscene_StopManual", + "Cutscene_End": "Cutscene_StopManual", "func_800EDE34": "Cutscene_ActorTranslate", "func_800EDF24": "Cutscene_ActorTranslateAndYaw", "func_800EDF78": "Cutscene_ActorTranslateAndYawSmooth", "func_800EE0CC": "Cutscene_ActorTranslateXZAndYawSmooth", "func_800EE1D8": "Cutscene_GetSceneLayer", - "func_800EE200": "Cutscene_GetActorActionIndex", - "func_800EE29C": "Cutscene_CheckActorAction", + "func_800EE200": "Cutscene_GetCueChannel", + "Cutscene_GetActorActionIndex": "Cutscene_GetCueChannel", + "func_800EE29C": "Cutscene_IsCueInChannel", + "Cutscene_CheckActorAction": "Cutscene_IsCueInChannel", "func_800EE2F4": "Cutscene_IsPlaying", "Cutscene_GetSceneSetupIndex": "Cutscene_GetSceneLayer", + + "func_800F15D8": "CutsceneManager_StoreCamera", + "ActorCutscene_SetIntentToPlay": "CutsceneManager_Queue", + "ActorCutscene_GetCanPlayNext": "CutsceneManager_IsNext", + "ActorCutscene_StartAndSetUnkLinkFields": "CutsceneManager_StartWithPlayerCs", + "ActorCutscene_StartAndSetFlag": "CutsceneManager_StartWithPlayerCsAndSetFlag", + "ActorCutscene_Start": "CutsceneManager_Start", + "ActorCutscene_Stop": "CutsceneManager_Stop", + "ActorCutscene_GetCurrentIndex": "CutsceneManager_GetCurrentCsId", + "ActorCutscene_GetCutscene": "CutsceneManager_GetCutsceneEntry", + "ActorCutscene_GetAdditionalCutscene": "CutsceneManager_GetAdditionalCsId", + "ActorCutscene_GetLength": "CutsceneManager_GetLength", + "ActorCutscene_GetCurrentSubCamId": "CutsceneManager_GetCurrentSubCamId", + "ActorCutscene_GetCurrentCamera": "CutsceneManager_GetCurrentSubCamId", + + "EnvFlags_UnsetAll": "CutsceneFlags_UnsetAll", + "EnvFlags_Set": "CutsceneFlags_Set", + "EnvFlags_Unset": "CutsceneFlags_Unset", + "EnvFlags_Get": "CutsceneFlags_Get", + "func_801343C0": "SkelAnime_DrawTransformFlexOpa", "func_80114E90": "Inventory_HasEmptyBottle", "func_80114F2C": "Inventory_HasItemInBottle", @@ -622,7 +647,8 @@ wordReplace = { "func_8013E640": "SubS_FindActorCustom", "func_ActorCategoryIterateById": "SubS_FindActor", "func_8013BB7C": "SubS_FindNearestActor", - "func_8013E2D4": "SubS_StartActorCutscene", + "func_8013E2D4": "SubS_StartCutscene", + "SubS_StartActorCutscene": "SubS_StartCutscene", "func_8013E3B8": "SubS_FillCutscenesList", "func_8013AED4": "SubS_UpdateFlags", "func_8013D8DC": "SubS_IsObjectLoaded", @@ -693,8 +719,6 @@ wordReplace = { "func_8010A54C": "Minimap_Draw", "func_8010A580": "Map_Update", - "ActorCutscene_GetCurrentCamera": "ActorCutscene_GetCurrentSubCamId", - "Entrance_CreateIndex": "Entrance_Create", "Entrance_CreateIndexFromSpawn": "Entrance_CreateFromSpawn", @@ -731,6 +755,7 @@ wordReplace = { "actor.minVelocityY": "actor.terminalVelocity", "actor.yDistToWater": "actor.depthInWater", "actor.yDistToPlayer": "actor.playerHeightRel", + "actor.cutscene": "actor.csId", "actor.speedXZ": "actor.speed", "thisx->speedXZ": "thisx->speed", @@ -765,7 +790,9 @@ wordReplace = { "gSaveContext.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags", "gSaveContext.bomberCode": "gSaveContext.save.saveInfo.bomberCode", "gSaveContext.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount", - "gSaveContext.cutscene": "gSaveContext.save.cutscene", + "gSaveContext.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", + "gSaveContext.save.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", + "gSaveContext.save.saveInfo.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", "gSaveContext.health": "gSaveContext.save.saveInfo.playerData.health", "gSaveContext.equips": "gSaveContext.save.saveInfo.equips", "gSaveContext.unk_1016": "gSaveContext.jinxTimer", @@ -852,10 +879,20 @@ wordReplace = { "ageProperties->unk_04": "ageProperties->shadowScale", "ageProperties->unk_92": "ageProperties->voiceSfxOffset", "ageProperties->unk_94": "ageProperties->surfaceSfxOffset", + "player->unk_A86": "player->csId", + + "csCtx.npcActions": "csCtx.actorCues", + "csCtx->npcActions": "csCtx->actorCues", + "csCtx.actorActions": "csCtx.actorCues", + "csCtx->actorActions": "csCtx->actorCues", + "csCtx.playerAction": "csCtx.playerCue", + "csCtx->playerAction": "csCtx->playerCue", + "csCtx.unk_12": "csCtx.scriptIndex", + "csCtx.currentCsIndex": "csCtx.scriptIndex", + "csCtx->currentCsIndex": "csCtx->scriptIndex", + "csCtx.frames": "csCtx.curFrame", + "csCtx->frames": "csCtx->curFrame", - "csCtx.npcActions": "csCtx.actorActions", - "csCtx->npcActions": "csCtx->actorActions", - "csCtx.unk_12": "csCtx.currentCsIndex", "globalCtx->mf_187FC": "play->billboardMtxF", "globalCtx->projectionMatrix": "play->viewProjectionMtxF", "globalCtx->actorCtx.actorList[": "play->actorCtx.actorLists[", @@ -887,6 +924,8 @@ wordReplace = { "play->nextEntranceIndex": "play->nextEntrance", "play->sceneNum": "play->sceneId", "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen", + "play->playerActorCsIds": "play->playerCsIds", + "play->envFlags": "play->cutsceneFlags", "play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1", "play->roomCtx.curRoom.unk2": "play->roomCtx.curRoom.behaviorType2", "play->roomCtx.unk31": "play->roomCtx.status", @@ -951,6 +990,11 @@ wordReplace = { "PLAYER_AP_FISHING_POLE": "PLAYER_IA_FISHING_ROD", "PLAYER_IA_BOTTLE": "PLAYER_IA_BOTTLE_EMPTY", + "WEEKEVENTREG_20_02": "WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE", + "WEEKEVENTREG_33_80": "WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE", + "WEEKEVENTREG_52_20": "WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE", + "WEEKEVENTREG_55_80": "WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE", + # Enums "TRANS_TYPE_00": "TRANS_TYPE_WIPE", "TRANS_TYPE_01": "TRANS_TYPE_TRIFORCE", @@ -975,6 +1019,10 @@ wordReplace = { "TRANS_TYPE_20": "TRANS_TYPE_FADE_DYNAMIC", "TRANS_TYPE_21": "TRANS_TYPE_CIRCLE", "TRANS_TYPE_22": "TRANS_TYPE_WIPE5", + "PLAYER_CSMODE_6": "PLAYER_CSMODE_END", + "PLAYER_CSMODE_7": "PLAYER_CSMODE_WAIT", + "SUBS_CUTSCENE_SET_UNK_LINK_FIELDS": "SUBS_CUTSCENE_WITH_PLAYER", + "SUBS_CUTSCENE_SET_FLAG": "SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG", "COLPOLY_SURFACE_GROUND": "SURFACE_MATERIAL_DIRT", "COLPOLY_SURFACE_SAND": "SURFACE_MATERIAL_SAND", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 92cd63a29..a643f147f 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1047,54 +1047,54 @@ asm/non_matchings/code/z_debug_mode/Debug_DrawScreenText.s,Debug_DrawScreenText, asm/non_matchings/code/z_debug_mode/DebugCamera_ScreenText.s,DebugCamera_ScreenText,0x800E9DBC,0x36 asm/non_matchings/code/z_debug_mode/DebugCamera_DrawScreenText.s,DebugCamera_DrawScreenText,0x800E9E94,0x39 asm/non_matchings/code/z_debug_mode/Debug_DrawText.s,Debug_DrawText,0x800E9F78,0x3A -asm/non_matchings/code/z_demo/Cutscene_Init.s,Cutscene_Init,0x800EA060,0x1D -asm/non_matchings/code/z_demo/Cutscene_Start.s,Cutscene_Start,0x800EA0D4,0x6 -asm/non_matchings/code/z_demo/Cutscene_End.s,Cutscene_End,0x800EA0EC,0x9 -asm/non_matchings/code/z_demo/Cutscene_Update1.s,Cutscene_Update1,0x800EA110,0x13 -asm/non_matchings/code/z_demo/Cutscene_Update2.s,Cutscene_Update2,0x800EA15C,0x2D -asm/non_matchings/code/z_demo/Cutscene_DoNothing.s,Cutscene_DoNothing,0x800EA210,0x4 -asm/non_matchings/code/z_demo/func_800EA220.s,func_800EA220,0x800EA220,0xE -asm/non_matchings/code/z_demo/func_800EA258.s,func_800EA258,0x800EA258,0x18 -asm/non_matchings/code/z_demo/func_800EA2B8.s,func_800EA2B8,0x800EA2B8,0x1B -asm/non_matchings/code/z_demo/Cutscene_Command_Misc.s,Cutscene_Command_Misc,0x800EA324,0x222 -asm/non_matchings/code/z_demo/Cutscene_Command_SetLighting.s,Cutscene_Command_SetLighting,0x800EABAC,0x17 -asm/non_matchings/code/z_demo/Cutscene_Command_PlaySequence.s,Cutscene_Command_PlaySequence,0x800EAC08,0xF -asm/non_matchings/code/z_demo/Cutscene_Command_StopSequence.s,Cutscene_Command_StopSequence,0x800EAC44,0x14 -asm/non_matchings/code/z_demo/Cutscene_Command_FadeSequence.s,Cutscene_Command_FadeSequence,0x800EAC94,0x20 -asm/non_matchings/code/z_demo/Cutscene_Command_PlayAmbienceSequence.s,Cutscene_Command_PlayAmbienceSequence,0x800EAD14,0xD -asm/non_matchings/code/z_demo/func_800EAD48.s,func_800EAD48,0x800EAD48,0xD -asm/non_matchings/code/z_demo/func_800EAD7C.s,func_800EAD7C,0x800EAD7C,0xD -asm/non_matchings/code/z_demo/func_800EADB0.s,func_800EADB0,0x800EADB0,0x47 -asm/non_matchings/code/z_demo/Cutscene_Command_FadeAmbienceSequence.s,Cutscene_Command_FadeAmbienceSequence,0x800EAECC,0x15 -asm/non_matchings/code/z_demo/Cutscene_Command_Rumble.s,Cutscene_Command_Rumble,0x800EAF20,0x30 -asm/non_matchings/code/z_demo/Cutscene_Command_FadeColorScreen.s,Cutscene_Command_FadeColorScreen,0x800EAFE0,0x7F -asm/non_matchings/code/z_demo/Cutscene_Command_SetTime.s,Cutscene_Command_SetTime,0x800EB1DC,0x62 -asm/non_matchings/code/z_demo/Cutscene_TerminatorImpl.s,Cutscene_TerminatorImpl,0x800EB364,0x54 -asm/non_matchings/code/z_demo/Cutscene_Command_Terminator.s,Cutscene_Command_Terminator,0x800EB4B4,0x91 -asm/non_matchings/code/z_demo/Cutscene_Command_ChooseCreditsScenes.s,Cutscene_Command_ChooseCreditsScenes,0x800EB6F8,0x11C -asm/non_matchings/code/z_demo/Cutscene_Command_MotionBlur.s,Cutscene_Command_MotionBlur,0x800EBB68,0x5A -asm/non_matchings/code/z_demo/Cutscene_Command_GiveTatlToPlayer.s,Cutscene_Command_GiveTatlToPlayer,0x800EBCD0,0x24 -asm/non_matchings/code/z_demo/Cutscene_Command_TransitionFX.s,Cutscene_Command_TransitionFX,0x800EBD60,0x246 -asm/non_matchings/code/z_demo/Cutscene_Command_Camera.s,Cutscene_Command_Camera,0x800EC678,0x17 +asm/non_matchings/code/z_demo/Cutscene_InitContext.s,Cutscene_InitContext,0x800EA060,0x1D +asm/non_matchings/code/z_demo/Cutscene_StartManual.s,Cutscene_StartManual,0x800EA0D4,0x6 +asm/non_matchings/code/z_demo/Cutscene_StopManual.s,Cutscene_StopManual,0x800EA0EC,0x9 +asm/non_matchings/code/z_demo/Cutscene_UpdateManual.s,Cutscene_UpdateManual,0x800EA110,0x13 +asm/non_matchings/code/z_demo/Cutscene_UpdateScripted.s,Cutscene_UpdateScripted,0x800EA15C,0x2D +asm/non_matchings/code/z_demo/CutsceneHandler_DoNothing.s,CutsceneHandler_DoNothing,0x800EA210,0x4 +asm/non_matchings/code/z_demo/Cutscene_StepTimer.s,Cutscene_StepTimer,0x800EA220,0xE +asm/non_matchings/code/z_demo/CutsceneHandler_StartManual.s,CutsceneHandler_StartManual,0x800EA258,0x18 +asm/non_matchings/code/z_demo/CutsceneHandler_StartScript.s,CutsceneHandler_StartScript,0x800EA2B8,0x1B +asm/non_matchings/code/z_demo/CutsceneCmd_Misc.s,CutsceneCmd_Misc,0x800EA324,0x222 +asm/non_matchings/code/z_demo/CutsceneCmd_SetLightSetting.s,CutsceneCmd_SetLightSetting,0x800EABAC,0x17 +asm/non_matchings/code/z_demo/CutsceneCmd_StartSequence.s,CutsceneCmd_StartSequence,0x800EAC08,0xF +asm/non_matchings/code/z_demo/CutsceneCmd_StopSequence.s,CutsceneCmd_StopSequence,0x800EAC44,0x14 +asm/non_matchings/code/z_demo/CutsceneCmd_FadeOutSequence.s,CutsceneCmd_FadeOutSequence,0x800EAC94,0x20 +asm/non_matchings/code/z_demo/CutsceneCmd_StartAmbience.s,CutsceneCmd_StartAmbience,0x800EAD14,0xD +asm/non_matchings/code/z_demo/Cutscene_SetSfxReverbIndexTo2.s,Cutscene_SetSfxReverbIndexTo2,0x800EAD48,0xD +asm/non_matchings/code/z_demo/Cutscene_SetSfxReverbIndexTo1.s,Cutscene_SetSfxReverbIndexTo1,0x800EAD7C,0xD +asm/non_matchings/code/z_demo/CutsceneCmd_ModifySequence.s,CutsceneCmd_ModifySequence,0x800EADB0,0x47 +asm/non_matchings/code/z_demo/CutsceneCmd_FadeOutAmbience.s,CutsceneCmd_FadeOutAmbience,0x800EAECC,0x15 +asm/non_matchings/code/z_demo/CutsceneCmd_RumbleController.s,CutsceneCmd_RumbleController,0x800EAF20,0x30 +asm/non_matchings/code/z_demo/CutsceneCmd_TransitionGeneral.s,CutsceneCmd_TransitionGeneral,0x800EAFE0,0x7F +asm/non_matchings/code/z_demo/CutsceneCmd_SetTime.s,CutsceneCmd_SetTime,0x800EB1DC,0x62 +asm/non_matchings/code/z_demo/CutsceneCmd_DestinationDefault.s,CutsceneCmd_DestinationDefault,0x800EB364,0x54 +asm/non_matchings/code/z_demo/CutsceneCmd_Destination.s,CutsceneCmd_Destination,0x800EB4B4,0x91 +asm/non_matchings/code/z_demo/CutsceneCmd_ChooseCreditsScenes.s,CutsceneCmd_ChooseCreditsScenes,0x800EB6F8,0x11C +asm/non_matchings/code/z_demo/CutsceneCmd_MotionBlur.s,CutsceneCmd_MotionBlur,0x800EBB68,0x5A +asm/non_matchings/code/z_demo/CutsceneCmd_GiveTatlToPlayer.s,CutsceneCmd_GiveTatlToPlayer,0x800EBCD0,0x24 +asm/non_matchings/code/z_demo/CutsceneCmd_Transition.s,CutsceneCmd_Transition,0x800EBD60,0x246 +asm/non_matchings/code/z_demo/CutsceneCmd_UpdateCamSpline.s,CutsceneCmd_UpdateCamSpline,0x800EC678,0x17 asm/non_matchings/code/z_demo/Cutscene_CountNormalMasks.s,Cutscene_CountNormalMasks,0x800EC6D4,0x94 -asm/non_matchings/code/z_demo/Cutscene_Command_Textbox.s,Cutscene_Command_Textbox,0x800EC924,0x116 -asm/non_matchings/code/z_demo/func_800ECD7C.s,func_800ECD7C,0x800ECD7C,0x31 -asm/non_matchings/code/z_demo/Cutscene_ProcessCommands.s,Cutscene_ProcessCommands,0x800ECE40,0x2D0 -asm/non_matchings/code/z_demo/func_800ED980.s,func_800ED980,0x800ED980,0x11 -asm/non_matchings/code/z_demo/func_800ED9C4.s,func_800ED9C4,0x800ED9C4,0x10 -asm/non_matchings/code/z_demo/func_800EDA04.s,func_800EDA04,0x800EDA04,0x20 -asm/non_matchings/code/z_demo/func_800EDA84.s,func_800EDA84,0x800EDA84,0x57 -asm/non_matchings/code/z_demo/func_800EDBE0.s,func_800EDBE0,0x800EDBE0,0x74 +asm/non_matchings/code/z_demo/CutsceneCmd_Text.s,CutsceneCmd_Text,0x800EC924,0x116 +asm/non_matchings/code/z_demo/Cutscene_SetActorCue.s,Cutscene_SetActorCue,0x800ECD7C,0x31 +asm/non_matchings/code/z_demo/Cutscene_ProcessScript.s,Cutscene_ProcessScript,0x800ECE40,0x2D0 +asm/non_matchings/code/z_demo/CutsceneHandler_RunScript.s,CutsceneHandler_RunScript,0x800ED980,0x11 +asm/non_matchings/code/z_demo/CutsceneHandler_StopManual.s,CutsceneHandler_StopManual,0x800ED9C4,0x10 +asm/non_matchings/code/z_demo/CutsceneHandler_StopScript.s,CutsceneHandler_StopScript,0x800EDA04,0x20 +asm/non_matchings/code/z_demo/Cutscene_SetupScripted.s,Cutscene_SetupScripted,0x800EDA84,0x57 +asm/non_matchings/code/z_demo/Cutscene_HandleEntranceTriggers.s,Cutscene_HandleEntranceTriggers,0x800EDBE0,0x74 asm/non_matchings/code/z_demo/func_800EDDB0.s,func_800EDDB0,0x800EDDB0,0x3 asm/non_matchings/code/z_demo/func_800EDDBC.s,func_800EDDBC,0x800EDDBC,0x4 -asm/non_matchings/code/z_demo/Cutscene_LoadCutsceneData.s,Cutscene_LoadCutsceneData,0x800EDDCC,0x1A +asm/non_matchings/code/z_demo/Cutscene_StartScripted.s,Cutscene_StartScripted,0x800EDDCC,0x1A asm/non_matchings/code/z_demo/Cutscene_ActorTranslate.s,Cutscene_ActorTranslate,0x800EDE34,0x3C asm/non_matchings/code/z_demo/Cutscene_ActorTranslateAndYaw.s,Cutscene_ActorTranslateAndYaw,0x800EDF24,0x15 asm/non_matchings/code/z_demo/Cutscene_ActorTranslateAndYawSmooth.s,Cutscene_ActorTranslateAndYawSmooth,0x800EDF78,0x55 asm/non_matchings/code/z_demo/Cutscene_ActorTranslateXZAndYawSmooth.s,Cutscene_ActorTranslateXZAndYawSmooth,0x800EE0CC,0x43 asm/non_matchings/code/z_demo/Cutscene_GetSceneLayer.s,Cutscene_GetSceneLayer,0x800EE1D8,0xA -asm/non_matchings/code/z_demo/Cutscene_GetActorActionIndex.s,Cutscene_GetActorActionIndex,0x800EE200,0x27 -asm/non_matchings/code/z_demo/Cutscene_CheckActorAction.s,Cutscene_CheckActorAction,0x800EE29C,0x16 +asm/non_matchings/code/z_demo/Cutscene_GetCueChannel.s,Cutscene_GetCueChannel,0x800EE200,0x27 +asm/non_matchings/code/z_demo/Cutscene_IsCueInChannel.s,Cutscene_IsCueInChannel,0x800EE29C,0x16 asm/non_matchings/code/z_demo/Cutscene_IsPlaying.s,Cutscene_IsPlaying,0x800EE2F4,0xB asm/non_matchings/code/z_draw/GetItem_Draw.s,GetItem_Draw,0x800EE320,0x11 asm/non_matchings/code/z_draw/GetItem_DrawBombchu.s,GetItem_DrawBombchu,0x800EE364,0x27 @@ -1150,31 +1150,31 @@ asm/non_matchings/code/code_800F12D0/func_800F12D0.s,func_800F12D0,0x800F12D0,0x asm/non_matchings/code/code_800F12D0/func_800F1304.s,func_800F1304,0x800F1304,0x1C asm/non_matchings/code/code_800F12D0/func_800F1374.s,func_800F1374,0x800F1374,0x1D asm/non_matchings/code/code_800F12D0/func_800F13E8.s,func_800F13E8,0x800F13E8,0x1E -asm/non_matchings/code/z_eventmgr/func_800F1460.s,func_800F1460,0x800F1460,0x26 -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutsceneImpl.s,ActorCutscene_GetCutsceneImpl,0x800F14F8,0x13 -asm/non_matchings/code/z_eventmgr/ActorCutscene_Init.s,ActorCutscene_Init,0x800F1544,0x25 -asm/non_matchings/code/z_eventmgr/func_800F15D8.s,func_800F15D8,0x800F15D8,0x1C -asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearWaiting.s,ActorCutscene_ClearWaiting,0x800F1648,0xC -asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearNextCutscenes.s,ActorCutscene_ClearNextCutscenes,0x800F1678,0xC -asm/non_matchings/code/z_eventmgr/ActorCutscene_MarkNextCutscenes.s,ActorCutscene_MarkNextCutscenes,0x800F16A8,0x55 -asm/non_matchings/code/z_eventmgr/ActorCutscene_End.s,ActorCutscene_End,0x800F17FC,0xA0 -asm/non_matchings/code/z_eventmgr/ActorCutscene_Update.s,ActorCutscene_Update,0x800F1A7C,0x4A -asm/non_matchings/code/z_eventmgr/ActorCutscene_SetIntentToPlay.s,ActorCutscene_SetIntentToPlay,0x800F1BA4,0x10 -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCanPlayNext.s,ActorCutscene_GetCanPlayNext,0x800F1BE4,0x21 -asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetUnkLinkFields.s,ActorCutscene_StartAndSetUnkLinkFields,0x800F1C68,0x1E -asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetFlag.s,ActorCutscene_StartAndSetFlag,0x800F1CE0,0x29 -asm/non_matchings/code/z_eventmgr/ActorCutscene_Start.s,ActorCutscene_Start,0x800F1D84,0x8E -asm/non_matchings/code/z_eventmgr/ActorCutscene_Stop.s,ActorCutscene_Stop,0x800F1FBC,0x30 -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentIndex.s,ActorCutscene_GetCurrentIndex,0x800F207C,0x4 -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutscene.s,ActorCutscene_GetCutscene,0x800F208C,0xB -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetAdditionalCutscene.s,ActorCutscene_GetAdditionalCutscene,0x800F20B8,0x10 -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetLength.s,ActorCutscene_GetLength,0x800F20F8,0x10 -asm/non_matchings/code/z_eventmgr/func_800F2138.s,func_800F2138,0x800F2138,0x10 -asm/non_matchings/code/z_eventmgr/func_800F2178.s,func_800F2178,0x800F2178,0x10 -asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentSubCamId.s,ActorCutscene_GetCurrentSubCamId,0x800F21B8,0x5 -asm/non_matchings/code/z_eventmgr/func_800F21CC.s,func_800F21CC,0x800F21CC,0x3E +asm/non_matchings/code/z_eventmgr/CutsceneManager_SetHudVisibility.s,CutsceneManager_SetHudVisibility,0x800F1460,0x26 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneEntryImpl.s,CutsceneManager_GetCutsceneEntryImpl,0x800F14F8,0x13 +asm/non_matchings/code/z_eventmgr/CutsceneManager_Init.s,CutsceneManager_Init,0x800F1544,0x25 +asm/non_matchings/code/z_eventmgr/CutsceneManager_StoreCamera.s,CutsceneManager_StoreCamera,0x800F15D8,0x1C +asm/non_matchings/code/z_eventmgr/CutsceneManager_ClearWaiting.s,CutsceneManager_ClearWaiting,0x800F1648,0xC +asm/non_matchings/code/z_eventmgr/CutsceneManager_ClearNextCutscenes.s,CutsceneManager_ClearNextCutscenes,0x800F1678,0xC +asm/non_matchings/code/z_eventmgr/CutsceneManager_MarkNextCutscenes.s,CutsceneManager_MarkNextCutscenes,0x800F16A8,0x55 +asm/non_matchings/code/z_eventmgr/CutsceneManager_End.s,CutsceneManager_End,0x800F17FC,0xA0 +asm/non_matchings/code/z_eventmgr/CutsceneManager_Update.s,CutsceneManager_Update,0x800F1A7C,0x4A +asm/non_matchings/code/z_eventmgr/CutsceneManager_Queue.s,CutsceneManager_Queue,0x800F1BA4,0x10 +asm/non_matchings/code/z_eventmgr/CutsceneManager_IsNext.s,CutsceneManager_IsNext,0x800F1BE4,0x21 +asm/non_matchings/code/z_eventmgr/CutsceneManager_StartWithPlayerCs.s,CutsceneManager_StartWithPlayerCs,0x800F1C68,0x1E +asm/non_matchings/code/z_eventmgr/CutsceneManager_StartWithPlayerCsAndSetFlag.s,CutsceneManager_StartWithPlayerCsAndSetFlag,0x800F1CE0,0x29 +asm/non_matchings/code/z_eventmgr/CutsceneManager_Start.s,CutsceneManager_Start,0x800F1D84,0x8E +asm/non_matchings/code/z_eventmgr/CutsceneManager_Stop.s,CutsceneManager_Stop,0x800F1FBC,0x30 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCurrentCsId.s,CutsceneManager_GetCurrentCsId,0x800F207C,0x4 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneEntry.s,CutsceneManager_GetCutsceneEntry,0x800F208C,0xB +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetAdditionalCsId.s,CutsceneManager_GetAdditionalCsId,0x800F20B8,0x10 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetLength.s,CutsceneManager_GetLength,0x800F20F8,0x10 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneScriptIndex.s,CutsceneManager_GetCutsceneScriptIndex,0x800F2138,0x10 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneCustomValue.s,CutsceneManager_GetCutsceneCustomValue,0x800F2178,0x10 +asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCurrentSubCamId.s,CutsceneManager_GetCurrentSubCamId,0x800F21B8,0x5 +asm/non_matchings/code/z_eventmgr/CutsceneManager_FindEntranceCsId.s,CutsceneManager_FindEntranceCsId,0x800F21CC,0x3E asm/non_matchings/code/z_eventmgr/func_800F22C4.s,func_800F22C4,0x800F22C4,0x40 -asm/non_matchings/code/z_eventmgr/ActorCutscene_SetReturnCamera.s,ActorCutscene_SetReturnCamera,0x800F23C4,0x7 +asm/non_matchings/code/z_eventmgr/CutsceneManager_SetReturnCamera.s,CutsceneManager_SetReturnCamera,0x800F23C4,0x7 asm/non_matchings/code/z_fcurve_data/func_800F23E0.s,func_800F23E0,0x800F23E0,0x26 asm/non_matchings/code/z_fcurve_data/func_800F2478.s,func_800F2478,0x800F2478,0x6A asm/non_matchings/code/z_fcurve_data_skelanime/func_800F2620.s,func_800F2620,0x800F2620,0xC @@ -1961,8 +1961,8 @@ asm/non_matchings/code/z_scene/Scene_Command09.s,Scene_Command09,0x801303D0,0x4 asm/non_matchings/code/z_scene/Scene_CommandSoundSettings.s,Scene_CommandSoundSettings,0x801303E0,0x17 asm/non_matchings/code/z_scene/Scene_CommandEchoSetting.s,Scene_CommandEchoSetting,0x8013043C,0x6 asm/non_matchings/code/z_scene/Scene_CommandAltHeaderList.s,Scene_CommandAltHeaderList,0x80130454,0x1E -asm/non_matchings/code/z_scene/Scene_CommandCutsceneList.s,Scene_CommandCutsceneList,0x801304CC,0xD -asm/non_matchings/code/z_scene/Scene_CommandActorCutsceneList.s,Scene_CommandActorCutsceneList,0x80130500,0x10 +asm/non_matchings/code/z_scene/Scene_CommandCutsceneScriptList.s,Scene_CommandCutsceneScriptList,0x801304CC,0xD +asm/non_matchings/code/z_scene/Scene_CommandCutsceneList.s,Scene_CommandCutsceneList,0x80130500,0x10 asm/non_matchings/code/z_scene/Scene_CommandMiniMap.s,Scene_CommandMiniMap,0x80130540,0xE asm/non_matchings/code/z_scene/Scene_Command1D.s,Scene_Command1D,0x80130578,0x4 asm/non_matchings/code/z_scene/Scene_CommandMiniMapCompassInfo.s,Scene_CommandMiniMapCompassInfo,0x80130588,0xA @@ -2215,7 +2215,7 @@ asm/non_matchings/code/z_sub_s/SubS_ActorPathing_MoveWithGravity.s,SubS_ActorPat asm/non_matchings/code/z_sub_s/SubS_ActorPathing_MoveWithoutGravityReverse.s,SubS_ActorPathing_MoveWithoutGravityReverse,0x8013E07C,0xA asm/non_matchings/code/z_sub_s/SubS_ActorPathing_SetNextPoint.s,SubS_ActorPathing_SetNextPoint,0x8013E0A4,0x49 asm/non_matchings/code/z_sub_s/SubS_ChangeAnimationBySpeedInfo.s,SubS_ChangeAnimationBySpeedInfo,0x8013E1C8,0x43 -asm/non_matchings/code/z_sub_s/SubS_StartActorCutscene.s,SubS_StartActorCutscene,0x8013E2D4,0x39 +asm/non_matchings/code/z_sub_s/SubS_StartCutscene.s,SubS_StartCutscene,0x8013E2D4,0x39 asm/non_matchings/code/z_sub_s/SubS_FillCutscenesList.s,SubS_FillCutscenesList,0x8013E3B8,0x3E asm/non_matchings/code/z_sub_s/SubS_ConstructPlane.s,SubS_ConstructPlane,0x8013E4B0,0x47 asm/non_matchings/code/z_sub_s/SubS_LineSegVsPlane.s,SubS_LineSegVsPlane,0x8013E5CC,0x1D @@ -2311,7 +2311,7 @@ asm/non_matchings/code/z_sram_NES/Sram_ResetSave.s,Sram_ResetSave,0x80144628,0x1 asm/non_matchings/code/z_sram_NES/Sram_GenerateRandomSaveFields.s,Sram_GenerateRandomSaveFields,0x80144684,0x83 asm/non_matchings/code/z_sram_NES/func_80144890.s,func_80144890,0x80144890,0x36 asm/non_matchings/code/z_sram_NES/Sram_InitDebugSave.s,Sram_InitDebugSave,0x80144968,0x4B -asm/non_matchings/code/z_sram_NES/func_80144A94.s,func_80144A94,0x80144A94,0xF9 +asm/non_matchings/code/z_sram_NES/Sram_ResetSaveFromMoonCrash.s,Sram_ResetSaveFromMoonCrash,0x80144A94,0xF9 asm/non_matchings/code/z_sram_NES/Sram_OpenSave.s,Sram_OpenSave,0x80144E78,0x17D asm/non_matchings/code/z_sram_NES/func_8014546C.s,func_8014546C,0x8014546C,0x8B asm/non_matchings/code/z_sram_NES/func_80145698.s,func_80145698,0x80145698,0x4D @@ -2418,27 +2418,27 @@ asm/non_matchings/code/z_shrink_window/ShrinkWindow_Init.s,ShrinkWindow_Init,0x8 asm/non_matchings/code/z_shrink_window/ShrinkWindow_Destroy.s,ShrinkWindow_Destroy,0x80160CD4,0x4 asm/non_matchings/code/z_shrink_window/ShrinkWindow_Update.s,ShrinkWindow_Update,0x80160CE4,0x2D asm/non_matchings/code/z_shrink_window/ShrinkWindow_Draw.s,ShrinkWindow_Draw,0x80160D98,0xFA -asm/non_matchings/code/db_camera/func_80161180.s,func_80161180,0x80161180,0x7 -asm/non_matchings/code/db_camera/func_8016119C.s,func_8016119C,0x8016119C,0x24 -asm/non_matchings/code/db_camera/func_8016122C.s,func_8016122C,0x8016122C,0x23 -asm/non_matchings/code/db_camera/func_801612B8.s,func_801612B8,0x801612B8,0x1B8 -asm/non_matchings/code/db_camera/func_80161998.s,func_80161998,0x80161998,0x85 -asm/non_matchings/code/db_camera/func_80161BAC.s,func_80161BAC,0x80161BAC,0xD -asm/non_matchings/code/db_camera/func_80161BE0.s,func_80161BE0,0x80161BE0,0xB -asm/non_matchings/code/db_camera/func_80161C0C.s,func_80161C0C,0x80161C0C,0x5 -asm/non_matchings/code/db_camera/func_80161C20.s,func_80161C20,0x80161C20,0x8B -asm/non_matchings/code/db_camera/func_80161E4C.s,func_80161E4C,0x80161E4C,0xA0 -asm/non_matchings/code/db_camera/func_801620CC.s,func_801620CC,0x801620CC,0xAC -asm/non_matchings/code/db_camera/func_8016237C.s,func_8016237C,0x8016237C,0x1A -asm/non_matchings/code/db_camera/func_801623E4.s,func_801623E4,0x801623E4,0x42 -asm/non_matchings/code/db_camera/func_801624EC.s,func_801624EC,0x801624EC,0x14 -asm/non_matchings/code/db_camera/func_8016253C.s,func_8016253C,0x8016253C,0x120 -asm/non_matchings/code/db_camera/func_801629BC.s,func_801629BC,0x801629BC,0x25 -asm/non_matchings/code/db_camera/func_80162A50.s,func_80162A50,0x80162A50,0x16A -asm/non_matchings/code/db_camera/func_80162FF8.s,func_80162FF8,0x80162FF8,0x79 -asm/non_matchings/code/db_camera/func_801631DC.s,func_801631DC,0x801631DC,0x56 -asm/non_matchings/code/db_camera/func_80163334.s,func_80163334,0x80163334,0xCB -asm/non_matchings/code/db_camera/func_80163660.s,func_80163660,0x80163660,0x28 +asm/non_matchings/code/cutscene_camera/func_80161180.s,func_80161180,0x80161180,0x7 +asm/non_matchings/code/cutscene_camera/CutsceneCamera_Init.s,CutsceneCamera_Init,0x8016119C,0x24 +asm/non_matchings/code/cutscene_camera/CutsceneCamera_Interpolate.s,CutsceneCamera_Interpolate,0x8016122C,0x23 +asm/non_matchings/code/cutscene_camera/CutsceneCamera_ProcessSpline.s,CutsceneCamera_ProcessSpline,0x801612B8,0x1B8 +asm/non_matchings/code/cutscene_camera/CutsceneCamera_UpdateSplines.s,CutsceneCamera_UpdateSplines,0x80161998,0x85 +asm/non_matchings/code/cutscene_camera/func_80161BAC.s,func_80161BAC,0x80161BAC,0xD +asm/non_matchings/code/cutscene_camera/CutsceneCamera_SetState.s,CutsceneCamera_SetState,0x80161BE0,0xB +asm/non_matchings/code/cutscene_camera/CutsceneCamera_Reset.s,CutsceneCamera_Reset,0x80161C0C,0x5 +asm/non_matchings/code/cutscene_camera/func_80161C20.s,func_80161C20,0x80161C20,0x8B +asm/non_matchings/code/cutscene_camera/func_80161E4C.s,func_80161E4C,0x80161E4C,0xA0 +asm/non_matchings/code/cutscene_camera/func_801620CC.s,func_801620CC,0x801620CC,0xAC +asm/non_matchings/code/cutscene_camera/func_8016237C.s,func_8016237C,0x8016237C,0x1A +asm/non_matchings/code/cutscene_camera/func_801623E4.s,func_801623E4,0x801623E4,0x42 +asm/non_matchings/code/cutscene_camera/func_801624EC.s,func_801624EC,0x801624EC,0x14 +asm/non_matchings/code/cutscene_camera/func_8016253C.s,func_8016253C,0x8016253C,0x120 +asm/non_matchings/code/cutscene_camera/func_801629BC.s,func_801629BC,0x801629BC,0x25 +asm/non_matchings/code/cutscene_camera/func_80162A50.s,func_80162A50,0x80162A50,0x16A +asm/non_matchings/code/cutscene_camera/func_80162FF8.s,func_80162FF8,0x80162FF8,0x79 +asm/non_matchings/code/cutscene_camera/func_801631DC.s,func_801631DC,0x801631DC,0x56 +asm/non_matchings/code/cutscene_camera/func_80163334.s,func_80163334,0x80163334,0xCB +asm/non_matchings/code/cutscene_camera/func_80163660.s,func_80163660,0x80163660,0x28 asm/non_matchings/code/z_kaleido_manager/func_80163700.s,func_80163700,0x80163700,0x16 asm/non_matchings/code/z_kaleido_manager/func_80163758.s,func_80163758,0x80163758,0x17 asm/non_matchings/code/z_kaleido_manager/func_801637B4.s,func_801637B4,0x801637B4,0x14 @@ -3361,7 +3361,7 @@ asm/non_matchings/code/code_8019AF00/AudioOcarina_TerminaWallGenerateNotes.s,Aud asm/non_matchings/code/code_8019AF00/AudioOcarina_MemoryGameInit.s,AudioOcarina_MemoryGameInit,0x8019D488,0x1C asm/non_matchings/code/code_8019AF00/AudioOcarina_MemoryGameNextNote.s,AudioOcarina_MemoryGameNextNote,0x8019D4F8,0x42 asm/non_matchings/code/code_8019AF00/AudioOcarina_Update.s,AudioOcarina_Update,0x8019D600,0x56 -asm/non_matchings/code/code_8019AF00/AudioOcarina_PlayLongScarecrowAfterCredits.s,AudioOcarina_PlayLongScarecrowAfterCredits,0x8019D758,0x43 +asm/non_matchings/code/code_8019AF00/AudioOcarina_PlayLongScarecrowSong.s,AudioOcarina_PlayLongScarecrowSong,0x8019D758,0x43 asm/non_matchings/code/code_8019AF00/AudioOcarina_SetCustomSequence.s,AudioOcarina_SetCustomSequence,0x8019D864,0x14 asm/non_matchings/code/code_8019AF00/AudioOcarina_PlayCustomSequence.s,AudioOcarina_PlayCustomSequence,0x8019D8B4,0xC asm/non_matchings/code/code_8019AF00/AudioOcarina_CreateCustomSequence.s,AudioOcarina_CreateCustomSequence,0x8019D8E4,0x191 diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 071907058..34b3ddc46 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -165,7 +165,7 @@ weekEventReg = { (19 << 8) | 0x40: "WEEKEVENTREG_19_40", (19 << 8) | 0x80: "WEEKEVENTREG_19_80", (20 << 8) | 0x01: "WEEKEVENTREG_20_01", - (20 << 8) | 0x02: "WEEKEVENTREG_20_02", + (20 << 8) | 0x02: "WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE", (20 << 8) | 0x04: "WEEKEVENTREG_20_04", (20 << 8) | 0x08: "WEEKEVENTREG_20_08", (20 << 8) | 0x10: "WEEKEVENTREG_20_10", @@ -275,7 +275,7 @@ weekEventReg = { (33 << 8) | 0x10: "WEEKEVENTREG_33_10", (33 << 8) | 0x20: "WEEKEVENTREG_33_20", (33 << 8) | 0x40: "WEEKEVENTREG_33_40", - (33 << 8) | 0x80: "WEEKEVENTREG_33_80", + (33 << 8) | 0x80: "WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE", (34 << 8) | 0x01: "WEEKEVENTREG_34_01", (34 << 8) | 0x02: "WEEKEVENTREG_34_02", (34 << 8) | 0x04: "WEEKEVENTREG_34_04", @@ -425,7 +425,7 @@ weekEventReg = { (52 << 8) | 0x04: "WEEKEVENTREG_52_04", (52 << 8) | 0x08: "WEEKEVENTREG_52_08", (52 << 8) | 0x10: "WEEKEVENTREG_52_10", - (52 << 8) | 0x20: "WEEKEVENTREG_52_20", + (52 << 8) | 0x20: "WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE", (52 << 8) | 0x40: "WEEKEVENTREG_52_40", (52 << 8) | 0x80: "WEEKEVENTREG_52_80", (53 << 8) | 0x01: "WEEKEVENTREG_53_01", @@ -451,7 +451,7 @@ weekEventReg = { (55 << 8) | 0x10: "WEEKEVENTREG_55_10", (55 << 8) | 0x20: "WEEKEVENTREG_55_20", (55 << 8) | 0x40: "WEEKEVENTREG_55_40", - (55 << 8) | 0x80: "WEEKEVENTREG_55_80", + (55 << 8) | 0x80: "WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE", (56 << 8) | 0x01: "WEEKEVENTREG_56_01", (56 << 8) | 0x02: "WEEKEVENTREG_56_02", (56 << 8) | 0x04: "WEEKEVENTREG_56_04", From 40846f3d3ac0f4f7cbc1b828b4f70a935f6aeacd Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 20 Apr 2023 14:39:08 -0700 Subject: [PATCH 02/51] Ensure all boss title cards are extracted as IA8 (#1230) --- assets/xml/objects/object_boss03.xml | 2 +- assets/xml/objects/object_boss07.xml | 6 +++--- assets/xml/objects/object_boss_hakugin.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/xml/objects/object_boss03.xml b/assets/xml/objects/object_boss03.xml index da17bf406..f4def4991 100644 --- a/assets/xml/objects/object_boss03.xml +++ b/assets/xml/objects/object_boss03.xml @@ -46,7 +46,7 @@ - + diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml index b1f6cb417..ac2f9afc1 100644 --- a/assets/xml/objects/object_boss07.xml +++ b/assets/xml/objects/object_boss07.xml @@ -200,9 +200,9 @@ - - - + + + diff --git a/assets/xml/objects/object_boss_hakugin.xml b/assets/xml/objects/object_boss_hakugin.xml index ba04a3071..7c7232ecf 100644 --- a/assets/xml/objects/object_boss_hakugin.xml +++ b/assets/xml/objects/object_boss_hakugin.xml @@ -101,6 +101,6 @@ - + From 24454b2277713ece47510936ed84ffad715795c5 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 22 Apr 2023 05:54:47 +1000 Subject: [PATCH 03/51] cs state cleanup (#1229) --- src/code/code_800E8EA0.c | 8 ++++---- src/code/z_parameter.c | 2 +- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c | 2 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 2 +- src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c | 6 +++--- src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c | 4 ++-- src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c | 8 ++++---- src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c | 4 ++-- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 2 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 16 ++++++++-------- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 2 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 2 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 2 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 4 ++-- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 4 ++-- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 8 ++++---- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 5 +++-- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 4 ++-- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 2 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 2 +- 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_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Pamera/z_en_pamera.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 2 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 2 +- .../actors/ovl_En_Weather_Tag/z_en_weather_tag.c | 2 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.c | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 4 ++-- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 2 +- .../actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c | 2 +- tools/namefixer.py | 1 + 37 files changed, 63 insertions(+), 61 deletions(-) diff --git a/src/code/code_800E8EA0.c b/src/code/code_800E8EA0.c index 93970cc6a..4ab38fcba 100644 --- a/src/code/code_800E8EA0.c +++ b/src/code/code_800E8EA0.c @@ -85,7 +85,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo actor->focus.pos = actor->world.pos; actor->focus.pos.y += focusHeight; - if (!((play->csCtx.state != 0) || gDbgCamEnabled)) { + if (!((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled)) { yaw = ABS_ALT(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y)); if (yaw >= 0x4300) { Actor_TrackNone(headRot, torsoRot); @@ -93,7 +93,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo } } - if ((play->csCtx.state != 0) || gDbgCamEnabled) { + if ((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled) { target = play->view.eye; } else { target = player->actor.focus.pos; @@ -127,7 +127,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors actor->focus.pos = focusPos; - if (!((play->csCtx.state != 0) || gDbgCamEnabled)) { + if (!((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled)) { yaw = ABS_ALT(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y)); if (yaw >= 0x4300) { Actor_TrackNone(headRot, torsoRot); @@ -135,7 +135,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors } } - if ((play->csCtx.state != 0) || gDbgCamEnabled) { + if ((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled) { target = play->view.eye; } else { target = player->actor.focus.pos; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 88b8f14cc..41441f3a2 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -4003,7 +4003,7 @@ void Interface_DrawItemButtons(PlayState* play) { } if (interfaceCtx->tatlCalling && (play->pauseCtx.state == PAUSE_STATE_OFF) && - (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->csCtx.state == 0) && + (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->csCtx.state == CS_STATE_IDLE) && (sPictoState == PICTO_BOX_STATE_OFF)) { if (sCUpInvisible == 0) { // C-Up Button Texture, Color & Label (Tatl Text) diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c index 1419c3466..cca6b17ee 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c @@ -131,7 +131,7 @@ void BgIknvObj_UpdateWaterwheel(BgIknvObj* this, PlayState* play) { func_800B9010(&this->dyna.actor, NA_SE_EV_WOOD_WATER_WHEEL - SFX_FLAG); } - if ((play->csCtx.state != 0) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 4) && + if ((play->csCtx.state != CS_STATE_IDLE) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 4) && (play->csCtx.curFrame == 1495)) { func_8019F128(NA_SE_EV_DOOR_UNLOCK); } 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 b640b9ba4..12815a044 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -127,7 +127,7 @@ void func_80C1D7FC(DmAh* this, PlayState* play) { u16 cueId; s32 cueChannel; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (!this->unk_29C) { this->cueId = 255; this->unk_29C = true; 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 d624f85ca..43ca006f2 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -51,7 +51,7 @@ void func_80C1BDD8(DmAl* this, PlayState* play) { u16 cueId; s32 cueChannel; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (!this->unk_45C) { this->cueId = 255; this->unk_45C = true; 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 a9276d13b..2d474d111 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -198,7 +198,7 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { u16 cueId; s32 cueChannel; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (this->unk_2D0 == 0) { this->cueId = 255; this->unk_2D0 = 1; diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index 210f2ad37..8657a9dc9 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -448,7 +448,7 @@ void func_80AA5E2C(DmChar00* this, PlayState* play) { } void func_80AA5EBC(DmChar00* this, PlayState* play) { - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { switch (play->sceneId) { case SCENE_LOST_WOODS: if (gSaveContext.sceneLayer == 1) { @@ -853,7 +853,7 @@ void func_80AA62FC(DmChar00* this, PlayState* play) { void func_80AA67F8(DmChar00* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((play->csCtx.state == 0) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) { + if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) { if (this->unk_261 != 42) { this->unk_261 = 42; func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); @@ -914,7 +914,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) { s32 pad; Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx)); - if ((play->csCtx.state == 0) && + if ((play->csCtx.state == CS_STATE_IDLE) && ((play->sceneId != SCENE_OPENINGDAN) || (gSaveContext.sceneLayer != 0) || (play->roomCtx.curRoom.num != 0) || (play->csCtx.scriptIndex != 1) || (DMCHAR00_GET(&this->actor) != DMCHAR00_0))) { return; diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index 7841d22f5..ec1e12a8f 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -75,7 +75,7 @@ void DmChar02_PlaySfxForDroppingOcarinaCutscene(DmChar02* this, PlayState* play) } void DmChar02_PlaySfxForCutscenes(DmChar02* this, PlayState* play) { - if ((play->csCtx.state != 0) && (play->sceneId == SCENE_OKUJOU) && (play->csCtx.scriptIndex == 1)) { + if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_OKUJOU) && (play->csCtx.scriptIndex == 1)) { DmChar02_PlaySfxForDroppingOcarinaCutscene(this, play); } } @@ -172,7 +172,7 @@ void DmChar02_Draw(Actor* thisx, PlayState* play) { DmChar02* this = THIS; s32 shouldDraw = false; - if ((play->csCtx.state == 0) && (this->actor.world.pos.y < 100.0f)) { + if ((play->csCtx.state == CS_STATE_IDLE) && (this->actor.world.pos.y < 100.0f)) { shouldDraw = true; } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_107)) { switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_107)]->id) { 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 1b6d667c2..35611375b 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -341,13 +341,13 @@ void func_80AAFA18(DmChar08* this, PlayState* play) { } void func_80AAFAC4(DmChar08* this, PlayState* play) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { this->actionFunc = func_80AAF8F4; } } void func_80AAFAE4(DmChar08* this, PlayState* play) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { this->actionFunc = func_80AAFB04; } } @@ -893,7 +893,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) { } void func_80AB096C(DmChar08* this, PlayState* play) { - if ((play->csCtx.state != 0) && (play->sceneId == SCENE_31MISAKI) && (gSaveContext.sceneLayer == 0) && + if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_31MISAKI) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0)) { if ((play->csCtx.curFrame >= 890) && (play->csCtx.curFrame < 922)) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); @@ -1002,7 +1002,7 @@ void DmChar08_Update(Actor* thisx, PlayState* play) { } s32 DmChar08_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { - if ((play->csCtx.state == 0) && (play->sceneId == SCENE_31MISAKI) && + if ((play->csCtx.state == CS_STATE_IDLE) && (play->sceneId == SCENE_31MISAKI) && (limbIndex == TURTLE_LIMB_FRONT_RIGHT_UPPER_FLIPPER)) { rot->z = -0x5E24; } diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 567b33685..93fa0e94c 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -202,7 +202,7 @@ void DmChar09_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); func_80AB2268(this, play); func_80AB24BC(this, play); - if ((play->csCtx.state != 0) && this->unk_22E && DMCHAR09_GET_100(thisx)) { + if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E && DMCHAR09_GET_100(thisx)) { Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK + SFX_FLAG); } } @@ -217,7 +217,7 @@ s32 DmChar09_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f void DmChar09_Draw(Actor* thisx, PlayState* play) { DmChar09* this = THIS; - if ((play->csCtx.state != 0) && this->unk_22E) { + if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E) { func_8012C28C(play->state.gfxCtx); func_8012C2DC(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar09_OverrideLimbDraw, NULL, 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 f20c87cb4..2cdddbf19 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -198,7 +198,7 @@ void func_80C24A00(DmGm* this, PlayState* play) { u16 cueId; s32 cueChannel; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (this->unk_2D0 == 0) { this->cueId = 255; this->unk_2D0 = 1; 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 da2bd225a..c42ad3c2b 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -46,7 +46,7 @@ void func_80C1DF18(DmNb* this, PlayState* play) { u16 cueId; s32 cueChannel; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (this->unk1F8 == 0) { this->cueId = 255; this->unk1F8 = 1; 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 164d6ea53..9a9e14dbc 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -916,7 +916,7 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion2(DmStk* this, PlayState* play) { * Handles sound effects for all cutscenes. */ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) { - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { switch (play->sceneId) { case SCENE_LOST_WOODS: if (gSaveContext.sceneLayer == 1) { @@ -1198,7 +1198,7 @@ void DmStk_ClockTower_StartIntroCutsceneVersion1(DmStk* this, PlayState* play) { } void DmStk_ClockTower_WaitForIntroCutsceneVersion1ToEnd(DmStk* this, PlayState* play) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { this->animIndex = SK_ANIM_CALL_DOWN_MOON_LOOP; this->handType = SK_HAND_TYPE_HOLDING_OCARINA; DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0); @@ -1216,7 +1216,7 @@ void DmStk_ClockTower_StartIntroCutsceneVersion2(DmStk* this, PlayState* play) { } void DmStk_ClockTower_WaitForIntroCutsceneVersion2ToEnd(DmStk* this, PlayState* play) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { this->animIndex = SK_ANIM_FLOATING_ARMS_CROSSED; DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0); this->actionFunc = DmStk_ClockTower_Idle; @@ -1238,7 +1238,7 @@ void DmStk_ClockTower_StartDropOcarinaCutscene(DmStk* this, PlayState* play) { } void DmStk_ClockTower_WaitForDropOcarinaCutsceneToEnd(DmStk* this, PlayState* play) { - if ((play->csCtx.state != 0) && (play->csCtx.curFrame > 20)) { + if ((play->csCtx.state != CS_STATE_IDLE) && (play->csCtx.curFrame > 20)) { this->actionFunc = DmStk_ClockTower_Idle; } } @@ -1714,7 +1714,7 @@ void DmStk_UpdateCollision(DmStk* this, PlayState* play) { void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { DmStk_ClockTower_AdjustHeightAndRotation(this, play); this->actor.flags |= ACTOR_FLAG_1; this->tatlMessageTimer++; @@ -1739,7 +1739,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) { * If he is hit in this state, he will just deflect the attack. */ void DmStk_ClockTower_Idle(DmStk* this, PlayState* play) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { DmStk_ClockTower_AdjustHeightAndRotation(this, play); this->actor.flags |= ACTOR_FLAG_1; @@ -1804,7 +1804,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { break; case SK_DEKU_PIPES_CS_STATE_START: - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_END; } break; @@ -1815,7 +1815,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && - (play->csCtx.state == 0)) { + (play->csCtx.state == CS_STATE_IDLE)) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; if (R_TIME_SPEED != 0) { gSaveContext.save.time = 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 427e206aa..7d59ebeec 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -447,7 +447,7 @@ void func_80A52074(EnDnk* this, PlayState* play) { } void func_80A52134(EnDnk* this, PlayState* play) { - if ((play->csCtx.state != 0) && (ENDNK_GET_3C(&this->actor) == 4) && (play->sceneId == SCENE_SPOT00) && + if ((play->csCtx.state != CS_STATE_IDLE) && (ENDNK_GET_3C(&this->actor) == 4) && (play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 2)) { func_80A52074(this, play); } 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 dedbe30b4..fd1557e3f 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -265,7 +265,7 @@ s32 func_80B3CF60(EnDnp* this, PlayState* play) { s32 func_80B3D044(EnDnp* this, PlayState* play) { s32 ret = false; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_322 & 0x200)) { this->unk_322 |= (0x200 | 0x10); this->actor.flags &= ~ACTOR_FLAG_1; 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 ea5bd4e94..c328b02d6 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -121,7 +121,7 @@ void func_80A52604(EnDnq* this, PlayState* play) { s32 func_80A52648(EnDnq* this, PlayState* play) { s32 ret = false; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_37C & 0x20)) { this->picto.actor.flags &= ~ACTOR_FLAG_1; this->cueId = 255; 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 6837e5367..1f754f1d5 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -249,7 +249,7 @@ s32 func_8092CAD0(EnDns* this, PlayState* play) { s32 func_8092CB98(EnDns* this, PlayState* play) { s32 phi_v1 = 0; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_2C6 & 0x80)) { this->cueType = EnDns_GetCueType(this); this->actor.flags &= ~ACTOR_FLAG_1; 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 f70b60b57..615d59196 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1105,7 +1105,7 @@ void func_8088F214(EnElf* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 pad; - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) { switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id) { case 4: @@ -1526,7 +1526,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { this->unk_269--; } - if (!this->unk_269 && (play->csCtx.state != 0)) { + if (!this->unk_269 && (play->csCtx.state != CS_STATE_IDLE)) { this->unk_269 = 1; } } 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 94087bfb1..a43d39c7c 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -318,7 +318,7 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { switch (sGiantsCutsceneState) { case 0: - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { sGiantsCutsceneState += 2; } break; @@ -452,7 +452,7 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat } void EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions(EnFall* this, PlayState* play) { - if (play->csCtx.state != 0 && play->sceneId == SCENE_OKUJOU) { + if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_OKUJOU)) { func_800B9010(&this->actor, NA_SE_EV_MOON_FALL - SFX_FLAG); } } 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 ed10fd51a..81d1c6bb6 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -226,7 +226,7 @@ void func_80B352A4(EnGg* this, PlayState* play) { } void func_80B35450(EnGg* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10) && (play->csCtx.state == 0)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10) && (play->csCtx.state == CS_STATE_IDLE)) { func_80B359DC(this, play); } @@ -692,14 +692,14 @@ void EnGg_Update(Actor* thisx, PlayState* play) { } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { this->actor.flags |= ACTOR_FLAG_1; } else { this->actor.flags &= ~ACTOR_FLAG_1; } } - if ((play->csCtx.state == 0) && + if ((play->csCtx.state == CS_STATE_IDLE) && ((this->unk_2DA != 14) && (this->unk_2DA != 11) && (this->unk_2DA != 12) && (this->unk_2DA != 13))) { func_80B364D4(&this->unk_344, play); } @@ -723,7 +723,7 @@ void EnGg_Update(Actor* thisx, PlayState* play) { Actor_MoveWithoutGravity(&this->actor); SkelAnime_Update(&this->skelAnime); - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { func_80B3584C(this); } else { this->unk_2E8 = 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 38e6ad976..40cf72a98 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -842,7 +842,7 @@ void func_80B51FD0(EnGk* this, PlayState* play) { void func_80B5202C(EnGk* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { func_80B51410(this, play); } @@ -860,7 +860,8 @@ void func_80B5202C(EnGk* this, PlayState* play) { } if (this->unk_1E4 & 2) { - if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) && (play->csCtx.state == 0)) { + if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) && + (play->csCtx.state == CS_STATE_IDLE)) { func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } } else { 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 b76ed7066..f31dd7cd2 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -761,7 +761,7 @@ s32 func_8094EE84(EnGm* this, PlayState* play) { s32 func_8094EFC4(EnGm* this, PlayState* play) { s32 ret = false; - if (play->csCtx.state != 0) { + 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); 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 12a98228f..a0c7e3180 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -710,7 +710,7 @@ s32 func_80A12868(EnGo* this, PlayState* play) { } s32 func_80A12954(EnGo* this, PlayState* play) { - if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != 0) && (this->actor.draw != NULL) && + if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != CS_STATE_IDLE) && (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { if (this->unk_3F0 == 0) { @@ -756,7 +756,7 @@ s32 func_80A12A64(EnGo* this, PlayState* play) { } s32 func_80A12B78(EnGo* this, PlayState* play) { - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { if (this->unk_3DC == 4) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE); 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 b5ad5fa40..34e1d1e15 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -365,7 +365,7 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); return; - } else if (play->csCtx.state == 0) { + } else if (play->csCtx.state == CS_STATE_IDLE) { EnHg_SetupWait(this); } diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index e2d4792ca..096b92fdd 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -220,7 +220,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) { void EnHoll_TransparentIdle(EnHoll* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 useViewEye = gDbgCamEnabled || play->csCtx.state != 0; + s32 useViewEye = gDbgCamEnabled || (play->csCtx.state != CS_STATE_IDLE); Vec3f transformedPlayerPos; f32 enHollTop; f32 playerDistFromCentralPlane; 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 84ed7a605..254c9ad67 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -386,7 +386,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain[sp34]); - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { this->actor.uncullZoneForward += 1000.0f; } 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 b858fc502..2af87ea90 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -366,7 +366,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { this->actor.uncullZoneForward += 1000.0f; } EnKusa_InitCollider(&this->actor, play); 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 616481d85..20f32028e 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -372,7 +372,7 @@ void func_80959C94(EnMk* this, PlayState* play) { void func_80959D28(EnMk* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if ((play->csCtx.state == 0) && (this->actor.csId == CS_ID_NONE)) { + if ((play->csCtx.state == CS_STATE_IDLE) && (this->actor.csId == CS_ID_NONE)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) { this->unk_27A &= ~1; this->actionFunc = func_80959774; 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 a4158e2c7..dab8f591e 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -732,7 +732,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) { this->setupFunc(this, play); return 1; } - if ((play->csCtx.state == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20)) { + if ((play->csCtx.state == CS_STATE_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20)) { if ((this->actionFunc != func_80BD994C) && (this->actionFunc != EnPamera_HandleDialogue)) { this->actor.shape.rot.y = this->actor.world.rot.y; func_80BD9904(this); 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 d10f0884b..088d5c8a4 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1019,7 +1019,7 @@ s32 func_80AF86F0(EnPm* this, PlayState* play) { s32 func_80AF87C4(EnPm* this, PlayState* play) { s32 ret = false; - if ((play->csCtx.state != 0) && (play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 9) && + if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 9) && (play->curSpawn == 1)) { if (!this->unk_380) { func_80AF7E98(this, 0); 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 79b861477..d552c5605 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -283,7 +283,7 @@ void func_80BF3FF8(EnRg* this) { } s32 func_80BF4024(EnRg* this, PlayState* play) { - if ((play->csCtx.state == 0) && (this->unk_334 == 1)) { + if ((play->csCtx.state == CS_STATE_IDLE) && (this->unk_334 == 1)) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE); } 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 e81b5dabc..fb00fdae3 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 @@ -485,7 +485,7 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) { if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && - (play->csCtx.state == 0)) { + (play->csCtx.state == CS_STATE_IDLE)) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; if (R_TIME_SPEED != 0) { 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 752b669cf..aef42693b 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c @@ -165,7 +165,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { this->actor.uncullZoneForward += 1000.0f; } 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 7dd00abc3..3b933157b 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -689,7 +689,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { return; } - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { this->actor.home.rot.x = 1; this->clockTime += 3; this->actor.draw = ObjTokeidai_Clock_Draw; @@ -722,7 +722,7 @@ void ObjTokeidai_ExteriorGear_Idle(ObjTokeidai* this, PlayState* play) { if (ObjTokeidai_IsPostFirstCycleFinalHours(this, play)) { this->actor.draw = ObjTokeidai_ExteriorGear_Draw; } else { - if (play->csCtx.state != 0) { + if (play->csCtx.state != CS_STATE_IDLE) { this->actor.home.rot.x = 1; this->clockTime += 3; this->actor.draw = ObjTokeidai_ExteriorGear_Draw; 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 f80c44751..a924c9e06 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -1402,7 +1402,7 @@ void func_80B7A860(ObjUm* this, PlayState* play) { func_80B78DF0(this, play); } - if (play->csCtx.state == 0) { + if (play->csCtx.state == CS_STATE_IDLE) { CutsceneManager_Stop(this->dyna.actor.csId); ObjUm_SetupAction(this, func_80B7A7AC); } 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 7915551c2..93caeb33d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -80,7 +80,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) { if ((((OCEFF_WIPE5_GET_SONG_TYPE(thisx) == 2) && (play->sceneId == SCENE_LABO)) && ((play->csCtx.scriptIndex == 0) || (play->csCtx.scriptIndex == 1))) && - (play->csCtx.state != 0)) { + (play->csCtx.state != CS_STATE_IDLE)) { phi_fv1 = 1150.0f; } diff --git a/tools/namefixer.py b/tools/namefixer.py index d5493bbfc..3d77dba9c 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1027,6 +1027,7 @@ wordReplace = { "COLPOLY_SURFACE_GROUND": "SURFACE_MATERIAL_DIRT", "COLPOLY_SURFACE_SAND": "SURFACE_MATERIAL_SAND", "COLPOLY_SURFACE_SNOW": "SURFACE_MATERIAL_SNOW", + "CS_STATE_0": "CS_STATE_IDLE", # Example of custom behaviour: # "PLAYER": ("GET_PLAYER(play)", {"ignore": (-1, '"PLAYER"')}), # ignore "PLAYER" in sSoundBankNames From 539950bdc245e6a27004fcf88a7856b87751025d Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 23 Apr 2023 09:58:22 -0400 Subject: [PATCH 04/51] Update `m2ctx.py` (#1176) * Preserve macros in m2ctx * add more includes to m2ctx.py * review * review * remove duplicated entries --- tools/m2ctx.py | 100 ++++++++++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/tools/m2ctx.py b/tools/m2ctx.py index 0824899f1..23875eef0 100755 --- a/tools/m2ctx.py +++ b/tools/m2ctx.py @@ -1,14 +1,39 @@ #!/usr/bin/env python3 -import argparse, os, subprocess, sys +import argparse +import os +import sys +import subprocess +import tempfile from pathlib import Path -script_dir = os.path.dirname(os.path.realpath(__file__)) -root_dir = script_dir + "/../" -src_dir = root_dir + "src/" +script_dir = Path(os.path.dirname(os.path.realpath(__file__))) +root_dir = script_dir / ".." +src_dir = root_dir / "src" + +# Project-specific +CPP_FLAGS = [ + "-Iinclude", + "-Isrc", + "-Iassets", + "-Ibuild", + "-I.", + + "-D__sgi", + "-D_LANGUAGE_C", + "-DNON_MATCHING", + "-D_Static_assert(x, y)=", + "-D__attribute__(x)=" + "-D_MIPS_SZLONG=32", + "-ffreestanding", + "-DM2CTX", + + "-std=gnu89", +] # Read through the processes context and replace whatever def custom_replacements(output): + actorList = [] output = output.splitlines() i = 0 @@ -36,7 +61,6 @@ def custom_replacements(output): "door", "chest", ] - actorList = [] for x in range(12): actorList.append(actorListText.replace("first;", f"{actorCats[x]};") + "\n") if x == 2: @@ -48,63 +72,55 @@ def custom_replacements(output): i += 1 return "\n".join(output) -def get_c_dir(dirname): - for root, dirs, files in os.walk(src_dir): - for directory in dirs: - if directory == dirname: - return os.path.join(root, directory) - - -def get_c_file(directory): - for root, dirs, files in os.walk(directory): - for file in files: - if file.endswith(".c") and "data" not in file: - return file - - -def import_c_file(in_file): +def import_c_file(in_file) -> str: in_file = os.path.relpath(in_file, root_dir) - cpp_command = ["gcc", "-E", "-P", "-Iinclude", "-Iassets", "-Isrc", "-undef", "-D__sgi", "-D_LANGUAGE_C", - "-DNON_MATCHING", "-D_Static_assert(x, y)=", "-D__attribute__(x)=", in_file] + + cpp_command = ["gcc", "-E", "-P", "-undef", "-dM", *CPP_FLAGS, in_file] + cpp_command2 = ["gcc", "-E", "-P", "-undef", *CPP_FLAGS, in_file] + + with tempfile.NamedTemporaryFile(suffix=".c") as tmp: + stock_macros = subprocess.check_output(["gcc", "-E", "-P", "-undef", "-dM", tmp.name], cwd=root_dir, encoding="utf-8") + + out_text = "" try: - return subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8") + out_text += subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8") + out_text += subprocess.check_output(cpp_command2, cwd=root_dir, encoding="utf-8") except subprocess.CalledProcessError: print( "Failed to preprocess input file, when running command:\n" - + cpp_command, + + " ".join(cpp_command), file=sys.stderr, - ) + ) sys.exit(1) + if not out_text: + print("Output is empty - aborting") + sys.exit(1) + + for line in stock_macros.strip().splitlines(): + out_text = out_text.replace(line + "\n", "") + return out_text + def main(): parser = argparse.ArgumentParser(usage="./m2ctx.py path/to/file.c or ./m2ctx.py (from an actor or gamestate's asm dir)", - description="Creates a ctx.c file for mips2c. " - "Output will be saved as oot/ctx.c") + description="Creates a ctx.c file for m2c or decomp.me. " + "Output will be saved as ctx.c") parser.add_argument('filepath', help="path of c file to be processed") - parser.add_argument("--custom", "-c", dest="custom", action="store_true", default=False, - help="Apply custom replacements to the output to help aid m2c output") + parser.add_argument("--custom", "-c", dest="custom", action="store_true", default=False, + help="Apply custom replacements to the output to help aid m2c output") args = parser.parse_args() - if args.filepath: - c_file_path = args.filepath - print("Using file: {}".format(c_file_path)) - else: - this_dir = Path.cwd() - c_dir_path = get_c_dir(this_dir.name) - if c_dir_path is None: - sys.exit( - "Cannot find appropriate c file dir. In argumentless mode, run this script from the c file's corresponding asm dir.") - c_file = get_c_file(c_dir_path) - c_file_path = os.path.join(c_dir_path, c_file) - print("Using file: {}".format(c_file_path)) + c_file_path = args.filepath + print("Using file: {}".format(c_file_path)) output = import_c_file(c_file_path) if args.custom: output = custom_replacements(output) - with open(os.path.join(root_dir, "ctx.c"), "w", encoding="UTF-8") as f: + ctxPath = root_dir / "ctx.c" + with ctxPath.open("w", encoding="UTF-8") as f: f.write(output) From fc3da8451ac4270bbe2f63102010d6726c562240 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 23 Apr 2023 18:02:30 -0700 Subject: [PATCH 05/51] Match Room_DrawCullable (#1232) * Match Room_DrawCullable * format * Update src/code/z_room.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- src/code/z_room.c | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/src/code/z_room.c b/src/code/z_room.c index 369b2b0e5..22db1035f 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -59,40 +59,28 @@ typedef struct RoomShapeCullableEntryLinked { /* 0x0C */ struct RoomShapeCullableEntryLinked* next; } RoomShapeCullableEntryLinked; // size = 0x10 -// TODO: 127 is an arbitrarily chosen number to make the stack sorta work -#define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 127 +#define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 128 -#ifdef NON_MATCHING -// Small regalloc, likely related to temp usage and scoping void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { RoomShapeCullable* roomShape; RoomShapeCullableEntry* roomShapeCullableEntry; - RoomShapeCullableEntry* roomShapeCullableEntries; - RoomShapeCullableEntry* roomShapeCullableEntryIter; - Gfx* displayList; - f32 entryBoundsNearZ; RoomShapeCullableEntryLinked linkedEntriesBuffer[ROOM_SHAPE_CULLABLE_MAX_ENTRIES]; RoomShapeCullableEntryLinked* head = NULL; RoomShapeCullableEntryLinked* tail = NULL; - s32 var_a1; RoomShapeCullableEntryLinked* iter; + Gfx* displayList; RoomShapeCullableEntryLinked* insert; - f32 var_fv1; + f32 entryBoundsNearZ; s32 i; Vec3f pos; Vec3f projectedPos; - s32 pad2; + RoomShapeCullableEntry* roomShapeCullableEntries; OPEN_DISPS(play->state.gfxCtx); if (flags & ROOM_DRAW_OPA) { func_800BCBF4(&sZeroVec, play); - //! TODO: Fake - if (1) {} - if (1) {} - if (1) {} - gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); if (play->roomCtx.unk74 != NULL) { gSPSegment(POLY_OPA_DISP++, 0x06, play->roomCtx.unk74); @@ -159,8 +147,9 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { } } } else { - f32 var_fa1 = 1.0f / play->projectionMtxFDiagonal.z; // sp54 - s32 pad5; + f32 var_fa1 = 1.0f / play->projectionMtxFDiagonal.z; + f32 var_fv1; + s32 var_a1; // Pick and sort entries by depth for (i = 0; i < roomShape->numEntries; i++, roomShapeCullableEntry++) { @@ -237,8 +226,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { if (flags & ROOM_DRAW_OPA) { for (; head != NULL; head = head->next, i++) { - s32 pad3; - RoomShapeCullableEntry* roomShapeCullableEntry; + s32 pad; roomShapeCullableEntry = head->entry; @@ -265,17 +253,17 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { } if (flags & ROOM_DRAW_XLU) { - for (; head != NULL; head = head->prev) { + for (; tail != NULL; tail = tail->prev) { f32 temp_fv0; f32 temp_fv1; - roomShapeCullableEntry = head->entry; + roomShapeCullableEntry = tail->entry; displayList = roomShapeCullableEntry->xlu; if (displayList != NULL) { if (roomShapeCullableEntry->boundsSphereRadius & 1) { - temp_fv0 = head->boundsNearZ - (f32)(iREG(93) + 0xBB8); + temp_fv0 = tail->boundsNearZ - (f32)(iREG(93) + 0xBB8); temp_fv1 = iREG(94) + 0x7D0; if (temp_fv0 < temp_fv1) { @@ -299,10 +287,6 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { CLOSE_DISPS(play->state.gfxCtx); } -#else -void Room_DrawCullable(PlayState* play, Room* room, u32 flags); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/Room_DrawCullable.s") -#endif #define ROOM_IMAGE_NODRAW_BACKGROUND (1 << 0) #define ROOM_IMAGE_NODRAW_OPA (1 << 1) From eaf682dc0596a6b12bab32b2498657ecd38b0895 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Thu, 4 May 2023 00:43:27 -0400 Subject: [PATCH 06/51] Transition table (#1210) * transition_table.h * format * Update include/tables/transition_table.h Co-authored-by: Derek Hensley * review * review * bss --------- Co-authored-by: Derek Hensley --- include/initvars.h | 12 -------- include/segment_symbols.h | 6 ---- include/tables/transition_table.h | 21 ++++++++++++++ include/variables.h | 1 - include/z64transition.h | 38 +++++++++++++------------ src/code/sched.c | 1 + src/code/z_fbdemo_dlftbls.c | 46 ++++++++++++++++++------------- tools/disasm/variables.txt | 2 +- 8 files changed, 71 insertions(+), 56 deletions(-) delete mode 100644 include/initvars.h create mode 100644 include/tables/transition_table.h diff --git a/include/initvars.h b/include/initvars.h deleted file mode 100644 index 554b0ff5d..000000000 --- a/include/initvars.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _INITVARS_H_ -#define _INITVARS_H_ - -extern TransitionInit TransitionFade_InitVars; -extern TransitionInit TransitionTriforce_InitVars; -extern TransitionInit TransitionWipe1_InitVars; -extern TransitionInit TransitionWipe3_InitVars; -extern TransitionInit TransitionWipe4_InitVars; -extern TransitionInit TransitionCircle_InitVars; -extern TransitionInit TransitionWipe5_InitVars; - -#endif diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 79601bc93..9fc49a6cb 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -88,12 +88,6 @@ DECLARE_OVERLAY_SEGMENT(player_actor) #undef DEFINE_ACTOR_INTERNAL #undef DEFINE_ACTOR_UNSET -DECLARE_OVERLAY_SEGMENT(fbdemo_triforce) -DECLARE_OVERLAY_SEGMENT(fbdemo_wipe1) -DECLARE_OVERLAY_SEGMENT(fbdemo_wipe3) -DECLARE_OVERLAY_SEGMENT(fbdemo_wipe4) -DECLARE_OVERLAY_SEGMENT(fbdemo_wipe5) - #define DEFINE_OBJECT(name, _enumValue) DECLARE_ROM_SEGMENT(name) #define DEFINE_OBJECT_UNSET(_enumValue) #define DEFINE_OBJECT_SIZE_ZERO(_name, _enumValue) diff --git a/include/tables/transition_table.h b/include/tables/transition_table.h new file mode 100644 index 000000000..d623d76bb --- /dev/null +++ b/include/tables/transition_table.h @@ -0,0 +1,21 @@ +/** + * Transition Table + * + * DEFINE_TRANSITION should be used for normal transitions + * - Argument 0: Enum value for this transition + * - Argument 1: Name of the effect struct + * - Argument 2: Instance name + * - Argument 3: Name of the effect (without the ovl_ part) + * + * DEFINE_TRANSITION_INTERNAL should be used for transitions that aren't an overlay + * - Argument 0: Enum value for this transition + * - Argument 1: Name of the effect struct + * - Argument 2: Instance name + */ +/* 0 */ DEFINE_TRANSITION_INTERNAL(FBDEMO_FADE, TransitionFade, fade) +/* 1 */ DEFINE_TRANSITION(FBDEMO_TRIFORCE, TransitionTriforce, triforce, fbdemo_triforce) +/* 2 */ DEFINE_TRANSITION(FBDEMO_WIPE1, TransitionWipe1, wipe1, fbdemo_wipe1) +/* 3 */ DEFINE_TRANSITION(FBDEMO_WIPE3, TransitionWipe3, wipe3, fbdemo_wipe3) +/* 4 */ DEFINE_TRANSITION(FBDEMO_WIPE4, TransitionWipe4, wipe4, fbdemo_wipe4) +/* 5 */ DEFINE_TRANSITION_INTERNAL(FBDEMO_CIRCLE, TransitionCircle, circle) +/* 6 */ DEFINE_TRANSITION(FBDEMO_WIPE5, TransitionWipe5, wipe5, fbdemo_wipe5) diff --git a/include/variables.h b/include/variables.h index f3d668b2b..a78bdcb13 100644 --- a/include/variables.h +++ b/include/variables.h @@ -746,7 +746,6 @@ extern char D_801D039C[]; extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2]; // extern UNK_TYPE1 D_801D0B8C; extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; -// extern UNK_TYPE4 D_801D0BB0; // extern UNK_TYPE1 D_801D0C80; // extern UNK_TYPE1 D_801D0CB0; extern s32 gDbgCamEnabled; diff --git a/include/z64transition.h b/include/z64transition.h index 741f344d7..e223d9b58 100644 --- a/include/z64transition.h +++ b/include/z64transition.h @@ -2,6 +2,7 @@ #define Z64TRANSITION_H #include "ultra64.h" +#include "libc/stdint.h" #include "overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h" #include "overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h" #include "overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h" @@ -164,31 +165,34 @@ typedef enum { /* 86 */ TRANS_TYPE_86 = 86 } TransitionType; -typedef enum { - /* 0 */ FBDEMO_FADE, - /* 1 */ FBDEMO_TRIFORCE, - /* 2 */ FBDEMO_WIPE1, - /* 3 */ FBDEMO_WIPE3, - /* 4 */ FBDEMO_WIPE4, - /* 5 */ FBDEMO_CIRCLE, - /* 6 */ FBDEMO_WIPE5 +#define DEFINE_TRANSITION(enumValue, _structName, _instanceName, _name) enumValue, +#define DEFINE_TRANSITION_INTERNAL(enumValue, _structName, _instanceName) enumValue, + +typedef enum FbDemoType { + #include "tables/transition_table.h" + /* 7 */ FBDEMO_MAX } FbDemoType; +#undef DEFINE_TRANSITION +#undef DEFINE_TRANSITION_INTERNAL + #define TRANS_NEXT_TYPE_DEFAULT 0xFF +#define DEFINE_TRANSITION(_enumValue, structName, instanceName, _name) structName instanceName; +#define DEFINE_TRANSITION_INTERNAL(_enumValue, structName, instanceName) structName instanceName; + +typedef union TransitionInstance { + #include "tables/transition_table.h" +} TransitionInstance; // size = 0x218 + +#undef DEFINE_TRANSITION +#undef DEFINE_TRANSITION_INTERNAL + typedef struct { /* 0x000 */ s16 transitionType; /* 0x002 */ s8 fbdemoType; /* 0x003 */ char unk_003[0x5]; - /* 0x008 */ union { - TransitionFade fade; - TransitionCircle circle; - TransitionTriforce triforce; - TransitionWipe1 wipe1; - TransitionWipe3 wipe3; - TransitionWipe4 wipe4; - TransitionWipe5 wipe5; - } instanceData; + /* 0x008 */ TransitionInstance instanceData; /* 0x220 */ char unk_220[0x10]; /* 0x230 */ void* (*init)(void* transition); /* 0x234 */ void (*destroy)(void* transition); diff --git a/src/code/sched.c b/src/code/sched.c index 98b005ba1..c2630677c 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stackcheck.h" diff --git a/src/code/z_fbdemo_dlftbls.c b/src/code/z_fbdemo_dlftbls.c index 9d3685a45..48d424813 100644 --- a/src/code/z_fbdemo_dlftbls.c +++ b/src/code/z_fbdemo_dlftbls.c @@ -1,30 +1,38 @@ #include "global.h" -#include "initvars.h" -#include "overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h" -#include "overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h" -#include "overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h" -#include "overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h" -#include "overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h" -#define TRANSITION_OVERLAY(name, filename) \ - { \ - { 0, 0 }, SEGMENT_START(ovl_##filename), SEGMENT_END(ovl_##filename), SEGMENT_ROM_START(ovl_##filename), \ - SEGMENT_ROM_END(ovl_##filename), &name##_InitVars, sizeof(name) \ - } +// InitVars and Linker symbol declarations (used in the table below) +#define DEFINE_TRANSITION(_enumValue, structName, _instanceName, name) \ + extern TransitionInit structName##_InitVars; \ + DECLARE_OVERLAY_SEGMENT(name) -#define TRANSITION_OVERLAY_INTERNAL(name) \ - { { 0, 0 }, NULL, NULL, 0, 0, &name##_InitVars, sizeof(name) } +#define DEFINE_TRANSITION_INTERNAL(_enumValue, structName, _instanceName) extern TransitionInit structName##_InitVars; -#define TRANSITION_OVERLAY_UNSET \ - { 0 } +#include "tables/transition_table.h" + +#undef DEFINE_TRANSITION +#undef DEFINE_TRANSITION_INTERNAL + +#define DEFINE_TRANSITION(_enumValue, structName, _instanceName, name) \ + { \ + { 0, 0 }, \ + SEGMENT_START(ovl_##name), \ + SEGMENT_END(ovl_##name), \ + SEGMENT_ROM_START(ovl_##name), \ + SEGMENT_ROM_END(ovl_##name), \ + &structName##_InitVars, \ + sizeof(structName), \ + }, + +#define DEFINE_TRANSITION_INTERNAL(_enumValue, structName, _instanceName) \ + { { 0, 0 }, NULL, NULL, 0, 0, &structName##_InitVars, sizeof(structName) }, TransitionOverlay gTransitionOverlayTable[] = { - TRANSITION_OVERLAY_INTERNAL(TransitionFade), TRANSITION_OVERLAY(TransitionTriforce, fbdemo_triforce), - TRANSITION_OVERLAY(TransitionWipe1, fbdemo_wipe1), TRANSITION_OVERLAY(TransitionWipe3, fbdemo_wipe3), - TRANSITION_OVERLAY(TransitionWipe4, fbdemo_wipe4), TRANSITION_OVERLAY_INTERNAL(TransitionCircle), - TRANSITION_OVERLAY(TransitionWipe5, fbdemo_wipe5), +#include "tables/transition_table.h" }; +#undef DEFINE_TRANSITION +#undef DEFINE_TRANSITION_INTERNAL + void Transition_Init(TransitionContext* transitionCtx) { TransitionOverlay* overlayEntry; ptrdiff_t relocOffset; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 855900bb2..d0c90775b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2126,7 +2126,7 @@ 0x801D0B70:("gKaleidoMgrOverlayTable","KaleidoMgrOverlay","",0x38), 0x801D0BA8:("sKaleidoAreaPtr","void*","",0x4), 0x801D0BAC:("gKaleidoMgrCurOvl","KaleidoMgrOverlay*","",0x4), - 0x801D0BB0:("D_801D0BB0","UNK_TYPE4","",0x4), + 0x801D0BB0:("gTransitionOverlayTable","UNK_TYPE4","",0x4), 0x801D0C80:("D_801D0C80","UNK_TYPE1","",0x1), 0x801D0CB0:("D_801D0CB0","UNK_TYPE1","",0x1), 0x801D0CD8:("TransitionFade_InitVars","UNK_PTR","",0x4), From c9a89ae2bb1a5e158246c1158088d994716f8d89 Mon Sep 17 00:00:00 2001 From: StickyThwomp <89738536+StickyThwomp@users.noreply.github.com> Date: Tue, 9 May 2023 14:15:45 -0500 Subject: [PATCH 07/51] Matched last remaining function in z_en_tru.c. (#1237) * Matched last remaining function in z_en_tru.c. (Also touched up other similar functions for uniformity) * Fix spec file, revert unnecessary deltas, and change variable ordering. --- spec | 6 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 181 +++++++++++----------- 2 files changed, 91 insertions(+), 96 deletions(-) diff --git a/spec b/spec index 481fd099d..358a061ab 100644 --- a/spec +++ b/spec @@ -2962,11 +2962,7 @@ beginseg name "ovl_En_Tru" compress include "build/src/overlays/actors/ovl_En_Tru/z_en_tru.o" - #ifdef NON_MATCHING - include "build/src/overlays/actors/ovl_En_Tru/ovl_En_Tru_reloc.o" - #else - include "build/data/ovl_En_Tru/ovl_En_Tru.reloc.o" - #endif + include "build/src/overlays/actors/ovl_En_Tru/ovl_En_Tru_reloc.o" endseg beginseg 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 bb146784d..2ba130869 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -93,8 +93,14 @@ ActorInit En_Tru_InitVars = { static Vec3f D_80A8B250 = { 0.0f, 0.02f, 0.0f }; static Color_RGBA8 D_80A8B25C[] = { - { 255, 20, 60, 0 }, { 255, 235, 160, 0 }, { 20, 60, 255, 0 }, - { 100, 100, 100, 0 }, { 255, 255, 200, 0 }, { 100, 100, 100, 0 }, + { 255, 20, 60, 0 }, + { 255, 235, 160, 0 }, + { 20, 60, 255, 0 }, +}; +static Color_RGBA8 D_80A8B268[] = { + { 100, 100, 100, 0 }, + { 255, 255, 200, 0 }, + { 100, 100, 100, 0 }, }; static f32 D_80A8B274[] = { 60.0f, 255.0f, 60.0f }; @@ -176,33 +182,33 @@ void func_80A85788(EnTruUnkStruct* arg0, PlayState* play) { func_8012C2DC(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { - if (arg0->unk_00 == 1) { - f32 alpha; + f32 alpha; - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, D_80A89000); - flag = true; - } - - do { - alpha = (f32)arg0->unk_02 / arg0->unk_01; - alpha *= 255.0f; - } while (0); - - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 128); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)alpha); - gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, -arg0->unk_02 * 5, 32, 64, 1, 0, 0, 32, 32)); - - Matrix_Translate(arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(arg0->unk_28, arg0->unk_28, 1.0f, MTXMODE_APPLY); - Matrix_Translate(0.0f, 14.0f, 0.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, D_80A890A8); + if (arg0->unk_00 != 1) { + continue; } + + if (!flag) { + gSPDisplayList(POLY_XLU_DISP++, D_80A89000); + flag = true; + } + + alpha = (f32)arg0->unk_02 / arg0->unk_01; + alpha *= 255.0f; + + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 128); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)alpha); + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, -arg0->unk_02 * 5, 32, 64, 1, 0, 0, 32, 32)); + + Matrix_Translate(arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(arg0->unk_28, arg0->unk_28, 1.0f, MTXMODE_APPLY); + Matrix_Translate(0.0f, 14.0f, 0.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, D_80A890A8); } CLOSE_DISPS(play->state.gfxCtx); @@ -227,38 +233,38 @@ void func_80A85AA4(EnTruUnkStruct* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 ar } void func_80A85BCC(EnTruUnkStruct* arg0, PlayState* play) { + GraphicsContext* gfxCtx = play->state.gfxCtx; s32 i; s32 flag = false; OPEN_DISPS(play->state.gfxCtx); - if (play) {} func_8012C2DC(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { - if (arg0->unk_00 == 2) { - f32 alpha; + f32 alpha; - if (!flag) { - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 200, 0); - flag = true; - } - - do { - alpha = (f32)arg0->unk_02 / arg0->unk_01; - alpha *= 255.0f; - } while (0); - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 200, (u8)alpha); - - Matrix_Translate(arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(arg0->unk_28, arg0->unk_28, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, D_80A8A108); + if (arg0->unk_00 != 2) { + continue; } + + if (!flag) { + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 200, 0); + flag = true; + } + + alpha = (f32)arg0->unk_02 / arg0->unk_01; + alpha *= 255.0f; + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 200, (u8)alpha); + + Matrix_Translate(arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(arg0->unk_28, arg0->unk_28, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, D_80A8A108); } CLOSE_DISPS(play->state.gfxCtx); @@ -282,11 +288,10 @@ void func_80A85E2C(EnTruUnkStruct* arg0, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, } } -#ifdef NON_MATCHING -// s8/s6 flipped, same deal as above functions but the same fixes don't work void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) { - u8 flag = false; + GraphicsContext* gfxCtx = play->state.gfxCtx; s32 i; + s32 flag = false; OPEN_DISPS(play->state.gfxCtx); @@ -295,50 +300,44 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) { for (i = 0; i < 30; i++, arg0++) { f32 alpha; s32 index; - - if ((arg0->unk_00 == 3) || (arg0->unk_00 == 4) || (arg0->unk_00 == 5)) { - if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); - gSPDisplayList(POLY_XLU_DISP++, gKoumeDustMaterialDL); - flag = true; - } - - Matrix_Push(); - - do { - alpha = (f32)arg0->unk_02 / arg0->unk_01; - alpha *= D_80A8B274[arg0->unk_00 - 3]; - } while (0); - - gDPSetCombineLERP(POLY_XLU_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, - COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); - gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2); - gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING); - gDPPipeSync(POLY_XLU_DISP++); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80A8B25C[arg0->unk_00 - 3].r, D_80A8B25C[arg0->unk_00 - 3].g, - D_80A8B25C[arg0->unk_00 - 3].b, (u8)alpha); - gDPSetEnvColor(POLY_XLU_DISP++, D_80A8B25C[arg0->unk_00 - 3].r, D_80A8B25C[arg0->unk_00 - 3].g, - D_80A8B25C[arg0->unk_00 - 3].b, 0); - - Matrix_Translate(arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z, MTXMODE_NEW); - Matrix_Scale(arg0->unk_28, arg0->unk_28, 1.0f, MTXMODE_APPLY); - Matrix_ReplaceRotation(&play->billboardMtxF); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - index = ((f32)arg0->unk_02 / arg0->unk_01) * 8.0f; - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); - gSPDisplayList(POLY_XLU_DISP++, gKoumeDustModelDL); - - Matrix_Pop(); + if ((arg0->unk_00 != 3) && (arg0->unk_00 != 4) && (arg0->unk_00 != 5)) { + continue; } + + if (!flag) { + POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + gSPDisplayList(POLY_XLU_DISP++, gKoumeDustMaterialDL); + flag = true; + } + + Matrix_Push(); + + alpha = (f32)arg0->unk_02 / arg0->unk_01; + alpha *= D_80A8B274[arg0->unk_00 - 3]; + + gDPSetCombineLERP(POLY_XLU_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, + COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); + gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2); + gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING); + gDPPipeSync(POLY_XLU_DISP++); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80A8B25C[arg0->unk_00 - 3].r, D_80A8B25C[arg0->unk_00 - 3].g, + D_80A8B25C[arg0->unk_00 - 3].b, (u8)alpha); + gDPSetEnvColor(POLY_XLU_DISP++, D_80A8B268[arg0->unk_00 - 3].r, D_80A8B268[arg0->unk_00 - 3].g, + D_80A8B268[arg0->unk_00 - 3].b, 0); + + Matrix_Translate(arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z, MTXMODE_NEW); + Matrix_Scale(arg0->unk_28, arg0->unk_28, 1.0f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + index = ((f32)arg0->unk_02 / arg0->unk_01) * 8.0f; + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); + gSPDisplayList(POLY_XLU_DISP++, gKoumeDustModelDL); + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -#else -void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tru/func_80A85F84.s") -#endif s32 func_80A86384(EnTruUnkStruct* arg0, Vec3f* arg1) { s32 i; From 67dc6879bbdc97662ae0a606860a8990e0ed16dd Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 11 May 2023 09:21:16 +1000 Subject: [PATCH 08/51] match KaleidoScope_DrawQuestStatus (#1238) --- .../ovl_kaleido_scope/z_kaleido_collect.c | 39 ++++--------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index fe72ee840..10d2368b5 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -62,9 +62,6 @@ s16 sQuestRemainsEnvBlue[] = { 150, // Unused }; -#ifdef NON_EQUIVALENT -// TODO: is actually NON_MATCHING, update once `z_kaleido_scope_NES.c` is decompiled -// A single small regalloc at the first `Gfx_DrawTexQuadIA8` for the heart piece count (see `gItemIcons`) void KaleidoScope_DrawQuestStatus(PlayState* play) { static s16 sQuestRemainsColorTimer = 20; static s16 sQuestRemainsColorTimerIndex = 0; @@ -135,6 +132,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { s16 k; s16 skullTokenDigits[3]; u16 isDigitDrawn; + u32* questItemsPtr; OPEN_DISPS(play->state.gfxCtx); @@ -321,7 +319,12 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { } } - if ((GET_SAVE_INVENTORY_QUEST_ITEMS >> QUEST_HEART_PIECE_COUNT) != 0) { + //! FAKE: Used to load `0xF0000000` early + if ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) != 0) {} + questItemsPtr = &gSaveContext.save.saveInfo.inventory.questItems; + if (1) {} + + if ((*questItemsPtr >> QUEST_HEART_PIECE_COUNT) != 0) { gDPPipeSync(POLY_OPA_DISP++); gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); @@ -548,34 +551,6 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -#else -s16 sQuestRemainsColorTimer = 20; -s16 sQuestRemainsColorTimerIndex = 0; -s16 sQuestHpPrimRed = 0; -s16 sQuestHpPrimGreen = 0; -s16 sQuestHpPrimBlue = 0; -s16 sQuestHpPrimAlpha = 0; -s16 sQuestHpColorTimer = 20; -s16 sQuestHpPrimColorTargetIndex = 0; -TexturePtr sOcarinaButtonTextures[] = { - gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex, -}; -s16 sQuestSongsPrimRed[] = { - 150, 255, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, -}; -s16 sQuestSongsPrimGreen[] = { - 255, 80, 150, 160, 100, 240, 255, 255, 255, 255, 255, 255, -}; -s16 sQuestSongsPrimBlue[] = { - 100, 40, 255, 0, 255, 100, 255, 255, 255, 255, 255, 255, -}; -TexturePtr sQuestUpgradeTextures[][3] = { - { 0x08053000, 0x08054000, 0x08055000 }, - { 0x08056000, 0x08057000, 0x08058000 }, -}; -u8 sQuestUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawQuestStatus.s") -#endif typedef enum { /* -3 */ CURSOR_TO_LEFT = -3, // Cursor on the "scroll to left page" position From d796187c01235c029e786b1baf3de9c3ee570b7c Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 11 May 2023 09:49:02 -0700 Subject: [PATCH 09/51] Check md5sum in fixbaserom before trying to decompress (#1240) --- tools/fixbaserom.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/fixbaserom.py b/tools/fixbaserom.py index 2c3942160..3966c3533 100755 --- a/tools/fixbaserom.py +++ b/tools/fixbaserom.py @@ -122,6 +122,7 @@ def decompress_rom(dmadata_addr, dmadata): # re-calculate crc return update_crc(decompressed) +correct_compressed_str_hash = "2a0a8acb61538235bc1094d297fb6556" correct_str_hash = "f46493eaa0628827dbd6ad3ecd8d65d6" def get_str_hash(byte_array): @@ -179,6 +180,13 @@ elif fileContent[0] == 0x37: print("Byte swapping done.") +# Check to see if the ROM is a compressed "vanilla" ROM +compressed_str_hash = get_str_hash(bytearray(fileContent)) +if compressed_str_hash != correct_compressed_str_hash: + print("Error: Expected a hash of " + correct_compressed_str_hash + " but got " + compressed_str_hash + ". " + + "The baserom has probably been tampered, find a new one") + sys.exit(1) + # Decompress FILE_TABLE_OFFSET = 0x1A500 # 0x1C110 for JP1.0, 0x1C050 for JP1.1, 0x24F60 for debug if any([b != 0 for b in fileContent[FILE_TABLE_OFFSET + 0x9C:FILE_TABLE_OFFSET + 0x9C + 0x4]]): From b312b76db7a7231b7a792cccf80eff7a6af96aba Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Fri, 12 May 2023 20:48:14 -0700 Subject: [PATCH 10/51] Document a bug involving quick-killing the Wizrobe (#1233) * Document a bug involving quick-killing the Wizrobe * Update wording in EnWiz_SelectPlatform * Add missing "it" to comment --- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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 125be5056..d6cc0e9e6 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -37,8 +37,8 @@ void EnWiz_SetupDead(EnWiz* this); void EnWiz_Dead(EnWiz* this, PlayState* play); // This number is almost-entirely arbirary, with the only requirement being -// that cannot be a valid curPlatformIndex. Any negative number, or any number -// larger than 10, would work just as well. +// that it cannot be a valid curPlatformIndex. Any negative number, or any +// number larger than 10, would work just as well. #define INITIAL_PLATFORM_INDEX 777 typedef enum { @@ -601,6 +601,9 @@ void EnWiz_SelectPlatform(EnWiz* this, PlayState* play) { break; case EN_WIZ_FIGHT_STATE_SECOND_PHASE_CUTSCENE: + //! @bug: Setting the Wizrobe's position to the first platform *without* updating + //! this->curPlatformIndex can cause a bug later in EnWiz_Damaged. One way to fix + //! this is to set this->curPlatformIndex to 0 here. Math_Vec3f_Copy(&this->actor.world.pos, &this->platforms[0]->world.pos); for (i = 0, ghostAlpha = 128; i < this->platformCount; i++, ghostAlpha -= 10) { Math_Vec3f_Copy(&this->ghostPos[i], &this->actor.world.pos); @@ -1120,6 +1123,17 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { this->ghostRot[i].y += this->rotationalVelocity; } + //! @bug: When the Wizrobe is defeated, it is launched into the air by the code above, and the + //! last check in this conditional is intended to check that the Wizrobe is standing on its + //! platform before transitioning to a different state. However, when the fight is in the + //! EN_WIZ_FIGHT_STATE_SECOND_PHASE_CUTSCENE state, the Wizrobe will always appear on top of + //! the first platform, while its curPlatformIndex is allowed to randomly choose any other + //! platform in the room. If the Wizrobe is defeated in this state (which is possible with a + //! well-timed attack before the cutscene starts), and if the first platform is elevated above + //! other platforms in the room (as it is in the Secret Shrine), then it is possible for + //! this->platforms[this->curPlatformIndex]->world.pos.y to be under the floor compared to the + //! Wizrobe's current position, causing it to get stuck here and never actually die. This can + //! be fixed by addressing the bug in EnWiz_SelectPlatform. if ((this->timer == 1) || ((this->actor.velocity.y < 0.0f) && (this->actor.world.pos.y < (this->platforms[this->curPlatformIndex]->world.pos.y + 11.0f)))) { From cc6cc8da96ceaad7b1bfa318e5e3c422b2a89ba7 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 12 May 2023 22:32:19 -0700 Subject: [PATCH 11/51] Add a Couple Disasm Hacks (Fix NON_MATCHING Builds) (#1231) * collision check bss * play_hireso --- src/code/z_collision_check.c | 8 ++++++++ src/code/z_play.c | 3 --- tools/disasm/disasm.py | 4 ++++ tools/disasm/variables.txt | 1 - 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index 20083f3c4..8bcd244bd 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -23,16 +23,24 @@ Vec3f D_801EE0D8; TriNorm D_801EE0E8[2]; TriNorm D_801EE150; TriNorm D_801EE188; + +#ifndef NON_MATCHING Vec3f D_801EE1C0; Vec3f D_801EE1D0; Vec3f D_801EE1E0; Vec3f D_801EE1F0; EffectSparkInit D_801EE200; +#endif + TriNorm D_801EE6C8; TriNorm D_801EE700; + +#ifndef NON_MATCHING EffectSparkInit D_801EE738; EffectSparkInit D_801EEC00; EffectSparkInit D_801EF0C8; +#endif + TriNorm D_801EF590; TriNorm D_801EF5C8; TriNorm D_801EF600; diff --git a/src/code/z_play.c b/src/code/z_play.c index bd4db8fec..57386c97c 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -2342,6 +2342,3 @@ void Play_Init(GameState* thisx) { sBombersNotebookOpen = false; BombersNotebook_Init(&sBombersNotebook); } - -//! TODO: fake symbol, remove when BombersNotebook_Update is matching -u16 D_801D0D78[] = { 0, 0, 0, 0 }; diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py index 0f5e16464..e7b0f4d81 100755 --- a/tools/disasm/disasm.py +++ b/tools/disasm/disasm.py @@ -177,6 +177,10 @@ def proper_name(symbol, in_data=False, is_symbol=True): return variables_ast[0x809C46DC][0] + " + 0x14" elif symbol == 0x801EF66D: # z_message_nes constant-folding stray fairy array return variables_ast[0x801EF670][0] + f" - 0x{0x801EF670 - 0x801EF66D:X}" + elif symbol == 0x801EF51D: # z_message constant-folding stray fairy array + return variables_ast[0x801EF670][0] + f" - 0x{0x801EF670 - 0x801EF51D:X}" + elif symbol == 0x801D0D7A: # play_hireso constant-folding D_801D0D80 array + return variables_ast[0x801D0D80][0] + f" - 0x{0x801D0D80 - 0x801D0D7A:X}" elif symbol == 0x80A09740: # boss_07 symbol with large addend folded into %lo return variables_ast[0x80A09A60][0] + f" - 0x{0x80A09A60 - 0x80A09740:X}" # bg_ikana_mirror symbol with large addend folded into %lo diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d0c90775b..ffd045d44 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2138,7 +2138,6 @@ 0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2), 0x801D0D60:("D_801D0D60","Input*","",0x4), 0x801D0D64:("sPlayerCsIdToCsCamId","s16","[10]",0x14), - 0x801D0D78:("D_801D0D78","u16","[4]",0x4), 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1), 0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1), 0x801D1230:("D_801D1230","UNK_TYPE1","",0x1), From 7bdbca10a559abe0368fb7dde32f79d03e3af881 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 13 May 2023 17:38:38 -0700 Subject: [PATCH 12/51] Use proper sequence names in certain actors (#1241) * Use proper sequence names in certain actors * Fix z_en_jgame_tsn too * func_801A1FB4 enums --- src/code/z_actor.c | 4 ++-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 2 +- src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 2 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 ++-- 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_Zos/z_en_zos.c | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 84501dcbb..d18193de7 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2656,11 +2656,11 @@ void func_800B9D1C(Actor* actor) { if (sfxId) {} if (actor->audioFlags & 0x40) { - func_801A1FB4(3, &actor->projectedPos, NA_BGM_MUSIC_BOX_HOUSE, 1500.0f); + func_801A1FB4(SEQ_PLAYER_BGM_SUB, &actor->projectedPos, NA_BGM_MUSIC_BOX_HOUSE, 1500.0f); } if (actor->audioFlags & 0x20) { - func_801A1FB4(0, &actor->projectedPos, NA_BGM_KAMARO_DANCE, 900.0f); + func_801A1FB4(SEQ_PLAYER_BGM_MAIN, &actor->projectedPos, NA_BGM_KAMARO_DANCE, 900.0f); } } 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 14afe3270..9c2d7fe37 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -355,7 +355,7 @@ void func_80B0FD8C(EnGb2* this, PlayState* play) { } void func_80B0FE18(PlayState* play) { - func_800FD750(0x38); + func_800FD750(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_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 5efca1bcd..2985409dc 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 @@ -284,7 +284,7 @@ void func_80C1410C(EnJgameTsn* this, PlayState* play) { Player* player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; - Audio_PlaySubBgm(0x25); + Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME); play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; Interface_InitMinigame(play); SET_WEEKEVENTREG(WEEKEVENTREG_90_20); 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 c870027bb..a223fe900 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -446,7 +446,7 @@ void func_80BFC078(EnRz* this, PlayState* play) { sp28.x = this->actor.projectedPos.x; sp28.y = this->actor.projectedPos.y; sp28.z = this->actor.projectedPos.z; - func_801A1FB4(3, &sp28, NA_BGM_ROSA_SISTERS, 900.0f); + func_801A1FB4(SEQ_PLAYER_BGM_SUB, &sp28, NA_BGM_ROSA_SISTERS, 900.0f); } } @@ -547,7 +547,7 @@ void func_80BFC3F8(EnRz* this, PlayState* play) { bgmPos.x = this->actor.projectedPos.x; bgmPos.y = this->actor.projectedPos.y; bgmPos.z = this->actor.projectedPos.z; - func_801A1FB4(3, &bgmPos, NA_BGM_ROSA_SISTERS, 900.0f); + func_801A1FB4(SEQ_PLAYER_BGM_SUB, &bgmPos, 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 5f1b16e35..998c2b186 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -588,7 +588,7 @@ void func_80BA0728(EnZob* this, PlayState* play) { sp28.x = this->actor.projectedPos.x; sp28.y = this->actor.projectedPos.y; sp28.z = this->actor.projectedPos.z; - func_801A1FB4(3, &sp28, 0x6C, 1000.0f); + func_801A1FB4(SEQ_PLAYER_BGM_SUB, &sp28, 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 aaf3b85f0..826664a9a 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(3, &seqPos, NA_BGM_DRUMS_PLAY, 700.0f); + func_801A1FB4(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 3c11d1bce..039c2a3e6 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -582,7 +582,7 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { sp28.x = this->actor.projectedPos.x; sp28.y = this->actor.projectedPos.y; sp28.z = this->actor.projectedPos.z; - func_801A1FB4(3, &sp28, 110, 1000.0f); + func_801A1FB4(SEQ_PLAYER_BGM_SUB, &sp28, NA_BGM_PIANO_PLAY, 1000.0f); } void func_80BBBFBC(EnZos* this, PlayState* play) { From 389a2bf33cffb43ddda59259f8114e2ff639acad Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 13 May 2023 18:27:31 -0700 Subject: [PATCH 13/51] Document EnAob01 (doggy racetrack owner) and use macros for weekEventRegs in all dog racing files (#1234) * Document EnAob01 (doggy racetrack owner) and use macros for weekEventRegs in all dog racing files * Respond to first review * Respond to anon's review * Forgot a _FLAG_ on one of my flags * Respond to anon's review * Respond to engineer's review * Delete extra period * Undo the EVENTINF stuff I goofed up * Update comment * Fix bss * Respond to engineer's review --- include/z64save.h | 163 ++-- src/boot_O2_g3/z_std_dma.c | 1 + src/code/z_play.c | 1 - .../actors/ovl_En_Aob_01/z_en_aob_01.c | 919 +++++++++++------- .../actors/ovl_En_Aob_01/z_en_aob_01.h | 50 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 1 - src/overlays/actors/ovl_En_Dg/z_en_dg.c | 18 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 5 +- .../z_en_horse_game_check.c | 20 +- src/overlays/actors/ovl_En_In/z_en_in.c | 42 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 20 +- .../actors/ovl_En_Racedog/z_en_racedog.h | 1 + src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 4 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 8 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 4 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 1 + tools/disasm/functions.txt | 64 +- tools/disasm/variables.txt | 4 +- tools/weekeventregconvert.py | 16 +- 19 files changed, 751 insertions(+), 591 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index 1f59fea01..9d580803f 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -594,7 +594,7 @@ typedef enum { #define WEEKEVENTREG_08_04 PACK_WEEKEVENTREG_FLAG(8, 0x04) #define WEEKEVENTREG_08_08 PACK_WEEKEVENTREG_FLAG(8, 0x08) #define WEEKEVENTREG_08_10 PACK_WEEKEVENTREG_FLAG(8, 0x10) -#define WEEKEVENTREG_08_20 PACK_WEEKEVENTREG_FLAG(8, 0x20) +#define WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE PACK_WEEKEVENTREG_FLAG(8, 0x20) // Related to final hours #define WEEKEVENTREG_08_40 PACK_WEEKEVENTREG_FLAG(8, 0x40) @@ -857,7 +857,7 @@ typedef enum { #define WEEKEVENTREG_34_02 PACK_WEEKEVENTREG_FLAG(34, 0x02) #define WEEKEVENTREG_34_04 PACK_WEEKEVENTREG_FLAG(34, 0x04) -#define WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED PACK_WEEKEVENTREG_FLAG(34, 0x08) +#define WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN PACK_WEEKEVENTREG_FLAG(34, 0x08) #define WEEKEVENTREG_34_10 PACK_WEEKEVENTREG_FLAG(34, 0x10) #define WEEKEVENTREG_34_20 PACK_WEEKEVENTREG_FLAG(34, 0x20) #define WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH PACK_WEEKEVENTREG_FLAG(34, 0x40) @@ -924,62 +924,11 @@ typedef enum { #define WEEKEVENTREG_41_20 PACK_WEEKEVENTREG_FLAG(41, 0x20) #define WEEKEVENTREG_41_40 PACK_WEEKEVENTREG_FLAG(41, 0x40) #define WEEKEVENTREG_41_80 PACK_WEEKEVENTREG_FLAG(41, 0x80) -#define WEEKEVENTREG_42_01 PACK_WEEKEVENTREG_FLAG(42, 0x01) -#define WEEKEVENTREG_42_02 PACK_WEEKEVENTREG_FLAG(42, 0x02) -#define WEEKEVENTREG_42_04 PACK_WEEKEVENTREG_FLAG(42, 0x04) -#define WEEKEVENTREG_42_08 PACK_WEEKEVENTREG_FLAG(42, 0x08) -#define WEEKEVENTREG_42_10 PACK_WEEKEVENTREG_FLAG(42, 0x10) -#define WEEKEVENTREG_42_20 PACK_WEEKEVENTREG_FLAG(42, 0x20) -#define WEEKEVENTREG_42_40 PACK_WEEKEVENTREG_FLAG(42, 0x40) -#define WEEKEVENTREG_42_80 PACK_WEEKEVENTREG_FLAG(42, 0x80) -#define WEEKEVENTREG_43_01 PACK_WEEKEVENTREG_FLAG(43, 0x01) -#define WEEKEVENTREG_43_02 PACK_WEEKEVENTREG_FLAG(43, 0x02) -#define WEEKEVENTREG_43_04 PACK_WEEKEVENTREG_FLAG(43, 0x04) -#define WEEKEVENTREG_43_08 PACK_WEEKEVENTREG_FLAG(43, 0x08) -#define WEEKEVENTREG_43_10 PACK_WEEKEVENTREG_FLAG(43, 0x10) -#define WEEKEVENTREG_43_20 PACK_WEEKEVENTREG_FLAG(43, 0x20) -#define WEEKEVENTREG_43_40 PACK_WEEKEVENTREG_FLAG(43, 0x40) -#define WEEKEVENTREG_43_80 PACK_WEEKEVENTREG_FLAG(43, 0x80) -#define WEEKEVENTREG_44_01 PACK_WEEKEVENTREG_FLAG(44, 0x01) -#define WEEKEVENTREG_44_02 PACK_WEEKEVENTREG_FLAG(44, 0x02) -#define WEEKEVENTREG_44_04 PACK_WEEKEVENTREG_FLAG(44, 0x04) -#define WEEKEVENTREG_44_08 PACK_WEEKEVENTREG_FLAG(44, 0x08) -#define WEEKEVENTREG_44_10 PACK_WEEKEVENTREG_FLAG(44, 0x10) -#define WEEKEVENTREG_44_20 PACK_WEEKEVENTREG_FLAG(44, 0x20) -#define WEEKEVENTREG_44_40 PACK_WEEKEVENTREG_FLAG(44, 0x40) -#define WEEKEVENTREG_44_80 PACK_WEEKEVENTREG_FLAG(44, 0x80) -#define WEEKEVENTREG_45_01 PACK_WEEKEVENTREG_FLAG(45, 0x01) -#define WEEKEVENTREG_45_02 PACK_WEEKEVENTREG_FLAG(45, 0x02) -#define WEEKEVENTREG_45_04 PACK_WEEKEVENTREG_FLAG(45, 0x04) -#define WEEKEVENTREG_45_08 PACK_WEEKEVENTREG_FLAG(45, 0x08) -#define WEEKEVENTREG_45_10 PACK_WEEKEVENTREG_FLAG(45, 0x10) -#define WEEKEVENTREG_45_20 PACK_WEEKEVENTREG_FLAG(45, 0x20) -#define WEEKEVENTREG_45_40 PACK_WEEKEVENTREG_FLAG(45, 0x40) -#define WEEKEVENTREG_45_80 PACK_WEEKEVENTREG_FLAG(45, 0x80) -#define WEEKEVENTREG_46_01 PACK_WEEKEVENTREG_FLAG(46, 0x01) -#define WEEKEVENTREG_46_02 PACK_WEEKEVENTREG_FLAG(46, 0x02) -#define WEEKEVENTREG_46_04 PACK_WEEKEVENTREG_FLAG(46, 0x04) -#define WEEKEVENTREG_46_08 PACK_WEEKEVENTREG_FLAG(46, 0x08) -#define WEEKEVENTREG_46_10 PACK_WEEKEVENTREG_FLAG(46, 0x10) -#define WEEKEVENTREG_46_20 PACK_WEEKEVENTREG_FLAG(46, 0x20) -#define WEEKEVENTREG_46_40 PACK_WEEKEVENTREG_FLAG(46, 0x40) -#define WEEKEVENTREG_46_80 PACK_WEEKEVENTREG_FLAG(46, 0x80) -#define WEEKEVENTREG_47_01 PACK_WEEKEVENTREG_FLAG(47, 0x01) -#define WEEKEVENTREG_47_02 PACK_WEEKEVENTREG_FLAG(47, 0x02) -#define WEEKEVENTREG_47_04 PACK_WEEKEVENTREG_FLAG(47, 0x04) -#define WEEKEVENTREG_47_08 PACK_WEEKEVENTREG_FLAG(47, 0x08) -#define WEEKEVENTREG_47_10 PACK_WEEKEVENTREG_FLAG(47, 0x10) -#define WEEKEVENTREG_47_20 PACK_WEEKEVENTREG_FLAG(47, 0x20) -#define WEEKEVENTREG_47_40 PACK_WEEKEVENTREG_FLAG(47, 0x40) -#define WEEKEVENTREG_47_80 PACK_WEEKEVENTREG_FLAG(47, 0x80) -#define WEEKEVENTREG_48_01 PACK_WEEKEVENTREG_FLAG(48, 0x01) -#define WEEKEVENTREG_48_02 PACK_WEEKEVENTREG_FLAG(48, 0x02) -#define WEEKEVENTREG_48_04 PACK_WEEKEVENTREG_FLAG(48, 0x04) -#define WEEKEVENTREG_48_08 PACK_WEEKEVENTREG_FLAG(48, 0x08) -#define WEEKEVENTREG_48_10 PACK_WEEKEVENTREG_FLAG(48, 0x10) -#define WEEKEVENTREG_48_20 PACK_WEEKEVENTREG_FLAG(48, 0x20) -#define WEEKEVENTREG_48_40 PACK_WEEKEVENTREG_FLAG(48, 0x40) -#define WEEKEVENTREG_48_80 PACK_WEEKEVENTREG_FLAG(48, 0x80) + +// Used for storing the text ID offsets for the dogs in the Doggy Racetrack (56 entries) +// The number of weekEventRegs used needs to be kept in sync with RACEDOG_COUNT in z_en_aob_01.h +// PACK_WEEKEVENTREG_FLAG(42, 0x01) to PACK_WEEKEVENTREG_FLAG(48, 0x80) + #define WEEKEVENTREG_49_01 PACK_WEEKEVENTREG_FLAG(49, 0x01) #define WEEKEVENTREG_49_02 PACK_WEEKEVENTREG_FLAG(49, 0x02) #define WEEKEVENTREG_49_04 PACK_WEEKEVENTREG_FLAG(49, 0x04) @@ -1013,10 +962,7 @@ typedef enum { #define WEEKEVENTREG_52_04 PACK_WEEKEVENTREG_FLAG(52, 0x04) #define WEEKEVENTREG_52_08 PACK_WEEKEVENTREG_FLAG(52, 0x08) #define WEEKEVENTREG_52_10 PACK_WEEKEVENTREG_FLAG(52, 0x10) - -// cleared Stone Tower Temple #define WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE PACK_WEEKEVENTREG_FLAG(52, 0x20) - #define WEEKEVENTREG_52_40 PACK_WEEKEVENTREG_FLAG(52, 0x40) #define WEEKEVENTREG_52_80 PACK_WEEKEVENTREG_FLAG(52, 0x80) #define WEEKEVENTREG_53_01 PACK_WEEKEVENTREG_FLAG(53, 0x01) @@ -1130,12 +1076,12 @@ typedef enum { #define WEEKEVENTREG_64_10 PACK_WEEKEVENTREG_FLAG(64, 0x10) #define WEEKEVENTREG_64_20 PACK_WEEKEVENTREG_FLAG(64, 0x20) #define WEEKEVENTREG_64_40 PACK_WEEKEVENTREG_FLAG(64, 0x40) -#define WEEKEVENTREG_64_80 PACK_WEEKEVENTREG_FLAG(64, 0x80) -#define WEEKEVENTREG_65_01 PACK_WEEKEVENTREG_FLAG(65, 0x01) -#define WEEKEVENTREG_65_02 PACK_WEEKEVENTREG_FLAG(65, 0x02) -#define WEEKEVENTREG_65_04 PACK_WEEKEVENTREG_FLAG(65, 0x04) -#define WEEKEVENTREG_65_08 PACK_WEEKEVENTREG_FLAG(65, 0x08) -#define WEEKEVENTREG_65_10 PACK_WEEKEVENTREG_FLAG(65, 0x10) +#define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_1 PACK_WEEKEVENTREG_FLAG(64, 0x80) +#define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_1 PACK_WEEKEVENTREG_FLAG(65, 0x01) +#define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_2 PACK_WEEKEVENTREG_FLAG(65, 0x02) +#define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_2 PACK_WEEKEVENTREG_FLAG(65, 0x04) +#define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_3 PACK_WEEKEVENTREG_FLAG(65, 0x08) +#define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_3 PACK_WEEKEVENTREG_FLAG(65, 0x10) #define WEEKEVENTREG_65_20 PACK_WEEKEVENTREG_FLAG(65, 0x20) #define WEEKEVENTREG_65_40 PACK_WEEKEVENTREG_FLAG(65, 0x40) #define WEEKEVENTREG_65_80 PACK_WEEKEVENTREG_FLAG(65, 0x80) @@ -1385,10 +1331,8 @@ typedef enum { #define WEEKEVENTREG_91_40 PACK_WEEKEVENTREG_FLAG(91, 0x40) #define WEEKEVENTREG_91_80 PACK_WEEKEVENTREG_FLAG(91, 0x80) -// RACE_FLAGS -//#define WEEKEVENTREG_92_01 PACK_WEEKEVENTREG_FLAG(92, 0x01) -//#define WEEKEVENTREG_92_02 PACK_WEEKEVENTREG_FLAG(92, 0x02) -//#define WEEKEVENTREG_92_04 PACK_WEEKEVENTREG_FLAG(92, 0x04) +// HORSE_RACE_STATE (3 entries) +// WEEKEVENTREG_92_01 to WEEKEVENTREG_92_04 #define WEEKEVENTREG_92_08 PACK_WEEKEVENTREG_FLAG(92, 0x08) #define WEEKEVENTREG_92_10 PACK_WEEKEVENTREG_FLAG(92, 0x10) @@ -1460,34 +1404,52 @@ typedef enum { #define SET_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) = GET_WEEKEVENTREG((flag) >> 8) | ((flag) & 0xFF)) #define CLEAR_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) = GET_WEEKEVENTREG((flag) >> 8) & (u8)~((flag) & 0xFF)) -#define WEEKEVENTREG_RACE_FLAG_END 0 -#define WEEKEVENTREG_RACE_FLAG_START 1 -#define WEEKEVENTREG_RACE_FLAG_2 2 -#define WEEKEVENTREG_RACE_FLAG_3 3 -#define WEEKEVENTREG_RACE_FLAG_4 4 -#define WEEKEVENTREG_RACE_FLAGS 7 +typedef enum { + /* 0 */ WEEKEVENTREG_HORSE_RACE_STATE_END, + /* 1 */ WEEKEVENTREG_HORSE_RACE_STATE_START, + /* 2 */ WEEKEVENTREG_HORSE_RACE_STATE_2, + /* 3 */ WEEKEVENTREG_HORSE_RACE_STATE_3, + /* 4 */ WEEKEVENTREG_HORSE_RACE_STATE_4, + /* 7 */ WEEKEVENTREG_HORSE_RACE_STATE_MAX = 7 +} WeekEventRegHorseRaceState; -#define GET_WEEKEVENTREG_RACE_FLAGS (WEEKEVENTREG(92) & WEEKEVENTREG_RACE_FLAGS) +#define GET_WEEKEVENTREG_HORSE_RACE_STATE (WEEKEVENTREG(92) & WEEKEVENTREG_HORSE_RACE_STATE_MAX) -#define SET_WEEKEVENTREG_RACE_FLAGS(flag) \ - { \ - WEEKEVENTREG(92) &= (u8)~WEEKEVENTREG_RACE_FLAGS; \ - WEEKEVENTREG(92) = WEEKEVENTREG(92) | (u8)((WEEKEVENTREG(92) & ~WEEKEVENTREG_RACE_FLAGS) | (flag)); \ - } \ +#define SET_WEEKEVENTREG_HORSE_RACE_STATE(state) \ + { \ + WEEKEVENTREG(92) &= (u8)~WEEKEVENTREG_HORSE_RACE_STATE_MAX; \ + WEEKEVENTREG(92) = WEEKEVENTREG(92) | (u8)((WEEKEVENTREG(92) & ~WEEKEVENTREG_HORSE_RACE_STATE_MAX) | (state)); \ + } \ (void)0 +#define GET_WEEKEVENTREG_DOG_RACE_TEXT(index, baseTextId) \ + (index % 2) ? (baseTextId + (((WEEKEVENTREG(42 + (index / 2))) & 0xF0) >> 4)) \ + : (baseTextId + ((WEEKEVENTREG(42 + (index / 2))) & 0x0F)); + +#define SET_WEEKEVENTREG_DOG_RACE_TEXT_OFFSETS(index, packedOffsets) \ + { \ + WEEKEVENTREG(42 + index) = ((void)0, WEEKEVENTREG(42 + index)) | packedOffsets; \ + } + +#define CLEAR_WEEKEVENTREG_DOG_RACE_TEXT_OFFSETS(index) \ + { \ + WEEKEVENTREG(42 + index) = 0; \ + } + /** * gSaveContext.eventInf */ -#define EVENTINF_00 0x00 -#define EVENTINF_01 0x01 -#define EVENTINF_02 0x02 -#define EVENTINF_03 0x03 -#define EVENTINF_04 0x04 -#define EVENTINF_05 0x05 -#define EVENTINF_06 0x06 -#define EVENTINF_07 0x07 +// gSaveContext.eventInf[0] is used to dog race information +// #define EVENTINF_00 0x00 +// #define EVENTINF_01 0x01 +// #define EVENTINF_02 0x02 +// #define EVENTINF_03 0x03 +// #define EVENTINF_04 0x04 +// #define EVENTINF_05 0x05 +// #define EVENTINF_06 0x06 +// #define EVENTINF_07 0x07 + #define EVENTINF_10 0x10 #define EVENTINF_11 0x11 #define EVENTINF_12 0x12 @@ -1561,6 +1523,25 @@ typedef enum { #define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] &= (u8)~(1 << ((flag) & 0xF))) #define CLEAR_EVENTINF_ALT(flag) (gSaveContext.eventInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF))) +typedef enum { + /* 0 */ EVENTINF_DOG_RACE_STATE_NOT_STARTED, + /* 2 */ EVENTINF_DOG_RACE_STATE_STARTED = 2, + /* 3 */ EVENTINF_DOG_RACE_STATE_ENDED, + /* 7 */ EVENTINF_DOG_RACE_STATE_MAX = 7 +} EventInfDogRaceState; + +#define GET_EVENTINF_DOG_RACE_STATE (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MAX) +#define SET_EVENTINF_DOG_RACE_STATE(state) \ + (gSaveContext.eventInf[0] = ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MAX) | (state))) + +#define GET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MAX) >> 3) +#define SET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX(selectedDogIndex) \ + (gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MAX) | (selectedDogIndex << 3)) + +// This is exactly the same as the selected dog index; they never need both of them at the same time. +#define GET_EVENTINF_DOG_RACE_RACE_STANDING ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MAX) >> 3) +#define SET_EVENTINF_DOG_RACE_RACE_STANDING(raceStanding) \ + (gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MAX) | (raceStanding << 3)) typedef enum { /* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE, diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index bbf8e4bed..00d894f74 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" diff --git a/src/code/z_play.c b/src/code/z_play.c index 57386c97c..ca0ebcbae 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "buffers.h" #include "z64debug_display.h" 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 5aa746298..45a413c26 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 @@ -12,27 +12,25 @@ #define THIS ((EnAob01*)thisx) -//! TODO: this file require macros for its uses of weekEventReg - void EnAob01_Init(Actor* thisx, PlayState* play); void EnAob01_Destroy(Actor* thisx, PlayState* play); void EnAob01_Update(Actor* thisx, PlayState* play); void EnAob01_Draw(Actor* thisx, PlayState* play); -void func_809C1C9C(EnAob01* this, PlayState* play); -void func_809C1D64(EnAob01* this, PlayState* play); -void func_809C2060(EnAob01* this, PlayState* play); -void func_809C21E0(EnAob01* this, PlayState* play); -void func_809C26E4(EnAob01* this, PlayState* play); -void func_809C2730(EnAob01* this, PlayState* play); -void func_809C2788(EnAob01* this, PlayState* play); -void func_809C2824(EnAob01* this, PlayState* play); -void func_809C28B8(EnAob01* this, PlayState* play); -void func_809C2A64(EnAob01* this, PlayState* play); -void func_809C2BE4(EnAob01* this, PlayState* play); -void func_809C2C9C(EnAob01* this, PlayState* play); -void func_809C2D0C(EnAob01* this, PlayState* play); -s32 func_809C2EC4(EnAob01* this, PlayState* play); +void EnAob01_BeforeRace_StartRace(EnAob01* this, PlayState* play); +void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* play); +void EnAob01_BeforeRace_Idle(EnAob01* this, PlayState* play); +void EnAob01_BeforeRace_Talk(EnAob01* this, PlayState* play); +void EnAob01_Race_SkipNonRaceCutscene(EnAob01* this, PlayState* play); +void EnAob01_Race_HandleRaceCutscene(EnAob01* this, PlayState* play); +void EnAob01_Race_HandleRaceEndCutscene(EnAob01* this, PlayState* play); +void EnAob01_Race_StartCutscene(EnAob01* this, PlayState* play); +void EnAob01_AfterRace_GiveRaceResult(EnAob01* this, PlayState* play); +void EnAob01_AfterRace_GiveReward(EnAob01* this, PlayState* play); +void EnAob01_AfterRace_AfterGivingReward(EnAob01* this, PlayState* play); +void EnAob01_AfterRace_AskToPlayAgain(EnAob01* this, PlayState* play); +void EnAob01_AfterRace_Talk(EnAob01* this, PlayState* play); +s32 EnAob01_PlayerIsHoldingDog(EnAob01* this, PlayState* play); ActorInit En_Aob_01_InitVars = { ACTOR_EN_AOB_01, @@ -46,6 +44,22 @@ ActorInit En_Aob_01_InitVars = { (ActorFunc)EnAob01_Draw, }; +typedef enum { + /* 0 */ EN_AOB01_ANIM_IDLE_1, + /* 1 */ EN_AOB01_ANIM_LAUGH_START, + /* 2 */ EN_AOB01_ANIM_LAUGH_LOOP, + /* 3 */ EN_AOB01_ANIM_SURPRISE_START, + /* 4 */ EN_AOB01_ANIM_SURPRISE_LOOP, + /* 5 */ EN_AOB01_ANIM_IDLE_2, +} EnAob01Animation; + +typedef enum { + /* 0 */ EN_AOB01_EYE_OPEN, + /* 1 */ EN_AOB01_EYE_HALF, + /* 2 */ EN_AOB01_EYE_CLOSED, + /* 3 */ EN_AOB01_EYE_MAX, +} EnAob01EyeTexture; + static AnimationInfo sAnimationInfo[] = { { &gMamamuYanIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, { &gMamamuYanLaughStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, @@ -76,12 +90,16 @@ static ColliderCylinderInit sCylinderInit = { }; typedef struct { - Vec3f unk_00; - s16 unk_04; - s16 unk_06; -} EnAobStruct; + /* 0x0 */ Vec3f pos; + /* 0xC */ s16 rotY; + /* 0xE */ s16 pathIndex; +} DogInfo; // size = 0x10 -static EnAobStruct D_809C384C[] = { +/** + * Stores the starting position, y-rotation, and path index for all 14 dogs in the racetrack. + * This actor is responsible for spawning these dogs; they are not spawned as part of the scene. + */ +static DogInfo sDogInfo[RACEDOG_COUNT] = { { { -4130.0f, 150.0f, 1367.0f }, 84, 0 }, { { -4861.0f, 172.0f, 1606.0f }, 94, 4 }, { { -4139.0f, 155.0f, 2133.0f }, 73, 6 }, { { -4406.0f, 144.0f, 1416.0f }, 88, 2 }, { { -4156.0f, 155.0f, 1731.0f }, 42, 0 }, { { -4033.0f, 157.0f, 1994.0f }, -65, 1 }, @@ -91,105 +109,137 @@ static EnAobStruct D_809C384C[] = { { { -4827.0f, 168.0f, 1328.0f }, 115, 4 }, { { -4130.0f, 150.0f, 1367.0f }, 112, 0 }, }; -void func_809C10B0(EnAob01* this, s32 arg1) { +void EnAob01_Blink(EnAob01* this, s32 maxEyeIndex) { if (DECR(this->blinkTimer) == 0) { this->eyeIndex++; - if (this->eyeIndex >= arg1) { - this->eyeIndex = 0; + if (this->eyeIndex >= maxEyeIndex) { + this->eyeIndex = EN_AOB01_EYE_OPEN; this->blinkTimer = Rand_S16Offset(30, 30); } } } -void func_809C1124(void) { +/** + * Called every frame during the race in order to make in-game time pass. + */ +void EnAob01_AdvanceTime(void) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } -void func_809C1158(EnAob01* this, PlayState* play) { - s32 temp_s0 = ENAOB01_GET_7E00_2(&this->actor); +/** + * Initializes all the paths that the dogs follow. + */ +void EnAob01_InitializeDogPaths(EnAob01* this, PlayState* play) { + s32 pathIndex = ENAOB01_GET_STARTING_DOG_PATH_INDEX(&this->actor); s16 i = 0; - if (temp_s0 != 0x3F) { + if (pathIndex != 0x3F) { do { - this->unk_1D8[i] = SubS_GetPathByIndex(play, temp_s0, 0x3F); - temp_s0 = this->unk_1D8[i]->unk1; + this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, 0x3F); + pathIndex = this->dogPaths[i]->unk1; i++; - } while (temp_s0 != 0xFF); + } while (pathIndex != 0xFF); } } -void func_809C11EC(EnAob01* this, PlayState* play) { +/** + * Spawns the dogs that mill about the racetrack before and after each race. + */ +void EnAob01_SpawnDogs(EnAob01* this, PlayState* play) { s32 enDgParams; s16 i; - func_809C1158(this, play); + EnAob01_InitializeDogPaths(this, play); - for (i = 0; i < ARRAY_COUNT(D_809C384C); i++) { - enDgParams = ENDG_PARAMS(this->unk_1D8[D_809C384C[i].unk_06]->unk1, i); + for (i = 0; i < RACEDOG_COUNT; i++) { + enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->unk1, i); - this->unk_3F8[i] = Actor_SpawnAsChildAndCutscene( - &play->actorCtx, play, ACTOR_EN_DG, D_809C384C[i].unk_00.x, D_809C384C[i].unk_00.y, D_809C384C[i].unk_00.z, - 0, DEG_TO_BINANG(D_809C384C[i].unk_04), 0, enDgParams, (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL); + this->dogs[i] = Actor_SpawnAsChildAndCutscene( + &play->actorCtx, play, ACTOR_EN_DG, sDogInfo[i].pos.x, sDogInfo[i].pos.y, sDogInfo[i].pos.z, 0, + DEG_TO_BINANG(sDogInfo[i].rotY), 0, enDgParams, (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL); } } -void func_809C1304(EnAob01* this, PlayState* play) { +/** + * Spawns the dogs that run around the track during each race. + */ +void EnAob01_SpawnRacedogs(EnAob01* this, PlayState* play) { s16 i; - for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++) { - this->unk_3F8[i] = Actor_SpawnAsChildAndCutscene( - &play->actorCtx, play, ACTOR_EN_RACEDOG, (i * 15.0f) + -3897.0f, 130.0f, 1290.0f - (i * 10.0f), 0, 0x1555, - 0, (i << 5) | ENAOB01_GET_7E00_1(&this->actor), (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL); + for (i = 0; i < RACEDOG_COUNT; i++) { + this->dogs[i] = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_RACEDOG, (i * 15.0f) + -3897.0f, + 130.0f, 1290.0f - (i * 10.0f), 0, 0x1555, 0, + ENRACEDOG_PARAMS(i, ENAOB01_GET_RACEDOG_PATH_INDEX(&this->actor)), + (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL); } } -s32 func_809C1424(EnAob01* this) { +/** + * If the racetrack owner is at the end of her laugh start animation, this function will + * transition her to her laugh loop animation. This function will return true if she is + * *either* in her laugh start or laugh loop animation, false otherwise. + */ +s32 EnAob01_ProcessLaughAnim(EnAob01* this) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_43C].animation); + s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (this->unk_43C == 1) { + if (this->animIndex == EN_AOB01_ANIM_LAUGH_START) { if (curFrame == lastFrame) { - this->unk_43C = 2; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + this->animIndex = EN_AOB01_ANIM_LAUGH_LOOP; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_LOOP); return true; } - } else if (this->unk_43C == 2) { + } else if (this->animIndex == EN_AOB01_ANIM_LAUGH_LOOP) { return true; } + return false; } -s32 func_809C14D0(EnAob01* this) { +/** + * If the racetrack owner is at the end of her idle animation, this function will + * transition her to her surprise start animation. If the racetrack owner is at the + * end of her surprise start animation, this function will transition her to her + * surprise loop animation. This function will return true if she is *either* in + * her surprise start or surprise loop animation, false otherwise. + */ +s32 EnAob01_ProcessSurpriseAnim(EnAob01* this) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_43C].animation); + s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if ((this->unk_43C == 0) || (this->unk_43C == 5)) { + if ((this->animIndex == EN_AOB01_ANIM_IDLE_1) || (this->animIndex == EN_AOB01_ANIM_IDLE_2)) { if (curFrame == lastFrame) { - this->unk_43C = 3; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + this->animIndex = EN_AOB01_ANIM_SURPRISE_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_SURPRISE_START); return true; } - } else if (this->unk_43C == 3) { + } else if (this->animIndex == EN_AOB01_ANIM_SURPRISE_START) { if (curFrame == lastFrame) { - this->unk_43C = 4; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + this->animIndex = EN_AOB01_ANIM_SURPRISE_LOOP; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_SURPRISE_LOOP); return true; } - } else if (this->unk_43C == 4) { + } else if (this->animIndex == EN_AOB01_ANIM_SURPRISE_LOOP) { return true; } + return false; } -s32 func_809C15BC(EnAob01* this) { +/** + * If the racetrack owner is at the end of her current animation, this function will + * transition her to her the idle animation. This function will return true if she is + * in her idle animation, false otherwise. + */ +s32 EnAob01_ProcessIdleAnim(EnAob01* this) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_43C].animation); + s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if ((this->unk_43C != 0) && (this->unk_43C != 5)) { + if ((this->animIndex != EN_AOB01_ANIM_IDLE_1) && (this->animIndex != EN_AOB01_ANIM_IDLE_2)) { if (curFrame == lastFrame) { - this->unk_43C = 5; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5); + this->animIndex = EN_AOB01_ANIM_IDLE_2; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_IDLE_2); return true; } } else { @@ -199,7 +249,7 @@ s32 func_809C15BC(EnAob01* this) { return false; } -void func_809C165C(EnAob01* this, PlayState* play) { +void EnAob01_UpdateCollision(EnAob01* this, PlayState* play) { this->collider.dim.pos.x = this->actor.world.pos.x; this->collider.dim.pos.y = this->actor.world.pos.y; this->collider.dim.pos.z = this->actor.world.pos.z; @@ -207,227 +257,238 @@ void func_809C165C(EnAob01* this, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } -void func_809C16DC(EnAob01* this, PlayState* play) { +/** + * Handles all parts of the conversation with the racetrack owner before the race begins. + */ +void EnAob01_BeforeRace_HandleConversation(EnAob01* this, PlayState* play) { Player* player = GET_PLAYER(play); - switch (this->unk_210) { + switch (this->textId) { case 0: - case 0x3524: - case 0x3535: - case 0x3548: - case 0x3549: - case 0x354A: + case 0x3524: // You can't play if you can't pay! + case 0x3535: // Really? + case 0x3548: // I can't let you play. (Goron) + case 0x3549: // I can't let you play. (Zora) + case 0x354A: // I can't let you play. (Deku) switch (gSaveContext.save.day) { case 1: if (!gSaveContext.save.isNight) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_64_80)) { - SET_WEEKEVENTREG(WEEKEVENTREG_64_80); - this->unk_210 = 0x3520; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_1)) { + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_1); + this->textId = 0x3520; // This is the Doggy Racetrack. (Day 1) } else { - this->unk_210 = 0x352F; + this->textId = 0x352F; // What do you want? } } else { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_01)) { - SET_WEEKEVENTREG(WEEKEVENTREG_65_01); - this->unk_210 = 0x3530; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_1)) { + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_1); + this->textId = 0x3530; // This is the Doggy Racetrack. (Night 1) } else { - this->unk_210 = 0x352F; + this->textId = 0x352F; // What do you want? } } break; case 2: if (!gSaveContext.save.isNight) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_02)) { - SET_WEEKEVENTREG(WEEKEVENTREG_65_02); - this->unk_210 = 0x3531; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_2)) { + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_2); + this->textId = 0x3531; // This is the Doggy Racetrack. (Day 2) } else { - this->unk_210 = 0x352F; + this->textId = 0x352F; // What do you want? } } else { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_04)) { - SET_WEEKEVENTREG(WEEKEVENTREG_65_04); - this->unk_210 = 0x3532; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_2)) { + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_2); + this->textId = 0x3532; // This is the Doggy Racetrack. (Night 2) } else { - this->unk_210 = 0x352F; + this->textId = 0x352F; // What do you want? } } break; case 3: if (!gSaveContext.save.isNight) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_08)) { - SET_WEEKEVENTREG(WEEKEVENTREG_65_08); - this->unk_210 = 0x3533; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_3)) { + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_3); + this->textId = 0x3533; // This is the Doggy Racetrack. (Day 3) } else { - this->unk_210 = 0x352F; + this->textId = 0x352F; // What do you want? } } else { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_10)) { - SET_WEEKEVENTREG(WEEKEVENTREG_65_10); - this->unk_210 = 0x3534; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_3)) { + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_3); + this->textId = 0x3534; // This is the Doggy Racetrack. (Night 3) } else { - this->unk_210 = 0x352F; + this->textId = 0x352F; // What do you want? } } break; } break; - case 0x3520: - case 0x352F: - case 0x3530: - case 0x3531: - case 0x3532: - case 0x3533: - case 0x3534: - this->unk_210 = 0x3521; + case 0x3520: // This is the Doggy Racetrack. (Day 1) + case 0x352F: // What do you want? + case 0x3530: // This is the Doggy Racetrack. (Night 1) + case 0x3531: // This is the Doggy Racetrack. (Day 2) + case 0x3532: // This is the Doggy Racetrack. (Night 2) + case 0x3533: // This is the Doggy Racetrack. (Day 3) + case 0x3534: // This is the Doggy Racetrack. (Night 3) + this->textId = 0x3521; // Do you want to try the dog race? break; - case 0x3521: - if (this->unk_2D2 & 2) { - this->unk_2D2 &= ~2; + case 0x3521: // Do you want to try the dog race? + if (this->stateFlags & ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE) { + this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; switch (player->transformation) { case PLAYER_FORM_GORON: - this->unk_210 = 0x3548; - this->unk_2D2 |= 0x10; + this->textId = 0x3548; // I can't let you play. (Goron) + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; break; case PLAYER_FORM_ZORA: - this->unk_210 = 0x3549; - this->unk_2D2 |= 0x10; + this->textId = 0x3549; // I can't let you play. (Zora) + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; break; case PLAYER_FORM_DEKU: - this->unk_210 = 0x354A; - this->unk_2D2 |= 0x10; + this->textId = 0x354A; // I can't let you play. (Deku) + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; break; case PLAYER_FORM_HUMAN: if (gSaveContext.save.saveInfo.playerData.rupees < 10) { - this->unk_210 = 0x3524; - this->unk_2D2 |= 0x10; + this->textId = 0x3524; // You can't play if you can't pay! + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; } else { - this->unk_210 = 0x3522; - this->unk_2D2 |= 4; - this->unk_2D2 |= 0x10; + this->textId = 0x3522; // Bring me the fastest dog! + this->stateFlags |= ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG; + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; } } } else { - this->unk_2D2 |= 0x10; - this->unk_210 = 0x3535; + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; + this->textId = 0x3535; // Is that dog fine? } break; - case 0x3522: - case 0x3523: - if (this->unk_2D2 & 8) { - this->unk_210 = 0x3525; + case 0x3522: // Bring me the fastest dog! + case 0x3523: // Hurry up and bring me a dog! + if (this->stateFlags & ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG) { + this->textId = 0x3525; // Is that dog okay? break; } - this->unk_210 = 0x3523; - this->unk_2D2 |= 0x40; - this->unk_2D2 |= 0x10; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->textId = 0x3523; // Hurry up and bring me a dog! + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); break; - case 0x3525: - case 0x3526: - if (this->unk_2D2 & 4) { - if (this->unk_2D2 & 8) { - this->unk_210 = 0x3525; + case 0x3525: // Is that dog okay? + case 0x3526: // Don't wait! Hurry up and choose! + if (this->stateFlags & ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG) { + if (this->stateFlags & ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG) { + this->textId = 0x3525; // Is that dog okay? break; } - this->unk_210 = 0x3523; - this->unk_2D2 |= 0x40; - this->unk_2D2 |= 0x10; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->textId = 0x3523; // Hurry up and bring me a dog! + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); break; } - if (this->unk_2D2 & 2) { - this->unk_2D2 &= ~2; - this->unk_210 = 0x3527; + if (this->stateFlags & ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE) { + this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; + this->textId = 0x3527; // If you win, you'll get more than you bet. break; } - this->unk_210 = 0x3526; - this->unk_2D2 |= 0x40; - this->unk_2D2 |= 4; - this->unk_2D2 |= 0x10; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->textId = 0x3526; // Don't wait! Hurry up and choose! + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->stateFlags |= ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG; + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); break; - case 0x3527: - this->unk_210 = 0x3528; + case 0x3527: // If you win, you'll get more than you bet. + this->textId = 0x3528; // How much will you bet? break; - case 0x3528: - if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_434) { - this->unk_210 = 0x3536; - this->unk_2D2 |= 0x40; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + case 0x3528: // How much will you bet? + if (gSaveContext.save.saveInfo.playerData.rupees < this->rupeesBet) { + this->textId = 0x3536; // You don't have enough rupees for that bet. + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); break; } - if (this->unk_434 == 0) { - this->unk_210 = 0x3537; - this->unk_2D2 |= 0x40; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + if (this->rupeesBet == 0) { + this->textId = 0x3537; // You can't race if you don't bet. + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); break; } - gSaveContext.unk_3F5C = this->unk_434; - play->msgCtx.bankRupees = this->unk_434; - this->unk_210 = 0x3529; + gSaveContext.unk_3F5C = this->rupeesBet; + play->msgCtx.bankRupees = this->rupeesBet; + this->textId = 0x3529; // Is that bet okay? break; - case 0x3529: - if (this->unk_2D2 & 2) { - this->unk_2D2 &= ~2; - Rupees_ChangeBy(-this->unk_434); + case 0x3529: // Is that bet okay? + if (this->stateFlags & ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE) { + this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; + Rupees_ChangeBy(-this->rupeesBet); func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->actionFunc = func_809C1C9C; + this->actionFunc = EnAob01_BeforeRace_StartRace; return; } - this->unk_210 = 0x3528; + this->textId = 0x3528; // How much will you bet? break; - case 0x3536: - case 0x3537: - this->unk_210 = 0x3528; + case 0x3536: // You don't have enough rupees for that bet. + case 0x3537: // You can't race if you don't bet. + this->textId = 0x3528; // How much will you bet? break; } - Message_StartTextbox(play, this->unk_210, &this->actor); + Message_StartTextbox(play, this->textId, &this->actor); } -void func_809C1C9C(EnAob01* this, PlayState* play) { +/** + * Once the player's rupees are done counting down, this function will + * reload the racetrack to start the race. + */ +void EnAob01_BeforeRace_StartRace(EnAob01* this, PlayState* play) { if (gSaveContext.rupeeAccumulator == 0) { SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); - this->unk_2D2 |= 0x20; - func_800FD750(0x40); + this->stateFlags |= ENAOB01_FLAG_STARTED_RACE; + func_800FD750(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_64; - gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & (u8)~7) | 2; - gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & 7) | (this->unk_432 * 8); + SET_EVENTINF_DOG_RACE_STATE(EVENTINF_DOG_RACE_STATE_STARTED); + SET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX(this->selectedDogIndex); play->transitionTrigger = TRANS_TRIGGER_START; } } -void func_809C1D64(EnAob01* this, PlayState* play) { +/** + * Handles the player's response to the question of whether or not they want to play again. + * Once the textbox closes, the racetrack owner will go back to being idle. + */ +void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (talkState == TEXT_STATE_CHOICE) { @@ -436,34 +497,38 @@ void func_809C1D64(EnAob01* this, PlayState* play) { case 0: if (gSaveContext.save.saveInfo.playerData.rupees < 10) { play_sound(NA_SE_SY_ERROR); - this->unk_210 = 0x3524; - Message_StartTextbox(play, this->unk_210, &this->actor); + this->textId = 0x3524; // You can't play if you can't pay! + Message_StartTextbox(play, this->textId, &this->actor); } else { func_8019F208(); - this->unk_2D2 |= 4; - this->unk_2D2 |= 0x10; - this->unk_210 = 0x3522; - Message_StartTextbox(play, this->unk_210, &this->actor); - this->actionFunc = func_809C21E0; + this->stateFlags |= ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG; + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; + this->textId = 0x3522; // Bring me the fastest dog! + Message_StartTextbox(play, this->textId, &this->actor); + this->actionFunc = EnAob01_BeforeRace_Talk; } break; case 1: func_8019F230(); - this->unk_210 = 0x3535; - Message_StartTextbox(play, this->unk_210, &this->actor); + this->textId = 0x3535; // Really? + Message_StartTextbox(play, this->textId, &this->actor); break; } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->unk_210 = 0; - this->actionFunc = func_809C2060; + this->textId = 0; + this->actionFunc = EnAob01_BeforeRace_Idle; } } -void func_809C1EC8(EnAob01* this, PlayState* play) { +/** + * Handles various things that are common to all action functions, like tracking the + * player, blinking, handling collision, etc. + */ +void EnAob01_UpdateCommon(EnAob01* this, PlayState* play) { static TrackOptionsSet sTrackOptions = { { 0xFA0, 4, 1, 3 }, { 0x1770, 4, 1, 6 }, @@ -474,6 +539,7 @@ void func_809C1EC8(EnAob01* this, PlayState* play) { Vec3f point; SkelAnime_Update(&this->skelAnime); + if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; @@ -488,124 +554,152 @@ void func_809C1EC8(EnAob01* this, PlayState* play) { Math_SmoothStepToS(&this->torsoRot.x, 0, 4, 0x3E8, 1); Math_SmoothStepToS(&this->torsoRot.y, 0, 4, 0x3E8, 1); } - func_809C10B0(this, 3); - SubS_FillLimbRotTables(play, this->unk_2F8, this->unk_318, ARRAY_COUNT(this->unk_2F8)); - func_809C165C(this, play); + + EnAob01_Blink(this, EN_AOB01_EYE_MAX); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + EnAob01_UpdateCollision(this, play); + + // This specific code ensures that in-game time passes during the race. if (player->stateFlags1 & PLAYER_STATE1_20) { - func_809C1124(); + EnAob01_AdvanceTime(); } } -void func_809C2060(EnAob01* this, PlayState* play) { - if (func_809C15BC(this)) { - if (func_809C2EC4(this, play) && !(this->unk_2D2 & 0x100)) { +/** + * Stand around and wait until either the player talks to the racetrack owner or until + * the player bumps into them while holding a dog. In either case, the racetrack owner + * will then start talking with the player. + */ +void EnAob01_BeforeRace_Idle(EnAob01* this, PlayState* play) { + if (EnAob01_ProcessIdleAnim(this)) { + if (EnAob01_PlayerIsHoldingDog(this, play) && !(this->stateFlags & ENAOB01_FLAG_PLAYER_CAN_TALK)) { if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) { this->actor.flags |= ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 100.0f); - this->unk_2D2 |= 8; - this->actionFunc = func_809C21E0; + this->stateFlags |= ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG; + this->actionFunc = EnAob01_BeforeRace_Talk; } - } else if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_2D2 & 0x100)) { - this->unk_2D2 &= ~0x100; - this->unk_2E6 = this->trackTarget; - this->unk_2EC = this->headRot; - this->unk_2F2 = this->torsoRot; - func_809C16DC(this, play); - this->actionFunc = func_809C21E0; + } else if (Actor_ProcessTalkRequest(&this->actor, &play->state) && + (this->stateFlags & ENAOB01_FLAG_PLAYER_CAN_TALK)) { + this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CAN_TALK; + this->prevTrackTarget = this->trackTarget; + this->prevHeadRot = this->headRot; + this->prevTorsoRot = this->torsoRot; + EnAob01_BeforeRace_HandleConversation(this, play); + this->actionFunc = EnAob01_BeforeRace_Talk; } else { - this->unk_2D2 &= ~0x100; + this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CAN_TALK; if ((this->actor.xzDistToPlayer < 100.0f) && !(this->collider.base.ocFlags2 & OC2_HIT_PLAYER)) { - this->unk_2D2 |= 0x100; + this->stateFlags |= ENAOB01_FLAG_PLAYER_CAN_TALK; func_800B8614(&this->actor, play, 100.0f); } } } } -void func_809C21E0(EnAob01* this, PlayState* play) { +/** + * Handles the actual action of talking with the player before the race begins. + */ +void EnAob01_BeforeRace_Talk(EnAob01* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 4000, 1); - if ((this->unk_2D2 & 8) && !func_809C2EC4(this, play)) { - if ((this->unk_210 != 0) && (this->unk_210 != 0x3535) && (this->unk_210 != 0x3524) && - (this->unk_210 != 0x3548) && (this->unk_210 != 0x3549) && (this->unk_210 != 0x354A)) { - this->unk_210 = 0x3523; + //! @bug: This block of code acts as a failsafe for when the player triggered this conversation by + //! bumping into the racetrack owner while holding the dog and, at the same time, threw or dropped + //! the dog frame-perfectly by pressing A. In this case, the code successfully returns the racetrack + //! owner to her idle state. Unfortunately, the player can also drop the dog by shielding. If this + //! shield drop is done frame-perfectly, then the below code will not function properly and will + //! instead softlock the game. + if ((this->stateFlags & ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG) && !EnAob01_PlayerIsHoldingDog(this, play)) { + if ((this->textId != 0) && (this->textId != 0x3535) && (this->textId != 0x3524) && (this->textId != 0x3548) && + (this->textId != 0x3549) && (this->textId != 0x354A)) { + this->textId = 0x3523; // Hurry up and bring me a dog! } + this->actor.textId = 0; - this->unk_2D2 &= ~8; + this->stateFlags &= ~ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG; this->actor.flags &= ~ACTOR_FLAG_10000; - this->actionFunc = func_809C2060; + this->actionFunc = EnAob01_BeforeRace_Idle; return; } - if (this->unk_2D2 & 0x40) { - if (!func_809C1424(this)) { + if (this->stateFlags & ENAOB01_FLAG_LAUGH) { + if (!EnAob01_ProcessLaughAnim(this)) { return; } - } else if (!func_809C15BC(this)) { + } else if (!EnAob01_ProcessIdleAnim(this)) { return; } - if (this->unk_2D2 & 8) { + if (this->stateFlags & ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; func_80123E90(play, &this->actor); - if (this->unk_2D2 & 4) { - func_809C16DC(this, play); - this->unk_2D2 &= ~4; + if (this->stateFlags & ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG) { + EnAob01_BeforeRace_HandleConversation(this, play); + this->stateFlags &= ~ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG; } else { - this->unk_2D2 |= 0x10; - this->unk_2D2 |= 0x40; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); + // Put my dog down! Message_StartTextbox(play, 0x354B, &this->actor); } - this->unk_2D2 &= ~8; + + this->stateFlags &= ~ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG; } } else if (talkState == TEXT_STATE_CHOICE) { if (Message_ShouldAdvance(play)) { - this->unk_2D2 &= ~0x40; + this->stateFlags &= ~ENAOB01_FLAG_LAUGH; switch (play->msgCtx.choiceIndex) { case 0: func_8019F208(); - this->unk_2D2 |= 2; - func_809C16DC(this, play); + this->stateFlags |= ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; + EnAob01_BeforeRace_HandleConversation(this, play); break; case 1: func_8019F230(); - func_809C16DC(this, play); + EnAob01_BeforeRace_HandleConversation(this, play); break; } } } else if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { - this->unk_2D2 &= ~0x40; - if (this->unk_2D2 & 0x10) { - this->unk_2D2 &= ~0x10; + this->stateFlags &= ~ENAOB01_FLAG_LAUGH; + if (this->stateFlags & ENAOB01_FLAG_CONVERSATION_OVER) { + this->stateFlags &= ~ENAOB01_FLAG_CONVERSATION_OVER; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->actionFunc = func_809C2060; + this->actionFunc = EnAob01_BeforeRace_Idle; } else { - func_809C16DC(this, play); + EnAob01_BeforeRace_HandleConversation(this, play); } } } else if ((talkState == TEXT_STATE_14) && Message_ShouldAdvance(play)) { - this->unk_2D2 &= ~0x40; - this->unk_434 = play->msgCtx.bankRupeesSelected; - func_809C16DC(this, play); + this->stateFlags &= ~ENAOB01_FLAG_LAUGH; + this->rupeesBet = play->msgCtx.bankRupeesSelected; + EnAob01_BeforeRace_HandleConversation(this, play); } } -s32 func_809C2504(EnAob01* this, PlayState* play) { +/** + * Checks all dog instances to see if any of them have reached a certain point along the racetrack, + * as specified by the cutscene's custom value. Once one of them has reached that point, this function + * will switch to following that dog and set the csId to correspond to the next cutscene in the race + * sequence; this usually appears to the user as a cut to a different camera angle. Returns true if any + * dog has reached the specified point, false otherwise. + */ +s32 EnAob01_Race_DogHasReachedNextCutsceneTrigger(EnAob01* this, PlayState* play) { Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first; while (npc != NULL) { if ((npc->id == ACTOR_EN_RACEDOG) && (CutsceneManager_GetCutsceneCustomValue(this->csId) == ((EnRacedog*)npc)->currentPoint)) { CutsceneManager_Stop(this->csId); - this->unk_3F4 = npc; + this->dogToFollow = npc; this->csId = CutsceneManager_GetAdditionalCsId(this->csId); return true; } @@ -615,12 +709,17 @@ s32 func_809C2504(EnAob01* this, PlayState* play) { return false; } -s32 func_809C2594(EnAob01* this, PlayState* play) { +/** + * Finds the dog that the player selected and starts following it. Returns true if it finds the player's + * selected dog and false otherwise, though nothing actually cares about this return value, and it should + * always be true in normal function (it is impossible to start a race without selecting a dog). + */ +s32 EnAob01_Race_FollowSelectedDog(EnAob01* this, PlayState* play) { Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first; while (npc != NULL) { if ((npc->id == ACTOR_EN_RACEDOG) && (((EnRacedog*)npc)->index == ((EnRacedog*)npc)->selectedDogIndex)) { - this->unk_3F4 = npc; + this->dogToFollow = npc; return true; } npc = npc->next; @@ -629,28 +728,41 @@ s32 func_809C2594(EnAob01* this, PlayState* play) { return false; } -s32 func_809C25E4(EnAob01* this, PlayState* play) { +/** + * Returns true if the race should be ended, which can happen in either of the following circumstances: + * - All `RACEDOG_COUNT` dogs have finished the race. + * - At least 10 dogs have finished the race, and at least 500 frames have passed since the 10th place + * dog finished. This is controlled by the forceRaceEndTimer, which is set in EnAob01_Init. + */ +s32 EnAob01_Race_IsRaceOver(EnAob01* this, PlayState* play) { Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first; - s16 count = 0; + s16 finishedCount = 0; while (npc != NULL) { if ((npc->id == ACTOR_EN_RACEDOG) && (((EnRacedog*)npc)->raceStatus == RACEDOG_RACE_STATUS_FINISHED)) { - count++; + finishedCount++; } npc = npc->next; } - if (count >= 14) { + if (finishedCount >= RACEDOG_COUNT) { return true; } - if ((count >= 10) && (DECR(this->unk_440) == 0)) { + if ((finishedCount >= 10) && (DECR(this->forceRaceEndTimer) == 0)) { return true; } + return false; } -s32 func_809C2680(EnAob01* this) { +/** + * If the current cutscene has a positive length, and if the current cutscene is over (in other words, + * if the length has elapsed), this function will set the csId to the next cutscene in the race sequence + * and return true. In all other cases, it will return false. Note that *all* of the race cutscenes have + * a length of -1, so in practice, this function never does anything and always returns false. + */ +s32 EnAob01_Race_CurrentCutsceneHasEnded(EnAob01* this) { if ((CutsceneManager_GetLength(this->csId) > 0) && (CutsceneManager_GetCurrentCsId() != this->csId)) { this->csId = CutsceneManager_GetAdditionalCsId(this->csId); return true; @@ -658,25 +770,40 @@ s32 func_809C2680(EnAob01* this) { return false; } -void func_809C26E4(EnAob01* this, PlayState* play) { +/** + * The only way we end up inside this function is if we tried to start a cutscene with a custom + * value of 255. This does not correspond to a point on the racetrack, nor is it the special value + * of 99, which is used to signal the race ending cutscene. Thus, whatever cutscene we're trying + * to play here is almost certainly not a race cutscene, so this function just skips it and tries + * to play the next cutscene. + */ +void EnAob01_Race_SkipNonRaceCutscene(EnAob01* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->csId = CutsceneManager_GetAdditionalCsId(this->csId); - this->actionFunc = func_809C2824; + this->actionFunc = EnAob01_Race_StartCutscene; } -void func_809C2730(EnAob01* this, PlayState* play) { - if (func_809C2504(this, play) || func_809C2680(this)) { +/** + * Wait around doing nothing until the next cutscene is triggered (in practice, this only happens + * when a dog reaches the next cutscene trigger), at which point we queue up the next cutscene. + */ +void EnAob01_Race_HandleRaceCutscene(EnAob01* this, PlayState* play) { + if (EnAob01_Race_DogHasReachedNextCutsceneTrigger(this, play) || EnAob01_Race_CurrentCutsceneHasEnded(this)) { CutsceneManager_Queue(this->csId); - this->actionFunc = func_809C2824; + this->actionFunc = EnAob01_Race_StartCutscene; } } -void func_809C2788(EnAob01* this, PlayState* play) { - this->unk_2D2 |= 0x20; - if (func_809C25E4(this, play)) { +/** + * Waits until the race is over, then reloads the racetrack to return it + * to its regular playable state. + */ +void EnAob01_Race_HandleRaceEndCutscene(EnAob01* this, PlayState* play) { + this->stateFlags |= ENAOB01_FLAG_STARTED_RACE; + if (EnAob01_Race_IsRaceOver(this, play)) { if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_HORSE_GOAL) { play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1); - gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & (u8)~7) | 3; + SET_EVENTINF_DOG_RACE_STATE(EVENTINF_DOG_RACE_STATE_ENDED); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; @@ -684,93 +811,109 @@ void func_809C2788(EnAob01* this, PlayState* play) { } } -void func_809C2824(EnAob01* this, PlayState* play) { +/** + * Starts the cutscene specified by the csId and switches to an appropriate + * action function based on the cutscene's custom value. + */ +void EnAob01_Race_StartCutscene(EnAob01* this, PlayState* play) { if (CutsceneManager_IsNext(this->csId)) { - CutsceneManager_Start(this->csId, this->unk_3F4); + CutsceneManager_Start(this->csId, this->dogToFollow); switch (CutsceneManager_GetCutsceneCustomValue(this->csId)) { case 255: - this->actionFunc = func_809C26E4; + this->actionFunc = EnAob01_Race_SkipNonRaceCutscene; break; case 99: - this->actionFunc = func_809C2788; + this->actionFunc = EnAob01_Race_HandleRaceEndCutscene; break; default: - this->actionFunc = func_809C2730; + this->actionFunc = EnAob01_Race_HandleRaceCutscene; } } else { CutsceneManager_Queue(this->csId); } } -void func_809C28B8(EnAob01* this, PlayState* play) { +/** + * Tells the player how their selected dog did in the race and gives the player + * rupees depending on their performance. If their dog placed 1st, they will + * receive triple the rupees they bet. If their dog places 2nd, they will receive + * double the rupees they bet. If their dog places 3rd through 5th, they will + * receive the same number of rupees they bet. + */ +void EnAob01_AfterRace_GiveRaceResult(EnAob01* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; func_80123E90(play, &this->actor); - this->unk_434 = gSaveContext.unk_3F5C; - switch ((gSaveContext.eventInf[0] & 0xF8) >> 3) { + this->rupeesBet = gSaveContext.unk_3F5C; + switch (GET_EVENTINF_DOG_RACE_RACE_STANDING) { case 1: - this->unk_210 = 0x352A; - this->unk_2D2 |= 0x80; - this->unk_434 *= 3; - Rupees_ChangeBy(this->unk_434); - play->msgCtx.bankRupees = this->unk_434; + this->textId = 0x352A; // You took 1st place! + this->stateFlags |= ENAOB01_FLAG_SURPRISE; + this->rupeesBet *= 3; + Rupees_ChangeBy(this->rupeesBet); + play->msgCtx.bankRupees = this->rupeesBet; break; case 2: - this->unk_210 = 0x352B; - this->unk_2D2 |= 0x80; - this->unk_434 *= 2; - Rupees_ChangeBy(this->unk_434); - play->msgCtx.bankRupees = this->unk_434; + this->textId = 0x352B; // You took 2nd place! + this->stateFlags |= ENAOB01_FLAG_SURPRISE; + this->rupeesBet *= 2; + Rupees_ChangeBy(this->rupeesBet); + play->msgCtx.bankRupees = this->rupeesBet; break; case 3: case 4: case 5: - this->unk_210 = 0x352C; - Rupees_ChangeBy(this->unk_434); + this->textId = 0x352C; // I'll give you back what you bet. + Rupees_ChangeBy(this->rupeesBet); break; default: - this->unk_210 = 0x352D; - this->unk_2D2 |= 0x40; - this->unk_43C = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->textId = 0x352D; // Bad choice! + this->stateFlags |= ENAOB01_FLAG_LAUGH; + this->animIndex = EN_AOB01_ANIM_LAUGH_START; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_START); break; } - Message_StartTextbox(play, this->unk_210, &this->actor); - this->actionFunc = func_809C2D0C; + Message_StartTextbox(play, this->textId, &this->actor); + this->actionFunc = EnAob01_AfterRace_Talk; } else if (this->actor.xzDistToPlayer < 100.0f) { func_800B8614(&this->actor, play, 100.0f); } } -void func_809C2A64(EnAob01* this, PlayState* play) { +/** + * Gives the player the reward for winning 150 or more rupees from the dog race. The first + * time this happens, the player will receive a Heart Piece; any other time, they will + * instead receive a Red Rupee. + */ +void EnAob01_AfterRace_GiveReward(EnAob01* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); - if (func_809C15BC(this)) { + if (EnAob01_ProcessIdleAnim(this)) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - this->unk_434 = 0; + this->rupeesBet = 0; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; } if (Actor_HasParent(&this->actor, play)) { - this->trackTarget = this->unk_2E6; - this->headRot = this->unk_2EC; - this->torsoRot = this->unk_2F2; + this->trackTarget = this->prevTrackTarget; + this->headRot = this->prevHeadRot; + this->torsoRot = this->prevTorsoRot; this->actor.parent = NULL; this->actor.shape.rot.y = this->actor.world.rot.y; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) { - this->actionFunc = func_809C2BE4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE)) { + this->actionFunc = EnAob01_AfterRace_AfterGivingReward; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_08_20); - this->actionFunc = func_809C2BE4; + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE); + this->actionFunc = EnAob01_AfterRace_AfterGivingReward; } - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE)) { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f); @@ -778,7 +921,12 @@ void func_809C2A64(EnAob01* this, PlayState* play) { } } -void func_809C2BE4(EnAob01* this, PlayState* play) { +/** + * If the current time is after the racetrack closes, kick the player out. + * Otherwise, ask the player if they want to play again. This function is + * only used when the player has won the 150 rupee reward. + */ +void EnAob01_AfterRace_AfterGivingReward(EnAob01* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { @@ -790,51 +938,63 @@ void func_809C2BE4(EnAob01* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); } - this->unk_210 = 0; + this->textId = 0; func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); - gSaveContext.eventInf[0] &= (u8)~7; - this->actionFunc = func_809C2C9C; + SET_EVENTINF_DOG_RACE_STATE(EVENTINF_DOG_RACE_STATE_NOT_STARTED); + this->actionFunc = EnAob01_AfterRace_AskToPlayAgain; } } -void func_809C2C9C(EnAob01* this, PlayState* play) { +/** + * Ask if the player wants to play again. This function is only used when + * the player has won the 150 rupee reward. + */ +void EnAob01_AfterRace_AskToPlayAgain(EnAob01* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - this->unk_210 = 0x354C; - Message_ContinueTextbox(play, this->unk_210); - this->actionFunc = func_809C1D64; + this->textId = 0x354C; // Want to play again? + Message_ContinueTextbox(play, this->textId); + this->actionFunc = EnAob01_BeforeRace_RespondToPlayAgainQuestion; } else { func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } -void func_809C2D0C(EnAob01* this, PlayState* play) { +/** + * Handles the conversation the racetrack owner has with the player after the race + * is over. If the player won 150 or more rupees, this function will transition to + * the action function that gives them the reward. If the player did *not* win 150 + * or more rupees, then if the current time is after the racetrack closes, this + * kicks the player out. Otherwise, this asks the player if they want to play again. + * Much of the logic here is duplicated in the above two functions. + */ +void EnAob01_AfterRace_Talk(EnAob01* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 4000, 1); - if (this->unk_2D2 & 0x40) { - if (!func_809C1424(this)) { + if (this->stateFlags & ENAOB01_FLAG_LAUGH) { + if (!EnAob01_ProcessLaughAnim(this)) { return; } - } else if (this->unk_2D2 & 0x80) { - if (!func_809C14D0(this)) { + } else if (this->stateFlags & ENAOB01_FLAG_SURPRISE) { + if (!EnAob01_ProcessSurpriseAnim(this)) { return; } } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - this->unk_2D2 &= ~0x40; - this->unk_2D2 &= ~0x80; - if (this->unk_434 >= 150) { - this->unk_210 = 0x352E; - Message_StartTextbox(play, this->unk_210, &this->actor); - this->actionFunc = func_809C2A64; + this->stateFlags &= ~ENAOB01_FLAG_LAUGH; + this->stateFlags &= ~ENAOB01_FLAG_SURPRISE; + if (this->rupeesBet >= 150) { + this->textId = 0x352E; // You won over 150 rupees! + Message_StartTextbox(play, this->textId, &this->actor); + this->actionFunc = EnAob01_AfterRace_GiveReward; } else { - this->trackTarget = this->unk_2E6; - this->headRot = this->unk_2EC; - this->torsoRot = this->unk_2F2; + this->trackTarget = this->prevTrackTarget; + this->headRot = this->prevHeadRot; + this->torsoRot = this->prevTorsoRot; - this->unk_434 = 0; + this->rupeesBet = 0; this->actor.shape.rot.y = this->actor.world.rot.y; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); @@ -844,35 +1004,40 @@ void func_809C2D0C(EnAob01* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); } - this->unk_210 = 0x354C; - Message_StartTextbox(play, this->unk_210, &this->actor); - this->actionFunc = func_809C1D64; - gSaveContext.eventInf[0] &= (u8)~7; + this->textId = 0x354C; // Want to play again? + Message_StartTextbox(play, this->textId, &this->actor); + this->actionFunc = EnAob01_BeforeRace_RespondToPlayAgainQuestion; + SET_EVENTINF_DOG_RACE_STATE(EVENTINF_DOG_RACE_STATE_NOT_STARTED); } } } -s32 func_809C2EC4(EnAob01* this, PlayState* play) { +s32 EnAob01_PlayerIsHoldingDog(EnAob01* this, PlayState* play) { Actor* dog = play->actorCtx.actorLists[ACTORCAT_ENEMY].first; while (dog != NULL) { if (dog->id == ACTOR_EN_DG) { - this->unk_432 = ((EnDg*)dog)->selectedDogIndex; - if (this->unk_432 == -1) { + this->selectedDogIndex = ((EnDg*)dog)->selectedDogIndex; + if (this->selectedDogIndex == -1) { return false; } - if (this->unk_432 == ENDG_GET_INDEX(dog)) { + if (this->selectedDogIndex == ENDG_GET_INDEX(dog)) { return true; } } + dog = dog->next; } return false; } -void func_809C2F34(EnAob01* this, PlayState* play) { +/** + * Moves the player and racetrack owner to the center of the racetrack + * (out of the way of the dogs) and stops drawing the player. + */ +void EnAob01_Race_HidePlayer(EnAob01* this, PlayState* play) { Player* player = GET_PLAYER(play); player->actor.world.pos.x = -4134.0f; @@ -885,40 +1050,48 @@ void func_809C2F34(EnAob01* this, PlayState* play) { this->actor.prevPos = this->actor.world.pos; } -void func_809C2FA0(void) { +/** + * Generates a randomized list of dog text offsets and stores them in weekEventRegs. + * EnDg uses these text offsets to determine what text to show when the player picks + * the dog up while equipped with the Mask of Truth, and EnRacedog uses them to + * determine what condition the dog is in. + */ +void EnAob01_InitializeDogTextOffsets(void) { u8 i; u8 rand; - u8 index; - u8 orig; - u8 orig2; - u8 sp44[7]; - u8 sp34[] = { + u8 dogTextOffsetsTemp; + u8 packedDogTextOffsets[(RACEDOG_COUNT + 1) / 2]; + u8 dogTextOffsets[RACEDOG_COUNT] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, }; - for (i = 0; i < ARRAY_COUNT(sp34); i++) { - rand = Rand_ZeroFloat(14.0f); - orig = sp34[i]; + // Swap around the dog text offsets randomly 14 times. + for (i = 0; i < RACEDOG_COUNT; i++) { + rand = Rand_ZeroFloat(RACEDOG_COUNT); - sp34[i] = sp34[rand]; - sp34[rand] = orig; + dogTextOffsetsTemp = dogTextOffsets[i]; + dogTextOffsets[i] = dogTextOffsets[rand]; + dogTextOffsets[rand] = dogTextOffsetsTemp; } - for (i = 0; i < ARRAY_COUNT(sp44); i++) { - gSaveContext.save.saveInfo.weekEventReg[42 + i] = 0; - sp44[i] = 0; + // Clear out all weekEventRegs related to the dog text offsets. + for (i = 0; i < ARRAY_COUNT(packedDogTextOffsets); i++) { + CLEAR_WEEKEVENTREG_DOG_RACE_TEXT_OFFSETS(i); + packedDogTextOffsets[i] = 0; } - for (i = 0; i < ARRAY_COUNT(sp34); i++) { - orig2 = sp34[i]; - index = i / 2; + // Go through all the dog text offsets and pack them into weekEventRegs. + for (i = 0; i < RACEDOG_COUNT; i++) { + u8 dogTextOffsetsTemp = dogTextOffsets[i]; + u8 j = i / 2; if (i % 2) { - sp44[index] |= orig2 << 0x4; - gSaveContext.save.saveInfo.weekEventReg[42 + index] = - ((void)0, gSaveContext.save.saveInfo.weekEventReg[42 + index]) | sp44[index]; + //! @note sets text offsets for both even and odd entry. + //! Requires `RACEDOG_COUNT` to be even to work properly. + packedDogTextOffsets[j] |= dogTextOffsetsTemp << 4; + SET_WEEKEVENTREG_DOG_RACE_TEXT_OFFSETS(j, packedDogTextOffsets[j]); } else { - sp44[index] |= orig2; + packedDogTextOffsets[j] |= dogTextOffsetsTemp; } } } @@ -932,36 +1105,36 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { MAMAMU_YAN_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->unk_43C = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = EN_AOB01_ANIM_IDLE_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_IDLE_1); Actor_SetScale(&this->actor, 0.01f); - switch (gSaveContext.eventInf[0] & 7) { - case 0: - func_809C2FA0(); - func_809C11EC(this, play); + switch (GET_EVENTINF_DOG_RACE_STATE) { + case EVENTINF_DOG_RACE_STATE_NOT_STARTED: + EnAob01_InitializeDogTextOffsets(); + EnAob01_SpawnDogs(this, play); this->actor.flags |= ACTOR_FLAG_1; - this->actionFunc = func_809C2060; + this->actionFunc = EnAob01_BeforeRace_Idle; break; - case 2: - this->unk_440 = 500; - func_809C1304(this, play); + case EVENTINF_DOG_RACE_STATE_STARTED: + this->forceRaceEndTimer = 500; + EnAob01_SpawnRacedogs(this, play); this->actor.draw = NULL; this->csId = this->actor.csId; - func_809C2594(this, play); + EnAob01_Race_FollowSelectedDog(this, play); CutsceneManager_Queue(this->csId); this->actor.flags &= ~ACTOR_FLAG_1; - func_809C2F34(this, play); - this->actionFunc = func_809C2824; + EnAob01_Race_HidePlayer(this, play); + this->actionFunc = EnAob01_Race_StartCutscene; break; - case 3: - func_809C2FA0(); - func_809C11EC(this, play); + case EVENTINF_DOG_RACE_STATE_ENDED: + EnAob01_InitializeDogTextOffsets(); + EnAob01_SpawnDogs(this, play); this->actor.flags |= ACTOR_FLAG_1; this->actor.flags |= ACTOR_FLAG_10000; - this->actionFunc = func_809C28B8; + this->actionFunc = EnAob01_AfterRace_GiveRaceResult; break; } } @@ -969,9 +1142,10 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { void EnAob01_Destroy(Actor* thisx, PlayState* play) { EnAob01* this = THIS; - if (!(this->unk_2D2 & 0x20)) { + if (!(this->stateFlags & ENAOB01_FLAG_STARTED_RACE)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); } + Collider_DestroyCylinder(play, &this->collider); } @@ -979,7 +1153,7 @@ void EnAob01_Update(Actor* thisx, PlayState* play) { EnAob01* this = THIS; this->actionFunc(this, play); - func_809C1EC8(this, play); + EnAob01_UpdateCommon(this, play); } s32 EnAob01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { @@ -1014,18 +1188,19 @@ s32 EnAob01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if ((limbIndex == MAMAMU_YAN_LIMB_TORSO) || (limbIndex == MAMAMU_YAN_LIMB_LEFT_UPPER_ARM) || (limbIndex == MAMAMU_YAN_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)Math_SinS(this->unk_2F8[limbIndex]) * 200; - rot->z += (s16)Math_CosS(this->unk_318[limbIndex]) * 200; + rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 200; + rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 200; } + return false; } void EnAob01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static Vec3f D_809C3968 = { 0.0f, 0.0f, 0.0f }; + static Vec3f sFocusOffset = { 0.0f, 0.0f, 0.0f }; EnAob01* this = THIS; if (limbIndex == MAMAMU_YAN_LIMB_HEAD) { - Matrix_MultVec3f(&D_809C3968, &this->actor.focus.pos); + Matrix_MultVec3f(&sFocusOffset, &this->actor.focus.pos); } } diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h index 5432f74ae..a550fd0d3 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h @@ -8,38 +8,56 @@ struct EnAob01; typedef void (*EnAob01ActionFunc)(struct EnAob01*, PlayState*); -#define ENAOB01_GET_7E00_1(thisx) ((thisx)->params & 0x7E00) -#define ENAOB01_GET_7E00_2(thisx) (((thisx)->params & 0x7E00) >> 9) +// This needs to be kept in sync with the number of weekEventRegs used to store the text ID offsets for +// the race dogs. In particular, there needs to be one weekEventReg for every two dogs. This needs to be +// an even number to ensure that all text ID offsets are created (see EnAob01_InitializeDogTextOffsets). +#define RACEDOG_COUNT 14 + +#define ENAOB01_GET_STARTING_DOG_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +//! @bug This should be shifted up by 1 to match how EnRacedog expects the path index to be supplied. +//! It doesn't cause any problems in the final game because every time EnAob01 is spawned, all the +//! bits here are zero. +#define ENAOB01_GET_RACEDOG_PATH_INDEX(thisx) ((thisx)->params & 0x7E00) + +#define ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE (1 << 1) +#define ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG (1 << 2) +#define ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG (1 << 3) +#define ENAOB01_FLAG_CONVERSATION_OVER (1 << 4) +#define ENAOB01_FLAG_STARTED_RACE (1 << 5) +#define ENAOB01_FLAG_LAUGH (1 << 6) +#define ENAOB01_FLAG_SURPRISE (1 << 7) +#define ENAOB01_FLAG_PLAYER_CAN_TALK (1 << 8) typedef struct EnAob01 { /* 0x000 */ Actor actor; /* 0x144 */ EnAob01ActionFunc actionFunc; /* 0x148 */ SkelAnime skelAnime; /* 0x18C */ ColliderCylinder collider; - /* 0x1D8 */ Path* unk_1D8[14]; - /* 0x210 */ u16 unk_210; + /* 0x1D8 */ Path* dogPaths[RACEDOG_COUNT]; + /* 0x210 */ u16 textId; /* 0x212 */ Vec3s jointTable[MAMAMU_YAN_LIMB_MAX]; /* 0x272 */ Vec3s morphTable[MAMAMU_YAN_LIMB_MAX]; - /* 0x2D2 */ u16 unk_2D2; + /* 0x2D2 */ u16 stateFlags; /* 0x2D4 */ Vec3s trackTarget; /* 0x2DA */ Vec3s headRot; /* 0x2E0 */ Vec3s torsoRot; - /* 0x2E6 */ Vec3s unk_2E6; - /* 0x2EC */ Vec3s unk_2EC; - /* 0x2F2 */ Vec3s unk_2F2; - /* 0x2F8 */ s16 unk_2F8[MAMAMU_YAN_LIMB_MAX]; - /* 0x318 */ s16 unk_318[MAMAMU_YAN_LIMB_MAX]; + /* 0x2E6 */ Vec3s prevTrackTarget; + /* 0x2EC */ Vec3s prevHeadRot; + /* 0x2F2 */ Vec3s prevTorsoRot; + /* 0x2F8 */ s16 limbRotTableY[MAMAMU_YAN_LIMB_MAX]; + /* 0x318 */ s16 limbRotTableZ[MAMAMU_YAN_LIMB_MAX]; /* 0x338 */ UNK_TYPE1 unk338[0xB6]; /* 0x3EE */ s16 eyeIndex; /* 0x3F0 */ s16 blinkTimer; - /* 0x3F4 */ Actor* unk_3F4; - /* 0x3F8 */ Actor* unk_3F8[14]; + /* 0x3F4 */ Actor* dogToFollow; + /* 0x3F8 */ Actor* dogs[RACEDOG_COUNT]; /* 0x430 */ s16 csId; - /* 0x432 */ s16 unk_432; - /* 0x434 */ s32 unk_434; + /* 0x432 */ s16 selectedDogIndex; + /* 0x434 */ s32 rupeesBet; // Also used for determining how many rupees to give to the player if they place 1st-5th in the race. /* 0x438 */ UNK_TYPE1 unk438[4]; - /* 0x43C */ s32 unk_43C; - /* 0x440 */ s16 unk_440; + /* 0x43C */ s32 animIndex; + /* 0x440 */ s16 forceRaceEndTimer; } EnAob01; // size = 0x444 #endif // Z_EN_AOB_01_H 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 963bc4104..702e07f32 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -4,7 +4,6 @@ * Description: Bad Bat */ -#include "prevent_bss_reordering.h" #include "z_en_bat.h" #include "objects/object_bat/object_bat.h" 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 360cf2c49..8a6ae63e8 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -5,13 +5,12 @@ */ #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 THIS ((EnDg*)thisx) -//! TODO: this file require macros for its uses of weekEventReg - void EnDg_Init(Actor* thisx, PlayState* play); void EnDg_Destroy(Actor* thisx, PlayState* play); void EnDg_Update(Actor* thisx, PlayState* play); @@ -417,20 +416,13 @@ void EnDg_SetupIdleMove(EnDg* this, PlayState* play) { /** * Updates the text ID in sRacetrackDogInfo based on what was set in the weekEventRegs by - * En_Aob_01. This makes it sp the proper message can be displayed when the player picks up + * En_Aob_01. This makes it so the proper message can be displayed when the player picks up * the dog with the Mask of Truth equipped. */ void EnDg_UpdateTextId(EnDg* this) { - if (this->index < 14) { - // Assuming that the weekEventRegs haven't been tampered with, then this will produce a text ID in - // the range of 0x3538 to 0x3545. - if (this->index % 2) { - sRacetrackDogInfo[this->index].textId = - 0x3538 + ((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)] & 0xF0) >> 4); - } else { - sRacetrackDogInfo[this->index].textId = - 0x3538 + (gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)] & 0x0F); - } + if (this->index < RACEDOG_COUNT) { + // This will produce a text ID in the range of 0x3538 to 0x3545. + sRacetrackDogInfo[this->index].textId = GET_WEEKEVENTREG_DOG_RACE_TEXT(this->index, 0x3538); } else { Actor_Kill(&this->actor); } 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 df4f17d4c..f12599df7 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -792,7 +792,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->stateFlags = 0; } - if (((play->sceneId == SCENE_KOEPONARACE) && (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_START)) || + if (((play->sceneId == SCENE_KOEPONARACE) && + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) || ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0))) { this->stateFlags |= ENHORSE_FLAG_25; } @@ -2471,7 +2472,7 @@ void func_808819D8(EnHorse* this, PlayState* play) { func_8088168C(this); } - if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) { this->rider->unk488 = 7; } else { EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1, 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 5e7619cd2..d37fb8f23 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 @@ -59,7 +59,7 @@ s32 func_808F8AA0(EnHorseGameCheck* this, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE != WEEKEVENTREG_HORSE_RACE_STATE_START) { Actor_Kill(&this->dyna.actor); return false; } @@ -116,7 +116,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { this->unk_168 = 0; this->unk_174 = 0; - if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE != WEEKEVENTREG_HORSE_RACE_STATE_START) { Actor_Kill(&this->dyna.actor); return false; } @@ -156,14 +156,14 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) { return false; } - if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) { play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; - } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) { + } else if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) { play->transitionType = TRANS_TYPE_80; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; - } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_4) { - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3); + } else if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_4) { + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_3); play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } @@ -252,7 +252,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_4); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_4); this->unk_174 = 60; } @@ -285,7 +285,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_3); this->unk_174 = 60; } @@ -318,7 +318,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x02000000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_3); this->unk_174 = 60; } @@ -347,7 +347,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x800; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_2); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_2); this->unk_174 = 60; } return true; 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 8bedd48cf..71c512418 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -336,7 +336,7 @@ void func_808F38F8(EnIn* this, PlayState* play) { } void func_808F395C(EnIn* this, PlayState* play) { - if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_END) { + if (this->unk4B0 == WEEKEVENTREG_HORSE_RACE_STATE_END) { this->actionFunc = func_808F5A94; } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -352,30 +352,30 @@ void func_808F39DC(EnIn* this, PlayState* play) { u16 textId = 0; if (gSaveContext.save.day != 3) { - switch (GET_WEEKEVENTREG_RACE_FLAGS) { - case WEEKEVENTREG_RACE_FLAG_2: + switch (GET_WEEKEVENTREG_HORSE_RACE_STATE) { + case WEEKEVENTREG_HORSE_RACE_STATE_2: textId = 0x347A; break; - case WEEKEVENTREG_RACE_FLAG_3: + case WEEKEVENTREG_HORSE_RACE_STATE_3: textId = 0x3476; break; } - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); } else { - switch (GET_WEEKEVENTREG_RACE_FLAGS) { - case WEEKEVENTREG_RACE_FLAG_2: + switch (GET_WEEKEVENTREG_HORSE_RACE_STATE) { + case WEEKEVENTREG_HORSE_RACE_STATE_2: textId = 0x349D; break; - case WEEKEVENTREG_RACE_FLAG_3: + case WEEKEVENTREG_HORSE_RACE_STATE_3: textId = 0x3499; break; } - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); } this->actor.flags |= ACTOR_FLAG_10000; this->actor.textId = textId; this->actionFunc = func_808F395C; - if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) { + if (this->unk4B0 == WEEKEVENTREG_HORSE_RACE_STATE_2) { Actor_PlaySfx(&this->actor, NA_SE_VO_IN_LOST); } else { Actor_PlaySfx(&this->actor, NA_SE_VO_IN_JOY0); @@ -635,7 +635,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, s32 func_808F43E0(EnIn* this) { this->unk48C = 0; this->actor.textId = 0; - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); return 0; } @@ -817,7 +817,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_80151BB4(play, 0x11); break; case 0x3475: - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_START); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); func_800FD750(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; @@ -1064,7 +1064,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; break; case 0x3475: - SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_START); + SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); func_800FD750(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; @@ -1322,7 +1322,7 @@ void func_808F5B58(EnIn* this, PlayState* play) { } void func_808F5C98(EnIn* this, PlayState* play) { - if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_END) { + 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)) || @@ -1334,7 +1334,7 @@ void func_808F5C98(EnIn* this, PlayState* play) { } } if (this->unk4A8 == 2) { - if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) { + if (this->unk4B0 == WEEKEVENTREG_HORSE_RACE_STATE_2) { Actor_PlaySfx(&this->actor, NA_SE_VO_IN_LOST); } else { Actor_PlaySfx(&this->actor, NA_SE_VO_IN_JOY0); @@ -1366,7 +1366,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk48C = 0; this->unk4AC = 0; type = ENIN_GET_TYPE(thisx); - this->unk4B0 = GET_WEEKEVENTREG_RACE_FLAGS; + this->unk4B0 = GET_WEEKEVENTREG_HORSE_RACE_STATE; if (type == ENIN_HORSE_RIDER_BLUE_SHIRT || type == ENIN_BLUE_SHIRT) { this->unk4AC |= 8; } @@ -1387,8 +1387,8 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F); this->unk23D = 0; if (type == ENIN_YELLOW_SHIRT || type == ENIN_BLUE_SHIRT) { - if ((GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) || - (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3)) { + if ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) || + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); this->unk4A8 = 0; this->unk4AC |= 2; @@ -1396,12 +1396,12 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk23C = 0; D_801BDAA0 = 0; - if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_6); } else { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_4); } - if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) { this->skelAnime.curFrame = ((Rand_ZeroOne() * 0.6f) + 0.2f) * this->skelAnime.endFrame; } if (this->unk4AC & 8) { @@ -1410,7 +1410,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_808F5C98; } } else { - if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) { + if (GET_WEEKEVENTREG_HORSE_RACE_STATE != WEEKEVENTREG_HORSE_RACE_STATE_START) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); this->unk23C = 0; this->unk4AC |= 2; diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index 3ffde38cd..a8e222bec 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -9,14 +9,13 @@ */ #include "z_en_racedog.h" +#include "overlays/actors/ovl_En_Aob_01/z_en_aob_01.h" #include "overlays/actors/ovl_En_Dg/z_en_dg.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_80000000) #define THIS ((EnRacedog*)thisx) -//! TODO: this file require macros for its uses of weekEventReg - void EnRacedog_Init(Actor* thisx, PlayState* play); void EnRacedog_Destroy(Actor* thisx, PlayState* play); void EnRacedog_Update(Actor* thisx, PlayState* play); @@ -317,7 +316,7 @@ void EnRacedog_Init(Actor* thisx, PlayState* play) { this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH(&this->actor), 0x3F); Actor_SetScale(&this->actor, 0.0075f); this->actor.gravity = -3.0f; - if (ENRACEDOG_GET_INDEX(&this->actor) < 14) { + if (ENRACEDOG_GET_INDEX(&this->actor) < RACEDOG_COUNT) { this->index = ENRACEDOG_GET_INDEX(&this->actor); } else { Actor_Kill(&this->actor); @@ -353,7 +352,7 @@ void EnRacedog_Init(Actor* thisx, PlayState* play) { this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_20; - sSelectedDogInfo = sDogInfo[(s16)((gSaveContext.eventInf[0] & 0xF8) >> 3)]; + sSelectedDogInfo = sDogInfo[(s16)GET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX]; this->selectedDogIndex = sSelectedDogInfo.index; EnRacedog_ChangeAnim(&this->skelAnime, sAnimationInfo, RACEDOG_ANIM_IDLE); @@ -439,15 +438,8 @@ void EnRacedog_Race(EnRacedog* this, PlayState* play) { * or an intentional choice to introduce a bit of extra variance to the race. */ void EnRacedog_UpdateTextId(EnRacedog* this) { - // Assuming that the weekEventRegs haven't been tampered with, then this will produce a text ID in the - // range of 0x3539 to 0x3546. - if (this->index % 2) { - sDogInfo[this->index].textId = - (((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)]) & 0xF0) >> 4) + 0x3539; - } else { - sDogInfo[this->index].textId = - ((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)]) & 0x0F) + 0x3539; - } + // This will produce a text ID in the range of 0x3539 to 0x3546. + sDogInfo[this->index].textId = GET_WEEKEVENTREG_DOG_RACE_TEXT(this->index, 0x3539); // As a sanity check, this makes sure the text ID is something in the expected range of 0x3539 to 0x3546. if ((sDogInfo[this->index].textId > 0x3546) || (sDogInfo[this->index].textId < 0x3539)) { @@ -593,7 +585,7 @@ void EnRacedog_CheckForFinish(EnRacedog* this) { this->raceStatus = RACEDOG_RACE_STATUS_FINISHED; if (this->index == this->selectedDogIndex) { - gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & 7) | (sNumberOfDogsFinished * 8); + SET_EVENTINF_DOG_RACE_RACE_STANDING(sNumberOfDogsFinished); } } } diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h index 9d49ea4c2..a8cf2a9f9 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h @@ -6,6 +6,7 @@ #define ENRACEDOG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) #define ENRACEDOG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define ENRACEDOG_PARAMS(index, path) ((index << 5) | (path)) /** * The main point of this seems to be some very light anti-cheat detection. The dog 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 71eade542..60846fda8 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -708,11 +708,11 @@ void EnSsh_Talk(EnSsh* this, PlayState* play) { void func_809756D0(EnSsh* this, PlayState* play) { u16 nextTextId; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN)) { nextTextId = 0x914; // In here, cursed spiders, defeat them to make me normal } else { nextTextId = 0x910; // Help me! I am not a monster, I was cursed this way - SET_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN); } Message_StartTextbox(play, nextTextId, &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 f10d387d1..215845341 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -148,7 +148,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) { } this->actor.textId = 0; if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH) || - !CHECK_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED)) { + !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN)) { this->sthFlags |= STH_FLAG_DRAW_MASK_OF_TRUTH; } break; @@ -479,7 +479,7 @@ void EnSth_GetInitialSwampSpiderHouseText(EnSth* this, PlayState* play) { nextTextId = 0x90F; // (does not exist) EnSth_ChangeAnim(this, STH_ANIM_TALK); } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN)) { nextTextId = 0x91B; // As soon as I calm down, getting rid of it } else { nextTextId = 0x918; // I've had enough of this, going home @@ -525,7 +525,7 @@ void EnSth_SwampSpiderHouseGiveMask(EnSth* this, PlayState* play) { } else { this->sthFlags &= ~STH_FLAG_DRAW_MASK_OF_TRUTH; // This flag is used to keep track if the player has already spoken to the actor, triggering secondary dialogue. - SET_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN); Actor_OfferGetItem(&this->actor, play, GI_MASK_TRUTH, 10000.0f, 50.0f); } } @@ -566,7 +566,7 @@ void EnSth_HandleSwampSpiderHouseConversation(EnSth* this, PlayState* play) { case 0x91A: // Someone gave me this mask and said it would make me rich, getting rid of it SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH); - CLEAR_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN); case 0x902: // (does not exist) case 0x903: // (does not exist) 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 a7cd6617a..196b29263 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -230,7 +230,7 @@ void EnSuttari_TriggerTransition(PlayState* play, u16 entrance) { play->transitionTrigger = TRANS_TRIGGER_START; } -void EnSuttari_UpdateTime(void) { +void EnSuttari_AdvanceTime(void) { gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } @@ -1483,7 +1483,7 @@ void EnSuttari_Update(Actor* thisx, PlayState* play) { func_80BAB4F0(this, play); } if (this->flags2 & 2) { - EnSuttari_UpdateTime(); + EnSuttari_AdvanceTime(); } if (this->unk428 != 0) { if (this->animIndex == 2 || this->animIndex == 6) { 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 7f7f9550a..d5dfed84d 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -4,6 +4,7 @@ * Description: Sakon's Hideout Objects (Sun's Mask, doors, etc) */ +#include "prevent_bss_reordering.h" #include "z_obj_nozoki.h" #include "objects/object_secom_obj/object_secom_obj.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 8cbc8f13f..157036d0c 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -8997,37 +8997,37 @@ 0x809C0E30:("EnWarpTag_GrottoReturn",), 0x809C0F18:("EnWarptag_Update",), 0x809C0F3C:("EnWarpTag_Draw",), - 0x809C10B0:("func_809C10B0",), - 0x809C1124:("func_809C1124",), - 0x809C1158:("func_809C1158",), - 0x809C11EC:("func_809C11EC",), - 0x809C1304:("func_809C1304",), - 0x809C1424:("func_809C1424",), - 0x809C14D0:("func_809C14D0",), - 0x809C15BC:("func_809C15BC",), - 0x809C165C:("func_809C165C",), - 0x809C16DC:("func_809C16DC",), - 0x809C1C9C:("func_809C1C9C",), - 0x809C1D64:("func_809C1D64",), - 0x809C1EC8:("func_809C1EC8",), - 0x809C2060:("func_809C2060",), - 0x809C21E0:("func_809C21E0",), - 0x809C2504:("func_809C2504",), - 0x809C2594:("func_809C2594",), - 0x809C25E4:("func_809C25E4",), - 0x809C2680:("func_809C2680",), - 0x809C26E4:("func_809C26E4",), - 0x809C2730:("func_809C2730",), - 0x809C2788:("func_809C2788",), - 0x809C2824:("func_809C2824",), - 0x809C28B8:("func_809C28B8",), - 0x809C2A64:("func_809C2A64",), - 0x809C2BE4:("func_809C2BE4",), - 0x809C2C9C:("func_809C2C9C",), - 0x809C2D0C:("func_809C2D0C",), - 0x809C2EC4:("func_809C2EC4",), - 0x809C2F34:("func_809C2F34",), - 0x809C2FA0:("func_809C2FA0",), + 0x809C10B0:("EnAob01_Blink",), + 0x809C1124:("EnAob01_AdvanceTime",), + 0x809C1158:("EnAob01_InitializeDogPaths",), + 0x809C11EC:("EnAob01_SpawnDogs",), + 0x809C1304:("EnAob01_SpawnRacedogs",), + 0x809C1424:("EnAob01_ProcessLaughAnim",), + 0x809C14D0:("EnAob01_ProcessSurpriseAnim",), + 0x809C15BC:("EnAob01_ProcessIdleAnim",), + 0x809C165C:("EnAob01_UpdateCollision",), + 0x809C16DC:("EnAob01_BeforeRace_HandleConversation",), + 0x809C1C9C:("EnAob01_BeforeRace_StartRace",), + 0x809C1D64:("EnAob01_BeforeRace_RespondToPlayAgainQuestion",), + 0x809C1EC8:("EnAob01_UpdateCommon",), + 0x809C2060:("EnAob01_BeforeRace_Idle",), + 0x809C21E0:("EnAob01_BeforeRace_Talk",), + 0x809C2504:("EnAob01_Race_DogHasReachedNextCutsceneTrigger",), + 0x809C2594:("EnAob01_Race_FollowSelectedDog",), + 0x809C25E4:("EnAob01_Race_IsRaceOver",), + 0x809C2680:("EnAob01_Race_CurrentCutsceneHasEnded",), + 0x809C26E4:("EnAob01_Race_SkipNonRaceCutscene",), + 0x809C2730:("EnAob01_Race_HandleRaceCutscene",), + 0x809C2788:("EnAob01_Race_HandleRaceEndCutscene",), + 0x809C2824:("EnAob01_Race_StartCutscene",), + 0x809C28B8:("EnAob01_AfterRace_GiveRaceResult",), + 0x809C2A64:("EnAob01_AfterRace_GiveReward",), + 0x809C2BE4:("EnAob01_AfterRace_AfterGivingReward",), + 0x809C2C9C:("EnAob01_AfterRace_AskToPlayAgain",), + 0x809C2D0C:("EnAob01_AfterRace_Talk",), + 0x809C2EC4:("EnAob01_PlayerIsHoldingDog",), + 0x809C2F34:("EnAob01_Race_HidePlayer",), + 0x809C2FA0:("EnAob01_InitializeDogTextOffsets",), 0x809C3190:("EnAob01_Init",), 0x809C3350:("EnAob01_Destroy",), 0x809C339C:("EnAob01_Update",), @@ -15199,7 +15199,7 @@ 0x80BAA6D0:("EnSuttari_UpdateCollider",), 0x80BAA848:("EnSuttari_GetActorById",), 0x80BAA88C:("EnSuttari_TriggerTransition",), - 0x80BAA8D0:("EnSuttari_UpdateTime",), + 0x80BAA8D0:("EnSuttari_AdvanceTime",), 0x80BAA904:("func_80BAA904",), 0x80BAA9B4:("func_80BAA9B4",), 0x80BAAA94:("func_80BAAA94",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index ffd045d44..6abc9a1a8 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9860,11 +9860,11 @@ 0x809C3770:("En_Aob_01_InitVars","UNK_TYPE1","",0x1), 0x809C3790:("sAnimationInfo","UNK_TYPE4","",0x4), 0x809C3820:("D_809C3820","UNK_TYPE1","",0x1), - 0x809C384C:("D_809C384C","UNK_TYPE4","",0x4), + 0x809C384C:("sDogInfo","UNK_TYPE4","",0x4), 0x809C392C:("D_809C392C","UNK_TYPE1","",0x1), 0x809C394C:("D_809C394C","UNK_TYPE4","",0x4), 0x809C395C:("D_809C395C","UNK_PTR","",0x4), - 0x809C3968:("D_809C3968","UNK_TYPE1","",0x1), + 0x809C3968:("sFocusOffset","UNK_TYPE1","",0x1), 0x809C3980:("D_809C3980","f32","",0x4), 0x809C3984:("D_809C3984","f32","",0x4), 0x809C3988:("D_809C3988","f32","",0x4), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 34b3ddc46..b96696b46 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -73,7 +73,7 @@ weekEventReg = { ( 8 << 8) | 0x04: "WEEKEVENTREG_08_04", ( 8 << 8) | 0x08: "WEEKEVENTREG_08_08", ( 8 << 8) | 0x10: "WEEKEVENTREG_08_10", - ( 8 << 8) | 0x20: "WEEKEVENTREG_08_20", + ( 8 << 8) | 0x20: "WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE", ( 8 << 8) | 0x40: "WEEKEVENTREG_08_40", ( 8 << 8) | 0x80: "WEEKEVENTREG_08_80", ( 9 << 8) | 0x01: "WEEKEVENTREG_09_01", @@ -279,7 +279,7 @@ weekEventReg = { (34 << 8) | 0x01: "WEEKEVENTREG_34_01", (34 << 8) | 0x02: "WEEKEVENTREG_34_02", (34 << 8) | 0x04: "WEEKEVENTREG_34_04", - (34 << 8) | 0x08: "WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED", + (34 << 8) | 0x08: "WEEKEVENTREG_TALKED_SWAMP_SPIDER_HOUSE_MAN", (34 << 8) | 0x10: "WEEKEVENTREG_34_10", (34 << 8) | 0x20: "WEEKEVENTREG_34_20", (34 << 8) | 0x40: "WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH", @@ -523,12 +523,12 @@ weekEventReg = { (64 << 8) | 0x10: "WEEKEVENTREG_64_10", (64 << 8) | 0x20: "WEEKEVENTREG_64_20", (64 << 8) | 0x40: "WEEKEVENTREG_64_40", - (64 << 8) | 0x80: "WEEKEVENTREG_64_80", - (65 << 8) | 0x01: "WEEKEVENTREG_65_01", - (65 << 8) | 0x02: "WEEKEVENTREG_65_02", - (65 << 8) | 0x04: "WEEKEVENTREG_65_04", - (65 << 8) | 0x08: "WEEKEVENTREG_65_08", - (65 << 8) | 0x10: "WEEKEVENTREG_65_10", + (64 << 8) | 0x80: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_1", + (65 << 8) | 0x01: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_1", + (65 << 8) | 0x02: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_2", + (65 << 8) | 0x04: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_2", + (65 << 8) | 0x08: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_3", + (65 << 8) | 0x10: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_NIGHT_3", (65 << 8) | 0x20: "WEEKEVENTREG_65_20", (65 << 8) | 0x40: "WEEKEVENTREG_65_40", (65 << 8) | 0x80: "WEEKEVENTREG_65_80", From 35c45eab707a899e2c32b1ed012a582b6ddf6e4f Mon Sep 17 00:00:00 2001 From: Zakru <23387227+Zakru@users.noreply.github.com> Date: Mon, 15 May 2023 13:51:47 +0300 Subject: [PATCH 14/51] EnAnd OK and documented (#1224) * EnAnd before data * EnAnd data * EnAnd preliminary renaming * EnAnd document object * EnAnd finalize pre-PR documenting * EnAnd style improvements * EnAnd refactor eye textures * EnAnd make some parts more explicit * EnAnd cutscene refactor according to suggestions * EnAnd style improvements --- assets/xml/objects/object_and.xml | 151 ++++++++++---------- spec | 3 +- src/overlays/actors/ovl_En_And/z_en_and.c | 166 ++++++++++++++++++++-- src/overlays/actors/ovl_En_And/z_en_and.h | 25 +++- tools/disasm/functions.txt | 8 +- undefined_syms.txt | 4 - 6 files changed, 257 insertions(+), 100 deletions(-) diff --git a/assets/xml/objects/object_and.xml b/assets/xml/objects/object_and.xml index a076a1c07..69ffebc7b 100644 --- a/assets/xml/objects/object_and.xml +++ b/assets/xml/objects/object_and.xml @@ -1,79 +1,80 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spec b/spec index 358a061ab..57fca6cda 100644 --- a/spec +++ b/spec @@ -4884,8 +4884,7 @@ beginseg name "ovl_En_And" compress include "build/src/overlays/actors/ovl_En_And/z_en_and.o" - include "build/data/ovl_En_And/ovl_En_And.data.o" - include "build/data/ovl_En_And/ovl_En_And.reloc.o" + include "build/src/overlays/actors/ovl_En_And/ovl_En_And_reloc.o" endseg beginseg 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 5c888ba45..c1f229751 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.c +++ b/src/overlays/actors/ovl_En_And/z_en_and.c @@ -10,14 +10,13 @@ #define THIS ((EnAnd*)thisx) +#define EYE_TEXTURES_COUNT 4 + void EnAnd_Init(Actor* thisx, PlayState* play); void EnAnd_Destroy(Actor* thisx, PlayState* play); void EnAnd_Update(Actor* thisx, PlayState* play); void EnAnd_Draw(Actor* thisx, PlayState* play); -void func_80C18C50(EnAnd* this, PlayState* play); - -#if 0 ActorInit En_And_InitVars = { ACTOR_EN_AND, ACTORCAT_NPC, @@ -30,22 +29,163 @@ ActorInit En_And_InitVars = { (ActorFunc)EnAnd_Draw, }; -#endif +static AnimationInfoS sAnimationInfo[] = { + { &gAndStaticAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAndIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAndWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAndRaiseHeadAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAndRaisedHeadLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAndRaiseHandAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gAndRaisedHandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gAndRaisedHandWalkAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, +}; -extern UNK_TYPE D_0600B380; +s32 EnAnd_ChangeAnim(EnAnd* this, s32 animIndex) { + s32 ret = false; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/func_80C18B90.s") + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + } + return ret; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/func_80C18BD8.s") +void EnAnd_Blink(EnAnd* this) { + if (DECR(this->blinkTimer) == 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex >= EYE_TEXTURES_COUNT) { + this->blinkTimer = Rand_S16Offset(30, 30); + this->eyeTexIndex = 0; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/func_80C18C50.s") +void EnAnd_HandleCutscene(EnAnd* this, PlayState* play) { + s32 csAnimations[] = { 0, 1, 2, 3, 5, 7 }; + u16 cueType; + s32 cueChannel; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/EnAnd_Init.s") + if (play->csCtx.state != CS_STATE_IDLE) { + if (!this->isCutscenePlaying) { + // Cutscene is starting + this->cueId = 255; + this->isCutscenePlaying = true; + this->prevAnimIndex = this->animIndex; + } + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_565)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_565); + cueType = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueType) { + this->cueId = cueType; + EnAnd_ChangeAnim(this, csAnimations[cueType]); + } + switch (this->cueId) { + case 3: + case 4: + if ((this->animIndex == 3) || (this->animIndex == 5)) { + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + EnAnd_ChangeAnim(this, this->animIndex + 1); + } + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/EnAnd_Destroy.s") + default: + break; + } + Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); + } + } else if (this->isCutscenePlaying) { + this->isCutscenePlaying = false; + EnAnd_ChangeAnim(this, this->prevAnimIndex); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/EnAnd_Update.s") +void EnAnd_Init(Actor* thisx, PlayState* play) { + EnAnd* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/func_80C18ED0.s") + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gAndSkel, NULL, this->jointTable, this->morphTable, + OBJECT_AND_LIMB_MAX); + this->animIndex = -1; + EnAnd_ChangeAnim(this, 0); + Actor_SetScale(&this->actor, 0.01f); + this->actor.flags &= ~ACTOR_FLAG_1; + this->flags |= 8; + this->actionFunc = EnAnd_HandleCutscene; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_And/EnAnd_Draw.s") +void EnAnd_Destroy(Actor* thisx, PlayState* play) { +} + +void EnAnd_Update(Actor* thisx, PlayState* play) { + EnAnd* this = THIS; + + this->actionFunc(this, play); + SkelAnime_Update(&this->skelAnime); + EnAnd_Blink(this); +} + +void EnAnd_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { + EnAnd* this = THIS; + s32 stepRot; + s32 overrideRot; + + stepRot = this->flags & 8 ? false : true; + overrideRot = this->flags & 2 ? true : false; + if (!stepRot) { + overrideRot = false; + } + + switch (limbIndex) { + case OBJECT_AND_LIMB_HEAD: + SubS_UpdateLimb(this->headRotZ + this->torsoRotZ + 0x4000, + this->headRotY + this->torsoRotY + this->actor.shape.rot.y + 0x4000, &this->headComputedPos, + &this->headComputedRot, stepRot, overrideRot); + Matrix_Pop(); + Matrix_Translate(this->headComputedPos.x, this->headComputedPos.y, this->headComputedPos.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headComputedRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headComputedRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headComputedRot.z, MTXMODE_APPLY); + Matrix_Push(); + break; + + case OBJECT_AND_LIMB_TORSO: + SubS_UpdateLimb(this->torsoRotZ + 0x4000, this->torsoRotY + this->actor.shape.rot.y + 0x4000, + &this->torsoComputedPos, &this->torsoComputedRot, stepRot, overrideRot); + Matrix_Pop(); + Matrix_Translate(this->torsoComputedPos.x, this->torsoComputedPos.y, this->torsoComputedPos.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->torsoComputedRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->torsoComputedRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->torsoComputedRot.z, MTXMODE_APPLY); + Matrix_Push(); + break; + + default: + break; + } +} + +void EnAnd_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sMouthTextures[] = { gAndMouthNeutralTex, gAndMouthSmileTex }; + static TexturePtr sEyeTextures[EYE_TEXTURES_COUNT] = { + gAndEyeOpenTex, + gAndEyeClosingTex, + gAndEyeClosedTex, + gAndEyeOpeningTex, + }; + EnAnd* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C28C(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[0])); + + SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, + this->skelAnime.dListCount, NULL, NULL, EnAnd_TransformLimbDraw, &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_And/z_en_and.h b/src/overlays/actors/ovl_En_And/z_en_and.h index a0610a408..6b5a0bb7d 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.h +++ b/src/overlays/actors/ovl_En_And/z_en_and.h @@ -2,6 +2,7 @@ #define Z_EN_AND_H #include "global.h" +#include "objects/object_and/object_and.h" struct EnAnd; @@ -9,9 +10,29 @@ typedef void (*EnAndActionFunc)(struct EnAnd*, PlayState*); typedef struct EnAnd { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x44]; + /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnAndActionFunc actionFunc; - /* 0x18C */ char unk_18C[0x188]; + /* 0x18C */ u8 cueId; + /* 0x18D */ UNK_TYPE1 pad18D[0x7]; + /* 0x194 */ Vec3f headComputedPos; + /* 0x1A0 */ Vec3f torsoComputedPos; + /* 0x1AC */ Vec3s headComputedRot; + /* 0x1B2 */ Vec3s torsoComputedRot; + /* 0x1B8 */ Vec3s jointTable[OBJECT_AND_LIMB_MAX]; + /* 0x254 */ Vec3s morphTable[OBJECT_AND_LIMB_MAX]; + /* 0x2F0 */ u16 flags; + /* 0x2F2 */ UNK_TYPE1 pad2F2[0x4]; + /* 0x2F6 */ s16 headRotZ; + /* 0x2F8 */ s16 headRotY; + /* 0x2FA */ s16 torsoRotZ; + /* 0x2FC */ s16 torsoRotY; + /* 0x2FE */ UNK_TYPE1 pad2FE[0x2]; + /* 0x300 */ s16 blinkTimer; + /* 0x302 */ s16 eyeTexIndex; + /* 0x304 */ s32 animIndex; + /* 0x308 */ s32 prevAnimIndex; + /* 0x30C */ s32 isCutscenePlaying; + /* 0x310 */ UNK_TYPE1 pad310[4]; } EnAnd; // size = 0x314 #endif // Z_EN_AND_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 157036d0c..4cb29f0dc 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16868,13 +16868,13 @@ 0x80C18928:("BgLastBwall_DoNothing",), 0x80C18938:("BgLastBwall_Update",), 0x80C1895C:("BgLastBwall_Draw",), - 0x80C18B90:("func_80C18B90",), - 0x80C18BD8:("func_80C18BD8",), - 0x80C18C50:("func_80C18C50",), + 0x80C18B90:("EnAnd_ChangeAnimation",), + 0x80C18BD8:("EnAnd_Blink",), + 0x80C18C50:("EnAnd_HandleCsAction",), 0x80C18DC8:("EnAnd_Init",), 0x80C18E84:("EnAnd_Destroy",), 0x80C18E94:("EnAnd_Update",), - 0x80C18ED0:("func_80C18ED0",), + 0x80C18ED0:("EnAnd_TransformLimbDraw",), 0x80C19084:("EnAnd_Draw",), 0x80C192A0:("func_80C192A0",), 0x80C192B0:("func_80C192B0",), diff --git a/undefined_syms.txt b/undefined_syms.txt index f0578ff16..1e09ceaab 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -770,10 +770,6 @@ D_060111E8 = 0x060111E8; D_06012478 = 0x06012478; D_06012618 = 0x06012618; -// ovl_En_And - -D_0600B380 = 0x0600B380; - // ovl_En_Bal D_060005FC = 0x060005FC; From 858d10a38b20cf4288c0044c2fe93a5b49746a40 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 15 May 2023 23:37:33 -0700 Subject: [PATCH 15/51] Documents EnEncount1 (Dragonfly, Wallmaster, and Skullfish spawner) (#1206) * Document everything * missed some () * PR * format * spawnActiveCount * spawnTotalCount --- .../actors/ovl_En_Encount1/z_en_encount1.c | 139 ++++++++++-------- .../actors/ovl_En_Encount1/z_en_encount1.h | 39 +++-- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 + src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 6 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.h | 2 + .../actors/ovl_En_Wallmas/z_en_wallmas.c | 4 +- .../actors/ovl_En_Wallmas/z_en_wallmas.h | 2 + tools/disasm/functions.txt | 2 +- 8 files changed, 110 insertions(+), 86 deletions(-) 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 a39a03567..834a6449f 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -5,6 +5,9 @@ */ #include "z_en_encount1.h" +#include "overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h" +#include "overlays/actors/ovl_En_Wallmas/z_en_wallmas.h" +#include "overlays/actors/ovl_En_Pr2/z_en_pr2.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_CANT_LOCK_ON) @@ -13,7 +16,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play); void EnEncount1_Update(Actor* thisx, PlayState* play); -void func_808E0954(EnEncount1* this, PlayState* play); +void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play); ActorInit En_Encount1_InitVars = { ACTOR_EN_ENCOUNT1, @@ -27,14 +30,19 @@ ActorInit En_Encount1_InitVars = { (ActorFunc)NULL, }; -static s16 sActorList[] = { - ACTOR_EN_GRASSHOPPER, - ACTOR_EN_WALLMAS, - ACTOR_EN_PR2, - ACTOR_EN_PR2, +static s16 sActorIds[] = { + ACTOR_EN_GRASSHOPPER, // EN_ENCOUNT1_GRASSHOPPER + ACTOR_EN_WALLMAS, // EN_ENCOUNT1_WALLMASTER + ACTOR_EN_PR2, // EN_ENCOUNT1_SKULLFISH + ACTOR_EN_PR2, // EN_ENCOUNT1_SKULLFISH_2 }; -static s16 sActorParams[] = { 1, 0, 1, 3 }; +static s16 sActorParams[] = { + EN_GRASSHOPPER_PARAMS(EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED), // EN_ENCOUNT1_GRASSHOPPER + WALLMASTER_PARAMS(WALLMASTER_TYPE_TIMER_ONLY, 0, false), // EN_ENCOUNT1_WALLMASTER + ENPR2_PARAMS(1, 0), // EN_ENCOUNT1_SKULLFISH + ENPR2_PARAMS(3, 0) // EN_ENCOUNT1_SKULLFISH_2 +}; void EnEncount1_Init(Actor* thisx, PlayState* play) { EnEncount1* this = THIS; @@ -44,69 +52,72 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) { return; } - this->actorType = ENENCOUNT1_GET_TYPE(&this->actor); - this->unk_14C = ENENCOUNT1_GET_7C0(&this->actor); - this->unk_154 = ENENCOUNT1_GET_PATH(&this->actor); - this->unk_158 = this->actor.world.rot.x; - this->unk_15C = this->actor.world.rot.y; - this->unk_160 = (this->actor.world.rot.z * 40.0f) + 120.0f; + this->type = ENENCOUNT1_GET_TYPE(&this->actor); + this->spawnActiveMax = ENENCOUNT1_GET_SPAWN_ACTIVE_MAX(&this->actor); + this->spawnTotalMax = ENENCOUNT1_GET_SPAWN_TOTAL_MAX(&this->actor); + this->spawnTimeMin = ENENCOUNT1_GET_SPAWN_TIME_MIN(&this->actor); + this->spawnUnusedProp = ENENCOUNT1_GET_SPAWN_UNUSED_PROP(&this->actor); + this->spawnDistanceMax = (ENENCOUNT1_GET_SPAWN_DISTANCE_MAX(&this->actor) * 40.0f) + 120.0f; - if (this->unk_154 >= 0x3F) { - this->unk_154 = -1; + if (this->spawnTotalMax >= ENENCOUNT1_SPAWNS_TOTAL_MAX_INFINITE) { + this->spawnTotalMax = -1; } - if (this->actor.world.rot.z < 0) { - this->unk_160 = -1.0f; + if (ENENCOUNT1_GET_SPAWN_DISTANCE_MAX(&this->actor) < 0) { + this->spawnDistanceMax = -1.0f; } - if (this->actorType == EN_ENCOUNT1_SKULLFISH_2) { - this->unk_15A = ENENCOUNT1_GET_PATH(&this->actor); - this->path = SubS_GetPathByIndex(play, this->unk_15A, 0x3F); - this->unk_154 = -1; - this->unk_160 = -1.0f; + if (this->type == EN_ENCOUNT1_SKULLFISH_2) { + this->pathIndex = ENENCOUNT1_GET_PATH_INDEX(&this->actor); + this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F); + this->spawnTotalMax = -1; + this->spawnDistanceMax = -1.0f; } this->actor.flags &= ~ACTOR_FLAG_1; - this->actionFunc = func_808E0954; + this->actionFunc = EnEncount1_SpawnActor; } -void func_808E0954(EnEncount1* this, PlayState* play) { +void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) { Player* player = GET_PLAYER(play); Vec3f spawnPos; - f32 sp64; - f32 temp_fv0_2; - s16 sp5E; - s16 actorList; + f32 scale; + f32 floorHeight; + s16 rotY; + s16 actorId; s32 actorParams; - CollisionPoly* sp54; - s32 sp50; + CollisionPoly* floorPoly; + s32 bgId; - if (((this->unk_14E >= this->unk_14C) || ((this->unk_160 > 0.0f) && (this->unk_160 < this->actor.xzDistToPlayer)) || - ((this->unk_154 > 0) && (this->unk_154 <= this->unk_152)))) { + if (((this->spawnActiveCount >= this->spawnActiveMax) || + ((this->spawnDistanceMax > 0.0f) && (this->spawnDistanceMax < this->actor.xzDistToPlayer)) || + ((this->spawnTotalMax > 0) && (this->spawnTotalMax <= this->spawnTotalCount)))) { return; - } else if (this->unk_156 != 0) { - this->unk_156++; - if (this->unk_156 < this->unk_158) { + } + + if (this->timer != 0) { + this->timer++; + if (this->timer < this->spawnTimeMin) { return; } } - this->unk_156 = 0; - switch (this->actorType) { + this->timer = 0; + switch (this->type) { case EN_ENCOUNT1_GRASSHOPPER: - sp64 = randPlusMinusPoint5Scaled(40.0f) + 200.0f; - sp5E = player->actor.shape.rot.y; - if (this->unk_14E & 1) { - sp5E = -sp5E; - sp64 = randPlusMinusPoint5Scaled(20.0f) + 100.0f; + scale = randPlusMinusPoint5Scaled(40.0f) + 200.0f; + rotY = player->actor.shape.rot.y; + if (this->spawnActiveCount & 1) { + rotY = -rotY; + scale = randPlusMinusPoint5Scaled(20.0f) + 100.0f; } - spawnPos.x = player->actor.world.pos.x + (Math_SinS(sp5E) * sp64) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); spawnPos.y = player->actor.floorHeight + 120.0f; - spawnPos.z = player->actor.world.pos.z + (Math_CosS(sp5E) * sp64) + randPlusMinusPoint5Scaled(40.0f); - temp_fv0_2 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp54, &sp50, &this->actor, &spawnPos); - if ((temp_fv0_2 <= BGCHECK_Y_MIN) || + spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos); + if ((floorHeight <= BGCHECK_Y_MIN) || ((player->actor.depthInWater != BGCHECK_Y_MIN) && - (temp_fv0_2 < (player->actor.world.pos.y - player->actor.depthInWater)))) { + (floorHeight < (player->actor.world.pos.y - player->actor.depthInWater)))) { return; } - spawnPos.y = temp_fv0_2; + spawnPos.y = floorHeight; break; case EN_ENCOUNT1_WALLMASTER: @@ -114,36 +125,36 @@ void func_808E0954(EnEncount1* this, PlayState* play) { break; case EN_ENCOUNT1_SKULLFISH: - sp64 = randPlusMinusPoint5Scaled(250.0f) + 500.0f; - sp5E = player->actor.shape.rot.y; - spawnPos.x = player->actor.world.pos.x + Math_SinS(sp5E) * sp64 + randPlusMinusPoint5Scaled(40.0f); + scale = randPlusMinusPoint5Scaled(250.0f) + 500.0f; + rotY = player->actor.shape.rot.y; + spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); spawnPos.y = player->actor.world.pos.y - Rand_ZeroFloat(20.0f); - spawnPos.z = player->actor.world.pos.z + (Math_CosS(sp5E) * sp64) + randPlusMinusPoint5Scaled(40.0f); - temp_fv0_2 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp54, &sp50, &this->actor, &spawnPos); - if ((!(player->stateFlags1 & 0x8000000) || (temp_fv0_2 <= (BGCHECK_Y_MIN)) || - (player->actor.depthInWater < temp_fv0_2))) { + spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos); + if (!(player->stateFlags1 & PLAYER_STATE1_8000000) || (floorHeight <= BGCHECK_Y_MIN) || + (player->actor.depthInWater < floorHeight)) { return; } break; case EN_ENCOUNT1_SKULLFISH_2: - if ((this->path != NULL) && (!SubS_CopyPointFromPath(this->path, 0, &spawnPos))) { + if ((this->path != NULL) && !SubS_CopyPointFromPath(this->path, 0, &spawnPos)) { Actor_Kill(&this->actor); } break; } - actorList = sActorList[this->actorType]; - actorParams = sActorParams[this->actorType]; - if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, actorList, spawnPos.x, spawnPos.y, spawnPos.z, 0, 0, 0, + actorId = sActorIds[this->type]; + actorParams = sActorParams[this->type]; + if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, actorId, spawnPos.x, spawnPos.y, spawnPos.z, 0, 0, 0, actorParams) != NULL) { - this->unk_14E++; - if (this->unk_154 > 0) { - this->unk_152++; + this->spawnActiveCount++; + if (this->spawnTotalMax > 0) { + this->spawnTotalCount++; } - if ((this->unk_14E >= this->unk_14C) && (this->unk_158 != 0)) { - this->unk_156 = 1; + if ((this->spawnActiveCount >= this->spawnActiveMax) && (this->spawnTimeMin != 0)) { + this->timer = 1; } } } diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h index 52e0fb30c..5c8e6db83 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h @@ -3,15 +3,22 @@ #include "global.h" +#define ENENCOUNT1_SPAWNS_TOTAL_MAX_INFINITE 63 // aka 0x3F, All bits set + #define ENENCOUNT1_GET_TYPE(thisx) (((thisx)->params >> 11) & 0x1F) -#define ENENCOUNT1_GET_7C0(thisx) (((thisx)->params >> 6) & 0x1F) -#define ENENCOUNT1_GET_PATH(thisx) ((thisx)->params & 0x3F) +#define ENENCOUNT1_GET_SPAWN_ACTIVE_MAX(thisx) (((thisx)->params >> 6) & 0x1F) +#define ENENCOUNT1_GET_SPAWN_TOTAL_MAX(thisx) ((thisx)->params & 0x3F) +#define ENENCOUNT1_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) // Used only by EN_ENCOUNT1_SKULLFISH_2 which doesn't use SpawnTotalMax + +#define ENENCOUNT1_GET_SPAWN_TIME_MIN(thisx) ((thisx)->world.rot.x) // Time to wait between spawning +#define ENENCOUNT1_GET_SPAWN_UNUSED_PROP(thisx) ((thisx)->world.rot.y) // Unused spawn property +#define ENENCOUNT1_GET_SPAWN_DISTANCE_MAX(thisx) ((thisx)->world.rot.z) // Negative means infinite distance typedef enum EnEncount1Enemy { - /* 0x0 */ EN_ENCOUNT1_GRASSHOPPER, - /* 0x1 */ EN_ENCOUNT1_WALLMASTER, - /* 0x2 */ EN_ENCOUNT1_SKULLFISH, - /* 0x3 */ EN_ENCOUNT1_SKULLFISH_2, + /* 0 */ EN_ENCOUNT1_GRASSHOPPER, + /* 1 */ EN_ENCOUNT1_WALLMASTER, + /* 2 */ EN_ENCOUNT1_SKULLFISH, + /* 3 */ EN_ENCOUNT1_SKULLFISH_2, } EnEncount1Enemy; struct EnEncount1; @@ -22,16 +29,16 @@ typedef struct EnEncount1 { /* 0x000 */ Actor actor; /* 0x144 */ EnEncount1ActionFunc actionFunc; /* 0x148 */ Path* path; - /* 0x14C */ s16 unk_14C; - /* 0x14E */ s16 unk_14E; - /* 0x150 */ s16 actorType; - /* 0x152 */ s16 unk_152; - /* 0x154 */ s16 unk_154; - /* 0x156 */ s16 unk_156; - /* 0x158 */ s16 unk_158; - /* 0x15A */ s16 unk_15A; - /* 0x15C */ s32 unk_15C; - /* 0x160 */ f32 unk_160; + /* 0x14C */ s16 spawnActiveMax; + /* 0x14E */ s16 spawnActiveCount; + /* 0x150 */ s16 type; + /* 0x152 */ s16 spawnTotalCount; + /* 0x154 */ s16 spawnTotalMax; + /* 0x156 */ s16 timer; + /* 0x158 */ s16 spawnTimeMin; + /* 0x15A */ s16 pathIndex; + /* 0x15C */ s32 spawnUnusedProp; + /* 0x160 */ f32 spawnDistanceMax; } EnEncount1; // size = 0x164 #endif // Z_EN_ENCOUNT1_H 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 8056253f6..11ed8a130 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -6,6 +6,8 @@ #define EN_GRASSHOPPER_GET_TYPE(thisx) ((thisx)->params) +#define EN_GRASSHOPPER_PARAMS(type) (type) + struct EnGrasshopper; typedef void (*EnGrasshopperActionFunc)(struct EnGrasshopper*, PlayState*); 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 a1c2f3f4d..1c76d5985 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -151,7 +151,7 @@ void EnPr2_Init(Actor* thisx, PlayState* play) { Actor* parent = this->actor.parent; if (parent->update != NULL) { - this->unk_1C8 = ((EnEncount1*)parent)->unk_15A; + this->unk_1C8 = ((EnEncount1*)parent)->pathIndex; this->path = SubS_GetPathByIndex(play, this->unk_1C8, 0x3F); this->unk_208 = parent->world.rot.z * 20.0f; if (this->unk_208 < 20.0f) { @@ -190,8 +190,8 @@ void EnPr2_Destroy(Actor* thisx, PlayState* play) { if (this->actor.parent != NULL) { EnEncount1* encount1 = (EnEncount1*)this->actor.parent; - if ((encount1->actor.update != NULL) && (encount1->unk_14E > 0)) { - encount1->unk_14E--; + if ((encount1->actor.update != NULL) && (encount1->spawnActiveCount > 0)) { + encount1->spawnActiveCount--; } } } 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 617a5cc73..bbcd28afd 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h @@ -10,6 +10,8 @@ typedef void (*EnPr2ActionFunc)(struct EnPr2*, PlayState*); #define ENPR2_GET_F(thisx) ((thisx)->params & 0xF) #define ENPR2_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF) +#define ENPR2_PARAMS(paramF, paramFF0) (((paramF) & 0xF) | (((paramFF0) << 4) & 0xFF0)) + typedef struct EnPr2 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; 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 11860c20d..a4b3f7cc6 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -191,8 +191,8 @@ void EnWallmas_Destroy(Actor* thisx, PlayState* play) { if (this->actor.parent != NULL) { EnEncount1* encount1 = (EnEncount1*)this->actor.parent; - if ((encount1->actor.update != NULL) && (encount1->unk_14E > 0)) { - encount1->unk_14E--; + if ((encount1->actor.update != NULL) && (encount1->spawnActiveCount > 0)) { + encount1->spawnActiveCount--; } } } diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h index ceb1d1823..93dd63245 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h @@ -8,6 +8,8 @@ #define WALLMASTER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) #define WALLMASTER_IS_FROZEN(thisx) ((thisx)->params & 0x80) +#define WALLMASTER_PARAMS(type, switchFlag, isFrozen) ((type) | (((switchFlag) << 8) & 0xFF) | (((isFrozen) << 7) & 0x80)) + /** * This type determines under what conditions the Wallmaster will drop from the ceiling. * - WALLMASTER_TYPE_TIMER_ONLY: These Wallmasters don't check for anything to determine diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4cb29f0dc..06d43ccad 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6504,7 +6504,7 @@ 0x808E06B0:("DoorAna_Update",), 0x808E0704:("DoorAna_Draw",), 0x808E0830:("EnEncount1_Init",), - 0x808E0954:("func_808E0954",), + 0x808E0954:("EnEncount1_SpawnActor",), 0x808E0DA8:("EnEncount1_Update",), 0x808E0E40:("DemoTreLgt_Init",), 0x808E0EBC:("DemoTreLgt_Destroy",), From 83ac58d739a0ce0f177a6d4380af36085cc6c5bc Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 17 May 2023 05:04:23 +1000 Subject: [PATCH 16/51] Player Impact Documentation From ActorContext (#1226) * playerImpact * discord feedback * namefixer * rm comment * adjust not-logic * pr review * fix bss --- include/functions.h | 4 +- include/z64actor.h | 18 +++++--- src/boot_O2_g3/boot_main.c | 1 - src/code/z_actor.c | 41 +++++++++---------- .../actors/ovl_En_Dragon/z_en_dragon.c | 5 ++- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 4 +- src/overlays/actors/ovl_TG_Sw/z_tg_sw.c | 9 ++-- tools/disasm/functions.txt | 8 ++-- tools/namefixer.py | 16 ++++++-- tools/sizes/code_functions.csv | 8 ++-- 10 files changed, 62 insertions(+), 52 deletions(-) diff --git a/include/functions.h b/include/functions.h index 690558f38..7e548e742 100644 --- a/include/functions.h +++ b/include/functions.h @@ -609,8 +609,8 @@ void Flags_SetCollectible(PlayState* play, s32 flag); void TitleCard_InitBossName(GameState* gameState, TitleCardContext* titleCtx, TexturePtr texture, s16 x, s16 y, u8 width, u8 height); -s32 func_800B648C(PlayState* play, s32 arg1, s32 timer, f32 arg3, Vec3f* arg4); -f32 func_800B64FC(PlayState* play, f32 arg1, Vec3f* arg2, u32* arg3); +s32 Actor_SetPlayerImpact(PlayState* play, PlayerImpactType type, s32 timer, f32 dist, Vec3f* pos); +f32 Actor_GetPlayerImpact(PlayState* play, f32 range, Vec3f* pos, PlayerImpactType* type); void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size); void* func_800B6608(PlayState* play, s16 id); void* func_800B6680(PlayState* play, s16 id); diff --git a/include/z64actor.h b/include/z64actor.h index 7cc4275ac..4722e8465 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -389,12 +389,18 @@ typedef struct { /* 0xE */ s16 intensity; } TitleCardContext; // size = 0x10 -typedef struct ActorContext_unk_1F4 { - /* 0x00 */ u8 unk_00; +typedef enum { + /* 0 */ PLAYER_IMPACT_GORON_GROUND_POUND, + /* 1 */ PLAYER_IMPACT_ZORA_BARRIER, + /* 2 */ PLAYER_IMPACT_BONK // also activated by goron attack +} PlayerImpactType; + +typedef struct PlayerImpact { + /* 0x00 */ u8 type; /* 0x01 */ u8 timer; - /* 0x04 */ f32 unk_04; - /* 0x08 */ Vec3f unk_08; -} ActorContext_unk_1F4; // size = 0x14 + /* 0x04 */ f32 dist; + /* 0x08 */ Vec3f pos; +} PlayerImpact; // size = 0x14 typedef struct ActorContext_unk_20C { /* 0x0 */ s16 id; @@ -458,7 +464,7 @@ typedef struct ActorContext { /* 0x120 */ TargetContext targetContext; /* 0x1B8 */ ActorContextSceneFlags sceneFlags; /* 0x1E4 */ TitleCardContext titleCtxt; - /* 0x1F4 */ ActorContext_unk_1F4 unk_1F4; + /* 0x1F4 */ PlayerImpact playerImpact; /* 0x208 */ UNK_TYPE1 unk_208[0x4]; /* 0x20C */ ActorContext_unk_20C unk_20C[8]; /* 0x24C */ UNK_TYPE1 unk_24C[0x4]; diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 6a561992b..7b8d7126b 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index d18193de7..6ede10773 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -908,41 +908,38 @@ s32 func_800B6434(PlayState* play, TitleCardContext* titleCtx) { return true; } -// ActorContext_1F4 Init -void func_800B6468(PlayState* play) { - play->actorCtx.unk_1F4.timer = 0; +void Actor_InitPlayerImpact(PlayState* play) { + play->actorCtx.playerImpact.timer = 0; } -// ActorContext_1F4 Update -void func_800B6474(PlayState* play) { - DECR(play->actorCtx.unk_1F4.timer); +void Actor_UpdatePlayerImpact(PlayState* play) { + DECR(play->actorCtx.playerImpact.timer); } -// ActorContext_1F4 setter something -s32 func_800B648C(PlayState* play, s32 arg1, s32 timer, f32 arg3, Vec3f* arg4) { - if ((play->actorCtx.unk_1F4.timer != 0) && (arg3 < play->actorCtx.unk_1F4.unk_04)) { +s32 Actor_SetPlayerImpact(PlayState* play, PlayerImpactType type, s32 timer, f32 dist, Vec3f* pos) { + if ((play->actorCtx.playerImpact.timer != 0) && (dist < play->actorCtx.playerImpact.dist)) { return false; } - play->actorCtx.unk_1F4.unk_00 = arg1; - play->actorCtx.unk_1F4.timer = timer; - play->actorCtx.unk_1F4.unk_04 = arg3; - Math_Vec3f_Copy(&play->actorCtx.unk_1F4.unk_08, arg4); + play->actorCtx.playerImpact.type = type; + play->actorCtx.playerImpact.timer = timer; + play->actorCtx.playerImpact.dist = dist; + Math_Vec3f_Copy(&play->actorCtx.playerImpact.pos, pos); return true; } -// ActorContext_1F4 getter something -f32 func_800B64FC(PlayState* play, f32 arg1, Vec3f* arg2, u32* arg3) { - f32 temp_f8; +f32 Actor_GetPlayerImpact(PlayState* play, f32 range, Vec3f* pos, PlayerImpactType* type) { + f32 dist; - if ((play->actorCtx.unk_1F4.timer == 0) || (arg1 == 0.0f)) { + if ((play->actorCtx.playerImpact.timer == 0) || (range == 0.0f)) { return -1.0f; } - temp_f8 = Math_Vec3f_DistXYZ(&play->actorCtx.unk_1F4.unk_08, arg2) / arg1; - *arg3 = play->actorCtx.unk_1F4.unk_00; - return play->actorCtx.unk_1F4.unk_04 - temp_f8; + dist = Math_Vec3f_DistXYZ(&play->actorCtx.playerImpact.pos, pos) / range; + *type = play->actorCtx.playerImpact.type; + + return play->actorCtx.playerImpact.dist - dist; } /** @@ -2303,7 +2300,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto actorCtx->sceneFlags.clearedRoom = cycleFlags->clearedRoom; TitleCard_ContextInit(&play->state, &actorCtx->titleCtxt); - func_800B6468(play); + Actor_InitPlayerImpact(play); actorCtx->absoluteSpace = NULL; @@ -2559,7 +2556,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } TitleCard_Update(&play->state, &actorCtx->titleCtxt); - func_800B6474(play); + Actor_UpdatePlayerImpact(play); DynaPoly_UpdateBgActorTransforms(play, &play->colCtx.dyna); } 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 605d0d807..9efb11474 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -725,7 +725,7 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) { void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) { Player* player = GET_PLAYER(play); - u32 sp30; + PlayerImpactType playerImpactType; if (this->action == DEEP_PYTHON_ACTION_EXTEND) { if ((this->collider.elements[2].info.bumperFlags & BUMP_HIT) || @@ -753,7 +753,8 @@ void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) { if ((this->action == DEEP_PYTHON_ACTION_EXTEND) && (this->grabWaitTimer == 0) && (player->invincibilityTimer == 0) && (this->collider.elements[0].info.ocElemFlags & OCELEM_HIT) && - (!(func_800B64FC(play, 1000.0f, &this->actor.world.pos, &sp30) >= 0.0f) || (sp30 != 1))) { + !((Actor_GetPlayerImpact(play, 1000.0f, &this->actor.world.pos, &playerImpactType) >= 0.0f) && + (playerImpactType == PLAYER_IMPACT_ZORA_BARRIER))) { this->actor.speed = 0.0f; this->action = DEEP_PYTHON_ACTION_GRAB; this->actor.flags |= ACTOR_FLAG_100000; 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 1bb664416..11e84301b 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -504,8 +504,8 @@ s32 func_808D99C8(EnSw* this, PlayState* play) { return false; } - if ((this->actor.xyzDistToPlayerSq < ((sREG(16) * 10) + 60000)) && (play->actorCtx.unk_1F4.timer != 0) && - (play->actorCtx.unk_1F4.unk_00 == 0)) { + if ((this->actor.xyzDistToPlayerSq < ((sREG(16) * 10) + 60000)) && (play->actorCtx.playerImpact.timer != 0) && + (play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND)) { this->actor.colChkInfo.damage = 4; phi_v1 = true; } diff --git a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c index 5523ded78..6279c367e 100644 --- a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c +++ b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c @@ -34,18 +34,17 @@ ActorInit TG_Sw_InitVars = { void TGSw_ActionDecider(TGSw* this, PlayState* play) { f32 scaledAbsoluteRotZ; f32 scaledAbsoluteRotY; - u8 unk1F4; + PlayerImpactType playerImpactType; - // Maybe actorCtx Debug Flag? - if (play->actorCtx.unk_1F4.timer != 0) { + if (play->actorCtx.playerImpact.timer != 0) { scaledAbsoluteRotY = ABS_ALT(this->actor.world.rot.y) * 4.0f; scaledAbsoluteRotZ = ABS_ALT(this->actor.world.rot.z) * 4.0f; if ((scaledAbsoluteRotZ < this->actor.xzDistToPlayer) || (scaledAbsoluteRotY < this->actor.playerHeightRel)) { return; } - unk1F4 = play->actorCtx.unk_1F4.unk_00; - if (unk1F4 == 2 || unk1F4 == 0) { + playerImpactType = play->actorCtx.playerImpact.type; + if ((playerImpactType == PLAYER_IMPACT_BONK) || (playerImpactType == PLAYER_IMPACT_GORON_GROUND_POUND)) { this->actionFunc = TGSw_ActionExecuteOneShot; } } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 06d43ccad..ebffa7548 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -696,10 +696,10 @@ 0x800B5E68:("TitleCard_Update",), 0x800B5F24:("TitleCard_Draw",), 0x800B6434:("func_800B6434",), - 0x800B6468:("func_800B6468",), - 0x800B6474:("func_800B6474",), - 0x800B648C:("func_800B648C",), - 0x800B64FC:("func_800B64FC",), + 0x800B6468:("Actor_InitPlayerImpact",), + 0x800B6474:("Actor_UpdatePlayerImpact",), + 0x800B648C:("Actor_SetPlayerImpact",), + 0x800B64FC:("Actor_GetPlayerImpact",), 0x800B6584:("func_800B6584",), 0x800B6608:("func_800B6608",), 0x800B6680:("func_800B6680",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 3d77dba9c..219785c05 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -164,6 +164,10 @@ wordReplace = { "Actor_DistanceToPoint": "Actor_WorldDistXYZToPoint", "Actor_XZDistanceBetweenActors": "Actor_WorldDistXZToActor", "Actor_XZDistanceToPoint": "Actor_WorldDistXZToPoint", + "func_800B6468": "Actor_InitPlayerImpact", + "func_800B6474": "Actor_UpdatePlayerImpact", + "func_800B648C": "Actor_SetPlayerImpact", + "func_800B64FC": "Actor_GetPlayerImpact", "Audio_PlaySoundAtPosition": "SoundSource_PlaySfxAtFixedWorldPos", "func_800F0590": "SoundSource_PlaySfxEachFrameAtFixedWorldPos", "func_8016970C": "Play_SetCameraAtEye", @@ -931,10 +935,14 @@ wordReplace = { "play->roomCtx.unk31": "play->roomCtx.status", "actorCtx.unkC": "actorCtx.halfDaysBit", - "actorCtx.unk1F4": "actorCtx.unk_1F4.unk_00", - "actorCtx.unk1F5": "actorCtx.unk_1F4.timer", - "actorCtx.unk1F8": "actorCtx.unk_1F4.unk_04", - "actorCtx.unk1FC": "actorCtx.unk_1F4.unk_08", + "actorCtx.unk1F4": "actorCtx.playerImpact.type", + "actorCtx.unk1F5": "actorCtx.playerImpact.timer", + "actorCtx.unk1F8": "actorCtx.playerImpact.dist", + "actorCtx.unk1FC": "actorCtx.playerImpact.pos", + "actorCtx.unk_1F4.unk_00": "actorCtx.playerImpact.type", + "actorCtx.unk_1F4.timer": "actorCtx.playerImpact.timer", + "actorCtx.unk_1F4.unk_04": "actorCtx.playerImpact.dist", + "actorCtx.unk_1F4.unk_08": "actorCtx.playerImpact.pos", "gSaveContext.unk_3DC8": "gSaveContext.timerOsTime", "gSaveContext.unk_3DD0": "gSaveContext.timerStates", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index a643f147f..a2cbcfe76 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -210,10 +210,10 @@ asm/non_matchings/code/z_actor/TitleCard_InitPlaceName.s,TitleCard_InitPlaceName asm/non_matchings/code/z_actor/TitleCard_Update.s,TitleCard_Update,0x800B5E68,0x2F asm/non_matchings/code/z_actor/TitleCard_Draw.s,TitleCard_Draw,0x800B5F24,0x144 asm/non_matchings/code/z_actor/func_800B6434.s,func_800B6434,0x800B6434,0xD -asm/non_matchings/code/z_actor/func_800B6468.s,func_800B6468,0x800B6468,0x3 -asm/non_matchings/code/z_actor/func_800B6474.s,func_800B6474,0x800B6474,0x6 -asm/non_matchings/code/z_actor/func_800B648C.s,func_800B648C,0x800B648C,0x1C -asm/non_matchings/code/z_actor/func_800B64FC.s,func_800B64FC,0x800B64FC,0x22 +asm/non_matchings/code/z_actor/Actor_InitPlayerImpact.s,Actor_InitPlayerImpact,0x800B6468,0x3 +asm/non_matchings/code/z_actor/Actor_UpdatePlayerImpact.s,Actor_UpdatePlayerImpact,0x800B6474,0x6 +asm/non_matchings/code/z_actor/Actor_SetPlayerImpact.s,Actor_SetPlayerImpact,0x800B648C,0x1C +asm/non_matchings/code/z_actor/Actor_GetPlayerImpact.s,Actor_GetPlayerImpact,0x800B64FC,0x22 asm/non_matchings/code/z_actor/func_800B6584.s,func_800B6584,0x800B6584,0x21 asm/non_matchings/code/z_actor/func_800B6608.s,func_800B6608,0x800B6608,0x1E asm/non_matchings/code/z_actor/func_800B6680.s,func_800B6680,0x800B6680,0x23 From 180227e7bb15bbaed77de95715ea103ac473480b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 19 May 2023 00:29:50 +1000 Subject: [PATCH 17/51] Quake & Distortion Docs (Again) + Math Cleanup (Camera Prep) (#1129) * more quake docs * more docs * more distortion docs * math cleanup * fix header * cleanup * only partial PR review * PR Suggestions * fix master merge * reverb angle change macros * more revert * fix enum --- include/functions.h | 20 +- include/z64actor.h | 4 +- include/z64camera.h | 14 +- include/z64math.h | 30 +- include/z64quake.h | 90 ++- src/code/cutscene_camera.c | 40 +- src/code/z_actor.c | 25 +- src/code/z_camera.c | 4 +- src/code/z_camera_data.inc.c | 4 +- src/code/z_demo.c | 18 +- src/code/z_olib.c | 104 +-- src/code/z_play.c | 28 +- src/code/z_quake.c | 654 ++++++++++-------- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 18 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 6 +- .../z_bg_ikana_rotaryroom.c | 18 +- .../ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c | 6 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 21 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 6 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 4 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 6 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 6 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 6 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 2 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 6 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 7 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Death/z_en_death.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 46 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 2 +- .../actors/ovl_En_Firefly2/z_en_firefly2.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 10 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 6 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 40 +- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 4 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 6 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 8 +- .../actors/ovl_En_Minislime/z_en_minislime.c | 16 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 14 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 2 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 3 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 2 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 16 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 2 +- src/overlays/actors/ovl_En_Twig/z_en_twig.c | 1 + src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 4 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 6 +- .../actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c | 6 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 18 +- src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c | 2 +- .../actors/ovl_Obj_Hariko/z_obj_hariko.c | 2 +- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c | 12 +- src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c | 6 +- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 10 +- .../actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c | 4 +- tools/disasm/functions.txt | 56 +- tools/disasm/variables.txt | 8 +- tools/namefixer.py | 23 +- tools/sizes/code_functions.csv | 46 +- 62 files changed, 811 insertions(+), 729 deletions(-) diff --git a/include/functions.h b/include/functions.h index 7e548e742..b17046288 100644 --- a/include/functions.h +++ b/include/functions.h @@ -739,9 +739,9 @@ s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16 s32 Actor_IsTargeted(PlayState* play, Actor* actor); s32 Actor_OtherIsTargeted(PlayState* play, Actor* actor); void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play); -void Actor_AddQuake(PlayState* play, s16 verticalMag, s16 countdown); -void Actor_AddQuakeWithSpeed(PlayState* play, s16 verticalMag, s16 countdown, s16 speed); -void func_800BC848(Actor* actor, PlayState* play, s16 y, s16 countdown); +void Actor_RequestQuake(PlayState* play, s16 y, s16 duration); +void Actor_RequestQuakeWithSpeed(PlayState* play, s16 y, s16 duration, s16 speed); +void Actor_RequestQuakeAndRumble(Actor* actor, PlayState* play, s16 quakeY, s16 quakeDuration); void Actor_DrawDoorLock(PlayState* play, s32 frame, s32 type); void Actor_SetColorFilter(Actor* actor, u16 colorFlag, u16 colorIntensityMax, u16 bufFlag, u16 duration); Hilite* func_800BCBF4(Vec3f* arg0, PlayState* play); @@ -833,7 +833,7 @@ s16 Camera_ClearFlags(Camera* camera, s16 flags); s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamIndex, f32 arg3, s16 timer1, s16 timer2, s16 timer3); s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera); // UNK_TYPE4 func_800E01AC(void); -Vec3f* Camera_GetQuakeOffset(Vec3f* dst, Camera* camera); +Vec3f* Camera_GetQuakeOffset(Vec3f* quakeOffset, Camera* camera); // void func_800E01DC(s32 param_1, u32 param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); // UNK_TYPE4 func_800E0228(void); void func_800E0238(Camera* camera); @@ -1462,17 +1462,17 @@ f32 OLib_ClampMinDist(f32 val, f32 min); f32 OLib_ClampMaxDist(f32 val, f32 max); Vec3f* OLib_Vec3fDistNormalize(Vec3f* dest, Vec3f* a, Vec3f* b); Vec3f* OLib_VecSphToVec3f(Vec3f* dest, VecSph* sph); -Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph); +Vec3f* OLib_VecGeoToVec3f(Vec3f* dest, VecGeo* geo); VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec); -VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec); +VecGeo* OLib_Vec3fToVecGeo(VecGeo* dest, Vec3f* vec); VecSph* OLib_Vec3fDiffToVecSph(VecSph* dest, Vec3f* a, Vec3f* b); -VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* dest, Vec3f* a, Vec3f* b); -Vec3f* OLib_VecSphAddToVec3f(Vec3f* dest, Vec3f* a, VecSph* sph); +VecGeo* OLib_Vec3fDiffToVecGeo(VecGeo* dest, Vec3f* a, Vec3f* b); +Vec3f* OLib_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo); Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b); Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b); Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b); -void OLib_DbCameraVec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); -void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); +void OLib_Vec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); +void OLib_Vec3fAdd(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); diff --git a/include/z64actor.h b/include/z64actor.h index 4722e8465..3a646fe8f 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -532,8 +532,8 @@ typedef enum { #define ACTOR_FLAG_400 (1 << 10) // #define ACTOR_FLAG_800 (1 << 11) -// -#define ACTOR_FLAG_1000 (1 << 12) +// Actor will not shake when a quake occurs +#define ACTOR_FLAG_IGNORE_QUAKE (1 << 12) // #define ACTOR_FLAG_2000 (1 << 13) // diff --git a/include/z64camera.h b/include/z64camera.h index 3205496e7..d0a3ac1ce 100644 --- a/include/z64camera.h +++ b/include/z64camera.h @@ -374,7 +374,7 @@ typedef struct { /* 0x00 */ Vec3f pos; /* 0x0C */ Vec3f norm; /* 0x18 */ CollisionPoly* poly; - /* 0x1C */ VecSph sphNorm; + /* 0x1C */ VecGeo geoNorm; /* 0x24 */ s32 bgId; } CameraCollision; // size = 0x28 @@ -1244,8 +1244,8 @@ typedef struct { typedef struct { /* 0x00 */ Vec3f unk_00; - /* 0x0C */ VecSph unk_0C; - /* 0x14 */ VecSph unk_14; + /* 0x0C */ VecGeo unk_0C; + /* 0x14 */ VecGeo unk_14; /* 0x1C */ s16 unk_1C; } Demo1ReadWriteData; // size = 0x20 @@ -1319,7 +1319,7 @@ typedef struct { /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; - /* 0x18 */ VecSph unk_18; + /* 0x18 */ VecGeo unk_18; /* 0x20 */ s16 unk_20; /* 0x22 */ s16 timer; } Demo4ReadWriteData; // size = 0x24 @@ -1345,7 +1345,7 @@ typedef struct { /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; - /* 0x1C */ VecSph unk_1C; + /* 0x1C */ VecGeo unk_1C; /* 0x24 */ s16 unk_24; /* 0x26 */ s16 timer; } Demo5ReadWriteData; // size = 0x28 @@ -1367,8 +1367,8 @@ typedef struct { typedef struct { /* 0x00 */ f32 unk_00; - /* 0x04 */ VecSph subAtToEye; - /* 0x0C */ VecSph atToEye; + /* 0x04 */ VecGeo subAtToEye; + /* 0x0C */ VecGeo atToEye; /* 0x14 */ s16 unk_14; /* 0x16 */ s16 unk_16; /* 0x18 */ s16 unk_18; diff --git a/include/z64math.h b/include/z64math.h index d47a01a64..8df81454a 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -87,12 +87,32 @@ typedef struct { /* 0x0C */ Vec3f b; } LineSegment; // size = 0x18 -// Defines a point in the spherical coordinate system typedef struct { - /* 0x0 */ f32 r; // radius - /* 0x4 */ s16 pitch; // polar (zenith) angle - /* 0x6 */ s16 yaw; // azimuthal angle -} VecSph; // size = 0x8 + /* 0x0 */ f32 r; // radius + /* 0x4 */ s16 pitch; // depends on coordinate system. See below. + /* 0x6 */ s16 yaw; // azimuthal angle +} VecSphGeo; // size = 0x8 + +// Defines a point in the spherical coordinate system. +// Pitch is 0 along the positive y-axis (up) +typedef VecSphGeo VecSph; + +// Defines a point in the geographic coordinate system. +// Pitch is 0 along the xz-plane (horizon) +typedef VecSphGeo VecGeo; + +// To be used with OLib_Vec3fAdd() +typedef enum { + /* 0 */ OLIB_ADD_COPY, // Copy `b` to dest + /* 1 */ OLIB_ADD_OFFSET, // Add `a` and `b` to dest, and also add the yaw of `a` to the dest + /* 2 */ OLIB_ADD, // Add `a` and `b` to dest +} OlibVec3fAdd; + +typedef enum { + /* 0 */ OLIB_DIFF_COPY, // Copy `b` to dest + /* 1 */ OLIB_DIFF_OFFSET, // Sub `a` and `b` to dest, and also subs the yaw of `a` to the dest + /* 2 */ OLIB_DIFF, // Sub `a` and `b` to dest +} OlibVec3fDiff; #define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t))) #define F32_LERP(v0, v1, t) ((1.0f - (t)) * (f32)(v0) + (t) * (f32)(v1)) diff --git a/include/z64quake.h b/include/z64quake.h index f0bd401fc..0150b5404 100644 --- a/include/z64quake.h +++ b/include/z64quake.h @@ -1,68 +1,64 @@ #ifndef Z64QUAKE_H #define Z64QUAKE_H +#include "z64camera.h" #include "z64math.h" struct PlayState; -struct Camera; typedef struct { /* 0x00 */ Vec3f atOffset; /* 0x0C */ Vec3f eyeOffset; - /* 0x18 */ s16 rollOffset; - /* 0x1A */ s16 zoom; - /* 0x1C */ f32 max; // Set to scaled max data of struct (mag for Vec3f), never used -} QuakeCamCalc; // size = 0x20 - -#define QUAKE_SPEED (1 << 0) -#define QUAKE_VERTICAL_MAG (1 << 1) -#define QUAKE_HORIZONTAL_MAG (1 << 2) -#define QUAKE_ZOOM (1 << 3) -#define QUAKE_ROLL_OFFSET (1 << 4) -#define QUAKE_SHAKE_PLANE_OFFSET_X (1 << 5) -#define QUAKE_SHAKE_PLANE_OFFSET_Y (1 << 6) -#define QUAKE_SHAKE_PLANE_OFFSET_Z (1 << 7) -#define QUAKE_COUNTDOWN (1 << 8) -#define QUAKE_IS_SHAKE_PERPENDICULAR (1 << 9) + /* 0x18 */ s16 upRollOffset; + /* 0x1A */ s16 fovOffset; + /* 0x1C */ f32 maxOffset; // Set to scaled max data of struct (mag for Vec3f), never used +} ShakeInfo; // size = 0x20 typedef enum { - /* 1 */ QUAKE_TYPE_1 = 1, - /* 2 */ QUAKE_TYPE_2, - /* 3 */ QUAKE_TYPE_3, - /* 4 */ QUAKE_TYPE_4, - /* 5 */ QUAKE_TYPE_5, - /* 6 */ QUAKE_TYPE_6 + /* 0 */ QUAKE_TYPE_NONE, + /* 1 */ QUAKE_TYPE_1, // Periodic, sustaining, random X perturbations + /* 2 */ QUAKE_TYPE_2, // Aperiodic, sustaining, random X perturbations + /* 3 */ QUAKE_TYPE_3, // Periodic, decaying + /* 4 */ QUAKE_TYPE_4, // Aperiodic, decaying, random X perturbations + /* 5 */ QUAKE_TYPE_5, // Periodic, sustaining + /* 6 */ QUAKE_TYPE_6 // See below } QuakeType; -u32 Quake_SetValue(s16 quakeIndex, s16 valueType, s16 value); -u32 Quake_SetSpeed(s16 quakeIndex, s16 speed); -u32 Quake_SetCountdown(s16 quakeIndex, s16 countdown); -s16 Quake_GetCountdown(s16 quakeIndex); -u32 Quake_SetQuakeValues(s16 quakeIndex, s16 verticalMag, s16 horizontalMag, s16 zoom, s16 rollOffset); -u32 Quake_SetQuakeValues2(s16 quakeIndex, s16 isShakePerpendicular, Vec3s shakePlaneOffset); -s16 Quake_Add(Camera* camera, u32 type); -s16 Quake_Calc(Camera* camera, QuakeCamCalc* camData); -u32 Quake_Remove(s16 index); -s32 Quake_NumActiveQuakes(void); +s16 Quake_Request(Camera* camera, u32 type); + +u32 Quake_SetSpeed(s16 index, s16 speed); +u32 Quake_SetPerturbations(s16 index, s16 y, s16 x, s16 fov, s16 roll); +u32 Quake_SetDuration(s16 index, s16 duration); +u32 Quake_SetOrientation(s16 index, s16 isRelativeToScreen, Vec3s orientation); + +s16 Quake_GetTimeLeft(s16 index); +s32 Quake_GetNumActiveQuakes(void); +u32 Quake_RemoveRequest(s16 index); + void Quake_Init(void); +s16 Quake_Update(Camera* camera, ShakeInfo* camShake); -#define DISTORTION_TYPE_0 (1 << 0) -#define DISTORTION_TYPE_NON_ZORA_SWIMMING (1 << 2) -#define DISTORTION_TYPE_ZORA_SWIMMING (1 << 3) -#define DISTORTION_TYPE_UNDERWATER_ENTRY (1 << 4) -#define DISTORTION_TYPE_5 (1 << 5) -#define DISTORTION_TYPE_6 (1 << 6) -#define DISTORTION_TYPE_7 (1 << 7) -#define DISTORTION_TYPE_8 (1 << 8) -#define DISTORTION_TYPE_9 (1 << 9) -#define DISTORTION_TYPE_A (1 << 10) -#define DISTORTION_TYPE_B (1 << 11) +#define DISTORTION_TYPE_HOT_ROOM (1 << 0) // Hot Room +#define DISTORTION_TYPE_NON_ZORA_SWIMMING (1 << 2) // Non-Zora swimming +#define DISTORTION_TYPE_ZORA_SWIMMING (1 << 3) // Zora swimming, also used for boss warp pad part 1 -void Distortion_SetCountdown(s16 countdown); -s16 Distortion_GetCountdown(void); +#define DISTORTION_TYPE_UNDERWATER_ENTRY (1 << 4) // Entering water, also used for boss warp pad part 2 +#define DISTORTION_TYPE_SONG_OF_TIME (1 << 5) // Song of Time effects +#define DISTORTION_TYPE_ZORA_KICK (1 << 6) // PLAYER_MWA_ZORA_PUNCH_KICK +#define DISTORTION_TYPE_UNK_ATTACK (1 << 7) // Impossible to achieve, inferred to be another `PLAYER_MWA_`, + +#define DISTORTION_TYPE_GORON_BUTT (1 << 8) // PLAYER_MWA_GORON_PUNCH_BUTT +#define DISTORTION_TYPE_MASK_TRANSFORM_1 (1 << 9) // Mask transformation part 1 +#define DISTORTION_TYPE_BOSS_WARP (1 << 10) // Boss warp pad part 3 +#define DISTORTION_TYPE_MASK_TRANSFORM_2 (1 << 11) // Mask transformation part 2 + +void Distortion_Request(s32 type); +void Distortion_SetDuration(s16 duration); + +s16 Distortion_GetTimeLeft(void); s16 Distortion_GetType(void); -void Distortion_SetType(s32 type); -void Distortion_ClearType(s32 type); +void Distortion_RemoveRequest(s32 type); + void Distortion_Init(PlayState* play); void Distortion_Update(void); diff --git a/src/code/cutscene_camera.c b/src/code/cutscene_camera.c index d5f028b94..d92d119dd 100644 --- a/src/code/cutscene_camera.c +++ b/src/code/cutscene_camera.c @@ -119,23 +119,23 @@ u8 CutsceneCamera_ProcessSpline(CutsceneCamera* csCamera) { switch (csCamera->atCmd[csCamera->eyeInterp.curPoint].relativeTo) { case CS_CAM_REL_2: - OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 2); + OLib_Vec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, OLIB_DIFF); break; case CS_CAM_REL_3: - OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + OLib_Vec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, OLIB_DIFF_OFFSET); break; case CS_CAM_REL_1: - OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + OLib_Vec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, OLIB_DIFF_OFFSET); break; case CS_CAM_REL_4: - OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, 1); + OLib_Vec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, OLIB_DIFF_OFFSET); break; case CS_CAM_REL_5: - OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, 2); + OLib_Vec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, OLIB_DIFF); break; default: // CS_CAM_REL_0 @@ -147,24 +147,24 @@ u8 CutsceneCamera_ProcessSpline(CutsceneCamera* csCamera) { switch (csCamera->atCmd[csCamera->eyeInterp.curPoint].relativeTo) { case CS_CAM_REL_2: - OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 2); + OLib_Vec3fAdd(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, OLIB_ADD); break; case CS_CAM_REL_3: - OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + OLib_Vec3fAdd(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, OLIB_ADD_OFFSET); csCamera->camera->at.y += func_80163660(&player->actor); break; case CS_CAM_REL_1: - OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1); + OLib_Vec3fAdd(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, OLIB_ADD_OFFSET); break; case CS_CAM_REL_4: - OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->at, &csCamera->camera->at, 1); + OLib_Vec3fAdd(&target->world, &csCamera->camera->at, &csCamera->camera->at, OLIB_ADD_OFFSET); break; case CS_CAM_REL_5: - OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->at, &csCamera->camera->at, 2); + OLib_Vec3fAdd(&target->world, &csCamera->camera->at, &csCamera->camera->at, OLIB_ADD); break; default: // CS_CAM_REL_0 @@ -189,23 +189,23 @@ u8 CutsceneCamera_ProcessSpline(CutsceneCamera* csCamera) { switch (csCamera->eyeCmd[csCamera->atInterp.curPoint].relativeTo) { case CS_CAM_REL_2: - OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + OLib_Vec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_DIFF); break; case CS_CAM_REL_3: - OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + OLib_Vec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_DIFF_OFFSET); break; case CS_CAM_REL_1: - OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + OLib_Vec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_DIFF_OFFSET); break; case CS_CAM_REL_4: - OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + OLib_Vec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_DIFF_OFFSET); break; case CS_CAM_REL_5: - OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + OLib_Vec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_DIFF); break; default: // CS_CAM_REL_0 @@ -217,24 +217,24 @@ u8 CutsceneCamera_ProcessSpline(CutsceneCamera* csCamera) { switch (csCamera->eyeCmd[csCamera->atInterp.curPoint].relativeTo) { case CS_CAM_REL_2: - OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + OLib_Vec3fAdd(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_ADD); break; case CS_CAM_REL_3: - OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + OLib_Vec3fAdd(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_ADD_OFFSET); csCamera->camera->eye.y += func_80163660(&player->actor); break; case CS_CAM_REL_1: - OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + OLib_Vec3fAdd(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_ADD_OFFSET); break; case CS_CAM_REL_4: - OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 1); + OLib_Vec3fAdd(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_ADD_OFFSET); break; case CS_CAM_REL_5: - OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 2); + OLib_Vec3fAdd(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, OLIB_ADD); break; default: // CS_CAM_REL_0 diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 6ede10773..a5ca767dc 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2574,7 +2574,7 @@ void Actor_Draw(PlayState* play, Actor* actor) { (actor->flags & (ACTOR_FLAG_10000000 | ACTOR_FLAG_400000)) ? NULL : &actor->world.pos, play); Lights_Draw(light, play->state.gfxCtx); - if (actor->flags & ACTOR_FLAG_1000) { + if (actor->flags & ACTOR_FLAG_IGNORE_QUAKE) { Matrix_SetTranslateRotateYXZ(actor->world.pos.x + play->mainCamera.quakeOffset.x, actor->world.pos.y + ((actor->shape.yOffset * actor->scale.y) + play->mainCamera.quakeOffset.y), @@ -3791,30 +3791,29 @@ void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -void Actor_AddQuake(PlayState* play, s16 verticalMag, s16 countdown) { - s16 quakeIndex = Quake_Add(&play->mainCamera, QUAKE_TYPE_3); +void Actor_RequestQuake(PlayState* play, s16 y, s16 duration) { + s16 quakeIndex = Quake_Request(&play->mainCamera, QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, verticalMag, 0, 0, 0); - Quake_SetCountdown(quakeIndex, countdown); + Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); + Quake_SetDuration(quakeIndex, duration); } -void Actor_AddQuakeWithSpeed(PlayState* play, s16 verticalMag, s16 countdown, s16 speed) { - s16 quakeIndex = Quake_Add(&play->mainCamera, QUAKE_TYPE_3); +void Actor_RequestQuakeWithSpeed(PlayState* play, s16 y, s16 duration, s16 speed) { + s16 quakeIndex = Quake_Request(&play->mainCamera, QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, speed); - Quake_SetQuakeValues(quakeIndex, verticalMag, 0, 0, 0); - Quake_SetCountdown(quakeIndex, countdown); + Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); + Quake_SetDuration(quakeIndex, duration); } -// Actor_RequestRumble? -void func_800BC848(Actor* actor, PlayState* play, s16 y, s16 countdown) { - if (y >= 5) { +void Actor_RequestQuakeAndRumble(Actor* actor, PlayState* play, s16 quakeY, s16 quakeDuration) { + if (quakeY >= 5) { Rumble_Request(actor->xyzDistToPlayerSq, 255, 20, 150); } else { Rumble_Request(actor->xyzDistToPlayerSq, 180, 20, 100); } - Actor_AddQuake(play, y, countdown); + Actor_RequestQuake(play, quakeY, quakeDuration); } typedef struct { diff --git a/src/code/z_camera.c b/src/code/z_camera.c index f54fc93da..6cfd65702 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -699,7 +699,7 @@ f32 D_801B9E60 = 0.0f; #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo1.s") // Data for opening chests (default) -VecSph D_801B9E64[] = { +VecGeo D_801B9E64[] = { { 50.0f, 0xEE3A, 0xD558 }, { 75.0f, 0x0000, 0x8008 }, { 80.0f, 0xEE3A, 0x8008 }, @@ -713,7 +713,7 @@ Vec3f D_801B9E84[] = { }; // Data for opening chests (goron) -VecSph D_801B9EB4[] = { +VecGeo D_801B9EB4[] = { { 60.0f, 0xEE3A, 0xD558 }, { 95.0f, 0x0000, 0x8008 }, { 90.0f, 0xEE3A, 0x8008 }, diff --git a/src/code/z_camera_data.inc.c b/src/code/z_camera_data.inc.c index 3df77c0c4..6e1501fd8 100644 --- a/src/code/z_camera_data.inc.c +++ b/src/code/z_camera_data.inc.c @@ -3795,12 +3795,12 @@ s32 sCameraHudVisibility = 2; s32 sCameraLetterboxSize = 32; s32 sCameraNegOne = -1; -// VecSph yaw data +// VecGeo yaw data s16 D_801B9E18[] = { 0x0AAA, 0xF556, 0x1555, 0xEAAB, 0x2AAA, 0xD556, 0x3FFF, 0xC001, 0x5555, 0xAAAB, 0x6AAA, 0x9556, 0x7FFF, 0x0000, }; -// VecSph pitch data +// VecGeo pitch data s16 D_801B9E34[] = { 0x0000, 0x02C6, 0x058C, 0x0000, 0x0000, 0xFD3A, 0x0000, 0x0852, 0x0000, 0x0000, 0x0B18, 0x02C6, 0xFA74, 0x0000, }; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 79270adce..da965969f 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -202,10 +202,10 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_EARTHQUAKE_MEDIUM: func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); if (isFirstFrame) { - sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); + sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 22000); - Quake_SetQuakeValues(sCutsceneQuakeIndex, 6, 4, 0, 0); - Quake_SetCountdown(sCutsceneQuakeIndex, 800); + Quake_SetPerturbations(sCutsceneQuakeIndex, 6, 4, 0, 0); + Quake_SetDuration(sCutsceneQuakeIndex, 800); } break; @@ -310,10 +310,10 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_EARTHQUAKE_STRONG: func_8019F128(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); if (isFirstFrame) { - sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); + sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 30000); - Quake_SetQuakeValues(sCutsceneQuakeIndex, 20, 10, 0, 0); - Quake_SetCountdown(sCutsceneQuakeIndex, 800); + Quake_SetPerturbations(sCutsceneQuakeIndex, 20, 10, 0, 0); + Quake_SetDuration(sCutsceneQuakeIndex, 800); } break; @@ -372,10 +372,10 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_EARTHQUAKE_WEAK: func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); if (isFirstFrame) { - sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); + sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 22000); - Quake_SetQuakeValues(sCutsceneQuakeIndex, 2, 1, 0, 0); - Quake_SetCountdown(sCutsceneQuakeIndex, 800); + Quake_SetPerturbations(sCutsceneQuakeIndex, 2, 1, 0, 0); + Quake_SetDuration(sCutsceneQuakeIndex, 800); } break; diff --git a/src/code/z_olib.c b/src/code/z_olib.c index ad0c2b35c..754857014 100644 --- a/src/code/z_olib.c +++ b/src/code/z_olib.c @@ -100,16 +100,16 @@ Vec3f* OLib_VecSphToVec3f(Vec3f* dest, VecSph* sph) { } /** - * Takes the geographic point `sph` and converts it into a x,y,z position + * Takes the geographic point `geo` and converts it into a x,y,z position */ -Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph) { - VecSph geo; +Vec3f* OLib_VecGeoToVec3f(Vec3f* dest, VecGeo* geo) { + VecSph sph; - geo.r = sph->r; - geo.pitch = 0x4000 - sph->pitch; - geo.yaw = sph->yaw; + sph.r = geo->r; + sph.pitch = 0x4000 - geo->pitch; + sph.yaw = geo->yaw; - return OLib_VecSphToVec3f(dest, &geo); + return OLib_VecSphToVec3f(dest, &sph); } /** @@ -117,16 +117,16 @@ Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph) { */ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) { VecSph sph; - f32 distSquared = SQ(vec->x) + SQ(vec->z); - f32 dist = sqrtf(distSquared); + f32 distXZSq = SQ(vec->x) + SQ(vec->z); + f32 distXZ = sqrtf(distXZSq); - if ((dist == 0.0f) && (vec->y == 0.0f)) { + if ((distXZ == 0.0f) && (vec->y == 0.0f)) { sph.pitch = 0; } else { - sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(dist, vec->y))); + sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(distXZ, vec->y))); } - sph.r = sqrtf(SQ(vec->y) + distSquared); + sph.r = sqrtf(SQ(vec->y) + distXZSq); if ((vec->x == 0.0f) && (vec->z == 0.0f)) { sph.yaw = 0; } else { @@ -141,7 +141,7 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) { /** * Takes the point `vec`, and converts it to a geographic coordinate */ -VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec) { +VecGeo* OLib_Vec3fToVecGeo(VecGeo* dest, Vec3f* vec) { VecSph sph; OLib_Vec3fToVecSph(&sph, vec); @@ -156,42 +156,42 @@ VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec) { * Takes the differences of positions `a` and `b`, and converts them to spherical coordinates */ VecSph* OLib_Vec3fDiffToVecSph(VecSph* dest, Vec3f* a, Vec3f* b) { - Vec3f sph; + Vec3f diff; - sph.x = b->x - a->x; - sph.y = b->y - a->y; - sph.z = b->z - a->z; + diff.x = b->x - a->x; + diff.y = b->y - a->y; + diff.z = b->z - a->z; - return OLib_Vec3fToVecSph(dest, &sph); + return OLib_Vec3fToVecSph(dest, &diff); } /** * Takes the difference of positions `a` and `b`, and converts them to geographic coordinates */ -VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* dest, Vec3f* a, Vec3f* b) { - Vec3f sph; +VecGeo* OLib_Vec3fDiffToVecGeo(VecGeo* dest, Vec3f* a, Vec3f* b) { + Vec3f diff; - sph.x = b->x - a->x; - sph.y = b->y - a->y; - sph.z = b->z - a->z; + diff.x = b->x - a->x; + diff.y = b->y - a->y; + diff.z = b->z - a->z; - return OLib_Vec3fToVecSphGeo(dest, &sph); + return OLib_Vec3fToVecGeo(dest, &diff); } /** - * Takes the sum of positions `a` (x,y,z coordinates) and `sph` (geographic coordinates), result is in x,y,z position + * Takes the sum of positions `a` (x,y,z coordinates) and `geo` (geographic coordinates), result is in x,y,z position * Identical to Quake_AddVec from OoT */ -Vec3f* OLib_VecSphAddToVec3f(Vec3f* dest, Vec3f* a, VecSph* sph) { - Vec3f vec; +Vec3f* OLib_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) { + Vec3f sum; Vec3f b; - OLib_VecSphGeoToVec3f(&b, sph); - vec.x = a->x + b.x; - vec.y = a->y + b.y; - vec.z = a->z + b.z; + OLib_VecGeoToVec3f(&b, geo); + sum.x = a->x + b.x; + sum.y = a->y + b.y; + sum.z = a->z + b.z; - *dest = vec; + *dest = sum; return dest; } @@ -248,46 +248,50 @@ Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b) { } /** - * Gets a x,y,z position diff depending on the dbCamera mode + * Gets a x,y,z position diff depending on the mode */ -void OLib_DbCameraVec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode) { - VecSph sph; +void OLib_Vec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode) { + VecGeo geo; switch (mode) { - case 1: - OLib_Vec3fDiffToVecSphGeo(&sph, &a->pos, b); - sph.yaw -= a->rot.y; - OLib_VecSphGeoToVec3f(dest, &sph); + case OLIB_DIFF_OFFSET: + OLib_Vec3fDiffToVecGeo(&geo, &a->pos, b); + geo.yaw -= a->rot.y; + OLib_VecGeoToVec3f(dest, &geo); break; - case 2: + + case OLIB_DIFF: dest->x = b->x - a->pos.x; dest->y = b->y - a->pos.y; dest->z = b->z - a->pos.z; break; - default: + + default: // OLIB_DIFF_COPY *dest = *b; break; } } /** - * Gets a x,y,z position sum depending on the dbCamera mode + * Gets a x,y,z position sum depending on the mode */ -void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode) { - VecSph sph; +void OLib_Vec3fAdd(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode) { + VecGeo geo; switch (mode) { - case 1: - OLib_Vec3fToVecSphGeo(&sph, b); - sph.yaw += a->rot.y; - OLib_VecSphAddToVec3f(dest, &a->pos, &sph); + case OLIB_ADD_OFFSET: + OLib_Vec3fToVecGeo(&geo, b); + geo.yaw += a->rot.y; + OLib_AddVecGeoToVec3f(dest, &a->pos, &geo); break; - case 2: + + case OLIB_ADD: dest->x = a->pos.x + b->x; dest->y = a->pos.y + b->y; dest->z = a->pos.z + b->z; break; - default: + + default: // OLIB_ADD_COPY *dest = *b; break; } diff --git a/src/code/z_play.c b/src/code/z_play.c index ca0ebcbae..1b5c046c6 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -507,39 +507,39 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { if (!sIsCameraUnderwater) { Camera_SetFlags(camera, CAM_STATE_UNDERWATER); sQuakeIndex = -1; - Distortion_SetType(DISTORTION_TYPE_UNDERWATER_ENTRY); - Distortion_SetCountdown(80); + Distortion_Request(DISTORTION_TYPE_UNDERWATER_ENTRY); + Distortion_SetDuration(80); } func_801A3EC0(0x20); func_800F6834(this, lightIndex); - if ((sQuakeIndex == -1) || (Quake_GetCountdown(sQuakeIndex) == 10)) { - s16 quakeIndex = Quake_Add(camera, QUAKE_TYPE_5); + if ((sQuakeIndex == -1) || (Quake_GetTimeLeft(sQuakeIndex) == 10)) { + s16 quakeIndex = Quake_Request(camera, QUAKE_TYPE_5); sQuakeIndex = quakeIndex; if (quakeIndex != 0) { Quake_SetSpeed(sQuakeIndex, 550); - Quake_SetQuakeValues(sQuakeIndex, 1, 1, 180, 0); - Quake_SetCountdown(sQuakeIndex, 1000); + Quake_SetPerturbations(sQuakeIndex, 1, 1, 180, 0); + Quake_SetDuration(sQuakeIndex, 1000); } } if (player->stateFlags3 & PLAYER_STATE3_8000) { - Distortion_SetType(DISTORTION_TYPE_ZORA_SWIMMING); - Distortion_ClearType(DISTORTION_TYPE_NON_ZORA_SWIMMING); + Distortion_Request(DISTORTION_TYPE_ZORA_SWIMMING); + Distortion_RemoveRequest(DISTORTION_TYPE_NON_ZORA_SWIMMING); } else { - Distortion_SetType(DISTORTION_TYPE_NON_ZORA_SWIMMING); - Distortion_ClearType(DISTORTION_TYPE_ZORA_SWIMMING); + Distortion_Request(DISTORTION_TYPE_NON_ZORA_SWIMMING); + Distortion_RemoveRequest(DISTORTION_TYPE_ZORA_SWIMMING); } } else { if (sIsCameraUnderwater) { Camera_ClearFlags(camera, CAM_STATE_UNDERWATER); } - Distortion_ClearType(DISTORTION_TYPE_NON_ZORA_SWIMMING); - Distortion_ClearType(DISTORTION_TYPE_UNDERWATER_ENTRY); - Distortion_ClearType(DISTORTION_TYPE_ZORA_SWIMMING); + Distortion_RemoveRequest(DISTORTION_TYPE_NON_ZORA_SWIMMING); + Distortion_RemoveRequest(DISTORTION_TYPE_UNDERWATER_ENTRY); + Distortion_RemoveRequest(DISTORTION_TYPE_ZORA_SWIMMING); if (sQuakeIndex != 0) { - Quake_Remove(sQuakeIndex); + Quake_RemoveRequest(sQuakeIndex); } func_800F694C(this); func_801A3EC0(0); diff --git a/src/code/z_quake.c b/src/code/z_quake.c index d8d526ca3..c5115375c 100644 --- a/src/code/z_quake.c +++ b/src/code/z_quake.c @@ -3,35 +3,28 @@ #include "z64view.h" typedef struct { - /* 0x00 */ s16 randIndex; - /* 0x02 */ s16 countdownMax; + /* 0x00 */ s16 index; + /* 0x02 */ s16 duration; /* 0x04 */ Camera* camera; /* 0x08 */ u32 type; - /* 0x0C */ s16 verticalMag; - /* 0x0E */ s16 horizontalMag; - /* 0x10 */ s16 zoom; - /* 0x12 */ s16 rollOffset; - /* 0x14 */ Vec3s shakePlaneOffset; // angle deviations from shaking in the perpendicular plane + /* 0x0C */ s16 y; + /* 0x0E */ s16 x; + /* 0x10 */ s16 fov; + /* 0x12 */ s16 upRollOffset; + /* 0x14 */ Vec3s orientation; // alters the orientation of the xy perturbation. Only x (pitch) and y (yaw) are used /* 0x1A */ s16 speed; - /* 0x1C */ s16 isShakePerpendicular; - /* 0x1E */ s16 countdown; + /* 0x1C */ s16 isRelativeToScreen; // is the quake relative to the screen or on world coordinates + /* 0x1E */ s16 timer; /* 0x20 */ s16 camId; } QuakeRequest; // size = 0x24 typedef struct { /* 0x0 */ PlayState* play; /* 0x4 */ s32 type; // bitfield, highest set bit determines type - /* 0x8 */ s16 countdown; + /* 0x8 */ s16 timer; /* 0xA */ s16 state; } DistortionRequest; // size = 0xC -typedef struct { - /* 0x00 */ Vec3f atOffset; - /* 0x0C */ Vec3f eyeOffset; - /* 0x18 */ s16 rollOffset; - /* 0x1A */ s16 zoom; -} ShakeInfo; // size = 0x1C - typedef s16 (*QuakeCallbackFunc)(QuakeRequest*, ShakeInfo*); typedef enum { @@ -40,230 +33,257 @@ typedef enum { /* 2 */ DISTORTION_SETUP } DistortionState; -QuakeRequest sQuakeRequest[4]; +QuakeRequest sQuakeRequests[4]; DistortionRequest sDistortionRequest; -static s16 sIsQuakeInitialized = true; +static s16 sQuakeUnused = 1; static s16 sQuakeRequestCount = 0; f32 Quake_Random(void) { return 2.0f * (Rand_ZeroOne() - 0.5f); } -void Quake_UpdateShakeInfo(QuakeRequest* req, ShakeInfo* shake, f32 verticalPertubation, f32 horizontalPertubation) { +void Quake_UpdateShakeInfo(QuakeRequest* req, ShakeInfo* shake, f32 yOffset, f32 xOffset) { Vec3f* at = &req->camera->at; Vec3f* eye = &req->camera->eye; Vec3f atEyeOffset; - VecSph atEyeOffsetSph2; - VecSph eyeAtAngle; + VecSph geo; + VecSph eyeToAtGeo; - // isShakePerpendicular is always set to 1 before reaching this conditional - // alternative is an unused fixed vertical shake - if (req->isShakePerpendicular) { + if (req->isRelativeToScreen) { atEyeOffset.x = 0; atEyeOffset.y = 0; atEyeOffset.z = 0; - OLib_Vec3fDiffToVecSphGeo(&eyeAtAngle, eye, at); + OLib_Vec3fDiffToVecGeo(&eyeToAtGeo, eye, at); - atEyeOffsetSph2.r = req->verticalMag * verticalPertubation; - atEyeOffsetSph2.pitch = eyeAtAngle.pitch + req->shakePlaneOffset.x + 0x4000; - atEyeOffsetSph2.yaw = eyeAtAngle.yaw + req->shakePlaneOffset.y; - OLib_VecSphAddToVec3f(&atEyeOffset, &atEyeOffset, &atEyeOffsetSph2); + // y shake + geo.r = req->y * yOffset; + // point unit vector up, then add on `req->orientation` + geo.pitch = eyeToAtGeo.pitch + req->orientation.x + 0x4000; + geo.yaw = eyeToAtGeo.yaw + req->orientation.y; + // apply y shake + OLib_AddVecGeoToVec3f(&atEyeOffset, &atEyeOffset, &geo); - atEyeOffsetSph2.r = req->horizontalMag * horizontalPertubation; - atEyeOffsetSph2.pitch = eyeAtAngle.pitch + req->shakePlaneOffset.x; - atEyeOffsetSph2.yaw = eyeAtAngle.yaw + req->shakePlaneOffset.y + 0x4000; - OLib_VecSphAddToVec3f(&atEyeOffset, &atEyeOffset, &atEyeOffsetSph2); + // x shake + geo.r = req->x * xOffset; + // point unit vector left, then add on `req->orientation` + geo.pitch = eyeToAtGeo.pitch + req->orientation.x; + geo.yaw = eyeToAtGeo.yaw + req->orientation.y + 0x4000; + // apply x shake + OLib_AddVecGeoToVec3f(&atEyeOffset, &atEyeOffset, &geo); } else { atEyeOffset.x = 0; - atEyeOffset.y = req->verticalMag * verticalPertubation; + atEyeOffset.y = req->y * yOffset; atEyeOffset.z = 0; - atEyeOffsetSph2.r = req->horizontalMag * horizontalPertubation; - atEyeOffsetSph2.pitch = req->shakePlaneOffset.x; - atEyeOffsetSph2.yaw = req->shakePlaneOffset.y; + geo.r = req->x * xOffset; + geo.pitch = req->orientation.x; + geo.yaw = req->orientation.y; - OLib_VecSphAddToVec3f(&atEyeOffset, &atEyeOffset, &atEyeOffsetSph2); + OLib_AddVecGeoToVec3f(&atEyeOffset, &atEyeOffset, &geo); } shake->atOffset = shake->eyeOffset = atEyeOffset; - shake->rollOffset = req->rollOffset * verticalPertubation; - shake->zoom = req->zoom * verticalPertubation; + shake->upRollOffset = req->upRollOffset * yOffset; + shake->fovOffset = req->fov * yOffset; } s16 Quake_CallbackType1(QuakeRequest* req, ShakeInfo* shake) { - if (req->countdown > 0) { - f32 perpendicularPertubation = Math_SinS(req->speed * req->countdown); + if (req->timer > 0) { + f32 xyOffset = Math_SinS(req->speed * req->timer); - Quake_UpdateShakeInfo(req, shake, perpendicularPertubation, Rand_ZeroOne() * perpendicularPertubation); - req->countdown--; + Quake_UpdateShakeInfo(req, shake, xyOffset, Rand_ZeroOne() * xyOffset); + req->timer--; } - return req->countdown; + return req->timer; } s16 Quake_CallbackType5(QuakeRequest* req, ShakeInfo* shake) { - if (req->countdown > 0) { - f32 perpendicularPertubation = Math_SinS(req->speed * req->countdown); + if (req->timer > 0) { + f32 xyOffset = Math_SinS(req->speed * req->timer); - Quake_UpdateShakeInfo(req, shake, perpendicularPertubation, perpendicularPertubation); - req->countdown--; + Quake_UpdateShakeInfo(req, shake, xyOffset, xyOffset); + req->timer--; } - return req->countdown; + return req->timer; } s16 Quake_CallbackType6(QuakeRequest* req, ShakeInfo* shake) { - f32 perpendicularPertubation; + f32 xyOffset; - req->countdown--; - perpendicularPertubation = Math_SinS(req->speed * ((req->countdown & 0xF) + 500)); - Quake_UpdateShakeInfo(req, shake, perpendicularPertubation, Rand_ZeroOne() * perpendicularPertubation); + req->timer--; + xyOffset = Math_SinS(req->speed * ((req->timer & 0xF) + 500)); + Quake_UpdateShakeInfo(req, shake, xyOffset, Rand_ZeroOne() * xyOffset); + + // Not returning the timer ensures quake type 6 continues indefinitely until manually removed return 1; } s16 Quake_CallbackType3(QuakeRequest* req, ShakeInfo* shake) { - if (req->countdown > 0) { - f32 perpendicularPertubation = - Math_SinS(req->speed * req->countdown) * ((f32)req->countdown / (f32)req->countdownMax); + if (req->timer > 0) { + f32 xyOffset = Math_SinS(req->speed * req->timer) * ((f32)req->timer / req->duration); - Quake_UpdateShakeInfo(req, shake, perpendicularPertubation, perpendicularPertubation); - req->countdown--; + Quake_UpdateShakeInfo(req, shake, xyOffset, xyOffset); + req->timer--; } - return req->countdown; + return req->timer; } s16 Quake_CallbackType2(QuakeRequest* req, ShakeInfo* shake) { - if (req->countdown > 0) { - f32 perpendicularPertubation = Quake_Random(); + if (req->timer > 0) { + f32 xyOffset = Quake_Random(); - Quake_UpdateShakeInfo(req, shake, perpendicularPertubation, Rand_ZeroOne() * perpendicularPertubation); - req->countdown--; + Quake_UpdateShakeInfo(req, shake, xyOffset, Rand_ZeroOne() * xyOffset); + req->timer--; } - return req->countdown; + return req->timer; } s16 Quake_CallbackType4(QuakeRequest* req, ShakeInfo* shake) { - if (req->countdown > 0) { - f32 perpendicularPertubation = Quake_Random() * ((f32)req->countdown / (f32)req->countdownMax); + if (req->timer > 0) { + f32 xyOffset = Quake_Random() * ((f32)req->timer / req->duration); - Quake_UpdateShakeInfo(req, shake, perpendicularPertubation, Rand_ZeroOne() * perpendicularPertubation); - req->countdown--; + Quake_UpdateShakeInfo(req, shake, xyOffset, Rand_ZeroOne() * xyOffset); + req->timer--; } - return req->countdown; + return req->timer; } s16 Quake_GetFreeIndex(void) { s32 i; - s32 ret = 0; - s32 min = 0x10000; + s32 index = 0; + s32 timerMin = UINT16_MAX + 1; // timer is a short, so start with a value beyond its range - for (i = 0; i < ARRAY_COUNT(sQuakeRequest); i++) { - if (sQuakeRequest[i].type == 0) { - ret = i; + for (i = 0; i < ARRAY_COUNT(sQuakeRequests); i++) { + if (sQuakeRequests[i].type == QUAKE_TYPE_NONE) { + index = i; break; } - if (sQuakeRequest[i].countdown < min) { - min = sQuakeRequest[i].countdown; - ret = i; + if (timerMin > sQuakeRequests[i].timer) { + timerMin = sQuakeRequests[i].timer; + index = i; } } - return ret; + return index; } -QuakeRequest* Quake_AddImpl(Camera* camera, u32 type) { +QuakeRequest* Quake_RequestImpl(Camera* camera, u32 type) { s16 index = Quake_GetFreeIndex(); - QuakeRequest* req = &sQuakeRequest[index]; + QuakeRequest* req = &sQuakeRequests[index]; __osMemset(req, 0, sizeof(QuakeRequest)); + req->camera = camera; req->camId = camera->camId; req->type = type; - req->isShakePerpendicular = true; - req->randIndex = ((s16)(Rand_ZeroOne() * 0x10000) & ~3) + index; + req->isRelativeToScreen = true; + + // Add a unique random identifier to the upper bits of the index + // The `~3` assumes there are only 4 requests + req->index = index + ((s16)(Rand_ZeroOne() * 0x10000) & ~3); + sQuakeRequestCount++; return req; } -void Quake_RemoveRequest(QuakeRequest* req) { - req->type = 0; - req->countdown = -1; +void Quake_Remove(QuakeRequest* req) { + req->type = QUAKE_TYPE_NONE; + req->timer = -1; sQuakeRequestCount--; } -QuakeRequest* Quake_GetRequest(s16 quakeIndex) { - QuakeRequest* req = &sQuakeRequest[quakeIndex & 3]; +QuakeRequest* Quake_GetRequest(s16 index) { + QuakeRequest* req = &sQuakeRequests[index & 3]; - if (req->type == 0) { + if (req->type == QUAKE_TYPE_NONE) { return NULL; } - if (quakeIndex != req->randIndex) { + if (index != req->index) { return NULL; } return req; } -u32 Quake_SetValue(s16 quakeIndex, s16 valueType, s16 value) { - QuakeRequest* req = Quake_GetRequest(quakeIndex); +// valueType for Quake_SetValue() +#define QUAKE_SPEED (1 << 0) +#define QUAKE_Y_OFFSET (1 << 1) +#define QUAKE_X_OFFSET (1 << 2) +#define QUAKE_FOV (1 << 3) +#define QUAKE_ROLL (1 << 4) +#define QUAKE_ORIENTATION_PITCH (1 << 5) +#define QUAKE_ORIENTATION_YAW (1 << 6) +#define QUAKE_ORIENTATION_ROLL (1 << 7) +#define QUAKE_DURATION (1 << 8) +#define QUAKE_IS_RELATIVE_TO_SCREEN (1 << 9) + +u32 Quake_SetValue(s16 index, s16 valueType, s16 value) { + QuakeRequest* req = Quake_GetRequest(index); if (req == NULL) { return false; - } else { - switch (valueType) { - case QUAKE_SPEED: - req->speed = value; - break; - - case QUAKE_VERTICAL_MAG: - req->verticalMag = value; - break; - - case QUAKE_HORIZONTAL_MAG: - req->horizontalMag = value; - break; - - case QUAKE_ZOOM: - req->zoom = value; - break; - - case QUAKE_ROLL_OFFSET: - req->rollOffset = value; - break; - - case QUAKE_SHAKE_PLANE_OFFSET_X: - req->shakePlaneOffset.x = value; - break; - - case QUAKE_SHAKE_PLANE_OFFSET_Y: - req->shakePlaneOffset.y = value; - break; - - case QUAKE_SHAKE_PLANE_OFFSET_Z: - req->shakePlaneOffset.z = value; - break; - - case QUAKE_COUNTDOWN: - req->countdown = value; - req->countdownMax = req->countdown; - break; - - case QUAKE_IS_SHAKE_PERPENDICULAR: - req->isShakePerpendicular = value; - break; - - default: - break; - } - - return true; } + + switch (valueType) { + case QUAKE_SPEED: + req->speed = value; + break; + + case QUAKE_Y_OFFSET: + req->y = value; + break; + + case QUAKE_X_OFFSET: + req->x = value; + break; + + case QUAKE_FOV: + req->fov = value; + break; + + case QUAKE_ROLL: + req->upRollOffset = value; + break; + + case QUAKE_ORIENTATION_PITCH: + req->orientation.x = value; + break; + + case QUAKE_ORIENTATION_YAW: + req->orientation.y = value; + break; + + case QUAKE_ORIENTATION_ROLL: + req->orientation.z = value; + break; + + case QUAKE_DURATION: + req->timer = value; + req->duration = req->timer; + break; + + case QUAKE_IS_RELATIVE_TO_SCREEN: + req->isRelativeToScreen = value; + break; + + default: + break; + } + + return true; } -u32 Quake_SetSpeed(s16 quakeIndex, s16 speed) { - QuakeRequest* req = Quake_GetRequest(quakeIndex); +/** + * @param index + * @param speed for periodic types only, the angular frequency of the sine wave (binang / frame) + * @return true if successfully applied, false if the request does not exist + */ +u32 Quake_SetSpeed(s16 index, s16 speed) { + QuakeRequest* req = Quake_GetRequest(index); if (req != NULL) { req->speed = speed; @@ -272,45 +292,67 @@ u32 Quake_SetSpeed(s16 quakeIndex, s16 speed) { return false; } -u32 Quake_SetCountdown(s16 quakeIndex, s16 countdown) { - QuakeRequest* req = Quake_GetRequest(quakeIndex); +/** + * @param index quake request index to apply + * @param duration number of frames to apply the quake + * @return true if successfully applied, false if the request does not exist + */ +u32 Quake_SetDuration(s16 index, s16 duration) { + QuakeRequest* req = Quake_GetRequest(index); if (req != NULL) { - req->countdown = countdown; - req->countdownMax = req->countdown; + req->duration = req->timer = duration; return true; } return false; } -s16 Quake_GetCountdown(s16 quakeIndex) { - QuakeRequest* req = Quake_GetRequest(quakeIndex); +/** + * @param index quake request index to get + * @return number of frames until the quake is finished + */ +s16 Quake_GetTimeLeft(s16 index) { + QuakeRequest* req = Quake_GetRequest(index); if (req != NULL) { - return req->countdown; + return req->timer; } return 0; } -u32 Quake_SetQuakeValues(s16 quakeIndex, s16 verticalMag, s16 horizontalMag, s16 zoom, s16 rollOffset) { - QuakeRequest* req = Quake_GetRequest(quakeIndex); +/** + * @param index quake request index to apply + * @param y apply up/down shake + * @param x apply left/right shake + * @param fov apply zooming in/out shake (binang) + * @param roll apply rolling shake (binang) + * @return true if successfully applied, false if the request does not exist + */ +u32 Quake_SetPerturbations(s16 index, s16 y, s16 x, s16 fov, s16 roll) { + QuakeRequest* req = Quake_GetRequest(index); if (req != NULL) { - req->verticalMag = verticalMag; - req->horizontalMag = horizontalMag; - req->zoom = zoom; - req->rollOffset = rollOffset; + req->y = y; + req->x = x; + req->fov = fov; + req->upRollOffset = roll; return true; } return false; } -u32 Quake_SetQuakeValues2(s16 quakeIndex, s16 isShakePerpendicular, Vec3s shakePlaneOffset) { - QuakeRequest* req = Quake_GetRequest(quakeIndex); +/** + * @param index quake request index to apply + * @param isRelativeToScreen is the quake applied relative to the screen or in absolute world coordinates + * @param orientation orient the x/y shake to a different direction + * @return true if successfully applied, false if the request does not exist + */ +u32 Quake_SetOrientation(s16 index, s16 isRelativeToScreen, Vec3s orientation) { + QuakeRequest* req = Quake_GetRequest(index); if (req != NULL) { - req->isShakePerpendicular = isShakePerpendicular; - req->shakePlaneOffset = shakePlaneOffset; + req->isRelativeToScreen = isRelativeToScreen; + req->orientation = orientation; return true; } return false; @@ -319,156 +361,167 @@ u32 Quake_SetQuakeValues2(s16 quakeIndex, s16 isShakePerpendicular, Vec3s shakeP void Quake_Init(void) { s16 i; - for (i = 0; i < ARRAY_COUNT(sQuakeRequest); i++) { - sQuakeRequest[i].type = 0; - sQuakeRequest[i].countdown = 0; + for (i = 0; i < ARRAY_COUNT(sQuakeRequests); i++) { + sQuakeRequests[i].type = QUAKE_TYPE_NONE; + sQuakeRequests[i].timer = 0; } - sIsQuakeInitialized = true; + sQuakeUnused = 1; sQuakeRequestCount = 0; } -s16 Quake_Add(Camera* camera, u32 type) { - return Quake_AddImpl(camera, type)->randIndex; +s16 Quake_Request(Camera* camera, u32 type) { + return Quake_RequestImpl(camera, type)->index; } -u32 Quake_Remove(s16 index) { +u32 Quake_RemoveRequest(s16 index) { QuakeRequest* req = Quake_GetRequest(index); if (req != NULL) { - Quake_RemoveRequest(req); + Quake_Remove(req); return true; } return false; } static QuakeCallbackFunc sQuakeCallbacks[] = { - NULL, - Quake_CallbackType1, - Quake_CallbackType2, - Quake_CallbackType3, - Quake_CallbackType4, - Quake_CallbackType5, - Quake_CallbackType6, + NULL, // QUAKE_TYPE_NONE + Quake_CallbackType1, // QUAKE_TYPE_1 + Quake_CallbackType2, // QUAKE_TYPE_2 + Quake_CallbackType3, // QUAKE_TYPE_3 + Quake_CallbackType4, // QUAKE_TYPE_4 + Quake_CallbackType5, // QUAKE_TYPE_5 + Quake_CallbackType6, // QUAKE_TYPE_6 }; -s16 Quake_Calc(Camera* camera, QuakeCamCalc* camData) { - s32 pad; - QuakeRequest* req; - ShakeInfo shake; +s16 Quake_Update(Camera* camera, ShakeInfo* camShake) { f32 absSpeedDiv; + ShakeInfo shake; + QuakeRequest* req; f32 maxCurr; f32 maxNext; s32 index; - s32 ret; - u32 eq; - Vec3f originVec; + s32 numQuakesApplied; + u32 isDifferentCamId; + Vec3f zeroVec; PlayState* play = camera->play; - originVec.x = 0.0f; - originVec.y = 0.0f; - originVec.z = 0.0f; - camData->atOffset.x = 0.0f; - camData->atOffset.y = 0.0f; - camData->atOffset.z = 0.0f; - camData->eyeOffset.x = 0.0f; - camData->eyeOffset.y = 0.0f; - camData->eyeOffset.z = 0.0f; - camData->rollOffset = 0; - camData->zoom = 0; - camData->max = 0.0f; + zeroVec.x = 0.0f; + zeroVec.y = 0.0f; + zeroVec.z = 0.0f; + + camShake->atOffset.x = 0.0f; + camShake->atOffset.y = 0.0f; + camShake->atOffset.z = 0.0f; + + camShake->eyeOffset.x = 0.0f; + camShake->eyeOffset.y = 0.0f; + camShake->eyeOffset.z = 0.0f; + + camShake->upRollOffset = 0; + camShake->fovOffset = 0; + camShake->maxOffset = 0.0f; if (sQuakeRequestCount == 0) { return 0; } - ret = 0; - for (index = 0; index < ARRAY_COUNT(sQuakeRequest); index++) { - req = &sQuakeRequest[index]; - if (req->type != 0) { - if (play->cameraPtrs[req->camId] == NULL) { - Quake_RemoveRequest(req); - } else { - eq = (camera->camId != req->camera->camId); - absSpeedDiv = ABS(req->speed) / (f32)0x8000; - if (sQuakeCallbacks[req->type](req, &shake) == 0) { - Quake_RemoveRequest(req); - } else if (eq == 0) { - if (fabsf(camData->atOffset.x) < fabsf(shake.atOffset.x)) { - camData->atOffset.x = shake.atOffset.x; - } - if (fabsf(camData->atOffset.y) < fabsf(shake.atOffset.y)) { - camData->atOffset.y = shake.atOffset.y; - } - if (fabsf(camData->atOffset.z) < fabsf(shake.atOffset.z)) { - camData->atOffset.z = shake.atOffset.z; - } - if (fabsf(camData->eyeOffset.x) < fabsf(shake.eyeOffset.x)) { - camData->eyeOffset.x = shake.eyeOffset.x; - } - if (fabsf(camData->eyeOffset.y) < fabsf(shake.eyeOffset.y)) { - camData->eyeOffset.y = shake.eyeOffset.y; - } - if (fabsf(camData->eyeOffset.z) < fabsf(shake.eyeOffset.z)) { - camData->eyeOffset.z = shake.eyeOffset.z; - } - if (camData->rollOffset < shake.rollOffset) { - camData->rollOffset = shake.rollOffset; - } - if (camData->zoom < shake.zoom) { - camData->zoom = shake.zoom; - } - - maxCurr = OLib_Vec3fDist(&shake.atOffset, &originVec) * absSpeedDiv; - - maxNext = OLib_Vec3fDist(&shake.eyeOffset, &originVec) * absSpeedDiv; - maxCurr = CLAMP_MIN(maxCurr, maxNext); - - maxNext = (camData->rollOffset * (7.0f / 2500.0f)) * absSpeedDiv; - maxCurr = CLAMP_MIN(maxCurr, maxNext); - - maxNext = (camData->zoom * (7.0f / 2500.0f)) * absSpeedDiv; - maxCurr = CLAMP_MIN(maxCurr, maxNext); - - if (camData->max < maxCurr) { - camData->max = maxCurr; - } - - ret++; - } - } + numQuakesApplied = 0; + for (index = 0; index < ARRAY_COUNT(sQuakeRequests); index++) { + req = &sQuakeRequests[index]; + if (req->type == QUAKE_TYPE_NONE) { + continue; } + + if (play->cameraPtrs[req->camId] == NULL) { + Quake_Remove(req); + continue; + } + + isDifferentCamId = (camera->camId != req->camera->camId); + absSpeedDiv = (f32)ABS(req->speed) / 0x8000; + if (sQuakeCallbacks[req->type](req, &shake) == 0) { + // Quake has reached the end of its timer. + Quake_Remove(req); + continue; + } + + if (isDifferentCamId) { + // Quake is attached to a different camId + continue; + } + + if (fabsf(camShake->atOffset.x) < fabsf(shake.atOffset.x)) { + camShake->atOffset.x = shake.atOffset.x; + } + if (fabsf(camShake->atOffset.y) < fabsf(shake.atOffset.y)) { + camShake->atOffset.y = shake.atOffset.y; + } + if (fabsf(camShake->atOffset.z) < fabsf(shake.atOffset.z)) { + camShake->atOffset.z = shake.atOffset.z; + } + if (fabsf(camShake->eyeOffset.x) < fabsf(shake.eyeOffset.x)) { + camShake->eyeOffset.x = shake.eyeOffset.x; + } + if (fabsf(camShake->eyeOffset.y) < fabsf(shake.eyeOffset.y)) { + camShake->eyeOffset.y = shake.eyeOffset.y; + } + if (fabsf(camShake->eyeOffset.z) < fabsf(shake.eyeOffset.z)) { + camShake->eyeOffset.z = shake.eyeOffset.z; + } + if (camShake->upRollOffset < shake.upRollOffset) { + camShake->upRollOffset = shake.upRollOffset; + } + if (camShake->fovOffset < shake.fovOffset) { + camShake->fovOffset = shake.fovOffset; + } + + maxCurr = OLib_Vec3fDist(&shake.atOffset, &zeroVec) * absSpeedDiv; + maxNext = OLib_Vec3fDist(&shake.eyeOffset, &zeroVec) * absSpeedDiv; + maxCurr = CLAMP_MIN(maxCurr, maxNext); + + maxNext = (camShake->upRollOffset * (7.0f / 2500.0f)) * absSpeedDiv; + maxCurr = CLAMP_MIN(maxCurr, maxNext); + + maxNext = (camShake->fovOffset * (7.0f / 2500.0f)) * absSpeedDiv; + maxCurr = CLAMP_MIN(maxCurr, maxNext); + + if (camShake->maxOffset < maxCurr) { + camShake->maxOffset = maxCurr; + } + + numQuakesApplied++; } - return ret; + return numQuakesApplied; } void Distortion_Init(PlayState* play) { sDistortionRequest.play = play; View_ClearDistortion(&play->view); sDistortionRequest.type = 0; - sDistortionRequest.countdown = 0; + sDistortionRequest.timer = 0; sDistortionRequest.state = DISTORTION_INACTIVE; } -void Distortion_SetCountdown(s16 countdown) { - sDistortionRequest.countdown = countdown; +void Distortion_SetDuration(s16 duration) { + sDistortionRequest.timer = duration; sDistortionRequest.state = DISTORTION_SETUP; } -s16 Distortion_GetCountdown(void) { - return sDistortionRequest.countdown; +s16 Distortion_GetTimeLeft(void) { + return sDistortionRequest.timer; } s16 Distortion_GetType(void) { return sDistortionRequest.type; } -void Distortion_SetType(s32 type) { +void Distortion_Request(s32 type) { if (sDistortionRequest.type < type) { sDistortionRequest.type = type; } } -void Distortion_ClearType(s32 type) { +void Distortion_RemoveRequest(s32 type) { if (sDistortionRequest.type == type) { sDistortionRequest.type = 0; } @@ -489,7 +542,7 @@ ConveyorSpeed Distortion_GetUnderwaterCurrentSpeed(Player* player) { void Distortion_Update(void) { static s16 depthPhase = 0x3F0; static s16 screenPlanePhase = 0x156; - static s16 countdownMax = 1; + static s16 duration = 1; f32 xyScaleFactor; f32 zScaleFactor; f32 speedScaleFactor; @@ -511,8 +564,8 @@ void Distortion_Update(void) { f32 speedRatio = CLAMP_MAX(camera->speedRatio, 1.0f); if (sDistortionRequest.type != 0) { - if (sDistortionRequest.type & DISTORTION_TYPE_B) { - sDistortionRequest.countdown = 2; + if (sDistortionRequest.type & DISTORTION_TYPE_MASK_TRANSFORM_2) { + sDistortionRequest.timer = 2; depthPhase = 0x3F0; screenPlanePhase = 0x156; @@ -528,17 +581,17 @@ void Distortion_Update(void) { zScale = 0.0f; speed = 0.6f; - xyScaleFactor = zScaleFactor = sDistortionRequest.countdown / 60.0f; + xyScaleFactor = zScaleFactor = sDistortionRequest.timer / 60.0f; speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_A) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_BOSS_WARP) { if (sDistortionRequest.state == DISTORTION_SETUP) { - countdownMax = sDistortionRequest.countdown; + duration = sDistortionRequest.timer; depthPhase = 0x3F0; screenPlanePhase = 0x156; } depthPhaseStep = 0.0f; - screenPlanePhaseStep = 50.0f / countdownMax; + screenPlanePhaseStep = 50.0f / duration; rotX = 0.0f; rotY = 0.0f; @@ -549,11 +602,11 @@ void Distortion_Update(void) { zScale = 0.0f; speed = 0.4f; - xyScaleFactor = zScaleFactor = ((f32)countdownMax - sDistortionRequest.countdown) / (f32)countdownMax; + xyScaleFactor = zScaleFactor = ((f32)duration - sDistortionRequest.timer) / (f32)duration; speedScaleFactor = 0.5f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_9) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_MASK_TRANSFORM_1) { if (sDistortionRequest.state == DISTORTION_SETUP) { - countdownMax = sDistortionRequest.countdown; + duration = sDistortionRequest.timer; depthPhase = 0x1FC; screenPlanePhase = 0x156; } @@ -570,11 +623,11 @@ void Distortion_Update(void) { zScale = 0.0f; speed = 0.1f; - xyScaleFactor = zScaleFactor = ((f32)countdownMax - sDistortionRequest.countdown) / (f32)countdownMax; + xyScaleFactor = zScaleFactor = ((f32)duration - sDistortionRequest.timer) / (f32)duration; speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_8) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_GORON_BUTT) { if (sDistortionRequest.state == DISTORTION_SETUP) { - countdownMax = sDistortionRequest.countdown; + duration = sDistortionRequest.timer; depthPhase = 0x2710; screenPlanePhase = 0x3E8; } @@ -591,15 +644,15 @@ void Distortion_Update(void) { zScale = 0.01f; speed = 1.5f; - if (sDistortionRequest.countdown < 5) { - xyScaleFactor = zScaleFactor = ((f32)countdownMax - sDistortionRequest.countdown) / (f32)countdownMax; + if (sDistortionRequest.timer < 5) { + xyScaleFactor = zScaleFactor = ((f32)duration - sDistortionRequest.timer) / (f32)duration; } else { xyScaleFactor = zScaleFactor = 0.0f; } speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_7) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_UNK_ATTACK) { if (sDistortionRequest.state == DISTORTION_SETUP) { - countdownMax = sDistortionRequest.countdown; + duration = sDistortionRequest.timer; depthPhase = 0x4B0; screenPlanePhase = 0x7D0; } @@ -616,11 +669,11 @@ void Distortion_Update(void) { zScale = 0.01f; speed = 1.5f; - xyScaleFactor = zScaleFactor = sDistortionRequest.countdown / (f32)countdownMax; + xyScaleFactor = zScaleFactor = sDistortionRequest.timer / (f32)duration; speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_6) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_ZORA_KICK) { if (sDistortionRequest.state == DISTORTION_SETUP) { - countdownMax = sDistortionRequest.countdown; + duration = sDistortionRequest.timer; depthPhase = 0x9C4; screenPlanePhase = 0xBB8; } @@ -637,14 +690,14 @@ void Distortion_Update(void) { zScale = 0.01f; speed = 1.3f; - if (sDistortionRequest.countdown < 4) { - xyScaleFactor = zScaleFactor = sDistortionRequest.countdown / (f32)countdownMax; + if (sDistortionRequest.timer < 4) { + xyScaleFactor = zScaleFactor = sDistortionRequest.timer / (f32)duration; } else { xyScaleFactor = zScaleFactor = 0.0f; } speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_5) { - sDistortionRequest.countdown = 2; + } else if (sDistortionRequest.type & DISTORTION_TYPE_SONG_OF_TIME) { + sDistortionRequest.timer = 2; if (sDistortionRequest.state == DISTORTION_SETUP) { depthPhase = 0x9C4; screenPlanePhase = 0xBB8; @@ -670,7 +723,7 @@ void Distortion_Update(void) { speedScaleFactor = 1.0f; } else if (sDistortionRequest.type & DISTORTION_TYPE_UNDERWATER_ENTRY) { if (sDistortionRequest.state == DISTORTION_SETUP) { - countdownMax = sDistortionRequest.countdown; + duration = sDistortionRequest.timer; depthPhase = 0x760; screenPlanePhase = 0x1BC; } @@ -687,14 +740,14 @@ void Distortion_Update(void) { zScale = 0.2f; speed = 0.25f; - countdownRatio = sDistortionRequest.countdown / (f32)countdownMax; + countdownRatio = sDistortionRequest.timer / (f32)duration; zScaleFactor = xyScaleFactor = countdownRatio; speedScaleFactor = 1.0f; } else if (sDistortionRequest.type & DISTORTION_TYPE_ZORA_SWIMMING) { depthPhase = 0x3F0; screenPlanePhase = 0x156; - sDistortionRequest.countdown = 2; + sDistortionRequest.timer = 2; player = GET_PLAYER(play); if (player != NULL) { @@ -749,7 +802,7 @@ void Distortion_Update(void) { depthPhase = 0x3F0; screenPlanePhase = 0x156; - sDistortionRequest.countdown = 2; + sDistortionRequest.timer = 2; player = GET_PLAYER(play); depthPhaseStep = 359.2f; @@ -796,12 +849,12 @@ void Distortion_Update(void) { xyScaleFactor = speedScaleFactor = (waterYScaleFactor * 0.15f) + 0.35f + (speedRatio * 0.4f); zScaleFactor = 0.9f - xyScaleFactor; - } else if (sDistortionRequest.type & DISTORTION_TYPE_0) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_HOT_ROOM) { // Gives a small mirage-like appearance depthPhase = 0x3F0; screenPlanePhase = 0x156; - sDistortionRequest.countdown = 2; + sDistortionRequest.timer = 2; depthPhaseStep = 0.0f; screenPlanePhaseStep = 150.0f; @@ -840,32 +893,25 @@ void Distortion_Update(void) { View_ClearDistortion(&play->view); sDistortionRequest.state = DISTORTION_INACTIVE; - sDistortionRequest.countdown = 0; + sDistortionRequest.timer = 0; } - if (sDistortionRequest.countdown != 0) { - sDistortionRequest.countdown--; - if (sDistortionRequest.countdown == 0) { + if (sDistortionRequest.timer != 0) { + sDistortionRequest.timer--; + if (sDistortionRequest.timer == 0) { sDistortionRequest.type = 0; } } } -s32 Quake_NumActiveQuakes(void) { - QuakeRequest* req = sQuakeRequest; +s32 Quake_GetNumActiveQuakes(void) { s32 numActiveQuakes = 0; + s32 i; - if (req[0].type != 0) { - numActiveQuakes++; - } - if (req[1].type != 0) { - numActiveQuakes++; - } - if (req[2].type != 0) { - numActiveQuakes++; - } - if (req[3].type != 0) { - numActiveQuakes++; + for (i = 0; i < ARRAY_COUNT(sQuakeRequests); i++) { + if (sQuakeRequests[i].type != QUAKE_TYPE_NONE) { + numActiveQuakes++; + } } return numActiveQuakes; 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 a8b6ce702..c784c1318 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 @@ -522,10 +522,10 @@ void func_80A9C058(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* sp44.z = this->dyna.actor.home.pos.z + unkStruct1->unk_14.z; Rumble_Request(Math3D_Vec3fDistSq(&sp44, &GET_PLAYER(play)->actor.world.pos), 255, 20, 150); - quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 7, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 12); + Quake_SetPerturbations(quakeIndex, 7, 0, 0, 0); + Quake_SetDuration(quakeIndex, 12); if (this->unk_179 <= 0) { func_8019F128(NA_SE_EV_STONEDOOR_STOP); @@ -537,7 +537,7 @@ void func_80A9C058(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* } } -void func_80A9C18C(BgHakuginPost* this, PlayState* play) { +void BgHakuginPost_RequestQuakeAndRumble(BgHakuginPost* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); Camera* activeCam = GET_ACTIVE_CAM(play); @@ -547,10 +547,10 @@ void func_80A9C18C(BgHakuginPost* this, PlayState* play) { this->dyna.actor.home.pos.x, this->dyna.actor.home.pos.z), 255, 20, 150); - quakeIndex = Quake_Add(activeCam, QUAKE_TYPE_3); + quakeIndex = Quake_Request(activeCam, QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 17232); - Quake_SetQuakeValues(quakeIndex, 6, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 20); + Quake_SetPerturbations(quakeIndex, 6, 0, 0, 0); + Quake_SetDuration(quakeIndex, 20); } void func_80A9C228(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* unkStruct) { @@ -798,7 +798,7 @@ void func_80A9CD14(BgHakuginPost* this, PlayState* play) { temp_f12 = CLAMP_MAX(temp_f12, 40.0f); this->unk_16C += temp_f12; if (this->unk_168 <= this->unk_16C) { - func_80A9C18C(this, play); + BgHakuginPost_RequestQuakeAndRumble(this, play); func_8019F128(NA_SE_EV_STONEDOOR_STOP); func_80A9CE00(this); } else { @@ -876,7 +876,7 @@ void func_80A9D0B4(BgHakuginPost* this, PlayState* play) { func_80A9C634(this, play); func_80A9B160(&D_80A9E028, play); this->unk_16C = this->unk_164; - func_80A9C18C(this, play); + BgHakuginPost_RequestQuakeAndRumble(this, play); func_8019F128(NA_SE_EV_STONEDOOR_STOP); func_80A9CC84(this); } else { 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 44f81da9c..f853fdfc5 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 @@ -228,11 +228,11 @@ void BgIkanaDharma_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->dyna.actor); Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 21536); - Quake_SetQuakeValues(quakeIndex, 4, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 12); + Quake_SetPerturbations(quakeIndex, 4, 0, 0, 0); + Quake_SetDuration(quakeIndex, 12); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); } 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 7398dbfd9..8a90a6809 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 @@ -832,11 +832,11 @@ void func_80B81A80(Actor* thisx, PlayState* play) { func_80B81B84(this); } else if (this->unk_584 == 15) { - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 31536); - Quake_SetQuakeValues(quakeIndex, 6, 0, 100, 0); - Quake_SetCountdown(quakeIndex, 22); + Quake_SetPerturbations(quakeIndex, 6, 0, 100, 0); + Quake_SetDuration(quakeIndex, 22); } } @@ -859,11 +859,11 @@ void func_80B81BA0(Actor* thisx, PlayState* play) { thisx->shape.rot.x += 0x1F4; if (!(this->unk_584 & 7)) { - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 31536); - Quake_SetQuakeValues(quakeIndex, (s32)(Rand_ZeroOne() * 2.5f) + 3, 0, 10, 0); - Quake_SetCountdown(quakeIndex, 15); + Quake_SetPerturbations(quakeIndex, (s32)(Rand_ZeroOne() * 2.5f) + 3, 0, 10, 0); + Quake_SetDuration(quakeIndex, 15); } if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { @@ -929,11 +929,11 @@ void func_80B81DC8(Actor* thisx, PlayState* play) { CutsceneManager_Stop(this->dyna.actor.csId); func_80B818B4(this); } else if (this->unk_584 == 19) { - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 5, 0, 40, 60); - Quake_SetCountdown(quakeIndex, 17); + Quake_SetPerturbations(quakeIndex, 5, 0, 40, 60); + Quake_SetDuration(quakeIndex, 17); } } 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 f39ca3b8c..4a0abb472 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 @@ -151,10 +151,10 @@ void func_80BD5A18(BgIkanaShutter* this, PlayState* play) { this->dyna.actor.velocity.y *= 0.978f; this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y; if (this->dyna.actor.world.pos.y <= this->dyna.actor.home.pos.y) { - quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 21536); - Quake_SetQuakeValues(quakeIndex, 4, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 12); + Quake_SetPerturbations(quakeIndex, 4, 0, 0, 0); + Quake_SetDuration(quakeIndex, 12); func_80BD5828(this); } 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 5a69e3ca7..48045527f 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 @@ -69,19 +69,20 @@ void func_80C0A838(BgIkninSusceil* this, PlayState* play) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } -void func_80C0A86C(BgIkninSusceil* this, PlayState* play, s16 verticalMag, s16 countdown, s32 arg4) { +void BgIkninSusceil_RequestQuakeAndRumble(BgIkninSusceil* this, PlayState* play, s16 quakeY, s16 quakeDuration, + s32 rumbleType) { s32 pad; - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 31536); - Quake_SetQuakeValues(quakeIndex, verticalMag, 0, 0, 0); - Quake_SetCountdown(quakeIndex, countdown); + Quake_SetPerturbations(quakeIndex, quakeY, 0, 0, 0); + Quake_SetDuration(quakeIndex, quakeDuration); - if (arg4 == 1) { + if (rumbleType == 1) { Rumble_Request(SQ(100.0f), 255, 20, 150); - } else if (arg4 == 2) { + } else if (rumbleType == 2) { Rumble_Request(SQ(100.0f), 180, 20, 100); - } else if (arg4 == 3) { + } else if (rumbleType == 3) { Rumble_Request(SQ(100.0f), 120, 20, 10); } } @@ -154,7 +155,7 @@ void func_80C0ABA8(BgIkninSusceil* this, PlayState* play) { this->dyna.actor.velocity.y *= 0.93f; this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y; if (this->dyna.actor.world.pos.y <= this->dyna.actor.home.pos.y) { - func_80C0A86C(this, play, 4, 14, 1); + BgIkninSusceil_RequestQuakeAndRumble(this, play, 4, 14, 1); Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor)); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); func_80C0AC74(this); @@ -197,7 +198,7 @@ void func_80C0AD64(BgIkninSusceil* this, PlayState* play) { this->dyna.actor.velocity.y *= 0.98f; if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 365.0f, 0.5f, this->dyna.actor.velocity.y, 1.0f) < 0.1f) { - func_80C0A86C(this, play, 1, 14, 3); + BgIkninSusceil_RequestQuakeAndRumble(this, play, 1, 14, 3); CutsceneManager_Stop(this->dyna.actor.csId); func_80C0AB14(this); } else { @@ -216,7 +217,7 @@ void func_80C0AE5C(BgIkninSusceil* this, PlayState* play) { this->dyna.actor.velocity.y = CLAMP_MIN(this->dyna.actor.velocity.y, 1.0f); this->dyna.actor.world.pos.y = this->dyna.actor.world.pos.y + this->dyna.actor.velocity.y; if ((this->dyna.actor.home.pos.y + 365.0f) < this->dyna.actor.world.pos.y) { - func_80C0A86C(this, play, 3, 14, 2); + BgIkninSusceil_RequestQuakeAndRumble(this, play, 3, 14, 2); func_80C0AB14(this); } } diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 6acbc8aa8..9a3bbabdf 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -151,10 +151,10 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) { Actor_SpawnFloorDustRing(play, &this->dyna.actor, &this->dyna.actor.world.pos, 60.0f, 10, 8.0f, 500, 10, true); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); - quakeIndex = Quake_Add(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); + quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, -32536); - Quake_SetQuakeValues(quakeIndex, 2, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 10); + Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); + Quake_SetDuration(quakeIndex, 10); Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 180, 20, 100); 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 c4c38982e..054b612bc 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -1050,7 +1050,7 @@ void Boss03_Charge(Boss03* this, PlayState* play) { // Attack platform if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION); - func_800BC848(&this->actor, play, 20, 15); + Actor_RequestQuakeAndRumble(&this->actor, play, 20, 15); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WATER_EFFECT, 0.0f, this->waterHeight, 0.0f, 0, 0, 0x96, ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE); @@ -1773,7 +1773,7 @@ void Boss03_Stunned(Boss03* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { play_sound(NA_SE_IT_WALL_HIT_HARD); - func_800BC848(&this->actor, play, 10, 10); + Actor_RequestQuakeAndRumble(&this->actor, play, 10, 10); } } else { Math_ApproachS(&this->actor.shape.rot.z, -0x6000, 0xA, 0x900); 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 a39b10143..80fc52a22 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -481,7 +481,7 @@ void func_809ECF58(Boss04* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION); - func_800BC848(&this->actor, play, 15, 10); + Actor_RequestQuakeAndRumble(&this->actor, play, 15, 10); this->unk_6F4 = 15; sp3C.x = this->actor.focus.pos.x; sp3C.y = this->actor.focus.pos.y; 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 f8fef514d..fcc183ef9 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -610,10 +610,10 @@ void func_808A1B48(DoorShutter* this, PlayState* play) { } Actor_PlaySfx(&this->actor, NA_SE_EV_BIGWALL_BOUND); - quakeIndex = Quake_Add(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); + quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, -32536); - Quake_SetQuakeValues(quakeIndex, 2, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 10); + Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); + Quake_SetDuration(quakeIndex, 10); Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100); 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 d4c980055..34bae262d 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -220,10 +220,10 @@ void EnAni_FallToGround(EnAni* this, PlayState* play) { Animation_Change(&this->skelAnime, &gAniLandingThenStandingUpAnim, 1.0f, 0.0f, 16.0f, ANIMMODE_ONCE, 0.0f); this->stateFlags |= ANI_STATE_WRITHING; - quakeIndex = Quake_Add(play->cameraPtrs[CAM_ID_MAIN], QUAKE_TYPE_3); + quakeIndex = Quake_Request(play->cameraPtrs[CAM_ID_MAIN], QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 27000); - Quake_SetQuakeValues(quakeIndex, 7, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 20); + Quake_SetPerturbations(quakeIndex, 7, 0, 0, 0); + Quake_SetDuration(quakeIndex, 20); Actor_PlaySfx(&this->actor, NA_SE_IT_HAMMER_HIT); } 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 702e07f32..138b7287b 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -7,7 +7,7 @@ #include "z_en_bat.h" #include "objects/object_bat/object_bat.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_1000 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnBat*)thisx) 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 a78731e29..915bf85ba 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -540,13 +540,13 @@ void func_80A287E8(EnBigpamet* this, PlayState* play) { } if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); this->actor.velocity.y = this->unk_29E * 0.375f; Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 15, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 10); + Quake_SetPerturbations(quakeIndex, 15, 0, 0, 0); + Quake_SetDuration(quakeIndex, 10); Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100); 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 c360681e8..f6061d096 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -8,7 +8,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_1000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnBigpo*)thisx) 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 c9b31571f..3992cd02a 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -742,11 +742,11 @@ void EnBigslime_EndThrowMinislime(EnBigslime* this) { void EnBigslime_BreakIntoMinislime(EnBigslime* this, PlayState* play) { s32 i; - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 15, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 15); + Quake_SetPerturbations(quakeIndex, 15, 0, 0, 0); + Quake_SetDuration(quakeIndex, 15); Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100); 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 4ebdbe916..17ebe10f7 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -423,8 +423,8 @@ void EnBom_Explode(EnBom* this, PlayState* play) { } } -static s16 D_80872E98[] = { 3, 5 }; -static s16 D_80872E9C[] = { 10, 15 }; +static s16 sQuakeY[] = { 3, 5 }; +static s16 sQuakeDurations[] = { 10, 15 }; void EnBom_Update(Actor* thisx, PlayState* play) { Vec3f effVelocity = { 0.0f, 0.0f, 0.0f }; @@ -545,7 +545,8 @@ void EnBom_Update(Actor* thisx, PlayState* play) { } Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y - 10.0f, effPos.z, 0, 0, 0, this->isPowderKeg); - func_800BC848(thisx, play, D_80872E98[this->isPowderKeg], D_80872E9C[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] = 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 623d12f0e..3238069cc 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -6,7 +6,7 @@ #include "z_en_crow.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_1000 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnCrow*)thisx) 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 dd05c2d48..de02f44ad 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_1000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnDeath*)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 6f9c0e73a..2c7fdc030 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -328,19 +328,19 @@ void EnEgol_FootstepEffects(EnEgol* this, PlayState* play, f32 leftFootFrame, f3 if (Animation_OnFrame(&this->skelAnime, leftFootFrame) || Animation_OnFrame(&this->skelAnime, rightFootFrame)) { Vec3f spawnPos; Player* player = GET_PLAYER(play); - s32 quakeSize; + s32 quakeYOffset; s32 pad; Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_WALK); - quakeSize = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f); - if (quakeSize > 4) { - quakeSize = 4; - } else if (quakeSize < 1) { - quakeSize = 1; + quakeYOffset = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f); + if (quakeYOffset > 4) { + quakeYOffset = 4; + } else if (quakeYOffset < 1) { + quakeYOffset = 1; } if (player->stateFlags3 != PLAYER_STATE3_1000000) { - func_800BC848(&this->actor, play, quakeSize, 2); + Actor_RequestQuakeAndRumble(&this->actor, play, quakeYOffset, 2); } if (Animation_OnFrame(&this->skelAnime, leftFootFrame)) { Math_Vec3f_Copy(&spawnPos, &this->leftFootPos); @@ -755,7 +755,7 @@ void EnEgol_Laser(EnEgol* this, PlayState* play) { f32 nz; s32 pad3; s32 i; - s32 quakeSize; + s32 quakeYOffset; Player* player = GET_PLAYER(play); nx = COLPOLY_GET_NORMAL(colPoly->normal.x); @@ -773,14 +773,14 @@ void EnEgol_Laser(EnEgol* this, PlayState* play) { if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { EnEgol_SpawnEffect(this, &hitPos, &rotToNorm, 100, 0.02f, EYEGORE_EFFECT_IMPACT); } - quakeSize = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f); - if (quakeSize > 4) { - quakeSize = 4; - } else if (quakeSize < 1) { - quakeSize = 1; + quakeYOffset = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f); + if (quakeYOffset > 4) { + quakeYOffset = 4; + } else if (quakeYOffset < 1) { + quakeYOffset = 1; } if (player->stateFlags3 != PLAYER_STATE3_1000000) { - func_800BC848(&this->actor, play, quakeSize, 2); + Actor_RequestQuakeAndRumble(&this->actor, play, quakeYOffset, 2); } Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION); func_800B31BC(play, &hitPos, 40, -2, 255, 20); @@ -880,16 +880,16 @@ void EnEgol_Slam(EnEgol* this, PlayState* play) { Player* player = GET_PLAYER(play); Vec3f spawnPos; f32 dyToPlayer = fabsf(player->actor.world.pos.y - this->actor.world.pos.y); - s32 quakeSize; + s32 quakeYOffset; Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION); - quakeSize = 4 - (s32)(dyToPlayer * 0.02f); - if (quakeSize > 4) { - quakeSize = 4; - } else if (quakeSize < 1) { - quakeSize = 1; + quakeYOffset = 4 - (s32)(dyToPlayer * 0.02f); + if (quakeYOffset > 4) { + quakeYOffset = 4; + } else if (quakeYOffset < 1) { + quakeYOffset = 1; } - func_800BC848(&this->actor, play, quakeSize, 2); + Actor_RequestQuakeAndRumble(&this->actor, play, quakeYOffset, 2); if (this->actor.floorBgId == BGCHECK_SCENE) { Math_Vec3f_Copy(&spawnPos, &this->actor.world.pos); spawnPos.x += Math_SinS(this->actor.world.rot.y) * 60.0f; @@ -1064,7 +1064,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { this->subCamAt.y = 60.0f; this->subCamAt.z = 260.0f; Math_Vec3f_Copy(&atOffset, &this->subCamAt); - OLib_DbCameraVec3fSum(&this->actor.world, &atOffset, &this->subCamAt, 1); + OLib_Vec3fAdd(&this->actor.world, &atOffset, &this->subCamAt, OLIB_ADD_OFFSET); this->subCamEye.x = this->actor.world.pos.x; this->subCamEye.y = this->actor.world.pos.y + 70.0f; this->subCamEye.z = this->actor.world.pos.z; @@ -1080,7 +1080,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { } else { if (Animation_OnFrame(&this->skelAnime, 46.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION); - func_800BC848(&this->actor, play, 10, 5); + Actor_RequestQuakeAndRumble(&this->actor, play, 10, 5); } if ((curFrame >= this->animEndFrame) && (this->action != EYEGORE_ACTION_DEAD)) { s32 i; 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 bc4e3d743..434ee1b86 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_Obj_Syokudai/z_obj_syokudai.h" #include "objects/object_firefly/object_firefly.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_1000 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnFirefly*)thisx) 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 6c105caa2..00a0d4d9d 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,7 @@ #include "z_en_firefly2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_1000 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnFirefly2*)thisx) 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 a0c7e3180..3f993ae3a 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -1046,16 +1046,16 @@ s32 func_80A13564(EnGo* this, f32 arg1, f32 arg2, s32 arg3) { return ret; } -void func_80A136B8(PlayState* play, s16 speed, s16 verticalMag, s16 countdown) { - s16 quakeIndex = Quake_Add(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); +void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) { + s16 quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); - Quake_SetCountdown(quakeIndex, countdown); + Quake_SetDuration(quakeIndex, duration); Quake_SetSpeed(quakeIndex, speed); - Quake_SetQuakeValues(quakeIndex, verticalMag, 0, 0, 0); + Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); } void func_80A13728(EnGo* this, PlayState* play) { - func_80A136B8(play, 27767, 7, 20); + EnGo_RequestQuake(play, 27767, 7, 20); play->actorCtx.unk2 = 4; 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); 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 b07d1f2c7..c947d3334 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -451,11 +451,11 @@ s32 func_8093F6F8(EnGoroiwa* this, PlayState* play) { if ((this->actor.velocity.y < 0.0f) && (this->actor.world.pos.y <= sp7C)) { if (this->unk_1CA == 0) { if (this->actor.xzDistToPlayer < 400.0f) { - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 17232); - Quake_SetQuakeValues(quakeIndex, 3, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 7); + Quake_SetPerturbations(quakeIndex, 3, 0, 0, 0); + Quake_SetDuration(quakeIndex, 7); } this->unk_1C4 = 0.0f; 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 2f4257347..6d8e64931 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -523,8 +523,8 @@ s32 func_80998A48(EnGs* this, PlayState* play) { this->unk_1D4 = 0; this->unk_19A |= 1; - this->unk_21C = 5; - this->unk_21E = 40; + this->quakeY = 5; + this->quakeDuration = 40; this->unk_197++; this->unk_197 &= 0xF; this->unk_19D = 1; @@ -558,8 +558,8 @@ s32 func_80998BBC(EnGs* this, PlayState* play) { this->unk_1D4 = 0; this->unk_19A |= 1; - this->unk_21C = 5; - this->unk_21E = 40; + this->quakeY = 5; + this->quakeDuration = 40; this->unk_197--; this->unk_197 &= 0xF; this->unk_19D = 1; @@ -585,8 +585,8 @@ s32 func_80998D44(EnGs* this, PlayState* play) { this->unk_1E0 = -0.8f; Actor_PlaySfx(&this->actor, NA_SE_EV_G_STONE_CRUSH); this->unk_19A |= 1; - this->unk_21C = 40; - this->unk_21E = 11; + this->quakeY = 40; + this->quakeDuration = 11; this->unk_19D++; } else if (this->unk_19D == 1) { step = Math_SmoothStepToF(&this->unk_1DC, this->unk_1E0, 1.0f, 0.4f, 0.001f); @@ -611,8 +611,8 @@ s32 func_80998D44(EnGs* this, PlayState* play) { this->unk_216 = 0; this->unk_1E0 = 0.0f; this->unk_1D4 = 0; - this->unk_21C = 10; - this->unk_21E = 10; + this->quakeY = 10; + this->quakeDuration = 10; this->unk_1DC = 0.5f; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK); this->unk_19D += 1; @@ -641,8 +641,8 @@ s32 func_80998F9C(EnGs* this, PlayState* play) { this->unk_1EC = 0.0f; this->unk_19D = 1; - this->unk_21C = 2; - this->unk_21E = 40; + this->quakeY = 2; + this->quakeDuration = 40; this->unk_216 = 200; } @@ -714,8 +714,8 @@ s32 func_80998F9C(EnGs* this, PlayState* play) { this->unk_1F0 = 0.0f; this->unk_1EC = 0.5f; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK); - this->unk_21C = 20; - this->unk_21E = 2; + this->quakeY = 20; + this->quakeDuration = 2; this->unk_19D = 6; } } @@ -800,8 +800,8 @@ s32 func_809995A4(EnGs* this, PlayState* play) { if (this->unk_1D4 <= 0) { this->unk_19A &= ~4; - this->unk_21C = 3; - this->unk_21E = 40; + this->quakeY = 3; + this->quakeDuration = 40; this->unk_1D4 = 0; this->unk_19D++; } @@ -834,8 +834,8 @@ s32 func_809995A4(EnGs* this, PlayState* play) { this->unk_1DC = 0.0f; this->unk_19D++; - this->unk_21C = 5; - this->unk_21E = 20; + this->quakeY = 5; + this->quakeDuration = 20; this->unk_19A |= 1; this->unk_216 = 200; this->unk_1E0 = (this->unk_197 >> 2) * 0x444; @@ -1028,8 +1028,8 @@ void EnGs_Update(Actor* thisx, PlayState* play) { if ((this->actor.xyzDistToPlayerSq > SQ(400.0f)) || (sp2E < 0) || (sp2E > SCREEN_WIDTH) || (sp2C < 0) || (sp2C > SCREEN_HEIGHT)) { this->unk_216 = 0; - } else if (this->unk_21C > 0) { - func_800BC848(&this->actor, play, this->unk_21C, this->unk_21E); + } else if (this->quakeY > 0) { + Actor_RequestQuakeAndRumble(&this->actor, play, this->quakeY, this->quakeDuration); } } else { this->unk_216 = 0; @@ -1048,8 +1048,8 @@ void EnGs_Update(Actor* thisx, PlayState* play) { } } - if (this->unk_21C > 0) { - this->unk_21C = 0; + if (this->quakeY > 0) { + this->quakeY = 0; } func_80999B34(this); 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 fb2d62816..abb4a5b86 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -53,8 +53,8 @@ typedef struct EnGs { /* 0x216 */ s16 unk_216; /* 0x218 */ s16 unk_218; /* 0x21A */ s16 unk_21A; - /* 0x21C */ s16 unk_21C; - /* 0x21E */ s16 unk_21E; + /* 0x21C */ s16 quakeY; + /* 0x21E */ s16 quakeDuration; } EnGs; // size = 0x220 #endif // Z_EN_GS_H 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 254c9ad67..22ef1282a 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -597,11 +597,11 @@ void func_8095EBDC(EnIshi* this, PlayState* play) { } if (sp70 == 1) { - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 17232); - Quake_SetQuakeValues(quakeIndex, 3, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 7); + Quake_SetPerturbations(quakeIndex, 3, 0, 0, 0); + Quake_SetDuration(quakeIndex, 7); Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150); } 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 19fd2c19f..0eac608d9 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -609,7 +609,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { this->subCamEyeNext.z = D_80971DCC[this->unk190].z; Math_Vec3f_Copy(&tempVec, &this->subCamEyeNext); - OLib_DbCameraVec3fSum(&this->picto.actor.home, &tempVec, &this->subCamEyeNext, 1); + OLib_Vec3fAdd(&this->picto.actor.home, &tempVec, &this->subCamEyeNext, OLIB_ADD_OFFSET); Math_Vec3f_Copy(&this->subCamAtNext, &this->unk22C); Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext); Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext); @@ -722,7 +722,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { this->subCamEyeNext.y = D_80971FA0[this->unk190].y; this->subCamEyeNext.z = D_80971FA0[this->unk190].z; Math_Vec3f_Copy(&vec3fCopy, &this->subCamEyeNext); - OLib_DbCameraVec3fSum(&this->picto.actor.home, &vec3fCopy, &this->subCamEyeNext, 1); + OLib_Vec3fAdd(&this->picto.actor.home, &vec3fCopy, &this->subCamEyeNext, OLIB_ADD_OFFSET); this->subCamAtNext.x = D_80971FE8[this->unk190].x + this->unk22C.x; this->subCamAtNext.y = D_80971FE8[this->unk190].y + this->unk22C.y; this->subCamAtNext.z = D_80971FE8[this->unk190].z + this->unk22C.z; @@ -831,7 +831,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->subCamEyeNext.y = D_80971E38[this->unk190].y; this->subCamEyeNext.z = D_80971E38[this->unk190].z; Math_Vec3f_Copy(&localVec3f, &this->subCamEyeNext); - OLib_DbCameraVec3fSum(&this->picto.actor.home, &localVec3f, &this->subCamEyeNext, 1); + OLib_Vec3fAdd(&this->picto.actor.home, &localVec3f, &this->subCamEyeNext, OLIB_ADD_OFFSET); if (1) {} this->subCamAtNext.x = D_80971EEC[this->unk190].x + this->unk22C.x; @@ -978,7 +978,7 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) { this->subCamEyeNext.z = D_80972030.z; Math_Vec3f_Copy(&tempunk238, &this->subCamEyeNext); - OLib_DbCameraVec3fSum(&this->picto.actor.home, &tempunk238, &this->subCamEyeNext, 1); + OLib_Vec3fAdd(&this->picto.actor.home, &tempunk238, &this->subCamEyeNext, OLIB_ADD_OFFSET); this->subCamAtNext.x = ((f32)D_8097203C.x) + this->unk22C.x; // cast req this->subCamAtNext.y = ((f32)D_8097203C.y) + this->unk22C.y; this->subCamAtNext.z = ((f32)D_8097203C.z) + this->unk22C.z; 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 4aa052549..3b6cbaf86 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -174,20 +174,20 @@ void EnMinislime_CheckBackgroundCollision(EnMinislime* this) { } void EnMinislime_AddIceShardEffect(EnMinislime* this) { + s32 pad; EnBigslime* bigslime = (EnBigslime*)this->actor.parent; EnBigslimeIceShardEffect* iceShardEffect; s32 i = 10 * this->id + BIGSLIME_NUM_VTX; s32 i_end = i + 10; - VecSph vecSph; - - vecSph.yaw = 0; + s16 pitch; + s16 yaw = 0; for (; i < i_end; i++) { iceShardEffect = &bigslime->iceShardEffect[i]; - vecSph.pitch = Rand_S16Offset(0x1000, 0x3000); - iceShardEffect->velocity.x = Math_CosS(vecSph.pitch) * Math_SinS(vecSph.yaw); - iceShardEffect->velocity.y = Math_SinS(vecSph.pitch); - iceShardEffect->velocity.z = Math_CosS(vecSph.pitch) * Math_CosS(vecSph.yaw); + pitch = Rand_S16Offset(0x1000, 0x3000); + iceShardEffect->velocity.x = Math_CosS(pitch) * Math_SinS(yaw); + iceShardEffect->velocity.y = Math_SinS(pitch); + iceShardEffect->velocity.z = Math_CosS(pitch) * Math_CosS(yaw); iceShardEffect->pos.x = this->actor.world.pos.x + (400.0f * this->actor.scale.x) * iceShardEffect->velocity.x; iceShardEffect->pos.y = this->actor.world.pos.y + (((iceShardEffect->velocity.y * 2.0f) - 1.0f) * 400.0f * this->actor.scale.y); @@ -198,7 +198,7 @@ void EnMinislime_AddIceShardEffect(EnMinislime* this) { iceShardEffect->isEnabled = true; Math_Vec3f_ScaleAndStore(&iceShardEffect->velocity, Rand_ZeroFloat(3.0f) + 7.0f, &iceShardEffect->velocity); iceShardEffect->scale = (Rand_ZeroFloat(6.0f) + 2.0f) * 0.001f; - vecSph.yaw += 0x1999; + yaw += 0x1999; } this->frozenAlpha = 0; 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 62dff4188..850442bad 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -1224,10 +1224,10 @@ void EnPametfrog_SetupSnapperSpawn(EnPametfrog* this, PlayState* play) { // Zooms in on Snapper spawn point Play_SetCameraAtEye(play, this->subCamId, &subCamAt, &subCamEye); - this->quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); + this->quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(this->quakeIndex, 18000); - Quake_SetQuakeValues(this->quakeIndex, 2, 0, 0, 0); - Quake_SetCountdown(this->quakeIndex, 15); + Quake_SetPerturbations(this->quakeIndex, 2, 0, 0, 0); + Quake_SetDuration(this->quakeIndex, 15); Rumble_Request(this->actor.xyzDistToPlayerSq, 120, 20, 10); @@ -1249,12 +1249,12 @@ void EnPametfrog_SnapperSpawn(EnPametfrog* this, PlayState* play) { void EnPametfrog_SetupTransitionGekkoSnapper(EnPametfrog* this, PlayState* play) { this->actor.params = GEKKO_GET_SNAPPER; - Quake_Remove(this->quakeIndex); + Quake_RemoveRequest(this->quakeIndex); - this->quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + this->quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(this->quakeIndex, 20000); - Quake_SetQuakeValues(this->quakeIndex, 17, 0, 0, 0); - Quake_SetCountdown(this->quakeIndex, 12); + Quake_SetPerturbations(this->quakeIndex, 17, 0, 0, 0); + Quake_SetDuration(this->quakeIndex, 12); Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150); 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 35a972dfc..53ae73479 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 @@ -7,7 +7,7 @@ #include "z_en_po_sisters.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_1000 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnPoSisters*)thisx) 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 95bd2d474..c8da2f1ee 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -4,10 +4,11 @@ * Description: Poe */ +#include "prevent_bss_reordering.h" #include "z_en_poh.h" #include "objects/object_po/object_po.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_1000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnPoh*)thisx) 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 3716f18d0..dd82ef682 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 @@ -195,7 +195,7 @@ void EnStopHeishi_UpdateHeadThirdDay(EnStopheishi* this) { this->headTurnTimer1 = 50; } } - } else if ((this->headTurnTimer1 == 0) && (Quake_NumActiveQuakes() != 0) && (this->headTurnTimer2 >= 6)) { + } else if ((this->headTurnTimer1 == 0) && (Quake_GetNumActiveQuakes() != 0) && (this->headTurnTimer2 >= 6)) { this->headTurnTimer2 = 0; } } 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 0e5b8a0f5..24d036bee 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -350,7 +350,7 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) { this->actor.shape.rot.y += phi_v0; Actor_PlaySfx(&this->actor, NA_SE_IT_BIG_BOMB_EXPLOSION); - func_800BC848(&this->actor, play, 4, 4); + Actor_RequestQuakeAndRumble(&this->actor, play, 4, 4); this->unk_1A0++; } else { Vec3f sp90; 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 42ff16ccf..70ab37232 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -425,7 +425,7 @@ void func_80A916F0(EnTest6* this, PlayState* play) { CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); func_800B7298(play, NULL, PLAYER_CSMODE_END); EnTest6_DisableMotionBlur(); - Distortion_ClearType(DISTORTION_TYPE_5); + Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME); Actor_Kill(&this->actor); } @@ -491,8 +491,8 @@ void func_80A91760(EnTest6* this, PlayState* play) { } } EnTest6_EnableMotionBlur(120); - Distortion_SetType(DISTORTION_TYPE_5); - Distortion_SetCountdown(80); + Distortion_Request(DISTORTION_TYPE_SONG_OF_TIME); + Distortion_SetDuration(80); play->unk_18844 = true; this->cueId = 95; } @@ -546,7 +546,7 @@ void func_80A91760(EnTest6* this, PlayState* play) { if (this->unk_27A == 10) { this->unk_14C = 0.1f; EnTest6_DisableMotionBlur(); - Distortion_ClearType(DISTORTION_TYPE_5); + Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME); play->unk_18844 = false; if (this->unk_254 != NULL) { ZeldaArena_Free(this->unk_254); @@ -646,7 +646,7 @@ void func_80A92118(EnTest6* this, PlayState* play) { CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); func_800B7298(play, NULL, PLAYER_CSMODE_END); EnTest6_DisableMotionBlur(); - Distortion_ClearType(DISTORTION_TYPE_5); + Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME); Actor_Kill(&this->actor); } @@ -713,8 +713,8 @@ void func_80A92188(EnTest6* this, PlayState* play) { case 115: EnTest6_EnableMotionBlur(20); - Distortion_SetType(DISTORTION_TYPE_5); - Distortion_SetCountdown(90); + Distortion_Request(DISTORTION_TYPE_SONG_OF_TIME); + Distortion_SetDuration(90); this->cueId = 2; break; @@ -744,7 +744,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { case 14: case 15: EnTest6_EnableMotionBlur(50); - Distortion_ClearType(DISTORTION_TYPE_5); + Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME); this->cueId = 0; break; 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 d472077ec..a26095bc7 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -7,7 +7,7 @@ #include "prevent_bss_reordering.h" #include "z_en_thiefbird.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_1000 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000) #define THIS ((EnThiefbird*)thisx) diff --git a/src/overlays/actors/ovl_En_Twig/z_en_twig.c b/src/overlays/actors/ovl_En_Twig/z_en_twig.c index a86359610..b756d0f92 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -4,6 +4,7 @@ * Description: Beaver Race Ring */ +#include "prevent_bss_reordering.h" #include "z_en_twig.h" #include "objects/object_twig/object_twig.h" 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 d6cc0e9e6..209218163 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -8,8 +8,8 @@ #include "objects/gameplay_keep/gameplay_keep.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_1000 | ACTOR_FLAG_100000 | \ +#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 THIS ((EnWiz*)thisx) 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 66c927f1d..facd8de41 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -117,16 +117,16 @@ u32 func_80BB9A1C(ObjChan* this, f32 arg1) { f32 sp20; sp20 = Math_SinS(this->unk1D4) * this->unk1D0; - temp_f6 = (Math_CosS(this->unk1D4) * 0.03834952f * this->unk1D0) + arg1; + temp_f6 = (Math_CosS(this->unk1D4) * (400 * M_PI / 0x8000) * this->unk1D0) + arg1; if (temp_f6 != 0.0f) { - this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * 0.03834952f, temp_f6)); + this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * (400 * M_PI / 0x8000), temp_f6)); } else if (sp20 >= 0.0f) { this->unk1D4 = 0x4000; } else { this->unk1D4 = -0x4000; } if (Math_CosS(this->unk1D4) != 0.0f) { - this->unk1D0 = (temp_f6 / (Math_CosS(this->unk1D4) * 0.03834952f)); + this->unk1D0 = (temp_f6 / (Math_CosS(this->unk1D4) * (400 * M_PI / 0x8000))); } else { this->unk1D0 = sp20; } diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c index b4b27784e..79007175d 100644 --- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c +++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c @@ -174,7 +174,7 @@ void ObjChikuwa_Update(Actor* thisx, PlayState* play) { func_809B17D0(play, this, &temp->unk_00); temp_fs0 = Math3D_Vec3fDistSq(&temp->unk_00, &GET_PLAYER(play)->actor.world.pos); if (temp_fs0 < SQ(240.0f)) { - quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); if (temp_fs0 < SQ(120.0f)) { quakeVerticalMag = 4; } else { @@ -182,8 +182,8 @@ void ObjChikuwa_Update(Actor* thisx, PlayState* play) { } Quake_SetSpeed(quakeIndex, 17232); - Quake_SetQuakeValues(quakeIndex, quakeVerticalMag, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 7); + Quake_SetPerturbations(quakeIndex, quakeVerticalMag, 0, 0, 0); + Quake_SetDuration(quakeIndex, 7); } } } 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 c942f622b..0dba9a21f 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -458,20 +458,20 @@ void func_80B139F4(ObjDhouse* this, PlayState* play) { s16 quakeIndex; if (this->unk_1370 == 117) { - quakeIndex = Quake_Add(camera, QUAKE_TYPE_3); + quakeIndex = Quake_Request(camera, QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 8, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 17); + Quake_SetPerturbations(quakeIndex, 8, 0, 0, 0); + Quake_SetDuration(quakeIndex, 17); } else if (this->unk_1370 == 105) { - quakeIndex = Quake_Add(camera, QUAKE_TYPE_3); + quakeIndex = Quake_Request(camera, QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 7, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 20); + Quake_SetPerturbations(quakeIndex, 7, 0, 0, 0); + Quake_SetDuration(quakeIndex, 20); } else if (this->unk_1370 == 90) { - quakeIndex = Quake_Add(camera, QUAKE_TYPE_3); + quakeIndex = Quake_Request(camera, QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 5, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 62); + Quake_SetPerturbations(quakeIndex, 5, 0, 0, 0); + Quake_SetDuration(quakeIndex, 62); } this->unk_1370--; diff --git a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c index 836a70ba9..f3c271c69 100644 --- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c +++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c @@ -281,7 +281,7 @@ void ObjDora_UpdateCollision(ObjDora* this, PlayState* play) { this->lastGongHitType = DORA_HIT_STRONG; } - func_800BC848(&this->actor, play, 5, 10); + Actor_RequestQuakeAndRumble(&this->actor, play, 5, 10); ObjDora_SetupMoveGong(this); if ((ObjDora_IsHalfHour(time) == true) && (this->rupeeDropTimer == 0)) { diff --git a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c index 1c33af7fe..a2007ad9b 100644 --- a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c +++ b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c @@ -74,7 +74,7 @@ void ObjHariko_BobHead(ObjHariko* this, PlayState* play) { } void ObjHariko_CheckForQuakes(ObjHariko* this) { - if (Quake_NumActiveQuakes() != 0) { + if (Quake_GetNumActiveQuakes() != 0) { ObjHariko_SetupBobHead(this); } } 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 e69729b92..692fa8448 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -293,13 +293,13 @@ void func_80A54600(PlayState* play, Vec3f* arg1, f32 arg2, f32 arg3) { } } -void ObjHugebombiwa_AddQuake(ObjHugebombiwa* this, PlayState* play, s32 quakeVerticalMag) { +void ObjHugebombiwa_RequestQuakeAndRumble(ObjHugebombiwa* this, PlayState* play, s32 quakeVerticalMag) { s32 pad[2]; - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, quakeVerticalMag, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 7); + Quake_SetPerturbations(quakeIndex, quakeVerticalMag, 0, 0, 0); + Quake_SetDuration(quakeIndex, 7); Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150); } @@ -516,7 +516,7 @@ void func_80A55064(ObjHugebombiwa* this, PlayState* play) { ptr->unk_24 = 1; func_80A53E60(play, &ptr->unk_0C, ptr->unk_18, ptr->unk_00.y * 9.8f); if ((play->gameplayFrames % 4) == 0) { - ObjHugebombiwa_AddQuake(this, play, (s32)(Rand_ZeroOne() * 5.5f) + 1); + ObjHugebombiwa_RequestQuakeAndRumble(this, play, (s32)(Rand_ZeroOne() * 5.5f) + 1); } } } @@ -612,7 +612,7 @@ void func_80A55564(ObjHugebombiwa* this, PlayState* play) { ptr->unk_24 = 1; func_80A54600(play, &ptr->unk_0C, ptr->unk_18, ptr->unk_00.y * 10.1f); if ((play->gameplayFrames % 4) == 0) { - ObjHugebombiwa_AddQuake(this, play, (s32)(Rand_ZeroOne() * 5.5f) + 1); + ObjHugebombiwa_RequestQuakeAndRumble(this, play, (s32)(Rand_ZeroOne() * 5.5f) + 1); } } } 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 a82c9ceea..88d04b780 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c @@ -134,10 +134,10 @@ void func_8093D7A0(ObjLift* this, PlayState* play) { if (OBJLIFT_GET_7(&this->dyna.actor) == 7) { func_8093D9C0(this); } else { - quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_1); + quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_1); Quake_SetSpeed(quakeIndex, 10000); - Quake_SetQuakeValues(quakeIndex, 2, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 20); + Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); + Quake_SetDuration(quakeIndex, 20); func_8093D88C(this); } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index 6cdada70b..d5aeffd8f 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -61,13 +61,13 @@ void ObjTokeiStep_SetSysMatrix(ObjTokeiStepPanel* panel) { mtx->zw = panel->pos.z; } -void ObjTokeiStep_AddQuake(ObjTokeiStep* this, PlayState* play) { +void ObjTokeiStep_RequestQuakeAndRumble(ObjTokeiStep* this, PlayState* play) { s32 pad[2]; - s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); + s16 quakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, 20000); - Quake_SetQuakeValues(quakeIndex, 1, 0, 0, 0); - Quake_SetCountdown(quakeIndex, 7); + Quake_SetPerturbations(quakeIndex, 1, 0, 0, 0); + Quake_SetDuration(quakeIndex, 7); Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10); } @@ -180,7 +180,7 @@ s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) { } if (panel->numBounces == 1) { ObjTokeiStep_SpawnDust(this2, panel, play); - ObjTokeiStep_AddQuake(this2, play); + ObjTokeiStep_RequestQuakeAndRumble(this2, 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 93caeb33d..f869b95ac 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -72,7 +72,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) { s32 i; s32 pad2; Vec3f activeCamEye = GET_ACTIVE_CAM(play)->eye; - Camera* cam = GET_ACTIVE_CAM(play); + Camera* activeCam = GET_ACTIVE_CAM(play); Vec3f quakeOffset; u8 alpha; s32 colorIndex = OCEFF_WIPE5_GET_SONG_TYPE(thisx) * 3; @@ -88,7 +88,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) { colorIndex = 0; } - Camera_GetQuakeOffset(&quakeOffset, cam); + Camera_GetQuakeOffset(&quakeOffset, activeCam); if (this->counter < 32) { z = Math_SinS(this->counter << 9) * phi_fv1; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index ebffa7548..b399de9d3 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -859,9 +859,9 @@ 0x800BC5B8:("Actor_IsTargeted",), 0x800BC5EC:("Actor_OtherIsTargeted",), 0x800BC620:("func_800BC620",), - 0x800BC770:("Actor_AddQuake",), - 0x800BC7D8:("Actor_AddQuakeWithSpeed",), - 0x800BC848:("func_800BC848",), + 0x800BC770:("Actor_RequestQuake",), + 0x800BC7D8:("Actor_RequestQuakeWithSpeed",), + 0x800BC848:("Actor_RequestQuakeAndRumble",), 0x800BC8B8:("Actor_DrawDoorLock",), 0x800BCB50:("Actor_SpawnShieldParticlesMetal",), 0x800BCB70:("Actor_SetColorFilter",), @@ -2072,17 +2072,17 @@ 0x8010C36C:("OLib_ClampMaxDist",), 0x8010C3D4:("OLib_Vec3fDistNormalize",), 0x8010C484:("OLib_VecSphToVec3f",), - 0x8010C530:("OLib_VecSphGeoToVec3f",), + 0x8010C530:("OLib_VecGeoToVec3f",), 0x8010C574:("OLib_Vec3fToVecSph",), - 0x8010C6C8:("OLib_Vec3fToVecSphGeo",), + 0x8010C6C8:("OLib_Vec3fToVecGeo",), 0x8010C710:("OLib_Vec3fDiffToVecSph",), - 0x8010C764:("OLib_Vec3fDiffToVecSphGeo",), - 0x8010C7B8:("OLib_VecSphAddToVec3f",), + 0x8010C764:("OLib_Vec3fDiffToVecGeo",), + 0x8010C7B8:("OLib_AddVecGeoToVec3f",), 0x8010C838:("OLib_Vec3fDiffRad",), 0x8010C8C8:("OLib_Vec3fDiffDegF",), 0x8010C930:("OLib_Vec3fDiffBinAng",), - 0x8010C9C8:("OLib_DbCameraVec3fDiff",), - 0x8010CAA0:("OLib_DbCameraVec3fSum",), + 0x8010C9C8:("OLib_Vec3fDiff",), + 0x8010CAA0:("OLib_Vec3fAdd",), 0x8010CB80:("Gfx_DrawTexRectRGBA16",), 0x8010CD98:("Gfx_DrawTexRectIA8",), 0x8010CFBC:("Gfx_DrawTexRectIA8_DropShadow",), @@ -2289,28 +2289,28 @@ 0x8012A4D0:("Quake_CallbackType2",), 0x8012A540:("Quake_CallbackType4",), 0x8012A5D8:("Quake_GetFreeIndex",), - 0x8012A638:("Quake_AddImpl",), - 0x8012A6F0:("Quake_RemoveRequest",), + 0x8012A638:("Quake_RequestImpl",), + 0x8012A6F0:("Quake_Remove",), 0x8012A718:("Quake_GetRequest",), 0x8012A774:("Quake_SetValue",), 0x8012A8A8:("Quake_SetSpeed",), - 0x8012A8F0:("Quake_SetCountdown",), - 0x8012A940:("Quake_GetCountdown",), - 0x8012A978:("Quake_SetQuakeValues",), - 0x8012A9E0:("Quake_SetQuakeValues2",), + 0x8012A8F0:("Quake_SetDuration",), + 0x8012A940:("Quake_GetTimeLeft",), + 0x8012A978:("Quake_SetPerturbations",), + 0x8012A9E0:("Quake_SetOrientation",), 0x8012AA48:("Quake_Init",), - 0x8012AA9C:("Quake_Add",), - 0x8012AAC0:("Quake_Remove",), - 0x8012AB08:("Quake_Calc",), + 0x8012AA9C:("Quake_Request",), + 0x8012AAC0:("Quake_RemoveRequest",), + 0x8012AB08:("Quake_Update",), 0x8012AE68:("Distortion_Init",), - 0x8012AEAC:("Distortion_SetCountdown",), - 0x8012AED4:("Distortion_GetCountdown",), + 0x8012AEAC:("Distortion_SetDuration",), + 0x8012AED4:("Distortion_GetTimeLeft",), 0x8012AEE4:("Distortion_GetType",), - 0x8012AEF4:("Distortion_SetType",), - 0x8012AF18:("Distortion_ClearType",), + 0x8012AEF4:("Distortion_Request",), + 0x8012AF18:("Distortion_RemoveRequest",), 0x8012AF38:("Distortion_GetUnderwaterCurrentSpeed",), 0x8012AF9C:("Distortion_Update",), - 0x8012BBE8:("Quake_NumActiveQuakes",), + 0x8012BBE8:("Quake_GetNumActiveQuakes",), 0x8012BC50:("Gfx_SetFog",), 0x8012BD8C:("Gfx_SetFogWithSync",), 0x8012BF08:("Gfx_SetFog2",), @@ -9710,7 +9710,7 @@ 0x80A134B0:("func_80A134B0",), 0x80A134F4:("func_80A134F4",), 0x80A13564:("func_80A13564",), - 0x80A136B8:("func_80A136B8",), + 0x80A136B8:("EnGo_RequestQuake",), 0x80A13728:("func_80A13728",), 0x80A137C0:("func_80A137C0",), 0x80A139E4:("func_80A139E4",), @@ -10620,7 +10620,7 @@ 0x80A53E60:("func_80A53E60",), 0x80A541F4:("func_80A541F4",), 0x80A54600:("func_80A54600",), - 0x80A54980:("ObjHugebombiwa_AddQuake",), + 0x80A54980:("ObjHugebombiwa_RequestQuakeAndRumble",), 0x80A54A0C:("func_80A54A0C",), 0x80A54AC0:("ObjHugebombiwa_Init",), 0x80A54BC4:("ObjHugebombiwa_Destroy",), @@ -11433,7 +11433,7 @@ 0x80A9BC0C:("func_80A9BC0C",), 0x80A9BD24:("func_80A9BD24",), 0x80A9C058:("func_80A9C058",), - 0x80A9C18C:("func_80A9C18C",), + 0x80A9C18C:("BgHakuginPost_RequestQuakeAndRumble",), 0x80A9C228:("func_80A9C228",), 0x80A9C634:("func_80A9C634",), 0x80A9C854:("func_80A9C854",), @@ -12211,7 +12211,7 @@ 0x80AD566C:("EnTrt2_TransformLimbDraw",), 0x80AD56E8:("func_80AD56E8",), 0x80AD5BB0:("ObjTokeiStep_SetSysMatrix",), - 0x80AD5BE8:("ObjTokeiStep_AddQuake",), + 0x80AD5BE8:("ObjTokeiStep_RequestQuakeAndRumble",), 0x80AD5C70:("ObjTokeiStep_SpawnDust",), 0x80AD5DFC:("ObjTokeiStep_InitSteps",), 0x80AD5EB8:("ObjTokeiStep_InitStepsOpen",), @@ -16662,7 +16662,7 @@ 0x80C0A740:("func_80C0A740",), 0x80C0A804:("func_80C0A804",), 0x80C0A838:("func_80C0A838",), - 0x80C0A86C:("func_80C0A86C",), + 0x80C0A86C:("BgIkninSusceil_RequestQuakeAndRumble",), 0x80C0A95C:("func_80C0A95C",), 0x80C0AA70:("BgIkninSusceil_Init",), 0x80C0AAE0:("BgIkninSusceil_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6abc9a1a8..68b421ddb 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1326,7 +1326,7 @@ 0x801C0EA0:("D_801C0EA0","UNK_TYPE1","",0x1), 0x801C0EAC:("sSheathLimbModelShieldOnBackPos","Vec3f","",0xC), 0x801C0EB8:("sSheathLimbModelShieldOnBackZyxRot","Vec3s","",0x6), - 0x801C0EC0:("sIsQuakeInitialized","UNK_TYPE2","",0x2), + 0x801C0EC0:("sQuakeUnused","UNK_TYPE2","",0x2), 0x801C0EC4:("sQuakeRequestCount","s16","",0x2), 0x801C0EC8:("sQuakeCallbacks","quake_callback_func","[7]",0x1c), 0x801C0EE4:("D_801C0EE4","s16","",0x2), @@ -4006,7 +4006,7 @@ 0x801F59E8:("sPlayerGetItemRefPos","Vec3f","",0xC), 0x801F59F4:("sPlayerLeftHandType","s32","",0x4), 0x801F59F8:("sPlayerRightHandType","s32","",0x4), - 0x801F5A00:("sQuakeRequest","QuakeRequest","[4]",0x90), + 0x801F5A00:("sQuakeRequests","QuakeRequest","[4]",0x90), 0x801F5A90:("sDistortionRequest","DistortionRequest","",0xc), 0x801F5AA0:("sMatAnimStep","s32","",0x4), 0x801F5AA4:("sMatAnimFlags","u32","",0x4), @@ -5679,8 +5679,8 @@ 0x80872E8C:("D_80872E8C","UNK_TYPE1","",0x1), 0x80872E90:("D_80872E90","UNK_TYPE4","",0x4), 0x80872E94:("D_80872E94","UNK_TYPE4","",0x4), - 0x80872E98:("D_80872E98","UNK_TYPE1","",0x1), - 0x80872E9C:("D_80872E9C","UNK_TYPE1","",0x1), + 0x80872E98:("sQuakeY","UNK_TYPE1","",0x1), + 0x80872E9C:("sQuakeDurations","UNK_TYPE1","",0x1), 0x80872EA0:("D_80872EA0","UNK_TYPE4","",0x4), 0x80872EAC:("D_80872EAC","UNK_TYPE4","",0x4), 0x80872EB8:("D_80872EB8","UNK_TYPE4","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index 219785c05..45a128574 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -321,7 +321,10 @@ wordReplace = { "func_800B86C8": "Actor_ChangeFocus", "func_800DF840": "Camera_ChangeMode", "func_800B90F4": "Actor_DeactivateLens", - "func_800BC770": "Actor_AddQuake", + "Actor_AddQuake": "Actor_RequestQuake", + "func_800BC770": "Actor_RequestQuake", + "Actor_AddQuakeWithSpeed": "Actor_RequestQuakeWithSpeed", + "func_800BC848": "Actor_RequestQuakeAndRumble", "func_800DF840": "Camera_ChangeMode", "zelda_malloc": "ZeldaArena_Malloc", "zelda_mallocR": "ZeldaArena_MallocR", @@ -635,12 +638,22 @@ wordReplace = { "func_80114E90": "Inventory_HasEmptyBottle", "func_80114F2C": "Inventory_HasItemInBottle", "func_80123C90": "Player_SetEquipmentData", - "Quake2_ClearType": "Distortion_ClearType", - "Quake2_SetType": "Distortion_SetType", - "Quake2_SetCountdown": "Distortion_SetCountdown", + "Quake2_SetType": "Distortion_Request", + "Distortion_SetType": "Distortion_Request", + "Quake2_SetCountdown": "Distortion_SetDuration", + "Distortion_SetCountdown": "Distortion_SetDuration", + "Distortion_GetCountdown": "Distortion_GetTimeLeft", + "Quake2_ClearType": "Distortion_RemoveRequest", + "Distortion_ClearType": "Distortion_RemoveRequest", "func_800BE680": "Actor_DrawDamageEffects", "func_8012F22C": "Inventory_GetSkullTokenCount", - "Quake_RemoveFromIdx": "Quake_Remove", + "Quake_Add": "Quake_Request", + "Quake_SetQuakeValues": "Quake_SetPerturbations", + "Quake_SetCountdown": "Quake_SetDuration", + "Quake_GetCountdown": "Quake_GetTimeLeft", + "Quake_NumActiveQuakes": "Quake_GetNumActiveQuakes", + "Quake_RemoveFromIdx": "Quake_RemoveRequest", + "OLib_DbCameraVec3fSum":"OLib_Vec3fAdd", "func_8013AB00": "SubS_DrawTransformFlex", "func_8013A860": "SubS_DrawTransformFlexLimb", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index a2cbcfe76..916349686 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -373,9 +373,9 @@ asm/non_matchings/code/z_actor/Actor_TestFloorInDirection.s,Actor_TestFloorInDir asm/non_matchings/code/z_actor/Actor_IsTargeted.s,Actor_IsTargeted,0x800BC5B8,0xD asm/non_matchings/code/z_actor/Actor_OtherIsTargeted.s,Actor_OtherIsTargeted,0x800BC5EC,0xD asm/non_matchings/code/z_actor/func_800BC620.s,func_800BC620,0x800BC620,0x54 -asm/non_matchings/code/z_actor/Actor_AddQuake.s,Actor_AddQuake,0x800BC770,0x1A -asm/non_matchings/code/z_actor/Actor_AddQuakeWithSpeed.s,Actor_AddQuakeWithSpeed,0x800BC7D8,0x1C -asm/non_matchings/code/z_actor/func_800BC848.s,func_800BC848,0x800BC848,0x1C +asm/non_matchings/code/z_actor/Actor_RequestQuake.s,Actor_RequestQuake,0x800BC770,0x1A +asm/non_matchings/code/z_actor/Actor_RequestQuakeWithSpeed.s,Actor_RequestQuakeWithSpeed,0x800BC7D8,0x1C +asm/non_matchings/code/z_actor/Actor_RequestQuakeAndRumble.s,Actor_RequestQuakeAndRumble,0x800BC848,0x1C asm/non_matchings/code/z_actor/Actor_DrawDoorLock.s,Actor_DrawDoorLock,0x800BC8B8,0xA6 asm/non_matchings/code/z_actor/Actor_SpawnShieldParticlesMetal.s,Actor_SpawnShieldParticlesMetal,0x800BCB50,0x8 asm/non_matchings/code/z_actor/Actor_SetColorFilter.s,Actor_SetColorFilter,0x800BCB70,0x21 @@ -1586,17 +1586,17 @@ asm/non_matchings/code/z_olib/OLib_ClampMinDist.s,OLib_ClampMinDist,0x8010C304,0 asm/non_matchings/code/z_olib/OLib_ClampMaxDist.s,OLib_ClampMaxDist,0x8010C36C,0x1A asm/non_matchings/code/z_olib/OLib_Vec3fDistNormalize.s,OLib_Vec3fDistNormalize,0x8010C3D4,0x2C asm/non_matchings/code/z_olib/OLib_VecSphToVec3f.s,OLib_VecSphToVec3f,0x8010C484,0x2B -asm/non_matchings/code/z_olib/OLib_VecSphGeoToVec3f.s,OLib_VecSphGeoToVec3f,0x8010C530,0x11 +asm/non_matchings/code/z_olib/OLib_VecGeoToVec3f.s,OLib_VecGeoToVec3f,0x8010C530,0x11 asm/non_matchings/code/z_olib/OLib_Vec3fToVecSph.s,OLib_Vec3fToVecSph,0x8010C574,0x55 -asm/non_matchings/code/z_olib/OLib_Vec3fToVecSphGeo.s,OLib_Vec3fToVecSphGeo,0x8010C6C8,0x12 +asm/non_matchings/code/z_olib/OLib_Vec3fToVecGeo.s,OLib_Vec3fToVecGeo,0x8010C6C8,0x12 asm/non_matchings/code/z_olib/OLib_Vec3fDiffToVecSph.s,OLib_Vec3fDiffToVecSph,0x8010C710,0x15 -asm/non_matchings/code/z_olib/OLib_Vec3fDiffToVecSphGeo.s,OLib_Vec3fDiffToVecSphGeo,0x8010C764,0x15 -asm/non_matchings/code/z_olib/OLib_VecSphAddToVec3f.s,OLib_VecSphAddToVec3f,0x8010C7B8,0x20 +asm/non_matchings/code/z_olib/OLib_Vec3fDiffToVecGeo.s,OLib_Vec3fDiffToVecGeo,0x8010C764,0x15 +asm/non_matchings/code/z_olib/OLib_AddVecGeoToVec3f.s,OLib_AddVecGeoToVec3f,0x8010C7B8,0x20 asm/non_matchings/code/z_olib/OLib_Vec3fDiffRad.s,OLib_Vec3fDiffRad,0x8010C838,0x24 asm/non_matchings/code/z_olib/OLib_Vec3fDiffDegF.s,OLib_Vec3fDiffDegF,0x8010C8C8,0x1A asm/non_matchings/code/z_olib/OLib_Vec3fDiffBinAng.s,OLib_Vec3fDiffBinAng,0x8010C930,0x26 -asm/non_matchings/code/z_olib/OLib_DbCameraVec3fDiff.s,OLib_DbCameraVec3fDiff,0x8010C9C8,0x36 -asm/non_matchings/code/z_olib/OLib_DbCameraVec3fSum.s,OLib_DbCameraVec3fSum,0x8010CAA0,0x34 +asm/non_matchings/code/z_olib/OLib_Vec3fDiff.s,OLib_Vec3fDiff,0x8010C9C8,0x36 +asm/non_matchings/code/z_olib/OLib_Vec3fAdd.s,OLib_Vec3fAdd,0x8010CAA0,0x34 asm/non_matchings/code/z_parameter/Gfx_DrawTexRectRGBA16.s,Gfx_DrawTexRectRGBA16,0x8010CB80,0x86 asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8.s,Gfx_DrawTexRectIA8,0x8010CD98,0x89 asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8_DropShadow.s,Gfx_DrawTexRectIA8_DropShadow,0x8010CFBC,0xC6 @@ -1803,28 +1803,28 @@ asm/non_matchings/code/z_quake/Quake_CallbackType3.s,Quake_CallbackType3,0x8012A asm/non_matchings/code/z_quake/Quake_CallbackType2.s,Quake_CallbackType2,0x8012A4D0,0x1C asm/non_matchings/code/z_quake/Quake_CallbackType4.s,Quake_CallbackType4,0x8012A540,0x26 asm/non_matchings/code/z_quake/Quake_GetFreeIndex.s,Quake_GetFreeIndex,0x8012A5D8,0x18 -asm/non_matchings/code/z_quake/Quake_AddImpl.s,Quake_AddImpl,0x8012A638,0x2E -asm/non_matchings/code/z_quake/Quake_RemoveRequest.s,Quake_RemoveRequest,0x8012A6F0,0xA +asm/non_matchings/code/z_quake/Quake_RequestImpl.s,Quake_RequestImpl,0x8012A638,0x2E +asm/non_matchings/code/z_quake/Quake_Remove.s,Quake_Remove,0x8012A6F0,0xA asm/non_matchings/code/z_quake/Quake_GetRequest.s,Quake_GetRequest,0x8012A718,0x17 asm/non_matchings/code/z_quake/Quake_SetValue.s,Quake_SetValue,0x8012A774,0x4D asm/non_matchings/code/z_quake/Quake_SetSpeed.s,Quake_SetSpeed,0x8012A8A8,0x12 -asm/non_matchings/code/z_quake/Quake_SetCountdown.s,Quake_SetCountdown,0x8012A8F0,0x14 -asm/non_matchings/code/z_quake/Quake_GetCountdown.s,Quake_GetCountdown,0x8012A940,0xE -asm/non_matchings/code/z_quake/Quake_SetQuakeValues.s,Quake_SetQuakeValues,0x8012A978,0x1A -asm/non_matchings/code/z_quake/Quake_SetQuakeValues2.s,Quake_SetQuakeValues2,0x8012A9E0,0x1A +asm/non_matchings/code/z_quake/Quake_SetDuration.s,Quake_SetDuration,0x8012A8F0,0x14 +asm/non_matchings/code/z_quake/Quake_GetTimeLeft.s,Quake_GetTimeLeft,0x8012A940,0xE +asm/non_matchings/code/z_quake/Quake_SetPerturbations.s,Quake_SetPerturbations,0x8012A978,0x1A +asm/non_matchings/code/z_quake/Quake_SetOrientation.s,Quake_SetOrientation,0x8012A9E0,0x1A asm/non_matchings/code/z_quake/Quake_Init.s,Quake_Init,0x8012AA48,0x15 -asm/non_matchings/code/z_quake/Quake_Add.s,Quake_Add,0x8012AA9C,0x9 -asm/non_matchings/code/z_quake/Quake_Remove.s,Quake_Remove,0x8012AAC0,0x12 -asm/non_matchings/code/z_quake/Quake_Calc.s,Quake_Calc,0x8012AB08,0xD8 +asm/non_matchings/code/z_quake/Quake_Request.s,Quake_Request,0x8012AA9C,0x9 +asm/non_matchings/code/z_quake/Quake_RemoveRequest.s,Quake_RemoveRequest,0x8012AAC0,0x12 +asm/non_matchings/code/z_quake/Quake_Update.s,Quake_Update,0x8012AB08,0xD8 asm/non_matchings/code/z_quake/Distortion_Init.s,Distortion_Init,0x8012AE68,0x11 -asm/non_matchings/code/z_quake/Distortion_SetCountdown.s,Distortion_SetCountdown,0x8012AEAC,0xA -asm/non_matchings/code/z_quake/Distortion_GetCountdown.s,Distortion_GetCountdown,0x8012AED4,0x4 +asm/non_matchings/code/z_quake/Distortion_SetDuration.s,Distortion_SetDuration,0x8012AEAC,0xA +asm/non_matchings/code/z_quake/Distortion_GetTimeLeft.s,Distortion_GetTimeLeft,0x8012AED4,0x4 asm/non_matchings/code/z_quake/Distortion_GetType.s,Distortion_GetType,0x8012AEE4,0x4 -asm/non_matchings/code/z_quake/Distortion_SetType.s,Distortion_SetType,0x8012AEF4,0x9 -asm/non_matchings/code/z_quake/Distortion_ClearType.s,Distortion_ClearType,0x8012AF18,0x8 +asm/non_matchings/code/z_quake/Distortion_Request.s,Distortion_Request,0x8012AEF4,0x9 +asm/non_matchings/code/z_quake/Distortion_RemoveRequest.s,Distortion_RemoveRequest,0x8012AF18,0x8 asm/non_matchings/code/z_quake/Distortion_GetUnderwaterCurrentSpeed.s,Distortion_GetUnderwaterCurrentSpeed,0x8012AF38,0x19 asm/non_matchings/code/z_quake/Distortion_Update.s,Distortion_Update,0x8012AF9C,0x313 -asm/non_matchings/code/z_quake/Quake_NumActiveQuakes.s,Quake_NumActiveQuakes,0x8012BBE8,0x1A +asm/non_matchings/code/z_quake/Quake_GetNumActiveQuakes.s,Quake_GetNumActiveQuakes,0x8012BBE8,0x1A asm/non_matchings/code/z_rcp/Gfx_SetFog.s,Gfx_SetFog,0x8012BC50,0x4F asm/non_matchings/code/z_rcp/Gfx_SetFogWithSync.s,Gfx_SetFogWithSync,0x8012BD8C,0x5F asm/non_matchings/code/z_rcp/Gfx_SetFog2.s,Gfx_SetFog2,0x8012BF08,0xD From 1be7517f3d9d5abb461f6ce6ba3eff53808079f7 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 19 May 2023 00:57:54 +1000 Subject: [PATCH 18/51] z_kaleido_scope_NES.c: Pause Pages (#1149) * import kaleido wip * PR review 1 * small fix * missed one --- include/functions.h | 2 +- include/z64.h | 14 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 4 +- .../ovl_kaleido_scope/z_kaleido_item.c | 26 +- .../ovl_kaleido_scope/z_kaleido_map.c | 72 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 39 +- .../ovl_kaleido_scope/z_kaleido_prompt.c | 6 +- .../ovl_kaleido_scope/z_kaleido_scope.h | 204 ++- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1428 +++++++++++++++-- tools/disasm/functions.txt | 12 +- tools/disasm/variables.txt | 74 +- 11 files changed, 1602 insertions(+), 279 deletions(-) diff --git a/include/functions.h b/include/functions.h index b17046288..c0a393695 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1343,7 +1343,7 @@ void* func_801068FC(PlayState* play, void* arg1, size_t size); void func_80108AF8(PlayState* play); s32 func_801090B0(s32 arg0); s32 func_80109124(s16 arg0); -// void func_801091F0(void); +void func_801091F0(PlayState* play); void func_80109428(PlayState* play); // void func_801094A0(void); // void func_801094C8(void); diff --git a/include/z64.h b/include/z64.h index 50405690f..95af2c157 100644 --- a/include/z64.h +++ b/include/z64.h @@ -261,11 +261,11 @@ typedef struct { /* 0x188 */ Vtx* questPageVtx; /* 0x18C */ Vtx* maskPageVtx; /* 0x190 */ Vtx* itemVtx; - /* 0x194 */ Vtx* mapVtx; + /* 0x194 */ Vtx* mapVtx; // inferred /* 0x198 */ Vtx* questVtx; /* 0x19C */ Vtx* maskVtx; - /* 0x1A0 */ Vtx* unk_1A0; - /* 0x1A4 */ Vtx* unk_1A4; + /* 0x1A0 */ Vtx* promptPageVtx; + /* 0x1A4 */ Vtx* infoPanelVtx; /* 0x1A8 */ Vtx* cursorVtx; /* 0x1AC */ OcarinaStaff* ocarinaStaff; /* 0x1B0 */ UNK_TYPE1 unk_1B0[0x20]; @@ -281,10 +281,10 @@ typedef struct { /* 0x206 */ u16 switchPageTimer; /* 0x208 */ u16 savePromptState; /* 0x20C */ f32 unk_20C; - /* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen - /* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen - /* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen - /* 0x21C */ f32 maskPageRoll; // rotation (-z) of the mask page into the screen + /* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen + /* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen + /* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen + /* 0x21C */ f32 maskPageRoll; // rotation (-z) of the mask page into the screen /* 0x220 */ f32 roll; /* 0x224 */ u16 alpha; /* 0x226 */ s16 offsetY; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 10d2368b5..75c031c0a 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -136,7 +136,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_QUEST] * 4, pauseCtx->questVtx); + KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_QUEST] * 4, pauseCtx->questVtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -394,7 +394,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { POLY_OPA_DISP, sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[i]], 16, 16, 0); } } - } else if (IS_PAUSE_MAIN_STATE_SAVE_PROMPT || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { + } else if (IS_PAUSE_MAIN_STATE_SONG_PROMPT || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { // Draw the buttons for playing a song sp1C8 = pauseCtx->ocarinaSongIndex; sp1CA = gOcarinaSongButtons[sp1C8].numButtons; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index 149b72444..cfcaf20ea 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -15,7 +15,7 @@ s16 sEquipMagicArrowSlotHoldTimer = 0; // Number of frames to move icon from slot to target position when equipping. s16 sEquipAnimTimer = 10; -u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][NUM_ITEM_SLOTS] = { +u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { // Fierce Deity { false, // SLOT_OCARINA @@ -236,9 +236,9 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, CLOSE_DISPS(gfxCtx); } -void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx) { - pauseCtx->cursorVtx[0].v.ob[0] = vtx[index].v.ob[0]; - pauseCtx->cursorVtx[0].v.ob[1] = vtx[index].v.ob[1]; +void KaleidoScope_SetCursorVtxPos(PauseContext* pauseCtx, u16 vtxIndex, Vtx* vtx) { + pauseCtx->cursorVtx[0].v.ob[0] = vtx[vtxIndex].v.ob[0]; + pauseCtx->cursorVtx[0].v.ob[1] = vtx[vtxIndex].v.ob[1]; } static s16 sMagicArrowEffectsR[] = { 255, 100, 255 }; @@ -258,9 +258,9 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { // Loop over c-buttons (i) and vtx offset (j) gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - for (i = 0, j = NUM_ITEM_SLOTS * 4; i < 3; i++, j += 4) { + for (i = 0, j = ITEM_NUM_SLOTS * 4; i < 3; i++, j += 4) { if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) { - if (GET_CUR_FORM_BTN_SLOT(i + 1) < NUM_ITEM_SLOTS) { + if (GET_CUR_FORM_BTN_SLOT(i + 1) < ITEM_NUM_SLOTS) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j], 4, 0); POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } @@ -272,7 +272,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { // Draw the item icons // Loop over slots (i) and vtx offset (j) gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++, j += 4) { + for (j = 0, i = 0; i < ITEM_NUM_SLOTS; i++, j += 4) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) { @@ -323,7 +323,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); // Loop over slots (i) and ammoIndex (j) - for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++) { + for (j = 0, i = 0; i < ITEM_NUM_SLOTS; i++) { if (gAmmoItems[i] != ITEM_NONE) { if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) { KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx, @@ -398,7 +398,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM] + (pauseCtx->cursorYIndex[PAUSE_ITEM] * 6); - if (pauseCtx->cursorPoint[PAUSE_ITEM] >= NUM_ITEM_SLOTS) { + if (pauseCtx->cursorPoint[PAUSE_ITEM] >= ITEM_NUM_SLOTS) { pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM]; } @@ -429,7 +429,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM] + (pauseCtx->cursorYIndex[PAUSE_ITEM] * 6); - if (pauseCtx->cursorPoint[PAUSE_ITEM] >= NUM_ITEM_SLOTS) { + if (pauseCtx->cursorPoint[PAUSE_ITEM] >= ITEM_NUM_SLOTS) { pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM]; } @@ -737,7 +737,7 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { } if (sEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) { - bowItemVtx = &pauseCtx->itemVtx[4]; + bowItemVtx = &pauseCtx->itemVtx[SLOT_BOW * 4]; offsetX = ABS_ALT(pauseCtx->equipAnimX - bowItemVtx->v.ob[0] * 10) / sEquipAnimTimer; offsetY = ABS_ALT(pauseCtx->equipAnimY - bowItemVtx->v.ob[1] * 10) / sEquipAnimTimer; } else { @@ -761,13 +761,13 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { // Update coordinates of item icon while being equipped if (sEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) { // target is the bow slot - if (pauseCtx->equipAnimX >= (pauseCtx->itemVtx[4].v.ob[0] * 10)) { + if (pauseCtx->equipAnimX >= (pauseCtx->itemVtx[SLOT_BOW * 4].v.ob[0] * 10)) { pauseCtx->equipAnimX -= offsetX; } else { pauseCtx->equipAnimX += offsetX; } - if (pauseCtx->equipAnimY >= (pauseCtx->itemVtx[4].v.ob[1] * 10)) { + if (pauseCtx->equipAnimY >= (pauseCtx->itemVtx[SLOT_BOW * 4].v.ob[1] * 10)) { pauseCtx->equipAnimY -= offsetY; } else { pauseCtx->equipAnimY += offsetY; 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 ab598723f..af12f2d5d 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 @@ -10,14 +10,8 @@ #include "interface/icon_item_dungeon_static/icon_item_dungeon_static.h" #include "interface/icon_item_jpn_static/icon_item_jpn_static.h" -extern s16 D_8082B7F0[]; -extern s16 D_8082B838[]; - extern TexturePtr D_09007500; // gPlayerFaceIcon -#define WORLD_MAP_IMAGE_TEX_WIDTH 216 -#define WORLD_MAP_IMAGE_TEX_HEIGHT 128 - void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { s16 counterDigits[2]; s16 rectLeft; @@ -142,8 +136,8 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - j = 72 + (pauseCtx->cursorSlot[PAUSE_MAP] * 4); - KaleidoScope_SetCursorVtx(pauseCtx, j, pauseCtx->mapPageVtx); + j = (QUAD_MAP_PAGE_DUNGEON_MAP + pauseCtx->cursorSlot[PAUSE_MAP]) * 4; + KaleidoScope_SetCursorVtxPos(pauseCtx, j, pauseCtx->mapPageVtx); pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE; if (pauseCtx->cursorSpecialPos == 0) { @@ -153,11 +147,19 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP]; } + // Set vertices for: + // QUAD_MAP_PAGE_DUNGEON_TITLE, + // QUAD_MAP_PAGE_DUNGEON_BOSS_KEY, + // QUAD_MAP_PAGE_DUNGEON_COMPASS, + // QUAD_MAP_PAGE_DUNGEON_MAP gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 16, 0); + + // Dungeon Title gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // QUAD_MAP_PAGE_DUNGEON_TITLE POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0); @@ -211,6 +213,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + // QUAD_MAP_PAGE_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE pauseCtx->mapPageVtx[76].v.ob[0] = pauseCtx->mapPageVtx[78].v.ob[0] = -16; pauseCtx->mapPageVtx[77].v.ob[0] = pauseCtx->mapPageVtx[79].v.ob[0] = @@ -221,7 +224,8 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { pauseCtx->mapPageVtx[78].v.ob[1] = pauseCtx->mapPageVtx[79].v.ob[1] = pauseCtx->mapPageVtx[76].v.ob[1] - 24; - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[76], 4, 0); + gSPVertex(POLY_OPA_DISP++, + &pauseCtx->mapPageVtx[QUAD_MAP_PAGE_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE * 4], 4, 0); POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0); @@ -258,6 +262,9 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + // QUAD_MAP_PAGE_DUNGEON_BOSS_KEY + // QUAD_MAP_PAGE_DUNGEON_COMPASS + // QUAD_MAP_PAGE_DUNGEON_MAP gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } } @@ -486,6 +493,7 @@ s16 sWorldMapDotPrimColors[][3] = { { 0, 0, 255 }, { 255, 255, 0 }, }; + s16 sWorldMapDotEnvColors[][3] = { { 255, 255, 0 }, { 0, 0, 255 }, @@ -537,7 +545,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx); + KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx); // Draw the world map image if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->state == PAUSE_STATE_MAIN) && @@ -561,12 +569,12 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Process the 128 rows of pixels for gWorldMapImageTex, 8 rows at a time over 16 iterations // Loop over yPos (t), textureIndex (j) for (t = 62, j = 0; j < 16; j++, t += 8) { - gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + j * (WORLD_MAP_IMAGE_TEX_WIDTH * 8), - G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, + gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + j * (WORLD_MAP_IMAGE_WIDTH * 8), G_IM_FMT_CI, + G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, 8, 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); rectLeft = 51 << 2; - rectRight = rectLeft + (WORLD_MAP_IMAGE_TEX_WIDTH << 2); + rectRight = rectLeft + (WORLD_MAP_IMAGE_WIDTH << 2); gSPTextureRectangle(POLY_OPA_DISP++, rectLeft, t << 2, rectRight, (t << 2) + (8 << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } @@ -593,36 +601,39 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); // Set the vertices for the first 8 quads attached to the world map texture. - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[204], 8 * 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[QUAD_MAP_PAGE_WORLD_IMAGE_FIRST * 4], 8 * 4, 0); // Process the first 72 rows of pixels for gWorldMapImageTex, 9 rows at a time over 8 iterations // Loop over quadIndex of this loop (i), quadIndex of the entire texture (k), vtxIndex (j) for (i = 0, k = 0, j = 0; i < 8; i++, k++, j += 4) { - gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9), - G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 9, 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); + gDPLoadTextureBlock( + POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_WIDTH * WORLD_MAP_IMAGE_FRAG_HEIGHT), + G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, WORLD_MAP_IMAGE_FRAG_HEIGHT, 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); gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } // Set the vertices for the last 7 quads attached to the world map texture: // 6 quads with a height of 9, 1 quad with a height of 2 - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[236], (6 + 1) * 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_IMAGE_FIRST + 8) * 4], (6 + 1) * 4, 0); // Process the next 54 rows of pixels for gWorldMapImageTex, 9 rows at a time over 6 iterations // Loop over quadIndex of this loop (i), quadIndex of the entire texture (k), vtxIndex (j) for (i = 0, j = 0; i < 6; i++, k++, j += 4) { - gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9), - G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 9, 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); + gDPLoadTextureBlock( + POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_WIDTH * WORLD_MAP_IMAGE_FRAG_HEIGHT), + G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, WORLD_MAP_IMAGE_FRAG_HEIGHT, 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); gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } // Process the last 2 rows of pixels for gWorldMapImageTex - gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9), G_IM_FMT_CI, - G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 2, 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); + gDPLoadTextureBlock( + POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_WIDTH * WORLD_MAP_IMAGE_FRAG_HEIGHT), + G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, WORLD_MAP_IMAGE_HEIGHT % WORLD_MAP_IMAGE_FRAG_HEIGHT, 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); gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } @@ -641,12 +652,13 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Draw clouds over the world map // Iterate over cloud bits (n) - for (n = 0; n < 15; n++) { + for (n = 0; n < WORLD_MAP_NUM_CLOUDS; n++) { if (!(((void)0, gSaveContext.save.saveInfo.worldMapCloudVisibility) & gBitFlags[n])) { - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + n * 4], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_CLOUDS_FIRST + n) * 4], 4, 0); - POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], gVtxPageMapWorldQuadsWidth[n], + gVtxPageMapWorldQuadsHeight[n], 0); } } @@ -676,6 +688,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { if (R_PAUSE_DBG_MAP_CLOUD_ON) { gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000; + // QUAD_MAP_PAGE_WORLD_REGION_FIRST pauseCtx->mapPageVtx[120].v.ob[0] = pauseCtx->mapPageVtx[122].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X; pauseCtx->mapPageVtx[121].v.ob[0] = pauseCtx->mapPageVtx[123].v.ob[0] = @@ -690,7 +703,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Loop over RegionId (i), unused vtxIndex (j), unused (k) for (i = 0, j = 0; i < REGION_MAX; i++, k++, j += 4) { if (pauseCtx->worldMapPoints[i]) { - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[120 + i * 4], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_REGION_FIRST + i) * 4], 4, 0); gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } } @@ -708,6 +721,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { if (R_PAUSE_DBG_MAP_CLOUD_ON) { gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000; + // QUAD_MAP_PAGE_WORLD_WARP_FIRST pauseCtx->mapPageVtx[164].v.ob[0] = pauseCtx->mapPageVtx[166].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X; pauseCtx->mapPageVtx[165].v.ob[0] = pauseCtx->mapPageVtx[167].v.ob[0] = @@ -722,7 +736,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Loop over OwlWarpId (i), unused vtxIndex (j), unused (k) for (i = 0, j = 0; i < OWL_WARP_ENTRANCE; i++, k++, j += 4) { if (pauseCtx->worldMapPoints[i]) { - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[164 + i * 4], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_WARP_FIRST + i) * 4], 4, 0); gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 61157ffce..950e10788 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -15,7 +15,7 @@ s16 sMaskEquipMagicArrowSlotHoldTimer = 0; // Number of frames to move icon from slot to target position when equipping. s16 sMaskEquipAnimTimer = 10; -u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][NUM_MASK_SLOTS] = { +u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = { // Fierce Deity { false, // SLOT_MASK_POSTMAN @@ -196,7 +196,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx); + KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx); func_8012C8AC(play->state.gfxCtx); @@ -204,9 +204,9 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { // Loop over c-buttons (i) and vtx offset (j) gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - for (i = 0, j = NUM_MASK_SLOTS * 4; i < 3; i++, j += 4) { + for (i = 0, j = MASK_NUM_SLOTS * 4; i < 3; i++, j += 4) { if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) { - if (GET_CUR_FORM_BTN_SLOT(i + 1) >= NUM_ITEM_SLOTS) { + if (GET_CUR_FORM_BTN_SLOT(i + 1) >= ITEM_NUM_SLOTS) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j], 4, 0); POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } @@ -218,10 +218,10 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { // Draw the item icons // Loop over slots (i) and vtx offset (j) gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - for (j = 0, i = 0; i < NUM_MASK_SLOTS; i++, j += 4) { + for (j = 0, i = 0; i < MASK_NUM_SLOTS; i++, j += 4) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS]) != ITEM_NONE) { + if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + ITEM_NUM_SLOTS]) != ITEM_NONE) { if (!CHECK_GIVEN_MASK_ON_MOON(i)) { if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_MASK) && (pauseCtx->cursorSpecialPos == 0) && @@ -259,7 +259,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j + 0], 4, 0); KaleidoScope_DrawTexQuadRGBA32( play->state.gfxCtx, - gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS])], 32, 32, 0); + gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i + ITEM_NUM_SLOTS])], 32, 32, 0); } } } @@ -324,7 +324,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { pauseCtx->cursorPoint[PAUSE_MASK] = pauseCtx->cursorXIndex[PAUSE_MASK] + (pauseCtx->cursorYIndex[PAUSE_MASK] * 6); - if (pauseCtx->cursorPoint[PAUSE_MASK] >= NUM_MASK_SLOTS) { + if (pauseCtx->cursorPoint[PAUSE_MASK] >= MASK_NUM_SLOTS) { pauseCtx->cursorPoint[PAUSE_MASK] = pauseCtx->cursorXIndex[PAUSE_MASK]; } @@ -354,7 +354,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { pauseCtx->cursorPoint[PAUSE_MASK] = pauseCtx->cursorXIndex[PAUSE_MASK] + (pauseCtx->cursorYIndex[PAUSE_MASK] * 6); - if (pauseCtx->cursorPoint[PAUSE_MASK] >= NUM_MASK_SLOTS) { + if (pauseCtx->cursorPoint[PAUSE_MASK] >= MASK_NUM_SLOTS) { pauseCtx->cursorPoint[PAUSE_MASK] = pauseCtx->cursorXIndex[PAUSE_MASK]; } @@ -372,7 +372,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) { cursorItem = - gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; + gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + ITEM_NUM_SLOTS]; if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) { cursorItem = ITEM_NONE; } @@ -388,7 +388,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // Search for slot to move to while (true) { // Check if current cursor has an item in its slot - if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) && + if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + ITEM_NUM_SLOTS] != ITEM_NONE) && !CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) { pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint; pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex; @@ -429,7 +429,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // Search for slot to move to while (true) { // Check if current cursor has an item in its slot - if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) && + if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + ITEM_NUM_SLOTS] != ITEM_NONE) && !CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) { pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint; pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex; @@ -502,13 +502,13 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) { cursorItem = - gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; + gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + ITEM_NUM_SLOTS]; if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) { cursorItem = ITEM_NONE; } } else if (moveCursorResult != PAUSE_CURSOR_RESULT_SPECIAL_POS) { cursorItem = - gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; + gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + ITEM_NUM_SLOTS]; if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) { cursorItem = ITEM_NONE; } @@ -571,8 +571,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) && (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE) && - ((cursorSlot == (SLOT_MASK_DEKU - NUM_ITEM_SLOTS)) || - (cursorSlot == (SLOT_MASK_GORON - NUM_ITEM_SLOTS)))) { + ((cursorSlot == (SLOT_MASK_DEKU - ITEM_NUM_SLOTS)) || + (cursorSlot == (SLOT_MASK_GORON - ITEM_NUM_SLOTS)))) { play_sound(NA_SE_SY_ERROR); return; } @@ -587,7 +587,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // Equip item to the C buttons pauseCtx->equipTargetItem = cursorItem; - pauseCtx->equipTargetSlot = cursorSlot + NUM_ITEM_SLOTS; + pauseCtx->equipTargetSlot = cursorSlot + ITEM_NUM_SLOTS; pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_MASK; vtxIndex = cursorSlot * 4; pauseCtx->equipAnimX = pauseCtx->maskVtx[vtxIndex].v.ob[0] * 10; @@ -659,7 +659,10 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) { } if (sMaskEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) { - bowItemVtx = &pauseCtx->itemVtx[12]; + //! Note: Copied from OoT when `SLOT_BOW` was still valued at 3. + // Due to a shift, `SLOT_ARROW_ICE` now occupies slot 3 but this value was not updated + // Block is never reached as you can not equip magic arrows from the mask page + bowItemVtx = &pauseCtx->itemVtx[SLOT_ARROW_ICE * 4]; offsetX = ABS_ALT(pauseCtx->equipAnimX - bowItemVtx->v.ob[0] * 10) / sMaskEquipAnimTimer; offsetY = ABS_ALT(pauseCtx->equipAnimY - bowItemVtx->v.ob[1] * 10) / sMaskEquipAnimTimer; } else { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c index 13e233b58..9bf89cdd2 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c @@ -14,7 +14,7 @@ void KaleidoScope_UpdatePrompt(PlayState* play) { static s16 sPromptAlphaTimer = 10; PauseContext* pauseCtx = &play->pauseCtx; Input* input = CONTROLLER1(&play->state); - s8 relStickX = input->rel.stick_x; + s8 stickAdjX = input->rel.stick_x; s16 alphaStep; if (((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_1)) || @@ -22,11 +22,11 @@ void KaleidoScope_UpdatePrompt(PlayState* play) { (pauseCtx->state == PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT)) { // Move the prompt - if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (relStickX >= 30)) { + if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (stickAdjX >= 30)) { // Move right to the no prompt play_sound(NA_SE_SY_CURSOR); pauseCtx->promptChoice = PAUSE_PROMPT_NO; - } else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (relStickX <= -30)) { + } else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (stickAdjX <= -30)) { // Move left to the yes prompt play_sound(NA_SE_SY_CURSOR); pauseCtx->promptChoice = PAUSE_PROMPT_YES; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h index 849c7020e..a9aeed70f 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h @@ -92,7 +92,7 @@ typedef enum { #define IS_PAUSE_STATE_OWLWARP \ ((pauseCtx->state >= PAUSE_STATE_OWLWARP_2) && (pauseCtx->state <= PAUSE_STATE_OWLWARP_6)) -#define IS_PAUSE_MAIN_STATE_SAVE_PROMPT \ +#define IS_PAUSE_MAIN_STATE_SONG_PROMPT \ ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && \ (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_DONE)) @@ -125,6 +125,184 @@ typedef enum { /* 5 */ PAUSE_BG_PRERENDER_MAX } PauseBgPreRenderState; +typedef enum { + /* 0 */ VTX_PAGE_MASK, + /* 1 */ VTX_PAGE_ITEM, + /* 2 */ VTX_PAGE_MAP_DUNGEON, + /* 3 */ VTX_PAGE_QUEST, + /* 4 */ VTX_PAGE_MAP_WORLD, + /* 5 */ VTX_PAGE_PROMPT, + /* 6 */ VTX_PAGE_MAX +} VtxPage; + +#define VTX_PAGE_MASK_QUADS 0 // VTX_PAGE_MASK +#define VTX_PAGE_ITEM_QUADS 0 // VTX_PAGE_ITEM +#define VTX_PAGE_MAP_DUNGEON_QUADS 6 // VTX_PAGE_MAP_DUNGEON +#define VTX_PAGE_QUEST_QUADS 0 // VTX_PAGE_QUEST +#define VTX_PAGE_MAP_WORLD_QUADS 36 // VTX_PAGE_MAP_WORLD +#define VTX_PAGE_SAVE_QUADS 5 // VTX_PAGE_PROMPT + +#define PAGE_BG_COLS 3 +#define PAGE_BG_ROWS 5 +#define PAGE_BG_QUADS (PAGE_BG_COLS * PAGE_BG_ROWS) +#define PAGE_BG_QUAD_WIDTH 80 +#define PAGE_BG_QUAD_HEIGHT 32 +#define PAGE_BG_QUAD_TEX_WIDTH 80 +#define PAGE_BG_QUAD_TEX_HEIGHT 32 + +// === ITEM === // + +#define ITEM_GRID_ROWS 4 +#define ITEM_GRID_COLS 6 +#define ITEM_GRID_CELL_WIDTH 32 +#define ITEM_GRID_CELL_HEIGHT 32 +#define ITEM_GRID_QUAD_MARGIN 2 +#define ITEM_GRID_QUAD_WIDTH (ITEM_GRID_CELL_WIDTH - (2 * ITEM_GRID_QUAD_MARGIN)) +#define ITEM_GRID_QUAD_HEIGHT (ITEM_GRID_CELL_HEIGHT - (2 * ITEM_GRID_QUAD_MARGIN)) +#define ITEM_GRID_QUAD_TEX_SIZE 32 // both width and height +#define ITEM_GRID_QUAD_ENLARGE_OFFSET 2 + +#define ITEM_GRID_SELECTED_QUAD_MARGIN (-2) +#define ITEM_GRID_SELECTED_QUAD_WIDTH (ITEM_GRID_QUAD_WIDTH - (2 * ITEM_GRID_SELECTED_QUAD_MARGIN)) +#define ITEM_GRID_SELECTED_QUAD_HEIGHT (ITEM_GRID_QUAD_HEIGHT - (2 * ITEM_GRID_SELECTED_QUAD_MARGIN)) +#define ITEM_GRID_SELECTED_QUAD_TEX_SIZE 32 // both width and height + +#define ITEM_NUM_SLOTS (ITEM_GRID_ROWS * ITEM_GRID_COLS) + +typedef enum { + // 0..59 are the 15 background textures + /* 0 */ QUAD_ITEM_PAGE_BG_FIRST, + /* 14 */ QUAD_ITEM_PAGE_BG_LAST = PAGE_BG_QUADS - 1, + // VTX_PAGE_ITEM_QUADS is 0 + /* 15 */ QUAD_ITEM_PAGE_MAX +} ItemPageQuad; + +typedef enum { + // 0..23 are the ITEM_GRID_ROWS*ITEM_GRID_COLS item grid + // The values follow the `InventorySlot` enum + /* 0 */ QUAD_ITEM_GRID_FIRST, + /* 23 */ QUAD_ITEM_GRID_LAST = ITEM_GRID_ROWS * ITEM_GRID_COLS - 1, + // White-box Markers indicating the currently equipped items + /* 24 */ QUAD_ITEM_GRID_SELECTED_C_LEFT, + /* 25 */ QUAD_ITEM_GRID_SELECTED_C_DOWN, + /* 26 */ QUAD_ITEM_GRID_SELECTED_C_RIGHT, + /* 27 */ QUAD_ITEM_MAX +} ItemQuad; + +// === MASK === // + +#define MASK_GRID_ROWS 4 +#define MASK_GRID_COLS 6 +#define MASK_GRID_CELL_WIDTH 32 +#define MASK_GRID_CELL_HEIGHT 32 +#define MASK_GRID_QUAD_MARGIN 2 +#define MASK_GRID_QUAD_WIDTH (MASK_GRID_CELL_WIDTH - (2 * MASK_GRID_QUAD_MARGIN)) +#define MASK_GRID_QUAD_HEIGHT (MASK_GRID_CELL_HEIGHT - (2 * MASK_GRID_QUAD_MARGIN)) +#define MASK_GRID_QUAD_TEX_SIZE 32 // both width and height +#define MASK_GRID_QUAD_ENLARGE_OFFSET 2 + +#define MASK_GRID_SELECTED_QUAD_MARGIN (-2) +#define MASK_GRID_SELECTED_QUAD_WIDTH (MASK_GRID_QUAD_WIDTH - (2 * MASK_GRID_SELECTED_QUAD_MARGIN)) +#define MASK_GRID_SELECTED_QUAD_HEIGHT (MASK_GRID_QUAD_HEIGHT - (2 * MASK_GRID_SELECTED_QUAD_MARGIN)) +#define MASK_GRID_SELECTED_QUAD_TEX_SIZE 32 // both width and height + +#define MASK_NUM_SLOTS (MASK_GRID_ROWS * MASK_GRID_COLS) + +typedef enum { + // 0..59 are the 15 background textures + /* 0 */ QUAD_MASK_PAGE_BG_FIRST, + /* 14 */ QUAD_MASK_PAGE_BG_LAST = PAGE_BG_QUADS - 1, + // VTX_PAGE_MASK_QUADS is 0 + /* 15 */ QUAD_MASK_PAGE_MAX +} MaskPageQuad; + +typedef enum { + // 0..23 are the MASK_GRID_ROWS*MASK_GRID_COLS item grid + // The values follow the `InventorySlot` enum offset by ITEM_NUM_SLOTS + /* 0 */ QUAD_MASK_GRID_FIRST, + /* 23 */ QUAD_MASK_GRID_LAST = MASK_GRID_ROWS * MASK_GRID_COLS - 1, + // Markers indicating the currently equipped items + /* 24 */ QUAD_MASK_GRID_SELECTED_C_LEFT, + /* 25 */ QUAD_MASK_GRID_SELECTED_C_DOWN, + /* 26 */ QUAD_MASK_GRID_SELECTED_C_RIGHT, + /* 27 */ QUAD_MASK_MAX +} MaskQuad; + +// === QUEST === // + +typedef enum { + // 0..59 are the 15 background textures + /* 0 */ QUAD_QUEST_PAGE_BG_FIRST, + /* 14 */ QUAD_QUEST_PAGE_BG_LAST = PAGE_BG_QUADS - 1, + // VTX_PAGE_QUEST_QUADS is 0 + /* 15 */ QUAD_QUEST_PAGE_MAX +} QuestPageQuad; + +typedef enum { + // 0 to 24 matches the `QuestItem` enum + // Notes showing the correct song + /* 25 */ QUAD_QUEST_SONG_NOTE_A1 = QUEST_HEART_PIECE + 1, + /* 26 */ QUAD_QUEST_SONG_NOTE_A2, + /* 27 */ QUAD_QUEST_SONG_NOTE_A3, + /* 28 */ QUAD_QUEST_SONG_NOTE_A4, + /* 29 */ QUAD_QUEST_SONG_NOTE_A5, + /* 30 */ QUAD_QUEST_SONG_NOTE_A6, + /* 31 */ QUAD_QUEST_SONG_NOTE_A7, + /* 32 */ QUAD_QUEST_SONG_NOTE_A8, + // Notes appearing when playing + /* 33 */ QUAD_QUEST_SONG_NOTE_B1, + /* 34 */ QUAD_QUEST_SONG_NOTE_B2, + /* 35 */ QUAD_QUEST_SONG_NOTE_B3, + /* 36 */ QUAD_QUEST_SONG_NOTE_B4, + /* 37 */ QUAD_QUEST_SONG_NOTE_B5, + /* 38 */ QUAD_QUEST_SONG_NOTE_B6, + /* 39 */ QUAD_QUEST_SONG_NOTE_B7, + /* 40 */ QUAD_QUEST_SONG_NOTE_B8, + /* 41 */ QUAD_QUEST_MAX +} QuestQuad; + +// === DUNGEON MAP === // + +typedef enum { + // 0..59 are the 15 background textures + /* 0 */ QUAD_MAP_PAGE_DUNGEON_BG_FIRST, + /* 14 */ QUAD_MAP_PAGE_DUNGEON_BG_LAST = PAGE_BG_QUADS - 1, + /* 15 */ QUAD_MAP_PAGE_DUNGEON_TITLE, + /* 16 */ QUAD_MAP_PAGE_DUNGEON_BOSS_KEY, + /* 17 */ QUAD_MAP_PAGE_DUNGEON_COMPASS, + /* 18 */ QUAD_MAP_PAGE_DUNGEON_MAP, + /* 19 */ QUAD_MAP_PAGE_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE, + /* 20 */ QUAD_MAP_PAGE_DUNGEON_UNUSED, + /* 21 */ QUAD_MAP_PAGE_DUNGEON_MAX +} DungeonMapPageQuad; + +// === WORLD MAP === // + +#define WORLD_MAP_IMAGE_WIDTH 216 +#define WORLD_MAP_IMAGE_HEIGHT 128 +#define WORLD_MAP_IMAGE_FRAG_HEIGHT ((TMEM_SIZE / 2) / (WORLD_MAP_IMAGE_WIDTH * G_IM_SIZ_8b_BYTES)) +#define WORLD_MAP_IMAGE_FRAG_NUM (((WORLD_MAP_IMAGE_HEIGHT - 1) / WORLD_MAP_IMAGE_FRAG_HEIGHT) + 1) +#define WORLD_MAP_NUM_CLOUDS 15 + +typedef enum { + // 0..59 are the 15 background textures + /* 0 */ QUAD_MAP_PAGE_WORLD_BG_FIRST, + /* 14 */ QUAD_MAP_PAGE_WORLD_BG_LAST = PAGE_BG_QUADS - 1, + // Clouds covering the world map + /* 15 */ QUAD_MAP_PAGE_WORLD_CLOUDS_FIRST, + /* 29 */ QUAD_MAP_PAGE_WORLD_CLOUDS_LAST = QUAD_MAP_PAGE_WORLD_CLOUDS_FIRST + WORLD_MAP_NUM_CLOUDS - 1, + // Markers for regions + /* 30 */ QUAD_MAP_PAGE_WORLD_REGION_FIRST, + /* 40 */ QUAD_MAP_PAGE_WORLD_REGION_LAST = QUAD_MAP_PAGE_WORLD_REGION_FIRST + REGION_MAX - 1, + // Markers for owl warps + /* 41 */ QUAD_MAP_PAGE_WORLD_WARP_FIRST, + /* 50 */ QUAD_MAP_PAGE_WORLD_WARP_LAST = QUAD_MAP_PAGE_WORLD_WARP_FIRST + OWL_WARP_ENTRANCE - 1, + // Fragments of the world map + /* 51 */ QUAD_MAP_PAGE_WORLD_IMAGE_FIRST, + /* 65 */ QUAD_MAP_PAGE_WORLD_IMAGE_LAST = QUAD_MAP_PAGE_WORLD_IMAGE_FIRST + WORLD_MAP_IMAGE_FRAG_NUM - 1, + /* 66 */ QUAD_MAP_PAGE_WORLD_MAX +} WorldMapPageQuad; + #define PAUSE_NAME_COLOR_SET_WHITE 0 #define PAUSE_NAME_COLOR_SET_GREY 1 @@ -139,12 +317,27 @@ typedef enum { /* 2 */ PAUSE_CURSOR_RESULT_SPECIAL_POS } PauseMoveCursorResult; -#define NUM_ITEM_SLOTS 24 -#define NUM_MASK_SLOTS 24 +typedef enum { + /* 0 */ PAUSE_QUAD_CURSOR_0, + /* 1 */ PAUSE_QUAD_CURSOR_1, + /* 2 */ PAUSE_QUAD_CURSOR_2, + /* 3 */ PAUSE_QUAD_CURSOR_3, + /* 4 */ PAUSE_QUAD_CURSOR_4, + /* 5 */ PAUSE_QUAD_CURSOR_MAX +} PauseCursorQuad; #define PAUSE_PROMPT_YES 0 #define PAUSE_PROMPT_NO 4 +typedef enum { + /* 0 */ QUAD_PROMPT_MESSAGE, + /* 1 */ QUAD_PROMPT_CURSOR_LEFT, + /* 2 */ QUAD_PROMPT_CURSOR_RIGHT, + /* 3 */ QUAD_PROMPT_CHOICE_YES, + /* 4 */ QUAD_PROMPT_CHOICE_NO, + /* 5 */ QUAD_PROMPT_MAX +} PromptQuad; + // NES void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos); void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point); @@ -162,7 +355,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play); void KaleidoScope_UpdateQuestCursor(PlayState* play); // Item -void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx); +void KaleidoScope_SetCursorVtxPos(PauseContext* pauseCtx, u16 vtxIndex, Vtx* vtx); void KaleidoScope_DrawItemSelect(PlayState* play); void KaleidoScope_UpdateItemCursor(PlayState* play); void KaleidoScope_UpdateItemEquip(PlayState* play); @@ -179,4 +372,7 @@ void KaleidoScope_UpdatePrompt(PlayState* play); void KaleidoScope_DrawInventoryEditor(PlayState* play); void KaleidoScope_UpdateInventoryEditor(PlayState* play); +extern s16 gVtxPageMapWorldQuadsWidth[]; +extern s16 gVtxPageMapWorldQuadsHeight[]; + #endif 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 1377f287f..ba9076b05 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 @@ -6,6 +6,8 @@ #include "z_kaleido_scope.h" #include "overlays/gamestates/ovl_opening/z_opening.h" +#include "interface/icon_item_gameover_static/icon_item_gameover_static.h" +#include "interface/icon_item_jpn_static/icon_item_jpn_static.h" #include "z64view.h" extern UNK_TYPE D_02001360; @@ -20,32 +22,165 @@ extern UNK_TYPE D_0C006C00; extern u8 sUnpausedButtonStatus[5]; -void* D_8082B700[] = { - 0x08064440, 0x0806E440, 0x08077A40, 0x08081040, 0x0808A640, 0x0D003A00, 0x0806EE40, 0x08078440, - 0x08081A40, 0x0808B040, 0x08065840, 0x0806F840, 0x08078E40, 0x08082440, 0x0808BA40, +// Page Textures (Background of Page): +// Broken up into multiple textures. +// Numbered by column/row. +TexturePtr sMaskPageBgTextures[] = { + // Column 0 + 0x08064440, // gPauseMasks00Tex + 0x0806E440, // gPauseMasks01Tex + 0x08077A40, // gPauseMasks02Tex + 0x08081040, // gPauseMasks03Tex + 0x0808A640, // gPauseMasks04Tex + // Column 1 + gPauseMasks10ENGTex, + 0x0806EE40, // gPauseMasks11Tex + 0x08078440, // gPauseMasks12Tex + 0x08081A40, // gPauseMasks13Tex + 0x0808B040, // gPauseMasks14Tex + // Column 2 + 0x08065840, // gPauseMasks20Tex + 0x0806F840, // gPauseMasks21Tex + 0x08078E40, // gPauseMasks22Tex + 0x08082440, // gPauseMasks23Tex + 0x0808BA40, // gPauseMasks24Tex }; -void* D_8082B73C[] = { - 0x0D004400, 0x08070240, 0x08079840, 0x08082E40, 0x0808C440, 0x0D004E00, 0x08070C40, 0x0807A240, - 0x08083840, 0x0808CE40, 0x0D005800, 0x08071640, 0x0807AC40, 0x08084240, 0x0808D840, +TexturePtr sItemPageBgTextures[] = { + // Column 0 + gPauseSelectItem00ENGTex, + 0x08070240, // gPauseSelectItem01Tex + 0x08079840, // gPauseSelectItem02Tex + 0x08082E40, // gPauseSelectItem03Tex + 0x0808C440, // gPauseSelectItem04Tex + // Column 1 + gPauseSelectItem10ENGTex, + 0x08070C40, // gPauseSelectItem11Tex + 0x0807A240, // gPauseSelectItem12Tex + 0x08083840, // gPauseSelectItem13Tex + 0x0808CE40, // gPauseSelectItem14Tex + // Column 2 + gPauseSelectItem20ENGTex, + 0x08071640, // gPauseSelectItem21Tex + 0x0807AC40, // gPauseSelectItem22Tex + 0x08084240, // gPauseSelectItem23Tex + 0x0808D840, // gPauseSelectItem24Tex }; -void* D_8082B778[] = { - 0x08068040, 0x08072040, 0x0807B640, 0x08084C40, 0x0808E240, 0x0D006200, 0x08072A40, 0x0807C040, - 0x08085640, 0x0808EC40, 0x08069440, 0x08073440, 0x0807CA40, 0x08086040, 0x0808F640, +TexturePtr sMapPageBgTextures[] = { + // Column 0 + 0x08068040, // gPauseMap00Tex + 0x08072040, // gPauseMap01Tex + 0x0807B640, // gPauseMap02Tex + 0x08084C40, // gPauseMap03Tex + 0x0808E240, // gPauseMap04Tex + // Column 1 + gPauseMap10ENGTex, + 0x08072A40, // gPauseMap11Tex + 0x0807C040, // gPauseMap12Tex + 0x08085640, // gPauseMap13Tex + 0x0808EC40, // gPauseMap14Tex + // Column 2 + 0x08069440, // gPauseMap20Tex + 0x08073440, // gPauseMap21Tex + 0x0807CA40, // gPauseMap22Tex + 0x08086040, // gPauseMap23Tex + 0x0808F640, // gPauseMap24Tex }; -void* D_8082B7B4[] = { - 0x0D006C00, 0x08073E40, 0x0807D440, 0x08086A40, 0x08090040, 0x0D007600, 0x08074840, 0x0807DE40, - 0x08087440, 0x08090A40, 0x0D008000, 0x08075240, 0x0807E840, 0x08087E40, 0x08091440, +TexturePtr sQuestPageBgTextures[] = { + // Column 0 + gPauseQuestStatus00ENGTex, + 0x08073E40, // gPauseQuestStatus01Tex + 0x0807D440, // gPauseQuestStatus02Tex + 0x08086A40, // gPauseQuestStatus03Tex + 0x08090040, // gPauseQuestStatus04Tex + // Column 1 + gPauseQuestStatus10ENGTex, + 0x08074840, // gPauseQuestStatus11Tex + 0x0807DE40, // gPauseQuestStatus12Tex + 0x08087440, // gPauseQuestStatus13Tex + 0x08090A40, // gPauseQuestStatus14Tex + // Column 2 + gPauseQuestStatus20ENGTex, + 0x08075240, // gPauseQuestStatus21Tex + 0x0807E840, // gPauseQuestStatus22Tex + 0x08087E40, // gPauseQuestStatus23Tex + 0x08091440, // gPauseQuestStatus24Tex }; -s16 D_8082B7F0[] = { - 0x0050, 0x0040, 0x0040, 0x0040, 0x0010, 0x0040, 0x0070, 0x0070, 0x0030, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0030, 0x0040, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, +s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = { + 80, // mapPageVtx[60] clouds Clock Town 1 + 64, // mapPageVtx[64] clouds Clock Town 2 + 64, // mapPageVtx[68] clouds Woodfall 1 + 64, // mapPageVtx[72] clouds Woodfall 2 + 16, // mapPageVtx[76] clouds Woodfall 3 + 64, // mapPageVtx[80] clouds Snowhead 1 + 112, // mapPageVtx[84] clouds Snowhead 2 + 112, // mapPageVtx[88] clouds Snowhead 3 + 48, // mapPageVtx[92] clouds Romani Ranch + 64, // mapPageVtx[96] clouds Great Bay 1 + 64, // mapPageVtx[100] clouds Great Bay 2 + 64, // mapPageVtx[104] clouds Great Bay 3 + 64, // mapPageVtx[108] clouds Great Bay 4 + 48, // mapPageVtx[112] clouds Stone Tower 1 + 64, // mapPageVtx[116] clouds Stone Tower 2 + 8, // mapPageVtx[120] region Great Bay + 8, // mapPageVtx[124] region Zora Hall + 8, // mapPageVtx[128] region Romani Ranch + 8, // mapPageVtx[132] region Deku Palace + 8, // mapPageVtx[136] region Woodfall + 8, // mapPageVtx[140] region Clock Town + 8, // mapPageVtx[144] region Snowhead + 8, // mapPageVtx[148] region Ikana Graveyard + 8, // mapPageVtx[152] region Ikana Canyon + 8, // mapPageVtx[156] region Goron Village + 8, // mapPageVtx[160] region Stone Tower + 24, // mapPageVtx[164] owl warp Great Bay Coast + 24, // mapPageVtx[168] owl warp Zora Cape + 24, // mapPageVtx[172] owl warp Snowhead + 24, // mapPageVtx[176] owl warp Mountain Village + 24, // mapPageVtx[180] owl warp Clock Town + 24, // mapPageVtx[184] owl warp Milk Road + 24, // mapPageVtx[188] owl warp Woodfall + 24, // mapPageVtx[192] owl warp Southern Swamp + 24, // mapPageVtx[196] owl warp Ikana Canyon + 24, // mapPageVtx[200] owl warp Stone Tower }; -s16 D_8082B838[] = { - 0x0028, 0x001F, 0x0035, 0x0035, 0x0035, 0x0034, 0x0023, 0x0023, 0x0020, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0052, 0x003D, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, +s16 gVtxPageMapWorldQuadsHeight[VTX_PAGE_MAP_WORLD_QUADS] = { + 40, // mapPageVtx[60] clouds Clock Town 1 + 31, // mapPageVtx[64] clouds Clock Town 2 + 53, // mapPageVtx[68] clouds Woodfall 1 + 53, // mapPageVtx[72] clouds Woodfall 2 + 53, // mapPageVtx[76] clouds Woodfall 3 + 52, // mapPageVtx[80] clouds Snowhead 1 + 35, // mapPageVtx[84] clouds Snowhead 2 + 35, // mapPageVtx[88] clouds Snowhead 3 + 32, // mapPageVtx[92] clouds Romani Ranch + 64, // mapPageVtx[96] clouds Great Bay 1 + 64, // mapPageVtx[100] clouds Great Bay 2 + 64, // mapPageVtx[104] clouds Great Bay 3 + 64, // mapPageVtx[108] clouds Great Bay 4 + 82, // mapPageVtx[112] clouds Stone Tower 1 + 61, // mapPageVtx[116] clouds Stone Tower 2 + 8, // mapPageVtx[120] region Great Bay + 8, // mapPageVtx[124] region Zora Hall + 8, // mapPageVtx[128] region Romani Ranch + 8, // mapPageVtx[132] region Deku Palace + 8, // mapPageVtx[136] region Woodfall + 8, // mapPageVtx[140] region Clock Town + 8, // mapPageVtx[144] region Snowhead + 8, // mapPageVtx[148] region Ikana Graveyard + 8, // mapPageVtx[152] region Ikana Canyon + 8, // mapPageVtx[156] region Goron Village + 8, // mapPageVtx[160] region Stone Tower + 12, // mapPageVtx[164] owl warp Great Bay Coast + 12, // mapPageVtx[168] owl warp Zora Cape + 12, // mapPageVtx[172] owl warp Snowhead + 12, // mapPageVtx[176] owl warp Mountain Village + 12, // mapPageVtx[180] owl warp Clock Town + 12, // mapPageVtx[184] owl warp Milk Road + 12, // mapPageVtx[188] owl warp Woodfall + 12, // mapPageVtx[192] owl warp Southern Swamp + 12, // mapPageVtx[196] owl warp Ikana Canyon + 12, // mapPageVtx[200] owl warp Stone Tower }; s16 sGameOverPrimR = 0; @@ -115,136 +250,768 @@ u8 D_8082B924[] = { // TODO: Also applies to owl warps s16 sGameOverRectPosY = 66; -s16 D_8082B948[][3] = { - { 0x00FF, 0x00FF, 0x00FF }, { 0x00FF, 0x00FF, 0x00FF }, { 0x00FF, 0x00FF, 0x0000 }, - { 0x00FF, 0x00FF, 0x0000 }, { 0x0064, 0x0096, 0x00FF }, { 0x0064, 0x00FF, 0x00FF }, +void func_80821900(void* segment, u32 texIndex) { + CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); +} + +void func_8082192C(void* segment, u32 texIndex) { + CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); +} + +void func_80821958(void* segment, u32 texIndex) { + CmpDma_LoadFile(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400); +} + +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_MoveCursorToSpecialPos.s") + +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s") + +void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point) { + OPEN_DISPS(gfxCtx); + + gDPLoadTextureBlock(POLY_OPA_DISP++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, width, height, 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); + gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0); + + CLOSE_DISPS(gfxCtx); +} + +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s") + +void KaleidoScope_HandlePageToggles(PlayState* play, Input* input); +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_HandlePageToggles.s") + +// Draw 15 (PAGE_BG_QUADS) quads with IA8 80x32 textures +Gfx* KaleidoScope_DrawPageSections(Gfx* gfx, Vtx* vertices, TexturePtr* textures) { + s32 i; + s32 j; + + gSPVertex(gfx++, vertices, 8 * 4, 0); + + i = 0; + j = 0; + // Draw first 8/15 background textures + while (j < 32) { + gDPPipeSync(gfx++); + gDPLoadTextureBlock(gfx++, textures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 80, 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); + gSP1Quadrangle(gfx++, j, j + 2, j + 3, j + 1, 0); + + j += 4; + i++; + } + + gSPVertex(gfx++, vertices + (8 * 4), 7 * 4, 0); + + j = 0; + // Draw last 7/15 background textures + while (j < 28) { + gDPPipeSync(gfx++); + gDPLoadTextureBlock(gfx++, textures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 80, 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); + gSP1Quadrangle(gfx++, j, j + 2, j + 3, j + 1, 0); + + j += 4; + i++; + } + + return gfx; +} + +s16 sCursorPrimColorTarget[][3] = { + { 255, 255, 255 }, { 255, 255, 255 }, { 255, 255, 0 }, { 255, 255, 0 }, { 100, 150, 255 }, { 100, 255, 255 }, }; -s16 D_8082B96C[][3] = { - { 0x0000, 0x0000, 0x0000 }, { 0x00AA, 0x00AA, 0x00AA }, { 0x0000, 0x0000, 0x0000 }, - { 0x00FF, 0x00A0, 0x0000 }, { 0x0000, 0x0000, 0x0064 }, { 0x0000, 0x0096, 0x00FF }, +s16 sCursorEnvColorTarget[][3] = { + { 0, 0, 0 }, { 170, 170, 170 }, { 0, 0, 0 }, { 255, 160, 0 }, { 0, 0, 100 }, { 0, 150, 255 }, }; -s16 D_8082B990 = 10; -s16 D_8082B994 = 0; +void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { + static s16 sCursorColorTimer = 10; + static s16 sCursorColorTargetIndex = 0; + PauseContext* pauseCtx = &play->pauseCtx; + s16 stepR; + s16 stepG; + s16 stepB; -s32 D_8082B998[] = { - 0x0D003300, - 0x0D002700, - 0x0D002B00, - 0x0D002F00, + OPEN_DISPS(gfxCtx); + + if (!IS_PAUSE_STATE_GAMEOVER) { + if (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) { + + stepR = + ABS_ALT(sCursorPrimR - sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) / + sCursorColorTimer; + stepG = + ABS_ALT(sCursorPrimG - sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) / + sCursorColorTimer; + stepB = + ABS_ALT(sCursorPrimB - sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) / + sCursorColorTimer; + + if (sCursorPrimR >= sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) { + sCursorPrimR -= stepR; + } else { + sCursorPrimR += stepR; + } + + if (sCursorPrimG >= sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) { + sCursorPrimG -= stepG; + } else { + sCursorPrimG += stepG; + } + + if (sCursorPrimB >= sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) { + sCursorPrimB -= stepB; + } else { + sCursorPrimB += stepB; + } + + stepR = + ABS_ALT(sCursorEnvR - sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) / + sCursorColorTimer; + stepG = + ABS_ALT(sCursorEnvG - sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) / + sCursorColorTimer; + stepB = + ABS_ALT(sCursorEnvB - sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) / + sCursorColorTimer; + + if (sCursorEnvR >= sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]) { + sCursorEnvR -= stepR; + } else { + sCursorEnvR += stepR; + } + + if (sCursorEnvG >= sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]) { + sCursorEnvG -= stepG; + } else { + sCursorEnvG += stepG; + } + + if (sCursorEnvB >= sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]) { + sCursorEnvB -= stepB; + } else { + sCursorEnvB += stepB; + } + + sCursorColorTimer--; + if (sCursorColorTimer == 0) { + sCursorPrimR = sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]; + sCursorPrimG = sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]; + sCursorPrimB = sCursorPrimColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]; + sCursorEnvR = sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][0]; + sCursorEnvG = sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][1]; + sCursorEnvB = sCursorEnvColorTarget[pauseCtx->cursorColorSet + sCursorColorTargetIndex][2]; + sCursorColorTargetIndex ^= 1; + sCursorColorTimer = 10; + } + } + + if ((pauseCtx->pageIndex != PAUSE_ITEM) && (pauseCtx->pageIndex != PAUSE_QUEST)) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, + TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(0.0f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->itemPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sItemPageBgTextures); + + KaleidoScope_DrawItemSelect(play); + } + + if ((pauseCtx->pageIndex != PAUSE_MAP) && (pauseCtx->pageIndex != PAUSE_MASK)) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, + TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(-1.57f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapPageBgTextures); + + if (sInDungeonScene) { + KaleidoScope_DrawDungeonMap(play); + func_8012C8AC(gfxCtx); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + func_801091F0(play); + } else { + KaleidoScope_DrawWorldMap(play); + } + } + + if ((pauseCtx->pageIndex != PAUSE_QUEST) && (pauseCtx->pageIndex != PAUSE_ITEM)) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, + TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(-3.14f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->questPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, sQuestPageBgTextures); + + KaleidoScope_DrawQuestStatus(play); + } + + if ((pauseCtx->pageIndex != PAUSE_MASK) && (pauseCtx->pageIndex != PAUSE_MAP)) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, + TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(1.57f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->maskPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->maskPageVtx, sMaskPageBgTextures); + + KaleidoScope_DrawMaskSelect(play); + } + + switch (pauseCtx->pageIndex) { + case PAUSE_ITEM: + if (pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_MASK) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, + PRIMITIVE, 0, TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(0.0f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->itemPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sItemPageBgTextures); + + KaleidoScope_DrawItemSelect(play); + } + break; + + case PAUSE_MAP: + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, + 0, TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(-1.57f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapPageBgTextures); + + if (sInDungeonScene) { + KaleidoScope_DrawDungeonMap(play); + func_8012C8AC(gfxCtx); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + func_801091F0(play); + } else { + Matrix_RotateYF(R_PAUSE_WORLD_MAP_YAW / 1000.0f, MTXMODE_NEW); + + if ((pauseCtx->state == PAUSE_STATE_OPENING_3) || (pauseCtx->state == PAUSE_STATE_OWLWARP_3) || + (pauseCtx->state >= PAUSE_STATE_OWLWARP_6) || + ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && + ((pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_3) || + (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_7)))) { + Matrix_Translate(0.0f, (R_PAUSE_WORLD_MAP_Y_OFFSET - 8000) / 100.0f, + R_PAUSE_WORLD_MAP_DEPTH / 100.0f, MTXMODE_APPLY); + } else { + Matrix_Translate(0.0f, R_PAUSE_WORLD_MAP_Y_OFFSET / 100.0f, R_PAUSE_WORLD_MAP_DEPTH / 100.0f, + MTXMODE_APPLY); + } + + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + KaleidoScope_DrawWorldMap(play); + } + break; + + case PAUSE_QUEST: + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, + 0, TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); + + Matrix_RotateYF(-3.14f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->questPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, sQuestPageBgTextures); + + KaleidoScope_DrawQuestStatus(play); + break; + + case PAUSE_MASK: + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, + 0, TEXEL0, 0, SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(1.57f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->maskPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->maskPageVtx, sMaskPageBgTextures); + + KaleidoScope_DrawMaskSelect(play); + break; + } + } + + CLOSE_DISPS(gfxCtx); +} + +TexturePtr D_8082B998[] = { + gPauseToMasksENGTex, + gPauseToSelectItemENGTex, + gPauseToMapENGTex, + gPauseToQuestStatusENGTex, +}; +TexturePtr D_8082B9A8[] = { + gPauseToMapENGTex, + gPauseToQuestStatusENGTex, + gPauseToMasksENGTex, + gPauseToSelectItemENGTex, }; -s32 D_8082B9A8[] = { - 0x0D002B00, - 0x0D002F00, - 0x0D003300, - 0x0D002700, -}; - -s16 D_8082B9B8[] = { - 0x00B4, 0x00D2, 0x00FF, 0x00DC, 0x0064, 0x0064, 0x0096, 0x00DC, +s16 D_8082B9B8[][4] = { + { 180, 210, 255, 220 }, + { 100, 100, 150, 220 }, }; s16 D_8082B9C8 = 20; +s16 D_8082B9CC = 0; -s32 D_8082B9CC = 0; +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80823350.s") -s16 D_8082B9D0[] = { - 0x00B4, 0x00D2, 0x00FF, 0x00DC, 0x0064, 0x0064, 0x0096, 0x00DC, +void KaleidoScope_UpdateNamePanel(PlayState* play); +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateNamePanel.s") + +void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + + OPEN_DISPS(play->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, + SHADE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 180, 120, 255); + + Matrix_RotateYF(-1.57f, MTXMODE_NEW); + Matrix_Translate(0.0f, sPauseMenuVerticalOffset / 100.0f, -93.0f, MTXMODE_APPLY); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapPageBgTextures); + + Matrix_RotateYF(R_PAUSE_WORLD_MAP_YAW / 1000.0f, MTXMODE_NEW); + + if ((pauseCtx->state == PAUSE_STATE_OPENING_3) || (pauseCtx->state == PAUSE_STATE_OWLWARP_3) || + (pauseCtx->state >= PAUSE_STATE_OWLWARP_6) || + ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && ((pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_3) || + (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_7)))) { + Matrix_Translate(0.0f, (R_PAUSE_WORLD_MAP_Y_OFFSET - 8000) / 100.0f, R_PAUSE_WORLD_MAP_DEPTH / 100.0f, + MTXMODE_APPLY); + } else { + Matrix_Translate(0.0f, R_PAUSE_WORLD_MAP_Y_OFFSET / 100.0f, R_PAUSE_WORLD_MAP_DEPTH / 100.0f, MTXMODE_APPLY); + } + + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateXFApply(-pauseCtx->mapPageRoll / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + KaleidoScope_DrawWorldMap(play); + + CLOSE_DISPS(play->state.gfxCtx); +} + +s16 D_8082B9D0[][4] = { + { 180, 210, 255, 220 }, + { 100, 100, 150, 220 }, }; s16 D_8082B9E0 = 20; +s16 D_8082B9E4 = 0; -s32 D_8082B9E4 = 0; +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824B90.s") -s32 D_8082B9E8 = 0; +void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play); +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateOwlWarpNamePanel.s") -s32 D_8082B9EC = 0; +void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input); +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateSwitchPage.s") -s16 D_8082B9F0[] = { - 0xFFEB, 0xFF98, 0xFFB4, 0xFFD0, 0xFF98, 0xFFD8, +void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ) { + Vec3f eye; + Vec3f at; + Vec3f up; + + eye.x = eyeX; + eye.y = eyeY; + eye.z = eyeZ; + at.x = at.y = at.z = 0.0f; + up.x = up.z = 0.0f; + up.y = 1.0f; + + View_LookAt(&pauseCtx->view, &eye, &at, &up); + View_Apply(&pauseCtx->view, + VIEW_ALL | VIEW_FORCE_VIEWING | VIEW_FORCE_VIEWPORT | VIEW_FORCE_PROJECTION_PERSPECTIVE); +} + +// CLAMP_MIN(*, 1) because C arrays can't have 0 length +s16 sVtxPageMaskQuadsX[CLAMP_MIN(VTX_PAGE_MASK_QUADS, 1)] = { 0 }; +s16 sVtxPageItemQuadsX[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; +s16 sVtxPageMapDungeonQuadsX[VTX_PAGE_MAP_DUNGEON_QUADS] = { + -21, // mapPageVtx[60] QUAD_MAP_DUNGEON_TITLE + -104, // mapPageVtx[64] QUAD_MAP_DUNGEON_BOSS_KEY + -76, // mapPageVtx[68] QUAD_MAP_DUNGEON_COMPASS + -48, // mapPageVtx[72] QUAD_MAP_DUNGEON_MAP + -104, // mapPageVtx[76] QUAD_MAP_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE + -40 // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED +}; +s16 sVtxPageQuestQuadsX[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; +s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = { + -41, // mapPageVtx[60] world map clouds Clock Town 1 + 9, // mapPageVtx[64] world map clouds Clock Town 2 + 43, // mapPageVtx[68] world map clouds Woodfall 1 + -21, // mapPageVtx[72] world map clouds Woodfall 2 + -37, // mapPageVtx[76] world map clouds Woodfall 3 + 43, // mapPageVtx[80] world map clouds Snowhead 1 + -69, // mapPageVtx[84] world map clouds Snowhead 2 + -69, // mapPageVtx[88] world map clouds Snowhead 3 + -32, // mapPageVtx[92] world map clouds Romani Ranch + -109, // mapPageVtx[96] world map clouds Great Bay 1 + -45, // mapPageVtx[100] world map clouds Great Bay 2 + -109, // mapPageVtx[104] world map clouds Great Bay 3 + -45, // mapPageVtx[108] world map clouds Great Bay 4 + 59, // mapPageVtx[112] world map clouds Stone Tower 1 + -5, // mapPageVtx[116] world map clouds Stone Tower 2 + -70, // mapPageVtx[120] world map region Great Bay + -52, // mapPageVtx[124] world map region Zora Hall + -11, // mapPageVtx[128] world map region Romani Ranch + -2, // mapPageVtx[132] world map region Deku Palace + 8, // mapPageVtx[136] world map region Woodfall + 2, // mapPageVtx[140] world map region Clock Town + 1, // mapPageVtx[144] world map region Snowhead + 43, // mapPageVtx[148] world map region Ikana Graveyard + 52, // mapPageVtx[152] world map region Ikana Canyon + 54, // mapPageVtx[156] world map region Goron Village + 62, // mapPageVtx[160] world map region Stone Tower + -80, // mapPageVtx[164] world map owl warp Great Bay Coast + -64, // mapPageVtx[168] world map owl warp Zora Cape + -9, // mapPageVtx[172] world map owl warp Snowhead + -3, // mapPageVtx[176] world map owl warp Mountain Village + -7, // mapPageVtx[180] world map owl warp Clock Town + -16, // mapPageVtx[184] world map owl warp Milk Road + -1, // mapPageVtx[188] world map owl warp Woodfall + 23, // mapPageVtx[192] world map owl warp Southern Swamp + 44, // mapPageVtx[196] world map owl warp Ikana Canyon + 54, // mapPageVtx[200] world map owl warp Stone Tower +}; +s16 sVtxPageSaveQuadsX[VTX_PAGE_SAVE_QUADS] = { + -76, // promptPageVtx[60] QUAD_PROMPT_MESSAGE + -58, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT + 10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT + -58, // promptPageVtx[72] QUAD_PROMPT_CHOICE_YES + 10, // promptPageVtx[76] QUAD_PROMPT_CHOICE_NO }; -s32 D_8082B9FC = 0; - -s16 D_8082BA00[] = { - 0xFFD7, 0x0009, 0x002B, 0xFFEB, 0xFFDB, 0x002B, 0xFFBB, 0xFFBB, 0xFFE0, 0xFF93, 0xFFD3, 0xFF93, - 0xFFD3, 0x003B, 0xFFFB, 0xFFBA, 0xFFCC, 0xFFF5, 0xFFFE, 0x0008, 0x0002, 0x0001, 0x002B, 0x0034, - 0x0036, 0x003E, 0xFFB0, 0xFFC0, 0xFFF7, 0xFFFD, 0xFFF9, 0xFFF0, 0xFFFF, 0x0017, 0x002C, 0x0036, +// CLAMP_MIN(*, 1) because C arrays can't have 0 length +s16 sVtxPageMaskQuadsWidth[CLAMP_MIN(VTX_PAGE_MASK_QUADS, 1)] = { 0 }; +s16 sVtxPageItemQuadsWidth[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; +s16 sVtxPageMapDungeonQuadsWidth[VTX_PAGE_MAP_DUNGEON_QUADS] = { + 128, // mapPageVtx[60] QUAD_MAP_DUNGEON_TITLE + 24, // mapPageVtx[64] QUAD_MAP_DUNGEON_BOSS_KEY + 24, // mapPageVtx[68] QUAD_MAP_DUNGEON_COMPASS + 24, // mapPageVtx[72] QUAD_MAP_DUNGEON_MAP + 32, // mapPageVtx[76] QUAD_MAP_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE + 24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED +}; +s16 sVtxPageQuestQuadsWidth[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; +s16 sVtxPageSaveQuadsWidth[VTX_PAGE_SAVE_QUADS] = { + 152, // promptPageVtx[60] QUAD_PROMPT_MESSAGE + 48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT + 48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT + 48, // promptPageVtx[72] QUAD_PROMPT_CHOICE_YES + 48, // promptPageVtx[76] QUAD_PROMPT_CHOICE_NO }; -s16 D_8082BA48[] = { - 0xFFB4, 0xFFC6, 0x000A, 0xFFC6, 0x000A, 0x0000, +// CLAMP_MIN(*, 1) because C arrays can't have 0 length +s16 sVtxPageMaskQuadsY[CLAMP_MIN(VTX_PAGE_MASK_QUADS, 1)] = { 0 }; +s16 sVtxPageItemQuadsY[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; + +s16 sVtxPageMapDungeonQuadsY[VTX_PAGE_MAP_DUNGEON_QUADS] = { + 54, // mapPageVtx[60] QUAD_MAP_DUNGEON_TITLE + -42, // mapPageVtx[64] QUAD_MAP_DUNGEON_BOSS_KEY + -42, // mapPageVtx[68] QUAD_MAP_DUNGEON_COMPASS + -42, // mapPageVtx[72] QUAD_MAP_DUNGEON_MAP + -24, // mapPageVtx[76] QUAD_MAP_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE + 50, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED +}; +s16 sVtxPageQuestQuadsY[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; +s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = { + 11, // mapPageVtx[60] world map clouds Clock Town 1 + 22, // mapPageVtx[64] world map clouds Clock Town 2 + -16, // mapPageVtx[68] world map clouds Woodfall 1 + -16, // mapPageVtx[72] world map clouds Woodfall 2 + -16, // mapPageVtx[76] world map clouds Woodfall 3 + 59, // mapPageVtx[80] world map clouds Snowhead 1 + 24, // mapPageVtx[84] world map clouds Snowhead 2 + 59, // mapPageVtx[88] world map clouds Snowhead 3 + -11, // mapPageVtx[92] world map clouds Romani Ranch + -5, // mapPageVtx[96] world map clouds Great Bay 1 + -5, // mapPageVtx[100] world map clouds Great Bay 2 + 59, // mapPageVtx[104] world map clouds Great Bay 3 + 59, // mapPageVtx[108] world map clouds Great Bay 4 + 39, // mapPageVtx[112] world map clouds Stone Tower 1 + 31, // mapPageVtx[116] world map clouds Stone Tower 2 + -10, // mapPageVtx[120] world map region Great Bay + -36, // mapPageVtx[124] world map region Zora Hall + -19, // mapPageVtx[128] world map region Romani Ranch + -53, // mapPageVtx[132] world map region Deku Palace + -27, // mapPageVtx[136] world map region Woodfall + -2, // mapPageVtx[140] world map region Clock Town + 41, // mapPageVtx[144] world map region Snowhead + 11, // mapPageVtx[148] world map region Ikana Graveyard + -3, // mapPageVtx[152] world map region Ikana Canyon + 45, // mapPageVtx[156] world map region Goron Village + 18, // mapPageVtx[160] world map region Stone Tower + -8, // mapPageVtx[164] world map owl warp Great Bay Coast + -38, // mapPageVtx[168] world map owl warp Zora Cape + 39, // mapPageVtx[172] world map owl warp Snowhead + 26, // mapPageVtx[176] world map owl warp Mountain Village + 1, // mapPageVtx[180] world map owl warp Clock Town + -7, // mapPageVtx[184] world map owl warp Milk Road + -28, // mapPageVtx[188] world map owl warp Woodfall + -27, // mapPageVtx[192] world map owl warp Southern Swamp + -1, // mapPageVtx[196] world map owl warp Ikana Canyon + 24, // mapPageVtx[200] world map owl warp Stone Tower +}; +s16 sVtxPageSaveQuadsY[VTX_PAGE_SAVE_QUADS] = { + 36, // promptPageVtx[60] QUAD_PROMPT_MESSAGE + 10, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT + 10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT + -6, // promptPageVtx[72] QUAD_PROMPT_CHOICE_YES + -6, // promptPageVtx[76] QUAD_PROMPT_CHOICE_NO }; -s32 D_8082BA54 = 0; - -s32 D_8082BA58 = 0; - -s16 D_8082BA5C[] = { - 0x0080, 0x0018, 0x0018, 0x0018, 0x0020, 0x0018, +// CLAMP_MIN(*, 1) because C arrays can't have 0 length +s16 sVtxPageMaskQuadsHeight[CLAMP_MIN(VTX_PAGE_MASK_QUADS, 1)] = { 0 }; +s16 sVtxPageItemQuadsHeight[CLAMP_MIN(VTX_PAGE_ITEM_QUADS, 1)] = { 0 }; +s16 sVtxPageMapDungeonQuadsHeight[] = { + 16, // mapPageVtx[60] QUAD_MAP_DUNGEON_TITLE + 24, // mapPageVtx[64] QUAD_MAP_DUNGEON_BOSS_KEY + 24, // mapPageVtx[68] QUAD_MAP_DUNGEON_COMPASS + 24, // mapPageVtx[72] QUAD_MAP_DUNGEON_MAP + 24, // mapPageVtx[76] QUAD_MAP_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE + 24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED +}; +s16 sVtxPageQuestQuadsHeight[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; +s16 sVtxPageSaveQuadsHeight[VTX_PAGE_SAVE_QUADS] = { + 16, // promptPageVtx[60] QUAD_PROMPT_MESSAGE + 48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT + 48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT + 16, // promptPageVtx[72] QUAD_PROMPT_CHOICE_YES + 16, // promptPageVtx[76] QUAD_PROMPT_CHOICE_NO }; -s32 D_8082BA68 = 0; - -s16 D_8082BA6C[] = { - 0x0098, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, +s16* sVtxPageQuadsX[VTX_PAGE_MAX] = { + sVtxPageMaskQuadsX, // VTX_PAGE_MASK + sVtxPageItemQuadsX, // VTX_PAGE_ITEM + sVtxPageMapDungeonQuadsX, // VTX_PAGE_MAP_DUNGEON + sVtxPageQuestQuadsX, // VTX_PAGE_QUEST + sVtxPageMapWorldQuadsX, // VTX_PAGE_MAP_WORLD + sVtxPageSaveQuadsX, // VTX_PAGE_PROMPT }; -s32 D_8082BA78 = 0; - -s32 D_8082BA7C = 0; - -s16 D_8082BA80[] = { - 0x0036, 0xFFD6, 0xFFD6, 0xFFD6, 0xFFE8, 0x0032, +s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = { + sVtxPageMaskQuadsWidth, // VTX_PAGE_MASK + sVtxPageItemQuadsWidth, // VTX_PAGE_ITEM + sVtxPageMapDungeonQuadsWidth, // VTX_PAGE_MAP_DUNGEON + sVtxPageQuestQuadsWidth, // VTX_PAGE_QUEST + gVtxPageMapWorldQuadsWidth, // VTX_PAGE_MAP_WORLD + sVtxPageSaveQuadsWidth, // VTX_PAGE_PROMPT }; -s32 D_8082BA8C = 0; - -s16 D_8082BA90[] = { - 0x000B, 0x0016, 0xFFF0, 0xFFF0, 0xFFF0, 0x003B, 0x0018, 0x003B, 0xFFF5, 0xFFFB, 0xFFFB, 0x003B, - 0x003B, 0x0027, 0x001F, 0xFFF6, 0xFFDC, 0xFFED, 0xFFCB, 0xFFE5, 0xFFFE, 0x0029, 0x000B, 0xFFFD, - 0x002D, 0x0012, 0xFFF8, 0xFFDA, 0x0027, 0x001A, 0x0001, 0xFFF9, 0xFFE4, 0xFFE5, 0xFFFF, 0x0018, +s16* sVtxPageQuadsY[VTX_PAGE_MAX] = { + sVtxPageMaskQuadsY, // VTX_PAGE_MASK + sVtxPageItemQuadsY, // VTX_PAGE_ITEM + sVtxPageMapDungeonQuadsY, // VTX_PAGE_MAP_DUNGEON + sVtxPageQuestQuadsY, // VTX_PAGE_QUEST + sVtxPageMapWorldQuadsY, // VTX_PAGE_MAP_WORLD + sVtxPageSaveQuadsY, // VTX_PAGE_PROMPT }; -s16 D_8082BAD8[] = { - 0x0024, 0x000A, 0x000A, 0xFFFA, 0xFFFA, 0x0000, +s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = { + sVtxPageMaskQuadsHeight, // VTX_PAGE_MASK + sVtxPageItemQuadsHeight, // VTX_PAGE_ITEM + sVtxPageMapDungeonQuadsHeight, // VTX_PAGE_MAP_DUNGEON + sVtxPageQuestQuadsHeight, // VTX_PAGE_QUEST + gVtxPageMapWorldQuadsHeight, // VTX_PAGE_MAP_WORLD + sVtxPageSaveQuadsHeight, // VTX_PAGE_PROMPT }; -s32 D_8082BAE4 = 0; - -s32 D_8082BAE8 = 0; - -s16 D_8082BAEC[] = { - 0x0010, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, +s16 sVtxPageGameOverSaveQuadsY[VTX_PAGE_SAVE_QUADS] = { + 14, // promptPageVtx[60] QUAD_PROMPT_MESSAGE + -2, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT + -2, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT + -18, // promptPageVtx[72] QUAD_PROMPT_CHOICE_YES + -18, // promptPageVtx[76] QUAD_PROMPT_CHOICE_NO }; -s32 D_8082BAF8 = 0; +s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 numQuads) { + PauseContext* pauseCtx = &play->pauseCtx; + GameOverContext* gameOverCtx = &play->gameOverCtx; + s16* quadsX; + s16* quadsWidth; + s16* quadsY; + s16* quadsHeight; + s16 pageBgQuadX; + s16 pageBgQuadY; + s16 i; + s16 j; + s16 k; -s16 D_8082BAFC[] = { - 0x0010, 0x0030, 0x0030, 0x0010, 0x0010, 0x0000, -}; + // Vertices for KaleidoScope_DrawPageSections -void* D_8082BB08[] = { - &D_8082B9E8, &D_8082B9EC, &D_8082B9F0, &D_8082B9FC, &D_8082BA00, &D_8082BA48, -}; + pageBgQuadX = 0 - (PAGE_BG_COLS * PAGE_BG_QUAD_WIDTH) / 2 - PAGE_BG_QUAD_WIDTH; -void* D_8082BB20[] = { - &D_8082BA54, &D_8082BA58, &D_8082BA5C, &D_8082BA68, &D_8082B7F0, &D_8082BA6C, -}; + // For each column + for (k = 0, i = 0; i < 3; i++) { + pageBgQuadX += PAGE_BG_QUAD_WIDTH; -void* D_8082BB38[] = { - &D_8082BA78, &D_8082BA7C, &D_8082BA80, &D_8082BA8C, &D_8082BA90, &D_8082BAD8, -}; + // For each row + for (pageBgQuadY = (PAGE_BG_ROWS * PAGE_BG_QUAD_HEIGHT) / 2, j = 0; j < 5; j++, k += 4, pageBgQuadY -= 32) { + vtx[k + 0].v.ob[0] = vtx[k + 2].v.ob[0] = pageBgQuadX; + vtx[k + 1].v.ob[0] = vtx[k + 3].v.ob[0] = vtx[k + 0].v.ob[0] + PAGE_BG_QUAD_WIDTH; -void* D_8082BB50[] = { - &D_8082BAE4, &D_8082BAE8, &D_8082BAEC, &D_8082BAF8, &D_8082B838, &D_8082BAFC, -}; + vtx[k + 0].v.ob[1] = vtx[k + 1].v.ob[1] = pageBgQuadY + pauseCtx->offsetY; + vtx[k + 2].v.ob[1] = vtx[k + 3].v.ob[1] = vtx[k + 0].v.ob[1] - PAGE_BG_QUAD_HEIGHT; -s16 D_8082BB68[] = { - 0x000E, 0xFFFE, 0xFFFE, 0xFFEE, 0xFFEE, 0x0000, -}; + vtx[k + 0].v.ob[2] = vtx[k + 1].v.ob[2] = vtx[k + 2].v.ob[2] = vtx[k + 3].v.ob[2] = 0; + + vtx[k + 0].v.flag = vtx[k + 1].v.flag = vtx[k + 2].v.flag = vtx[k + 3].v.flag = 0; + + vtx[k + 0].v.tc[0] = vtx[k + 0].v.tc[1] = 0; + vtx[k + 1].v.tc[1] = vtx[k + 2].v.tc[0] = 0; + vtx[k + 1].v.tc[0] = vtx[k + 3].v.tc[0] = PAGE_BG_QUAD_TEX_WIDTH * (1 << 5); + vtx[k + 2].v.tc[1] = vtx[k + 3].v.tc[1] = PAGE_BG_QUAD_TEX_HEIGHT * (1 << 5); + + vtx[k + 0].v.cn[0] = vtx[k + 2].v.cn[0] = vtx[k + 0].v.cn[1] = vtx[k + 2].v.cn[1] = vtx[k + 0].v.cn[2] = + vtx[k + 2].v.cn[2] = 0; + + vtx[k + 1].v.cn[0] = vtx[k + 3].v.cn[0] = vtx[k + 1].v.cn[1] = vtx[k + 3].v.cn[1] = vtx[k + 1].v.cn[2] = + vtx[k + 3].v.cn[2] = 0; + + vtx[k + 0].v.cn[3] = vtx[k + 2].v.cn[3] = vtx[k + 1].v.cn[3] = vtx[k + 3].v.cn[3] = pauseCtx->alpha; + } + } + + if (numQuads != 0) { + quadsX = sVtxPageQuadsX[vtxPage]; + quadsWidth = sVtxPageQuadsWidth[vtxPage]; + quadsY = sVtxPageQuadsY[vtxPage]; + quadsHeight = sVtxPageQuadsHeight[vtxPage]; + + for (i = 0; i < numQuads; i++, k += 4) { + vtx[k + 2].v.ob[0] = vtx[k + 0].v.ob[0] = quadsX[i]; + + vtx[k + 1].v.ob[0] = vtx[k + 3].v.ob[0] = vtx[k + 0].v.ob[0] + quadsWidth[i]; + + if (!IS_PAUSE_STATE_GAMEOVER) { + vtx[k + 0].v.ob[1] = vtx[k + 1].v.ob[1] = quadsY[i] + pauseCtx->offsetY; + } else if (gameOverCtx->state == GAMEOVER_INACTIVE) { + vtx[k + 0].v.ob[1] = vtx[k + 1].v.ob[1] = quadsY[i] + pauseCtx->offsetY; + } else { + vtx[k + 0].v.ob[1] = vtx[k + 1].v.ob[1] = sVtxPageGameOverSaveQuadsY[i] + pauseCtx->offsetY; + } + + vtx[k + 2].v.ob[1] = vtx[k + 3].v.ob[1] = vtx[k + 0].v.ob[1] - quadsHeight[i]; + + vtx[k + 0].v.ob[2] = vtx[k + 1].v.ob[2] = vtx[k + 2].v.ob[2] = vtx[k + 3].v.ob[2] = 0; + + vtx[k + 0].v.flag = vtx[k + 1].v.flag = vtx[k + 2].v.flag = vtx[k + 3].v.flag = 0; + + vtx[k + 0].v.tc[0] = vtx[k + 0].v.tc[1] = vtx[k + 1].v.tc[1] = vtx[k + 2].v.tc[0] = 0; + vtx[k + 1].v.tc[0] = vtx[k + 3].v.tc[0] = quadsWidth[i] << 5; + vtx[k + 2].v.tc[1] = vtx[k + 3].v.tc[1] = quadsHeight[i] << 5; + + vtx[k + 0].v.cn[0] = vtx[k + 2].v.cn[0] = vtx[k + 0].v.cn[1] = vtx[k + 2].v.cn[1] = vtx[k + 0].v.cn[2] = + vtx[k + 2].v.cn[2] = 255; + + vtx[k + 1].v.cn[0] = vtx[k + 3].v.cn[0] = vtx[k + 1].v.cn[1] = vtx[k + 3].v.cn[1] = vtx[k + 1].v.cn[2] = + vtx[k + 3].v.cn[2] = 255; + + vtx[k + 0].v.cn[3] = vtx[k + 2].v.cn[3] = vtx[k + 1].v.cn[3] = vtx[k + 3].v.cn[3] = pauseCtx->alpha; + } + } + return k; +} s16 sQuestVtxRectLeft[] = { 45, // QUEST_REMAINS_ODOLWA @@ -413,6 +1180,373 @@ s16 sQuestVtxHeights[] = { 16, // ocarina input button index 6 16, // ocarina input button index 7 }; + +void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) { + PauseContext* pauseCtx = &play->pauseCtx; + s16 i; + s16 j; + s16 k; + s16 vtx_x; + s16 vtx_y; + + pauseCtx->offsetY = 0; + + if ((pauseCtx->state == PAUSE_STATE_OPENING_3) || (pauseCtx->state == PAUSE_STATE_OWLWARP_3) || + (pauseCtx->state >= PAUSE_STATE_OWLWARP_6) || + ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && ((pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_3) || + (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_7)))) { + pauseCtx->offsetY = 80; + } + + if (pauseCtx->pageIndex != PAUSE_QUEST) { + pauseCtx->itemPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_ITEM_QUADS) * 4) * sizeof(Vtx)); + KaleidoScope_SetPageVertices(play, pauseCtx->itemPageVtx, VTX_PAGE_ITEM, VTX_PAGE_ITEM_QUADS); + + pauseCtx->itemVtx = GRAPH_ALLOC(gfxCtx, (QUAD_ITEM_MAX * 4) * sizeof(Vtx)); + + // QUAD_ITEM_GRID_FIRST..QUAD_ITEM_GRID_LAST + + // Loop over grid rows + for (k = 0, i = 0, vtx_y = (ITEM_GRID_ROWS * ITEM_GRID_CELL_HEIGHT) / 2 - 6; k < ITEM_GRID_ROWS; + k++, vtx_y -= ITEM_GRID_CELL_HEIGHT) { + // Loop over grid columns + for (vtx_x = 0 - (ITEM_GRID_COLS * ITEM_GRID_CELL_WIDTH) / 2, j = 0; j < ITEM_GRID_COLS; + j++, i += 4, vtx_x += ITEM_GRID_CELL_WIDTH) { + pauseCtx->itemVtx[i + 0].v.ob[0] = pauseCtx->itemVtx[i + 2].v.ob[0] = vtx_x + ITEM_GRID_QUAD_MARGIN; + pauseCtx->itemVtx[i + 1].v.ob[0] = pauseCtx->itemVtx[i + 3].v.ob[0] = + pauseCtx->itemVtx[i + 0].v.ob[0] + ITEM_GRID_QUAD_WIDTH; + + pauseCtx->itemVtx[i + 0].v.ob[1] = pauseCtx->itemVtx[i + 1].v.ob[1] = + vtx_y + pauseCtx->offsetY - ITEM_GRID_QUAD_MARGIN; + pauseCtx->itemVtx[i + 2].v.ob[1] = pauseCtx->itemVtx[i + 3].v.ob[1] = + pauseCtx->itemVtx[i + 0].v.ob[1] - ITEM_GRID_QUAD_WIDTH; + + pauseCtx->itemVtx[i + 0].v.ob[2] = pauseCtx->itemVtx[i + 1].v.ob[2] = pauseCtx->itemVtx[i + 2].v.ob[2] = + pauseCtx->itemVtx[i + 3].v.ob[2] = 0; + + pauseCtx->itemVtx[i + 0].v.flag = pauseCtx->itemVtx[i + 1].v.flag = pauseCtx->itemVtx[i + 2].v.flag = + pauseCtx->itemVtx[i + 3].v.flag = 0; + + pauseCtx->itemVtx[i + 0].v.tc[0] = pauseCtx->itemVtx[i + 0].v.tc[1] = pauseCtx->itemVtx[i + 1].v.tc[1] = + pauseCtx->itemVtx[i + 2].v.tc[0] = 0; + + pauseCtx->itemVtx[i + 1].v.tc[0] = pauseCtx->itemVtx[i + 2].v.tc[1] = pauseCtx->itemVtx[i + 3].v.tc[0] = + pauseCtx->itemVtx[i + 3].v.tc[1] = ITEM_GRID_QUAD_TEX_SIZE * (1 << 5); + + pauseCtx->itemVtx[i + 0].v.cn[0] = pauseCtx->itemVtx[i + 1].v.cn[0] = pauseCtx->itemVtx[i + 2].v.cn[0] = + pauseCtx->itemVtx[i + 3].v.cn[0] = pauseCtx->itemVtx[i + 0].v.cn[1] = + pauseCtx->itemVtx[i + 1].v.cn[1] = pauseCtx->itemVtx[i + 2].v.cn[1] = + pauseCtx->itemVtx[i + 3].v.cn[1] = pauseCtx->itemVtx[i + 0].v.cn[2] = + pauseCtx->itemVtx[i + 1].v.cn[2] = pauseCtx->itemVtx[i + 2].v.cn[2] = + pauseCtx->itemVtx[i + 3].v.cn[2] = 255; + + pauseCtx->itemVtx[i + 0].v.cn[3] = pauseCtx->itemVtx[i + 1].v.cn[3] = pauseCtx->itemVtx[i + 2].v.cn[3] = + pauseCtx->itemVtx[i + 3].v.cn[3] = 255; + } + } + + // QUAD_ITEM_GRID_SELECTED_C_LEFT, QUAD_ITEM_GRID_SELECTED_C_DOWN, QUAD_ITEM_GRID_SELECTED_C_RIGHT + + for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++, i += 4) { + if (GET_CUR_FORM_BTN_SLOT(j) != ITEM_NONE) { + k = GET_CUR_FORM_BTN_SLOT(j) * 4; + + pauseCtx->itemVtx[i + 0].v.ob[0] = pauseCtx->itemVtx[i + 2].v.ob[0] = + pauseCtx->itemVtx[k].v.ob[0] + ITEM_GRID_SELECTED_QUAD_MARGIN; + + pauseCtx->itemVtx[i + 1].v.ob[0] = pauseCtx->itemVtx[i + 3].v.ob[0] = + pauseCtx->itemVtx[i + 0].v.ob[0] + ITEM_GRID_SELECTED_QUAD_WIDTH; + + pauseCtx->itemVtx[i + 0].v.ob[1] = pauseCtx->itemVtx[i + 1].v.ob[1] = + pauseCtx->itemVtx[k].v.ob[1] - ITEM_GRID_SELECTED_QUAD_MARGIN; + + pauseCtx->itemVtx[i + 2].v.ob[1] = pauseCtx->itemVtx[i + 3].v.ob[1] = + pauseCtx->itemVtx[i + 0].v.ob[1] - ITEM_GRID_SELECTED_QUAD_WIDTH; + + pauseCtx->itemVtx[i + 0].v.ob[2] = pauseCtx->itemVtx[i + 1].v.ob[2] = pauseCtx->itemVtx[i + 2].v.ob[2] = + pauseCtx->itemVtx[i + 3].v.ob[2] = 0; + + pauseCtx->itemVtx[i + 0].v.flag = pauseCtx->itemVtx[i + 1].v.flag = pauseCtx->itemVtx[i + 2].v.flag = + pauseCtx->itemVtx[i + 3].v.flag = 0; + + pauseCtx->itemVtx[i + 0].v.tc[0] = pauseCtx->itemVtx[i + 0].v.tc[1] = pauseCtx->itemVtx[i + 1].v.tc[1] = + pauseCtx->itemVtx[i + 2].v.tc[0] = 0; + + pauseCtx->itemVtx[i + 1].v.tc[0] = pauseCtx->itemVtx[i + 2].v.tc[1] = pauseCtx->itemVtx[i + 3].v.tc[0] = + pauseCtx->itemVtx[i + 3].v.tc[1] = ITEM_GRID_SELECTED_QUAD_TEX_SIZE * (1 << 5); + + pauseCtx->itemVtx[i + 0].v.cn[0] = pauseCtx->itemVtx[i + 1].v.cn[0] = pauseCtx->itemVtx[i + 2].v.cn[0] = + pauseCtx->itemVtx[i + 3].v.cn[0] = pauseCtx->itemVtx[i + 0].v.cn[1] = + pauseCtx->itemVtx[i + 1].v.cn[1] = pauseCtx->itemVtx[i + 2].v.cn[1] = + pauseCtx->itemVtx[i + 3].v.cn[1] = pauseCtx->itemVtx[i + 0].v.cn[2] = + pauseCtx->itemVtx[i + 1].v.cn[2] = pauseCtx->itemVtx[i + 2].v.cn[2] = + pauseCtx->itemVtx[i + 3].v.cn[2] = 255; + + pauseCtx->itemVtx[i + 0].v.cn[3] = pauseCtx->itemVtx[i + 1].v.cn[3] = pauseCtx->itemVtx[i + 2].v.cn[3] = + pauseCtx->itemVtx[i + 3].v.cn[3] = pauseCtx->alpha; + } else { + // No item equipped on the C button, put the quad out of view + + pauseCtx->itemVtx[i + 2].v.ob[0] = -300; + pauseCtx->itemVtx[i + 0].v.ob[0] = pauseCtx->itemVtx[i + 2].v.ob[0]; + + pauseCtx->itemVtx[i + 1].v.ob[0] = pauseCtx->itemVtx[i + 3].v.ob[0] = + pauseCtx->itemVtx[i + 0].v.ob[0] + ITEM_GRID_SELECTED_QUAD_WIDTH; + + pauseCtx->itemVtx[i + 0].v.ob[1] = pauseCtx->itemVtx[i + 1].v.ob[1] = 300; + pauseCtx->itemVtx[i + 2].v.ob[1] = pauseCtx->itemVtx[i + 3].v.ob[1] = + pauseCtx->itemVtx[i + 0].v.ob[1] - ITEM_GRID_SELECTED_QUAD_HEIGHT; + } + } + } + + if (pauseCtx->pageIndex != PAUSE_MASK) { + if (!sInDungeonScene) { + pauseCtx->mapPageVtx = GRAPH_ALLOC( + gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_MAP_WORLD_QUADS + WORLD_MAP_IMAGE_FRAG_NUM) * 4) * sizeof(Vtx)); + j = KaleidoScope_SetPageVertices(play, pauseCtx->mapPageVtx, VTX_PAGE_MAP_WORLD, VTX_PAGE_MAP_WORLD_QUADS); + + for (i = 0, vtx_y = 59; i < WORLD_MAP_IMAGE_FRAG_NUM; i++, j += 4, vtx_y -= WORLD_MAP_IMAGE_FRAG_HEIGHT) { + pauseCtx->mapPageVtx[j + 2].v.ob[0] = 0 - (WORLD_MAP_IMAGE_WIDTH / 2) - 1; + pauseCtx->mapPageVtx[j + 0].v.ob[0] = pauseCtx->mapPageVtx[j + 2].v.ob[0]; + + pauseCtx->mapPageVtx[j + 1].v.ob[0] = pauseCtx->mapPageVtx[j + 3].v.ob[0] = + pauseCtx->mapPageVtx[j + 0].v.ob[0] + WORLD_MAP_IMAGE_WIDTH; + + pauseCtx->mapPageVtx[j + 0].v.ob[1] = pauseCtx->mapPageVtx[j + 1].v.ob[1] = vtx_y + pauseCtx->offsetY; + + pauseCtx->mapPageVtx[j + 2].v.ob[1] = pauseCtx->mapPageVtx[j + 3].v.ob[1] = + pauseCtx->mapPageVtx[j + 0].v.ob[1] - WORLD_MAP_IMAGE_FRAG_HEIGHT; + + pauseCtx->mapPageVtx[j + 0].v.ob[2] = pauseCtx->mapPageVtx[j + 1].v.ob[2] = + pauseCtx->mapPageVtx[j + 2].v.ob[2] = pauseCtx->mapPageVtx[j + 3].v.ob[2] = 0; + + pauseCtx->mapPageVtx[j + 0].v.flag = pauseCtx->mapPageVtx[j + 1].v.flag = + pauseCtx->mapPageVtx[j + 2].v.flag = pauseCtx->mapPageVtx[j + 3].v.flag = 0; + + pauseCtx->mapPageVtx[j + 0].v.tc[0] = pauseCtx->mapPageVtx[j + 0].v.tc[1] = + pauseCtx->mapPageVtx[j + 1].v.tc[1] = pauseCtx->mapPageVtx[j + 2].v.tc[0] = 0; + + pauseCtx->mapPageVtx[j + 1].v.tc[0] = pauseCtx->mapPageVtx[j + 3].v.tc[0] = + WORLD_MAP_IMAGE_WIDTH * (1 << 5); + pauseCtx->mapPageVtx[j + 2].v.tc[1] = pauseCtx->mapPageVtx[j + 3].v.tc[1] = + WORLD_MAP_IMAGE_FRAG_HEIGHT * (1 << 5); + + pauseCtx->mapPageVtx[j + 0].v.cn[0] = pauseCtx->mapPageVtx[j + 2].v.cn[0] = + pauseCtx->mapPageVtx[j + 0].v.cn[1] = pauseCtx->mapPageVtx[j + 2].v.cn[1] = + pauseCtx->mapPageVtx[j + 0].v.cn[2] = pauseCtx->mapPageVtx[j + 2].v.cn[2] = + pauseCtx->mapPageVtx[j + 1].v.cn[0] = pauseCtx->mapPageVtx[j + 3].v.cn[0] = + pauseCtx->mapPageVtx[j + 1].v.cn[1] = pauseCtx->mapPageVtx[j + 3].v.cn[1] = + pauseCtx->mapPageVtx[j + 1].v.cn[2] = pauseCtx->mapPageVtx[j + 3].v.cn[2] = + pauseCtx->mapPageVtx[j + 0].v.cn[3] = pauseCtx->mapPageVtx[j + 2].v.cn[3] = + pauseCtx->mapPageVtx[j + 1].v.cn[3] = pauseCtx->mapPageVtx[j + 3].v.cn[3] = + pauseCtx->alpha; + } + + pauseCtx->mapPageVtx[j - 2].v.ob[1] = pauseCtx->mapPageVtx[j - 1].v.ob[1] = + pauseCtx->mapPageVtx[j - 4].v.ob[1] - (WORLD_MAP_IMAGE_HEIGHT % WORLD_MAP_IMAGE_FRAG_HEIGHT); + + pauseCtx->mapPageVtx[j - 2].v.tc[1] = pauseCtx->mapPageVtx[j - 1].v.tc[1] = + (WORLD_MAP_IMAGE_HEIGHT % WORLD_MAP_IMAGE_FRAG_HEIGHT) * (1 << 5); + + } else { + pauseCtx->mapPageVtx = + GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_MAP_DUNGEON_QUADS) * 4) * sizeof(Vtx)); + KaleidoScope_SetPageVertices(play, pauseCtx->mapPageVtx, VTX_PAGE_MAP_DUNGEON, VTX_PAGE_MAP_DUNGEON_QUADS); + } + } + + if (pauseCtx->pageIndex != PAUSE_ITEM) { + pauseCtx->questPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_QUEST_QUADS) * 4) * sizeof(Vtx)); + KaleidoScope_SetPageVertices(play, pauseCtx->questPageVtx, VTX_PAGE_QUEST, VTX_PAGE_QUEST_QUADS); + + pauseCtx->questVtx = GRAPH_ALLOC(gfxCtx, (39 * 4) * sizeof(Vtx)); + + for (k = 0, j = 0; j < 39; j++, k += 4) { + if (j <= QUEST_SWORD) { + pauseCtx->questVtx[k + 0].v.ob[0] = pauseCtx->questVtx[k + 2].v.ob[0] = sQuestVtxRectLeft[j]; + + pauseCtx->questVtx[k + 1].v.ob[0] = pauseCtx->questVtx[k + 3].v.ob[0] = + pauseCtx->questVtx[k + 0].v.ob[0] + sQuestVtxWidths[j]; + + pauseCtx->questVtx[k + 0].v.ob[1] = pauseCtx->questVtx[k + 1].v.ob[1] = + sQuestVtxRectTop[j] + pauseCtx->offsetY; + + pauseCtx->questVtx[k + 2].v.ob[1] = pauseCtx->questVtx[k + 3].v.ob[1] = + pauseCtx->questVtx[k + 0].v.ob[1] - sQuestVtxHeights[j]; + } else { + pauseCtx->questVtx[k + 0].v.ob[0] = pauseCtx->questVtx[k + 2].v.ob[0] = sQuestVtxRectLeft[j] + 2; + + pauseCtx->questVtx[k + 1].v.ob[0] = pauseCtx->questVtx[k + 3].v.ob[0] = + pauseCtx->questVtx[k + 0].v.ob[0] + sQuestVtxWidths[j] - 4; + + pauseCtx->questVtx[k + 0].v.ob[1] = pauseCtx->questVtx[k + 1].v.ob[1] = + sQuestVtxRectTop[j] + pauseCtx->offsetY - 2; + + pauseCtx->questVtx[k + 2].v.ob[1] = pauseCtx->questVtx[k + 3].v.ob[1] = + pauseCtx->questVtx[k + 0].v.ob[1] - sQuestVtxHeights[j] + 4; + } + + pauseCtx->questVtx[k + 0].v.ob[2] = pauseCtx->questVtx[k + 1].v.ob[2] = pauseCtx->questVtx[k + 2].v.ob[2] = + pauseCtx->questVtx[k + 3].v.ob[2] = 0; + + pauseCtx->questVtx[k + 0].v.flag = pauseCtx->questVtx[k + 1].v.flag = pauseCtx->questVtx[k + 2].v.flag = + pauseCtx->questVtx[k + 3].v.flag = 0; + + pauseCtx->questVtx[k + 0].v.tc[0] = pauseCtx->questVtx[k + 0].v.tc[1] = pauseCtx->questVtx[k + 1].v.tc[1] = + pauseCtx->questVtx[k + 2].v.tc[0] = 0; + + pauseCtx->questVtx[k + 1].v.tc[0] = pauseCtx->questVtx[k + 3].v.tc[0] = sQuestVtxWidths[j] << 5; + pauseCtx->questVtx[k + 2].v.tc[1] = pauseCtx->questVtx[k + 3].v.tc[1] = sQuestVtxHeights[j] << 5; + + pauseCtx->questVtx[k + 0].v.cn[0] = pauseCtx->questVtx[k + 1].v.cn[0] = pauseCtx->questVtx[k + 2].v.cn[0] = + pauseCtx->questVtx[k + 3].v.cn[0] = pauseCtx->questVtx[k + 0].v.cn[1] = + pauseCtx->questVtx[k + 1].v.cn[1] = pauseCtx->questVtx[k + 2].v.cn[1] = + pauseCtx->questVtx[k + 3].v.cn[1] = pauseCtx->questVtx[k + 0].v.cn[2] = + pauseCtx->questVtx[k + 1].v.cn[2] = pauseCtx->questVtx[k + 2].v.cn[2] = + pauseCtx->questVtx[k + 3].v.cn[2] = 255; + + pauseCtx->questVtx[k + 0].v.cn[3] = pauseCtx->questVtx[k + 1].v.cn[3] = pauseCtx->questVtx[k + 2].v.cn[3] = + pauseCtx->questVtx[k + 3].v.cn[3] = pauseCtx->alpha; + } + } + + if (pauseCtx->pageIndex != PAUSE_MAP) { + pauseCtx->maskPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_MASK_QUADS) * 4) * sizeof(Vtx)); + KaleidoScope_SetPageVertices(play, pauseCtx->maskPageVtx, VTX_PAGE_MASK, VTX_PAGE_MASK_QUADS); + + pauseCtx->maskVtx = GRAPH_ALLOC(gfxCtx, (QUAD_MASK_MAX * 4) * sizeof(Vtx)); + + // Loop over grid rows + for (k = 0, i = 0, vtx_y = (MASK_GRID_ROWS * MASK_GRID_CELL_HEIGHT) / 2 - 6; k < MASK_GRID_ROWS; + k++, vtx_y -= MASK_GRID_CELL_HEIGHT) { + // Loop over grid columns + for (vtx_x = 0 - (MASK_GRID_COLS * MASK_GRID_CELL_WIDTH) / 2, j = 0; j < MASK_GRID_COLS; + j++, i += 4, vtx_x += MASK_GRID_CELL_WIDTH) { + pauseCtx->maskVtx[i + 0].v.ob[0] = pauseCtx->maskVtx[i + 2].v.ob[0] = vtx_x + MASK_GRID_QUAD_MARGIN; + pauseCtx->maskVtx[i + 1].v.ob[0] = pauseCtx->maskVtx[i + 3].v.ob[0] = + pauseCtx->maskVtx[i + 0].v.ob[0] + MASK_GRID_QUAD_WIDTH; + + pauseCtx->maskVtx[i + 0].v.ob[1] = pauseCtx->maskVtx[i + 1].v.ob[1] = + vtx_y + pauseCtx->offsetY - MASK_GRID_QUAD_MARGIN; + pauseCtx->maskVtx[i + 2].v.ob[1] = pauseCtx->maskVtx[i + 3].v.ob[1] = + pauseCtx->maskVtx[i + 0].v.ob[1] - MASK_GRID_QUAD_HEIGHT; + + pauseCtx->maskVtx[i + 0].v.ob[2] = pauseCtx->maskVtx[i + 1].v.ob[2] = pauseCtx->maskVtx[i + 2].v.ob[2] = + pauseCtx->maskVtx[i + 3].v.ob[2] = 0; + + pauseCtx->maskVtx[i + 0].v.flag = pauseCtx->maskVtx[i + 1].v.flag = pauseCtx->maskVtx[i + 2].v.flag = + pauseCtx->maskVtx[i + 3].v.flag = 0; + + pauseCtx->maskVtx[i + 0].v.tc[0] = pauseCtx->maskVtx[i + 0].v.tc[1] = pauseCtx->maskVtx[i + 1].v.tc[1] = + pauseCtx->maskVtx[i + 2].v.tc[0] = 0; + + pauseCtx->maskVtx[i + 1].v.tc[0] = pauseCtx->maskVtx[i + 2].v.tc[1] = pauseCtx->maskVtx[i + 3].v.tc[0] = + pauseCtx->maskVtx[i + 3].v.tc[1] = MASK_GRID_QUAD_TEX_SIZE * (1 << 5); + + pauseCtx->maskVtx[i + 0].v.cn[0] = pauseCtx->maskVtx[i + 1].v.cn[0] = pauseCtx->maskVtx[i + 2].v.cn[0] = + pauseCtx->maskVtx[i + 3].v.cn[0] = pauseCtx->maskVtx[i + 0].v.cn[1] = + pauseCtx->maskVtx[i + 1].v.cn[1] = pauseCtx->maskVtx[i + 2].v.cn[1] = + pauseCtx->maskVtx[i + 3].v.cn[1] = pauseCtx->maskVtx[i + 0].v.cn[2] = + pauseCtx->maskVtx[i + 1].v.cn[2] = pauseCtx->maskVtx[i + 2].v.cn[2] = + pauseCtx->maskVtx[i + 3].v.cn[2] = 255; + + pauseCtx->maskVtx[i + 0].v.cn[3] = pauseCtx->maskVtx[i + 1].v.cn[3] = pauseCtx->maskVtx[i + 2].v.cn[3] = + pauseCtx->maskVtx[i + 3].v.cn[3] = 255; + } + } + + // QUAD_MASK_GRID_SELECTED_C_LEFT, QUAD_MASK_GRID_SELECTED_C_DOWN, QUAD_MASK_GRID_SELECTED_C_RIGHT + + for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++, i += 4) { + if (GET_CUR_FORM_BTN_SLOT(j) != ITEM_NONE) { + k = (GET_CUR_FORM_BTN_SLOT(j) - ITEM_NUM_SLOTS) * 4; + + pauseCtx->maskVtx[i + 0].v.ob[0] = pauseCtx->maskVtx[i + 2].v.ob[0] = + pauseCtx->maskVtx[k].v.ob[0] + MASK_GRID_SELECTED_QUAD_MARGIN; + + pauseCtx->maskVtx[i + 1].v.ob[0] = pauseCtx->maskVtx[i + 3].v.ob[0] = + pauseCtx->maskVtx[i + 0].v.ob[0] + MASK_GRID_SELECTED_QUAD_WIDTH; + + pauseCtx->maskVtx[i + 0].v.ob[1] = pauseCtx->maskVtx[i + 1].v.ob[1] = + pauseCtx->maskVtx[k].v.ob[1] - MASK_GRID_SELECTED_QUAD_MARGIN; + + pauseCtx->maskVtx[i + 2].v.ob[1] = pauseCtx->maskVtx[i + 3].v.ob[1] = + pauseCtx->maskVtx[i + 0].v.ob[1] - MASK_GRID_SELECTED_QUAD_HEIGHT; + + pauseCtx->maskVtx[i + 0].v.ob[2] = pauseCtx->maskVtx[i + 1].v.ob[2] = pauseCtx->maskVtx[i + 2].v.ob[2] = + pauseCtx->maskVtx[i + 3].v.ob[2] = 0; + + pauseCtx->maskVtx[i + 0].v.flag = pauseCtx->maskVtx[i + 1].v.flag = pauseCtx->maskVtx[i + 2].v.flag = + pauseCtx->maskVtx[i + 3].v.flag = 0; + + pauseCtx->maskVtx[i + 0].v.tc[0] = pauseCtx->maskVtx[i + 0].v.tc[1] = pauseCtx->maskVtx[i + 1].v.tc[1] = + pauseCtx->maskVtx[i + 2].v.tc[0] = 0; + + pauseCtx->maskVtx[i + 1].v.tc[0] = pauseCtx->maskVtx[i + 2].v.tc[1] = pauseCtx->maskVtx[i + 3].v.tc[0] = + pauseCtx->maskVtx[i + 3].v.tc[1] = MASK_GRID_SELECTED_QUAD_TEX_SIZE * (1 << 5); + + pauseCtx->maskVtx[i + 0].v.cn[0] = pauseCtx->maskVtx[i + 1].v.cn[0] = pauseCtx->maskVtx[i + 2].v.cn[0] = + pauseCtx->maskVtx[i + 3].v.cn[0] = pauseCtx->maskVtx[i + 0].v.cn[1] = + pauseCtx->maskVtx[i + 1].v.cn[1] = pauseCtx->maskVtx[i + 2].v.cn[1] = + pauseCtx->maskVtx[i + 3].v.cn[1] = pauseCtx->maskVtx[i + 0].v.cn[2] = + pauseCtx->maskVtx[i + 1].v.cn[2] = pauseCtx->maskVtx[i + 2].v.cn[2] = + pauseCtx->maskVtx[i + 3].v.cn[2] = 255; + + pauseCtx->maskVtx[i + 0].v.cn[3] = pauseCtx->maskVtx[i + 1].v.cn[3] = pauseCtx->maskVtx[i + 2].v.cn[3] = + pauseCtx->maskVtx[i + 3].v.cn[3] = pauseCtx->alpha; + } else { + pauseCtx->maskVtx[i + 2].v.ob[0] = -300; + pauseCtx->maskVtx[i + 0].v.ob[0] = pauseCtx->maskVtx[i + 2].v.ob[0]; + + pauseCtx->maskVtx[i + 1].v.ob[0] = pauseCtx->maskVtx[i + 3].v.ob[0] = + pauseCtx->maskVtx[i + 0].v.ob[0] + MASK_GRID_SELECTED_QUAD_WIDTH; + + pauseCtx->maskVtx[i + 0].v.ob[1] = pauseCtx->maskVtx[i + 1].v.ob[1] = 300; + pauseCtx->maskVtx[i + 2].v.ob[1] = pauseCtx->maskVtx[i + 3].v.ob[1] = + pauseCtx->maskVtx[i + 0].v.ob[1] - MASK_GRID_SELECTED_QUAD_HEIGHT; + } + } + } + + pauseCtx->cursorVtx = GRAPH_ALLOC(play->state.gfxCtx, (PAUSE_QUAD_CURSOR_MAX * 4) * sizeof(Vtx)); + + for (i = 0; i < (PAUSE_QUAD_CURSOR_MAX * 4); i++) { + pauseCtx->cursorVtx[i].v.ob[0] = pauseCtx->cursorVtx[i].v.ob[1] = pauseCtx->cursorVtx[i].v.ob[2] = 0; + + pauseCtx->cursorVtx[i].v.flag = 0; + + pauseCtx->cursorVtx[i].v.tc[0] = pauseCtx->cursorVtx[i].v.tc[1] = 0; + + pauseCtx->cursorVtx[i].v.cn[0] = pauseCtx->cursorVtx[i].v.cn[1] = pauseCtx->cursorVtx[i].v.cn[2] = + pauseCtx->cursorVtx[i].v.cn[3] = 255; + } + + // PAUSE_QUAD_CURSOR_0 + pauseCtx->cursorVtx[1].v.tc[0] = pauseCtx->cursorVtx[2].v.tc[1] = pauseCtx->cursorVtx[3].v.tc[0] = + pauseCtx->cursorVtx[3].v.tc[1] + // PAUSE_QUAD_CURSOR_1 + = pauseCtx->cursorVtx[5].v.tc[0] = pauseCtx->cursorVtx[6].v.tc[1] = pauseCtx->cursorVtx[7].v.tc[0] = + pauseCtx->cursorVtx[7].v.tc[1] + // PAUSE_QUAD_CURSOR_2 + = pauseCtx->cursorVtx[9].v.tc[0] = pauseCtx->cursorVtx[10].v.tc[1] = pauseCtx->cursorVtx[11].v.tc[0] = + pauseCtx->cursorVtx[11].v.tc[1] + // PAUSE_QUAD_CURSOR_3 + = pauseCtx->cursorVtx[13].v.tc[0] = pauseCtx->cursorVtx[14].v.tc[1] = pauseCtx->cursorVtx[15].v.tc[0] = + pauseCtx->cursorVtx[15].v.tc[1] = 16 * (1 << 5); + + // PAUSE_QUAD_CURSOR_4 + pauseCtx->cursorVtx[17].v.tc[0] = pauseCtx->cursorVtx[18].v.tc[1] = pauseCtx->cursorVtx[19].v.tc[0] = + pauseCtx->cursorVtx[19].v.tc[1] = 32 * (1 << 5); + + pauseCtx->infoPanelVtx = GRAPH_ALLOC(gfxCtx, 28 * sizeof(Vtx)); + + if ((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) || IS_PAUSE_STATE_GAMEOVER) { + pauseCtx->promptPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_SAVE_QUADS) * 4) * sizeof(Vtx)); + KaleidoScope_SetPageVertices(play, pauseCtx->promptPageVtx, VTX_PAGE_PROMPT, VTX_PAGE_SAVE_QUADS); + } +} + f32 D_8082BCB4[] = { -62.0f, -36.0f, -10.0f, 16.0f, 42.0f, 68.0f, }; @@ -458,66 +1592,42 @@ f32 D_8082BE28[] = { -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, 27.0f, -53.0f, -53.0f, 14.0f, 26.0f, }; -s16 D_8082BE84 = 0; - -void func_80821900(void* segment, u32 texIndex) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); -} - -void func_8082192C(void* segment, u32 texIndex) { - CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); -} - -void func_80821958(void* segment, u32 texIndex) { - CmpDma_LoadFile(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400); -} - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_MoveCursorToSpecialPos.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawTexQuadRGBA32.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s") - -void KaleidoScope_HandlePageToggles(PlayState* play, Input* input); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_HandlePageToggles.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821F30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808221DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80823350.s") - -void KaleidoScope_UpdateNamePanel(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateNamePanel.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808248D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824B90.s") - -void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateOwlWarpNamePanel.s") - -void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateSwitchPage.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_SetView.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80825A50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80825E28.s") - #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808274DC.s") #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827A8C.s") +s16 D_8082BE84 = 0; + #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827E08.s") #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_Draw.s") -void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_GrayOutTextureRGBA32.s") +void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) { + u32 rgb; + u32 gray; + u16 i; + s32 j; + + //! FAKE + if (texture == NULL) {} + + for (i = 0; i < pixelCount; i++) { + //! FAKE + j = i; + if ((texture[j] & 0xFFFFFF00) != 0) { + rgb = texture[j] >> 8; + gray = ((((rgb & 0xFF0000) >> 16) + ((rgb & 0xFF00) >> 7) + (rgb & 0xFF)) / 7) & 0xFF; + + rgb = gray; + rgb <<= 8; + rgb |= gray; + rgb <<= 8; + rgb |= gray; + + texture[j] = (rgb << 8) | (texture[j] & 0xFF); + } + } +} void KaleidoScope_UpdateOpening(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index b399de9d3..3d41ffddd 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4205,7 +4205,7 @@ 0x80819238:("KaleidoScope_DrawInventoryEditor",), 0x80819F04:("KaleidoScope_UpdateInventoryEditor",), 0x8081B240:("KaleidoScope_DrawAmmoCount",), - 0x8081B6BC:("KaleidoScope_SetCursorVtx",), + 0x8081B6BC:("KaleidoScope_SetCursorVtxPos",), 0x8081B6EC:("KaleidoScope_DrawItemSelect",), 0x8081BCA8:("KaleidoScope_UpdateItemCursor",), 0x8081C684:("KaleidoScope_UpdateItemEquip",), @@ -4226,17 +4226,17 @@ 0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",), 0x80821CC4:("func_80821CC4",), 0x80821D84:("KaleidoScope_HandlePageToggles",), - 0x80821F30:("func_80821F30",), - 0x808221DC:("func_808221DC",), + 0x80821F30:("KaleidoScope_DrawPageSections",), + 0x808221DC:("KaleidoScope_DrawPages",), 0x80823350:("func_80823350",), 0x80824738:("KaleidoScope_UpdateNamePanel",), - 0x808248D0:("func_808248D0",), + 0x808248D0:("KaleidoScope_DrawOwlWarpMapPage",), 0x80824B90:("func_80824B90",), 0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",), 0x8082585C:("KaleidoScope_UpdateSwitchPage",), 0x808259D4:("KaleidoScope_SetView",), - 0x80825A50:("func_80825A50",), - 0x80825E28:("func_80825E28",), + 0x80825A50:("KaleidoScope_SetPageVertices",), + 0x80825E28:("KaleidoScope_SetVertices",), 0x808274DC:("func_808274DC",), 0x80827A8C:("func_80827A8C",), 0x80827E08:("func_80827E08",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 68b421ddb..130273540 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4727,12 +4727,12 @@ 0x8082B6F0:("sPromptAlphaTargets","UNK_TYPE1","",0x1), 0x8082B6F4:("sPromptAlphaTargetIndex","UNK_TYPE2","",0x2), 0x8082B6F8:("sPromptAlphaTimer","UNK_TYPE2","",0x2), - 0x8082B700:("D_8082B700","UNK_TYPE1","",0x1), - 0x8082B73C:("D_8082B73C","UNK_TYPE1","",0x1), - 0x8082B778:("D_8082B778","UNK_TYPE1","",0x1), - 0x8082B7B4:("D_8082B7B4","UNK_TYPE1","",0x1), - 0x8082B7F0:("D_8082B7F0","UNK_TYPE2","",0x2), - 0x8082B838:("D_8082B838","UNK_TYPE2","",0x2), + 0x8082B700:("sMaskPageBgTextures","UNK_TYPE1","",0x1), + 0x8082B73C:("sItemPageBgTextures","UNK_TYPE1","",0x1), + 0x8082B778:("sMapPageBgTextures","UNK_TYPE1","",0x1), + 0x8082B7B4:("sQuestPageBgTextures","UNK_TYPE1","",0x1), + 0x8082B7F0:("gVtxPageMapWorldQuadsWidth","UNK_TYPE2","",0x2), + 0x8082B838:("gVtxPageMapWorldQuadsHeight","UNK_TYPE2","",0x2), 0x8082B880:("sGameOverPrimR","UNK_TYPE2","",0x2), 0x8082B884:("sGameOverPrimG","UNK_TYPE2","",0x2), 0x8082B888:("sGameOverPrimB","UNK_TYPE2","",0x2), @@ -4759,10 +4759,10 @@ 0x8082B920:("D_8082B920","UNK_TYPE2","",0x2), 0x8082B924:("D_8082B924","UNK_TYPE2","",0x2), 0x8082B944:("sGameOverRectPosY","UNK_TYPE2","",0x2), - 0x8082B948:("D_8082B948","UNK_TYPE2","",0x2), - 0x8082B96C:("D_8082B96C","UNK_TYPE2","",0x2), - 0x8082B990:("D_8082B990","UNK_TYPE2","",0x2), - 0x8082B994:("D_8082B994","UNK_TYPE2","",0x2), + 0x8082B948:("sCursorPrimColorTarget","UNK_TYPE2","",0x2), + 0x8082B96C:("sCursorEnvColorTarget","UNK_TYPE2","",0x2), + 0x8082B990:("sCursorColorTimer","UNK_TYPE2","",0x2), + 0x8082B994:("sCursorColorTargetIndex","UNK_TYPE2","",0x2), 0x8082B998:("D_8082B998","UNK_TYPE1","",0x1), 0x8082B9A8:("D_8082B9A8","UNK_TYPE1","",0x1), 0x8082B9B8:("D_8082B9B8","UNK_TYPE1","",0x1), @@ -4771,33 +4771,33 @@ 0x8082B9D0:("D_8082B9D0","UNK_TYPE1","",0x1), 0x8082B9E0:("D_8082B9E0","UNK_TYPE2","",0x2), 0x8082B9E4:("D_8082B9E4","UNK_TYPE2","",0x2), - 0x8082B9E8:("D_8082B9E8","UNK_TYPE1","",0x1), - 0x8082B9EC:("D_8082B9EC","UNK_TYPE1","",0x1), - 0x8082B9F0:("D_8082B9F0","UNK_TYPE1","",0x1), - 0x8082B9FC:("D_8082B9FC","UNK_TYPE1","",0x1), - 0x8082BA00:("D_8082BA00","UNK_TYPE1","",0x1), - 0x8082BA48:("D_8082BA48","UNK_TYPE1","",0x1), - 0x8082BA54:("D_8082BA54","UNK_TYPE1","",0x1), - 0x8082BA58:("D_8082BA58","UNK_TYPE1","",0x1), - 0x8082BA5C:("D_8082BA5C","UNK_TYPE1","",0x1), - 0x8082BA68:("D_8082BA68","UNK_TYPE1","",0x1), - 0x8082BA6C:("D_8082BA6C","UNK_TYPE1","",0x1), - 0x8082BA78:("D_8082BA78","UNK_TYPE1","",0x1), - 0x8082BA7C:("D_8082BA7C","UNK_TYPE1","",0x1), - 0x8082BA80:("D_8082BA80","UNK_TYPE1","",0x1), - 0x8082BA8C:("D_8082BA8C","UNK_TYPE1","",0x1), - 0x8082BA90:("D_8082BA90","UNK_TYPE1","",0x1), - 0x8082BAD8:("D_8082BAD8","UNK_TYPE1","",0x1), - 0x8082BAE4:("D_8082BAE4","UNK_TYPE1","",0x1), - 0x8082BAE8:("D_8082BAE8","UNK_TYPE1","",0x1), - 0x8082BAEC:("D_8082BAEC","UNK_TYPE1","",0x1), - 0x8082BAF8:("D_8082BAF8","UNK_TYPE1","",0x1), - 0x8082BAFC:("D_8082BAFC","UNK_TYPE1","",0x1), - 0x8082BB08:("D_8082BB08","UNK_PTR","",0x4), - 0x8082BB20:("D_8082BB20","UNK_PTR","",0x4), - 0x8082BB38:("D_8082BB38","UNK_PTR","",0x4), - 0x8082BB50:("D_8082BB50","UNK_PTR","",0x4), - 0x8082BB68:("D_8082BB68","UNK_TYPE2","",0x2), + 0x8082B9E8:("sVtxPageMaskQuadsX","UNK_TYPE1","",0x1), + 0x8082B9EC:("sVtxPageItemQuadsX","UNK_TYPE1","",0x1), + 0x8082B9F0:("sVtxPageMapDungeonQuadsX","UNK_TYPE1","",0x1), + 0x8082B9FC:("sVtxPageQuestQuadsX","UNK_TYPE1","",0x1), + 0x8082BA00:("sVtxPageMapWorldQuadsX","UNK_TYPE1","",0x1), + 0x8082BA48:("sVtxPagePromptQuadsX","UNK_TYPE1","",0x1), + 0x8082BA54:("sVtxPageMaskQuadsWidth","UNK_TYPE1","",0x1), + 0x8082BA58:("sVtxPageItemQuadsWidth","UNK_TYPE1","",0x1), + 0x8082BA5C:("sVtxPageMapDungeonQuadsWidth","UNK_TYPE1","",0x1), + 0x8082BA68:("sVtxPageQuestQuadsWidth","UNK_TYPE1","",0x1), + 0x8082BA6C:("sVtxPagePromptQuadsWidth","UNK_TYPE1","",0x1), + 0x8082BA78:("sVtxPageMaskQuadsY","UNK_TYPE1","",0x1), + 0x8082BA7C:("sVtxPageItemQuadsY","UNK_TYPE1","",0x1), + 0x8082BA80:("sVtxPageMapDungeonQuadsY","UNK_TYPE1","",0x1), + 0x8082BA8C:("sVtxPageQuestQuadsY","UNK_TYPE1","",0x1), + 0x8082BA90:("sVtxPageMapWorldQuadsY","UNK_TYPE1","",0x1), + 0x8082BAD8:("sVtxPagePromptQuadsY","UNK_TYPE1","",0x1), + 0x8082BAE4:("sVtxPageMaskQuadsHeight","UNK_TYPE1","",0x1), + 0x8082BAE8:("sVtxPageItemQuadsHeight","UNK_TYPE1","",0x1), + 0x8082BAEC:("sVtxPageMapDungeonQuadsHeight","UNK_TYPE1","",0x1), + 0x8082BAF8:("sVtxPageQuestQuadsHeight","UNK_TYPE1","",0x1), + 0x8082BAFC:("sVtxPagePromptQuadsHeight","UNK_TYPE1","",0x1), + 0x8082BB08:("sVtxPageQuadsX","UNK_PTR","",0x4), + 0x8082BB20:("sVtxPageQuadsWidth","UNK_PTR","",0x4), + 0x8082BB38:("sVtxPageQuadsY","UNK_PTR","",0x4), + 0x8082BB50:("sVtxPageQuadsHeight","UNK_PTR","",0x4), + 0x8082BB68:("sVtxPageGameOverSaveQuadsY","UNK_TYPE2","",0x2), 0x8082BB74:("sQuestVtxRectLeft","UNK_TYPE2","",0x2), 0x8082BBC4:("sQuestVtxRectTop","UNK_TYPE2","",0x2), 0x8082BC14:("sQuestVtxWidths","UNK_TYPE2","",0x2), From 22af2bb8fe2d941d653f40c159d9e23aa94e0f20 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 23 May 2023 11:47:41 +1000 Subject: [PATCH 19/51] `z_camera` with Partial Docs (3 Non-Equivalent) (#601) * more boot files * Add VT macros and script * finish already existing boot files * most of libultra * fix 64bits libultra files * Use C files for libultra, wrap some functions in NON_MATCHING * Remove duplicate of OS_CLOCK_RATE from fault.c * C files for fbdemos * delete dumb files * bootstrap C files, still need to add them to the spec * update fixbaserom * boot OK? * I forgot to commit the spec * C for gamestates * C for kaleido * Change all includes to "" * copy actor sizes script from oot * I forgot to delete those files * Basic C files for effects * Add effects initvars names * Remove mislabelled boot functions from header/txt * Begin porting bootstrap_fx, some sizes * Fix <> * Fix enum * Fix diff.py * fix libultra stuff * update regconvert * update setup warnings * add some missing ; * Fix some makefile stuff and other fixes on some non_matching functions * add executable flag in extract_baserom and fixbaserom * fix relative path * copy assist from oot * fix map path * another assist path fix * Delete C files for handwritten files * add code_801A51F0 to spec * add gfxbuffers to spec * Move rodata to top of each file when possible * UNK_TYPEs for func_801A51F0 * Remove kaleido rodata from spec * Update spec and undefined_syms for recent merge * GCC warnings and fix errors in nonmatchings, * round percentage numbers * progress script: format changes * progress: error on non-existing files * fix warning in z_scene_table * Match 2 nonmatchings in z_actor * Warnings in lightswitch and invadepoh * Fix warning in z_actor_dlftbls * I though I fixed this one * whoops * Comment out CC_CHECK * Removed redundant ultra64.h includes * Update asm_processor, sorted boot_O1 into other folders, completed the fbdemo bootstrap, cleaned up undefined_syms * Completed gamestates bootstrap * Split kaleido_scope * Remove section.h and segment.h, move keep object externs to a common location in variables.h * Completed effects bootstrap * Segmented address externs for effects, fbdemos, gamestates and kaleido * Move actor data externs out of the if 0 * Segmented address externs for actors * Prepare actionfunc detection * fix script, how did it even work before * Fix actionfunc script again, re-introduce some more intermediate prints to the disassembler * Automated actionFunc detection in actors * Segmented addresses from player .text * rm old segment addrs script and fix build * Move sizes folder to tools * Make build.py executable * New Jenkinsfile Prayge * Remove numpy dependencies * Add warnings_disasm_current.txt * my bad * Update spec and undefined_syms * Add z_eff_ss_hahen to pametfrog * git subrepo pull (merge) --force tools/z64compress subrepo: subdir: "tools/z64compress" merged: "163ca2af" upstream: origin: "https://github.com/z64me/z64compress.git" branch: "main" commit: "163ca2af" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo" commit: "2f68596" * Make z64compress print to stdout * sneeky commit to update warnings tooling * test * Another test * Mark fixing overlay reloc generating as a TODO * Update warnings stuff * Communicate the return code from running z64compress back to the Makefile through the wrapper * Run formatter, remove extra commented copy of function * Re-fix some includes * Convert atan to hex to conform to decided style * Clean up most matching with rodata and most warnings * Match Parallel1, minor improvement in Jump and KeepOn * Begin Documentation * More docs, fixed warnings * cleanup * Continuing with docs * Small progress * Fix BSS, All but 1 matching functions freed, continue docs * Fix merge * Many function names * More Names * Change name * Docs * Begin camera_data docs * small progress * Minor change * Improve docs on functions * Player to TrackActor, progress on camera_data * Add Cam_Data Macro and fix warnings * Progress on Camera_Data docs * Document CsCamData * Cleanup * Minor clean up in Battle NON_MATCHING * Small fixes * Fix bss, OK * typo * revert some z64 macros and format * OK * minor settings docs * Many flags, names, and other documentation * Name many camera_data variables * A few more small changes * Refactoring Camera Action Function Structs WIP * Finish Struct reworking * Some door docs * Add my findings of Camera Settings as comments * More camera data names and comments cleanup * A few names * Slow progress on camera_data * More camera_data progress, slow and steady * Many renaming * wip * camera_data WIP * The grind continues * More data wip * All the macros are in! * Format and cleanup * more docs * format * Breakup camera into pieces * format * PR Feedback round 1 * revert macro * Fix header * Document Play Camera and Screen pos * cleanup * revert camera split * Start copying docs from OoT * remaining CAM_INTERFACE_FLAGS * roData and rwData * Change paramData * Flags * More docs * More Cleanup * cleanup * more * More docs * Standardize subcams * macro * Player_UpdateCamAndSeqModes * cleanup from PR * format * sync with bgCam and actorsCsCam PR * sync to z_play cam PR * docs progress * revert player changes * helper function cleanup * match Jump3, thanks petrie & synray * camera bg docs * brackets * cam math docs * more cam bg docs * rename flags * misc docs * more cleanup * some cam docs * some PR * hud visibility * fix macros, sync with PR * sync with PR * sync with PR * helper cleanup * cleanup * PR Suggestions * more PR * fix merge master * PR review * add comment * more quake cleanup * pr suggestions --------- Co-authored-by: angie Co-authored-by: Elliptic Ellipsis Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> --- include/functions.h | 70 +- include/variables.h | 33 +- include/z64bgcheck.h | 2 +- include/z64camera.h | 94 +- include/z64player.h | 12 +- src/code/z_camera.c | 7949 ++++++++++++++++- src/code/z_eventmgr.c | 6 +- src/code/z_play.c | 31 +- src/code/z_room.c | 2 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 4 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 4 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 4 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 8 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- tools/disasm/functions.txt | 112 +- tools/disasm/variables.txt | 29 +- tools/namefixer.py | 5 +- tools/sizes/code_functions.csv | 112 +- 19 files changed, 7927 insertions(+), 556 deletions(-) diff --git a/include/functions.h b/include/functions.h index c0a393695..11c79548a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -133,7 +133,7 @@ void SystemArena_FreeNullCheck(void* ptr); void SystemArena_RunInits(void); void SystemArena_Init(void* start, size_t size); s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3); -// void func_80086760(void); +f32 func_80086760(f32 x); // void func_80086794(void); // void func_800867B4(void); // void func_800867D4(void); @@ -797,47 +797,45 @@ s32 DynaPolyActor_IsSwitchPressed(DynaPolyActor* dynaActor); s32 DynaPolyActor_IsHeavySwitchPressed(DynaPolyActor* dynaActor); s32 DynaPolyActor_ValidateMove(PlayState* play, DynaPolyActor* dynaActor, s16 startRadius, s16 endRadius, s16 startHeight); -Camera* Camera_Alloc(View* view, CollisionContext* bg, PlayState* play); -void Camera_Free(Camera* camera); -void Camera_Init(Camera* camera, View* view, CollisionContext* bg, PlayState* play); -// void func_800DDFE0(void); -void Camera_InitPlayerSettings(Camera* camera, Player* player); +Camera* Camera_Create(View* view, CollisionContext* colCtx, PlayState* play); +void Camera_Destroy(Camera* camera); +void Camera_Init(Camera* camera, View* view, CollisionContext* colCtx, PlayState* play); +void func_800DDFE0(Camera* camera); +void Camera_InitFocalActorSettings(Camera* camera, Actor* focalActor); s32 Camera_ChangeStatus(Camera* camera, s16 status); -// void func_800DE324(void); -// void func_800DE62C(void); -// void func_800DE840(void); -// void func_800DE890(void); -// UNK_TYPE4 func_800DE954(Camera* camera); -Vec3s* Camera_Update(Vec3s* param_1, Camera* camera); -// void func_800DF498(void); -u32 Camera_SetMode(Camera* camera, s16 mode, s8 param_3); +s32 Camera_UpdateWater(Camera* camera); +void Camera_EarthquakeDay3(Camera* camera); +s32 Camera_UpdateHotRoom(Camera* camera); +s32 Camera_SetSwordDistortion(Camera* camera); +s32 Camera_RequestGiantsMaskSetting(Camera* camera); +Vec3s* Camera_Update(Vec3s* inputDir, Camera* camera); +s32 func_800DF498(Camera* camera); +s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange); s32 Camera_ChangeMode(Camera* camera, s16 mode); -s32 func_800DF86C(Camera* camera, s16 arg1); -// void func_800DF8EC(void); +s32 Camera_CheckValidMode(Camera* camera, s16 mode); +s16 Camera_ChangeSettingFlags(Camera* camera, s16 setting, s16 flags); s32 Camera_ChangeSetting(Camera* camera, s16 setting); -s32 Camera_ChangeDataIdx(Camera* camera, s32 camDataIdx); -// void func_800DFC1C(void); -// void func_800DFC40(void); -s32 Camera_GetInputDirYaw(Camera* camera); -void Camera_GetCamDir(Vec3s* dst, Camera* camera); +s32 Camera_ChangeActorCsCamIndex(Camera* camera, s32 bgCamIndex); +Vec3s* Camera_GetInputDir(Vec3s* dst, Camera* camera); +s16 Camera_GetInputDirPitch(Camera* camera); +s16 Camera_GetInputDirYaw(Camera* camera); +Vec3s* Camera_GetCamDir(Vec3s* dst, Camera* camera); s16 Camera_GetCamDirPitch(Camera* camera); s16 Camera_GetCamDirYaw(Camera* camera); -void Camera_AddQuake(Camera* camera, s32 arg1, s16 y, s32 countdown); +s32 Camera_AddQuake(Camera* camera, s32 arg1, s16 y, s32 countdown); s32 Camera_SetViewParam(Camera* camera, s32 viewFlag, void* param); -// UNK_TYPE4 func_800DFEF0(s32 param_1, u16 param_2); -void func_800DFF18(Camera* camera, s32 arg1); -// UNK_TYPE4 func_800DFF34(s32 param_1); -// UNK_TYPE4 func_800DFF44(void); -s16 Camera_SetFlags(Camera* iParm1, s16 flags); -s16 Camera_ClearFlags(Camera* camera, s16 flags); +s32 Camera_UnsetViewFlag(Camera* camera, s16 viewFlag); +s32 Camera_OverwriteStateFlags(Camera* camera, s16 stateFlags); +s16 Camera_SetStateFlag(Camera* camera, s16 flags); +s16 Camera_UnsetStateFlag(Camera* camera, s16 flags); s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamIndex, f32 arg3, s16 timer1, s16 timer2, s16 timer3); -s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera); -// UNK_TYPE4 func_800E01AC(void); +s32 Camera_Copy(Camera* dstCam, Camera* srcCam); +s32 Camera_IsDbgCamEnabled(void); Vec3f* Camera_GetQuakeOffset(Vec3f* quakeOffset, Camera* camera); -// void func_800E01DC(s32 param_1, u32 param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); -// UNK_TYPE4 func_800E0228(void); -void func_800E0238(Camera* camera); -void Camera_SetToTrackActor(Camera* camera, Actor* actor); +void Camera_SetCameraData(Camera* camera, s16 setDataFlags, void* data0, void* data1, s16 data2, s16 data3); +s32 Camera_GetNegOne(void); +s16 func_800E0238(Camera* camera); +void Camera_SetFocalActor(Camera* camera, Actor* actor); void Camera_SetTargetActor(Camera* camera, Actor* actor); f32 Camera_GetWaterYPos(Camera* camera); void func_800E0348(Camera* camera); @@ -2191,8 +2189,8 @@ f32 randPlusMinusPoint5Scaled(f32 scale); f32 Math3D_Normalize(Vec3f* vec); s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB, Vec3f* closestPoint); s32 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6); -// void func_80179A44(void); -void func_80179B34(float fParm1, f32 fParm2, f32 fParm5, f32 fParm6, f32 param_5, f32 param_6, f32 param_7, float* param_8, float* param_9); +void func_80179A44(Vec3f* arg0, PosRot* arg1, Vec3f* arg2); +void func_80179B34(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32* arg7, f32* arg8); // UNK_TYPE4 func_80179B94(f32 fParm1, f32 fParm2, f32 fParm5, f32 param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, Vec3f* param_9); // void func_80179D74(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, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); void Math3D_ScaleAndAdd(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dst); diff --git a/include/variables.h b/include/variables.h index a78bdcb13..f540107b3 100644 --- a/include/variables.h +++ b/include/variables.h @@ -384,23 +384,6 @@ extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[]; extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; // extern UNK_TYPE1 D_801B4708; -// extern UNK_TYPE4 D_801B9E0C; -// extern UNK_TYPE4 D_801B9E10; -// extern UNK_TYPE4 D_801B9E14; -// extern UNK_TYPE2 D_801B9E18; -// extern UNK_TYPE2 D_801B9E34; -// extern UNK_TYPE4 D_801B9E50; -// extern UNK_TYPE4 D_801B9E54; -// extern UNK_TYPE4 D_801B9E58; -// extern UNK_TYPE4 D_801B9E5C; -// extern UNK_TYPE4 D_801B9E60; -// extern UNK_TYPE1 D_801B9E64; -// extern UNK_TYPE1 D_801B9E84; -// extern UNK_TYPE4 D_801B9EB4; -// extern UNK_TYPE4 D_801B9ED4; -// extern UNK_TYPE4 sEarthquakeFreq; -// extern UNK_TYPE2 sEarthquakeTimer; -extern UNK_TYPE4 D_801B9F10; extern DamageTable sDamageTablePresets[23]; extern f32 damageMultipliers[16]; extern Collider defaultCollider; @@ -2240,7 +2223,7 @@ extern f32 D_801ED8D0; // extern UNK_TYPE1 D_801ED8D8; // extern UNK_TYPE1 D_801ED8DC; extern Mtx D_801ED8E0; -// extern UNK_TYPE1 D_801ED920; +extern Actor* D_801ED920; extern FaultClient sActorOverlayTableFaultClient; extern FaultAddrConvClient sActorOverlayTableFaultAddrConvClient; extern char D_801ED950[80]; @@ -2256,20 +2239,6 @@ extern Vec3f D_801EDB70[3]; extern Plane D_801EDB98; extern Sphere16 D_801EDBA8; extern TriNorm D_801EDBB0; -// extern UNK_TYPE1 D_801EDBD4; -// extern UNK_TYPE1 D_801EDBD8; -// extern UNK_TYPE1 D_801EDBDC; -// extern UNK_TYPE1 D_801EDBE0; - -// extern s16 D_801EDBF0; -// extern f32 D_801EDBF4; -// extern f32 D_801EDBF8; -// extern CameraCollision D_801EDC00; -// extern PlayState* sCamPlayState; -// extern SwingAnimation D_801EDC30[4]; -// extern Vec3f D_801EDDD0; -// extern Vec3f D_801EDDE0; -// extern Vec3f D_801EDDF0; extern Vec3f D_801EDE00; extern Vec3f D_801EDE10; diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h index a5effefca..91a892e03 100644 --- a/include/z64bgcheck.h +++ b/include/z64bgcheck.h @@ -255,7 +255,7 @@ typedef struct { /* 0x14 */ u16 numPolygons; /* 0x18 */ CollisionPoly* polyList; /* 0x1C */ SurfaceType* surfaceTypeList; - /* 0x20 */ CamData* bgCamList; + /* 0x20 */ BgCamInfo* bgCamList; /* 0x24 */ u16 numWaterBoxes; /* 0x28 */ WaterBox* waterBoxes; } CollisionHeader; // size = 0x2C diff --git a/include/z64camera.h b/include/z64camera.h index d0a3ac1ce..54cf748ac 100644 --- a/include/z64camera.h +++ b/include/z64camera.h @@ -90,18 +90,18 @@ #define CAM_BEHAVIOR_SETTING_2 (1 << 4) // Mode (0x2, 0x20) #define CAM_BEHAVIOR_MODE_1 (1 << 1) -#define CAM_BEHAVIOR_MODE_2 (1 << 5) +#define CAM_BEHAVIOR_MODE_VALID (1 << 5) // bgCam (0x4, 0x40) #define CAM_BEHAVIOR_BGCAM_1 (1 << 2) #define CAM_BEHAVIOR_BGCAM_2 (1 << 6) // Camera stateFlags. Variety of generic flags #define CAM_STATE_0 (1 << 0) // Must be set for the camera from changing settings based on the bg surface -#define CAM_STATE_1 (1 << 1) +#define CAM_STATE_CHECK_WATER (1 << 1) #define CAM_STATE_2 (1 << 2) #define CAM_STATE_3 (1 << 3) #define CAM_STATE_4 (1 << 4) -#define CAM_STATE_5 (1 << 5) +#define CAM_STATE_DISABLE_MODE_CHANGE (1 << 5) #define CAM_STATE_6 (1 << 6) #define CAM_STATE_7 (1 << 7) #define CAM_STATE_UNDERWATER (1 << 8) @@ -110,7 +110,7 @@ #define CAM_STATE_11 (1 << 11) #define CAM_STATE_12 (1 << 12) #define CAM_STATE_13 (1 << 13) -#define CAM_STATE_14 (1 << 14) +#define CAM_STATE_INITIALIZED (1 << 14) #define CAM_STATE_15 ((s16)(1 << 15)) // Camera viewFlags. Set params related to view @@ -340,13 +340,13 @@ typedef enum { } CameraFuncType; typedef enum { - /* 0x00 */ CAM_DATA_00, + /* 0x00 */ CAM_DATA_Y_OFFSET, /* 0x01 */ CAM_DATA_01, /* 0x02 */ CAM_DATA_02, - /* 0x03 */ CAM_DATA_03, + /* 0x03 */ CAM_DATA_PITCH_TARGET, /* 0x04 */ CAM_DATA_04, /* 0x05 */ CAM_DATA_05, - /* 0x06 */ CAM_DATA_06, + /* 0x06 */ CAM_DATA_YAW_DIFF_RANGE, /* 0x07 */ CAM_DATA_FOV, /* 0x08 */ CAM_DATA_08, /* 0x09 */ CAM_DATA_INTERFACE_FLAGS, @@ -405,13 +405,13 @@ typedef struct { */ #define CAM_FUNCDATA_NORM1(yOffset, data01, data02, pitchTarget, eyeStepScale, posStepScale, yawDiffRange, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { eyeStepScale, CAM_DATA_04 }, \ { posStepScale, CAM_DATA_05 }, \ - { yawDiffRange, CAM_DATA_06 }, \ + { yawDiffRange, CAM_DATA_YAW_DIFF_RANGE }, \ { fov, CAM_DATA_FOV }, \ { data08, CAM_DATA_08 }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -462,10 +462,10 @@ typedef struct { // Unused Camera RemoteBomb Setting #define CAM_FUNCDATA_NORM2(yOffset, data01, data02, pitchTarget, data04, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { data04, CAM_DATA_04 }, \ { fov, CAM_DATA_FOV }, \ { data08, CAM_DATA_08 }, \ @@ -480,10 +480,10 @@ typedef struct { */ #define CAM_FUNCDATA_NORM3(yOffset, data01, data02, pitchTarget, eyeStepScale, posStepScale, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { eyeStepScale, CAM_DATA_04 }, \ { posStepScale, CAM_DATA_05 }, \ { fov, CAM_DATA_FOV }, \ @@ -530,12 +530,12 @@ typedef struct { */ #define CAM_FUNCDATA_NORM0(yOffset, data01, data02, data21, data04, yawDiffRange, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data21, CAM_DATA_21 }, \ { data04, CAM_DATA_04 }, \ - { yawDiffRange, CAM_DATA_06 }, \ + { yawDiffRange, CAM_DATA_YAW_DIFF_RANGE }, \ { fov, CAM_DATA_FOV }, \ { data08, CAM_DATA_08 }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -581,10 +581,10 @@ typedef struct { */ #define CAM_FUNCDATA_PARA1(yOffset, data01, data02, pitchTarget, data10, data04, data05, fov, data08, interfaceFlags, data11, data12) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { data10, CAM_DATA_10 }, \ { data04, CAM_DATA_04 }, \ { data05, CAM_DATA_05 }, \ @@ -596,10 +596,10 @@ typedef struct { // Same as above but with extra unused entry #define CAM_FUNCDATA_PARA1_ALT(yOffset, data01, data02, pitchTarget, data10, data04, data05, fov, data08, interfaceFlags, data11, data12, data18) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { data10, CAM_DATA_10 }, \ { data04, CAM_DATA_04 }, \ { data05, CAM_DATA_05 }, \ @@ -662,10 +662,10 @@ typedef struct { // Unused Camera Maze Setting #define CAM_FUNCDATA_PARA2(yOffset, data02, data01, pitchTarget, data04, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data02, CAM_DATA_02 }, \ { data01, CAM_DATA_01 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { data04, CAM_DATA_04 }, \ { fov, CAM_DATA_FOV }, \ { data08, CAM_DATA_08 }, \ @@ -680,7 +680,7 @@ typedef struct { */ #define CAM_FUNCDATA_JUMP2(yOffset, data01, data02, data20, data04, data05, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data20, CAM_DATA_20 }, \ @@ -729,13 +729,13 @@ typedef struct { */ #define CAM_FUNCDATA_JUMP3(yOffset, data01, data02, pitchTarget, data04, data05, yawDiffRange, fov, data08, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { data04, CAM_DATA_04 }, \ { data05, CAM_DATA_05 }, \ - { yawDiffRange, CAM_DATA_06 }, \ + { yawDiffRange, CAM_DATA_YAW_DIFF_RANGE }, \ { fov, CAM_DATA_FOV }, \ { data08, CAM_DATA_08 }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -785,7 +785,7 @@ typedef struct { */ #define CAM_FUNCDATA_BATT1(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, interfaceFlags, data11, data18) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data13, CAM_DATA_13 }, \ @@ -845,7 +845,7 @@ typedef struct { */ #define CAM_FUNCDATA_KEEP1(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, interfaceFlags, data11) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data13, CAM_DATA_13 }, \ @@ -902,7 +902,7 @@ typedef struct { */ #define CAM_FUNCDATA_KEEP3(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, timer, interfaceFlags, data18) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data13, CAM_DATA_13 }, \ @@ -957,9 +957,9 @@ typedef struct { */ #define CAM_FUNCDATA_KEEP4(yOffset, data01, pitchTarget, data10, data18, fov, interfaceFlags, data04, timer) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ - { pitchTarget, CAM_DATA_03 }, \ + { pitchTarget, CAM_DATA_PITCH_TARGET }, \ { data10, CAM_DATA_10 }, \ { data18, CAM_DATA_18 }, \ { fov, CAM_DATA_FOV }, \ @@ -1008,7 +1008,7 @@ typedef struct { */ #define CAM_FUNCDATA_FIXD1(yOffset, data04, fov, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data04, CAM_DATA_04 }, \ { fov, CAM_DATA_FOV }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -1040,7 +1040,7 @@ typedef struct { */ #define CAM_FUNCDATA_FIXD2(yOffset, data01, data02, data04, data05, fov, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data04, CAM_DATA_04 }, \ @@ -1097,7 +1097,7 @@ typedef struct { */ #define CAM_FUNCDATA_SUBJ1(yOffset, data01, data02, data04, data19, data17, data18, fov, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { data02, CAM_DATA_02 }, \ { data04, CAM_DATA_04 }, \ @@ -1140,7 +1140,7 @@ typedef struct { */ #define CAM_FUNCDATA_UNIQ2(yOffset, data01, fov, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data01, CAM_DATA_01 }, \ { fov, CAM_DATA_FOV }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -1175,7 +1175,7 @@ typedef struct { */ #define CAM_FUNCDATA_UNIQ0(yOffset, data04, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { data04, CAM_DATA_04 }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -1387,10 +1387,10 @@ typedef struct { */ #define CAM_FUNCDATA_SPEC5(yOffset, eyeDist, minDistForRot, fov, atMaxLERPScale, timerInit, pitch, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { eyeDist, CAM_DATA_01 }, \ { minDistForRot, CAM_DATA_02 }, \ - { fov, CAM_DATA_03 }, \ + { fov, CAM_DATA_PITCH_TARGET }, \ { atMaxLERPScale, CAM_DATA_FOV }, \ { timerInit, CAM_DATA_08 }, \ { pitch, CAM_DATA_12 }, \ @@ -1446,7 +1446,7 @@ typedef struct { */ #define CAM_FUNCDATA_SPEC8(yOffset, eyeStepScale, posStepScale, fov, spiralDoorCsLength, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { eyeStepScale, CAM_DATA_04 }, \ { posStepScale, CAM_DATA_05 }, \ { fov, CAM_DATA_FOV }, \ @@ -1483,7 +1483,7 @@ typedef struct { */ #define CAM_FUNCDATA_SPEC9(yOffset, fov, interfaceFlags) \ - { yOffset, CAM_DATA_00 }, \ + { yOffset, CAM_DATA_Y_OFFSET }, \ { fov, CAM_DATA_FOV }, \ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS } @@ -1565,11 +1565,11 @@ typedef struct Camera { /* 0x0D8 */ f32 xzSpeed; /* 0x0DC */ f32 dist; /* 0x0E0 */ f32 speedRatio; - /* 0x0E4 */ Vec3f atActorOffset; - /* 0x0F0 */ Vec3f focalActorOffset; + /* 0x0E4 */ Vec3f focalActorAtOffset; // Offset between the camera's at Pos and the focalActor's Pos + /* 0x0F0 */ Vec3f unk_0F0; // Offset between the focalActor's Pos and the camera's focalActor's Pos from the previous frame /* 0x0FC */ f32 fov; /* 0x100 */ f32 atLerpStepScale; - /* 0x104 */ f32 playerFloorHeight; + /* 0x104 */ f32 focalActorFloorHeight; /* 0x108 */ Vec3f floorNorm; /* 0x114 */ f32 waterYPos; /* 0x118 */ s32 waterPrevBgCamDataId; @@ -1588,11 +1588,11 @@ typedef struct Camera { /* 0x142 */ s16 setting; /* 0x144 */ s16 mode; /* 0x146 */ s16 bgId; - /* 0x148 */ s16 bgCamDataId; + /* 0x148 */ s16 bgCamIndex; /* 0x14A */ s16 behaviorFlags; /* 0x14C */ s16 stateFlags; /* 0x14E */ s16 childCamId; - /* 0x150 */ s16 doorTimer1; // a door timer used when door cam is indexed from bgCamDataId + /* 0x150 */ s16 doorTimer1; // a door timer used when door cam is indexed from bgCamIndex /* 0x152 */ s16 unk152; /* 0x154 */ s16 prevSetting; /* 0x156 */ s16 nextCamSceneDataId; @@ -1600,8 +1600,8 @@ typedef struct Camera { /* 0x15A */ s16 roll; /* 0x15C */ s16 viewFlags; /* 0x15E */ s16 animState; // Determines the current state of the current camera behavior function - /* 0x160 */ s16 unk160; - /* 0x162 */ s16 doorTimer2; // a door timer used when door cam is indexed from bgCamDataId + /* 0x160 */ s16 timer; // Unused remnant of OoT: originally destoryed subCamera when timer ran out + /* 0x162 */ s16 doorTimer2; // a door timer used when door cam is indexed from bgCamIndex /* 0x164 */ s16 camId; /* 0x166 */ s16 prevBgCamDataId; /* 0x168 */ s16 unk168; diff --git a/include/z64player.h b/include/z64player.h index 54894893f..3bcc53fde 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -677,7 +677,7 @@ typedef enum PlayerCsMode { #define PLAYER_STATE1_1 (1 << 0) // #define PLAYER_STATE1_2 (1 << 1) -// +// Climbing ledge #define PLAYER_STATE1_4 (1 << 2) // #define PLAYER_STATE1_8 (1 << 3) @@ -697,7 +697,7 @@ typedef enum PlayerCsMode { #define PLAYER_STATE1_400 (1 << 10) // #define PLAYER_STATE1_800 (1 << 11) -// +// charging spin attack #define PLAYER_STATE1_1000 (1 << 12) // #define PLAYER_STATE1_2000 (1 << 13) @@ -731,7 +731,7 @@ typedef enum PlayerCsMode { #define PLAYER_STATE1_8000000 (1 << 27) // #define PLAYER_STATE1_10000000 (1 << 28) -// +// Time is stopped but Link & NPC animations continue #define PLAYER_STATE1_20000000 (1 << 29) // #define PLAYER_STATE1_40000000 (1 << 30) @@ -761,7 +761,7 @@ typedef enum PlayerCsMode { #define PLAYER_STATE2_200 (1 << 9) // #define PLAYER_STATE2_400 (1 << 10) -// +// Diving #define PLAYER_STATE2_800 (1 << 11) // #define PLAYER_STATE2_1000 (1 << 12) @@ -773,7 +773,7 @@ typedef enum PlayerCsMode { #define PLAYER_STATE2_8000 (1 << 15) // #define PLAYER_STATE2_10000 (1 << 16) -// +// A non-magic spin attack #define PLAYER_STATE2_20000 (1 << 17) // #define PLAYER_STATE2_40000 (1 << 18) @@ -821,7 +821,7 @@ typedef enum PlayerCsMode { #define PLAYER_STATE3_40 (1 << 6) // #define PLAYER_STATE3_80 (1 << 7) -// Related to form Deku +// Deku flower dive #define PLAYER_STATE3_100 (1 << 8) // #define PLAYER_STATE3_200 (1 << 9) diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 6cfd65702..ea600b30e 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -1,22 +1,96 @@ +/** + * @file camera.c + * Implements the camera system. Camera functionality depends on the current combination of + * setting and mode. + * + * When working with the camera, you should be familiar with MM's coordinate system. + * Relative to the camera, the coordinate system follows the right hand rule: + * +X points right. + * +Y points up. + * +Z points out of the screen. + * + * You should also be familiar with Euler angles: 'pitch', 'yaw', and 'roll'. + * pitch: rotation about the X-axis, measured from +Y. + * Unlike yaw and roll, pitch is bounded in +-0x4000 (90 degrees). + * Pitch is 0 when the camera points parallel to the xz-plane (+Y points straight up). + * + * yaw: rotation about the Y-axis, measured from (absolute) +Z. + * Positive yaw rotates clockwise, towards +X. + * + * roll: rotation about the Z-axis, measured from the camera's right direction. + * Unfortunately, it's weird: For some reason, roll is flipped. Positive roll makes the camera + * rotate counterclockwise, which means the WORLD rotates clockwise. Luckily roll is rarely + * used. + * + * Remember the right hand rule: make a thumbs-up with your right hand, stick your thumb in the + * +direction (except for roll), and the angle follows the rotation of your curled fingers. + * + * Illustrations: + * Following the right hand rule, each hidden axis's positive direction points out of the screen. + * + * YZ-Plane (pitch) XZ-Plane (yaw) XY-Plane (roll -- Note flipped) + * +Y -Z +Y + * ^ ^ (into the ^ + * --|-- | screen) |<- + * +pitch / | \ -pitch | | \ -roll + * v | v | | | + * +Z <------O------> -Z -X <------O------> +X -X <------O------> +X + * | ^ | ^ | | + * | \ | / | / +roll + * | -yaw --|-- +yaw |<- + * v v v + * -Y +Z -Y + * + */ #include "global.h" #include "z64quake.h" #include "z64shrink_window.h" #include "z64view.h" +#include "overlays/actors/ovl_En_Horse/z_en_horse.h" + +void func_800DDFE0(Camera* camera); +s32 Camera_ChangeMode(Camera* camera, s16 mode); +s16 Camera_ChangeSettingFlags(Camera* camera, s16 setting, s16 flags); +s16 Camera_UnsetStateFlag(Camera* camera, s16 flags); #include "z_camera_data.inc.c" -// BSS -s16 D_801EDBF0; -f32 D_801EDBF4; -f32 D_801EDBF8; -CameraCollision D_801EDC00; - PlayState* sCamPlayState; SwingAnimation D_801EDC30[4]; Vec3f D_801EDDD0; Vec3f D_801EDDE0; Vec3f D_801EDDF0; +// Camera will reload its paramData. Usually that means setting the read-only data from what is stored in +// CameraModeValue arrays. Although sometimes some read-write data is reset as well +#define RELOAD_PARAMS(camera) ((camera->animState == 0) || (camera->animState == 10) || (camera->animState == 20)) + +/** + * Camera data is stored in both read-only data and OREG as s16, and then converted to the appropriate type during + * runtime. If a small f32 is being stored as an s16, it is common to store that value 100 times larger than the + * original value. This is then scaled back down during runtime with the CAM_RODATA_UNSCALE macro. + */ +#define CAM_RODATA_SCALE(x) ((x)*100.0f) +#define CAM_RODATA_UNSCALE(x) ((x)*0.01f) + +// Load the next value from camera read-only data stored in CameraModeValue +#define GET_NEXT_RO_DATA(values) ((values++)->val) +// Load the next value and scale down from camera read-only data stored in CameraModeValue +#define GET_NEXT_SCALED_RO_DATA(values) CAM_RODATA_UNSCALE(GET_NEXT_RO_DATA(values)) + +// Camera bg surface flags +#define FLG_ADJSLOPE (1 << 0) +#define FLG_OFFGROUND (1 << 7) + +#define CAM_CHANGE_SETTING_0 (1 << 0) +#define CAM_CHANGE_SETTING_1 (1 << 1) +#define CAM_CHANGE_SETTING_2 (1 << 2) +#define CAM_CHANGE_SETTING_3 (1 << 3) + +/*===============================================================*/ +/* Camera Internal Functions */ +/*===============================================================*/ + /** * Returns the absolute value for floats */ @@ -81,47 +155,63 @@ f32 Camera_QuadraticAttenuation(f32 xRange, f32 x) { return y; } -/* - * Performs linear interpoloation between `cur` and `target`. If `cur` is within - * `minDiff` units, the result is rounded up to `target` +/** + * @param[in] target target value + * @param[in] cur current value + * @param[in] stepScale fraction of (target - cur) to step towards target + * @param[in] minDiff minimum value of (target - cur) perform a step. Otherwise, return `target` + * + * @return new current value */ -f32 Camera_LerpCeilF(f32 target, f32 cur, f32 stepScale, f32 minDiff) { +f32 Camera_ScaledStepToCeilF(f32 target, f32 cur, f32 stepScale, f32 minDiff) { f32 diff = target - cur; f32 step = diff * stepScale; return (Camera_fabsf(diff) >= minDiff) ? cur + step : target; } -/* - * Performs linear interpoloation between `cur` and `target`. If `cur` is within - * `minDiff` units, the result is rounded up to `target` +/** + * @param[in] target target value + * @param[in] cur current value + * @param[in] stepScale fraction of (target - cur) to step towards target + * @param[in] minDiff minimum value of (target - cur) perform a step. Otherwise, return `target` + * + * @return new current value */ -s16 Camera_LerpCeilS(s16 target, s16 cur, f32 stepScale, s16 minDiff) { +s16 Camera_ScaledStepToCeilS(s16 target, s16 cur, f32 stepScale, s16 minDiff) { s16 diff = target - cur; s16 step = diff * stepScale + 0.5f; return (ABS(diff) >= minDiff) ? cur + step : target; } -/* - * Performs linear interpoloation between `cur` and `target`. If `cur` is within - * `minDiff` units, the result is rounded down to `cur` +/** + * @param[in] target target value + * @param[in] cur current value + * @param[in] stepScale fraction of (target - cur) to step towards target + * @param[in] minDiff minimum value of (target - cur) perform a step. Otherwise, return `current` + * + * @return new current value */ -s16 Camera_LerpFloorS(s16 target, s16 cur, f32 stepScale, s16 minDiff) { +s16 Camera_ScaledStepToFloorS(s16 target, s16 cur, f32 stepScale, s16 minDiff) { s16 diff = target - cur; s16 step = diff * stepScale + 0.5f; return (ABS(diff) >= minDiff) ? cur + step : cur; } -/* - * Performs linear interpoloation between `cur` and `target`. If `cur` is within - * `minDiff` units, the result is rounded up to `target`. Output is written to `cur` +/** + * @param[in] target target value + * @param[in] cur current value + * @param[in] stepScale fraction of (target - cur) to step towards target + * @param[in] minDiff minimum value of (target - cur) perform a step. Otherwise, return `target` + * + * @return new current value */ -void Camera_LerpCeilVec3f(Vec3f* target, Vec3f* cur, f32 xzStepScale, f32 yStepScale, f32 minDiff) { - cur->x = Camera_LerpCeilF(target->x, cur->x, xzStepScale, minDiff); - cur->y = Camera_LerpCeilF(target->y, cur->y, yStepScale, minDiff); - cur->z = Camera_LerpCeilF(target->z, cur->z, xzStepScale, minDiff); +void Camera_ScaledStepToCeilVec3f(Vec3f* target, Vec3f* cur, f32 xzStepScale, f32 yStepScale, f32 minDiff) { + cur->x = Camera_ScaledStepToCeilF(target->x, cur->x, xzStepScale, minDiff); + cur->y = Camera_ScaledStepToCeilF(target->y, cur->y, yStepScale, minDiff); + cur->z = Camera_ScaledStepToCeilF(target->z, cur->z, xzStepScale, minDiff); } void Camera_SetUpdateRatesFastPitch(Camera* camera) { @@ -149,14 +239,11 @@ void Camera_SetUpdateRatesSlow(Camera* camera) { camera->rUpdateRateInv = 1800.0f; camera->yawUpdateRateInv = 1800.0f; camera->pitchUpdateRateInv = 1800.0f; - camera->yOffsetUpdateRate = 0.01; - camera->xzOffsetUpdateRate = 0.01; - camera->fovUpdateRate = 0.01; + camera->yOffsetUpdateRate = 0.01f; + camera->xzOffsetUpdateRate = 0.01f; + camera->fovUpdateRate = 0.01f; } -/** - * Converts a 3D s16 vector into a 3D f32 vector - */ Vec3f* Camera_Vec3sToVec3f(Vec3f* dest, Vec3s* src) { Vec3f copy; @@ -176,29 +263,29 @@ s16 Camera_AngleDiffAndScale(s16 angle1, s16 angle2, f32 scale) { } /** - * Calculates the current offset between the camera's at-coordinates and the centered actor's coordinates + * Calculates the current offset between the camera's at-coordinates and the focal actors coordinates */ -void Camera_UpdateAtActorOffset(Camera* camera, Vec3f* actorOffset) { - camera->atActorOffset.x = camera->at.x - actorOffset->x; - camera->atActorOffset.y = camera->at.y - actorOffset->y; - camera->atActorOffset.z = camera->at.z - actorOffset->z; +void Camera_SetFocalActorAtOffset(Camera* camera, Vec3f* focalActorPos) { + camera->focalActorAtOffset.x = camera->at.x - focalActorPos->x; + camera->focalActorAtOffset.y = camera->at.y - focalActorPos->y; + camera->focalActorAtOffset.z = camera->at.z - focalActorPos->z; } f32 Camera_GetFocalActorHeight(Camera* camera) { - PosRot actorFocus; + PosRot focalActorFocus; Actor* focalActor = camera->focalActor; - f32 focalHeight; + f32 focalActorHeight; if (focalActor == &GET_PLAYER(camera->play)->actor) { - focalHeight = Player_GetHeight((Player*)focalActor); + focalActorHeight = Player_GetHeight((Player*)focalActor); } else { - Actor_GetFocus(&actorFocus, focalActor); - focalHeight = actorFocus.pos.y - camera->focalActorPosRot.pos.y; - if (focalHeight == 0.0f) { - focalHeight = 10.0f; + Actor_GetFocus(&focalActorFocus, focalActor); + focalActorHeight = focalActorFocus.pos.y - camera->focalActorPosRot.pos.y; + if (focalActorHeight == 0.0f) { + focalActorHeight = 10.0f; } } - return focalHeight; + return focalActorHeight; } f32 Camera_GetRunSpeedLimit(Camera* camera) { @@ -223,6 +310,7 @@ s32 func_800CB7CC(Camera* camera) { return 0; } } + s32 Camera_IsMountedOnHorse(Camera* camera) { Actor* focalActor = camera->focalActor; @@ -310,7 +398,7 @@ s32 func_800CB950(Camera* camera) { f32 yDiff; if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { - yDiff = Camera_fabsf(camera->focalActorPosRot.pos.y - camera->playerFloorHeight); + yDiff = Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight); phi_v0 = false; if (yDiff < 11.0f) { @@ -444,7 +532,7 @@ s32 Camera_IsUsingZoraFins(Camera* camera) { } s32 func_800CBC30(Camera* camera, f32 waterYMax, f32 waterYMin) { - if ((camera->playerFloorHeight != camera->waterYPos) && (camera->waterYPos < waterYMax) && + if ((camera->focalActorFloorHeight != camera->waterYPos) && (camera->waterYPos < waterYMax) && (camera->waterYPos > waterYMin)) { return true; } else { @@ -452,23 +540,258 @@ s32 func_800CBC30(Camera* camera, f32 waterYMax, f32 waterYMin) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CBC84.s") +s32 func_800CBC84(Camera* camera, Vec3f* from, CameraCollision* to, s32 arg3) { + CollisionContext* colCtx = &camera->play->colCtx; + Vec3f toNewPos; + Vec3f toPoint; + Vec3f fromToNorm; + f32 floorPolyY; + CollisionPoly** floorPoly; + s32 floorBgId; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CBFA4.s") + OLib_Vec3fDistNormalize(&fromToNorm, from, &to->pos); + toPoint.x = to->pos.x + fromToNorm.x; + toPoint.y = to->pos.y + fromToNorm.y; + toPoint.z = to->pos.z + fromToNorm.z; + floorPoly = &to->poly; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC000.s") + if (!BgCheck_CameraLineTest1(colCtx, from, &toPoint, &toNewPos, floorPoly, (arg3 & 1) ? 0 : 1, 1, + (arg3 & 2) ? 0 : 1, -1, &floorBgId)) { + toNewPos = to->pos; + //! FAKE + if (1) {} + if (1) {} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC128.s") + toNewPos.y += 5.0f; + if ((arg3 != 0) && func_800CB7CC(camera)) { + to->poly = camera->focalActor->floorPoly; + floorBgId = camera->focalActor->floorBgId; + to->norm.x = COLPOLY_GET_NORMAL(to->poly->normal.x); + to->norm.y = COLPOLY_GET_NORMAL(to->poly->normal.y); + to->norm.z = COLPOLY_GET_NORMAL(to->poly->normal.z); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC1C4.s") + if (!Math3D_LineSegVsPlane(to->norm.x, to->norm.y, to->norm.z, to->poly->dist, from, &toPoint, &toNewPos, + 1)) { + floorPolyY = to->pos.y - 20.0f; + } else { + toNewPos.y += 5.0f; + floorPolyY = to->pos.y; + } + } else { + floorPolyY = BgCheck_CameraRaycastFloor2(colCtx, floorPoly, &floorBgId, &toNewPos); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC260.s") + if ((to->pos.y - floorPolyY) > 5.0f) { + to->norm.x = -fromToNorm.x; + to->norm.y = -fromToNorm.y; + to->norm.z = -fromToNorm.z; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC488.s") + return 0; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC56C.s") + to->bgId = floorBgId; + to->norm.x = COLPOLY_GET_NORMAL(to->poly->normal.x); + to->norm.y = COLPOLY_GET_NORMAL(to->poly->normal.y); + to->norm.z = COLPOLY_GET_NORMAL(to->poly->normal.z); + to->pos.x = to->norm.x + toNewPos.x; + to->pos.y = to->norm.y + toNewPos.y; + to->pos.z = to->norm.z + toNewPos.z; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC5C8.s") + return floorBgId + 1; +} + +void func_800CBFA4(Camera* camera, Vec3f* arg1, Vec3f* arg2, s32 arg3) { + CameraCollision sp20; + s32 pad; + + sp20.pos = *arg2; + func_800CBC84(camera, arg1, &sp20, arg3); + *arg2 = sp20.pos; +} + +/** + * Detects the collision poly between `from` and `to`, places collision info in `to` + */ +s32 Camera_BgCheckInfo(Camera* camera, Vec3f* from, CameraCollision* to) { + CollisionPoly* floorPoly; + Vec3f toNewPos; + Vec3f fromToNorm; + + if (BgCheck_CameraLineTest1(&camera->play->colCtx, from, &to->pos, &toNewPos, &to->poly, 1, 1, 1, -1, &to->bgId)) { + floorPoly = to->poly; + to->norm.x = COLPOLY_GET_NORMAL(floorPoly->normal.x); + to->norm.y = COLPOLY_GET_NORMAL(floorPoly->normal.y); + to->norm.z = COLPOLY_GET_NORMAL(floorPoly->normal.z); + to->pos = toNewPos; + + return to->bgId + 1; + } + + OLib_Vec3fDistNormalize(&fromToNorm, from, &to->pos); + to->norm.x = -fromToNorm.x; + to->norm.y = -fromToNorm.y; + to->norm.z = -fromToNorm.z; + + return 0; +} + +/** + * Detects if there is collision between `from` and `to` + */ +s32 Camera_BgCheck(Camera* camera, Vec3f* from, Vec3f* to) { + CollisionContext* colCtx = &camera->play->colCtx; + Vec3f intersect; + s32 bgId; + CollisionPoly* poly = NULL; + + if (BgCheck_CameraLineTest1(colCtx, from, to, &intersect, &poly, 1, 1, 1, -1, &bgId)) { + *to = intersect; + return true; + } + + return false; +} + +/** + * Checks if `from` to `to` is looking from the outside of a poly towards the front + */ +s32 Camera_CheckOOB(Camera* camera, Vec3f* from, Vec3f* to) { + s32 pad; + Vec3f intersect; + s32 pad2; + s32 bgId; + CollisionPoly* poly; + CollisionContext* colCtx = &camera->play->colCtx; + + poly = NULL; + if ((BgCheck_CameraLineTest1(colCtx, from, to, &intersect, &poly, 1, 1, 1, 0, &bgId)) && + (CollisionPoly_GetPointDistanceFromPlane(poly, from) < 0.0f)) { + return true; + } + + return false; +} + +s16 func_800CC260(Camera* camera, Vec3f* arg1, Vec3f* arg2, VecGeo* arg3, Actor** exclusions, s16 numExclusions) { + VecGeo sp90; + s32 ret; + s32 angleCount; + f32 rand; + PosRot playerFocus; + Vec3f sp64; + Player* player = GET_PLAYER(camera->play); + s32 i; + + sp64 = *arg2; + Actor_GetFocus(&playerFocus, &player->actor); // playerFocus unused + sp90 = *arg3; + + angleCount = ARRAY_COUNT(D_801B9E18); + + for (i = 0; i < angleCount; i++) { + OLib_AddVecGeoToVec3f(arg1, arg2, &sp90); + + if (!Camera_CheckOOB(camera, arg1, &sp64) && !func_800CBC30(camera, arg2->y, arg1->y) && + !CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, arg2, arg1, exclusions, + numExclusions)) { + break; + } + + sp90.yaw = D_801B9E18[i] + arg3->yaw; + rand = Rand_ZeroOne(); + sp90.pitch = D_801B9E34[i] + (s16)(arg3->pitch * rand); + + if (sp90.pitch > 0x36B0) { // 76.9 degrees + sp90.pitch -= 0x3E80; // -87.9 degrees + } + if (sp90.pitch < -0x36B0) { // -76.9 degrees + sp90.pitch += 0x3A98; // 82.4 degrees + } + + sp90.r *= 0.9f; + sp64 = *arg2; + } + + *arg3 = sp90; + + if (i == angleCount) { + ret = -1; + } else { + ret = i; + } + + return ret; +} + +/** + * Gets the floor position underneath `chkPos`, and returns the normal of the floor to `floorNorm`, + * and bgId to `bgId`. If no floor is found, then the normal is a flat surface pointing upwards. + */ +f32 Camera_GetFloorYNorm(Camera* camera, Vec3f* floorNorm, Vec3f* chkPos, s32* bgId) { + CollisionContext* colCtx = &camera->play->colCtx; + CollisionPoly* floorPoly; + f32 floorY = BgCheck_EntityRaycastFloor3(colCtx, &floorPoly, bgId, chkPos); + + if (floorY == BGCHECK_Y_MIN) { + // no floor + floorNorm->x = 0.0f; + floorNorm->y = 1.0f; + floorNorm->z = 0.0f; + } else { + floorNorm->x = COLPOLY_GET_NORMAL(floorPoly->normal.x); + floorNorm->y = COLPOLY_GET_NORMAL(floorPoly->normal.y); + floorNorm->z = COLPOLY_GET_NORMAL(floorPoly->normal.z); + } + + return floorY; +} + +/** + * Gets the position of the floor from `pos` + */ +f32 Camera_GetFloorY(Camera* camera, Vec3f* pos) { + Vec3f posCheck; + Vec3f floorNorm; + s32 bgId; + + posCheck = *pos; + posCheck.y += 80.0f; + + return Camera_GetFloorYNorm(camera, &floorNorm, &posCheck, &bgId); +} + +/** + * Gets the position of the floor from `pos`, and if the floor is considered not solid, + * it checks the next floor below that. Returns the normal of the floor into `norm` + */ +f32 Camera_GetFloorYLayer(Camera* camera, Vec3f* norm, Vec3f* pos, s32* bgId) { + CollisionPoly* floorPoly; + CollisionContext* colCtx = &camera->play->colCtx; + f32 floorY; + + if (camera->focalActor != NULL) { + floorY = BgCheck_EntityRaycastFloor5_3(camera->play, &camera->play->colCtx, &floorPoly, bgId, + camera->focalActor, pos); + } else { + floorY = BgCheck_CameraRaycastFloor2(colCtx, &floorPoly, bgId, pos); + } + + if ((floorY == BGCHECK_Y_MIN) || + ((camera->focalActorFloorHeight < floorY) && !(COLPOLY_GET_NORMAL(floorPoly->normal.y) > 0.5f))) { + // no floor, or player is below the floor and floor is not considered steep + norm->x = 0.0f; + norm->y = 1.0f; + norm->z = 0.0f; + floorY = BGCHECK_Y_MIN; + } else { + norm->x = COLPOLY_GET_NORMAL(floorPoly->normal.x); + norm->y = COLPOLY_GET_NORMAL(floorPoly->normal.y); + norm->z = COLPOLY_GET_NORMAL(floorPoly->normal.z); + } + + return floorY; +} #define CAM_DATA_IS_BG (1 << 12) // if not set, then cam data is for actor cutscenes @@ -543,160 +866,5084 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) { return (camSetting == CAM_SET_NONE) ? -2 : camSetting; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC938.s") +void func_800CC938(Camera* camera) { + func_800DDFE0(camera); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC958.s") +/** + * Calculates the angle between points `from` and `to` + */ +s16 Camera_CalcXZAngle(Vec3f* to, Vec3f* from) { + return CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(from->x - to->x, from->z - to->z))); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC9C0.s") +// BSS +s16 D_801EDBF0; -s32 D_801B9E5C = 0; -f32 D_801B9E60 = 0.0f; +/** + * Calculates a pitch adjustment by sampling a position in front of the focal actor and testing the floor height. + * Used to detect if the focal actor is near a slope, edge, or cliff. + * + * @param camera + * @param viewYaw The yaw the camera is facing, gives a direction to sample a position + * @param shouldInit + * + * @return pitchOffset resulting pitch adjustment + */ +s16 Camera_GetPitchAdjFromFloorHeightDiffs(Camera* camera, s16 viewYaw, s16 shouldInit) { + static f32 sFloorYNear; + static f32 sFloorYFar; + static CameraCollision sFarColChk; + Vec3f focalActorPos; + Vec3f nearPos; + Vec3f floorNorm; + f32 checkOffsetY; + s16 pitchNear; + s16 pitchFar; + f32 floorYDiffFar; + f32 viewForwardsUnitX; + f32 viewForwardsUnitZ; + s32 bgId; + f32 nearDist; + f32 farDist; + f32 floorYDiffNear; + f32 focalActorHeight; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CCCEC.s") + viewForwardsUnitX = Math_SinS(viewYaw); + viewForwardsUnitZ = Math_CosS(viewYaw); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD04C.s") + focalActorHeight = Camera_GetFocalActorHeight(camera); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD288.s") + checkOffsetY = focalActorHeight * 1.2f; + nearDist = focalActorHeight * 1.0f; + farDist = focalActorHeight * 2.5f; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD2E0.s") + focalActorPos.x = camera->focalActorPosRot.pos.x; + focalActorPos.y = camera->focalActorFloorHeight + checkOffsetY; + focalActorPos.z = camera->focalActorPosRot.pos.z; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD2F0.s") + nearPos.x = focalActorPos.x + (nearDist * viewForwardsUnitX); + nearPos.y = focalActorPos.y; + nearPos.z = focalActorPos.z + (nearDist * viewForwardsUnitZ); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD3E4.s") + if (shouldInit || ((camera->play->state.frames % 2) == 0)) { + sFarColChk.pos.x = focalActorPos.x + (farDist * viewForwardsUnitX); + sFarColChk.pos.y = focalActorPos.y; + sFarColChk.pos.z = focalActorPos.z + (farDist * viewForwardsUnitZ); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD44C.s") + Camera_BgCheckInfo(camera, &focalActorPos, &sFarColChk); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD634.s") + if (shouldInit) { + sFloorYNear = sFloorYFar = camera->focalActorFloorHeight; + } + } else { + farDist = OLib_Vec3fDistXZ(&focalActorPos, &sFarColChk.pos); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD6CC.s") + sFarColChk.pos.x += sFarColChk.norm.x * 5.0f; + sFarColChk.pos.y += sFarColChk.norm.y * 5.0f; + sFarColChk.pos.z += sFarColChk.norm.z * 5.0f; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD6F8.s") + if (nearDist > farDist) { + nearDist = farDist; + sFloorYNear = sFloorYFar = Camera_GetFloorYLayer(camera, &floorNorm, &sFarColChk.pos, &bgId); + } else { + sFloorYNear = Camera_GetFloorYLayer(camera, &floorNorm, &nearPos, &bgId); + sFloorYFar = Camera_GetFloorYLayer(camera, &floorNorm, &sFarColChk.pos, &bgId); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD834.s") + if (sFloorYNear == BGCHECK_Y_MIN) { + sFloorYNear = camera->focalActorFloorHeight; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CDA14.s") + if (sFloorYFar == BGCHECK_Y_MIN) { + sFloorYFar = sFloorYNear; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CDB6C.s") + floorYDiffNear = (sFloorYNear - camera->focalActorFloorHeight) * 0.8f; + floorYDiffFar = (sFloorYFar - camera->focalActorFloorHeight) * (20.0f * 0.01f); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CDE6C.s") + pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffNear, nearDist))); + pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffFar, farDist))); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CE2B8.s") + return pitchNear + pitchFar; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CE5E0.s") +f32 func_800CCCEC(Camera* camera, s16 reset) { + static s32 D_801B9E5C = 0; + static f32 D_801B9E60 = 0.0f; + Vec3f offsetForwards; + Vec3f angledOffsetForwards; + PosRot focalActorPosRot; + CameraCollision camCollision; + f32 forwardsUnitZ; + f32 focalActorHeight; + f32 forwardsUnitX; + f32 distResult; + s16 yawForwardsOffset; + f32 distResultAdj; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CE79C.s") + focalActorHeight = Camera_GetFocalActorHeight(camera); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CE930.s") + if (reset) { + D_801B9E5C = 0; + D_801B9E60 = 0.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CEAD8.s") + focalActorPosRot = camera->focalActorPosRot; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CEC38.s") + forwardsUnitX = Math_SinS(focalActorPosRot.rot.y); + forwardsUnitZ = Math_CosS(focalActorPosRot.rot.y); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CED90.s") + offsetForwards.x = focalActorPosRot.pos.x + (30.0f * forwardsUnitX); + offsetForwards.y = focalActorPosRot.pos.y + focalActorHeight; + offsetForwards.z = focalActorPosRot.pos.z + (30.0f * forwardsUnitZ); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Noop.s") + camCollision.pos.x = focalActorPosRot.pos.x + (12.0f * forwardsUnitX); + camCollision.pos.y = offsetForwards.y; + camCollision.pos.z = focalActorPosRot.pos.z + (12.0f * forwardsUnitZ); + if ((camera->play->state.frames % 2) != 0) { + // Turn and project 65.92 degrees left + yawForwardsOffset = focalActorPosRot.rot.y + DEG_TO_BINANG(65.92f); + + angledOffsetForwards.x = (Math_SinS(yawForwardsOffset) * 50.0f) + offsetForwards.x; + angledOffsetForwards.y = offsetForwards.y; + angledOffsetForwards.z = (Math_CosS(yawForwardsOffset) * 50.0f) + offsetForwards.z; + + if ((Camera_BgCheckInfo(camera, &angledOffsetForwards, &camCollision) != 0) && + Camera_CheckOOB(camera, &offsetForwards, &angledOffsetForwards)) { + // Always going to result in 28.0f? + distResult = OLib_Vec3fDistXZ(&offsetForwards, &camCollision.pos); + + // (-D_801B9E60 < (50.0f - distResult)) + if (!((D_801B9E5C == 2) && (-D_801B9E60 >= (50.0f - distResult)))) { + D_801B9E5C = 1; + distResult = 50.0f - distResult; // 22.0f + D_801B9E60 = distResult; + + // if (distResult == 0.0f) + if (distResult == -distResult) { + distResultAdj = 0.0f; + } else { + distResultAdj = distResult; + } + + return distResultAdj; + } + } + } else { + // Turn and project 90 degrees right + yawForwardsOffset = focalActorPosRot.rot.y - DEG_TO_BINANG(90); + + angledOffsetForwards.x = (Math_SinS(yawForwardsOffset) * 50.0f) + offsetForwards.x; + angledOffsetForwards.y = offsetForwards.y; + angledOffsetForwards.z = (Math_CosS(yawForwardsOffset) * 50.0f) + offsetForwards.z; + + if ((Camera_BgCheckInfo(camera, &angledOffsetForwards, &camCollision) != 0) && + Camera_CheckOOB(camera, &offsetForwards, &angledOffsetForwards)) { + // Always going to result in 28.0f? + distResult = OLib_Vec3fDistXZ(&offsetForwards, &camCollision.pos); + + if (!((D_801B9E5C == 1) && (D_801B9E60 >= -(distResult - 50.0f)))) { + D_801B9E5C = 2; + distResult = distResult - 50.0f; + D_801B9E60 = distResult; + if (distResult == -distResult) { + distResultAdj = 0.0f; + } else { + distResultAdj = distResult; + } + return distResultAdj; + } + } + } + + if (D_801B9E5C != 0) { + distResult = D_801B9E60; + } else { + distResult = 0.0f; + } + + D_801B9E5C = 0; + D_801B9E60 = 0.0f; + + return distResult; +} + +/** + * Calculates a new Up vector from the pitch, yaw, roll + */ +Vec3f* Camera_CalcUpVec(Vec3f* viewUp, s16 pitch, s16 yaw, s16 roll) { + f32 sinP = Math_SinS(pitch); + f32 cosP = Math_CosS(pitch); + f32 sinY = Math_SinS(yaw); + f32 cosY = Math_CosS(yaw); + f32 sinR = Math_SinS(-roll); + f32 cosR = Math_CosS(-roll); + Vec3f up; + Vec3f baseUp; + Vec3f u; + Vec3f rollMtxRow1; + Vec3f rollMtxRow2; + Vec3f rollMtxRow3; + f32 pad; + + // Axis to roll around + u.x = cosP * sinY; + u.y = sinP; + u.z = cosP * cosY; + + // Matrix to apply the roll to the Up vector without roll + rollMtxRow1.x = ((1.0f - SQ(u.x)) * cosR) + SQ(u.x); + rollMtxRow1.y = ((u.x * u.y) * (1.0f - cosR)) - (u.z * sinR); + rollMtxRow1.z = ((u.z * u.x) * (1.0f - cosR)) + (u.y * sinR); + + rollMtxRow2.x = ((u.x * u.y) * (1.0f - cosR)) + (u.z * sinR); + rollMtxRow2.y = ((1.0f - SQ(u.y)) * cosR) + SQ(u.y); + rollMtxRow2.z = ((u.y * u.z) * (1.0f - cosR)) - (u.x * sinR); + + rollMtxRow3.x = ((u.z * u.x) * (1.0f - cosR)) - (u.y * sinR); + rollMtxRow3.y = ((u.y * u.z) * (1.0f - cosR)) + (u.x * sinR); + rollMtxRow3.z = ((1.0f - SQ(u.z)) * cosR) + SQ(u.z); + + // Up without roll + baseUp.x = -sinP * sinY; + baseUp.y = cosP; + baseUp.z = -sinP * cosY; + + // rollMtx * baseUp + up.x = DOTXYZ(baseUp, rollMtxRow1); + up.y = DOTXYZ(baseUp, rollMtxRow2); + up.z = DOTXYZ(baseUp, rollMtxRow3); + + *viewUp = up; + + return viewUp; +} + +f32 Camera_ClampLerpScale(Camera* camera, f32 maxLerpScale) { + f32 ret; + + if (camera->atLerpStepScale < 0.12f) { + ret = 0.12f; + } else if (camera->atLerpStepScale >= maxLerpScale) { + ret = maxLerpScale; + } else { + ret = 1.1f * camera->atLerpStepScale; + } + + return ret; +} + +void Camera_ResetActionFuncState(Camera* camera, s32 mode) { + camera->animState = 0; +} + +void Camera_UpdateInterface(s32 interfaceFlags) { + s32 hudVisibility; + + if ((interfaceFlags & CAM_LETTERBOX_MASK) != CAM_LETTERBOX_IGNORE) { + switch (interfaceFlags & CAM_LETTERBOX_SIZE_MASK) { + case CAM_LETTERBOX_SMALL: + sCameraLetterboxSize = 26; + break; + + case CAM_LETTERBOX_MEDIUM: + sCameraLetterboxSize = 27; + break; + + case CAM_LETTERBOX_LARGE: + sCameraLetterboxSize = 32; + break; + + default: + sCameraLetterboxSize = 0; + break; + } + + if (interfaceFlags & CAM_LETTERBOX_INSTANT) { + ShrinkWindow_Letterbox_SetSize(sCameraLetterboxSize); + } else { + ShrinkWindow_Letterbox_SetSizeTarget(sCameraLetterboxSize); + } + } + + if ((interfaceFlags & CAM_HUD_VISIBILITY_MASK) != CAM_HUD_VISIBILITY_IGNORE) { + hudVisibility = (interfaceFlags & CAM_HUD_VISIBILITY_MASK) >> CAM_HUD_VISIBILITY_SHIFT; + if (hudVisibility == (CAM_HUD_VISIBILITY_ALL >> CAM_HUD_VISIBILITY_SHIFT)) { + hudVisibility = 50; + } + if (hudVisibility != sCameraHudVisibility) { + sCameraHudVisibility = hudVisibility; + Interface_SetHudVisibility(sCameraHudVisibility); + } + } +} + +Vec3f* Camera_BgCheckCorner(Vec3f* dst, Vec3f* linePointA, Vec3f* linePointB, CameraCollision* pointAColChk, + CameraCollision* pointBColChk) { + Vec3f closestPoint; + + func_800CAA14(pointAColChk->poly, pointBColChk->poly, linePointA, linePointB, &closestPoint); + *dst = closestPoint; + + return dst; +} + +/** + * Checks collision between at and eyeNext, if `checkEye` is set, if there is no collsion between + * eyeNext->at, then eye->at is also checked. + * Returns: + * 0 if no collsion is found between at->eyeNext + * 1 if the angle between the polys is between 60 degrees and 120 degrees + * 3 ? + * 6 if the angle between the polys is greater than 120 degrees + */ +s32 func_800CD44C(Camera* camera, VecGeo* diffGeo, CameraCollision* camEyeCollision, CameraCollision* camAtCollision, + s16 checkEye) { + Vec3f* at = &camera->at; + s32 pad[2]; + s32 atEyeBgId; + s32 eyeAtBgId; + s32 ret; + f32 cosEyeAt; + CameraCollision camCollision; + + camEyeCollision->pos = camera->eyeNext; + + ret = 0; + + atEyeBgId = func_800CBC84(camera, at, camEyeCollision, 0); + if (atEyeBgId != 0) { + // collision found between at->ey + camAtCollision->pos = *at; + + OLib_Vec3fToVecGeo(&camEyeCollision->geoNorm, &camEyeCollision->norm); + + if (camEyeCollision->geoNorm.pitch > 0x2EE0) { // 65.9 degrees + camEyeCollision->geoNorm.yaw = diffGeo->yaw; + } + + if (checkEye & 1) { + memcpy(&camCollision, camAtCollision, sizeof(CameraCollision)); + } + + eyeAtBgId = Camera_BgCheckInfo(camera, &camera->eye, camAtCollision); + + if (eyeAtBgId == 0) { + // no collision from eyeNext->at + if (checkEye & 1) { + memcpy(camAtCollision, &camCollision, sizeof(CameraCollision)); + } else { + return 3; + } + } + + if (camEyeCollision->poly == camAtCollision->poly) { + // at->eyeNext and eyeNext->at is the same poly + return 3; + } + + OLib_Vec3fToVecGeo(&camAtCollision->geoNorm, &camAtCollision->norm); + + if (camAtCollision->geoNorm.pitch > 0x2EE0) { // 65.9 degrees + camAtCollision->geoNorm.yaw = BINANG_ROT180(diffGeo->yaw); + } + + if (atEyeBgId != eyeAtBgId) { + // different bgIds for at->eye[Next] and eye[Next]->at + ret = 3; + } else { + cosEyeAt = Math3D_Parallel(&camEyeCollision->norm, &camAtCollision->norm); + if (cosEyeAt < -0.5f) { + ret = 6; + } else if ((cosEyeAt > 0.5f) || (checkEye & 2)) { + ret = 3; + } else { + ret = 1; + } + } + } + return ret; +} + +/** + * Calculates how much to adjust the camera at's y value when on a slope. + */ +f32 Camera_CalcSlopeYAdj(Vec3f* floorNorm, s16 playerYRot, s16 eyeAtYaw, f32 adjAmt) { + f32 tmp; + VecGeo floorNormGeo; + + OLib_Vec3fToVecGeo(&floorNormGeo, floorNorm); + + tmp = Math_CosS(floorNormGeo.pitch) * Math_CosS(playerYRot - floorNormGeo.yaw); + + return (Camera_fabsf(tmp) * adjAmt) * Math_CosS(playerYRot - eyeAtYaw); +} + +f32 func_800CD6CC(Actor* actor) { + return sqrtf(gTargetRanges[actor->targetMode].rangeSq / gTargetRanges[actor->targetMode].leashScale); +} + +/** + * Calculates new at vector for the camera pointing in `eyeAtDir` + */ +s32 Camera_CalcAtDefault(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, s16 calcSlope) { + Vec3f* at = &camera->at; + Vec3f focalActorAtOffsetTarget; + Vec3f atTarget; + s32 pad; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + + focalActorAtOffsetTarget.y = focalActorHeight + yOffset; + focalActorAtOffsetTarget.x = 0.0f; + focalActorAtOffsetTarget.z = 0.0f; + + if (calcSlope) { + focalActorAtOffsetTarget.y -= OLib_ClampMaxDist( + Camera_CalcSlopeYAdj(&camera->floorNorm, focalActorPosRot->rot.y, eyeAtDir->yaw, 25.0f), focalActorHeight); + } + + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + + if (atTarget.y < (camera->focalActorFloorHeight + 10.0f)) { + atTarget.y = camera->focalActorFloorHeight + 10.0f; + } + + Camera_ScaledStepToCeilVec3f(&atTarget, at, camera->atLerpStepScale, camera->atLerpStepScale, 0.2f); + + return 1; +} + +s32 Camera_CalcAtForScreen(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* focalActorPosY, f32 deltaYMax) { + f32 deltaY; + Vec3f focalActorAtOffsetTarget; + Vec3f atTarget; + s32 pad; + f32 clampedDeltaY; + f32 clampedAbsScreenY; + s16 absScreenY; + s16 screenY; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + + focalActorAtOffsetTarget.y = focalActorHeight + yOffset; + focalActorAtOffsetTarget.x = 0.0f; + focalActorAtOffsetTarget.z = 0.0f; + + Actor_GetScreenPos(camera->play, camera->focalActor, &absScreenY, &screenY); + screenY -= SCREEN_HEIGHT / 2; + absScreenY = ABS(screenY); + + // result unused + clampedAbsScreenY = OLib_ClampMaxDist(absScreenY / (f32)(SCREEN_HEIGHT / 2), 1.0f); + + deltaY = focalActorPosRot->pos.y - *focalActorPosY; + clampedDeltaY = OLib_ClampMaxDist(deltaY, deltaYMax); + + if (absScreenY > (SCREEN_HEIGHT / 4)) { + absScreenY = SCREEN_HEIGHT / 4; + } + + clampedAbsScreenY = OLib_ClampMaxDist(absScreenY / (f32)(SCREEN_HEIGHT / 4), 1.0f); + + focalActorAtOffsetTarget.y -= clampedDeltaY * clampedAbsScreenY * clampedAbsScreenY; + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + atTarget.y = CLAMP_MIN(atTarget.y, camera->focalActorFloorHeight + 10.0f); + + Camera_ScaledStepToCeilVec3f(&atTarget, &camera->at, camera->atLerpStepScale, camera->atLerpStepScale, 0.1f); + + return 1; +} + +s32 Camera_CalcAtForNormal1(Camera* camera, VecGeo* arg1, f32 yOffset, f32 forwardDist) { + PosRot* focalActorPosRot = &camera->focalActorPosRot; + Vec3f focalActorAtOffsetTarget; + Vec3f atTarget; + Vec3f collisionFromPos; + s32 pad; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + + focalActorAtOffsetTarget.x = Math_SinS(focalActorPosRot->rot.y) * forwardDist; + focalActorAtOffsetTarget.z = Math_CosS(focalActorPosRot->rot.y) * forwardDist; + focalActorAtOffsetTarget.y = focalActorHeight + yOffset; + + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + + collisionFromPos.x = focalActorPosRot->pos.x; + collisionFromPos.y = atTarget.y; + collisionFromPos.z = focalActorPosRot->pos.z; + + if (Camera_BgCheck(camera, &collisionFromPos, &atTarget)) { + atTarget.x -= camera->focalActorAtOffset.x - (atTarget.x - collisionFromPos.x); + atTarget.z -= camera->focalActorAtOffset.z - (atTarget.z - collisionFromPos.z); + } + + Camera_ScaledStepToCeilVec3f(&atTarget, &camera->at, camera->atLerpStepScale, camera->atLerpStepScale, 0.2f); + + return 1; +} + +/** + * Adjusts the camera's at position for Camera_Parallel1 + */ +s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32 xzOffsetMax, f32* focalActorPosY, + s16 flags) { + f32 pad; + Vec3f focalActorAtOffsetTarget; + Vec3f atTarget; + f32 fovHeight; + Vec3f* at = &camera->at; + f32 deltaY; + f32 eyeAtDistXZ; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + VecGeo focalActorAtOffsetTargetGeo; + + // Calculate the `focalActorAtOffsetTarget` + // @TODO: Only uses `PARALLEL1_FLAG_` flags, but may need separate flags for `CalcAt` system + if (flags & 0x40) { + focalActorAtOffsetTargetGeo.r = func_800CCCEC(camera, flags & 0x10); + focalActorAtOffsetTargetGeo.yaw = focalActorPosRot->rot.y + 0x4000; + focalActorAtOffsetTargetGeo.pitch = 0; + OLib_VecGeoToVec3f(&focalActorAtOffsetTarget, &focalActorAtOffsetTargetGeo); + } else { + f32 xOffset = camera->focalActorAtOffset.x + camera->unk_0F0.x; + f32 zOffset = camera->focalActorAtOffset.z + camera->unk_0F0.z; + + if (sqrtf(SQ(xOffset) + SQ(zOffset)) < xzOffsetMax) { + focalActorAtOffsetTarget.x = xOffset; + focalActorAtOffsetTarget.z = zOffset; + } else { + focalActorAtOffsetTarget.x = camera->focalActorAtOffset.x; + focalActorAtOffsetTarget.z = camera->focalActorAtOffset.z; + } + } + + focalActorAtOffsetTarget.y = focalActorHeight + yOffset; + + // focalActorAtOffsetTarget.y based on slope + if (PREG(76) && flags) { + focalActorAtOffsetTarget.y -= + Camera_CalcSlopeYAdj(&camera->floorNorm, focalActorPosRot->rot.y, arg1->yaw, 25.0f); + } + + // Adjust posOffsetTarget.y based on something + if (func_800CB950(camera)) { + *focalActorPosY = Camera_ScaledStepToCeilF(focalActorPosRot->pos.y, *focalActorPosY, 0.4f, 0.1f); + deltaY = focalActorPosRot->pos.y - *focalActorPosY; + focalActorAtOffsetTarget.y -= deltaY; + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + } else { + deltaY = focalActorPosRot->pos.y - *focalActorPosY; + eyeAtDistXZ = OLib_Vec3fDistXZ(at, &camera->eye); + + // Math_FTanF + // Get the height based on 80% of the fov + fovHeight = func_80086760(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ; + + if (deltaY > fovHeight) { + //! FAKE + if (1) {} + *focalActorPosY += deltaY - fovHeight; + deltaY = fovHeight; + } else if (deltaY < -fovHeight) { + *focalActorPosY += deltaY + fovHeight; + deltaY = -fovHeight; + } + + focalActorAtOffsetTarget.y -= deltaY; + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, 0.3f, 0.2f, 0.1f); + camera->xzOffsetUpdateRate = 0.3f; + camera->yOffsetUpdateRate = 0.2f; + } + + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + Camera_ScaledStepToCeilVec3f(&atTarget, at, camera->atLerpStepScale, camera->atLerpStepScale, 0.2f); + + return 1; +} + +s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f32 yOffset, f32 distance, + f32* yPosOffset, VecGeo* outPlayerToTargetDir, s16 flags) { + Vec3f* at = &camera->at; + Vec3f focalActorAtOffsetTarget; + Vec3f atTarget; + Vec3f sp68; + f32 temp_f0_6; + VecGeo sp5C; + f32 deltaY; + f32 fovHeight; + f32 phi_f16; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + f32 sp50; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + + focalActorAtOffsetTarget.y = focalActorHeight + yOffset; + focalActorAtOffsetTarget.x = 0.0f; + focalActorAtOffsetTarget.z = 0.0f; + + if (PREG(76) && (flags & FLG_ADJSLOPE)) { + focalActorAtOffsetTarget.y -= + Camera_CalcSlopeYAdj(&camera->floorNorm, camera->focalActorPosRot.rot.y, eyeAtDir->yaw, 25.0f); + } + + atTarget = focalActorPosRot->pos; + atTarget.y += focalActorHeight; + + OLib_Vec3fDiffToVecGeo(outPlayerToTargetDir, &atTarget, targetPos); + + sp5C = *outPlayerToTargetDir; + sp5C.r = (distance < sp5C.r) ? (sp5C.r * 0.2f) : ((sp5C.r * 0.9f) - (sp5C.r * 0.7f * (sp5C.r / distance))); + + if (flags & FLG_OFFGROUND) { + sp5C.r *= 0.2f; + camera->yOffsetUpdateRate = camera->xzOffsetUpdateRate = 0.01f; + } + + OLib_VecGeoToVec3f(&sp68, &sp5C); + + focalActorAtOffsetTarget.x += sp68.x; + focalActorAtOffsetTarget.y += sp68.y; + focalActorAtOffsetTarget.z += sp68.z; + + if (func_800CB950(camera)) { + *yPosOffset = Camera_ScaledStepToCeilF(focalActorPosRot->pos.y, *yPosOffset, 0.4f, 0.1f); + deltaY = focalActorPosRot->pos.y - *yPosOffset; + focalActorAtOffsetTarget.y -= deltaY; + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + } else { + if (!(flags & 0x80)) { + deltaY = focalActorPosRot->pos.y - *yPosOffset; + sp50 = OLib_Vec3fDistXZ(at, &camera->eye); + phi_f16 = sp50; + func_80086B30(deltaY, sp50); + fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16; + + if (fovHeight < deltaY) { + *yPosOffset += deltaY - fovHeight; + deltaY = fovHeight; + } else if (deltaY < -fovHeight) { + *yPosOffset += deltaY + fovHeight; + deltaY = -fovHeight; + } + focalActorAtOffsetTarget.y -= deltaY; + } else { + deltaY = focalActorPosRot->pos.y - *yPosOffset; + temp_f0_6 = func_80086B30(deltaY, OLib_Vec3fDistXZ(at, &camera->eye)); + + if (temp_f0_6 > 0.34906584f) { // (M_PI / 9) + phi_f16 = 1.0f - sin_rad(temp_f0_6 - 0.34906584f); + } else if (temp_f0_6 < -0.17453292f) { // (M_PI / 18) + phi_f16 = 1.0f - sin_rad(-0.17453292f - temp_f0_6); + } else { + phi_f16 = 1.0f; + } + + focalActorAtOffsetTarget.y -= deltaY * phi_f16; + } + + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, 0.5f, 0.5f, 0.1f); + camera->xzOffsetUpdateRate = 0.5f; + camera->yOffsetUpdateRate = 0.5f; + } + + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + Camera_ScaledStepToCeilVec3f(&atTarget, at, camera->atLerpStepScale, camera->atLerpStepScale, 0.2f); + + return 1; +} + +s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset, f32 arg4, f32 arg5, f32* arg6, + VecGeo* arg7, s16 flags) { + PosRot* focalActorPosRot = &camera->focalActorPosRot; + Vec3f focalActorAtOffsetTarget; + Vec3f atTarget; + Vec3f sp60; + VecGeo sp58; + f32 temp_f0_3; + f32 deltaY; + f32 new_var2; + f32 sp4C; + f32 phi_f14; + f32 fovHeight; + + focalActorAtOffsetTarget.y = Camera_GetFocalActorHeight(camera) + yOffset; + focalActorAtOffsetTarget.x = 0.0f; + focalActorAtOffsetTarget.z = 0.0f; + + sp58 = *arg7; + sp58.r = arg7->r * (arg5 * arg4); + + if (flags & 0x80) { + camera->yOffsetUpdateRate = 0.01f; + camera->xzOffsetUpdateRate = 0.01f; + } + + OLib_VecGeoToVec3f(&sp60, &sp58); + + focalActorAtOffsetTarget.x += sp60.x; + focalActorAtOffsetTarget.y += sp60.y; + focalActorAtOffsetTarget.z += sp60.z; + + if (func_800CB950(camera)) { + phi_f14 = *arg6; + *arg6 = Camera_ScaledStepToCeilF(focalActorPosRot->pos.y, phi_f14, 0.4f, 0.1f); + deltaY = focalActorPosRot->pos.y - *arg6; + focalActorAtOffsetTarget.y -= deltaY; + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + } else { + //! FAKE: + if (focalActorPosRot->pos.x) {} + + //! FAKE: unnecessary temp? + new_var2 = *arg1; + sp4C = new_var2; + deltaY = focalActorPosRot->pos.y - *arg6; + temp_f0_3 = func_80086B30(deltaY, sp4C); + + if (!(flags & 0x80)) { + fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C; + + if (fovHeight < deltaY) { + *arg6 += deltaY - fovHeight; + deltaY = fovHeight; + } else if (deltaY < -fovHeight) { + *arg6 += deltaY + fovHeight; + deltaY = -fovHeight; + } + + focalActorAtOffsetTarget.y -= deltaY; + } else { + if (temp_f0_3 > 0.34906584f) { // (M_PI / 9) + phi_f14 = 1.0f - sin_rad(temp_f0_3 - 0.34906584f); + } else if (temp_f0_3 < -0.17453292f) { // (M_PI / 18) + phi_f14 = 1.0f - sin_rad(-0.17453292f - temp_f0_3); + } else { + phi_f14 = 1.0f; + } + + focalActorAtOffsetTarget.y -= deltaY * phi_f14; + } + Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, 0.5f, 0.5f, 0.1f); + camera->xzOffsetUpdateRate = 0.5f; + camera->yOffsetUpdateRate = 0.5f; + } + + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + Camera_ScaledStepToCeilVec3f(&atTarget, &camera->at, camera->atLerpStepScale, camera->atLerpStepScale, 0.2f); + + return true; +} + +s32 Camera_CalcAtForHorse(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* yPosOffset, s16 calcSlope) { + Vec3f* at = &camera->at; + Vec3f posOffsetTarget; + Vec3f atTarget; + s32 pad[2]; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + Player* player = (Player*)camera->focalActor; + PosRot horsePosRot; + + Actor_GetWorld(&horsePosRot, player->rideActor); + + if (EN_HORSE_CHECK_JUMPING((EnHorse*)player->rideActor)) { + horsePosRot.pos.y -= 49.0f; + *yPosOffset = Camera_ScaledStepToCeilF(horsePosRot.pos.y, *yPosOffset, 0.1f, 0.1f); + camera->atLerpStepScale = Camera_ScaledStepToCeilF(0.4f, camera->atLerpStepScale, 0.2f, 0.02f); + } else { + *yPosOffset = Camera_ScaledStepToCeilF(horsePosRot.pos.y, *yPosOffset, 0.5f, 0.1f); + } + + posOffsetTarget.x = 0.0f; + posOffsetTarget.y = focalActorHeight + yOffset; + posOffsetTarget.z = 0.0f; + + if (calcSlope) { + posOffsetTarget.y -= + Camera_CalcSlopeYAdj(&camera->floorNorm, camera->focalActorPosRot.rot.y, eyeAtDir->yaw, 25.0f); + } + + Camera_ScaledStepToCeilVec3f(&posOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, + camera->yOffsetUpdateRate, 0.1f); + + atTarget.x = camera->focalActorAtOffset.x + horsePosRot.pos.x; + atTarget.y = camera->focalActorAtOffset.y + horsePosRot.pos.y; + atTarget.z = camera->focalActorAtOffset.z + horsePosRot.pos.z; + Camera_ScaledStepToCeilVec3f(&atTarget, at, camera->atLerpStepScale, camera->atLerpStepScale, 0.2f); + + return true; +} + +f32 Camera_ClampDist1(Camera* camera, f32 dist, f32 minDist, f32 maxDist, s16 timer) { + f32 distTarget; + + if ((dist / maxDist) > 1.2f) { + distTarget = maxDist; + + camera->rUpdateRateInv = 20.0f / (dist / maxDist); + if ((20.0f / (dist / maxDist)) < 10) { + camera->rUpdateRateInv = 10; + } + } else if (dist < minDist) { + distTarget = minDist; + + camera->rUpdateRateInv = + Camera_ScaledStepToCeilF((timer != 0) ? 10.0f : 20.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } else if (maxDist < dist) { + distTarget = maxDist; + + camera->rUpdateRateInv = + Camera_ScaledStepToCeilF((timer != 0) ? 10.0f : 20.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } else { + distTarget = dist; + + camera->rUpdateRateInv = + Camera_ScaledStepToCeilF((timer != 0) ? 20.0f : 1.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } + + return Camera_ScaledStepToCeilF(distTarget, camera->dist, 1.0f / camera->rUpdateRateInv, 0.1f); +} + +f32 Camera_ClampDist2(Camera* camera, f32 dist, f32 minDist, f32 maxDist, s16 timer) { + f32 distTarget; + + if (timer == 0) { + distTarget = ((maxDist * 0.25f) > 80.0f) ? maxDist * 0.25f : 80.0f; + + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(1000.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } else if ((dist / maxDist) > 1.2f) { + distTarget = maxDist; + + camera->rUpdateRateInv = 20.0f / (dist / maxDist); + if ((20.0f / (dist / maxDist)) < 10.0f) { + camera->rUpdateRateInv = 10.0f; + } + } else if (dist < minDist) { + distTarget = minDist; + + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } else if (maxDist < dist) { + distTarget = maxDist; + + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } else { + distTarget = dist; + + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(1.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + } + + return Camera_ScaledStepToCeilF(distTarget, camera->dist, 1.0f / camera->rUpdateRateInv, 0.1f); +} + +/** + * Calculates the camera pitch to update to as player moves around + * The pitch target starts with a default value on a flat surface, then standing on a sloped surface will create an + * offset in default pitch Camera "AI" for pitch + */ +s16 Camera_CalcDefaultPitch(Camera* camera, s16 pitch, s16 flatSurfacePitchTarget, s16 slopePitchAdj) { + f32 attenuation; + f32 pitchStepScale; + f32 t; + s16 slopePitchAdjAttenuated; + s16 pitchMag = ABS(pitch); + s16 pitchTarget; + + // if slopePitchAdj is positive, then it is attenuated by a factor of Math_CosS(slopePitchAdj) + slopePitchAdjAttenuated = (slopePitchAdj > 0) ? (s16)(Math_CosS(slopePitchAdj) * slopePitchAdj) : slopePitchAdj; + pitchTarget = flatSurfacePitchTarget - slopePitchAdjAttenuated; + + if (ABS(pitchTarget) < pitchMag) { + // pitch is decreasing + pitchStepScale = (1.0f / camera->pitchUpdateRateInv) * 3.0f; + } else { + // pitch is increasing + t = pitchMag * (1.0f / DEG_TO_BINANG(79.655f)); + attenuation = + Camera_QuadraticAttenuation(0.8f, 1.0f - t); // attenuation starts above pitch = 0xB54 (16 degrees) + pitchStepScale = (1.0f / camera->pitchUpdateRateInv) * attenuation; + } + + return Camera_ScaledStepToCeilS(pitchTarget, pitch, pitchStepScale, 5); +} + +/** + * Calculates the camera pitch to update to as player moves around + * The yaw target starts with a default value, but will only update to that target yaw in proportion to players velocity + * No velocity means yaw does not update + * Camera "AI" for yaw + */ +s16 Camera_CalcDefaultYaw(Camera* camera, s16 yaw, s16 target, f32 attenuationYawDiffRange, + f32 attenuationYawDiffInterpParam) { + f32 attenuationYawDiffAdj; + f32 attenuationYawDiff; + f32 attenuationYawDiffParam; + f32 attenuationSpeedRatio; + f32 yawUpdRate; + s16 yawDiffToTarget; + + if (camera->xzSpeed > 0.001f) { + yawDiffToTarget = target - BINANG_ROT180(yaw); + attenuationYawDiffParam = BINANG_ROT180(yawDiffToTarget) / (f32)0x8000; + } else { + yawDiffToTarget = target - BINANG_ROT180(yaw); + attenuationYawDiffParam = 0.3f; + } + + // Attenuation 1 based on YawDiffToTarget. + attenuationYawDiff = Camera_QuadraticAttenuation(attenuationYawDiffRange, attenuationYawDiffParam); + attenuationYawDiffAdj = LERPIMP(attenuationYawDiff, 1.0f, attenuationYawDiffInterpParam); + attenuationYawDiffAdj = CLAMP_MIN(attenuationYawDiffAdj, 0.0f); + + // attenuation 2 based on SpeedRatio + attenuationSpeedRatio = Camera_QuadraticAttenuation(0.5f, camera->speedRatio); + + yawUpdRate = 1.0f / camera->yawUpdateRateInv; + return yaw + (s16)(yawDiffToTarget * attenuationYawDiffAdj * attenuationSpeedRatio * yawUpdRate); +} + +void Camera_CalcDefaultSwing(Camera* camera, VecGeo* arg1, VecGeo* arg2, f32 arg3, f32 arg4, SwingAnimation* swing2, + s16* flags) { + SwingAnimation* swing = swing2; + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f peekAroundPoint; + s32 sp8C = 0; + f32 sp88; + s32 checkEyeBit1; + s32 checkEyeBit2; + CameraCollision sp58; + VecGeo sp50; + Vec3f* sp30; + + if (swing->unk_64 == 1) { + if (arg3 < (sp88 = OLib_Vec3fDist(at, &swing->collisionClosePoint))) { + //! FAKE: + dummy:; + swing->unk_64 = 0; + } else if ((sp88 = Math3D_SignedDistanceFromPlane(swing->eyeAtColChk.norm.x, swing->eyeAtColChk.norm.y, + swing->eyeAtColChk.norm.z, swing->eyeAtColChk.poly->dist, + at)) > 0.0f) { + swing->unk_64 = 0; + } else if ((sp88 = OLib_Vec3fDist(eye, &swing->eyeAtColChk.pos)) < 10.0f) { + swing->unk_64 = 0; + } else if ((sp88 = Math3D_SignedDistanceFromPlane(swing->atEyeColChk.norm.x, swing->atEyeColChk.norm.y, + swing->atEyeColChk.norm.z, swing->atEyeColChk.poly->dist, + eye)) > 0.0f) { + swing->unk_64 = 0; + } else if (swing->atEyeColChk.norm.y > 0.50f) { + swing->unk_64 = 0; + } else { + Math3D_AngleBetweenVectors(&camera->unk_0F0, &swing->eyeAtColChk.norm, &sp88); + if (sp88 > 0.0f) { + swing->unk_64 = 0; + } + } + + if (swing->unk_64 == 1) { + sp8C = 2; + } + } else if (swing->unk_64 == 2) { + swing->unk_64 = 0; + } + + if (sp8C == 0) { + if (*flags & 2) { + checkEyeBit1 = 1 << 1; + } else { + checkEyeBit1 = 0; + } + + if (swing->unk_64 != 1) { + checkEyeBit2 = 1 << 0; + } else { + checkEyeBit2 = 0; + } + + sp8C = + func_800CD44C(camera, arg1, &swing->atEyeColChk, &swing->eyeAtColChk, ((s16)checkEyeBit2 | checkEyeBit1)); + } + + switch (sp8C) { + case 1: + Camera_BgCheckCorner(&swing->collisionClosePoint, &camera->at, &camera->eyeNext, &swing->atEyeColChk, + &swing->eyeAtColChk); + // fallthrough + case 2: + peekAroundPoint.x = swing->collisionClosePoint.x + (swing->atEyeColChk.norm.x + swing->eyeAtColChk.norm.x); + peekAroundPoint.y = swing->collisionClosePoint.y + (swing->atEyeColChk.norm.y + swing->eyeAtColChk.norm.y); + peekAroundPoint.z = swing->collisionClosePoint.z + (swing->atEyeColChk.norm.z + swing->eyeAtColChk.norm.z); + + sp30 = &camera->eyeNext; + OLib_Vec3fDiffToVecGeo(&sp50, at, &peekAroundPoint); + sp50.r = arg1->r; + swing->unk_64 = 1; + swing->swingUpdateRate = 1.5f; + OLib_AddVecGeoToVec3f(&sp58.pos, at, &sp50); + + if (func_800CBC84(camera, &swing->eyeAtColChk.pos, &sp58, 0) == 0) { + sp50.yaw = + Camera_AngleDiffAndScale(arg1->yaw, arg2->yaw, (camera->speedRatio * 0.5f) + 0.5f) + arg2->yaw; + sp50.pitch = Camera_AngleDiffAndScale(arg1->pitch, arg2->pitch, (camera->speedRatio * 0.5f) + 0.5f) + + arg2->pitch; + if (swing->atEyeColChk.geoNorm.pitch < 0x2AA8) { // 60 degrees + swing->yaw = sp50.yaw; + swing->pitch = sp50.pitch; + } else { + swing->yaw = arg1->yaw; + swing->pitch = arg1->pitch; + } + } + *eye = *sp30 = sp58.pos; + break; + + case 3: + case 6: + sp30 = &swing->atEyeColChk.pos; + sp88 = OLib_Vec3fDist(at, sp30); + if (sp88 < 60.0f) { + sp50.yaw = Camera_AngleDiffAndScale(arg1->yaw, arg2->yaw, camera->speedRatio) + arg2->yaw; + if (*flags & 0x1000) { + sp50.pitch = arg2->pitch; + } else { + sp50.pitch = Math_CosS(swing->atEyeColChk.geoNorm.pitch) * 0x3FFC; + } + sp50.r = 60.0f - sp88; + OLib_AddVecGeoToVec3f(&sp58.pos, sp30, &sp50); + } else { + sp50.yaw = Camera_AngleDiffAndScale(arg1->yaw, arg2->yaw, camera->speedRatio) + arg2->yaw; + sp50.pitch = Camera_AngleDiffAndScale(arg1->pitch, arg2->pitch, camera->speedRatio) + arg2->pitch; + sp50.r = arg1->r; + OLib_AddVecGeoToVec3f(&sp58.pos, at, &sp50); + } + func_800CBC84(camera, at, &sp58, 0); + *eye = sp58.pos; + break; + + default: + sp30 = &swing->atEyeColChk.pos; + *flags &= ~0x1000; + swing->swingUpdateRate = arg4; + *eye = *sp30; + break; + } +} + +/*===============================================================*/ +/* Camera Update Functions (Chosen by Settings & Modes) */ +/*===============================================================*/ + +s32 Camera_Noop(Camera* camera) { + return 1; +} + +// SP, FLOATS - Many temps reused to get the stack pointer down, even though it doesn't seem logical +// https://decomp.me/scratch/zVOSG +#ifdef NON_EQUIVALENT +s32 Camera_Normal1(Camera* camera) { + CameraModeValue* values; + f32 phi_f16_2; + Vec3f spD8; // D8-DC-E0 + f32 spD4; + f32 spD0; + f32 spC8; + f32 spC4; + f32 spC0; + VecGeo spB4; // B4-B8-BA + VecGeo spAC; // AC-B0-B2 + VecGeo spA4; // A4-A8-AA + VecGeo sp9C; // 9C-A0-A2 + VecGeo sp74; // 74-78-7A + s16 sp72; + f32 sp6C; + VecGeo sp64; // 64-68-6A + CollisionPoly* sp60; + f32 sp88 = Camera_GetFocalActorHeight(camera); + s32 sp5C; // BgID + f32 sp58; + f32 phi_f2; + // Vec3f *sp48; + // Vec3f *sp44; + + // f32 phi_f0; + f32 phi_f2_2; + f32 phi_f0_4; + s32 phi_v1_2; + Vec3f* sp4C = &camera->eye; + PosRot* sp40 = &camera->focalActorPosRot; + // f32 phi_f16_5; + + s16 phi_a0; + s16 temp_a0_3; // May be fake + Vec3f* new_var3; + + Normal1ReadOnlyData* roData = &camera->paramData.norm1.roData; + Normal1ReadWriteData* rwData = &camera->paramData.norm1.rwData; + + // sp48 = &camera->at; + // sp4C;/ + // sp44 = &camera->eyeNext; + // sp40; + // sp88; + + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->unk_00 = GET_NEXT_RO_DATA(values) * (sp88 * 0.01f * (0.8f - ((68.0f / sp88) * -0.2f))); + roData->unk_04 = GET_NEXT_RO_DATA(values) * (sp88 * 0.01f * (0.8f - ((68.0f / sp88) * -0.2f))); + roData->unk_08 = GET_NEXT_RO_DATA(values) * (sp88 * 0.01f * (0.8f - ((68.0f / sp88) * -0.2f))); + roData->unk_04 = roData->unk_08 - (roData->unk_08 - roData->unk_04); + + if (RELOAD_PARAMS(camera)) { + roData->unk_20 = (s16)((GET_NEXT_RO_DATA(values) * 182.04167f) + .5f); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_0C = 40.0f - (40.0f - roData->unk_0C); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_RO_DATA(values) * 0.01f; + roData->unk_14 = 1.0f - (1.0f - roData->unk_14); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->unk_1C = GET_NEXT_RO_DATA(values) * 0.01f; + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + sCameraInterfaceFlags = roData->interfaceFlags; + OLib_Vec3fDiffToVecGeo(&spA4, &camera->at, sp4C); + OLib_Vec3fDiffToVecGeo(&sp9C, &camera->at, &camera->eyeNext); + + switch (camera->animState) { + case 20: + Camera_SetUpdateRatesFastYaw(camera); + // fallthrough? + case 0: + rwData->unk_0C = 1; + if (!(roData->interfaceFlags & NORMAL1_FLAG_3) && (camera->animState != 20)) { + rwData->unk_0C |= 0x1000; + } + // fallthrough? + case 10: + if (camera->animState == 10) { + rwData->unk_0C = 0; + } + rwData->unk_08 = 0; + D_801EDC30[camera->camId].yaw = D_801EDC30[camera->camId].pitch = D_801EDC30[camera->camId].unk_64 = 0; + rwData->unk_0A = 0x514; + D_801EDC30[camera->camId].swingUpdateRate = roData->unk_0C; + rwData->unk_00 = camera->focalActorPosRot.pos.y; + rwData->unk_04 = camera->xzSpeed; + D_801EDC30[camera->camId].timer = 0; + sUpdateCameraDirection = false; + rwData->unk_10 = 120.0f; + break; + } + + camera->animState = 1; + sUpdateCameraDirection = true; + + if ((camera->speedRatio < 0.01f) || (rwData->unk_0A > 0x4B0)) { + if (rwData->unk_0A > -0x4B0) { + rwData->unk_0A--; + } + } else { + rwData->unk_0A = 0x4B0; + } + + if (func_800CB950(camera)) { + rwData->unk_00 = camera->focalActorPosRot.pos.y; + } + + if (rwData->unk_0C & 0x1000) { + spC8 = camera->speedRatio; + } else { + spC8 = ((camera->speedRatio * 3.0f) + 1.0f) * 0.25f; + } + + spD8 = camera->focalActorAtOffset; + spD8.y -= sp88 + roData->unk_00; + spC4 = Camera_Vec3fMagnitude(&spD8); + + if ((roData->unk_04 + roData->unk_08) < spC4) { + spC4 = 1.0f; + } else { + spC4 = spC4 / (roData->unk_04 + roData->unk_08); + } + + // Everything above matches except stack pointers + // PERM_RANDOMIZE( + + phi_f16_2 = 0.2f; + + phi_f2 = (camera->xzSpeed - rwData->unk_04) * 0.2f; + phi_f0_4 = phi_f2; + if (phi_f2 < 0.0f) { + phi_f0_4 = 0.0f; + } + + spC0 = OLib_ClampMaxDist(SQ(phi_f0_4), 1.0f); + camera->yOffsetUpdateRate = + Camera_ScaledStepToCeilF(0.05f, camera->yOffsetUpdateRate, (0.5f * spC8) + (0.5f * spC4), 0.0001f); + camera->xzOffsetUpdateRate = + Camera_ScaledStepToCeilF(0.05f, camera->xzOffsetUpdateRate, (0.5f * spC8) + (0.5f * spC4), 0.0001f); + camera->fovUpdateRate = + Camera_ScaledStepToCeilF(0.05f, camera->fovUpdateRate, (0.5f * spC8) + (0.5f * spC4), 0.0001f); + + if (D_801EDC30[camera->camId].unk_64 == 1) { + phi_f2 = 0.5f; + } else { + phi_f2 = (0.5f * spC8) + (0.5f * spC4); + } + + rwData->unk_04 = camera->xzSpeed; + + if (D_801EDC30[camera->camId].timer != 0) { + camera->yawUpdateRateInv = + Camera_ScaledStepToCeilF((D_801EDC30[camera->camId].timer * 2) + D_801EDC30[camera->camId].swingUpdateRate, + camera->yawUpdateRateInv, phi_f2, 0.1f); + if (roData->interfaceFlags & NORMAL1_FLAG_3) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(100.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); + } else { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF((D_801EDC30[camera->camId].timer * 2) + 16.0f, + camera->pitchUpdateRateInv, 0.2f, 0.1f); + } + D_801EDC30[camera->camId].timer--; + } else { + camera->yawUpdateRateInv = Camera_ScaledStepToCeilF( + D_801EDC30[camera->camId].swingUpdateRate - (D_801EDC30[camera->camId].swingUpdateRate * 0.7f * spC0), + camera->yawUpdateRateInv, phi_f2, 0.1f); + if ((roData->interfaceFlags & NORMAL1_FLAG_3) && (camera->speedRatio > 0.01f)) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(100.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); + } else if (D_801ED920 != NULL) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(32.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); + } else { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(16.0f, camera->pitchUpdateRateInv, 0.2f, 0.1f); + } + } + + if (roData->interfaceFlags & NORMAL1_FLAG_0) { + //! FAKE + if (!spC8) {} + temp_a0_3 = Camera_GetPitchAdjFromFloorHeightDiffs(camera, spA4.yaw + 0x8000, rwData->unk_0C & 1); + phi_f2 = (1.0f / roData->unk_10) * 0.7f; + phi_f16_2 = (1.0f / roData->unk_10) * 0.3f * (1.0f - camera->speedRatio); + spD0 = phi_f16_2; + rwData->unk_08 = Camera_ScaledStepToCeilS(temp_a0_3, rwData->unk_08, phi_f2 + phi_f16_2, 5); + } else { + rwData->unk_08 = 0; + } + + if ((D_801EDC30[camera->camId].unk_64 == 1) && (roData->unk_00 > -40.0f)) { + phi_f0_4 = Math_SinS(D_801EDC30[camera->camId].pitch); + phi_f2 = roData->unk_00; + phi_f2 = phi_f2 * (1.0f - phi_f0_4); // TODO: phi_f2 should not be on the LHS and RHS + // phi_f2 = roData->unk_00 * (1.0f - phi_f0_4); + camera->yawUpdateRateInv = 80.0f; + camera->pitchUpdateRateInv = 80.0f; + phi_f2_2 = ((-40.0f) * phi_f0_4) + phi_f2; + phi_f16_2 = phi_f0_4; + } else { + phi_f2_2 = roData->unk_00; + } + + if (roData->interfaceFlags & (NORMAL1_FLAG_6 | NORMAL1_FLAG_5)) { + if (camera->dist < roData->unk_04) { + phi_f16_2 = 0.0f; + } else if (roData->unk_08 < camera->dist) { + phi_f16_2 = 1.0f; + } else if (roData->unk_08 == roData->unk_04) { + phi_f16_2 = 1.0f; + } else { + // phi_f16_2 = camera->dist - roData->unk_04; + spD4 = (camera->dist - roData->unk_04) / (roData->unk_08 - roData->unk_04); + phi_f16_2 = spD4; + } + + Camera_CalcAtForNormal1(camera, &sp9C, phi_f2_2, 25.0f * phi_f16_2 * camera->speedRatio); + rwData->unk_10 = 120.0f; + spD0 = phi_f16_2; + } else if ((roData->interfaceFlags & NORMAL1_FLAG_7) && (rwData->unk_0A < 0)) { + phi_f0_4 = rwData->unk_0A / -1200.0f; // May be used to swap $f registers + Camera_CalcAtForNormal1( + camera, &sp9C, + phi_f2_2 - ((phi_f2_2 - ((0.8f - ((68.0f / sp88) * -0.2f)) * sp88 * -0.45f)) * phi_f0_4 * 0.75f), + 10.0f * phi_f0_4); + rwData->unk_10 = 120.0f; + spD0 = phi_f16_2; + //! FAKE + if (0) {} + } else if (roData->interfaceFlags & NORMAL1_FLAG_3) { + spD0 = phi_f16_2; + Camera_CalcAtForScreen(camera, &sp9C, roData->unk_00, &rwData->unk_00, rwData->unk_10); + if (rwData->unk_10 > 20.0f) { + rwData->unk_10 -= 0.2f; + } + } else { + spD0 = phi_f16_2; + Camera_CalcAtDefault(camera, &sp9C, phi_f2_2, roData->interfaceFlags & NORMAL1_FLAG_0); + rwData->unk_10 = 120.0f; + } + + phi_f16_2 = spD0; + OLib_Vec3fDiffToVecGeo(&spB4, &camera->at, &camera->eyeNext); + if ((roData->interfaceFlags & NORMAL1_FLAG_7) && (rwData->unk_0A < 0)) { + if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { + switch (((Player*)camera->focalActor)->transformation) { + case PLAYER_FORM_HUMAN: + phi_f16_2 = 66.0f; + break; + + case PLAYER_FORM_DEKU: + phi_f16_2 = 66.0f; + break; + + case PLAYER_FORM_ZORA: + phi_f16_2 = 115.0f; + break; + + case PLAYER_FORM_GORON: + phi_f16_2 = 115.0f; + break; + + case PLAYER_FORM_FIERCE_DEITY: + phi_f16_2 = roData->unk_04; + break; + + default: + phi_f16_2 = roData->unk_04; + break; + } + } + phi_f0_4 = Camera_ClampDist2(camera, spB4.r, phi_f16_2, phi_f16_2, 0); + } else if (roData->interfaceFlags & NORMAL1_FLAG_7) { + phi_f0_4 = Camera_ClampDist2(camera, spB4.r, roData->unk_04, roData->unk_08, 1); + } else { + phi_f0_4 = Camera_ClampDist1(camera, spB4.r, roData->unk_04, roData->unk_08, rwData->unk_0A > 0); + } + + camera->dist = spB4.r = phi_f0_4; + + if (D_801EDC30[camera->camId].unk_64 != 0) { + //! FAKE + if (phi_v1_2) {} + spB4.pitch = + Camera_ScaledStepToCeilS(D_801EDC30[camera->camId].pitch, sp9C.pitch, 1.0f / camera->yawUpdateRateInv, 5); + spB4.yaw = + Camera_ScaledStepToCeilS(D_801EDC30[camera->camId].yaw, sp9C.yaw, 1.0f / camera->yawUpdateRateInv, 5); + } else { + if (roData->interfaceFlags & NORMAL1_FLAG_5) { + spB4.yaw = sp9C.yaw; + spB4.pitch = sp9C.pitch; + camera->animState = 20; + } else { + if (D_801ED920 != NULL) { + //! FAKE + if (sp40) {} + new_var3 = &D_801ED920->world.pos; + OLib_Vec3fDiffToVecGeo(&sp74, &sp40->pos, new_var3); // TODO: arg0 & arg1 swapped + sp72 = sp40->rot.y - sp74.yaw; + // Interface and shrink-window flags + if ((roData->interfaceFlags & 0xFF00) == 0xFF00) { + sp6C = 1.0f; + } else { + sp6C = 1.0f - (ABS(sp72) / 10922.0f); + } + + if (ABS((s16)(sp9C.yaw - sp74.yaw)) < 0x4000) { + sp74.yaw += 0x8000; + } + + if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || !func_800CB924(camera)) { + spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, (s16)(sp40->rot.y - (s16)(sp72 * sp6C)), + roData->unk_14, spC0); + } + + if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || (camera->speedRatio < 0.01f)) { + spB4.pitch = Camera_CalcDefaultPitch( + camera, sp9C.pitch, roData->unk_20 + (s16)((roData->unk_20 - sp74.pitch) * sp6C * 0.75f), + rwData->unk_08); + } + dummy:; // TODO: Will this be needed? + } else if (roData->interfaceFlags & NORMAL1_FLAG_1) { + if ((camera->speedRatio > 0.1f) || (rwData->unk_0A > 0x4B0)) { + OLib_Vec3fToVecGeo(&sp64, &camera->unk_0F0); + if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || !func_800CB924(camera)) { + spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, sp64.yaw, roData->unk_14, spC0); + } + if (!(roData->interfaceFlags & NORMAL1_FLAG_3)) { + spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08); + } else if ((camera->unk_0F0.y > 0.0f) && func_800CB924(camera)) { + spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08); + } + } else { + spB4.yaw = sp9C.yaw; + spB4.pitch = sp9C.pitch; + dummy4:; // TODO: Will this be needed? + } + } else { + spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, sp40->rot.y, roData->unk_14, spC0); + if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || (camera->speedRatio < 0.1f)) { + spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08); + } + } + } + } + + // 76.9 degrees + if (spB4.pitch > 0x36B0) { + spB4.pitch = 0x36B0; + } + + // -76.9 degrees + if (spB4.pitch < -0x36B0) { + spB4.pitch = -0x36B0; + } + + OLib_AddVecGeoToVec3f(&camera->eyeNext, &camera->at, &spB4); + if ((camera->status == CAM_STATUS_ACTIVE) && !(roData->interfaceFlags & NORMAL1_FLAG_4) && (spC4 <= 0.9f)) { + + if (func_800CBA7C(camera) == 0) { + Camera_CalcDefaultSwing(camera, &spB4, &sp9C, roData->unk_04, roData->unk_0C, &D_801EDC30[camera->camId], + &rwData->unk_0C); + sp58 = BgCheck_CameraRaycastFloor2(&camera->play->colCtx, &sp60, &sp5C, sp4C); + if ((roData->interfaceFlags & NORMAL1_FLAG_3) && func_800CB924(camera)) { + phi_f16_2 = 25.0f; + } else { + phi_f16_2 = 5.0f; + } + spD0 = sp4C->y; // TODO: another fake reuse of temp + phi_f0_4 = sp4C->y; + phi_f0_4 -= sp58; + // new_var2 = sp4C->y; + if ((sp58 != BGCHECK_Y_MIN) && (phi_f0_4 < phi_f16_2)) { + sp4C->y = sp58 + phi_f16_2; + } else if ((camera->waterYPos != camera->focalActorFloorHeight) && ((spD0 - camera->waterYPos) < 5.0f) && + ((spD0 - camera->waterYPos) > -5.0f)) { + sp4C->y = camera->waterYPos + 5.0f; + } + } + + OLib_Vec3fDiffToVecGeo(&spAC, sp4C, &camera->at); + camera->inputDir.x = spAC.pitch; + camera->inputDir.y = spAC.yaw; + camera->inputDir.z = 0; + if (gSaveContext.save.saveInfo.playerData.health < 17) { + phi_v1_2 = (camera->play->state.frames << 0x18); + phi_v1_2 = (s16)((phi_v1_2 >> 0x15) & 0xFD68); + camera->inputDir.y += phi_v1_2; + } + } else { + D_801EDC30[camera->camId].swingUpdateRate = roData->unk_0C; + D_801EDC30[camera->camId].unk_64 = 0; + sUpdateCameraDirection = false; + *sp4C = camera->eyeNext; + } + + // Everything below OLib_Vec3fDiffToVecGeo matches except stack pointers + // ) + + phi_f2 = (gSaveContext.save.saveInfo.playerData.health <= 16) ? 0.8f : 1.0f; + camera->fov = Camera_ScaledStepToCeilF(roData->unk_18 * phi_f2, camera->fov, camera->fovUpdateRate, 0.1f); + + if (roData->interfaceFlags & NORMAL1_FLAG_2) { + spD4 = Math_SinS((s16)(spA4.yaw - spB4.yaw)); + camera->roll = Camera_ScaledStepToCeilS(((Rand_ZeroOne() - 0.5f) * 500.0f * camera->speedRatio) + + (spD4 * spD4 * spD4 * 10000.0f), + camera->roll, 0.1f, 5); + } else { + if (gSaveContext.save.saveInfo.playerData.health <= 16) { + phi_a0 = (Rand_ZeroOne() - 0.5f) * 100.0f * camera->speedRatio; + } else { + phi_a0 = 0.0f; + } + camera->roll = Camera_ScaledStepToCeilS(phi_a0, camera->roll, 0.2f, 5); + } + + camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->unk_1C); + rwData->unk_0C &= ~1; + + return true; +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal1.s") +#endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal2.s") +/** + * Unused Camera RemoteBomb Setting + */ +s32 Camera_Normal2(Camera* camera) { + return Camera_Noop(camera); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal3.s") +#define NORMAL3_RW_FLAG (1 << 0) -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal4.s") +/** + * Riding Epona and Zora + */ +s32 Camera_Normal3(Camera* camera) { + Normal3ReadOnlyData* roData = &camera->paramData.norm3.roData; + Normal3ReadWriteData* rwData = &camera->paramData.norm3.rwData; + f32 sp8C; + f32 sp90; + f32 temp_f2; // multi-use temp + f32 sp88; + VecGeo sp80; + VecGeo sp78; + VecGeo sp70; + VecGeo sp68; + f32 phi_f2; + s16 sp62; + s16 phi_v1_2; + Player* player = (Player*)camera->focalActor; + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + PosRot* focalActorPosRot = &camera->focalActorPosRot; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal0.s") + temp_f2 = Camera_GetFocalActorHeight(camera); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel1.s") + if ((camera->setting == CAM_SET_HORSE) && (player->rideActor == NULL)) { + Camera_ChangeSettingFlags(camera, camera->prevSetting, CAM_CHANGE_SETTING_1); + return 1; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel2.s") + if (RELOAD_PARAMS(camera)) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel3.s") + temp_f2 = CAM_RODATA_UNSCALE(temp_f2); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel4.s") + roData->yOffset = GET_NEXT_RO_DATA(values) * temp_f2; + roData->distMin = GET_NEXT_RO_DATA(values) * temp_f2; + roData->distMax = GET_NEXT_RO_DATA(values) * temp_f2; + roData->pitchTarget = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values)); + roData->yawUpdateRateInv = GET_NEXT_RO_DATA(values); + roData->pitchUpdateRateInv = GET_NEXT_RO_DATA(values); + roData->fovTarget = GET_NEXT_RO_DATA(values); + roData->maxAtLERPScale = GET_NEXT_SCALED_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel0.s") + OLib_Vec3fDiffToVecGeo(&sp70, at, eye); + OLib_Vec3fDiffToVecGeo(&sp68, at, eyeNext); + sUpdateCameraDirection = true; + sCameraInterfaceFlags = roData->interfaceFlags; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump1.s") + //! FAKE: fake temp + phi_v1_2 = camera->animState; + if (!(((phi_v1_2 == 0) || (phi_v1_2 == 10)) || (phi_v1_2 == 20))) { + } else { + rwData->isZero = 0; + rwData->curPitch = 0; + rwData->yPosOffset = camera->focalActorFloorHeight; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump2.s") + D_801EDC30[camera->camId].yaw = D_801EDC30[camera->camId].pitch = D_801EDC30[camera->camId].unk_64 = 0; + D_801EDC30[camera->camId].swingUpdateRate = roData->yawUpdateRateInv; + rwData->yawUpdateRate = BINANG_SUB(BINANG_ROT180(camera->focalActorPosRot.rot.y), sp70.yaw) * (1.0f / 6.0f); + rwData->distTimer = 0; + rwData->is1200 = 1200; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump3.s") + if (roData->interfaceFlags & NORMAL3_FLAG_1) { + rwData->yawTimer = 6; + Camera_SetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + } else { + rwData->yawTimer = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump4.s") + camera->animState = 1; + D_801EDC30[camera->camId].timer = 0; + rwData->flag = NORMAL3_RW_FLAG; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump0.s") + if (rwData->distTimer != 0) { + rwData->distTimer--; + } + sp90 = ((camera->speedRatio * 3.0f) + 1.0f) * 0.25f * 0.5f; + sp8C = temp_f2 = camera->speedRatio * 0.2f; + + if (D_801EDC30[camera->camId].timer != 0) { + camera->yawUpdateRateInv = Camera_ScaledStepToCeilF( + (D_801EDC30[camera->camId].timer * 2) + roData->yawUpdateRateInv, camera->yawUpdateRateInv, sp90, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF((D_801EDC30[camera->camId].timer * 2) + 16.0f, + camera->pitchUpdateRateInv, sp8C, 0.1f); + D_801EDC30[camera->camId].timer--; + } else { + camera->yawUpdateRateInv = + Camera_ScaledStepToCeilF(roData->yawUpdateRateInv, camera->yawUpdateRateInv, sp90, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(16.0f, camera->pitchUpdateRateInv, sp8C, 0.1f); + } + + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->yOffsetUpdateRate, sp90, 0.001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->xzOffsetUpdateRate, sp8C, 0.0001f); + camera->fovUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->fovUpdateRate, sp8C, 0.0001f); + + phi_v1_2 = Camera_GetPitchAdjFromFloorHeightDiffs(camera, BINANG_ROT180(sp70.yaw), rwData->flag & NORMAL3_RW_FLAG); + temp_f2 = ((1.0f / roData->pitchUpdateRateInv) * 0.5f) * (1.0f - camera->speedRatio); + rwData->curPitch = + Camera_ScaledStepToCeilS(phi_v1_2, rwData->curPitch, ((1.0f / roData->pitchUpdateRateInv) * 0.5f) + temp_f2, 5); + + if ((roData->interfaceFlags & NORMAL3_FLAG_6) || (player->rideActor == NULL)) { + Camera_CalcAtDefault(camera, &sp68, roData->yOffset, 1); + } else { + Camera_CalcAtForHorse(camera, &sp68, roData->yOffset, &rwData->yPosOffset, 1); + } + + sp88 = (roData->distMax + roData->distMin) * 0.5f; + OLib_Vec3fDiffToVecGeo(&sp80, at, eyeNext); + temp_f2 = Camera_ClampDist1(camera, sp80.r, roData->distMin, roData->distMax, rwData->distTimer); + + phi_f2 = sp88 - temp_f2; + phi_f2 *= 0.002f; + camera->dist = sp80.r = temp_f2 + phi_f2; + + if (roData->interfaceFlags & NORMAL3_FLAG_7) { + sp80.pitch = Camera_ScaledStepToCeilS(camera->focalActor->focus.rot.x - rwData->curPitch, sp68.pitch, 0.25f, 5); + } else { + sp62 = roData->pitchTarget - rwData->curPitch; + sp80.pitch = Camera_ScaledStepToCeilS(sp62, sp68.pitch, 1.0f / camera->pitchUpdateRateInv, 5); + } + + sp80.pitch = CLAMP_MAX(sp80.pitch, DEG_TO_BINANG(79.655f)); + + if (sp80.pitch < -DEG_TO_BINANG(29.995f)) { + sp80.pitch = -DEG_TO_BINANG(29.995f); + } + + if (roData->interfaceFlags & NORMAL3_FLAG_7) { + sp62 = BINANG_SUB(camera->focalActor->focus.rot.y, BINANG_ROT180(sp68.yaw)); + temp_f2 = 1.0f; + } else { + sp62 = BINANG_SUB(focalActorPosRot->rot.y, BINANG_ROT180(sp68.yaw)); + OLib_Vec3fToVecGeo(&sp78, &camera->unk_0F0); + phi_v1_2 = focalActorPosRot->rot.y - sp78.yaw; + if (phi_v1_2 < 0) { + phi_v1_2 *= -1; + } + + if (phi_v1_2 < 0x555A) { + temp_f2 = 1.0f; + } else { + temp_f2 = ((f32)0x8000 - phi_v1_2) / (f32)0x2AA6; + } + } + + sp90 = (sp62 * ((SQ(camera->speedRatio) * 0.8f) + 0.2f) * temp_f2) / camera->yawUpdateRateInv; + if ((Camera_fabsf(sp90) > 150.0f) && (camera->speedRatio > 0.05f)) { + sp80.yaw = sp68.yaw + sp90; + } + + if (rwData->yawTimer > 0) { + sp80.yaw += rwData->yawUpdateRate; + rwData->yawTimer--; + if (rwData->yawTimer == 0) { + Camera_UnsetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + } + } + + OLib_AddVecGeoToVec3f(eyeNext, at, &sp80); + + if (camera->status == CAM_STATUS_ACTIVE) { + *eye = *eyeNext; + func_800CBFA4(camera, at, eye, 0); + } else { + *eye = *eyeNext; + } + + camera->fov = Camera_ScaledStepToCeilF(roData->fovTarget, camera->fov, camera->fovUpdateRate, 0.1f); + + if (roData->interfaceFlags & NORMAL3_FLAG_5) { + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.05f, 5); + } else { + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.1f, 5); + } + + camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->maxAtLERPScale); + rwData->flag &= ~NORMAL3_RW_FLAG; + + return 1; +} + +/** + * Used for the unknown Naname setting. + * Identical to Normal1 except reads camera scene data to apply a camera roll + */ +s32 Camera_Normal4(Camera* camera) { + BgCamFuncData* bgCamFuncData; + s16 roll; + + if (RELOAD_PARAMS(camera)) { + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + D_801EDBF0 = bgCamFuncData->rot.z; + } + + roll = camera->roll; + Camera_Normal1(camera); + camera->roll = Camera_ScaledStepToCeilS(D_801EDBF0, roll, 0.05f, 5); + + return 1; +} + +s32 Camera_Normal0(Camera* camera) { + f32 phi_f0; + f32 yNormal; + s32 pad; + f32 playerHeight; + f32 spA4; + f32 spA0; + VecGeo sp98; + VecGeo sp90; + VecGeo sp88; + VecGeo sp80; + VecGeo sp78; + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + s16 temp_v1_2; + s16 phi_a1; + s16 phi_a0; + BgCamFuncData* bgCamFuncData; + f32 new_var; + Normal0ReadOnlyData* roData = &camera->paramData.norm0.roData; + Normal0ReadWriteData* rwData = &camera->paramData.norm0.rwData; + + playerHeight = Player_GetHeight((Player*)camera->focalActor); + yNormal = 0.8f - ((68.0f / playerHeight) * -0.2f); + + if (!RELOAD_PARAMS(camera)) { + } else { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->unk_00 = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal; + roData->unk_04 = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal; + roData->unk_08 = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal; + roData->unk_1C = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values)); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_14 = GET_NEXT_RO_DATA(values); + roData->unk_18 = GET_NEXT_SCALED_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + if (RELOAD_PARAMS(camera)) { + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + Camera_Vec3sToVec3f(&rwData->unk_00, &bgCamFuncData->pos); + rwData->unk_20 = bgCamFuncData->rot.x; + rwData->unk_22 = bgCamFuncData->rot.y; + rwData->unk_24 = focalActorPosRot->pos.y; + if (bgCamFuncData->fov == -1) { + rwData->unk_1C = roData->unk_14; + } else { + if (bgCamFuncData->fov > 360) { + phi_f0 = CAM_RODATA_UNSCALE(bgCamFuncData->fov); + } else { + phi_f0 = bgCamFuncData->fov; + } + rwData->unk_1C = phi_f0; + } + + if (bgCamFuncData->unk_0E == -1) { + rwData->unk_2C = 0; + } else { + rwData->unk_2C = bgCamFuncData->unk_0E; + } + + rwData->unk_18 = 0.0f; + rwData->unk_28 = 120.0f; + + if (roData->interfaceFlags & NORMAL0_FLAG_2) { + sp88.pitch = rwData->unk_20; + sp88.yaw = rwData->unk_22; + sp88.r = 100.0f; + OLib_VecGeoToVec3f(&rwData->unk_0C, &sp88); + } + camera->animState = 1; + camera->yawUpdateRateInv = 50.0f; + } else { + if (func_800CB950(camera)) { + rwData->unk_24 = focalActorPosRot->pos.y; + } + //! FAKE: + if (1) {} + } + + OLib_Vec3fDiffToVecGeo(&sp80, at, eye); + OLib_Vec3fDiffToVecGeo(&sp78, at, eyeNext); + + camera->speedRatio *= 0.50f; + spA4 = camera->speedRatio * 0.5f; + spA0 = camera->speedRatio * 0.2f; + + camera->yawUpdateRateInv = + Camera_ScaledStepToCeilF(roData->unk_0C, camera->yawUpdateRateInv * camera->speedRatio, 0.5f, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(16.0f, camera->pitchUpdateRateInv, spA0, 0.1f); + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->yOffsetUpdateRate, spA4, 0.0001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->xzOffsetUpdateRate, spA0, 0.0001f); + camera->fovUpdateRate = Camera_ScaledStepToCeilF(0.05, camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.0001f); + + if (!(roData->interfaceFlags & NORMAL0_FLAG_7)) { + Camera_CalcAtDefault(camera, &sp78, roData->unk_00, roData->interfaceFlags & NORMAL0_FLAG_0); + rwData->unk_28 = 120.0f; + } else { + Camera_CalcAtForScreen(camera, &sp78, roData->unk_00, &rwData->unk_24, rwData->unk_28); + if (rwData->unk_28 > 20.0f) { + rwData->unk_28 -= 0.2f; + } + } + + if (roData->interfaceFlags & NORMAL0_FLAG_2) { + rwData->unk_00.x = focalActorPosRot->pos.x + rwData->unk_0C.x; + rwData->unk_00.z = focalActorPosRot->pos.z + rwData->unk_0C.z; + } + + rwData->unk_00.y = focalActorPosRot->pos.y; + OLib_Vec3fDiffToVecGeo(&sp88, &rwData->unk_00, at); + OLib_Vec3fDiffToVecGeo(&sp90, at, eyeNext); + + if (rwData->unk_2C & 2) { + phi_a1 = rwData->unk_22; + } else { + phi_a1 = roData->unk_1C; + } + + temp_v1_2 = sp90.yaw - sp88.yaw; + if (((phi_a1 <= 0x4000) && (phi_a1 < ABS(temp_v1_2))) || ((phi_a1 > 0x4000) && (ABS(temp_v1_2) < phi_a1))) { + //! FAKE: Needed to swap v0/v1 + if (1) {} + if (1) {} + if (1) {} + if (1) {} + + //! FAKE: Needed because the *1.0f isn't being multiplied + new_var = 1.0f; + + if (temp_v1_2 < 0) { + phi_a0 = -phi_a1; + } else { + phi_a0 = phi_a1; + } + + phi_a0 += sp88.yaw; + sp98.yaw = Camera_ScaledStepToCeilS(phi_a0, sp80.yaw, + (1.0f / camera->yawUpdateRateInv) * new_var * camera->speedRatio, 5); + if (rwData->unk_2C & 1) { + sp98.pitch = Camera_CalcDefaultPitch(camera, sp78.pitch, rwData->unk_20, 0); + } else { + sp98.pitch = sp80.pitch; + } + } else { + sp98 = sp90; + } + + camera->dist = sp98.r = Camera_ClampDist1(camera, sp90.r, roData->unk_04, roData->unk_08, 0); + if (!(rwData->unk_2C & 1)) { + if (sp98.pitch > 0xE38) { // 20 degrees + sp98.pitch += ((s16)(0xE38 - sp98.pitch) >> 2); + } + if (sp98.pitch < 0) { + sp98.pitch += ((s16)(-0x38E - sp98.pitch) >> 2); + } + } + OLib_AddVecGeoToVec3f(eyeNext, at, &sp98); + + *eye = *eyeNext; + + if (camera->status == CAM_STATUS_ACTIVE) { + if ((camera->play->envCtx.skyboxDisabled == 0) || (roData->interfaceFlags & NORMAL0_FLAG_4)) { + Camera_BgCheck(camera, at, eye); + } else { + func_800CBFA4(camera, at, eye, 3); + OLib_Vec3fDiffToVecGeo(&sp98, eye, at); + camera->inputDir.x = sp98.pitch; + camera->inputDir.y = sp98.yaw; + camera->inputDir.z = 0; + } + } + + camera->fov = Camera_ScaledStepToCeilF(rwData->unk_1C, camera->fov, camera->fovUpdateRate, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.5f, 5); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->unk_18); + + return 1; +} + +/** + * Used for targeting + */ +s32 Camera_Parallel1(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + Vec3f spB0; + Vec3f spA4; + f32 spA0; + f32 sp9C; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + VecGeo sp90; + VecGeo sp88; + VecGeo sp80; + VecGeo sp78; + BgCamFuncData* bgCamFuncData; + s16 sp72; + s16 tangle; + Parallel1ReadOnlyData* roData = &camera->paramData.para1.roData; + Parallel1ReadWriteData* rwData = &camera->paramData.para1.rwData; + s32 parallelFlagCond; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + s16 new_var2; + s16 phi_a0; + s32 phi_a0_2; + CameraModeValue* values; + f32 yNormal; + + if (!RELOAD_PARAMS(camera)) { + } else { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->unk_00 = + GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + roData->unk_04 = + GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + roData->unk_08 = + GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + roData->unk_20 = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values)); + roData->unk_22 = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values)); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_RO_DATA(values); + roData->unk_18 = GET_NEXT_SCALED_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + roData->unk_1C = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_24 = GET_NEXT_RO_DATA(values); + rwData->unk_00 = roData->unk_04; + } + + OLib_Vec3fDiffToVecGeo(&sp80, at, eye); + OLib_Vec3fDiffToVecGeo(&sp78, at, eyeNext); + Camera_GetFocalActorPos(&spA4, camera); + + switch (camera->animState) { + case 20: + if ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == 0) { + Camera_SetUpdateRatesFastYaw(camera); + } + // fallthrough + case 0: + case 10: + if ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) { + rwData->unk_10 = focalActorPosRot->pos; + } else { + camera->xzOffsetUpdateRate = 0.5f; + camera->yOffsetUpdateRate = 0.5f; + } + + if ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + PARALLEL1_FLAG_3) { + rwData->unk_10 = camera->focalActorPosRot.pos; + } + + rwData->timer1 = 200.0f; + + if ((2.0f * roData->unk_04) < camera->dist) { + camera->dist = 2.0f * roData->unk_04; + sp78.r = camera->dist; + sp80.r = sp78.r; + OLib_AddVecGeoToVec3f(eye, at, &sp80); + *eyeNext = *eye; + } + + rwData->unk_1C = 0; + + if (roData->interfaceFlags & PARALLEL1_FLAG_2) { + rwData->timer2 = 20; + } else { + rwData->timer2 = 6; + } + + if ((camera->focalActor == &GET_PLAYER(camera->play)->actor) && (camera->mode == CAM_MODE_CHARGE)) { + rwData->timer2 = 30; + if (((Player*)camera->focalActor)->transformation == PLAYER_FORM_DEKU) { + roData->unk_24 = -1; + } + } + + if ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_1)) { + rwData->timer2 = 1; + yNormal = 0.8f - ((68.0f / focalActorHeight) * -0.2f); + + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + + rwData->unk_20 = bgCamFuncData->rot.x; + rwData->unk_1E = bgCamFuncData->rot.y; + rwData->unk_08 = (bgCamFuncData->fov == -1) ? roData->unk_14 + : (bgCamFuncData->fov > 360) ? CAM_RODATA_UNSCALE(bgCamFuncData->fov) + : bgCamFuncData->fov; + rwData->unk_00 = (bgCamFuncData->unk_0E == -1) + ? roData->unk_04 + : CAM_RODATA_UNSCALE(bgCamFuncData->unk_0E) * focalActorHeight * yNormal; + //! FAKE + dummy:; + } else { + rwData->unk_08 = roData->unk_14; + rwData->unk_00 = roData->unk_04; + } + + rwData->timer3 = roData->unk_24; + rwData->unk_04 = focalActorPosRot->pos.y - camera->unk_0F0.y; + rwData->unk_26 = 1; + camera->animState = 1; + sCameraInterfaceFlags = roData->interfaceFlags; + break; + } + + if (rwData->timer2 != 0) { + switch (roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) { + case PARALLEL1_FLAG_1: + case (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1): + rwData->unk_1E = BINANG_ROT180(camera->focalActorPosRot.rot.y) + roData->unk_22; + rwData->unk_20 = roData->unk_20; + break; + + case PARALLEL1_FLAG_2: + rwData->unk_1E = roData->unk_22; + rwData->unk_20 = roData->unk_20; + break; + + case (PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1): + if (rwData->timer3 == 1) { + OLib_Vec3fDiffToVecGeo(&sp88, &rwData->unk_10, &spA4); + rwData->unk_1E = ((ABS(BINANG_SUB(sp88.yaw, sp80.yaw)) < 0x3A98) || Camera_IsClimbingLedge(camera)) + ? sp80.yaw + : sp80.yaw + (s16)((BINANG_SUB(sp88.yaw, sp80.yaw) >> 2) * 3); + } + rwData->unk_20 = roData->unk_20; + break; + + case PARALLEL1_FLAG_3: + rwData->unk_1E = sp80.yaw; + rwData->unk_20 = roData->unk_20; + break; + + case (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_1): + break; + + default: + rwData->unk_1E = sp78.yaw + roData->unk_22; + rwData->unk_20 = roData->unk_20; + break; + } + } else if (roData->interfaceFlags & PARALLEL1_FLAG_5) { + rwData->unk_1E = BINANG_ROT180(camera->focalActorPosRot.rot.y) + roData->unk_22; + } + + if (camera->animState == 21) { + camera->animState = 1; + } else if (camera->animState == 11) { + camera->animState = 1; + } + + spA0 = camera->speedRatio * 0.5f; + sp9C = camera->speedRatio * 0.2f; + + if (((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) || + ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == PARALLEL1_FLAG_3) || + (roData->interfaceFlags & PARALLEL1_FLAG_5)) { + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, 0.5f, 0.1f); + camera->yawUpdateRateInv = Camera_ScaledStepToCeilF(roData->unk_0C, camera->yawUpdateRateInv, 0.5f, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); + } else { + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, spA0, 0.1f); + camera->yawUpdateRateInv = Camera_ScaledStepToCeilF(roData->unk_0C, camera->yawUpdateRateInv, spA0, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(2.0f, camera->pitchUpdateRateInv, sp9C, 0.1f); + } + + if ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) { + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.1f, camera->yOffsetUpdateRate, spA0, 0.0001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.1f, camera->xzOffsetUpdateRate, sp9C, 0.0001f); + } else if (roData->interfaceFlags & PARALLEL1_FLAG_7) { + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.5f, camera->yOffsetUpdateRate, spA0, 0.0001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.5f, camera->xzOffsetUpdateRate, sp9C, 0.0001f); + } else { + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->yOffsetUpdateRate, spA0, 0.0001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->xzOffsetUpdateRate, sp9C, 0.0001f); + } + + // TODO: Extra trailing 0 in 0.050f needed? + camera->fovUpdateRate = + Camera_ScaledStepToCeilF(0.050f, camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.0001f); + + if (roData->interfaceFlags & PARALLEL1_FLAG_0) { + tangle = Camera_GetPitchAdjFromFloorHeightDiffs(camera, BINANG_ROT180(sp80.yaw), rwData->unk_26 = 1); + spA0 = ((1.0f / roData->unk_10)); + spA0 *= 0.6f; + sp9C = ((1.0f / roData->unk_10) * 0.4f) * (1.0f - camera->speedRatio); + rwData->unk_1C = Camera_ScaledStepToCeilS(tangle, rwData->unk_1C, spA0 + sp9C, 5); + } else { + rwData->unk_1C = 0; + } + + if (func_800CB950(camera) || (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_1000) || + (((Player*)camera->focalActor)->stateFlags3 & PLAYER_STATE3_100)) { + rwData->unk_04 = camera->focalActorPosRot.pos.y; + sp72 = false; + } else { + sp72 = true; + } + + if ((((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_4000) || + (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_4) || + ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1))) { + spB0 = spA4; + spB0.y += ((focalActorHeight * 0.6f) + roData->unk_00); + Camera_ScaledStepToCeilVec3f(&spB0, at, camera->xzOffsetUpdateRate, camera->yOffsetUpdateRate, 0.0001f); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + } else if ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) { + spB0 = focalActorPosRot->pos; + spB0.y += focalActorHeight + roData->unk_00; + Camera_ScaledStepToCeilVec3f(&spB0, at, camera->xzOffsetUpdateRate, camera->yOffsetUpdateRate, 0.0001f); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + } else if (rwData->timer2 != 0) { + Camera_CalcAtDefault(camera, &sp78, roData->unk_00, 0); + rwData->timer1 = 200.0f; + } else if (!(roData->interfaceFlags & PARALLEL1_FLAG_7) && !sp72) { + Camera_CalcAtForParallel(camera, &sp78, roData->unk_00, roData->unk_08, &rwData->unk_04, + roData->interfaceFlags & (PARALLEL1_FLAG_6 | PARALLEL1_FLAG_0)); + rwData->timer1 = 200.0f; + } else { + Camera_CalcAtForScreen(camera, &sp78, roData->unk_00, &rwData->unk_04, rwData->timer1); + if (rwData->timer1 > 10.0f) { + rwData->timer1--; + } + } + + camera->dist = Camera_ScaledStepToCeilF(rwData->unk_00, camera->dist, 1.0f / camera->rUpdateRateInv, 0.1f); + + if (rwData->timer2 != 0) { + if (rwData->timer3 <= 0) { + if (rwData->timer3 == 0) { + Camera_SetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + } + + tangle = ((rwData->timer2 + 1) * rwData->timer2) >> 1; + sp90.yaw = sp80.yaw + ((BINANG_SUB(rwData->unk_1E, sp80.yaw) / tangle) * rwData->timer2); + phi_a0 = ((roData->interfaceFlags & PARALLEL1_FLAG_0) ? BINANG_SUB(rwData->unk_20, rwData->unk_1C) + : rwData->unk_20); + new_var2 = BINANG_SUB(phi_a0, sp80.pitch); + sp90.pitch = sp80.pitch + ((new_var2 / tangle) * rwData->timer2); + sp90.r = camera->dist; + rwData->timer2--; + } else { + sp90 = sp80; + sp90.r = camera->dist; + } + } else { + OLib_Vec3fDiffToVecGeo(&sp90, at, eyeNext); + sp90.r = camera->dist; + + if (roData->interfaceFlags & PARALLEL1_FLAG_1) { + sp90.yaw = Camera_ScaledStepToCeilS(rwData->unk_1E, sp78.yaw, 1.0f / camera->yawUpdateRateInv, 0xC8); + } + + parallelFlagCond = (roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)); + + if (roData->interfaceFlags & PARALLEL1_FLAG_0) { + phi_a0 = (rwData->unk_20 - rwData->unk_1C); + } else { + phi_a0 = rwData->unk_20; + } + + if (parallelFlagCond == (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) { + spA0 = CLAMP_MAX(camera->speedRatio, 1.0f); + phi_a0 = (sp90.pitch * spA0) + (phi_a0 * (1.0f - spA0)); + sp90.pitch = Camera_ScaledStepToCeilS(phi_a0, sp78.pitch, 1.0f / camera->pitchUpdateRateInv, 5); + } else if (parallelFlagCond != PARALLEL1_FLAG_3) { + sp90.pitch = Camera_ScaledStepToCeilS(phi_a0, sp78.pitch, 1.0f / camera->pitchUpdateRateInv, 5); + } + + if (sp90.pitch > DEG_TO_BINANG(79.655f)) { + sp90.pitch = DEG_TO_BINANG(79.655f); + } + + if (sp90.pitch < -DEG_TO_BINANG(29.995f)) { + sp90.pitch = -DEG_TO_BINANG(29.995f); + } + } + + if (rwData->timer3 > 0) { + rwData->timer3--; + } + + OLib_AddVecGeoToVec3f(eyeNext, at, &sp90); + + if (camera->status == CAM_STATUS_ACTIVE) { + if ((camera->play->envCtx.skyboxDisabled == 0) || (roData->interfaceFlags & PARALLEL1_FLAG_4)) { + spB0 = *at; + if ((((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_4000) || + (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_4) || + ((roData->interfaceFlags & (PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1)) == + (PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1))) { + spB0.y += focalActorHeight; + } + *eye = *eyeNext; + func_800CBFA4(camera, &spB0, eye, 0); + } else { + *eye = *eyeNext; + func_800CBFA4(camera, at, eye, 3); + } + + if (rwData->timer2 != 0) { + sUpdateCameraDirection = true; + } else { + sUpdateCameraDirection = false; + } + } + + camera->fov = Camera_ScaledStepToCeilF(rwData->unk_08, camera->fov, camera->fovUpdateRate, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.5f, 5); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, sp72 ? roData->unk_1C : roData->unk_18); + rwData->unk_26 &= ~1; + + return 1; +} + +/** + * Unused Camera Maze Setting + */ +s32 Camera_Parallel2(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Parallel3(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Parallel4(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Parallel0(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Jump1(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Camera for climbing structures + */ +s32 Camera_Jump2(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + Vec3f spC8; + Vec3f spBC; + VecGeo spB4; + VecGeo spAC; + VecGeo spA4; + VecGeo sp9C; + s16 temp_t2; + s16 yawDiff; + s32 pad; + f32 sp90; + f32 sp8C; + s32 sp88; + CameraCollision sp60; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + Jump2ReadOnlyData* roData = &camera->paramData.jump2.roData; + Jump2ReadWriteData* rwData = &camera->paramData.jump2.rwData; + f32 phi_f2; + f32 yNormal; // used twice + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + f32 temp_f16; + + if (RELOAD_PARAMS(camera)) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + yNormal = 0.8f - (-0.2f * (68.0f / focalActorHeight)); + + if (camera->unk_0F0.y > 0.0f) { + phi_f2 = -10.0f; + } else { + phi_f2 = 10.0f; + } + + roData->unk_00 = CAM_RODATA_UNSCALE(phi_f2 + GET_NEXT_RO_DATA(values)) * focalActorHeight * yNormal; + roData->unk_04 = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * yNormal; + roData->unk_08 = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * yNormal; + roData->unk_0C = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->unk_1C = GET_NEXT_SCALED_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + OLib_Vec3fDiffToVecGeo(&sp9C, at, eye); + OLib_Vec3fDiffToVecGeo(&spA4, at, eyeNext); + + sCameraInterfaceFlags = roData->interfaceFlags; + + if (RELOAD_PARAMS(camera)) { + spC8 = focalActorPosRot->pos; + rwData->unk_00 = Camera_GetFloorY(camera, &spC8); + rwData->unk_04 = spA4.yaw; + rwData->unk_06 = 0; + + if (rwData->unk_00 == BGCHECK_Y_MIN) { + rwData->unk_0A = -1; + rwData->unk_00 = focalActorPosRot->pos.y - 1000.0f; + } else if ((focalActorPosRot->pos.y - rwData->unk_00) < focalActorHeight) { + rwData->unk_0A = 1; + } else { + rwData->unk_0A = -1; + } + + yawDiff = BINANG_SUB(BINANG_ROT180(focalActorPosRot->rot.y), spA4.yaw); + rwData->unk_06 = ((yawDiff / 6) / 4) * 3; + + if (roData->interfaceFlags & JUMP2_FLAG_1) { + rwData->unk_08 = 10; + } else { + rwData->unk_08 = 10000; + } + + focalActorPosRot->pos.x -= camera->unk_0F0.x; + focalActorPosRot->pos.y -= camera->unk_0F0.y; + focalActorPosRot->pos.z -= camera->unk_0F0.z; + + rwData->timer = 6; + camera->animState++; + camera->atLerpStepScale = roData->unk_1C; + } + + sp90 = camera->speedRatio * 0.5f; + sp8C = camera->speedRatio * 0.2f; + + camera->yawUpdateRateInv = Camera_ScaledStepToCeilF(roData->unk_10, camera->yawUpdateRateInv, sp90, 0.1f); + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(roData->unk_14, camera->yOffsetUpdateRate, sp90, 0.0001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->xzOffsetUpdateRate, sp8C, 0.0001f); + camera->fovUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->fovUpdateRate, camera->speedRatio * .05f, 0.0001f); + camera->rUpdateRateInv = 1800.0f; + + Camera_CalcAtDefault(camera, &spA4, roData->unk_00, 0); + OLib_Vec3fDiffToVecGeo(&spB4, at, eye); + + //! FAKE: Unused + yNormal = roData->unk_04; + + phi_f2 = roData->unk_08 + (roData->unk_08 * roData->unk_0C); + temp_f16 = roData->unk_04 - (roData->unk_04 * roData->unk_0C); + + if (spB4.r > phi_f2) { + spB4.r = phi_f2; + } else if (spB4.r < temp_f16) { + spB4.r = temp_f16; + } + + yawDiff = BINANG_SUB(BINANG_ROT180(focalActorPosRot->rot.y), spB4.yaw); + if (rwData->timer != 0) { + rwData->unk_04 = BINANG_ROT180(focalActorPosRot->rot.y); + rwData->timer--; + spB4.yaw = Camera_ScaledStepToCeilS(rwData->unk_04, spA4.yaw, 0.5f, 5); + } else if (rwData->unk_08 < ABS(yawDiff)) { + temp_t2 = BINANG_ROT180(focalActorPosRot->rot.y); + spB4.yaw = Camera_ScaledStepToFloorS((yawDiff < 0) ? (temp_t2 + rwData->unk_08) : (temp_t2 - rwData->unk_08), + spA4.yaw, 0.1f, 1); + } else { + spB4.yaw = Camera_ScaledStepToCeilS(spB4.yaw, spA4.yaw, 0.25f, 5); + } + + spC8.x = focalActorPosRot->pos.x + (Math_SinS(focalActorPosRot->rot.y) * 25.0f); + spC8.y = focalActorPosRot->pos.y + (focalActorHeight * 2.2f); + spC8.z = focalActorPosRot->pos.z + (Math_CosS(focalActorPosRot->rot.y) * 25.0f); + + yNormal = Camera_GetFloorYNorm(camera, &spBC, &spC8, &sp88); + if (camera->focalActor->bgCheckFlags & 0x10) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->pitchUpdateRateInv, 0.2f, 0.1f); + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, 0.2f, 0.1f); + spB4.pitch = Camera_ScaledStepToCeilS(-DEG_TO_BINANG(27.47f), spA4.pitch, 0.2f, 5); + } else if ((yNormal != BGCHECK_Y_MIN) && (focalActorPosRot->pos.y < yNormal)) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->pitchUpdateRateInv, 0.2f, 0.1f); + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, 0.2f, 0.1f); + if (camera->unk_0F0.y > 1.0f) { + spB4.pitch = Camera_ScaledStepToCeilS(0x1F4, spA4.pitch, 1.0f / camera->pitchUpdateRateInv, 5); + } + } else if ((focalActorPosRot->pos.y - rwData->unk_00) < focalActorHeight) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->pitchUpdateRateInv, 0.2f, 0.1f); + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(20.0f, camera->rUpdateRateInv, 0.2f, 0.1f); + if (camera->unk_0F0.y > 1.0f) { + spB4.pitch = Camera_ScaledStepToCeilS(0x1F4, spA4.pitch, 1.0f / camera->pitchUpdateRateInv, 5); + } + } else { + camera->pitchUpdateRateInv = 100.0f; + camera->rUpdateRateInv = 100.0f; + } + + spB4.pitch = CLAMP_MAX(spB4.pitch, DEG_TO_BINANG(60.43f)); + spB4.pitch = CLAMP_MIN(spB4.pitch, -DEG_TO_BINANG(60.43f)); + + OLib_AddVecGeoToVec3f(eyeNext, at, &spB4); + sp60.pos = *eyeNext; + + if (func_800CBC84(camera, at, &sp60, 0) != 0) { + spC8 = sp60.pos; + spAC.pitch = 0; + spAC.r = spB4.r; + spAC.yaw = spB4.yaw; + OLib_AddVecGeoToVec3f(&sp60.pos, at, &spAC); + if (func_800CBC84(camera, at, &sp60, 0) != 0) { + *eye = spC8; + } else { + spB4.pitch = Camera_ScaledStepToCeilS(0, spB4.pitch, 0.2f, 5); + OLib_AddVecGeoToVec3f(eye, at, &spB4); + func_800CBFA4(camera, at, eye, 0); + } + } else { + *eye = *eyeNext; + } + + camera->dist = spB4.r; + camera->fov = Camera_ScaledStepToCeilF(roData->unk_18, camera->fov, camera->fovUpdateRate, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.5f, 5); + + return true; +} + +/** + * Used for water-based camera settings + * e.g. Gyorg, Pinnacle Rock, whirlpool, water + */ +s32 Camera_Jump3(Camera* camera) { + Vec3f* sp48 = &camera->eye; + Vec3f* sp44 = &camera->at; + Vec3f* sp40 = &camera->eyeNext; + f32 spD0; + f32 spCC; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + f32 phi_f0; + f32 spC0; + Vec3f spB4; + VecGeo spAC; + CameraModeValue* values; + f32 phi_f14; + VecGeo sp9C; + VecGeo sp94; + f32 phi_f2_2; + f32 temp_f0; + f32 temp1; + f32 pad; + Jump3ReadOnlyData* roData = &camera->paramData.jump3.roData; + Jump3ReadWriteData* rwData = &camera->paramData.jump3.rwData; + f32 focalActorHeight; + PosRot focalActorFocus; + f32 sp60; + f32 sp5C; + s32 sp58; + + focalActorHeight = Camera_GetFocalActorHeight(camera); + Actor_GetFocus(&focalActorFocus, camera->focalActor); + sp60 = camera->waterYPos - sp48->y; + + sp58 = false; + + if (RELOAD_PARAMS(camera)) { + rwData->unk_0A = camera->mode; + rwData->timer2 = 0; + } + + if (camera->mode == CAM_MODE_NORMAL) { + if ((camera->focalActor->bgCheckFlags & 0x10) || (rwData->timer2 != 0)) { + if (rwData->unk_0A != 0xF) { + rwData->unk_0A = 0xF; + sp58 = true; + rwData->timer2 = 10; + } + } else if (sp60 < 50.0f) { + if (rwData->unk_0A != 0) { + rwData->unk_0A = 0; + sp58 = true; + } + } else if (Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight) < 11.0f) { + if (rwData->unk_0A != 5) { + rwData->unk_0A = 5; + sp58 = true; + } + } else if ((sp60 > 250.0f) && (rwData->unk_0A != 0x1A)) { + rwData->unk_0A = 0x1A; + sp58 = true; + } + } + + if (rwData->timer2 != 0) { + rwData->timer2--; + } + + OLib_Vec3fDiffToVecGeo(&sp9C, sp44, sp48); + OLib_Vec3fDiffToVecGeo(&sp94, sp44, sp40); + + if (!RELOAD_PARAMS(camera) && !sp58) { + } else { + values = sCameraSettings[camera->setting].cameraModes[rwData->unk_0A].values; + + sp5C = 0.8f - (-0.2f * (68.0f / focalActorHeight)); + spD0 = focalActorHeight * 0.01f * sp5C; + + roData->unk_00 = GET_NEXT_RO_DATA(values) * spD0; + roData->unk_04 = GET_NEXT_RO_DATA(values) * spD0; + roData->unk_08 = GET_NEXT_RO_DATA(values) * spD0; + roData->unk_20 = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values)); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->unk_1C = GET_NEXT_SCALED_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + case 0: + rwData->unk_10 = 0x1000; + // fallthrough + case 10: + case 20: + rwData->unk_00 = camera->focalActorFloorHeight; + D_801EDC30[camera->camId].yaw = D_801EDC30[camera->camId].pitch = D_801EDC30[camera->camId].unk_64 = 0; + rwData->timer1 = 10; + D_801EDC30[camera->camId].swingUpdateRate = roData->unk_0C; + camera->animState++; + D_801EDC30[camera->camId].timer = 0; + break; + + default: + if (rwData->timer1 != 0) { + rwData->timer1--; + } + break; + } + + spC0 = focalActorFocus.pos.y - focalActorPosRot->pos.y; + spB4 = *sp48; + + spD0 = camera->speedRatio * 0.5f; + spCC = camera->speedRatio * 0.2f; + + temp_f0 = (D_801EDC30[camera->camId].unk_64 == 1) ? 0.5f : spD0; + + if (D_801EDC30[camera->camId].timer != 0) { + camera->yawUpdateRateInv = + Camera_ScaledStepToCeilF((D_801EDC30[camera->camId].swingUpdateRate + D_801EDC30[camera->camId].timer * 2), + camera->yawUpdateRateInv, spD0, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF((40.0f + D_801EDC30[camera->camId].timer * 2), + camera->pitchUpdateRateInv, spCC, 0.1f); + D_801EDC30[camera->camId].timer--; + } else { + camera->yawUpdateRateInv = Camera_ScaledStepToCeilF(D_801EDC30[camera->camId].swingUpdateRate, + camera->yawUpdateRateInv, temp_f0, 0.1f); + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(40.0f, camera->pitchUpdateRateInv, spCC, 0.1f); + } + + if (roData->interfaceFlags & JUMP3_FLAG_7) { + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.01f, camera->yOffsetUpdateRate, spD0, 0.0001f); + sp5C = sqrtf((camera->unk_0F0.x * camera->unk_0F0.x) + (camera->unk_0F0.z * camera->unk_0F0.z)) / + Camera_GetRunSpeedLimit(camera); + camera->speedRatio = OLib_ClampMaxDist(sp5C / Camera_GetRunSpeedLimit(camera), 1.8f); + spCC = camera->speedRatio * 0.2f; + } else { + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->yOffsetUpdateRate, spD0, 0.0001f); + } + + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.05f, camera->xzOffsetUpdateRate, spCC, 0.0001f); + camera->fovUpdateRate = + Camera_ScaledStepToCeilF(0.050f, camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.0001f); + + if (sp60 < 50.0f) { + sp5C = camera->waterYPos - spC0; + + Camera_CalcAtForScreen(camera, &sp94, roData->unk_00, &sp5C, + ((sp60 < 0.0f) ? 1.0f : 1.0f - (sp60 / 50.0f)) * 50.0f); + } else { + Camera_CalcAtDefault(camera, &sp94, roData->unk_00, roData->interfaceFlags); + } + + OLib_Vec3fDiffToVecGeo(&spAC, sp44, sp40); + spAC.r = Camera_ClampDist1(camera, spAC.r, roData->unk_04, roData->unk_08, rwData->timer1); + camera->dist = spAC.r; + + if (!(Camera_fabsf(focalActorPosRot->pos.y - camera->focalActorFloorHeight) < 10.0f) && + !(Camera_fabsf(focalActorFocus.pos.y - camera->waterYPos) < 50.f)) { + camera->pitchUpdateRateInv = 100.0f; + } + + if (roData->interfaceFlags & JUMP3_FLAG_5) { + spD0 = CLAMP_MAX(camera->speedRatio * 1.3f, 0.6f); + + //! FAKE: spCC = + spAC.pitch = Camera_ScaledStepToCeilS( + (spAC.pitch * spD0) + (roData->unk_20 * (1.0f - spD0)), sp94.pitch, + 1.0f / (spCC = ((camera->pitchUpdateRateInv + 1.0f) - (camera->pitchUpdateRateInv * spD0))), 5); + } else if (D_801EDC30[camera->camId].unk_64 == 1) { + spAC.yaw = + Camera_ScaledStepToCeilS(D_801EDC30[camera->camId].yaw, sp94.yaw, 1.0f / camera->yawUpdateRateInv, 5); + + // Bug? Should be pitchUpdateRateInv + spAC.pitch = + Camera_ScaledStepToCeilS(D_801EDC30[camera->camId].pitch, sp94.pitch, 1.0f / camera->yawUpdateRateInv, 5); + } else if (roData->interfaceFlags & (JUMP3_FLAG_7 | JUMP3_FLAG_3)) { + spAC.yaw = Camera_CalcDefaultYaw(camera, sp94.yaw, focalActorPosRot->rot.y, roData->unk_14, 0.0f); + + spD0 = CLAMP_MAX(camera->speedRatio * 1.3f, 1.0f); + + //! FAKE: spCC = + spAC.pitch = Camera_ScaledStepToCeilS( + (spAC.pitch * spD0) + (roData->unk_20 * (1.0f - spD0)), sp94.pitch, + 1.0f / (spCC = (camera->pitchUpdateRateInv + 1.0f) - (camera->pitchUpdateRateInv * spD0)), 5); + } else { + spAC.yaw = Camera_CalcDefaultYaw(camera, sp94.yaw, focalActorPosRot->rot.y, roData->unk_14, 0.0f); + spAC.pitch = Camera_CalcDefaultPitch(camera, sp94.pitch, roData->unk_20, 0); + } + + if (spAC.pitch > DEG_TO_BINANG(79.655f)) { + spAC.pitch = DEG_TO_BINANG(79.655f); + } + + if (spAC.pitch < -DEG_TO_BINANG(29.995f)) { + spAC.pitch = -DEG_TO_BINANG(29.995f); + } + + OLib_AddVecGeoToVec3f(sp40, sp44, &spAC); + + if ((camera->status == CAM_STATUS_ACTIVE) && !(roData->interfaceFlags & JUMP3_FLAG_6)) { + if (func_800CBA7C(camera) == 0) { + Camera_CalcDefaultSwing(camera, &spAC, &sp9C, roData->unk_04, roData->unk_0C, &D_801EDC30[camera->camId], + &rwData->unk_10); + } + + if (roData->interfaceFlags & JUMP3_FLAG_2) { + camera->inputDir.x = -sp9C.pitch; + camera->inputDir.y = sp9C.yaw + 0x8000; + camera->inputDir.z = 0; + } else { + OLib_Vec3fDiffToVecGeo(&spAC, sp48, sp44); + camera->inputDir.x = spAC.pitch; + camera->inputDir.y = spAC.yaw; + camera->inputDir.z = 0; + } + } else { + D_801EDC30[camera->camId].swingUpdateRate = roData->unk_0C; + D_801EDC30[camera->camId].unk_64 = 0; + sUpdateCameraDirection = false; + *sp48 = *sp40; + } + + camera->fov = Camera_ScaledStepToCeilF(roData->unk_18, camera->fov, camera->fovUpdateRate, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, .5f, 5); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->unk_1C); + + return 1; +} + +s32 Camera_Jump4(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Jump0(Camera* camera) { + return Camera_Noop(camera); +} + +#ifdef NON_EQUIVALENT +s32 Camera_Battle1(Camera* camera) { + Battle1ReadOnlyData* roData = &camera->paramData.batt1.roData; + Battle1ReadWriteData* rwData = &camera->paramData.batt1.rwData; + Vec3f sp120; + Vec3f sp114; + f32 sp104; + f32 spFC; + f32 spF8; + f32 spF8_2; + f32 spF4; + s32 spF0; // bool + f32 spEC; + Vec3f spC4; + VecGeo spBC; + VecGeo spB4; + VecGeo spAC; + VecGeo spA4; + VecGeo sp9C; + VecGeo sp94; + PosRot* sp8C; + s16 sp8A; + s16 sp88; + s16 sp86; + s16 sp84; + f32 sp80; + f32 sp7C; + f32 sp78; + f32 sp68; + s16 sp5E; + s16 sp5C; + Vec3f* sp50; + Vec3f* sp4C; + Vec3f* sp48; + PosRot* sp40; + + f32 temp_f12; + f32 temp_f14; + f32 temp_f2_3; + s16 temp_v0_5; + s16 temp_v0_6; + s32 temp_f4; + f32 phi_f0_3; + f32 phi_f12; + + f32 new_var; + f32 new_var2; + f32 new_var3; + f32 new_var5; + f32 new_var4; + + sp50 = &camera->eye; + sp4C = &camera->at; + sp48 = &camera->eyeNext; + sp40 = &camera->targetPosRot; + + spF0 = false; + sp8C = &camera->focalActor->focus; + sp68 = Camera_GetFocalActorHeight(camera); + + if ((camera->animState != 0) && (camera->animState != 0xA) && (camera->animState != 0x14)) { + } else { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->unk_00 = GET_NEXT_RO_DATA(values) * 0.01f * sp68 * (0.8f - ((68.0f / sp68) * -0.2f)); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->unk_08 = GET_NEXT_RO_DATA(values); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_0C = 80.0f - (80.0f - roData->unk_0C); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_10 = 0.0f - (0.0f - roData->unk_10); + roData->unk_14 = GET_NEXT_RO_DATA(values); + roData->unk_14 = 40.0f - (40.0f - roData->unk_14); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->unk_18 = 20.0f - (20.0f - roData->unk_18); + roData->unk_1C = GET_NEXT_RO_DATA(values) * 0.01f; + roData->unk_1C = 1.0f - (1.0f - roData->unk_1C); + roData->unk_20 = GET_NEXT_RO_DATA(values); + roData->unk_24 = GET_NEXT_RO_DATA(values) * 0.01f; + roData->unk_24 = 1.0f - (1.0f - roData->unk_24); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + roData->unk_28 = GET_NEXT_RO_DATA(values) * 0.01f; + roData->unk_28 = 0.2f - (0.2f - roData->unk_28); + roData->unk_2C = GET_NEXT_RO_DATA(values) * 0.01f; + if ((camera->animState != 0) && (camera->animState != 0xA) && (camera->animState != 0x14)) { + } else { + rwData->unk_18 = 0x28; + camera->pitchUpdateRateInv = 9.0f; + } + } + + sp80 = roData->unk_14; + sp7C = roData->unk_18; + sp78 = roData->unk_20; + + if (Camera_IsChargingSwordOrDekuFlowerDive(camera)) { + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(18.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); + camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.2f, camera->yOffsetUpdateRate, 0.5f, 0.0001f); + camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.2f, camera->xzOffsetUpdateRate, 0.5f, 0.0001f); + if (rwData->unk_18 >= -0x13) { + rwData->unk_18--; + } else { + sp80 = 50.0f; + sp7C = 40.0f; + sp78 = 60.0f; + } + } else { + if (rwData->unk_18 < 0) { + sp80 = 50.0f; + sp7C = 40.0f; + sp78 = 60.0f; + rwData->unk_18++; + } else { + rwData->unk_18 = 0x28; + camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(9.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); + camera->yOffsetUpdateRate = + Camera_ScaledStepToCeilF(0.6f, camera->yOffsetUpdateRate, camera->speedRatio * 0.5f, 0.0001f); + camera->xzOffsetUpdateRate = + Camera_ScaledStepToCeilF(0.6f, camera->xzOffsetUpdateRate, camera->speedRatio * 0.2f, 0.0001f); + } + } + + camera->fovUpdateRate = + Camera_ScaledStepToCeilF(0.050f, camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.0001f); + sp68 += roData->unk_00; + OLib_Vec3fDiffToVecGeo(&sp9C, sp4C, sp50); + OLib_Vec3fDiffToVecGeo(&sp94, sp4C, sp48); + if ((camera->target == NULL) || (camera->target->update == NULL)) { + camera->target = NULL; + Camera_ChangeMode(camera, CAM_MODE_TARGET); + return true; + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + if ((camera->animState == 0) || (camera->animState == 0xA) || (camera->animState == 0x14)) { + rwData->unk_10 = 0; + rwData->unk_1A = 0; + rwData->unk_08 = camera->target; + camera->animState++; + rwData->unk_16 = 7; + rwData->unk_12 = sp9C.yaw; + rwData->unk_14 = sp9C.pitch; + rwData->unk_00 = sp9C.r; + rwData->unk_04 = camera->focalActorPosRot.pos.y - camera->unk_0F0.y; + if ((2.0f * roData->unk_04) < camera->dist) { + camera->dist = 2.0f * roData->unk_04; + sp94.r = camera->dist; + sp9C.r = sp94.r; + OLib_AddVecGeoToVec3f(sp50, sp4C, &sp9C); + *sp48 = *sp50; + } + } + + if (camera->status == CAM_STATUS_ACTIVE) { + sUpdateCameraDirection = true; + camera->inputDir.x = -sp9C.pitch; + camera->inputDir.y = sp9C.yaw + 0x8000; + camera->inputDir.z = 0; + } + + if (func_800CB950(camera)) { + rwData->unk_04 = camera->focalActorPosRot.pos.y; + sp84 = 0; + } else { + sp84 = 1; + } + + if (rwData->unk_16 == 0) { + camera->atLerpStepScale = Camera_ClampLerpScale(camera, sp84 ? roData->unk_28 : roData->unk_24); + } + + Actor_GetFocus(&sp40->pos, camera->target); + + if (rwData->unk_08 != camera->target) { + camera->animState = 0; + return true; + } + + sp120 = camera->focalActorPosRot.pos; + sp120.y += sp68; + OLib_Vec3fDiffToVecGeo(&spA4, &sp120, &sp40->pos); + sp104 = func_800CD6CC(camera->target); + if (PREG(86) + 800.0f < sp104) { + sp104 = PREG(86) + 800.0f; + } + + // new_var5 = sp104; // TODO: Fake temp but helps when used? + // sp104 = new_var5; + + // Above is down to SP and Floats + + if ((sp104 < spA4.r) || Camera_IsChargingSwordOrDekuFlowerDive(camera)) { + spEC = 1.0f; + spF8 = 10.0f; + // dummy:; // Helps? + // sp80 = roData->unk_14; // Fake & Non-equivalent but helps? + } else { + spEC = spA4.r / sp104; + spF8 = 2.0f; + } + // spF8 should be set with swc1 twice, not once + + // sp94 is loading in too early + Camera_CalcAtForEnemyLockOn(camera, &sp94.r, sp40, roData->unk_00, roData->unk_2C, 1.0f - spEC, &rwData->unk_04, + &spA4, + (sp84 ? (BATTLE1_FLAG_7 | BATTLE1_FLAG_0) : BATTLE1_FLAG_0) | roData->interfaceFlags); + + sp88 = spA4.yaw; + OLib_Vec3fDiffToVecGeo(&spBC, sp4C, sp48); + spF4 = roData->unk_04 + ((roData->unk_08 - roData->unk_04) * spEC); + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(spF8, camera->rUpdateRateInv, 0.5f, 0.1f); + spBC.r = camera->dist = Camera_ScaledStepToCeilF(spF4, camera->dist, 1.0f / camera->rUpdateRateInv, 0.1f); + OLib_Vec3fDiffToVecGeo(&spAC, sp4C, &sp40->pos); + + spAC.r = spBC.r - (((spAC.r >= spBC.r) ? spBC.r : spAC.r) * 0.5f); + + if (rwData->unk_1A & 0x1000) { + spFC = 15.0f; + } else { + spFC = roData->unk_0C + ((roData->unk_10 - roData->unk_0C) * (1.1f - spEC)); + } + spBC.yaw = sp94.yaw; + temp_v0_5 = (sp94.yaw + 0x8000); + temp_v0_5 = spAC.yaw - temp_v0_5; + if (rwData->unk_16 != 0) { + if (rwData->unk_16 > 0) { + sp86 = rwData->unk_16 - 1; + OLib_Vec3fDiffToVecGeo(&spB4, sp4C, sp50); + spB4.yaw = sp88 + 0x8000; + new_var = (rwData->unk_00 - spB4.r) * 0.16666667f; + sp8A = (s16)(rwData->unk_12 - spB4.yaw) * 0.16666667f; + sp88 = (s16)(rwData->unk_14 - spB4.pitch) * 0.16666667f; + spBC.r = Camera_ScaledStepToCeilF((sp86 * new_var) + spB4.r, sp9C.r, 0.5f, + 1.0f); // TODO: extra float calcs going on here + spBC.yaw = Camera_ScaledStepToCeilS(spB4.yaw + (sp8A * sp86), sp9C.yaw, 0.5f, 5); + spBC.pitch = Camera_ScaledStepToCeilS(spB4.pitch + (sp88 * sp86), sp9C.pitch, 0.5f, 5); + } else { + spF0 = true; + } + rwData->unk_16--; + } else { + // s32 phi_v0_2 = ABS(temp_v0_5); + temp_f4 = (s16)((spFC * 182.04167f) + .5f); + if ((temp_f4 < ABS(temp_v0_5)) && (sp84 == 0)) { + + sp8A = temp_v0_5; + sp104 = temp_v0_5 * 0.00549325f; + + temp_f2_3 = ((OLib_ClampMaxDist(spAC.r, spBC.r) / spBC.r) * ((spFC + 10.0f) - spFC)) + spFC; + temp_f12 = (SQ(temp_f2_3) - 2.0f) / (temp_f2_3 - 360.0f); + new_var3 = temp_f12 * sp104; + temp_f14 = SQ(sp104) / (new_var3 + (2.0f - (360.0f * temp_f12))); + + if (sp8A >= 0) { + sp88 = CAM_DEG_TO_BINANG(temp_f14); + } else { + sp88 = -CAM_DEG_TO_BINANG(temp_f14); + } + + spBC.yaw = (s16)(sp94.yaw + 0x8000) + (s16)(sp88 + 0x8000); + } else { + new_var2 = (1.0f - camera->speedRatio) * 0.05f; + if (temp_v0_5 >= 0) { + sp88 = temp_f4 & 0xFFFFu; // TODO: Is this needed? + } else { + sp88 = -temp_f4; + } + spBC.yaw = sp94.yaw - (s16)((sp88 - temp_v0_5) * new_var2); + } + } + + if (spF0 == false) { + new_var4 = spAC.pitch * roData->unk_1C; + temp_v0_6 = ((s16)(((((sp7C - sp80) * spEC) + sp80) * 182.04167f) + .5f) - + (s16)((spA4.pitch * (0.5f + (spEC * 0.5f))) + 0.5f)); + temp_v0_6 += (s16)new_var4; + + if (temp_v0_6 < -0x2AA8) { + temp_v0_6 = -0x2AA8; + } else if (temp_v0_6 > 0x2AA8) { + temp_v0_6 = 0x2AA8; + } + + spBC.pitch = Camera_ScaledStepToCeilS(temp_v0_6, sp94.pitch, 1.0f / camera->pitchUpdateRateInv, 5); + OLib_AddVecGeoToVec3f(sp48, sp4C, &spBC); + spC4 = *sp48; + if (camera->status == CAM_STATUS_ACTIVE) { + if (!(roData->interfaceFlags & BATTLE1_FLAG_4)) { + if ((camera->play->envCtx.skyboxDisabled == 0) || (roData->interfaceFlags & BATTLE1_FLAG_0)) { + if (func_800CBC84(camera, sp4C, &spC4, 0) != 0) { + rwData->unk_1A |= 0x1000; + } else { + rwData->unk_1A &= ~0x1000; + } + } else if (roData->interfaceFlags & BATTLE1_FLAG_1) { + func_800CBC84(camera, sp4C, &spC4, 3); + } else { + OLib_Vec3fDistNormalize(&sp114, sp4C, &spC4); + spC4.x -= sp114.x; + spC4.y -= sp114.y; + spC4.z -= sp114.z; + } + *sp50 = spC4; + ; + rwData->unk_1A &= ~0x10; + } else if ((camera->play->envCtx.skyboxDisabled == 0) || (roData->interfaceFlags & BATTLE1_FLAG_0)) { + if (func_800CBC84(camera, sp4C, &spC4, 0) != 0) { + rwData->unk_1A |= 0x1000; + spF8 = OLib_Vec3fDist(sp4C, sp8C); + spF4 = OLib_Vec3fDist(sp4C, &spC4); + phi_f0_3 = (rwData->unk_1A & 0x10) ? 40.0f : 0.0f; + spF8 = spF8 + phi_f0_3; + Actor_GetScreenPos(camera->play, camera->focalActor, &sp5E, &sp5C); + if ((spF4 < spF8) || ((sp5E >= 0) && (sp5E < 0x141) && (sp5C >= 0) && (sp5C < 0xF1))) { + rwData->unk_1A |= 0x10; + spB4.yaw = spA4.yaw + 0x8000; + spB4.pitch = -spA4.pitch; + spB4.r = 40.0f; + sp114 = sp8C->pos; + sp114.y += 40.0f; + OLib_AddVecGeoToVec3f(&sp120, &sp114, &spB4); + Camera_ScaledStepToCeilVec3f(&sp120, sp50, 0.15f, 0.15f, 0.2f); + } else if (rwData->unk_1A & 0x10) { + if (OLib_Vec3fDist(&spC4, sp50) < 20.0f) { + rwData->unk_1A &= ~0x10; + *sp50 = spC4; + } else { + Camera_ScaledStepToCeilVec3f(&spC4, sp50, 0.15f, 0.15f, 0.2f); + } + } else { + rwData->unk_1A &= ~0x10; + *sp50 = spC4; + } + dummy:; // TODO: Is Needed? + } else { + if (rwData->unk_1A & 0x10) { + if (OLib_Vec3fDist(&spC4, sp50) < 20.0f) { + rwData->unk_1A &= ~0x10; + *sp50 = spC4; + } else { + Camera_ScaledStepToCeilVec3f(&spC4, sp50, 0.15f, 0.15f, 0.2f); + } + } else { + rwData->unk_1A &= ~0x10; + *sp50 = spC4; + } + rwData->unk_1A &= ~0x1000; + } + } else if (roData->interfaceFlags & BATTLE1_FLAG_1) { + rwData->unk_1A &= ~0x10; + if (func_800CBC84(camera, sp4C, &spC4, 3) != 0) { + *sp50 = spC4; + } else { + *sp50 = spC4; + } + } else { + rwData->unk_1A &= ~0x10; + OLib_Vec3fDistNormalize(&sp114, sp4C, &spC4); + spC4.x -= sp114.x; + spC4.y -= sp114.y; + spC4.z -= sp114.z; + *sp50 = spC4; + } + } else { + rwData->unk_1A &= ~0x10; + *sp50 = *sp48; + } + } + + if (rwData->unk_16 != 0) { + sp88 = 0; + } else { + sp88 = (s16)(sp94.yaw - spBC.yaw) * 0.50f; + } + + camera->roll = Camera_ScaledStepToCeilS(sp88, camera->roll, 0.06f, 5); + if (func_800CBAAC(camera) != 0) { + phi_f12 = ((camera->play->state.frames & 8) != 0) ? roData->unk_20 - (roData->unk_20 * 0.5f) : roData->unk_20; + } else { + phi_f12 = ((gSaveContext.save.saveInfo.playerData.health <= 16) ? 0.8f : 1.0f) * (sp78 - (sp78 * 0.05f * spEC)); + } + camera->fov = Camera_ScaledStepToCeilF(phi_f12, camera->fov, camera->fovUpdateRate, 0.1f); + + return true; +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle1.s") +#endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle2.s") +s32 Camera_Battle2(Camera* camera) { + return Camera_Noop(camera); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle3.s") +s32 Camera_Battle3(Camera* camera) { + return Camera_Noop(camera); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle4.s") +s32 Camera_Battle4(Camera* camera) { + return Camera_Noop(camera); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle0.s") +s32 Camera_Battle0(Camera* camera) { + return Camera_Noop(camera); +} +/** + * Used for following a secondary target such as zora fins or a z-target + */ +// Very non-equivalent, many fakes. May need to restart from scratch (mips2c) +#ifdef NON_EQUIVALENT +s32 Camera_KeepOn1(Camera* camera) { + f32 pad1; + f32* pad2; + Vec3f* sp48 = &camera->eye; + Vec3f* sp44 = &camera->at; + Vec3f* sp40 = &camera->eyeNext; + Vec3f sp130; + Vec3f sp124; + Vec3f sp118; + f32 sp114; + PosRot* sp3C = &camera->focalActorPosRot; + PosRot* sp30 = &camera->targetPosRot; + f32 sp104; + f32 temp_f2_3; + f32 new_var; + f32 spFC; + f32 spF8; + f32 spF4; + s16 spF2; + s16 spF0; + VecGeo spE8; + VecGeo spE0; + VecGeo spD8; + VecGeo spD0; + VecGeo spC8; + VecGeo spC0; + f32 new_var2; + s32 new_var3; + f32 temp_f0; + Vec3f spA8; + PosRot* spA4; + CameraCollision sp7C; + + s32 sp78; + f32 sp74; + s16 sp72; + s16 sp70; + f32 sp60; + s16 sp56; + s16 sp54; + + s16 phi_v1_3; + s16 phi_a0; + KeepOn1ReadOnlyData* roData = &camera->paramData.keep1.roData; + KeepOn1ReadWriteData* rwData = &camera->paramData.keep1.rwData; + s16 temp_v0_3; + s16 new_var4; + + spA4 = &camera->focalActor->focus; + //! FAKE + if (temp_v0_3) {} + sp78 = 0; + temp_f0 = Camera_GetFocalActorHeight(camera); + // temp_a1 = camera->target; + + if ((camera->target == NULL) || (camera->target->update == NULL)) { + camera->target = NULL; + Camera_ChangeMode(camera, CAM_MODE_TARGET); + return 1; + } + + if (RELOAD_PARAMS(camera)) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->unk_00 = GET_NEXT_SCALED_RO_DATA(values) * temp_f0 * (0.8f - ((68.0f / temp_f0) * -0.2f)); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->unk_08 = GET_NEXT_RO_DATA(values); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_RO_DATA(values); + roData->unk_14 = 40.0f - (40.0f - roData->unk_14); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->unk_18 = 20.0f - (20.0f - roData->unk_18); + // roData->unk_18 = roData->unk_18; // TODO: Fake + // if (!roData->unk_08) {} + roData->unk_1C = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_1C = 1.000f - (1.00f - roData->unk_1C); // TODO: Necessary? + roData->unk_20 = GET_NEXT_RO_DATA(values); + roData->unk_24 = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_24 = 1.0f - (1.0f - roData->unk_24); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + roData->unk_28 = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_28 = 0.2f - (0.2f - roData->unk_28); + } + + sp60 = temp_f0; + sp114 = roData->unk_00; // TODO: likely fake temp + sp60 += sp114; + OLib_Vec3fDiffToVecGeo(&spC8, sp44, sp48); + OLib_Vec3fDiffToVecGeo(&spC0, sp44, sp40); + sCameraInterfaceFlags = roData->interfaceFlags; + + if (RELOAD_PARAMS(camera)) { + camera->animState++; + rwData->unk_18 = 0; + rwData->unk_10 = 0; + rwData->unk_04 = 0.0f; + rwData->unk_0C = camera->target; + rwData->unk_16 = 7; + rwData->unk_12 = spC8.yaw; + rwData->unk_14 = spC8.pitch; + rwData->unk_00 = spC8.r; + rwData->unk_08 = sp3C->pos.y - camera->unk_0F0.y; + if ((2.0f * roData->unk_04) < camera->dist) { + camera->dist = 2.0f * roData->unk_04; + spC0.r = camera->dist; + spC8.r = spC0.r; + OLib_AddVecGeoToVec3f(sp48, sp44, &spC8); + *sp40 = *sp48; + } + } + + if (camera->status == CAM_STATUS_ACTIVE) { + sUpdateCameraDirection = true; + camera->inputDir.x = -spC8.pitch; + camera->inputDir.y = spC8.yaw + 0x8000; + camera->inputDir.z = 0; + } + + if (func_800CB950(camera)) { + rwData->unk_08 = sp3C->pos.y; + } + + sp114 = roData->unk_04; + + if (camera->target->id != ACTOR_EN_BOOM) { + Actor_GetWorldPosShapeRot(sp30, camera->target); + Actor_GetFocus(&spA8, camera->target); + camera->targetPosRot.pos.y = spA8.y; + } else { + Actor_GetFocus(sp30, camera->target); + } + if (rwData->unk_0C != camera->target) { + rwData->unk_0C = camera->target; + camera->atLerpStepScale = 0.0f; + } + + camera->yOffsetUpdateRate = + Camera_ScaledStepToCeilF(1.0f, camera->yOffsetUpdateRate, camera->speedRatio * 0.5f, 0.0001f); + camera->xzOffsetUpdateRate = + Camera_ScaledStepToCeilF(1.0f, camera->xzOffsetUpdateRate, camera->speedRatio * 0.2f, 0.0001f); + // TODO: No f on 0.05? + camera->fovUpdateRate = Camera_ScaledStepToCeilF(0.05, camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.0001f); + + if (func_800CB950(camera)) { + rwData->unk_08 = sp3C->pos.y; + sp70 = false; + } else { + sp70 = true; + } + + Camera_CalcAtForFriendlyLockOn(camera, &spC0, sp30, roData->unk_00, roData->unk_08, &rwData->unk_08, &spD0, + roData->interfaceFlags | (sp70 ? KEEPON1_FLAG_7 : 0)); + sp124 = sp3C->pos; + sp124.y += sp60; + OLib_Vec3fDiffToVecGeo(&spD0, &sp124, sp30); + + if (sp114 < spD0.r) { + sp74 = 1.0f; + } else { + sp74 = spD0.r / sp114; + } + + OLib_Vec3fDiffToVecGeo(&spE8, sp44, sp40); + + if (spE8.r < roData->unk_04) { + sp114 = roData->unk_04; + spF8 = 20.0f; + } else if (roData->unk_08 < spE8.r) { + sp114 = roData->unk_08; + spF8 = 20.0f; + } else { + sp114 = spE8.r; + spF8 = 1.0f; + } + + camera->rUpdateRateInv = Camera_ScaledStepToCeilF(spF8, camera->rUpdateRateInv, 0.5f, 0.1f); + camera->dist = Camera_ScaledStepToCeilF(sp114, camera->dist, 1.0f / camera->rUpdateRateInv, 0.1f); + spF8 = camera->dist; + spE8.r = camera->dist; + sp118 = sp30->pos; + OLib_Vec3fDiffToVecGeo(&spD8, sp44, &sp118); + //! FAKE + if (1) {} + if (1) {} + if (1) {} // TODO: Is needed? + pad1 = spD8.r; // TODO: Fake temp? + spD8.r = spF8 - (((pad1 <= spF8) ? spD8.r : spF8) * .5f); + camera->dist = Camera_ScaledStepToCeilF(pad1, camera->dist, 0.06f, 0.1f); + spE8.r = camera->dist; + spFC = roData->unk_0C + ((roData->unk_10 - roData->unk_0C) * (1.1f - sp74)); + spE8.yaw = spC0.yaw; + temp_v0_3 = (s16)(spD8.yaw - (s16)(spC0.yaw + 0x8000)); + if (rwData->unk_16 != 0) { + if (rwData->unk_16 > 0) { + sp72 = rwData->unk_16 - 1; + spF2 = spD0.yaw; + OLib_Vec3fDiffToVecGeo(&spD0, sp44, sp48); + spD0.yaw = (s16)(spF2 + 0x8000); + sp60 = (rwData->unk_00 - spD0.r) * 0.16666667f; + spF2 = (s16)(rwData->unk_12 - (s16)(spF2 + 0x8000)) * 0.16666667f; + spF0 = ((s16)(rwData->unk_14 - (s64)spD0.pitch)); // TODO: s16 cast on F0 + spF0 = (s16)(spF0 * 0.16666667f); + spE8.r = Camera_ScaledStepToCeilF(spD0.r + (sp60 * sp72), spC8.r, .5f, 0.1f); + spE8.yaw = Camera_ScaledStepToCeilS(spD0.yaw + (spF2 * sp72), spC8.yaw, .5f, 5); + spE8.pitch = Camera_ScaledStepToCeilS(spD0.pitch + (spF0 * sp72), spC8.pitch, .5f, 5); + } + sp78 = 1; + rwData->unk_16--; + } else { + new_var3 = ABS(temp_v0_3); // TODO: Fake temp? + if ((s16)((spFC * 182.04167f) + .5f) < new_var3) { + spF2 = temp_v0_3; + sp104 = temp_v0_3 * 0.00549325f; + temp_f2_3 = ((OLib_ClampMaxDist(spD8.r, spE8.r) / spE8.r) * ((spFC + 10.0f) - spFC)) + spFC; + pad2 = &sp104; // TODO: Fake temp + temp_f2_3 = ((temp_f2_3 * temp_f2_3) - 2.0f) / (temp_f2_3 - 360.0f); + temp_f2_3 = (sp104 * (*pad2)) / ((temp_f2_3 * (*pad2)) + (2.0f - (360.0f * temp_f2_3))); + + if (spF2 >= 0) { + phi_v1_3 = (s16)((temp_f2_3 * 182.04167f) + .5f); + } else { + phi_v1_3 = -(s16)((temp_f2_3 * 182.04167f) + .5f); + } + spE8.yaw = (s16)(spC0.yaw + 0x8000) + (s16)(phi_v1_3 + 0x8000); + } else { + new_var = (1.0f - camera->speedRatio) * 0.05f; // TODO: Fake temp? + phi_v1_3 = (temp_v0_3 >= 0) ? CAM_DEG_TO_BINANG(spFC) : -CAM_DEG_TO_BINANG(spFC); + //! FAKE + if (phi_a0) {} // TODO: Fake to shaft a registers + spE8.yaw = (s16)(spC0.yaw - (s16)((phi_v1_3 - temp_v0_3) * new_var)); + } + } + + //! FAKE + if (!spF0) {} // TODO: Is needed? + if (sp78 == 0) { + // TODO: extra 0 on 0.050f needed? + phi_a0 = (s16)(((roData->unk_14 + ((roData->unk_18 - roData->unk_14) * sp74)) * 182.04167f) + .5f); + phi_a0 -= (s16)((spD0.pitch * (0.5f + (sp74 * 0.5f))) + 0.5f); + //! FAKE + if (1) {} // TODO: Needed? + sp60 = spD8.pitch * roData->unk_1C; // TODO: Fake sp60 temp? + phi_a0 += (s16)sp60; + + if (phi_a0 < -0x3200) { + phi_a0 = -0x3200; + } else if (phi_a0 > 0x3200) { + phi_a0 = 0x3200; + } + + spE8.pitch = Camera_ScaledStepToCeilS(phi_a0, spC0.pitch, 0.11111111f, 5); + OLib_AddVecGeoToVec3f(sp40, sp44, &spE8); + sp7C.pos = *sp40; + if (camera->status == CAM_STATUS_ACTIVE) { + if (!(roData->interfaceFlags & KEEPON1_FLAG_4)) { + if ((camera->play->envCtx.skyboxDisabled == 0) || (roData->interfaceFlags & KEEPON1_FLAG_0)) { + if (func_800CBC84(camera, sp44, &sp7C, 0) != 0) { + rwData->unk_18 |= 0x1000; + } else { + rwData->unk_18 &= ~0x1000; + } + } else if (roData->interfaceFlags & KEEPON1_FLAG_1) { + func_800CBC84(camera, sp44, &sp7C, 3); + } else { + OLib_Vec3fDistNormalize(&sp130, sp44, &sp7C.pos); + sp7C.pos.x -= sp130.x; + sp7C.pos.y -= sp130.y; + sp7C.pos.z -= sp130.z; + } + *sp48 = sp7C.pos; + rwData->unk_18 &= ~0x10; + } else if ((camera->play->envCtx.skyboxDisabled == 0) || (roData->interfaceFlags & KEEPON1_FLAG_0)) { + if (func_800CBC84(camera, sp44, &sp7C, 0) != 0) { + rwData->unk_18 |= 0x1000; + spF8 = OLib_Vec3fDist(sp44, spA4); + spF4 = OLib_Vec3fDist(sp44, &sp7C.pos); + spF8 += (rwData->unk_18 & 0x10) ? 40 : 0.0f; // TODO: 40.0f? + Actor_GetScreenPos(camera->play, camera->focalActor, &sp56, &sp54); + if ((spF4 < spF8) || ((sp56 >= 0) && (sp56 <= 320) && (sp54 >= 0) && (sp54 <= 240))) { + rwData->unk_18 |= 0x10; + spE0.yaw = (s16)(spD0.yaw + 0x8000); + spE0.pitch = -spD0.pitch; + spE0.r = 40.0f; + sp130 = spA4->pos; + sp130.y += 40.0f; + OLib_AddVecGeoToVec3f(&sp124, &sp130, &spE0); + Camera_ScaledStepToCeilVec3f(&sp124, sp48, 0.15f, 0.15f, 0.2f); + } else if (rwData->unk_18 & 0x10) { + if (OLib_Vec3fDist(&sp7C.pos, sp48) < 20.0f) { + rwData->unk_18 &= ~0x10; + *sp48 = sp7C.pos; + } else { + Camera_ScaledStepToCeilVec3f(&sp7C.pos, sp48, 0.15f, 0.15f, 0.2f); + } + } else { + rwData->unk_18 &= ~0x10; + *sp48 = sp7C.pos; + } + dummy:; // TODO: Is this needed? + } else { + if (rwData->unk_18 & 0x10) { + if (OLib_Vec3fDist(&sp7C.pos, sp48) < 20.0f) { + rwData->unk_18 &= ~0x10; + *sp48 = sp7C.pos; + } else { + Camera_ScaledStepToCeilVec3f(&sp7C.pos, sp48, 0.15f, 0.15f, 0.2f); + } + } else { + rwData->unk_18 &= ~0x10; + *sp48 = sp7C.pos; + // if (sp104) {} // TODO: Is this needed? + } + rwData->unk_18 &= ~0x1000; + } + } else if (roData->interfaceFlags & KEEPON1_FLAG_1) { + rwData->unk_18 &= ~0x10; + if (func_800CBC84(camera, sp44, &sp7C, 3) != 0) { + *sp48 = sp7C.pos; + } else { + *sp48 = sp7C.pos; + ; + } + } else { + rwData->unk_18 &= ~0x10; + OLib_Vec3fDistNormalize(&sp130, sp44, &sp7C.pos); + sp7C.pos.x -= sp130.x; + sp7C.pos.y -= sp130.y; + sp7C.pos.z -= sp130.z; + *sp48 = sp7C.pos; + } + } else { + rwData->unk_18 &= ~0x10; + *sp48 = *sp40; + } + } + + // TODO: spF8 temp needed? + camera->fov = Camera_ScaledStepToCeilF(spF8 = roData->unk_20, camera->fov, camera->fovUpdateRate, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.2f, 5); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, sp70 ? roData->unk_28 : roData->unk_24); + + return true; +} +#else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn1.s") +#endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn2.s") +s32 Camera_KeepOn2(Camera* camera) { + return Camera_Noop(camera); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn3.s") +/** + * Talking to an NPC + */ +s32 Camera_KeepOn3(Camera* camera) { + Vec3f* eye = &camera->eye; + s32 temp_f0; + Vec3f* eyeNext = &camera->eyeNext; + Vec3f spD8; + Vec3f spCC; + Vec3f spC0; + f32 timer; + f32 spB8; + f32 spB4; + f32 swingAngle; + Actor* spA8[2]; + VecGeo spA0; + VecGeo sp98; + VecGeo sp90; + VecGeo sp88; + VecGeo sp80; + Vec3f* at = &camera->at; + s32 sp78; + f32 phi_f14; + PosRot* sp70; + s16 sp6E; + s16 sp6C; + s16 sp6A; + s16 phi_a3; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + KeepOn3ReadOnlyData* roData = &camera->paramData.keep3.roData; + KeepOn3ReadWriteData* rwData = &camera->paramData.keep3.rwData; + f32 focalActorHeight; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn4.s") + sp70 = &camera->focalActor->focus; // TODO: Move above? + sp6A = 0; + focalActorHeight = Camera_GetFocalActorHeight(camera); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn0.s") + if ((camera->target == NULL) || (camera->target->update == NULL)) { + camera->target = NULL; + Camera_ChangeMode(camera, CAM_MODE_TARGET); + return 1; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed1.s") + if (RELOAD_PARAMS(camera)) { + if (camera->play->view.unk164 == 0) { + Camera_SetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + camera->play->view.unk164 = camera->camId | 0x50; + return 1; + } + Camera_UnsetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed2.s") + Camera_UnsetStateFlag(camera, CAM_STATE_4); + if (RELOAD_PARAMS(camera)) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed3.s") + roData->unk_00 = + GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->unk_08 = GET_NEXT_RO_DATA(values); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_RO_DATA(values); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->unk_1C = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_20 = GET_NEXT_RO_DATA(values); + roData->unk_24 = GET_NEXT_SCALED_RO_DATA(values); + roData->timer = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + roData->unk_28 = GET_NEXT_SCALED_RO_DATA(values); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed4.s") + if (camera->animState == 10) { + roData->timer >>= 1; + if (roData->timer < 20) { + roData->timer = 20; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed0.s") + OLib_Vec3fDiffToVecGeo(&sp88, at, eye); + OLib_Vec3fDiffToVecGeo(&sp80, at, eyeNext); + Actor_GetFocus(&camera->targetPosRot, camera->target); + spD8 = focalActorPosRot->pos; + spD8.y += focalActorHeight; + OLib_Vec3fDiffToVecGeo(&spA0, &spD8, &camera->targetPosRot.pos); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject1.s") + if (RELOAD_PARAMS(camera)) { + camera->animState++; + spA8[0] = camera->target; + spA8[1] = camera->focalActor; + rwData->unk_0C = camera->target; + phi_f14 = (roData->unk_08 < spA0.r) ? 1.0f : (spA0.r / roData->unk_08); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject2.s") + rwData->timer = roData->timer; + spB8 = ((1.0f - phi_f14) * spA0.r) / rwData->timer; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject3.s") + if (roData->interfaceFlags & KEEPON3_FLAG_6) { + spA0.pitch = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject4.s") + swingAngle = LERPIMP(roData->unk_14, roData->unk_18, phi_f14); + sp98.pitch = CAM_DEG_TO_BINANG(swingAngle) + ((s16) - (spA0.pitch * roData->unk_1C)); + swingAngle = LERPIMP(roData->unk_0C, roData->unk_10, phi_f14); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject0.s") + phi_a3 = CAM_DEG_TO_BINANG(swingAngle); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data0.s") + sp78 = 1; + if ((camera->target->category == ACTORCAT_DOOR) || (camera->target->id == ACTOR_EN_TALK)) { + if ((s16)(camera->targetPosRot.rot.y - sp80.yaw) > 0) { + phi_a3 = -phi_a3; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data1.s") + if (ABS(spA0.pitch) < 0x157C) { // 30.2 degrees + sp98.yaw = BINANG_ROT180(spA0.yaw) + phi_a3; + sp6A = (s16)(BINANG_ROT180(spA0.yaw) - phi_a3); + } else { + sp78 = 0; + sp90.r = 30.0f; + sp90.yaw = BINANG_ROT180(spA0.yaw) + (phi_a3 >> 2); + sp90.pitch = -spA0.pitch; + spCC = sp70->pos; + spCC.y += 30.0f; + OLib_AddVecGeoToVec3f(&spC0, &spCC, &sp90); + spCC.x = (camera->targetPosRot.pos.x + spD8.x) * 0.5f; + spCC.y = (camera->targetPosRot.pos.y + spD8.y) * 0.5f; + spCC.z = (camera->targetPosRot.pos.z + spD8.z) * 0.5f; + OLib_Vec3fDiffToVecGeo(&sp98, &spCC, &spC0); + if (sp98.pitch < -0x2328) { // 49.4 degrees + sp98.pitch = -0x2328; + } + } + } else if (!(roData->interfaceFlags & KEEPON3_FLAG_5) && (ABS((s16)(spA0.yaw - sp80.yaw)) < 0x4000)) { + if ((s16)(spA0.yaw - sp80.yaw) > 0) { + phi_a3 = -phi_a3; + } + sp98.yaw = (s16)(spA0.yaw + phi_a3); + sp6A = (s16)(spA0.yaw - phi_a3); + } else { + if ((s16)(BINANG_ROT180(spA0.yaw) - sp80.yaw) < 0) { + phi_a3 = -phi_a3; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data2.s") + sp98.yaw = BINANG_ROT180(spA0.yaw) + phi_a3; + sp6A = BINANG_ROT180(spA0.yaw) - phi_a3; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data3.s") + sp6C = sp98.yaw; + sp6E = sp98.pitch; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data4.s") + //! FAKE + if (roData->unk_28) {} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique1.s") + spB4 = spA0.r; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique2.s") + phi_f14 = roData->unk_28; + spA0.r = spB8 * phi_f14 + (spB4 * (1.0f - phi_f14)); + spD8 = focalActorPosRot->pos; + spD8.y += focalActorHeight; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique3.s") + OLib_AddVecGeoToVec3f(&rwData->unk_10, &spD8, &spA0); + rwData->unk_10.y += roData->unk_00; + spA0.r = spB4; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique4.s") + if (sp78 != 0) { + sp98.r = ((roData->unk_04 + (spA0.r * 0.5f)) - sp80.r) + sp80.r; + i = 0; + sp78 = 14; + OLib_AddVecGeoToVec3f(&spCC, &rwData->unk_10, &sp98); + if (!(roData->interfaceFlags & KEEPON3_FLAG_7)) { + if (CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &rwData->unk_10, &spCC, spA8, + 2) || + Camera_BgCheck(camera, &rwData->unk_10, &spCC)) { + sp98.yaw = sp6A; + OLib_AddVecGeoToVec3f(&spCC, &rwData->unk_10, &sp98); + } + while (i < sp78) { + if (!CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &rwData->unk_10, &spCC, + spA8, 2) && + !Camera_BgCheck(camera, &rwData->unk_10, &spCC)) { + break; + } + sp98.yaw = sp6C + D_801B9E18[i]; + sp98.pitch = sp6E + D_801B9E34[i]; + OLib_AddVecGeoToVec3f(&spCC, &rwData->unk_10, &sp98); + i++; + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique5.s") + Camera_UnsetStateFlag(camera, CAM_STATE_3 | CAM_STATE_2); + temp_f0 = ((rwData->timer + 1) * rwData->timer) >> 1; + rwData->unk_04 = (f32)(s16)(sp98.yaw - sp80.yaw) / temp_f0; + rwData->unk_08 = (f32)(s16)(sp98.pitch - sp80.pitch) / temp_f0; + rwData->unk_00 = (sp98.r - sp80.r) / temp_f0; + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique0.s") + return 1; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique6.s") + sCameraInterfaceFlags = roData->interfaceFlags; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique7.s") + if (rwData->timer != 0) { + timer = rwData->timer; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique8.s") + at->x += (rwData->unk_10.x - at->x) / timer; + at->y += (rwData->unk_10.y - at->y) / timer; + at->z += (rwData->unk_10.z - at->z) / timer; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique9.s") + sp98.r = (rwData->unk_00 * timer) + sp80.r + 1.0f; + sp98.yaw = sp80.yaw + (s16)(rwData->unk_04 * timer); + sp98.pitch = sp80.pitch + (s16)(rwData->unk_08 * timer); + OLib_AddVecGeoToVec3f(eyeNext, at, &sp98); + *eye = *eyeNext; + camera->fov = Camera_ScaledStepToCeilF(roData->unk_20, camera->fov, 0.5f, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.5f, 5); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->unk_24); + func_800CBFA4(camera, at, eye, 3); + rwData->timer--; + } else { + Camera_SetStateFlag(camera, CAM_STATE_10 | CAM_STATE_4); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo1.s") + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + camera->dist = OLib_Vec3fDist(at, eye); + if (camera->stateFlags & CAM_STATE_3) { + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0); + Camera_SetUpdateRatesSlow(camera); + camera->atLerpStepScale = 0.0f; + + if ((camera->xzSpeed > 0.001f) || CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_A) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CUP) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R)) { + Camera_SetStateFlag(camera, CAM_STATE_2); + Camera_UnsetStateFlag(camera, CAM_STATE_3); + } + } + + if (rwData->unk_0C != camera->target) { + rwData->unk_0C = camera->target; + camera->animState = 10; + } + + return 1; +} + +/** + * Used for settings where camera turns around and faces player + * eg. all item-based settings, elegy shell cutscene, death cutscene, ... + */ +s32 Camera_KeepOn4(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + Actor* spCC[2]; + f32 temp_f0_2; + f32 new_var; + CollisionPoly* spC0; + VecGeo spB8; + VecGeo spB0; + VecGeo spA8; + s16* sp44 = &camera->data2; + s16 spA2; + s16 spA0; + s16 sp9E; + s16 sp9C; + s16 pad1; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + KeepOn4ReadOnlyData* roData = &camera->paramData.keep4.roData; + KeepOn4ReadWriteData* rwData = &camera->paramData.keep4.rwData; + f32 focalActorHeight; + s32 bgId; + s16 camMode; + Player* player; + Vec3f* data; + CameraModeValue* values; + PosRot sp60; + PosRot sp4C; + + if (RELOAD_PARAMS(camera)) { + if (camera->play->view.unk164 == 0) { + Camera_SetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + Camera_UnsetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + camera->play->view.unk164 = camera->camId | 0x50; + return true; + } + rwData->unk_18 = *sp44; + Camera_UnsetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + } + + if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { + player = (Player*)camera->focalActor; + + switch (((Player*)camera->focalActor)->transformation) { + case PLAYER_FORM_DEKU: + camMode = CAM_MODE_DEKUSHOOT; + break; + + case PLAYER_FORM_GORON: + camMode = CAM_MODE_GORONDASH; + break; + + case PLAYER_FORM_ZORA: + camMode = CAM_MODE_DEKUFLY; + break; + + case PLAYER_FORM_FIERCE_DEITY: + camMode = CAM_MODE_JUMP; + break; + + default: + camMode = CAM_MODE_NORMAL; + break; + } + + focalActorHeight = Camera_GetFocalActorHeight(camera) - (player->unk_AB8 * camera->focalActor->scale.y); + } else { + camMode = CAM_MODE_NORMAL; + focalActorHeight = Camera_GetFocalActorHeight(camera); + } + + if (rwData->unk_18 != *sp44) { + camera->animState = 20; + Camera_SetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + Camera_UnsetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + camera->play->view.unk164 = camera->camId | 0x50; + return true; + } + + Camera_UnsetStateFlag(camera, CAM_STATE_4); + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camMode].values; + new_var = -0.5f; + roData->unk_00 = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * + ((1.0f + new_var) - ((68.0f / focalActorHeight) * new_var)); + roData->unk_04 = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * + ((1.0f + new_var) - ((68.0f / focalActorHeight) * new_var)); + roData->unk_08 = GET_NEXT_RO_DATA(values); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values); + roData->unk_18 = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + roData->unk_14 = GET_NEXT_SCALED_RO_DATA(values); + roData->timer = GET_NEXT_RO_DATA(values); + } + + sUpdateCameraDirection = true; + sCameraInterfaceFlags = roData->interfaceFlags; + + OLib_Vec3fDiffToVecGeo(&spB0, at, eye); + data = &D_801EDDD0; + OLib_Vec3fDiffToVecGeo(&spA8, at, eyeNext); + D_801EDDD0 = focalActorPosRot->pos; + D_801EDDD0.y = data->y + focalActorHeight; + temp_f0_2 = BgCheck_CameraRaycastFloor2(&camera->play->colCtx, &spC0, &bgId, &D_801EDDD0); + + if ((roData->unk_00 + data->y) < temp_f0_2) { + D_801EDDD0.y = temp_f0_2 + 10.0f; + } else { + D_801EDDD0.y = roData->unk_00 + data->y; + } + + if (roData->unk_10 != 0.0f) { + D_801EDDE0 = (*data); + spB8.r = roData->unk_10; + spB8.pitch = 0; + spB8.yaw = focalActorPosRot->rot.y; + OLib_AddVecGeoToVec3f(&D_801EDDD0, &D_801EDDD0, &spB8); + } + + sp9C = 0; + + switch (camera->animState) { + case 0: + case 20: + spCC[sp9C] = camera->focalActor; + sp9C++; + Camera_SetUpdateRatesFastPitch(camera); + Camera_UnsetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + rwData->timer = roData->timer; + rwData->unk_08 = focalActorPosRot->pos.y - camera->unk_0F0.y; + + switch (roData->interfaceFlags & (KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1)) { + case KEEPON4_FLAG_1: + spA2 = CAM_DEG_TO_BINANG(roData->unk_08); + spA0 = BINANG_SUB(BINANG_ROT180(focalActorPosRot->rot.y), spA8.yaw) < 0 + ? BINANG_ROT180(focalActorPosRot->rot.y) + CAM_DEG_TO_BINANG(roData->unk_0C) + : BINANG_ROT180(focalActorPosRot->rot.y) - CAM_DEG_TO_BINANG(roData->unk_0C); + break; + + case (KEEPON4_FLAG_3 | KEEPON4_FLAG_2): + spA2 = CAM_DEG_TO_BINANG(roData->unk_08); + pad1 = BINANG_ROT180(focalActorPosRot->rot.y); + spA0 = pad1 + CAM_DEG_TO_BINANG(roData->unk_0C); + break; + + case KEEPON4_FLAG_2: + spA2 = CAM_DEG_TO_BINANG(roData->unk_08); + spA0 = CAM_DEG_TO_BINANG(roData->unk_0C); + break; + + case (KEEPON4_FLAG_2 | KEEPON4_FLAG_1): + spA2 = spA8.pitch + CAM_DEG_TO_BINANG(roData->unk_08); + spA0 = spA8.yaw + CAM_DEG_TO_BINANG(roData->unk_0C); + break; + + case KEEPON4_FLAG_3: + if (camera->target != NULL) { + Actor_GetWorldPosShapeRot(&sp60, camera->target); + spA2 = CAM_DEG_TO_BINANG(roData->unk_08) - sp60.rot.x; + spA0 = (BINANG_SUB(BINANG_ROT180(sp60.rot.y), spA8.yaw) > 0) + ? BINANG_ROT180(sp60.rot.y) + CAM_DEG_TO_BINANG(roData->unk_0C) + : BINANG_ROT180(sp60.rot.y) - CAM_DEG_TO_BINANG(roData->unk_0C); + + spCC[1] = camera->target; + sp9C++; + break; + } + // fallthrough + case (KEEPON4_FLAG_3 | KEEPON4_FLAG_1): + if (camera->target != 0) { + Actor_GetWorld(&sp4C, camera->target); + spA2 = CAM_DEG_TO_BINANG(roData->unk_08); + sp9E = Camera_CalcXZAngle(&sp4C.pos, &focalActorPosRot->pos); + spA0 = (BINANG_SUB(sp9E, spA8.yaw) > 0) ? sp9E + CAM_DEG_TO_BINANG(roData->unk_0C) + : sp9E - CAM_DEG_TO_BINANG(roData->unk_0C); + spCC[1] = camera->target; + sp9C++; + break; + } + // fallthrough + case (KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1): + spA2 = CAM_DEG_TO_BINANG(roData->unk_08); + spA0 = spA8.yaw; + break; + + default: + spA2 = spA8.pitch; + spA0 = spA8.yaw; + break; + } + + spB8.pitch = spA2; + spB8.yaw = spA0; + spB8.r = roData->unk_04; + // Odd that the return is set to bgId and remains unused + bgId = func_800CC260(camera, &D_801EDDF0, &D_801EDDD0, &spB8, spCC, sp9C); + rwData->unk_04 = (f32)(s16)(spB8.pitch - spA8.pitch) / rwData->timer; + rwData->unk_00 = (f32)(s16)(spB8.yaw - spA8.yaw) / rwData->timer; + rwData->unk_10 = spA8.yaw; + rwData->unk_12 = spA8.pitch; + camera->animState++; + rwData->unk_16 = 1; + break; + + case 10: + rwData->unk_08 = focalActorPosRot->pos.y - camera->unk_0F0.y; + break; + } + + if (roData->interfaceFlags & KEEPON4_FLAG_6) { + if (rwData->timer != 0) { + at->x += ((data->x - at->x) / rwData->timer); + at->y += ((data->y - at->y) / rwData->timer); + at->z += ((data->z - at->z) / rwData->timer); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + } + camera->yOffsetUpdateRate = 0.25f; + camera->xzOffsetUpdateRate = 0.25f; + camera->atLerpStepScale = 0.0f; + } else { + camera->yOffsetUpdateRate = 0.25f; + camera->xzOffsetUpdateRate = 0.25f; + camera->atLerpStepScale = 0.75f; + Camera_ScaledStepToCeilVec3f(data, at, 0.2f, 0.2f, 0.2f); + camera->atLerpStepScale = 0.0f; + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + } + + camera->dist = Camera_ScaledStepToCeilF(roData->unk_04, camera->dist, 0.25f, 1.0f); + spB8.r = camera->dist; + + if (rwData->timer != 0) { + Camera_SetStateFlag(camera, CAM_STATE_DISABLE_MODE_CHANGE); + rwData->unk_10 += (s16)rwData->unk_00; + rwData->unk_12 += (s16)rwData->unk_04; + rwData->timer--; + } else { + Camera_SetStateFlag(camera, CAM_STATE_10 | CAM_STATE_4); + } + + spB8.yaw = Camera_ScaledStepToCeilS(rwData->unk_10, spA8.yaw, roData->unk_14, 5); + spB8.pitch = Camera_ScaledStepToCeilS(rwData->unk_12, spA8.pitch, roData->unk_14, 5); + OLib_AddVecGeoToVec3f(eyeNext, at, &spB8); + *eye = *eyeNext; + func_800CBFA4(camera, at, eye, 3); + + camera->fov = Camera_ScaledStepToCeilF(roData->unk_18, camera->fov, camera->fovUpdateRate, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.5f, 5); + + return 1; +} + +s32 Camera_KeepOn0(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Used for many fixed-based camera settings i.e. camera is fixed in rotation, and often position (but not always) + */ +s32 Camera_Fixed1(Camera* camera) { + s32 pad[2]; + s32 yawDiff; + VecGeo eyeOffset; + VecGeo eyeAtOffset; + VecGeo sp7C; + u32 negOne; + Vec3f adjustedPos; + BgCamFuncData* bgCamFuncData; + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + CameraModeValue* values; + PosRot* targetHome; + PosRot* targetWorld; + VecGeo sp44; + Fixed1ReadOnlyData* roData = &camera->paramData.fixd1.roData; + Fixed1ReadWriteData* rwData = &camera->paramData.fixd1.rwData; + + OLib_Vec3fDiffToVecGeo(&sp7C, at, eye); + + if (!RELOAD_PARAMS(camera)) { + } else { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + Camera_Vec3sToVec3f(&rwData->eyePosRotTarget.pos, &bgCamFuncData->pos); + + rwData->eyePosRotTarget.rot = bgCamFuncData->rot; + rwData->fov = bgCamFuncData->fov; + rwData->focalActor = camera->focalActor; + + roData->unk_00 = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight; + roData->unk_04 = GET_NEXT_SCALED_RO_DATA(values); + roData->fov = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + + if (roData->interfaceFlags & FIXED1_FLAG_4) { + if (camera->target == NULL) { + return false; + } + + targetHome = &camera->target->home; + targetWorld = &camera->target->world; + + OLib_Vec3fDiffToVecGeo(&sp44, &targetHome->pos, &rwData->eyePosRotTarget.pos); + sp44.yaw = targetWorld->rot.y + (s16)(sp44.yaw - targetHome->rot.y); + OLib_AddVecGeoToVec3f(&rwData->eyePosRotTarget.pos, &targetWorld->pos, &sp44); + yawDiff = (s16)(rwData->eyePosRotTarget.rot.y - targetHome->rot.y); + rwData->eyePosRotTarget.rot.y = targetWorld->rot.y + yawDiff; + } + } + + negOne = -1; + + if (rwData->focalActor != camera->focalActor) { + camera->animState = 20; + } + + if (rwData->fov == (s32)negOne) { + rwData->fov = roData->fov * 100; + } else if (rwData->fov <= 360) { + rwData->fov *= 100; + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + if (camera->animState == 0) { + camera->animState++; + Camera_SetUpdateRatesSlow(camera); + if (rwData->fov != (s32)negOne) { + roData->fov = CAM_RODATA_UNSCALE(rwData->fov); + } + + if (bgCamFuncData->unk_0E != (s32)negOne) { + roData->unk_04 = CAM_RODATA_UNSCALE(bgCamFuncData->unk_0E); + } + } + + OLib_Vec3fDiffToVecGeo(&eyeAtOffset, eye, at); + Camera_ScaledStepToCeilVec3f(&rwData->eyePosRotTarget.pos, eye, roData->unk_04, roData->unk_04, 0.2f); + adjustedPos = focalActorPosRot->pos; + adjustedPos.y += focalActorHeight; + camera->dist = OLib_Vec3fDist(&adjustedPos, eye); + eyeOffset.r = camera->dist; + eyeOffset.pitch = + Camera_ScaledStepToCeilS(rwData->eyePosRotTarget.rot.x * -1, eyeAtOffset.pitch, roData->unk_04, 5); + eyeOffset.yaw = Camera_ScaledStepToCeilS(rwData->eyePosRotTarget.rot.y, eyeAtOffset.yaw, roData->unk_04, 5); + OLib_AddVecGeoToVec3f(at, eye, &eyeOffset); + camera->eyeNext = *eye; + Camera_BgCheck(camera, eye, at); + + camera->fov = Camera_ScaledStepToCeilF(roData->fov, camera->fov, roData->unk_04, 0.1f); + camera->roll = 0; + camera->atLerpStepScale = 0.0f; + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + camera->roll = Camera_ScaledStepToCeilS(rwData->eyePosRotTarget.rot.z, camera->roll, roData->unk_04, 5); + + return 1; +} + +/** + * Used for many pivot-based camera settings i.e. camera fixed in position but free to rotate + */ +s32 Camera_Fixed2(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + Vec3f spB0; + Vec3f spA4; + Vec3f sp98; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + f32 temp_f0_3; + f32 new_var; + BgCamFuncData* bgCamFuncData; + VecGeo sp80; + PosRot* sp7C; + PosRot* sp78; + VecGeo sp70; + Vec3f* new_var1; + Vec3f* new_var2; + Player* player; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + Actor* actor; + Fixed2ReadOnlyData* roData = &camera->paramData.fixd2.roData; + Fixed2ReadWriteData* rwData = &camera->paramData.fixd2.rwData; + CameraModeValue* values; + Vec3f sp44; + + if (!RELOAD_PARAMS(camera)) { + } else { + //! FAKE + if (new_var2) {} + + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->unk_00 = + GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->unk_08 = GET_NEXT_RO_DATA(values); + roData->unk_0C = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_10 = GET_NEXT_SCALED_RO_DATA(values); + roData->unk_14 = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + rwData->unk_1C = roData->unk_14 * 100.0f; + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + if (bgCamFuncData != NULL) { + if (!(roData->interfaceFlags & FIXED2_FLAG_1)) { + Camera_Vec3sToVec3f(&rwData->unk_00, &bgCamFuncData->pos); + } else { + if (camera->focalActor != &GET_PLAYER(camera->play)->actor) { + player = GET_PLAYER(camera->play); + OLib_Vec3fDiffToVecGeo(&sp70, &player->actor.focus.pos, eye); + if (sp70.r < roData->unk_04) { + sp70.r = roData->unk_04; + if (sp70.pitch < 0xBB8) { // 16.5 degrees + sp70.pitch = 0xBB8; + } + + new_var1 = &player->actor.focus.pos; + + OLib_AddVecGeoToVec3f(&rwData->unk_00, new_var1, &sp70); + } else { + rwData->unk_00 = *eye; + //! FAKE: + dummy:; + } + } else { + rwData->unk_00 = camera->eye; + } + } + + if (bgCamFuncData->fov != -1) { + if (roData->interfaceFlags & FIXED2_FLAG_7) { + rwData->unk_1C = (bgCamFuncData->fov >> 1) + (bgCamFuncData->fov >> 2); + if (rwData->unk_1C < 0x1E) { + rwData->unk_1C = 0x1E; + } + } else { + rwData->unk_1C = bgCamFuncData->fov; + } + } + + if (bgCamFuncData->unk_0E != -1) { + rwData->unk_0C = bgCamFuncData->unk_0E; + } else { + rwData->unk_0C = roData->unk_08; + } + + if (bgCamFuncData->unk_10 != -1) { + if (roData->interfaceFlags & FIXED2_FLAG_2) { + rwData->unk_14 = bgCamFuncData->unk_10 * 0.01f; + rwData->unk_18 = roData->unk_0C; + } else { + temp_f0_3 = bgCamFuncData->unk_10 * 0.01f; + rwData->unk_18 = temp_f0_3; + rwData->unk_14 = temp_f0_3; + } + } else { + rwData->unk_14 = roData->unk_10; + rwData->unk_18 = roData->unk_0C; + } + if (roData->interfaceFlags & FIXED2_FLAG_4) { + if (camera->target == 0) { + return 0; + } + sp7C = &camera->target->home; + sp78 = &camera->target->world; + OLib_Vec3fDiffToVecGeo(&sp70, &sp7C->pos, &rwData->unk_00); + sp70.yaw = sp78->rot.y + (s16)(sp70.yaw - sp7C->rot.y); + OLib_AddVecGeoToVec3f(&rwData->unk_00, &sp78->pos, &sp70); + } + } else { + rwData->unk_00 = camera->eye; + rwData->unk_0C = roData->unk_08; + rwData->unk_14 = roData->unk_10; + rwData->unk_18 = roData->unk_0C; + } + if (rwData->unk_1C <= 360) { + rwData->unk_1C *= 100; + } + if (camera->animState == 20) { + rwData->unk_14 = 0.2f; + } + //! FAKE: + if (1) {} + } + + sCameraInterfaceFlags = roData->interfaceFlags; + //! FAKE: + new_var = 0.0f; + + if (roData->interfaceFlags & FIXED2_FLAG_3) { + if (camera->target == NULL) { + return false; + } + + spB0.x = camera->target->focus.pos.x; + spB0.y = camera->target->focus.pos.y; + spB0.z = camera->target->focus.pos.z; + + camera->focalActorAtOffset.x = spB0.x - focalActorPosRot->pos.x; + camera->focalActorAtOffset.y = spB0.y - focalActorPosRot->pos.y; + camera->focalActorAtOffset.z = spB0.z - focalActorPosRot->pos.z; + } else if (roData->interfaceFlags & FIXED2_FLAG_6) { + sp98.x = new_var; + sp98.y = roData->unk_00 + focalActorHeight; + sp98.z = new_var; + + if (camera->target != NULL) { + new_var1 = &camera->focalActor->focus.pos; + new_var2 = &camera->target->focus.pos; + //! FAKE: + sp98.x = ((void)0, new_var) + ((new_var2->x - new_var1->x) * 0.4f); + sp98.y += (new_var2->y - new_var1->y) * 0.4f; + sp98.z = ((void)0, new_var) + ((new_var2->z - new_var1->z) * 0.4f); + } + + Camera_ScaledStepToCeilVec3f(&sp98, &camera->focalActorAtOffset, 0.25f, 0.25f, 0.1f); + spB0.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + spB0.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + spB0.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + } else if (roData->interfaceFlags & FIXED2_FLAG_7) { + sp98.x = new_var; + sp98.y = roData->unk_00 + focalActorHeight; + sp98.z = new_var; + + if (camera->target != NULL) { + new_var1 = &camera->focalActor->focus.pos; + new_var2 = &camera->target->focus.pos; + //! FAKE: + sp98.x = ((void)0, new_var) + ((new_var2->x - new_var1->x) * 0.7f); + sp98.y += (new_var2->y - new_var1->y) * 0.7f; + sp98.z = ((void)0, new_var) + ((new_var2->z - new_var1->z) * 0.7f); + } + + Camera_ScaledStepToCeilVec3f(&sp98, &camera->focalActorAtOffset, 0.25f, 0.25f, 0.1f); + spB0.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + spB0.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + spB0.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + } else { + sp98.x = new_var; + sp98.z = new_var; + + if ((((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_4000) || + (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_4)) { + sp98.y = roData->unk_00; + } else { + sp98.y = roData->unk_00 + focalActorHeight; + } + + Camera_ScaledStepToCeilVec3f(&sp98, &camera->focalActorAtOffset, rwData->unk_14, rwData->unk_14, 0.1f); + spB0.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + spB0.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + spB0.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + } + + if (camera->animState == 0) { + Camera_SetUpdateRatesSlow(camera); + if (!(roData->interfaceFlags & FIXED2_FLAG_0)) { + *at = spB0; + OLib_Vec3fDiffToVecGeo(&sp80, at, &rwData->unk_00); + if ((rwData->unk_0C < sp80.r) || (roData->interfaceFlags & FIXED2_FLAG_5)) { + sp80.r = rwData->unk_0C; + OLib_AddVecGeoToVec3f(&spA4, at, &sp80); + } else { + if (sp80.r < roData->unk_04) { + sp80.r = roData->unk_04; + OLib_AddVecGeoToVec3f(&spA4, at, &sp80); + } else { + spA4 = rwData->unk_00; + } + } + sp44 = spA4; + camera->eyeNext = sp44; + *eye = sp44; + camera->fov = rwData->unk_1C * 0.01f; + } + } + + Camera_ScaledStepToCeilVec3f(&spB0, at, rwData->unk_14, rwData->unk_14, 1.0f); + OLib_Vec3fDiffToVecGeo(&sp80, at, &rwData->unk_00); + if ((rwData->unk_0C < sp80.r) || (roData->interfaceFlags & FIXED2_FLAG_5)) { + sp80.r = rwData->unk_0C; + OLib_AddVecGeoToVec3f(&spA4, at, &sp80); + } else if (sp80.r < roData->unk_04) { + sp80.r = roData->unk_04; + OLib_AddVecGeoToVec3f(&spA4, at, &sp80); + } else { + spA4 = rwData->unk_00; + } + + Camera_ScaledStepToCeilVec3f(&spA4, eyeNext, rwData->unk_18, rwData->unk_18, 0.1f); + *eye = *eyeNext; + camera->dist = OLib_Vec3fDist(at, eye); + camera->roll = 0; + camera->xzSpeed = 0; + rwData->unk_10 = rwData->unk_1C * 0.01f; + camera->fov = Camera_ScaledStepToCeilF(rwData->unk_10, camera->fov, rwData->unk_14, 0.1f); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, 1.0f); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + camera->animState = 1; + + return true; +} + +/** + * Used by the unused PREREND_FIXED Camera Setting. Remnant of OoT + */ +s32 Camera_Fixed3(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Fixed4(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Fixed0(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * First person view + */ +s32 Camera_Subject1(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + Vec3f sp90; + Vec3f sp84; + VecGeo sp7C; + VecGeo sp74; + VecGeo tgeo; + PosRot sp58; + f32 sp54; + f32 temp_f0_2; + s16 sp4E; + s16 sp4C; + Subject1ReadOnlyData* roData = &camera->paramData.subj1.roData; + Subject1ReadWriteData* rwData = &camera->paramData.subj1.rwData; + CameraModeValue* values; + f32 temp_f0; + f32 focalActorHeight; + + Actor_GetFocus(&sp58, camera->focalActor); + focalActorHeight = Camera_GetFocalActorHeight(camera); + Camera_SetUpdateRatesFastPitch(camera); + + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->unk_00 = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight; + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->unk_08 = GET_NEXT_RO_DATA(values); + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->unk_10 = GET_NEXT_RO_DATA(values) * 0.1f; + roData->unk_14 = GET_NEXT_RO_DATA(values) * 0.1f; + roData->unk_18 = GET_NEXT_RO_DATA(values) * 0.1f; + roData->unk_1C = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + + sp7C.r = roData->unk_08; + sp7C.yaw = BINANG_ROT180(sp58.rot.y); + sp7C.pitch = sp58.rot.x; + sp90 = sp58.pos; + sp90.y += roData->unk_00; + + OLib_AddVecGeoToVec3f(&sp84, &sp90, &sp7C); + OLib_Vec3fDiffToVecGeo(&sp74, &camera->at, eye); + sCameraInterfaceFlags = roData->interfaceFlags; + + if (camera->play->view.unk164 == 0) { + camera->play->view.unk164 = camera->camId | 0x50; + return true; + } + + if (RELOAD_PARAMS(camera)) { + rwData->unk_00 = sp74.r; + rwData->unk_04 = sp74.yaw; + rwData->unk_06 = sp74.pitch; + + if (roData->interfaceFlags & SUBJECT1_FLAG_4) { + camera->fov = roData->unk_1C; + rwData->timer = 0; + } else { + rwData->timer = 6; + } + camera->dist = roData->unk_08; + camera->rUpdateRateInv = 1.0f; + camera->animState++; + camera->dist = roData->unk_08; + } + + tgeo.r = rwData->unk_00; + tgeo.pitch = rwData->unk_04; + tgeo.yaw = rwData->unk_06; + + if (rwData->timer != 0) { + temp_f0 = (1.0f / rwData->timer); + + VEC3F_LERPIMPDST(at, at, &sp90, temp_f0); + + sp54 = ((tgeo.r - sp7C.r) * (1.0f / 6.0f)); + sp4E = BINANG_SUB(tgeo.pitch, sp7C.yaw) * (1.0f / 6.0f); + sp4C = BINANG_SUB(tgeo.yaw, sp7C.pitch) * (1.0f / 6.0f); + + sp74.r = Camera_ScaledStepToCeilF((rwData->timer * sp54) + sp7C.r, sp74.r, 0.5f, 1.0f); + sp74.yaw = Camera_ScaledStepToCeilS(sp7C.yaw + (sp4E * rwData->timer), sp74.yaw, 0.5f, 5); + sp74.pitch = Camera_ScaledStepToCeilS(sp7C.pitch + (sp4C * rwData->timer), sp74.pitch, 0.5f, 5); + + OLib_AddVecGeoToVec3f(eyeNext, at, &sp74); + *eye = *eyeNext; + rwData->timer--; + } else { + sp54 = Math_SinS(-sp58.rot.x); + temp_f0_2 = Math_CosS(-sp58.rot.x); + + sp90.x = roData->unk_10; + sp90.y = (roData->unk_14 * temp_f0_2) - (roData->unk_18 * sp54); + sp90.z = (roData->unk_14 * sp54) + (roData->unk_18 * temp_f0_2); + + sp54 = Math_SinS(BINANG_ROT180(sp58.rot.y)); + temp_f0_2 = Math_CosS(BINANG_ROT180(sp58.rot.y)); + + roData->unk_10 = (sp90.z * sp54) + (sp90.x * temp_f0_2); + roData->unk_14 = sp90.y; + roData->unk_18 = (sp90.z * temp_f0_2) - (sp90.x * sp54); + + at->x = roData->unk_10 + sp58.pos.x; + at->y = roData->unk_14 + sp58.pos.y; + at->z = roData->unk_18 + sp58.pos.z; + + sp74.r = roData->unk_08; + sp74.yaw = BINANG_ROT180(sp58.rot.y); + sp74.pitch = sp58.rot.x; + + OLib_AddVecGeoToVec3f(&camera->eyeNext, at, &sp74); + sp74.r = roData->unk_04; + OLib_AddVecGeoToVec3f(eye, at, &sp74); + } + + // TODO: is skyboxDisabled accurate here? + if (camera->play->envCtx.skyboxDisabled == 0) { + Camera_BgCheck(camera, at, eye); + } else { + func_800CBFA4(camera, at, eye, 3); + } + + camera->fov = Camera_ScaledStepToCeilF(roData->unk_1C, camera->fov, 0.25f, 0.1f); + camera->roll = 0; + camera->atLerpStepScale = 0.0f; + + return true; +} + +s32 Camera_Subject2(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Subject3(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Subject4(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Subject0(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Data0(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Data1(Camera* camera) { + return Camera_Normal1(camera); +} + +s32 Camera_Data2(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Data3(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Data4(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Unique1(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Player diving from the surface of the water to underwater not as zora + * Also used when using a door to leave a scene + */ +s32 Camera_Unique2(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + f32 phi_f16; + Vec3f sp70; + VecGeo sp68; + VecGeo sp60; + s32 pad[3]; + Unique2ReadOnlyData* roData = &camera->paramData.uniq2.roData; + Unique2ReadWriteData* rwData = &camera->paramData.uniq2.rwData; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + Vec3f* eyeNext = &camera->eyeNext; + CameraModeValue* values; + + OLib_Vec3fDiffToVecGeo(&sp60, at, eye); + + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->unk_00 = + GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->unk_08 = 0.25f; + roData->unk_0C = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + if ((camera->animState == 0) || (rwData->unk_04 != roData->interfaceFlags)) { + rwData->unk_04 = roData->interfaceFlags; + } + + if (camera->animState == 0) { + camera->animState = 1; + Camera_SetUpdateRatesSlow(camera); + rwData->unk_00 = 200.0f; + } + + if (roData->interfaceFlags & UNIQUE2_FLAG_4) { + *eyeNext = *eye; + Camera_UnsetStateFlag(camera, CAM_STATE_2); + } + + sp70 = camera->focalActorPosRot.pos; + + if (roData->interfaceFlags & UNIQUE2_FLAG_0) { + phi_f16 = 1.0f; + } else { + phi_f16 = camera->speedRatio; + } + + at->x += (sp70.x - at->x) * phi_f16 * 0.3f; + at->y += ((sp70.y + focalActorHeight + roData->unk_00) - at->y) * 0.2f; + at->z += (sp70.z - at->z) * phi_f16 * 0.3f; + + rwData->unk_00 = rwData->unk_00 + ((2.0f - rwData->unk_00) * 0.05f); + + if (roData->interfaceFlags & UNIQUE2_FLAG_0) { + OLib_Vec3fDiffToVecGeo(&sp68, at, eyeNext); + sp68.r = roData->unk_04; + OLib_AddVecGeoToVec3f(&sp70, at, &sp68); + Camera_ScaledStepToCeilVec3f(&sp70, eye, roData->unk_08, roData->unk_08, 0.2f); + } else if (roData->interfaceFlags & UNIQUE2_FLAG_1) { + if (OLib_Vec3fDistXZ(at, eyeNext) < roData->unk_04) { + OLib_Vec3fDiffToVecGeo(&sp68, at, eyeNext); + sp68.yaw = Camera_ScaledStepToCeilS(sp68.yaw, sp60.yaw, 0.1f, 5); + sp68.r = roData->unk_04; + sp68.pitch = 0; + OLib_AddVecGeoToVec3f(eye, at, &sp68); + eye->y = eyeNext->y; + } else { + Camera_ScaledStepToCeilVec3f(eyeNext, eye, roData->unk_08, roData->unk_08, 0.2f); + } + } + + if (!(roData->interfaceFlags & UNIQUE2_FLAG_5)) { + Camera_BgCheck(camera, at, eye); + } + + camera->dist = OLib_Vec3fDist(at, eye); + camera->roll = 0; + camera->fov = Camera_ScaledStepToCeilF(roData->unk_0C, camera->fov, 0.2f, 0.1f); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, 1.0f); + + return true; +} + +/** + * Woodfall inside the Swamp, used for normal camModes and derivative modes + */ +s32 Camera_Unique3(Camera* camera) { + s32 ret = Camera_Normal1(camera); + + if ((camera->play->sceneId == SCENE_21MITURINMAE) && (camera->eye.y < 5.0f)) { + camera->eye.y = 5.0f; + } + return ret; +} + +/** + * Woodfall inside the Swamp, used for parallel camModes and derivative modes + */ +s32 Camera_Unique4(Camera* camera) { + s32 ret = Camera_Parallel1(camera); + + if ((camera->play->sceneId == SCENE_21MITURINMAE) && (camera->eye.y < 5.0f)) { + camera->eye.y = 5.0f; + } + return ret; +} + +/** + * Woodfall inside the Swamp, used for battle camMode + */ +s32 Camera_Unique5(Camera* camera) { + s32 ret = Camera_Battle1(camera); + + if ((camera->play->sceneId == SCENE_21MITURINMAE) && (camera->eye.y < 5.0f)) { + camera->eye.y = 5.0f; + } + return ret; +} + +/** + * Entering a room or scene (camera settings START0/START1/START2) + */ +s32 Camera_Unique0(Camera* camera) { + f32 playerHeight; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + PosRot sp9C; + Player* player; + Vec3f sp8C; + VecGeo sp84; + VecGeo sp7C; + BgCamFuncData* bgCamFuncData; + f32 sp74; + s32 pad; + s16 temp_v1; + Unique0ReadOnlyData* roData = &camera->paramData.uniq0.roData; + Unique0ReadWriteData* rwData = &camera->paramData.uniq0.rwData; + CameraModeValue* values; + Vec3f sp54; + + playerHeight = Player_GetHeight((Player*)camera->focalActor); + player = (Player*)camera->focalActor; + + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->unk_00 = GET_NEXT_RO_DATA(values); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + OLib_Vec3fDiffToVecGeo(&sp7C, &camera->at, &camera->eye); + + if (player->rideActor != NULL) { + Actor_GetWorld(&sp9C, player->rideActor); + sp8C = sp9C.pos; + sp8C.y += playerHeight + 20.0f; + } else { + sp8C = camera->focalActorPosRot.pos; + sp8C.y += playerHeight; + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + case 0: + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + Camera_Vec3sToVec3f(&rwData->unk_1C, &bgCamFuncData->pos); + camera->eye = camera->eyeNext = rwData->unk_1C; + rwData->unk_34 = bgCamFuncData->rot; + + temp_v1 = bgCamFuncData->fov; + if (temp_v1 != -1) { + if (temp_v1 <= 360) { + camera->fov = temp_v1; + } else { + camera->fov = temp_v1 * 0.01f; + } + } + + rwData->timer = bgCamFuncData->unk_0E; + if (rwData->timer == -1) { + rwData->timer = 60; + } + + if (bgCamFuncData->unk_10 != -1) { + rwData->unk_18 = bgCamFuncData->unk_10 * 0.01f; + } else { + rwData->unk_18 = roData->unk_04 * 0.01f; + } + + rwData->unk_00 = focalActorPosRot->pos; + if (roData->interfaceFlags & UNIQUE0_FLAG_4) { + rwData->unk_0C.x = focalActorPosRot->pos.x; + rwData->unk_0C.y = focalActorPosRot->pos.y + playerHeight + roData->unk_00; + rwData->unk_0C.z = focalActorPosRot->pos.z; + } + rwData->unk_3A = camera->focalActor->world.rot.y; + rwData->unk_3E = 0; + camera->eye = camera->eyeNext = rwData->unk_1C; + Camera_UnsetStateFlag(camera, CAM_STATE_2); + camera->animState++; + // fallthrough + case 1: + sp84.r = OLib_Vec3fDist(&sp8C, &camera->eye); + sp84.yaw = rwData->unk_34.y; + sp84.pitch = -rwData->unk_34.x; + OLib_VecGeoToVec3f(&rwData->unk_28, &sp84); + func_80179A44(&rwData->unk_1C, focalActorPosRot, &rwData->unk_0C); + camera->at = rwData->unk_0C; + + if (player->stateFlags1 & PLAYER_STATE1_20000000) { + rwData->unk_00 = focalActorPosRot->pos; + } + + if (roData->interfaceFlags & UNIQUE0_FLAG_4) { + sp54.x = focalActorPosRot->pos.x; + sp54.y = focalActorPosRot->pos.y + playerHeight + roData->unk_00; + sp54.z = focalActorPosRot->pos.z; + Camera_ScaledStepToCeilVec3f(&sp54, &camera->at, camera->xzOffsetUpdateRate, camera->yOffsetUpdateRate, + 0.1f); + camera->yOffsetUpdateRate = + Camera_ScaledStepToCeilF(rwData->unk_18, camera->yOffsetUpdateRate, 0.1f, 0.0001f); + camera->xzOffsetUpdateRate = + Camera_ScaledStepToCeilF(rwData->unk_18, camera->xzOffsetUpdateRate, 0.1f, 0.0001f); + } + + if ((camera->animState == 999) || (camera->animState == 666)) { + rwData->unk_3E = 2; + } + + if (roData->interfaceFlags & UNIQUE0_FLAG_0) { + if (rwData->timer > 0) { + rwData->timer--; + rwData->unk_00 = focalActorPosRot->pos; + } else if (!(player->stateFlags1 & PLAYER_STATE1_20000000) && + ((OLib_Vec3fDistXZ(&focalActorPosRot->pos, &rwData->unk_00) >= 10.0f) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_A) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CUP) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) || + (roData->interfaceFlags & UNIQUE0_FLAG_1))) { + rwData->unk_3E = 1; + } + } else { + if (rwData->timer > 0) { + rwData->timer--; + if (rwData->timer == 0) { + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0); + } + } else { + rwData->unk_00 = focalActorPosRot->pos; + } + + if (!(player->stateFlags1 & PLAYER_STATE1_20000000)) { // TODO: Merge into 1 if-statement + if ((rwData->unk_3A != camera->focalActor->world.rot.y) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_A) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CUP) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) || + (roData->interfaceFlags & UNIQUE0_FLAG_1)) { + rwData->unk_3E = 1; + } + } + } + break; + + case 3: + sp74 = 1.0f / rwData->timer; + sp8C.y -= playerHeight * 0.2f; + + Camera_ScaledStepToCeilVec3f(&sp8C, &camera->at, sp74, sp74, 0.001f); + + sp84.r = OLib_Vec3fDist(&camera->at, &camera->eye); + sp84.pitch = sp7C.pitch; + sp84.yaw = sp7C.yaw; + sp84.r = Camera_ScaledStepToCeilF(100.0f, sp84.r, sp74, 1.0f); + + OLib_AddVecGeoToVec3f(&sp8C, &camera->at, &sp84); + + sp74 = (QREG(64) * 0.01f) + 0.2f; + + Camera_ScaledStepToCeilVec3f(&sp8C, &camera->eye, sp74, sp74, 0.001f); + + rwData->timer--; + if (rwData->timer == 0) { + rwData->unk_3E = 9; + } + break; + } + + if ((rwData->unk_3E == 1) || (rwData->unk_3E == 2) || (rwData->unk_3E == 9)) { + camera->dist = OLib_Vec3fDist(&camera->at, &camera->eye); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, 1.0f); + + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + + camera->atLerpStepScale = 0.0f; + + Camera_ChangeSettingFlags(camera, camera->prevSetting, CAM_CHANGE_SETTING_1); + Camera_SetStateFlag(camera, CAM_STATE_2); + + camera->yawUpdateRateInv = 1200.0f; + camera->pitchUpdateRateInv = 1200.0f; + camera->yOffsetUpdateRate = 0.001f; + camera->xzOffsetUpdateRate = 0.001f; + camera->fovUpdateRate = 0.01f; + } + + return true; +} + +/** + * Does the minimal amount of camera update. + * Allows for manual control of camera parameters without interference from update + */ +s32 Camera_Unique6(Camera* camera) { + f32 focalActorHeight; + CameraModeValue* values; + Vec3f playerPosDisp; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + Unique6ReadOnlyData* roData = &camera->paramData.uniq6.roData; + + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + if (camera->animState == 0) { + camera->animState++; + Camera_SetUpdateRatesFastPitch(camera); + } + + if (camera->focalActor != NULL) { + focalActorHeight = Camera_GetFocalActorHeight(camera); + playerPosDisp = focalActorPosRot->pos; + playerPosDisp.y += focalActorHeight; + camera->dist = OLib_Vec3fDist(&playerPosDisp, &camera->eye); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + } else { + camera->dist = OLib_Vec3fDist(&camera->at, &camera->eye); + } + + if (roData->interfaceFlags & UNIQUE6_FLAG_0) { + if (camera->timer > 0) { + camera->timer--; + } + } + + return true; +} + +/** + * Used by the unused PREREND_PIVOT Camera Setting. Remnant of OoT + */ +s32 Camera_Unique7(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Unique8(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Unique9(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Used by unknown settings DEMO0 and ATTENTION + */ +s32 Camera_Demo1(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + PosRot* targetPosRot = &camera->targetPosRot; + f32 temp_f0; + Actor* sp98[1]; + s16 screenX; + s16 screenY; + s32 phi_v0; + VecGeo sp88; + PosRot sp74; + PosRot targetHead; + Demo1ReadOnlyData* roData = &camera->paramData.demo1.roData; + Demo1ReadWriteData* rwData = &camera->paramData.demo1.rwData; + s32 pad; + + if (camera->animState == 0) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + if (camera->animState == 0) { + rwData->unk_1C = 0; + OLib_Vec3fDiffToVecGeo(&rwData->unk_0C, &camera->targetPosRot.pos, eye); + OLib_Vec3fDiffToVecGeo(&rwData->unk_14, &camera->at, eye); + Actor_GetFocus(&targetHead, camera->target); + Actor_GetWorld(&sp74, camera->target); + camera->targetPosRot.pos.x = (sp74.pos.x + targetHead.pos.x) * 0.5f; + camera->targetPosRot.pos.y = (sp74.pos.y + targetHead.pos.y) * 0.5f; + camera->targetPosRot.pos.z = (sp74.pos.z + targetHead.pos.z) * 0.5f; + camera->targetPosRot.rot = targetHead.rot; + camera->animState++; + } + + Actor_GetScreenPos(camera->play, camera->target, &screenX, &screenY); + + temp_f0 = rwData->unk_0C.r; + if ((screenX > 20) && (screenX < (SCREEN_WIDTH - 20)) && (screenY > 40) && (screenY < (SCREEN_HEIGHT - 40))) { + if (temp_f0 < 700.0f) { + phi_v0 = 0; + } else { + phi_v0 = 1; + } + } else if (temp_f0 < 50.0f) { + phi_v0 = 2; + } else if (temp_f0 < 300.0f) { + phi_v0 = 3; + } else if (temp_f0 < 700.0f) { + phi_v0 = 4; + } else { + phi_v0 = 5; + } + + if (camera->target->category == ACTORCAT_DOOR) { + if ((phi_v0 > 0) && (phi_v0 < 5)) { + phi_v0 = 6; + } else if (phi_v0 >= 5) { + phi_v0 = 7; + } + } + + if (camera->target->category == ACTORCAT_CHEST) { + if ((phi_v0 > 1) && (phi_v0 < 5)) { + phi_v0 = 8; + } + } + + switch (phi_v0) { + Vec3f sp44; + + case 1: + Camera_ScaledStepToCeilVec3f(&camera->targetPosRot.pos, at, 0.1f, 0.1f, 0.1f); + OLib_Vec3fDiffToVecGeo(&sp88, at, eye); + sp88.r = rwData->unk_0C.r; + OLib_AddVecGeoToVec3f(eyeNext, at, &sp88); + *eye = *eyeNext; + Camera_BgCheck(camera, at, eye); + break; + + case 2: + Camera_ScaledStepToCeilVec3f(&camera->targetPosRot.pos, &camera->at, 0.1f, 0.1f, 0.1f); + break; + + case 3: + eyeNext = &targetPosRot->pos; + if (rwData->unk_1C == 0) { + sp98[0] = camera->target; + func_800CC260(camera, &rwData->unk_00, &targetPosRot->pos, &rwData->unk_14, sp98, 1); + } + Camera_ScaledStepToCeilVec3f(eyeNext, at, 0.1f, 0.1f, 0.1f); + eyeNext = &camera->eyeNext; + Camera_ScaledStepToCeilVec3f(&rwData->unk_00, eyeNext, 0.1f, 0.1f, 0.1f); + *eye = *eyeNext; + Camera_BgCheck(camera, at, eye); + break; + + case 4: + if (rwData->unk_1C == 0) { + sp98[0] = camera->target; + rwData->unk_14.r = rwData->unk_0C.r; + func_800CC260(camera, &rwData->unk_00, &targetPosRot->pos, &rwData->unk_14, sp98, 1); + } + Camera_ScaledStepToCeilVec3f(&targetPosRot->pos, at, 0.1f, 0.1f, 0.1f); + Camera_ScaledStepToCeilVec3f(&rwData->unk_00, eyeNext, 0.1f, 0.1f, 0.1f); + *eye = *eyeNext; + Camera_BgCheck(camera, at, eye); + break; + + case 5: + eyeNext = &targetPosRot->pos; + if (rwData->unk_1C == 0) { + sp98[0] = camera->target; + func_800CC260(camera, &rwData->unk_00, &targetPosRot->pos, &rwData->unk_0C, sp98, 1); + } + *at = *eyeNext; + sp44 = rwData->unk_00; + camera->eyeNext = sp44; + *eye = sp44; + break; + + case 6: + if (rwData->unk_1C == 0) { + rwData->unk_0C.yaw = camera->target->shape.rot.y; + sp98[0] = camera->target; + rwData->unk_0C.r = rwData->unk_14.r; + func_800CC260(camera, &rwData->unk_00, &targetPosRot->pos, &rwData->unk_0C, sp98, 1); + } + Camera_ScaledStepToCeilVec3f(&targetPosRot->pos, at, 0.1f, 0.1f, 0.1f); + Camera_ScaledStepToCeilVec3f(&rwData->unk_00, eyeNext, 0.1f, 0.1f, 0.1f); + *eye = *eyeNext; + Camera_BgCheck(camera, at, eye); + break; + + case 7: + if (rwData->unk_1C == 0) { + rwData->unk_0C.yaw = camera->target->shape.rot.y; + sp98[0] = camera->target; + func_800CC260(camera, &rwData->unk_00, &targetPosRot->pos, &rwData->unk_0C, sp98, 1); + } + *at = targetPosRot->pos; + sp44 = rwData->unk_00; + camera->eyeNext = sp44; + *eye = sp44; + break; + + case 8: + if (rwData->unk_1C == 0) { + rwData->unk_0C.yaw = camera->target->shape.rot.y; + sp98[0] = camera->target; + func_800CC260(camera, &rwData->unk_00, &targetPosRot->pos, &rwData->unk_0C, sp98, 1); + } + Camera_ScaledStepToCeilVec3f(&targetPosRot->pos, at, 0.1f, 0.1f, 0.1f); + Camera_ScaledStepToCeilVec3f(&rwData->unk_00, eyeNext, 0.1f, 0.1f, 0.1f); + *eye = *eyeNext; + Camera_BgCheck(camera, at, eye); + break; + } + + rwData->unk_1C++; + + return true; +} // Data for opening chests (default) VecGeo D_801B9E64[] = { @@ -726,140 +5973,2308 @@ Vec3f D_801B9ED4[] = { { 0.0f, 3.0f, -3.0f }, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo2.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo3.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo5.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo6.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo7.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo9.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special1.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special2.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special3.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special5.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special6.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special7.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special9.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Alloc.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Free.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Init.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DDFE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE0E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_InitPlayerSettings.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeStatus.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE324.s") - -s16 sEarthquakeFreq[] = { - 0xFFC, // 1 Large Earthquake between CLOCK_TIME(0, 00) to CLOCK_TIME(1, 30) - 0x7FC, // 2 Large Earthquakes between CLOCK_TIME(1, 30) to CLOCK_TIME(3, 00) - 0x3FC, // 4 Large Earthquakes between CLOCK_TIME(3, 00) to CLOCK_TIME(4, 30) - 0x1FC, // 8 Large Earthquakes between CLOCK_TIME(4, 30) to CLOCK_TIME(6, 00) -}; -s16 sEarthquakeTimer = 0; - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE62C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE840.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE890.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE954.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Update.s") - -s32 sModeChangeFlags = 0; - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DF498.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetMode.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeMode.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DF86C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DF8EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeSetting.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeDataIdx.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFC1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFC40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetInputDirYaw.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetCamDir.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetCamDirPitch.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetCamDirYaw.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_AddQuake.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetViewParam.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFEF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFF18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFF34.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFF44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetFlags.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ClearFlags.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeDoorCam.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Copy.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800E01AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetQuakeOffset.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800E01DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800E0228.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800E0238.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetToTrackActor.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetTargetActor.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetWaterYPos.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800E0348.s") +/** + * Opening large chests. + * The camera position will be at a fixed point, and rotate around at different intervals. + * The direction, and initial position is dependent on when the camera was started. + */ +s32 Camera_Demo2(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + VecGeo atToEye; + VecGeo eyeOffset; + VecGeo atOffset; + Vec3f sp7C; + Vec3f sp70; + Vec3f sp64; + f32 sp60; + s32 pad; + u8 skipUpdateEye = false; + f32 playerHeight = Player_GetHeight((Player*)camera->focalActor); + s16 angle; + VecGeo* sp4C = D_801B9E64; + Vec3f* sp48 = D_801B9E84; + Actor* focalActor = camera->focalActor; + Demo2ReadOnlyData* roData = &camera->paramData.demo2.roData; + Demo2ReadWriteData* rwData = &camera->paramData.demo2.rwData; + + if (((focalActor == &GET_PLAYER(camera->play)->actor) && + (((Player*)focalActor)->transformation == PLAYER_FORM_GORON))) { + sp4C = D_801B9EB4; + sp48 = D_801B9ED4; + } + + Camera_UnsetStateFlag(camera, CAM_STATE_4); + + if (RELOAD_PARAMS(camera)) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->fov = GET_NEXT_RO_DATA(values); + roData->unk_04 = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + OLib_Vec3fDiffToVecGeo(&atToEye, at, eye); + + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + case 0: + Camera_UnsetStateFlag(camera, CAM_STATE_3 | CAM_STATE_2); + Camera_SetUpdateRatesSlow(camera); + camera->fov = roData->fov; + camera->roll = rwData->animFrame = 0; + rwData->initialAt = focalActorPosRot->pos; + if (camera->focalActorFloorHeight != BGCHECK_Y_MIN) { + rwData->initialAt.y = camera->focalActorFloorHeight; + } + angle = focalActorPosRot->rot.y; + sp70.x = rwData->initialAt.x + (Math_SinS(angle) * 40.0f); + sp70.y = rwData->initialAt.y + 40.0f; + sp70.z = rwData->initialAt.z + (Math_CosS(angle) * 40.0f); + if (camera->play->state.frames & 2) { + angle -= 0x4000; + rwData->yawDir = 1; + } else { + angle += 0x4000; + rwData->yawDir = -1; + } + + sp7C.x = sp70.x + (sp4C[1].r * Math_SinS(angle)); + sp7C.y = rwData->initialAt.y + 5.0f; + sp7C.z = sp70.z + (sp4C[1].r * Math_CosS(angle)); + if (Camera_BgCheck(camera, &sp70, &sp7C)) { + rwData->yawDir = -rwData->yawDir; + } + + OLib_Vec3fToVecGeo(&atOffset, &sp48[0]); + atOffset.yaw += focalActorPosRot->rot.y; + OLib_AddVecGeoToVec3f(at, &rwData->initialAt, &atOffset); + + eyeOffset.r = sp4C[0].r; + eyeOffset.pitch = sp4C[0].pitch; + eyeOffset.yaw = (sp4C[0].yaw * rwData->yawDir) + focalActorPosRot->rot.y; + + rwData->unk_0C = 1.0f; + break; + + case 1: + // This is the case taken for nearly the entire cutscene + sp60 = (rwData->animFrame - 2) * (1.0f / 146.0f); + + VEC3F_LERPIMPDST(&sp64, &sp48[0], &sp48[1], sp60); + + OLib_Vec3fToVecGeo(&atOffset, &sp64); + atOffset.yaw = (atOffset.yaw * rwData->yawDir) + focalActorPosRot->rot.y; + OLib_AddVecGeoToVec3f(at, &rwData->initialAt, &atOffset); + + atOffset.r = LERPIMP(sp4C[0].r, sp4C[1].r, sp60); + atOffset.pitch = BINANG_LERPIMP(sp4C[0].pitch, sp4C[1].pitch, sp60); + atOffset.yaw = BINANG_LERPIMP(sp4C[0].yaw, sp4C[1].yaw, sp60); + + eyeOffset.r = atOffset.r; + eyeOffset.pitch = atOffset.pitch; + eyeOffset.yaw = (atOffset.yaw * rwData->yawDir) + focalActorPosRot->rot.y; + + rwData->unk_0C -= (1.0f / 365.0f); + break; + + case 2: + sp60 = (rwData->animFrame - 148) * 0.1f; + + sp64.x = LERPIMP(sp48[1].x, sp48[2].x, sp60); + sp64.y = LERPIMP((sp48[1].y - playerHeight), sp48[2].y, sp60); + sp64.y += playerHeight; + sp64.z = LERPIMP(sp48[1].z, sp48[2].z, sp60); + + OLib_Vec3fToVecGeo(&atOffset, &sp64); + atOffset.yaw = (atOffset.yaw * rwData->yawDir) + focalActorPosRot->rot.y; + OLib_AddVecGeoToVec3f(at, &rwData->initialAt, &atOffset); + + atOffset.r = LERPIMP(sp4C[1].r, sp4C[2].r, sp60); + atOffset.pitch = BINANG_LERPIMP(sp4C[1].pitch, sp4C[2].pitch, sp60); + atOffset.yaw = BINANG_LERPIMP(sp4C[1].yaw, sp4C[2].yaw, sp60); + + eyeOffset.r = atOffset.r; + eyeOffset.pitch = atOffset.pitch; + eyeOffset.yaw = (atOffset.yaw * rwData->yawDir) + focalActorPosRot->rot.y; + + rwData->unk_0C -= 0.04f; + break; + + case 3: + sp60 = (rwData->animFrame - 159) * (1.0f / 9.0f); + + sp64.x = LERPIMP(sp48[2].x, sp48[3].x, sp60); + sp64.y = LERPIMP(sp48[2].y, sp48[3].y, sp60); + sp64.y += playerHeight; + sp64.z = LERPIMP(sp48[2].z, sp48[3].z, sp60); + + OLib_Vec3fToVecGeo(&atOffset, &sp64); + atOffset.yaw = (atOffset.yaw * rwData->yawDir) + focalActorPosRot->rot.y; + OLib_AddVecGeoToVec3f(at, &rwData->initialAt, &atOffset); + + atOffset.r = LERPIMP(sp4C[2].r, sp4C[3].r, sp60); + atOffset.pitch = BINANG_LERPIMP(sp4C[2].pitch, sp4C[3].pitch, sp60); + atOffset.yaw = BINANG_LERPIMP(sp4C[2].yaw, sp4C[3].yaw, sp60); + + eyeOffset.r = atOffset.r; + eyeOffset.pitch = atOffset.pitch; + eyeOffset.yaw = (atOffset.yaw * rwData->yawDir) + focalActorPosRot->rot.y; + + rwData->unk_0C += (4.0f / 45.0f); + break; + + case 30: + Camera_SetStateFlag(camera, CAM_STATE_10); + if (camera->stateFlags & CAM_STATE_3) { + camera->animState = 4; + } + // fallthrough + case 10: + case 20: + // Taken on the 1st and 158th animation frame + skipUpdateEye = true; + break; + case 4: + eyeOffset.r = 80.0f; + eyeOffset.pitch = 0; + eyeOffset.yaw = atToEye.yaw; + rwData->unk_0C = 0.1f; + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A, 0); + + if (!(((rwData->animFrame < 0) || (camera->xzSpeed > 0.001f) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_A) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CUP) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R)) && + (camera->stateFlags & CAM_STATE_3))) { + goto skipeyeUpdate; + } + // fallthrough + default: + Camera_SetStateFlag(camera, CAM_STATE_4 | CAM_STATE_2); + Camera_UnsetStateFlag(camera, CAM_STATE_3); + func_800CC938(camera); + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0); + skipeyeUpdate: + skipUpdateEye = true; + break; + } + + rwData->animFrame++; + + /** + * Opening a large chest only lasts 135 frames + * + * So for one frame, the animState is set to 10, + * allowing the static data to be loaded into the subCamera mini-heap + * + * For the remainder of the cutscene, animState is set to 1 + */ + if (rwData->animFrame == 1) { + camera->animState = 10; + } else if (rwData->animFrame == 2) { + camera->animState = 1; + } else if (rwData->animFrame == 148) { + camera->animState = 2; + } else if (rwData->animFrame == 158) { + camera->animState = 20; + } else if (rwData->animFrame == 159) { + camera->animState = 3; + } else if (rwData->animFrame == 168) { + camera->animState = 30; + } else if (rwData->animFrame == 228) { + camera->animState = 4; + } + + if (!skipUpdateEye) { + eyeOffset.r = Camera_ScaledStepToCeilF(eyeOffset.r, atToEye.r, rwData->unk_0C, 1.0f); + eyeOffset.pitch = Camera_ScaledStepToCeilS(eyeOffset.pitch, atToEye.pitch, rwData->unk_0C, 5); + eyeOffset.yaw = Camera_ScaledStepToCeilS(eyeOffset.yaw, atToEye.yaw, rwData->unk_0C, 5); + OLib_AddVecGeoToVec3f(eyeNext, at, &eyeOffset); + *eye = *eyeNext; + } + + camera->dist = OLib_Vec3fDist(at, eye); + camera->atLerpStepScale = 0.1f; + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + + return true; +} + +/** + * Taking the warp pad from the start of a dungeon to the boss-room + */ +s32 Camera_Demo3(Camera* camera) { + s32 pad2; + f32 temp; + CameraModeValue* values; + VecGeo atToEye; + PosRot focalActorFocus; + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + Demo3ReadOnlyData* roData = &camera->paramData.demo3.roData; + Demo3ReadWriteData* rwData = &camera->paramData.demo3.rwData; + + OLib_Vec3fDiffToVecGeo(&atToEye, at, eye); + Actor_GetFocus(&focalActorFocus, camera->focalActor); + focalActorFocus.pos.x = camera->focalActorPosRot.pos.x; + focalActorFocus.pos.z = camera->focalActorPosRot.pos.z; + focalActorFocus.pos.y -= (focalActorFocus.pos.y - camera->focalActorPosRot.pos.y) * 0.4f; + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.1f, 0.1f, 0.1f); + + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + camera->animState = 0; + } + + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + case 0: + // Init Data + camera->animState++; + rwData->timer = 125; + Distortion_Request(DISTORTION_TYPE_ZORA_SWIMMING); + Distortion_SetDuration(60); + break; + + case 1: + // Zoom into player, start to rise + temp = 1.0f / rwData->timer; + atToEye.r = Camera_ScaledStepToCeilF(140.0f, atToEye.r, temp, 0.1f); + rwData->timer--; + camera->fov = Camera_ScaledStepToCeilF(50.0f, camera->fov, 0.1f, 0.1f); + if (rwData->timer <= 0) { + rwData->timer = 20; + camera->animState++; + Distortion_Request(DISTORTION_TYPE_UNDERWATER_ENTRY); + Distortion_SetDuration(80); + } + break; + + case 2: + // continue rising + rwData->timer--; + if (rwData->timer <= 0) { + rwData->unk_04 = 120; + rwData->timer = 0; + rwData->unk_00 = (175.0f - camera->fov) / rwData->unk_04; + camera->animState++; + Distortion_Request(DISTORTION_TYPE_BOSS_WARP); + Distortion_SetDuration(15); + } + break; + + case 3: + rwData->timer++; + camera->fov += rwData->unk_00 * rwData->timer; + if (rwData->timer >= 15) { + Distortion_RemoveRequest(DISTORTION_TYPE_BOSS_WARP); + Distortion_RemoveRequest(DISTORTION_TYPE_UNDERWATER_ENTRY); + Distortion_RemoveRequest(DISTORTION_TYPE_ZORA_SWIMMING); + camera->animState++; + } + break; + } + + OLib_AddVecGeoToVec3f(eyeNext, at, &atToEye); + *eye = *eyeNext; + return true; +} + +/** + * Mask Transformation Cutscene 0: + * starting as a human and transforming into anything else + */ +s32 Camera_Demo4(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + VecGeo atToEye; + CameraModeValue* values; + PosRot focalActorFocus; + f32 sp58; + f32 sin; + Demo4ReadOnlyData* roData = &camera->paramData.demo4.roData; + Demo4ReadWriteData* rwData = &camera->paramData.demo4.rwData; + s32 pad[2]; + + OLib_Vec3fDiffToVecGeo(&atToEye, at, eye); + + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + camera->animState = 0; + rwData->unk_00 = *at; + rwData->unk_18 = atToEye; + rwData->unk_14 = camera->fov; + } + + Actor_GetFocus(&focalActorFocus, camera->focalActor); + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + //! FAKE: + if (1) {} + case 0: + camera->animState++; + rwData->timer = 0; + + if (!(atToEye.r < 40.0f)) { + atToEye.r = 40.0f; + } + + camera->fov = 80.0f; + rwData->unk_10 = (Rand_ZeroOne() - 0.5f) * 40.0f; + // fallthrough + case 1: + // Camera fixed on human player as the mask moves from the pocket to the face + // Camera rolls left and right + if (rwData->timer >= 12) { + rwData->unk_0C = (rwData->timer - 12) * 10.384615f; + sin = sin_rad(DEG_TO_RAD(rwData->unk_0C)); + rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin; + if (rwData->timer == 12) { + Distortion_Request(DISTORTION_TYPE_MASK_TRANSFORM_1); + Distortion_SetDuration(26); + } + } else { + rwData->unk_0C = 0.0f; + } + + sp58 = rwData->timer * (6.0f / 19.0f); + rwData->unk_20 = focalActorPosRot->rot.y + 0x4000; + focalActorFocus.pos.x = (Math_SinS(rwData->unk_20) * sp58 * rwData->unk_0C) + focalActorPosRot->pos.x; + focalActorFocus.pos.z = (Math_CosS(rwData->unk_20) * sp58 * rwData->unk_0C) + focalActorPosRot->pos.z; + focalActorFocus.pos.y -= (focalActorFocus.pos.y - focalActorPosRot->pos.y) * 0.099999994f; + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.2f, 0.2f, 0.1f); + + sp58 = (rwData->timer * (30.0f / 19.0f)); + camera->roll = CAM_DEG_TO_BINANG(sp58 * rwData->unk_0C); + + sp58 = 1.0f / (38 - rwData->timer); + rwData->timer++; + atToEye.r = Camera_ScaledStepToCeilF(30.0f, atToEye.r, sp58, 0.1f); + atToEye.pitch = 0; + + if (rwData->timer >= 38) { + rwData->timer = 24; + camera->animState++; + rwData->unk_0C = (32.0f - camera->fov) / 24.0f; + Distortion_Request(DISTORTION_TYPE_MASK_TRANSFORM_2); + } + break; + + case 2: + // Camera steadies as human player is fully croutched down and hiding face + if (rwData->timer == 24) { + at->x = (Math_SinS(focalActorPosRot->rot.y) * -7.0f) + focalActorPosRot->pos.x; + at->y = focalActorFocus.pos.y - ((focalActorFocus.pos.y - focalActorPosRot->pos.y) * 0.1f); + at->z = (Math_CosS(focalActorPosRot->rot.y) * -7.0f) + focalActorPosRot->pos.z; + } else { + focalActorFocus.pos.x = (Math_SinS(focalActorPosRot->rot.y) * -7.0f) + focalActorPosRot->pos.x; + focalActorFocus.pos.y -= (focalActorFocus.pos.y - camera->focalActorPosRot.pos.y) * 0.1f; + focalActorFocus.pos.z = (Math_CosS(focalActorPosRot->rot.y) * -7.0f) + focalActorPosRot->pos.z; + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.25f, 0.25f, 0.1f); + } + + if (rwData->timer > 0) { + camera->fov += rwData->unk_0C; + } + + rwData->timer--; + + atToEye.r = 35.0f; + atToEye.pitch = 0x2000; + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.1f, 5); + + if (rwData->timer <= 0) { + rwData->unk_20 = 630; + rwData->timer = 0; + rwData->unk_0C = (60.0f - camera->fov) / rwData->unk_20; + camera->animState = 3; + } + break; + + case 3: + // Camera zooms into human players face with bulging eyes + focalActorFocus.pos.x = focalActorPosRot->pos.x; + focalActorFocus.pos.y -= (focalActorFocus.pos.y - camera->focalActorPosRot.pos.y) * 0.1f; + focalActorFocus.pos.z = focalActorPosRot->pos.z; + + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.25f, 0.25f, 0.1f); + + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.1f, 5); + rwData->timer++; + camera->fov += rwData->unk_0C * rwData->timer; + atToEye.pitch = 0x2000; + atToEye.r = 35.0f; + + if (rwData->timer >= 35) { + Distortion_RemoveRequest(DISTORTION_TYPE_MASK_TRANSFORM_1); + Distortion_RemoveRequest(DISTORTION_TYPE_MASK_TRANSFORM_2); + camera->animState = 4; + } + break; + + case 999: + Actor_GetFocus(&focalActorFocus, camera->focalActor); + Distortion_RemoveRequest(DISTORTION_TYPE_MASK_TRANSFORM_1); + Distortion_RemoveRequest(DISTORTION_TYPE_MASK_TRANSFORM_2); + camera->animState = 4; + break; + + case 4: + // Camera backs up as player is now in a transformed state + focalActorFocus.pos.y -= (focalActorFocus.pos.y - camera->focalActorPosRot.pos.y) * 0.1f; + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.1f, 0.1f, 0.1f); + atToEye = rwData->unk_18; + camera->fov = rwData->unk_14; + camera->roll = 0; + break; + } + + OLib_AddVecGeoToVec3f(&camera->eyeNext, at, &atToEye); + *eye = camera->eyeNext; + + return true; +} + +/** + * Mask Transformation Cutscene 1: + * starting as non-human/fierce diety and transforming into anything else + */ +s32 Camera_Demo5(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + VecGeo atToEye; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + PosRot focalActorFocus; + f32 new_var; + f32 sp58; + f32 sin; + Demo5ReadOnlyData* roData = &camera->paramData.demo5.roData; + Demo5ReadWriteData* rwData = &camera->paramData.demo5.rwData; + CameraModeValue* values; + + OLib_Vec3fDiffToVecGeo(&atToEye, at, eye); + + if (RELOAD_PARAMS(camera)) { + values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + camera->animState = 0; + rwData->unk_00 = *at; + rwData->unk_1C = atToEye; + rwData->unk_18 = camera->fov; + } + + Actor_GetFocus(&focalActorFocus, camera->focalActor); + + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + case 0: + camera->animState++; + atToEye.pitch = 0; + rwData->timer = 0x12; + rwData->unk_14 = 80.0f; + atToEye.r = 30.0f; + camera->fov = 80.0f; + rwData->unk_10 = (Rand_ZeroOne() - 0.5f) * 40.0f; + camera->roll = 0; + focalActorFocus.pos.x = focalActorPosRot->pos.x; + focalActorFocus.pos.z = focalActorPosRot->pos.z; + *at = focalActorFocus.pos; + // fallthrough + case 1: + // Camera remains still as player moves hands to face + rwData->timer--; + if (rwData->timer <= 0) { + rwData->timer = 0; + camera->animState = 2; + rwData->unk_24 = camera->focalActorPosRot.rot.y + 0x4000; + rwData->timer = 46; + Distortion_Request(DISTORTION_TYPE_MASK_TRANSFORM_1); + Distortion_SetDuration(46); + } + break; + + case 2: + // Camera zooms out while rolling back and forth + rwData->unk_0C = rwData->timer * (180.0f / 23.0f); + sp58 = DEG_TO_RAD(rwData->unk_0C); + sin = sin_rad(sp58); + rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin; + new_var = (46 - rwData->timer) * (5.0f / 46.0f); + focalActorFocus.pos.x = (Math_SinS(rwData->unk_24) * new_var * rwData->unk_0C) + focalActorPosRot->pos.x; + focalActorFocus.pos.z = (Math_CosS(rwData->unk_24) * new_var * rwData->unk_0C) + focalActorPosRot->pos.z; + focalActorFocus.pos.y -= (focalActorFocus.pos.y - camera->focalActorPosRot.pos.y) * 0.2f; + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.1f, 0.1f, 0.1f); + new_var = rwData->timer * (10.0f / 23.0f); + camera->roll = CAM_DEG_TO_BINANG(rwData->unk_0C * new_var); + new_var = 1.0f / rwData->timer; + atToEye.r = Camera_ScaledStepToCeilF(rwData->unk_14, atToEye.r, new_var, 0.1f); + rwData->timer--; + atToEye.pitch = 0; + if (rwData->timer <= 0) { + camera->animState = 3; + Distortion_RemoveRequest(DISTORTION_TYPE_MASK_TRANSFORM_1); + } + break; + + case 999: + Actor_GetFocus(&focalActorFocus, camera->focalActor); + camera->animState = 3; + Distortion_RemoveRequest(DISTORTION_TYPE_MASK_TRANSFORM_1); + break; + + case 3: + // Player is in new form + focalActorFocus.pos.y -= (focalActorFocus.pos.y - camera->focalActorPosRot.pos.y) * 0.1f; + Camera_ScaledStepToCeilVec3f(&focalActorFocus.pos, at, 0.1f, 0.1f, 0.1f); + camera->roll = 0; + atToEye = rwData->unk_1C; + camera->fov = rwData->unk_18; + break; + } + + OLib_AddVecGeoToVec3f(eyeNext, at, &atToEye); + *eye = *eyeNext; + + return true; +} + +s32 Camera_Demo6(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Demo7(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Demo8(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Demo9(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Smoothly and gradually return camera to Player after a cutscene + * Used for global actorCsId = 0x7E (Connect Camera Setting) + */ +s32 Camera_Demo0(Camera* camera) { + s32 pad; + f32 timer; + s16 phi_v1; + Camera* subCam = &camera->play->subCameras[2]; + Vec3f* eye = &camera->eye; + Vec3f* subEye = &subCam->eye; + Vec3f* at = &camera->at; + Demo0ReadOnlyData* roData = &camera->paramData.demo0.roData; + Demo0ReadWriteData* rwData = &camera->paramData.demo0.rwData; + + // Initialize + if (camera->animState == 0) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + // Initialize + if (camera->animState == 0) { + OLib_Vec3fDiffToVecGeo(&rwData->subAtToEye, &subCam->at, subEye); + OLib_Vec3fDiffToVecGeo(&rwData->atToEye, &camera->at, eye); + if (rwData->subAtToEye.r < 50.0f) { + rwData->subAtToEye.r = 50.0f; + if (rwData->subAtToEye.pitch < 0x7D0) { // 11 degrees + rwData->subAtToEye.pitch = 0x7D0; + } + } + + rwData->unk_00 = OLib_Vec3fDist(eye, subEye); + if (rwData->unk_00 < 300.0f) { + rwData->timer = 0; + } else { + rwData->timer = sqrtf(rwData->unk_00 - 200.0f); + } + + rwData->unk_14 = subCam->inputDir.x - camera->inputDir.x; + if (rwData->unk_14 >= 0) { + phi_v1 = rwData->unk_14; + } else { + phi_v1 = -rwData->unk_14; + } + + if (phi_v1 > 10000) { + phi_v1 /= 1000; + if (rwData->timer < phi_v1) { + rwData->timer = phi_v1; + } + } + + rwData->unk_16 = subCam->inputDir.y - camera->inputDir.y; + if (rwData->unk_16 >= 0) { + phi_v1 = rwData->unk_16; + } else { + phi_v1 = -rwData->unk_16; + } + + if (phi_v1 > 10000) { + phi_v1 /= 1000; + if (rwData->timer < phi_v1) { + rwData->timer = phi_v1; + } + } + + rwData->unk_18 = subCam->inputDir.z - camera->inputDir.z; + if (rwData->unk_18 >= 0) { + phi_v1 = rwData->unk_18; + } else { + phi_v1 = -rwData->unk_18; + } + + if (phi_v1 > 10000) { + phi_v1 /= 1000; + if (rwData->timer < phi_v1) { + rwData->timer = phi_v1; + } + } + + if (rwData->timer != 0) { + rwData->unk_00 = (rwData->subAtToEye.r - rwData->atToEye.r) / rwData->timer; + rwData->unk_14 = (s16)(rwData->subAtToEye.pitch - rwData->atToEye.pitch) / rwData->timer; + rwData->unk_16 = (s16)(rwData->subAtToEye.yaw - rwData->atToEye.yaw) / rwData->timer; + rwData->unk_18 = (s16)(subCam->roll - camera->roll) / rwData->timer; + } + camera->animState++; + } + + if (rwData->timer != 0) { + timer = rwData->timer; + + // Update At (Inverse Interpolation) + at->x += (subCam->at.x - camera->at.x) / timer; + at->y += (subCam->at.y - camera->at.y) / timer; + at->z += (subCam->at.z - camera->at.z) / timer; + + rwData->atToEye.r += rwData->unk_00; + rwData->atToEye.pitch += rwData->unk_14; + rwData->atToEye.yaw += rwData->unk_16; + + camera->roll += rwData->unk_18; + + // Update Eye + OLib_AddVecGeoToVec3f(eye, at, &rwData->atToEye); + camera->eyeNext = *eye; + + rwData->timer--; + } + + if (rwData->timer == 0) { + CutsceneManager_Stop(0x7E); + } + + return true; +} + +s32 Camera_Special0(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Special1(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Special2(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Special3(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Special4(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Flying with hookshot + */ +s32 Camera_Special5(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + PosRot spA8; + s16 pad1; + s16 spA4; + CameraCollision sp7C; + VecGeo sp74; + VecGeo sp6C; + VecGeo atToEye; + VecGeo atToEyeNext; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + Special5ReadOnlyData* roData = &camera->paramData.spec5.roData; + Special5ReadWriteData* rwData = &camera->paramData.spec5.rwData; + f32 rand; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + + if (RELOAD_PARAMS(camera)) { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + f32 yNormal = (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + + roData->yOffset = (GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight) * yNormal; + roData->eyeDist = GET_NEXT_RO_DATA(values); + roData->minDistForRot = GET_NEXT_RO_DATA(values); + roData->pitch = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values)); + roData->fovTarget = GET_NEXT_RO_DATA(values); + roData->atMaxLERPScale = GET_NEXT_SCALED_RO_DATA(values); + roData->timerInit = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + OLib_Vec3fDiffToVecGeo(&atToEye, at, eye); + OLib_Vec3fDiffToVecGeo(&atToEyeNext, at, eyeNext); + Actor_GetWorld(&spA8, camera->target); + + sCameraInterfaceFlags = roData->interfaceFlags; + + if (camera->animState == 0) { + camera->animState++; + rwData->animTimer = roData->timerInit; + } + + if (rwData->animTimer > 0) { + rwData->animTimer--; + } else if (rwData->animTimer == 0) { + if ((camera->target == NULL) || (camera->target->update == NULL)) { + camera->target = NULL; + return true; + } + + rwData->animTimer--; + if (roData->minDistForRot < OLib_Vec3fDist(&spA8.pos, &focalActorPosRot->pos)) { + sp6C.yaw = focalActorPosRot->rot.y; + sp6C.pitch = -focalActorPosRot->rot.x; + sp6C.r = 20.0f; + OLib_AddVecGeoToVec3f(&sp7C.pos, &spA8.pos, &sp6C); + func_800CBC84(camera, at, &sp7C, 0); + OLib_Vec3fToVecGeo(&sp6C, &sp7C.norm); + spA4 = BINANG_SUB(focalActorPosRot->rot.y, sp6C.yaw); + sp74.r = roData->eyeDist; + rand = Rand_ZeroOne(); + sp74.yaw = BINANG_ROT180(focalActorPosRot->rot.y) + + (s16)(spA4 < 0 ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f))); + sp74.pitch = roData->pitch; + OLib_AddVecGeoToVec3f(eyeNext, &spA8.pos, &sp74); + *eye = *eyeNext; + Camera_BgCheck(camera, &spA8.pos, eye); + } + } + + Camera_CalcAtDefault(camera, &atToEyeNext, roData->yOffset, 0); + camera->fov = Camera_ScaledStepToCeilF(roData->fovTarget, camera->fov, camera->atLerpStepScale * 0.05f, 0.1f); + camera->roll = Camera_ScaledStepToCeilS(0, camera->roll, 0.5f, 5); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->atMaxLERPScale); + + return true; +} + +s32 Camera_Special6(Camera* camera) { + return Camera_Noop(camera); +} + +s32 Camera_Special7(Camera* camera) { + return Camera_Noop(camera); +} + +/** + * Exiting a spiral staircase cutscene. + * Camera remains fixed at given position, and tracks player for the duration of the cutscene + */ +s32 Camera_Special8(Camera* camera) { + Vec3f* at = &camera->at; + Vec3f* eyeNext = &camera->eyeNext; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + Vec3f atTarget; + Vec3f posOffsetTarget; + f32 yNormal; + f32 focalActorHeight = Camera_GetFocalActorHeight(camera); + DoorParams* doorParams = &camera->paramData.doorParams; + Special8ReadOnlyData* roData = &camera->paramData.spec8.roData; + Special8ReadWriteData* rwData = &camera->paramData.spec8.rwData; + s32 pad[2]; + + Camera_UnsetStateFlag(camera, CAM_STATE_4); + yNormal = (0.8f - ((68.0f / focalActorHeight) * -0.2f)); + + if (!RELOAD_PARAMS(camera)) { + } else { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + // Initialize data + roData->yOffset = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * yNormal; + roData->eyeStepScale = GET_NEXT_SCALED_RO_DATA(values); + roData->posStepScale = GET_NEXT_SCALED_RO_DATA(values); + roData->fov = GET_NEXT_RO_DATA(values); + roData->spiralDoorCsLength = GET_NEXT_RO_DATA(values) * 5; + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + rwData->fov = roData->fov * 100.0f; + rwData->spiralDoorCsFrame = 0; + Camera_UnsetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + rwData->eye.x = doorParams->eye.x; + rwData->eye.y = doorParams->eye.y; + rwData->eye.z = doorParams->eye.z; + } + + // Check if cutscene is still playing + if (rwData->spiralDoorCsFrame < roData->spiralDoorCsLength) { + rwData->spiralDoorCsFrame++; + sCameraInterfaceFlags = roData->interfaceFlags; + posOffsetTarget.x = 0.0f; + posOffsetTarget.y = roData->yOffset + focalActorHeight; + posOffsetTarget.z = 0.0f; + Camera_ScaledStepToCeilVec3f(&posOffsetTarget, &camera->focalActorAtOffset, roData->posStepScale, + roData->posStepScale, 0.1f); + + // Camera follows player as they exit the stairwell + atTarget.x = focalActorPosRot->pos.x + camera->focalActorAtOffset.x; + atTarget.y = focalActorPosRot->pos.y + camera->focalActorAtOffset.y; + atTarget.z = focalActorPosRot->pos.z + camera->focalActorAtOffset.z; + if (camera->animState == 0) { + camera->animState++; + if (!(roData->interfaceFlags & SPECIAL8_FLAG_0)) { + camera->eyeNext = rwData->eye; + camera->at = atTarget; + } + } + + // Update at to look at player + Camera_ScaledStepToCeilVec3f(&atTarget, at, roData->posStepScale, roData->posStepScale, 10.0f); + + // Move camera position &rwData->eye and remain there for the entire cutscen + Camera_ScaledStepToCeilVec3f(&rwData->eye, eyeNext, roData->eyeStepScale, roData->eyeStepScale, 0.1f); + camera->eye = *eyeNext; + camera->dist = OLib_Vec3fDist(at, &camera->eye); + camera->roll = 0; + camera->xzSpeed = 0.0f; + camera->fov = CAM_RODATA_UNSCALE(rwData->fov); + camera->atLerpStepScale = Camera_ClampLerpScale(camera, 1.0f); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + } else { + // Cutscene is finished + Camera_SetStateFlag(camera, CAM_STATE_10 | CAM_STATE_4); + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0); + + // Wait for user input to move to the next camera update function + if ((camera->xzSpeed > 0.001f) || CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_A) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CUP) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) || + (roData->interfaceFlags & SPECIAL8_FLAG_3)) { + func_800CC938(camera); + Camera_SetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + Camera_UnsetStateFlag(camera, CAM_STATE_10); + } + } + return true; +} + +/** + * Entering and exiting a door between rooms (eg. sliding doors) + * Camera closely follows player on both the front and the back room + */ +s32 Camera_Special9(Camera* camera) { + Vec3f* eye = &camera->eye; + Vec3f* at = &camera->at; + s32 rand1; + Vec3f spB8; + VecGeo spB0; + VecGeo spA8; + f32 focalActorHeight; + s32 phi_v1_2; + s16 actorCsId; + f32 yNormal; + PosRot sp84; + Vec3f* eyeNext = &camera->eyeNext; + PosRot* focalActorPosRot = &camera->focalActorPosRot; + DoorParams* doorParams = &camera->paramData.doorParams; + Special9ReadOnlyData* roData = &camera->paramData.spec9.roData; + Special9ReadWriteData* rwData = &camera->paramData.spec9.rwData; + s32 sp50[1]; + BgCamFuncData* bgCamFuncData; + + focalActorHeight = Camera_GetFocalActorHeight(camera); + actorCsId = CutsceneManager_GetCurrentCsId(); + + if ((actorCsId != -1) && (actorCsId != 0x7D)) { + func_800E0348(camera); + } + + Camera_UnsetStateFlag(camera, CAM_STATE_4); + yNormal = 0.8f - ((68.0f / focalActorHeight) * -0.2f); + + if (!RELOAD_PARAMS(camera)) { + } else { + CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values; + + roData->yOffset = GET_NEXT_SCALED_RO_DATA(values) * focalActorHeight * yNormal; + roData->fov = GET_NEXT_RO_DATA(values); + roData->interfaceFlags = GET_NEXT_RO_DATA(values); + } + + if (doorParams->doorActor != NULL) { + Actor_GetWorldPosShapeRot(&sp84, doorParams->doorActor); + } else { + sp84 = *focalActorPosRot; + sp84.pos.y += focalActorHeight + roData->yOffset; + sp84.rot.x = 0; + } + + OLib_Vec3fDiffToVecGeo(&spA8, at, eye); + + sCameraInterfaceFlags = roData->interfaceFlags; + + switch (camera->animState) { + case 0: + // Init + Camera_UnsetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + camera->animState++; + if (ABS((s16)(focalActorPosRot->rot.y - sp84.rot.y)) > 0x4000) { + rwData->unk_00 = BINANG_ROT180(sp84.rot.y); + } else { + rwData->unk_00 = sp84.rot.y; + } + // fallthrough + case 1: + // Camera is fixed in front of the door + doorParams->timer1--; + if (doorParams->timer1 > 0) { + break; + } + + camera->animState++; + + // Setup for the camera moving behind the door + if (roData->interfaceFlags & SPECIAL9_FLAG_0) { + bgCamFuncData = (BgCamFuncData*)Camera_GetBgCamOrActorCsCamFuncData(camera, camera->bgCamIndex); + Camera_Vec3sToVec3f(eyeNext, &bgCamFuncData->pos); + spB8 = *eye = *eyeNext; + } else { + s16 camEyeSide; + s16 randFloat; + + spB0.pitch = ((s16)(Rand_ZeroOne() * 0x280) + 0xBB8); + randFloat = ((s16)(Rand_ZeroOne() * 0x4CE) + 0x5DC); + + // The camera will either position itself either to the left or to the right + // of the door when it jumps behind it. It's effectively 50/50 percent chance + camEyeSide = (s16)(randFloat * ((camera->play->state.frames % 2) ? 1 : -1)); + + spB0.yaw = rwData->unk_00 + camEyeSide; + spB0.r = 200.0f * yNormal; + OLib_AddVecGeoToVec3f(eyeNext, at, &spB0); + spB8 = *eye = *eyeNext; + + // If the side chosen moves the camera out-of-bounds, move to the other side + if (Camera_CheckOOB(camera, &spB8, &focalActorPosRot->pos)) { + camEyeSide = (s16)-camEyeSide; + spB0.yaw = rwData->unk_00 + camEyeSide; + OLib_AddVecGeoToVec3f(eyeNext, at, &spB0); + *eye = *eyeNext; + } + } + // fallthrough + case 2: + // Camera is behind the door looking at player + spB8 = focalActorPosRot->pos; + spB8.y += focalActorHeight + roData->yOffset; + // Update camera at to follow the player + Camera_ScaledStepToCeilVec3f(&spB8, at, 0.25f, 0.25f, 0.1f); + + doorParams->timer2--; + if (doorParams->timer2 > 0) { + break; + } + + // Setup for the camera turning around to look in front of player + camera->animState++; + rwData->unk_00 = BINANG_ROT180(rwData->unk_00); + // fallthrough + case 3: + // Camera turns around to look in front of player + spB8 = focalActorPosRot->pos; + spB8.y += focalActorHeight + roData->yOffset; + Camera_ScaledStepToCeilVec3f(&spB8, at, 0.5f, 0.5f, 0.1f); + spB0.pitch = Camera_ScaledStepToCeilS(0xAAA, spA8.pitch, 0.3f, 5); + spB0.yaw = Camera_ScaledStepToCeilS(rwData->unk_00, spA8.yaw, 0.3f, 5); + spB0.r = Camera_ScaledStepToCeilF(60.0f, spA8.r, 0.3f, 1.0f); + OLib_AddVecGeoToVec3f(eyeNext, at, &spB0); + + *eye = *eyeNext; + + doorParams->timer3--; + if (doorParams->timer3 > 0) { + break; + } + + camera->animState++; + // fallthrough + case 4: + camera->animState++; + // fallthrough + case 999: + default: + // Door is closed and is waiting for user input to toggle to a new setting + Camera_SetStateFlag(camera, CAM_STATE_10 | CAM_STATE_4); + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0); + + if ((camera->xzSpeed > 0.001f) || CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_A) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CUP) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) || + (roData->interfaceFlags & SPECIAL9_FLAG_3)) { + + func_800CC938(camera); + Camera_SetStateFlag(camera, CAM_STATE_2 | CAM_STATE_CHECK_WATER); + Camera_UnsetStateFlag(camera, CAM_STATE_10); + } + break; + } + + spB8 = focalActorPosRot->pos; + spB8.y += focalActorHeight; + camera->dist = OLib_Vec3fDist(&spB8, eye); + Camera_SetFocalActorAtOffset(camera, &focalActorPosRot->pos); + + return true; +} + +/*===============================================================*/ +/* Camera Public Functions */ +/*===============================================================*/ + +Camera* Camera_Create(View* view, CollisionContext* colCtx, PlayState* play) { + Camera* newCamera = ZeldaArena_Malloc(sizeof(Camera)); + + if (newCamera != NULL) { + Camera_Init(newCamera, view, colCtx, play); + } + return newCamera; +} + +void Camera_Destroy(Camera* camera) { + if (camera != NULL) { + ZeldaArena_Free(camera); + } +} + +void Camera_Init(Camera* camera, View* view, CollisionContext* colCtx, PlayState* play) { + Camera* cameraPtr; + s32 i; + s16 curUID; + s16 j; + + __osMemset(camera, 0, sizeof(Camera)); + + camera->play = sCamPlayState = play; + curUID = sCameraNextUID; + sCameraNextUID++; + while (curUID != 0) { + if (curUID == 0) { + sCameraNextUID++; + } + + for (j = 0; j < NUM_CAMS; j++) { + cameraPtr = camera->play->cameraPtrs[j]; + if ((cameraPtr != NULL) && (curUID == cameraPtr->uid)) { + break; + } + } + + if (j == NUM_CAMS) { + break; + } + + curUID = sCameraNextUID++; + } + + camera->inputDir.y = 0x4000; + camera->uid = curUID; + camera->camDir = camera->inputDir; + camera->nextCamSceneDataId = -1; + camera->up.z = camera->up.x = 0.0f; + camera->up.y = 1.0f; + camera->fov = 60.0f; + camera->yOffsetUpdateRate = 0.05f; + camera->xzOffsetUpdateRate = 0.05f; + camera->fovUpdateRate = 0.05f; + camera->rUpdateRateInv = 10.0f; + camera->yawUpdateRateInv = 10.0f; + camera->pitchUpdateRateInv = 16.0f; + + sCameraLetterboxSize = 32; + sCameraHudVisibility = 0; + + camera->setting = camera->prevSetting = CAM_SET_FREE0; + camera->bgCamIndex = camera->prevBgCamDataId = -1; + camera->stateFlags = 0; + camera->mode = CAM_MODE_NORMAL; + camera->bgId = BGCHECK_SCENE; + camera->unk168 = 0xF; + camera->timer = -1; + camera->focalActor = NULL; + camera->target = NULL; + Camera_SetStateFlag(camera, CAM_STATE_INITIALIZED); + camera->quakeOffset.z = camera->quakeOffset.y = camera->quakeOffset.x = 0; + camera->up.z = camera->up.x = 0.0f; + camera->atLerpStepScale = 1; + camera->up.y = 1.0f; + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0); + sCameraInitSceneTimer = 3; +} + +void func_800DDFE0(Camera* camera) { + if (camera != &camera->play->mainCamera) { + camera->prevSetting = camera->setting = CAM_SET_FREE0; + Camera_UnsetStateFlag(camera, CAM_STATE_2); + } else { + switch (camera->play->roomCtx.curRoom.behaviorType1) { + case ROOM_BEHAVIOR_TYPE1_1: + camera->prevSetting = CAM_SET_DUNGEON0; + Camera_ChangeSettingFlags(camera, CAM_SET_DUNGEON0, CAM_CHANGE_SETTING_1); + break; + + case ROOM_BEHAVIOR_TYPE1_0: + camera->prevSetting = CAM_SET_NORMAL0; + Camera_ChangeSettingFlags(camera, CAM_SET_NORMAL0, CAM_CHANGE_SETTING_1); + break; + + case ROOM_BEHAVIOR_TYPE1_2: + camera->prevSetting = CAM_SET_ROOM0; + Camera_ChangeSettingFlags(camera, CAM_SET_ROOM0, CAM_CHANGE_SETTING_1); + break; + + default: + camera->prevSetting = CAM_SET_NORMAL0; + Camera_ChangeSettingFlags(camera, CAM_SET_NORMAL0, CAM_CHANGE_SETTING_1); + break; + } + Camera_SetStateFlag(camera, CAM_STATE_2); + } +} + +/** + * Unused empty function + */ +void Camera_Stub800DE0E0(Camera* camera) { +} + +void Camera_InitFocalActorSettings(Camera* camera, Actor* focalActor) { + PosRot focalActorPosRot; + VecGeo eyeNextAtOffset; + s32 bgId; + Vec3f floorPos; + s32 upXZ; + f32 focalActorHeight; + Vec3f* eye = &camera->eye; + + Actor_GetWorldPosShapeRot(&focalActorPosRot, focalActor); + + camera->focalActor = focalActor; + focalActorHeight = Camera_GetFocalActorHeight(camera); + camera->focalActorPosRot = focalActorPosRot; + camera->dist = eyeNextAtOffset.r = 180.0f; + camera->inputDir.y = focalActorPosRot.rot.y; + eyeNextAtOffset.yaw = BINANG_ROT180(camera->inputDir.y); + camera->inputDir.x = eyeNextAtOffset.pitch = 0x71C; + camera->inputDir.z = 0; + camera->camDir = camera->inputDir; + camera->xzSpeed = 0.0f; + camera->unk_0F0.y = 0.0f; + camera->at = focalActorPosRot.pos; + camera->at.y += focalActorHeight; + + camera->focalActorAtOffset.x = 0; + camera->focalActorAtOffset.y = focalActorHeight; + camera->focalActorAtOffset.z = 0; + + OLib_AddVecGeoToVec3f(&camera->eyeNext, &camera->at, &eyeNextAtOffset); + *eye = camera->eyeNext; + camera->roll = 0; + + upXZ = 0; + camera->up.z = upXZ; + camera->up.y = 1.0f; + camera->up.x = upXZ; + + { + s32 pad; + + if (Camera_GetFloorYNorm(camera, &floorPos, &camera->at, &bgId) != BGCHECK_Y_MIN) { + camera->bgId = bgId; + } + } + + camera->waterPrevBgCamDataId = -1; + camera->waterPrevCamSetting = -1; + camera->waterQuakeId = -1; + + { + s32 pad; + + func_800DDFE0(camera); + } + + Camera_SetStateFlag(camera, CAM_STATE_2); + + camera->viewFlags = 0; + camera->nextCamSceneDataId = -1; + camera->yOffsetUpdateRate = 0.01f; + camera->xzOffsetUpdateRate = 0.01f; + camera->fovUpdateRate = 0.01f; + camera->atLerpStepScale = 1; + Camera_ResetActionFuncState(camera, camera->mode); + + if (camera == &camera->play->mainCamera) { + sCameraInterfaceFlags = + CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE | CAM_LETTERBOX_INSTANT, CAM_HUD_VISIBILITY_NONE_ALT, 0); + CutsceneManager_StoreCamera(camera); + } else { + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NONE_ALT, 0); + } + Camera_UpdateWater(camera); +} + +/** + * Updates the camera status + */ +s32 Camera_ChangeStatus(Camera* camera, s16 status) { + camera->status = status; + return camera->status; +} + +s32 Camera_UpdateWater(Camera* camera) { + f32 waterY; + s16 camSetting; + s32 pad[2]; + s32* waterPrevCamSetting = &camera->waterPrevCamSetting; + s16 prevBgId; + + if (!(camera->stateFlags & CAM_STATE_CHECK_WATER) || (sCameraSettings[camera->setting].flags & 0x40000000)) { + return false; + } + + if (camera->stateFlags & CAM_STATE_9) { + if (Camera_IsDiving(camera)) { + if (!Camera_IsPlayerFormZora(camera)) { + Camera_ChangeSettingFlags(camera, CAM_SET_PIVOT_DIVING, CAM_CHANGE_SETTING_2 | CAM_CHANGE_SETTING_1); + } else { + Camera_ChangeSettingFlags(camera, CAM_SET_ZORA_DIVING, CAM_CHANGE_SETTING_2 | CAM_CHANGE_SETTING_1); + } + Camera_SetStateFlag(camera, CAM_STATE_15); + } else if (camera->stateFlags & CAM_STATE_15) { + Camera_ChangeSettingFlags(camera, *waterPrevCamSetting, CAM_CHANGE_SETTING_2 | CAM_CHANGE_SETTING_1); + Camera_UnsetStateFlag(camera, CAM_STATE_15); + } + } + + if (!(camera->stateFlags & CAM_STATE_15)) { + camSetting = Camera_GetWaterBoxBgCamSetting(camera, &waterY); + if (camSetting == -2) { + // CAM_SET_NONE + if (!(camera->stateFlags & CAM_STATE_9)) { + Camera_SetStateFlag(camera, CAM_STATE_9); + camera->waterPrevBgCamDataId = camera->bgCamIndex; + camera->waterQuakeId = -1; + } + + if (!(Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight) < 11.0f) || + (Camera_IsSwimming(camera) && !Camera_IsUnderwaterAsZora(camera))) { + prevBgId = camera->bgId; + camera->bgId = BGCHECK_SCENE; + waterPrevCamSetting = &camera->waterPrevCamSetting; + Camera_ChangeSettingFlags(camera, CAM_SET_NORMAL3, CAM_CHANGE_SETTING_1); + *waterPrevCamSetting = camera->setting; + camera->bgId = prevBgId; + camera->bgCamIndex = -2; + } + + } else if (camSetting != -1) { + // player is in a water box + if (!(camera->stateFlags & CAM_STATE_9)) { + Camera_SetStateFlag(camera, CAM_STATE_9); + camera->waterPrevBgCamDataId = camera->bgCamIndex; + camera->waterQuakeId = -1; + } + + if (!(Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight) < 11.0f) || + (Camera_IsSwimming(camera) && !Camera_IsUnderwaterAsZora(camera))) { + prevBgId = camera->bgId; + camera->bgId = BGCHECK_SCENE; + waterPrevCamSetting = &camera->waterPrevCamSetting; + Camera_ChangeSettingFlags(camera, camSetting, CAM_CHANGE_SETTING_1); + *waterPrevCamSetting = camera->setting; + camera->bgId = prevBgId; + } + + } else if (camera->stateFlags & CAM_STATE_9) { + // player is out of a water box. + Camera_UnsetStateFlag(camera, CAM_STATE_9); + prevBgId = camera->bgId; + camera->bgId = BGCHECK_SCENE; + if (camera->waterPrevBgCamDataId < 0) { + func_800DDFE0(camera); + camera->bgCamIndex = -1; + } else { + Camera_ChangeActorCsCamIndex(camera, camera->waterPrevBgCamDataId); + } + camera->bgId = prevBgId; + } + camera->waterYPos = waterY; + } + return true; +} + +void Camera_EarthquakeDay3(Camera* camera) { + static s16 sEarthquakeTimer = 0; + u16 time; + s16 quakeIndex; + s32 timeSpeedOffset; + s16 sEarthquakeFreq[] = { + 0xFFC, // 1 Large Earthquake between CLOCK_TIME(0, 00) to CLOCK_TIME(1, 30) + 0x7FC, // 2 Large Earthquakes between CLOCK_TIME(1, 30) to CLOCK_TIME(3, 00) + 0x3FC, // 4 Large Earthquakes between CLOCK_TIME(3, 00) to CLOCK_TIME(4, 30) + 0x1FC, // 8 Large Earthquakes between CLOCK_TIME(4, 30) to CLOCK_TIME(6, 00) + }; + + if ((CURRENT_DAY == 3) && (CutsceneManager_GetCurrentCsId() == -1)) { + time = gSaveContext.save.time; + timeSpeedOffset = gSaveContext.save.timeSpeedOffset; + + // Large earthquake created + // Times based on sEarthquakeFreq + if ((time > CLOCK_TIME(0, 0)) && (time < CLOCK_TIME(6, 0)) && ((sEarthquakeFreq[time >> 12] & time) == 0) && + (Quake_GetNumActiveQuakes() < 2)) { + quakeIndex = Quake_Request(camera, QUAKE_TYPE_4); + if (quakeIndex != 0) { + Quake_SetSpeed(quakeIndex, 30000); + Quake_SetPerturbations(quakeIndex, (time >> 12) + 2, 1, 5, 60); + sEarthquakeTimer = ((time >> 10) - timeSpeedOffset) + 80; + Quake_SetDuration(quakeIndex, sEarthquakeTimer); + } + } + + // Small earthquake created + // Around CLOCK_TIME(17, 33) || Around CLOCK_TIME(20, 33) || Every 1024 frames (around every 51s) + if (((((time + 0x4D2) & 0xDFFC) == 0xC000) || ((camera->play->state.frames % 1024) == 0)) && + (Quake_GetNumActiveQuakes() < 2)) { + quakeIndex = Quake_Request(camera, QUAKE_TYPE_3); + if (quakeIndex != 0) { + Quake_SetSpeed(quakeIndex, 16000); + Quake_SetPerturbations(quakeIndex, 1, 0, 0, time & 0x3F); // %64 + sEarthquakeTimer = 120 - timeSpeedOffset; + Quake_SetDuration(quakeIndex, sEarthquakeTimer); + } + } + + if (sEarthquakeTimer != 0) { + sEarthquakeTimer--; + func_8019F128(NA_SE_SY_EARTHQUAKE_OUTDOOR - SFX_FLAG); + } + } +} + +/** + * Sets the distortion to type 1 for a hot room + * Remnant of OoT as no room in any MM scene is set to a hot-room + */ +s32 Camera_UpdateHotRoom(Camera* camera) { + Distortion_RemoveRequest(DISTORTION_TYPE_HOT_ROOM); + if (camera->play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) { + Distortion_Request(DISTORTION_TYPE_HOT_ROOM); + } + return true; +} + +s32 Camera_SetSwordDistortion(Camera* camera) { + switch (func_800CBB88(camera)) { + case 1: + // non-magic spin attack + if (Distortion_GetType() != DISTORTION_TYPE_ZORA_KICK) { + Distortion_Request(DISTORTION_TYPE_ZORA_KICK); + Distortion_SetDuration(12); + } + break; + + case 2: + // Unused: case 2 is impossible to achieve + if (Distortion_GetType() != DISTORTION_TYPE_UNK_ATTACK) { + Distortion_Request(DISTORTION_TYPE_UNK_ATTACK); + Distortion_SetDuration(5); + } + break; + + case 3: + if (Distortion_GetType() != DISTORTION_TYPE_GORON_BUTT) { + Distortion_Request(DISTORTION_TYPE_GORON_BUTT); + Distortion_SetDuration(15); + } + break; + } + return true; +} + +s32 Camera_RequestGiantsMaskSetting(Camera* camera) { + Player* player = GET_PLAYER(camera->play); + + if ((camera->camId == CAM_ID_MAIN) && (camera->focalActor == &GET_PLAYER(camera->play)->actor) && + (player->currentMask == PLAYER_MASK_GIANT)) { + Camera_ChangeSettingFlags(camera, CAM_SET_GIANT, CAM_CHANGE_SETTING_1); + return true; + } else { + return false; + } +} + +Vec3s* Camera_Update(Vec3s* inputDir, Camera* camera) { + Vec3f viewAt; + Vec3f viewEye; + Vec3f viewUp; + Vec3f focalActorPos; + s32 bgId; + s32 sp98; + s32 changeCamSceneDataType; + CollisionPoly* sp90; + CollisionPoly* sp8C; + f32 runSpeedLimit; + f32 speed; + f32 viewFov; + DynaPolyActor* meshActor; + PosRot focalActorPosRot; + ShakeInfo camShake; + Actor* focalActor = camera->focalActor; + VecGeo sp3C; + s16 bgCamIndex; + s16 numQuakesApplied; + f32 focalActorFloorHeight; + + // Camera of status CUT only updates to this point + if (camera->status == CAM_STATUS_CUT) { + *inputDir = camera->inputDir; + return inputDir; + } + + sUpdateCameraDirection = false; + sIsFalse = false; + + if (camera->play->view.unk164 == 0) { + if (camera->focalActor != NULL) { + // Updates camera info on the actor it's tracking + + if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { + Actor_GetWorldPosShapeRot(&focalActorPosRot, camera->focalActor); + } else { + Actor_GetWorld(&focalActorPosRot, camera->focalActor); + } + camera->unk_0F0.x = focalActorPosRot.pos.x - camera->focalActorPosRot.pos.x; + camera->unk_0F0.y = focalActorPosRot.pos.y - camera->focalActorPosRot.pos.y; + camera->unk_0F0.z = focalActorPosRot.pos.z - camera->focalActorPosRot.pos.z; + + // bg related to tracked actor + sp98 = 0; + if (Camera_IsMountedOnHorse(camera)) { + if (((Player*)focalActor)->rideActor->floorPoly != NULL) { + sp90 = ((Player*)focalActor)->rideActor->floorPoly; + camera->bgId = ((Player*)focalActor)->rideActor->floorBgId; + camera->focalActorFloorHeight = ((Player*)focalActor)->rideActor->floorHeight; + sp98 = 3; + } + } else if (func_800CB7CC(camera)) { + if (camera->focalActor->floorPoly != NULL) { + sp90 = camera->focalActor->floorPoly; + camera->bgId = camera->focalActor->floorBgId; + camera->focalActorFloorHeight = camera->focalActor->floorHeight; + sp98 = 1; + } + } else { + focalActorPos = focalActorPosRot.pos; + focalActorPos.y += Camera_GetFocalActorHeight(camera); + focalActorFloorHeight = BgCheck_EntityRaycastFloor5_3(camera->play, &camera->play->colCtx, &sp90, &bgId, + camera->focalActor, &focalActorPos); + if (focalActorFloorHeight != BGCHECK_Y_MIN) { + camera->bgId = bgId; + camera->focalActorFloorHeight = focalActorFloorHeight; + sp98 = 2; + } + } + + if ((sp98 != 0) && (Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight) < 11.0f)) { + meshActor = DynaPoly_GetActor(&camera->play->colCtx, camera->bgId); + if (meshActor != NULL) { + camera->floorNorm.x = COLPOLY_GET_NORMAL(sp90->normal.x); + camera->floorNorm.y = COLPOLY_GET_NORMAL(sp90->normal.y); + camera->floorNorm.z = COLPOLY_GET_NORMAL(sp90->normal.z); + camera->unk_0F0.x -= meshActor->actor.world.pos.x - camera->meshActorPos.x; + camera->unk_0F0.y -= meshActor->actor.world.pos.y - camera->meshActorPos.y; + camera->unk_0F0.z -= meshActor->actor.world.pos.z - camera->meshActorPos.z; + camera->meshActorPos = meshActor->actor.world.pos; + } + } + + // Set camera speed + runSpeedLimit = Camera_GetRunSpeedLimit(camera) * 1.5f; + speed = Camera_Vec3fMagnitude(&camera->unk_0F0); + camera->xzSpeed = OLib_ClampMaxDist(speed, runSpeedLimit); + camera->speedRatio = OLib_ClampMaxDist(speed / runSpeedLimit, 1.8f); + camera->focalActorPosRot = focalActorPosRot; + + if (camera->camId == CAM_ID_MAIN) { + Camera_UpdateWater(camera); + Camera_UpdateHotRoom(camera); + Camera_EarthquakeDay3(camera); + Camera_SetSwordDistortion(camera); + } + + /** + * This section is about updating the camera setting based on the camera scene data + * + */ + + // If doorTimer1 is active, set CAM_STATE_10 which suppresses bg camera scene data from being read + if (camera->doorTimer1 != 0) { + Camera_SetStateFlag(camera, CAM_STATE_10); + } else if (!(camera->stateFlags & CAM_STATE_2)) { + camera->nextCamSceneDataId = -1; + } + + changeCamSceneDataType = 0; // default to no change in the cam scene data + bgId = camera->bgId; + + // Sets the next cam scene data Index based on the bg surface + if ((camera->stateFlags & CAM_STATE_0) && (camera->stateFlags & CAM_STATE_2) && + !(camera->stateFlags & CAM_STATE_10) && + (!(camera->stateFlags & CAM_STATE_9) || Camera_IsUnderwaterAsZora(camera)) && + !(camera->stateFlags & CAM_STATE_15) && !Camera_IsMountedOnHorse(camera) && + !Camera_RequestGiantsMaskSetting(camera) && !Camera_IsDekuHovering(camera) && (sp98 != 0)) { + + bgCamIndex = Camera_GetBgCamIndex(camera, &bgId, sp90); + if ((bgCamIndex != -1) && (camera->bgId == BGCHECK_SCENE)) { + if (Camera_IsUsingZoraFins(camera) == 0) { + camera->nextCamSceneDataId = bgCamIndex | CAM_DATA_IS_BG; + } + } + + focalActorPos = focalActorPosRot.pos; + focalActorPos.y += Camera_GetFocalActorHeight(camera); + focalActorFloorHeight = + BgCheck_CameraRaycastFloor2(&camera->play->colCtx, &sp8C, &bgId, &focalActorPos); + + if ((focalActorFloorHeight != BGCHECK_Y_MIN) && (sp8C != sp90) && (bgId == BGCHECK_SCENE) && + ((camera->focalActorFloorHeight - 2.0f) < focalActorFloorHeight)) { + bgCamIndex = Camera_GetBgCamIndex(camera, &bgId, sp8C); + if ((bgCamIndex != -1) && (bgId == BGCHECK_SCENE)) { + camera->nextCamSceneDataId = bgCamIndex | CAM_DATA_IS_BG; + changeCamSceneDataType = 1; // change cam scene data based on the bg cam data + } + } + } + + if (camera->doorTimer1 != 0) { + camera->doorTimer1--; + if (camera->doorTimer1 == 0) { + Camera_UnsetStateFlag(camera, CAM_STATE_10); + changeCamSceneDataType = 5; // change cam scene data based on the cutscene cam data + } + } + + if (((camera->camId == CAM_ID_MAIN) || (camera->stateFlags & CAM_STATE_6)) && + ((camera->bgId == BGCHECK_SCENE) || ((bgId == BGCHECK_SCENE) && (changeCamSceneDataType != 0))) && + (camera->nextCamSceneDataId != -1) && (camera->doorTimer1 == 0) && + ((Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight) < 11.0f) || + (changeCamSceneDataType != 0)) && + (!(camera->stateFlags & CAM_STATE_9) || Camera_IsUnderwaterAsZora(camera))) { + + Camera_ChangeActorCsCamIndex(camera, camera->nextCamSceneDataId); + camera->nextCamSceneDataId = -1; + if (camera->doorTimer2 != 0) { + camera->doorTimer1 = camera->doorTimer2; + camera->doorTimer2 = 0; + } + } + } + + // Camera of status WAIT only updates to this point + if (camera->status == CAM_STATUS_WAIT) { + *inputDir = camera->inputDir; + return inputDir; + } + + camera->behaviorFlags = 0; + Camera_UnsetStateFlag(camera, CAM_STATE_10 | CAM_STATE_DISABLE_MODE_CHANGE); + Camera_SetStateFlag(camera, CAM_STATE_4); + } + + // Call the camera update function + sCameraUpdateHandlers[sCameraSettings[camera->setting].cameraModes[camera->mode].funcId](camera); + + // Update the interface + if (sCameraInitSceneTimer != 0) { + sCameraInitSceneTimer--; + } + if (camera->status == CAM_STATUS_ACTIVE) { + if (((sCameraInitSceneTimer != 0) || func_800CB854(camera)) && (camera->camId == CAM_ID_MAIN)) { + // Surpresses the interface for the first few frames of a scene + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NONE_ALT, 0); + Camera_UpdateInterface(sCameraInterfaceFlags); + } else if ((camera->play->transitionMode != TRANS_MODE_OFF) && (camera->camId != CAM_ID_MAIN)) { + sCameraInterfaceFlags = CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0); + Camera_UpdateInterface(sCameraInterfaceFlags); + } else { + Camera_UpdateInterface(sCameraInterfaceFlags); + } + } + + // Camera of status UNK3 only updates to this point + if (camera->status == CAM_STATUS_UNK3) { + *inputDir = camera->inputDir; + return inputDir; + } + + /** + * This section is about updating view structs from the active camera, + * which view uses to calculate the viewing/projection matrices + */ + numQuakesApplied = Quake_Update(camera, &camShake); + + bgId = numQuakesApplied; // required to match + + if (numQuakesApplied != 0) { + viewAt.x = camera->at.x + camShake.atOffset.x; + viewAt.y = camera->at.y + camShake.atOffset.y; + viewAt.z = camera->at.z + camShake.atOffset.z; + viewEye.x = camera->eye.x + camShake.eyeOffset.x; + viewEye.y = camera->eye.y + camShake.eyeOffset.y; + viewEye.z = camera->eye.z + camShake.eyeOffset.z; + OLib_Vec3fDiffToVecGeo(&sp3C, &viewEye, &viewAt); + Camera_CalcUpVec(&viewUp, sp3C.pitch, sp3C.yaw, camera->roll + camShake.upRollOffset); + viewFov = camera->fov + CAM_BINANG_TO_DEG(camShake.fovOffset); + } else if (sIsFalse) { + //! condition is impossible to achieve + viewAt = camera->at; + viewEye = camera->eye; + OLib_Vec3fDiffToVecGeo(&sp3C, &viewEye, &viewAt); + viewUp = camera->up; + viewFov = camera->fov; + } else { + viewAt = camera->at; + viewEye = camera->eye; + OLib_Vec3fDiffToVecGeo(&sp3C, &viewEye, &viewAt); + Camera_CalcUpVec(&viewUp, sp3C.pitch, sp3C.yaw, camera->roll); + viewFov = camera->fov; + } + + // set view up + if (camera->viewFlags & CAM_VIEW_UP) { + camera->viewFlags &= ~CAM_VIEW_UP; + viewUp = camera->up; + } else { + camera->up = viewUp; + } + + camera->quakeOffset = camShake.eyeOffset; + View_SetScale(&camera->play->view, (OREG(67) * 0.01f) + 1.0f); + camera->play->view.fovy = viewFov; + View_LookAt(&camera->play->view, &viewEye, &viewAt, &viewUp); + camera->camDir.x = sp3C.pitch; + camera->camDir.y = sp3C.yaw; + camera->camDir.z = 0; + + if (!sUpdateCameraDirection) { + camera->inputDir.x = sp3C.pitch; + camera->inputDir.y = sp3C.yaw; + camera->inputDir.z = 0; + } + + *inputDir = camera->inputDir; + + return inputDir; +} + +s32 func_800DF498(Camera* camera) { + Camera_SetStateFlag(camera, CAM_STATE_3 | CAM_STATE_2); // CAM_STATE_3 is set only immediately to be unset + Camera_UnsetStateFlag(camera, CAM_STATE_12 | CAM_STATE_3); + return true; +} + +#define CAM_CHANGE_MODE_0 (1 << 0) +#define CAM_CHANGE_MODE_1 (1 << 1) +#define CAM_CHANGE_MODE_BATTLE (1 << 2) +#define CAM_CHANGE_MODE_FOLLOW_TARGET (1 << 3) +#define CAM_CHANGE_MODE_4 (1 << 4) +#define CAM_CHANGE_MODE_FIRST_PERSON (1 << 5) + +s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) { + static s32 sModeChangeFlags = 0; + + if ((camera->setting == CAM_SET_TELESCOPE) && ((mode == CAM_MODE_FIRSTPERSON) || (mode == CAM_MODE_DEKUHIDE))) { + forceChange = true; + } + + // Mode change rejected by flag + if ((camera->stateFlags & CAM_STATE_DISABLE_MODE_CHANGE) && !forceChange) { + camera->behaviorFlags |= CAM_BEHAVIOR_MODE_VALID; + return -1; + } + + // Mode change rejected by validModes + if (!(sCameraSettings[camera->setting].validModes & (1 << mode))) { + if (camera->mode != CAM_MODE_NORMAL) { + camera->mode = CAM_MODE_NORMAL; + Camera_ResetActionFuncState(camera, camera->mode); + func_800DF498(camera); + return mode | 0xC0000000; + } else { + camera->behaviorFlags |= CAM_BEHAVIOR_MODE_VALID; + camera->behaviorFlags |= CAM_BEHAVIOR_MODE_1; + return 0; + } + } + + // Mode change rejected due to mode already being set. (otherwise, reset mode) + if ((mode == camera->mode) && !forceChange) { + camera->behaviorFlags |= CAM_BEHAVIOR_MODE_VALID; + return -1; + } + + camera->behaviorFlags |= CAM_BEHAVIOR_MODE_VALID; + camera->behaviorFlags |= CAM_BEHAVIOR_MODE_1; + + Camera_ResetActionFuncState(camera, mode); + + sModeChangeFlags = 0; + + // Process Requested Camera Mode + switch (mode) { + case CAM_MODE_FIRSTPERSON: + sModeChangeFlags = CAM_CHANGE_MODE_FIRST_PERSON; + break; + + case CAM_MODE_BATTLE: + sModeChangeFlags = CAM_CHANGE_MODE_BATTLE; + break; + + case CAM_MODE_FOLLOWTARGET: + if (camera->target != NULL && camera->target->id != ACTOR_EN_BOOM) { + sModeChangeFlags = CAM_CHANGE_MODE_FOLLOW_TARGET; + } + break; + + case CAM_MODE_BOWARROWZ: + case CAM_MODE_TARGET: + case CAM_MODE_TALK: + case CAM_MODE_HANGZ: + case CAM_MODE_PUSHPULL: + sModeChangeFlags = CAM_CHANGE_MODE_1; + break; + + case CAM_MODE_NORMAL: + case CAM_MODE_HANG: + sModeChangeFlags = CAM_CHANGE_MODE_4; + break; + } + + // Process Current Camera Mode + switch (camera->mode) { + case CAM_MODE_FIRSTPERSON: + if (sModeChangeFlags & CAM_CHANGE_MODE_FIRST_PERSON) { + camera->animState = 10; + } + break; + + case CAM_MODE_JUMP: + case CAM_MODE_HANG: + if (sModeChangeFlags & CAM_CHANGE_MODE_4) { + camera->animState = 20; + } + sModeChangeFlags |= CAM_CHANGE_MODE_0; + break; + + case CAM_MODE_CHARGE: + if (sModeChangeFlags & CAM_CHANGE_MODE_4) { + camera->animState = 20; + } + sModeChangeFlags |= CAM_CHANGE_MODE_0; + break; + + case CAM_MODE_FOLLOWTARGET: + if (sModeChangeFlags & CAM_CHANGE_MODE_FOLLOW_TARGET) { + camera->animState = 10; + } + sModeChangeFlags |= CAM_CHANGE_MODE_0; + break; + + case CAM_MODE_BATTLE: + if (sModeChangeFlags & CAM_CHANGE_MODE_BATTLE) { + camera->animState = 10; + } + sModeChangeFlags |= 1; + break; + + case CAM_MODE_BOWARROWZ: + case CAM_MODE_HANGZ: + case CAM_MODE_PUSHPULL: + sModeChangeFlags |= CAM_CHANGE_MODE_0; + break; + + case CAM_MODE_NORMAL: + if (sModeChangeFlags & CAM_CHANGE_MODE_4) { + camera->animState = 20; + } + break; + + default: + break; + } + + sModeChangeFlags &= ~CAM_CHANGE_MODE_4; + + // Z-Pressing Sfx + if (camera->status == CAM_STATUS_ACTIVE) { + switch (sModeChangeFlags) { + case CAM_CHANGE_MODE_0: + play_sound(0); + break; + + case CAM_CHANGE_MODE_1: + if (camera->play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) { + play_sound(NA_SE_SY_ATTENTION_URGENCY); + } else { + + play_sound(NA_SE_SY_ATTENTION_ON); + } + break; + + case CAM_CHANGE_MODE_BATTLE: + play_sound(NA_SE_SY_ATTENTION_URGENCY); + break; + + case CAM_CHANGE_MODE_FOLLOW_TARGET: + play_sound(NA_SE_SY_ATTENTION_ON); + break; + + default: + break; + } + } + + func_800DF498(camera); + camera->mode = mode; + + return mode | 0x80000000; +} + +s32 Camera_ChangeMode(Camera* camera, s16 mode) { + return Camera_ChangeModeFlags(camera, mode, false); +} + +s32 Camera_CheckValidMode(Camera* camera, s16 mode) { + if (camera->stateFlags & CAM_STATE_DISABLE_MODE_CHANGE) { + return 0; + } else if (!(sCameraSettings[camera->setting].validModes & (1 << mode))) { + return 0; + } else if (mode == camera->mode) { + return -1; + } else { + return mode | 0x80000000; + } +} + +s16 Camera_ChangeSettingFlags(Camera* camera, s16 setting, s16 flags) { + // Reject settings change based on priority + if ((camera->behaviorFlags & CAM_BEHAVIOR_SETTING_USE_PRIORITY) && + ((sCameraSettings[camera->setting].flags & 0xF) >= (sCameraSettings[setting].flags & 0xF))) { + camera->behaviorFlags |= CAM_BEHAVIOR_SETTING_2; + if (!(flags & CAM_CHANGE_SETTING_1)) { + camera->behaviorFlags |= CAM_BEHAVIOR_SETTING_USE_PRIORITY; + } + return -2; + } + + // Reject settings change based on NONE setting + if (setting == CAM_SET_NONE) { + return 0; + } + + // Reject settings change based on an invalid setting + if (setting >= CAM_SET_MAX) { + return -99; + } + + // Reject settings change based on setting already set (and flags) + if ((setting == camera->setting) && !(flags & CAM_CHANGE_SETTING_0)) { + camera->behaviorFlags |= CAM_BEHAVIOR_SETTING_2; + if (!(flags & CAM_CHANGE_SETTING_1)) { + camera->behaviorFlags |= CAM_BEHAVIOR_SETTING_USE_PRIORITY; + } + return -1; + } + + camera->behaviorFlags |= CAM_BEHAVIOR_SETTING_2; + + if (!(flags & CAM_CHANGE_SETTING_1)) { + camera->behaviorFlags |= CAM_BEHAVIOR_SETTING_USE_PRIORITY; + } + + func_800DF498(camera); + + if (!(sCameraSettings[camera->setting].flags & 0x40000000)) { + camera->prevSetting = camera->setting; + } + + if (flags & CAM_CHANGE_SETTING_3) { + camera->bgCamIndex = camera->prevBgCamDataId; + camera->prevBgCamDataId = -1; + } else if (!(flags & CAM_CHANGE_SETTING_2)) { + if (!(sCameraSettings[camera->setting].flags & 0x40000000)) { + camera->prevBgCamDataId = camera->bgCamIndex; + } + camera->bgCamIndex = -1; + } + + camera->setting = setting; + + if (Camera_ChangeModeFlags(camera, camera->mode, true) >= 0) { + Camera_ResetActionFuncState(camera, camera->mode); + } + + return setting; +} + +s32 Camera_ChangeSetting(Camera* camera, s16 setting) { + s32 settingChangeSuccessful = Camera_ChangeSettingFlags(camera, setting, 0); + + if (settingChangeSuccessful >= 0) { + camera->bgCamIndex = -1; + } + return settingChangeSuccessful; +} + +s32 Camera_ChangeActorCsCamIndex(Camera* camera, s32 bgCamIndex) { + s16 setting; + + if ((bgCamIndex == -1) || (bgCamIndex == camera->bgCamIndex)) { + camera->behaviorFlags |= CAM_BEHAVIOR_BGCAM_2; + return -1; + } + + if (bgCamIndex < 0) { + setting = sGlobalCamDataSettingsPtr[bgCamIndex]; + } else if (!(camera->behaviorFlags & CAM_BEHAVIOR_BGCAM_2)) { + setting = Camera_GetBgCamOrActorCsCamSetting(camera, bgCamIndex); + } else { + return -1; + } + + camera->behaviorFlags |= CAM_BEHAVIOR_BGCAM_2; + + // Sets camera setting based on bg/scene data + if ((Camera_ChangeSettingFlags(camera, setting, CAM_CHANGE_SETTING_2 | CAM_CHANGE_SETTING_0) >= 0) || + (sCameraSettings[camera->setting].flags & 0x80000000)) { + camera->bgCamIndex = bgCamIndex; + camera->behaviorFlags |= CAM_BEHAVIOR_BGCAM_1; + Camera_ResetActionFuncState(camera, camera->mode); + } + + return bgCamIndex | 0x80000000; +} + +Vec3s* Camera_GetInputDir(Vec3s* dst, Camera* camera) { + *dst = camera->inputDir; + return dst; +} + +s16 Camera_GetInputDirPitch(Camera* camera) { + Vec3s dir; + + Camera_GetInputDir(&dir, camera); + return dir.x; +} + +s16 Camera_GetInputDirYaw(Camera* camera) { + Vec3s dir; + + Camera_GetInputDir(&dir, camera); + return dir.y; +} + +Vec3s* Camera_GetCamDir(Vec3s* dst, Camera* camera) { + *dst = camera->camDir; + return dst; +} + +s16 Camera_GetCamDirPitch(Camera* camera) { + Vec3s camDir; + + Camera_GetCamDir(&camDir, camera); + return camDir.x; +} + +s16 Camera_GetCamDirYaw(Camera* camera) { + Vec3s camDir; + + Camera_GetCamDir(&camDir, camera); + return camDir.y; +} + +s32 Camera_AddQuake(Camera* camera, s32 arg1, s16 y, s32 countdown) { + s16 quakeIndex = Quake_Request(camera, QUAKE_TYPE_3); + + if (quakeIndex == 0) { + return false; + } + + Quake_SetSpeed(quakeIndex, 25000); + Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); + Quake_SetDuration(quakeIndex, countdown); + return true; +} + +s32 Camera_SetViewParam(Camera* camera, s32 viewFlag, void* param) { + s32 pad[3]; + + if (param != NULL) { + switch (viewFlag) { + case CAM_VIEW_AT: + camera->viewFlags &= ~(CAM_VIEW_TARGET_POS | CAM_VIEW_TARGET | CAM_VIEW_AT); + camera->at = *(Vec3f*)param; + break; + + case CAM_VIEW_TARGET_POS: + camera->viewFlags &= ~(CAM_VIEW_TARGET_POS | CAM_VIEW_TARGET | CAM_VIEW_AT); + camera->targetPosRot.pos = *(Vec3f*)param; + break; + + case CAM_VIEW_TARGET: + camera->target = (Actor*)param; + camera->viewFlags &= ~(CAM_VIEW_TARGET_POS | CAM_VIEW_TARGET | CAM_VIEW_AT); + break; + + case CAM_VIEW_EYE: + camera->eye = camera->eyeNext = *(Vec3f*)param; + break; + + case CAM_VIEW_UP: + camera->up = *(Vec3f*)param; + break; + + case CAM_VIEW_ROLL: + camera->roll = CAM_DEG_TO_BINANG(*(f32*)param); + break; + + case CAM_VIEW_FOV: + camera->fov = *(f32*)param; + break; + + default: + return false; + } + camera->viewFlags |= viewFlag; + } else { + return false; + } + return true; +} + +s32 Camera_UnsetViewFlag(Camera* camera, s16 viewFlag) { + camera->viewFlags &= ~viewFlag; + return true; +} + +s32 Camera_OverwriteStateFlags(Camera* camera, s16 stateFlags) { + camera->stateFlags = stateFlags; + return true; +} + +s32 Camera_ResetActionFuncStateUnused(Camera* camera) { + camera->animState = 0; + return true; +} + +/** + * Unused Remnant of OoT. `CutsceneCameraPoint` struct no longer exists. + */ +s32 Camera_SetCsParams(Camera* camera, void* atPoints, void* eyePoints, Player* player, s16 relativeToPlayer) { + return true; +} + +s16 Camera_SetStateFlag(Camera* camera, s16 flags) { + camera->stateFlags |= flags; + return camera->stateFlags; +} + +s16 Camera_UnsetStateFlag(Camera* camera, s16 flags) { + camera->stateFlags &= ~flags; + return camera->stateFlags; +} + +s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamIndex, f32 arg3, s16 timer1, s16 timer2, + s16 timer3) { + DoorParams* doorParams = &camera->paramData.doorParams; + + if (camera->setting == CAM_SET_DOORC) { + return 0; + } + + doorParams->doorActor = doorActor; + doorParams->timer1 = timer1; + doorParams->timer2 = timer2; + doorParams->timer3 = timer3; + doorParams->bgCamIndex = bgCamIndex; + + if (bgCamIndex == -99) { + Camera_ResetActionFuncState(camera, camera->mode); + return -99; + } + + if (bgCamIndex == -1) { + Camera_ChangeSettingFlags(camera, CAM_SET_DOORC, 0); + } else if (bgCamIndex == -2) { + Camera_ChangeSettingFlags(camera, CAM_SET_SPIRAL_DOOR, 0); + } else { + camera->nextCamSceneDataId = bgCamIndex; + camera->doorTimer1 = timer1; + camera->doorTimer2 = timer2 + timer3; + } + + Camera_ResetActionFuncState(camera, camera->mode); + return -1; +} + +s32 Camera_Copy(Camera* dstCam, Camera* srcCam) { + s32 pad; + + dstCam->focalActorAtOffset.z = 0.0f; + dstCam->focalActorAtOffset.y = 0.0f; + dstCam->focalActorAtOffset.x = 0.0f; + dstCam->atLerpStepScale = 0.1f; + dstCam->at = srcCam->at; + + dstCam->eye = dstCam->eyeNext = srcCam->eye; + + dstCam->dist = OLib_Vec3fDist(&dstCam->at, &dstCam->eye); + dstCam->fov = srcCam->fov; + dstCam->roll = srcCam->roll; + Camera_SetUpdateRatesSlow(dstCam); + + if (dstCam->focalActor != NULL) { + if (dstCam->focalActor == &GET_PLAYER(dstCam->play)->actor) { + Actor_GetWorldPosShapeRot(&dstCam->focalActorPosRot, dstCam->focalActor); + } else { + Actor_GetWorld(&dstCam->focalActorPosRot, dstCam->focalActor); + } + Camera_SetFocalActorAtOffset(dstCam, &dstCam->focalActorPosRot.pos); + } + return true; +} + +/** + * Unused Remnant of OoT/Debug + */ +s32 Camera_IsDbgCamEnabled(void) { + return false; +} + +Vec3f* Camera_GetQuakeOffset(Vec3f* quakeOffset, Camera* camera) { + *quakeOffset = camera->quakeOffset; + + return quakeOffset; +} + +void Camera_SetCameraData(Camera* camera, s16 setDataFlags, void* data0, void* data1, s16 data2, s16 data3) { + if (setDataFlags & 1) { + camera->data0 = data0; + } + + if (setDataFlags & 2) { + camera->data1 = data1; + } + + if (setDataFlags & 4) { + camera->data2 = data2; + } + + if (setDataFlags & 8) { + camera->data3 = data3; + } +} + +s32 Camera_GetNegOne(void) { + return sCameraNegOne; +} + +s16 func_800E0238(Camera* camera) { + Camera_SetStateFlag(camera, CAM_STATE_3); + if ((camera->camId == CAM_ID_MAIN) && (camera->play->activeCamId != CAM_ID_MAIN)) { + Camera_SetStateFlag(GET_ACTIVE_CAM(camera->play), CAM_STATE_3); + return camera->play->activeCamId; + } else { + return camera->camId; + } +} + +void Camera_SetFocalActor(Camera* camera, Actor* actor) { + camera->focalActor = actor; + if (actor == &GET_PLAYER(camera->play)->actor) { + Actor_GetWorldPosShapeRot(&camera->focalActorPosRot, actor); + } else { + Actor_GetWorld(&camera->focalActorPosRot, camera->focalActor); + } + + camera->animState = 0; +} + +void Camera_SetTargetActor(Camera* camera, Actor* actor) { + camera->target = actor; + camera->animState = 20; +} + +f32 Camera_GetWaterYPos(Camera* camera) { + if (camera->stateFlags & CAM_STATE_UNDERWATER) { + return camera->waterYPos; + } else { + return BGCHECK_Y_MIN; + } +} + +void func_800E0348(Camera* camera) { + if (!RELOAD_PARAMS(camera)) { + camera->animState = 999; + Camera_SetStateFlag(camera, CAM_STATE_10 | CAM_STATE_4 | CAM_STATE_2 | CAM_STATE_CHECK_WATER); + } else { + camera->animState = 666; + } +} diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index 2575899ca..aec6fdbb0 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -402,13 +402,13 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) { if (CutsceneManager_FindEntranceCsId() != csId) { func_800E0348(retCam); } else { - Camera_ClearFlags(retCam, CAM_STATE_2); + Camera_UnsetStateFlag(retCam, CAM_STATE_2); } } memcpy(subCam, retCam, sizeof(Camera)); subCam->camId = sCutsceneMgr.subCamId; - Camera_ClearFlags(subCam, CAM_STATE_6 | CAM_STATE_0); + Camera_UnsetStateFlag(subCam, CAM_STATE_6 | CAM_STATE_0); Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.retCamId, CAM_STATUS_WAIT); Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.subCamId, CAM_STATUS_ACTIVE); @@ -422,7 +422,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) { sCutsceneMgr.length = csEntry->length; } else { if (csEntry->csCamId != CS_CAM_ID_NONE) { - Camera_ChangeDataIdx(subCam, csEntry->csCamId); + Camera_ChangeActorCsCamIndex(subCam, csEntry->csCamId); } else { Camera_ChangeSetting(subCam, CAM_SET_FREE0); } diff --git a/src/code/z_play.c b/src/code/z_play.c index 1b5c046c6..7f615018e 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -505,7 +505,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { sIsCameraUnderwater = camera->stateFlags & CAM_STATE_UNDERWATER; if (Play_GetWaterSurface(this, &camera->eye, &lightIndex) != BGCHECK_Y_MIN) { if (!sIsCameraUnderwater) { - Camera_SetFlags(camera, CAM_STATE_UNDERWATER); + Camera_SetStateFlag(camera, CAM_STATE_UNDERWATER); sQuakeIndex = -1; Distortion_Request(DISTORTION_TYPE_UNDERWATER_ENTRY); Distortion_SetDuration(80); @@ -533,7 +533,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { } } else { if (sIsCameraUnderwater) { - Camera_ClearFlags(camera, CAM_STATE_UNDERWATER); + Camera_UnsetStateFlag(camera, CAM_STATE_UNDERWATER); } Distortion_RemoveRequest(DISTORTION_TYPE_NON_ZORA_SWIMMING); Distortion_RemoveRequest(DISTORTION_TYPE_UNDERWATER_ENTRY); @@ -1681,11 +1681,11 @@ s32 Play_SetCameraAtEye(PlayState* this, s16 camId, Vec3f* at, Vec3f* eye) { camera->dist = Math3D_Distance(at, eye); if (camera->focalActor != NULL) { - camera->atActorOffset.x = at->x - camera->focalActor->world.pos.x; - camera->atActorOffset.y = at->y - camera->focalActor->world.pos.y; - camera->atActorOffset.z = at->z - camera->focalActor->world.pos.z; + camera->focalActorAtOffset.x = at->x - camera->focalActor->world.pos.x; + camera->focalActorAtOffset.y = at->y - camera->focalActor->world.pos.y; + camera->focalActorAtOffset.z = at->z - camera->focalActor->world.pos.z; } else { - camera->atActorOffset.x = camera->atActorOffset.y = camera->atActorOffset.z = 0.0f; + camera->focalActorAtOffset.x = camera->focalActorAtOffset.y = camera->focalActorAtOffset.z = 0.0f; } camera->atLerpStepScale = 0.01f; @@ -1710,11 +1710,11 @@ s32 Play_SetCameraAtEyeUp(PlayState* this, s16 camId, Vec3f* at, Vec3f* eye, Vec camera->dist = Math3D_Distance(at, eye); if (camera->focalActor != NULL) { - camera->atActorOffset.x = at->x - camera->focalActor->world.pos.x; - camera->atActorOffset.y = at->y - camera->focalActor->world.pos.y; - camera->atActorOffset.z = at->z - camera->focalActor->world.pos.z; + camera->focalActorAtOffset.x = at->x - camera->focalActor->world.pos.x; + camera->focalActorAtOffset.y = at->y - camera->focalActor->world.pos.y; + camera->focalActorAtOffset.z = at->z - camera->focalActor->world.pos.z; } else { - camera->atActorOffset.x = camera->atActorOffset.y = camera->atActorOffset.z = 0.0f; + camera->focalActorAtOffset.x = camera->focalActorAtOffset.y = camera->focalActorAtOffset.z = 0.0f; } camera->atLerpStepScale = 0.01f; @@ -1748,13 +1748,13 @@ void Play_CopyCamera(PlayState* this, s16 destCamId, s16 srcCamId) { Camera_Copy(this->cameraPtrs[destCamId1], this->cameraPtrs[srcCamId2]); } -// Same as Play_ChangeCameraSetting but also calls Camera_InitPlayerSettings +// Same as Play_ChangeCameraSetting but also calls Camera_InitFocalActorSettings s32 func_80169A50(PlayState* this, s16 camId, Player* player, s16 setting) { Camera* camera; s16 camIdx = (camId == CAM_ID_NONE) ? this->activeCamId : camId; camera = this->cameraPtrs[camIdx]; - Camera_InitPlayerSettings(camera, player); + Camera_InitFocalActorSettings(camera, &player->actor); return Camera_ChangeSetting(camera, setting); } @@ -2179,7 +2179,8 @@ void Play_Init(GameState* thisx) { this->cameraPtrs[CAM_ID_MAIN]->uid = CAM_ID_MAIN; this->activeCamId = CAM_ID_MAIN; - func_800DFF18(&this->mainCamera, 0x7F); + Camera_OverwriteStateFlags(&this->mainCamera, CAM_STATE_0 | CAM_STATE_CHECK_WATER | CAM_STATE_2 | CAM_STATE_3 | + CAM_STATE_4 | CAM_STATE_DISABLE_MODE_CHANGE | CAM_STATE_6); Sram_Alloc(&this->state, &this->sramCtx); Regs_InitData(this); Message_Init(this); @@ -2323,11 +2324,11 @@ void Play_Init(GameState* thisx) { player = GET_PLAYER(this); - Camera_InitPlayerSettings(&this->mainCamera, player); + Camera_InitFocalActorSettings(&this->mainCamera, &player->actor); gDbgCamEnabled = false; if ((player->actor.params & 0xFF) != 0xFF) { - Camera_ChangeDataIdx(&this->mainCamera, player->actor.params & 0xFF); + Camera_ChangeActorCsCamIndex(&this->mainCamera, player->actor.params & 0xFF); } CutsceneManager_StoreCamera(&this->mainCamera); diff --git a/src/code/z_room.c b/src/code/z_room.c index 22db1035f..da221ccd4 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -357,7 +357,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) { RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomShapeImageMulti, PlayState* play) { Camera* activeCam = GET_ACTIVE_CAM(play); - s32 bgCamIndex = activeCam->bgCamDataId; + s32 bgCamIndex = activeCam->bgCamIndex; s16 overrideBgCamIndex; Player* player; RoomShapeImageMultiBgEntry* bgEntry; 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 34bae262d..d978d8380 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -310,8 +310,8 @@ void EnAni_Update(Actor* thisx, PlayState* play) { } else if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); - Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->actor.csId)), - &this->actor); + Camera_SetFocalActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->actor.csId)), + &this->actor); } else { CutsceneManager_Queue(this->actor.csId); } 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 7435d0ddc..97f996ff1 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -728,8 +728,8 @@ void func_80962D60(EnFu* this, PlayState* play) { void func_80962EBC(EnFu* this, PlayState* play) { if (this->unk_542 != 0) { if (this->actor.csId != CS_ID_NONE) { - Camera_ChangeDataIdx(play->cameraPtrs[CAM_ID_MAIN], - CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId); + Camera_ChangeActorCsCamIndex(play->cameraPtrs[CAM_ID_MAIN], + CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId); } } } 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 0eac608d9..2cec5d9b8 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -1122,7 +1122,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { if (this->unk1BC.x != 0.0f || this->unk1BC.z != 0.0f) { Math_Vec3f_Copy(&this->picto.actor.focus.pos, &this->unk1BC); this->picto.actor.focus.pos.y += 10.0f; - if (this->subCamId == CAM_ID_MAIN) { + if (this->subCamId == SUB_CAM_ID_DONE) { Math_Vec3s_Copy(&this->picto.actor.focus.rot, &this->picto.actor.world.rot); } else { Math_Vec3s_Copy(&this->picto.actor.focus.rot, &this->picto.actor.home.rot); 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 c72aa9f5f..c3cdeae33 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 @@ -681,8 +681,8 @@ void func_80B27774(EnKendoJs* this, PlayState* play) { void func_80B2783C(EnKendoJs* this, PlayState* play) { if (this->actor.csId != CS_ID_NONE) { - Camera_ChangeDataIdx(play->cameraPtrs[CAM_ID_MAIN], - CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId); + Camera_ChangeActorCsCamIndex(play->cameraPtrs[CAM_ID_MAIN], + CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId); } } 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 dab8f591e..b4e7c29e3 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -244,8 +244,8 @@ void func_80BD8758(EnPamera* this, PlayState* play) { if (this->hideInisdeTimer++ > 1800) { if (CutsceneManager_IsNext(this->csIdList[0]) && (this->csIdList[0] != -1)) { CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor); - Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[0])), - &this->actor); + Camera_SetFocalActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[0])), + &this->actor); this->actor.speed = 1.5f; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); this->actor.shape.rot.y = this->actor.home.rot.y; @@ -431,8 +431,8 @@ void func_80BD90AC(EnPamera* this, PlayState* play) { (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 200.0f)))) { if ((CutsceneManager_IsNext(this->csIdList[1])) && ((this->csIdList[1] != -1))) { CutsceneManager_StartWithPlayerCs(this->csIdList[1], &this->actor); - Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[1])), - &this->actor); + Camera_SetFocalActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[1])), + &this->actor); EnPamera_LookDownWell(this); } else if (this->csIdList[1] != -1) { CutsceneManager_Queue(this->csIdList[1]); 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 d5ea5f9df..83d3ce8e1 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -478,8 +478,8 @@ void EnTest3_Init(Actor* thisx, PlayState* play2) { if (play->sceneId == SCENE_SECOM) { this->subCamId = Play_CreateSubCamera(play); subCam = Play_GetCamera(play, this->subCamId); - Camera_InitPlayerSettings(subCam, &this->player); - Camera_SetFlags(subCam, CAM_STATE_0 | CAM_STATE_6); + Camera_InitFocalActorSettings(subCam, &this->player.actor); + Camera_SetStateFlag(subCam, CAM_STATE_0 | CAM_STATE_6); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_WAIT); } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 3d41ffddd..c3c12979b 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1115,16 +1115,16 @@ 0x800CB210:("Camera_fabsf",), 0x800CB240:("Camera_Vec3fMagnitude",), 0x800CB270:("Camera_QuadraticAttenuation",), - 0x800CB330:("Camera_LerpCeilF",), - 0x800CB398:("Camera_LerpCeilS",), - 0x800CB42C:("Camera_LerpFloorS",), - 0x800CB4C0:("Camera_LerpCeilVec3f",), + 0x800CB330:("Camera_ScaledStepToCeilF",), + 0x800CB398:("Camera_ScaledStepToCeilS",), + 0x800CB42C:("Camera_ScaledStepToFloorS",), + 0x800CB4C0:("Camera_ScaledStepToCeilVec3f",), 0x800CB544:("Camera_SetUpdateRatesFastPitch",), 0x800CB584:("Camera_SetUpdateRatesFastYaw",), 0x800CB5DC:("Camera_SetUpdateRatesSlow",), 0x800CB60C:("Camera_Vec3sToVec3f",), 0x800CB674:("Camera_AngleDiffAndScale",), - 0x800CB6C8:("Camera_UpdateAtActorOffset",), + 0x800CB6C8:("Camera_SetFocalActorAtOffset",), 0x800CB700:("Camera_GetFocalActorHeight",), 0x800CB780:("Camera_GetRunSpeedLimit",), 0x800CB7CC:("func_800CB7CC",), @@ -1147,41 +1147,41 @@ 0x800CBC30:("func_800CBC30",), 0x800CBC84:("func_800CBC84",), 0x800CBFA4:("func_800CBFA4",), - 0x800CC000:("func_800CC000",), - 0x800CC128:("func_800CC128",), - 0x800CC1C4:("func_800CC1C4",), + 0x800CC000:("Camera_BgCheckInfo",), + 0x800CC128:("Camera_BgCheck",), + 0x800CC1C4:("Camera_CheckOOB",), 0x800CC260:("func_800CC260",), - 0x800CC488:("func_800CC488",), - 0x800CC56C:("func_800CC56C",), - 0x800CC5C8:("func_800CC5C8",), + 0x800CC488:("Camera_GetFloorYNorm",), + 0x800CC56C:("Camera_GetFloorY",), + 0x800CC5C8:("Camera_GetFloorYLayer",), 0x800CC740:("Camera_GetBgCamOrActorCsCamSetting",), 0x800CC7A8:("Camera_GetBgCamOrActorCsCamFuncData",), 0x800CC804:("Camera_GetBgCamIndex",), 0x800CC874:("Camera_GetWaterBoxBgCamSetting",), 0x800CC938:("func_800CC938",), - 0x800CC958:("func_800CC958",), - 0x800CC9C0:("func_800CC9C0",), + 0x800CC958:("Camera_CalcXZAngle",), + 0x800CC9C0:("Camera_GetPitchAdjFromFloorHeightDiffs",), 0x800CCCEC:("func_800CCCEC",), - 0x800CD04C:("func_800CD04C",), - 0x800CD288:("func_800CD288",), - 0x800CD2E0:("func_800CD2E0",), - 0x800CD2F0:("func_800CD2F0",), - 0x800CD3E4:("func_800CD3E4",), + 0x800CD04C:("Camera_CalcUpVec",), + 0x800CD288:("Camera_ClampLerpScale",), + 0x800CD2E0:("Camera_ResetActionFuncState",), + 0x800CD2F0:("Camera_UpdateInterface",), + 0x800CD3E4:("Camera_BgCheckCorner",), 0x800CD44C:("func_800CD44C",), - 0x800CD634:("func_800CD634",), + 0x800CD634:("Camera_CalcSlopeYAdj",), 0x800CD6CC:("func_800CD6CC",), - 0x800CD6F8:("func_800CD6F8",), - 0x800CD834:("func_800CD834",), - 0x800CDA14:("func_800CDA14",), - 0x800CDB6C:("func_800CDB6C",), - 0x800CDE6C:("func_800CDE6C",), - 0x800CE2B8:("func_800CE2B8",), - 0x800CE5E0:("func_800CE5E0",), - 0x800CE79C:("func_800CE79C",), - 0x800CE930:("func_800CE930",), - 0x800CEAD8:("func_800CEAD8",), - 0x800CEC38:("func_800CEC38",), - 0x800CED90:("func_800CED90",), + 0x800CD6F8:("Camera_CalcAtDefault",), + 0x800CD834:("Camera_CalcAtForScreen",), + 0x800CDA14:("Camera_CalcAtForNormal1",), + 0x800CDB6C:("Camera_CalcAtForParallel",), + 0x800CDE6C:("Camera_CalcAtForFriendlyLockOn",), + 0x800CE2B8:("Camera_CalcAtForEnemyLockOn",), + 0x800CE5E0:("Camera_CalcAtForHorse",), + 0x800CE79C:("Camera_ClampDist1",), + 0x800CE930:("Camera_ClampDist2",), + 0x800CEAD8:("Camera_CalcDefaultPitch",), + 0x800CEC38:("Camera_CalcDefaultYaw",), + 0x800CED90:("Camera_CalcDefaultSwing",), 0x800CF3A4:("Camera_Noop",), 0x800CF3B4:("Camera_Normal1",), 0x800D0874:("Camera_Normal2",), @@ -1253,48 +1253,48 @@ 0x800DD11C:("Camera_Special7",), 0x800DD13C:("Camera_Special8",), 0x800DD5B8:("Camera_Special9",), - 0x800DDD58:("Camera_Alloc",), - 0x800DDDA8:("Camera_Free",), + 0x800DDD58:("Camera_Create",), + 0x800DDDA8:("Camera_Destroy",), 0x800DDDD0:("Camera_Init",), 0x800DDFE0:("func_800DDFE0",), - 0x800DE0E0:("func_800DE0E0",), - 0x800DE0EC:("Camera_InitPlayerSettings",), + 0x800DE0E0:("Camera_Stub800DE0E0",), + 0x800DE0EC:("Camera_InitFocalActorSettings",), 0x800DE308:("Camera_ChangeStatus",), - 0x800DE324:("func_800DE324",), - 0x800DE62C:("func_800DE62C",), - 0x800DE840:("func_800DE840",), - 0x800DE890:("func_800DE890",), - 0x800DE954:("func_800DE954",), + 0x800DE324:("Camera_UpdateWater",), + 0x800DE62C:("Camera_EarthquakeDay3",), + 0x800DE840:("Camera_UpdateHotRoom",), + 0x800DE890:("Camera_SetSwordDistortion",), + 0x800DE954:("Camera_RequestGiantsMaskSetting",), 0x800DE9B0:("Camera_Update",), 0x800DF498:("func_800DF498",), - 0x800DF4D0:("Camera_SetMode",), + 0x800DF4D0:("Camera_ChangeModeFlags",), 0x800DF840:("Camera_ChangeMode",), - 0x800DF86C:("func_800DF86C",), - 0x800DF8EC:("func_800DF8EC",), + 0x800DF86C:("Camera_CheckValidMode",), + 0x800DF8EC:("Camera_ChangeSettingFlags",), 0x800DFAC8:("Camera_ChangeSetting",), - 0x800DFB14:("Camera_ChangeDataIdx",), - 0x800DFC1C:("func_800DFC1C",), - 0x800DFC40:("func_800DFC40",), + 0x800DFB14:("Camera_ChangeActorCsCamIndex",), + 0x800DFC1C:("Camera_GetInputDir",), + 0x800DFC40:("Camera_GetInputDirPitch",), 0x800DFC68:("Camera_GetInputDirYaw",), 0x800DFC90:("Camera_GetCamDir",), 0x800DFCB4:("Camera_GetCamDirPitch",), 0x800DFCDC:("Camera_GetCamDirYaw",), 0x800DFD04:("Camera_AddQuake",), 0x800DFD78:("Camera_SetViewParam",), - 0x800DFEF0:("func_800DFEF0",), - 0x800DFF18:("func_800DFF18",), - 0x800DFF34:("func_800DFF34",), - 0x800DFF44:("func_800DFF44",), - 0x800DFF60:("Camera_SetFlags",), - 0x800DFF84:("Camera_ClearFlags",), + 0x800DFEF0:("Camera_UnsetViewFlag",), + 0x800DFF18:("Camera_OverwriteStateFlags",), + 0x800DFF34:("Camera_ResetActionFuncStateUnused",), + 0x800DFF44:("Camera_SetCsParams",), + 0x800DFF60:("Camera_SetStateFlag",), + 0x800DFF84:("Camera_UnsetStateFlag",), 0x800DFFAC:("Camera_ChangeDoorCam",), 0x800E007C:("Camera_Copy",), - 0x800E01AC:("func_800E01AC",), + 0x800E01AC:("Camera_IsDbgCamEnabled",), 0x800E01B8:("Camera_GetQuakeOffset",), - 0x800E01DC:("func_800E01DC",), - 0x800E0228:("func_800E0228",), + 0x800E01DC:("Camera_SetCameraData",), + 0x800E0228:("Camera_GetNegOne",), 0x800E0238:("func_800E0238",), - 0x800E02AC:("Camera_SetToTrackActor",), + 0x800E02AC:("Camera_SetFocalActor",), 0x800E0308:("Camera_SetTargetActor",), 0x800E031C:("Camera_GetWaterYPos",), 0x800E0348:("func_800E0348",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 130273540..b69ab2ff4 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -472,19 +472,6 @@ 0x801B48B0:("sSetNormal0ModeBoomerangData","UNK_TYPE1","",0x1), 0x801B48D4:("sSetNormal0ModeSlingshotData","UNK_TYPE1","",0x1), 0x801B48F8:("sSetNormal0ModeClimbZData","UNK_TYPE1","",0x1), - 0x801B4710:("sSetNormal0ModeNormalData","UNK_TYPE1","",0x1), - 0x801B4738:("sSetNormal0ModeTargetData","UNK_TYPE1","",0x1), - 0x801B4768:("sSetNormal0ModeFollowTargetData","UNK_TYPE1","",0x1), - 0x801B4798:("sSetNormal0ModeBattleData","UNK_TYPE1","",0x1), - 0x801B47CC:("sSetNormal0ModeFirstPersonData","UNK_TYPE1","",0x1), - 0x801B47F0:("sSetNormal0ModeTalkData","UNK_TYPE1","",0x1), - 0x801B4824:("sSetNormal0ModeClimbData","UNK_TYPE1","",0x1), - 0x801B4848:("sSetNormal0ModeBowArrowData","UNK_TYPE1","",0x1), - 0x801B486C:("sSetNormal0ModeBowArrowZData","UNK_TYPE1","",0x1), - 0x801B4890:("sSetNormal0ModeHookshotData","UNK_TYPE1","",0x1), - 0x801B48B0:("sSetNormal0ModeBoomerangData","UNK_TYPE1","",0x1), - 0x801B48D4:("sSetNormal0ModeSlingshotData","UNK_TYPE1","",0x1), - 0x801B48F8:("sSetNormal0ModeClimbZData","UNK_TYPE1","",0x1), 0x801B491C:("sSetNormal0ModeJumpData","UNK_TYPE1","",0x1), 0x801B4944:("sSetNormal0ModeHangData","UNK_TYPE1","",0x1), 0x801B4974:("sSetNormal0ModeHangZData","UNK_TYPE1","",0x1), @@ -3850,7 +3837,7 @@ 0x801ED8D8:("D_801ED8D8","UNK_TYPE1","",0x1), 0x801ED8DC:("D_801ED8DC","UNK_TYPE1","",0x1), 0x801ED8E0:("D_801ED8E0","Mtx","",0x40), - 0x801ED920:("D_801ED920","UNK_TYPE1","",0x1), + 0x801ED920:("D_801ED920","Actor*","",0x1), 0x801ED930:("D_801ED930","FaultClient","",0x10), 0x801ED940:("sActorOverlayTableFaultAddrConvClient","FaultAddrConvClient","",0xC), 0x801ED950:("D_801ED950","char","[80]",0x50), @@ -3867,9 +3854,9 @@ 0x801EDBA8:("D_801EDBA8","Sphere16","",0x8), 0x801EDBB0:("D_801EDBB0","TriNorm","",0x34), 0x801EDBF0:("D_801EDBF0","s16","",0x2), - 0x801EDBF4:("D_801EDBF4","f32","",0x4), - 0x801EDBF8:("D_801EDBF8","f32","",0x4), - 0x801EDC00:("D_801EDC00","CameraCollision","",0x28), + 0x801EDBF4:("sFloorYNear","f32","",0x4), + 0x801EDBF8:("sFloorYFar","f32","",0x4), + 0x801EDC00:("sFarColChk","CameraCollision","",0x28), 0x801EDC28:("sCamPlayState","PlayState*","",0x4), 0x801EDC30:("D_801EDC30","SwingAnimation","[4]",0x1A0), 0x801EDDD0:("D_801EDDD0","Vec3f","",0xc), @@ -7667,11 +7654,11 @@ 0x80911E30:("sSinkingLurePos","Vec3f","[20]",0xF0), 0x80911F20:("D_80911F20","UNK_TYPE1","",0x1), 0x80911F24:("sProjectedW","f32","",0x4), - 0x80911F28:("sCameraEye","Vec3f","",0xC), - 0x80911F38:("sCameraAt","Vec3f","",0xC), - 0x80911F44:("sCameraId","s32","",0x4), + 0x80911F28:("sSubCamEye","Vec3f","",0xC), + 0x80911F38:("sSubCamAt","Vec3f","",0xC), + 0x80911F44:("sSubCamId","s32","",0x4), 0x80911F48:("D_80911F48","f32","",0x4), - 0x80911F4C:("D_80911F4C","f32","",0x4), + 0x80911F4C:("sSubCamVelFactor","f32","",0x4), 0x80911F50:("D_80911F50","UNK_TYPE1","",0x1), 0x80911F58:("sSinkingLureBasePos","Vec3f","",0xC), 0x80911F64:("D_80911F64","f32","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index 45a128574..a0aa4b315 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -326,6 +326,7 @@ wordReplace = { "Actor_AddQuakeWithSpeed": "Actor_RequestQuakeWithSpeed", "func_800BC848": "Actor_RequestQuakeAndRumble", "func_800DF840": "Camera_ChangeMode", + "Camera_SetToTrackActor": "Camera_SetFocalActor", "zelda_malloc": "ZeldaArena_Malloc", "zelda_mallocR": "ZeldaArena_MallocR", "zelda_realloc": "ZeldaArena_Realloc", @@ -517,13 +518,13 @@ wordReplace = { "func_8017F9C0": "Math3D_XZInSphere", "func_8017FA34": "Math3D_XYInSphere", "func_8017FAA8": "Math3D_YZInSphere", - "func_800DFB14": "Camera_ChangeDataIdx", + "func_800DFB14": "Camera_ChangeActorCsCamIndex", "func_800DFC68": "Camera_GetInputDirYaw", "func_800DFCB4": "Camera_GetCamDirPitch", "func_800DFCDC": "Camera_GetCamDirYaw", "func_800E0308": "Camera_SetTargetActor", "func_800E031C": "Camera_GetWaterYPos", - "func_800E02AC": "Camera_SetToTrackActor", + "func_800E02AC": "Camera_SetFocalActor", "func_800DFAC8": "Camera_ChangeSetting", "func_800DFC90": "Camera_GetCamDir", "func_800DFD04": "Camera_AddQuake", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 916349686..d6821e4aa 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -629,16 +629,16 @@ asm/non_matchings/code/z_bg_item/DynaPoly_ValidateMove.s,DynaPoly_ValidateMove,0 asm/non_matchings/code/z_camera/Camera_fabsf.s,Camera_fabsf,0x800CB210,0xC asm/non_matchings/code/z_camera/Camera_Vec3fMagnitude.s,Camera_Vec3fMagnitude,0x800CB240,0xC asm/non_matchings/code/z_camera/Camera_QuadraticAttenuation.s,Camera_QuadraticAttenuation,0x800CB270,0x30 -asm/non_matchings/code/z_camera/Camera_LerpCeilF.s,Camera_LerpCeilF,0x800CB330,0x1A -asm/non_matchings/code/z_camera/Camera_LerpCeilS.s,Camera_LerpCeilS,0x800CB398,0x25 -asm/non_matchings/code/z_camera/Camera_LerpFloorS.s,Camera_LerpFloorS,0x800CB42C,0x25 -asm/non_matchings/code/z_camera/Camera_LerpCeilVec3f.s,Camera_LerpCeilVec3f,0x800CB4C0,0x21 +asm/non_matchings/code/z_camera/Camera_ScaledStepToCeilF.s,Camera_ScaledStepToCeilF,0x800CB330,0x1A +asm/non_matchings/code/z_camera/Camera_ScaledStepToCeilS.s,Camera_ScaledStepToCeilS,0x800CB398,0x25 +asm/non_matchings/code/z_camera/Camera_ScaledStepToFloorS.s,Camera_ScaledStepToFloorS,0x800CB42C,0x25 +asm/non_matchings/code/z_camera/Camera_ScaledStepToCeilVec3f.s,Camera_ScaledStepToCeilVec3f,0x800CB4C0,0x21 asm/non_matchings/code/z_camera/Camera_SetUpdateRatesFastPitch.s,Camera_SetUpdateRatesFastPitch,0x800CB544,0x10 asm/non_matchings/code/z_camera/Camera_SetUpdateRatesFastYaw.s,Camera_SetUpdateRatesFastYaw,0x800CB584,0x16 asm/non_matchings/code/z_camera/Camera_SetUpdateRatesSlow.s,Camera_SetUpdateRatesSlow,0x800CB5DC,0xC asm/non_matchings/code/z_camera/Camera_Vec3sToVec3f.s,Camera_Vec3sToVec3f,0x800CB60C,0x1A asm/non_matchings/code/z_camera/Camera_AngleDiffAndScale.s,Camera_AngleDiffAndScale,0x800CB674,0x15 -asm/non_matchings/code/z_camera/Camera_UpdateAtActorOffset.s,Camera_UpdateAtActorOffset,0x800CB6C8,0xE +asm/non_matchings/code/z_camera/Camera_SetFocalActorAtOffset.s,Camera_SetFocalActorAtOffset,0x800CB6C8,0xE asm/non_matchings/code/z_camera/Camera_GetFocalActorHeight.s,Camera_GetFocalActorHeight,0x800CB700,0x20 asm/non_matchings/code/z_camera/Camera_GetRunSpeedLimit.s,Camera_GetRunSpeedLimit,0x800CB780,0x13 asm/non_matchings/code/z_camera/func_800CB7CC.s,func_800CB7CC,0x800CB7CC,0xB @@ -661,41 +661,41 @@ asm/non_matchings/code/z_camera/Camera_IsUsingZoraFins.s,Camera_IsUsingZoraFins, asm/non_matchings/code/z_camera/func_800CBC30.s,func_800CBC30,0x800CBC30,0x15 asm/non_matchings/code/z_camera/func_800CBC84.s,func_800CBC84,0x800CBC84,0xC8 asm/non_matchings/code/z_camera/func_800CBFA4.s,func_800CBFA4,0x800CBFA4,0x17 -asm/non_matchings/code/z_camera/func_800CC000.s,func_800CC000,0x800CC000,0x4A -asm/non_matchings/code/z_camera/func_800CC128.s,func_800CC128,0x800CC128,0x27 -asm/non_matchings/code/z_camera/func_800CC1C4.s,func_800CC1C4,0x800CC1C4,0x27 +asm/non_matchings/code/z_camera/Camera_BgCheckInfo.s,Camera_BgCheckInfo,0x800CC000,0x4A +asm/non_matchings/code/z_camera/Camera_BgCheck.s,Camera_BgCheck,0x800CC128,0x27 +asm/non_matchings/code/z_camera/Camera_CheckOOB.s,Camera_CheckOOB,0x800CC1C4,0x27 asm/non_matchings/code/z_camera/func_800CC260.s,func_800CC260,0x800CC260,0x8A -asm/non_matchings/code/z_camera/func_800CC488.s,func_800CC488,0x800CC488,0x39 -asm/non_matchings/code/z_camera/func_800CC56C.s,func_800CC56C,0x800CC56C,0x17 -asm/non_matchings/code/z_camera/func_800CC5C8.s,func_800CC5C8,0x800CC5C8,0x5E +asm/non_matchings/code/z_camera/Camera_GetFloorYNorm.s,Camera_GetFloorYNorm,0x800CC488,0x39 +asm/non_matchings/code/z_camera/Camera_GetFloorY.s,Camera_GetFloorY,0x800CC56C,0x17 +asm/non_matchings/code/z_camera/Camera_GetFloorYLayer.s,Camera_GetFloorYLayer,0x800CC5C8,0x5E asm/non_matchings/code/z_camera/Camera_GetBgCamOrActorCsCamSetting.s,Camera_GetBgCamOrActorCsCamSetting,0x800CC740,0x1A asm/non_matchings/code/z_camera/Camera_GetBgCamOrActorCsCamFuncData.s,Camera_GetBgCamOrActorCsCamFuncData,0x800CC7A8,0x17 asm/non_matchings/code/z_camera/Camera_GetBgCamIndex.s,Camera_GetBgCamIndex,0x800CC804,0x1C asm/non_matchings/code/z_camera/Camera_GetWaterBoxBgCamSetting.s,Camera_GetWaterBoxBgCamSetting,0x800CC874,0x31 asm/non_matchings/code/z_camera/func_800CC938.s,func_800CC938,0x800CC938,0x8 -asm/non_matchings/code/z_camera/func_800CC958.s,func_800CC958,0x800CC958,0x1A -asm/non_matchings/code/z_camera/func_800CC9C0.s,func_800CC9C0,0x800CC9C0,0xCB +asm/non_matchings/code/z_camera/Camera_CalcXZAngle.s,Camera_CalcXZAngle,0x800CC958,0x1A +asm/non_matchings/code/z_camera/Camera_GetPitchAdjFromFloorHeightDiffs.s,Camera_GetPitchAdjFromFloorHeightDiffs,0x800CC9C0,0xCB asm/non_matchings/code/z_camera/func_800CCCEC.s,func_800CCCEC,0x800CCCEC,0xD8 -asm/non_matchings/code/z_camera/func_800CD04C.s,func_800CD04C,0x800CD04C,0x8F -asm/non_matchings/code/z_camera/func_800CD288.s,func_800CD288,0x800CD288,0x16 -asm/non_matchings/code/z_camera/func_800CD2E0.s,func_800CD2E0,0x800CD2E0,0x4 -asm/non_matchings/code/z_camera/func_800CD2F0.s,func_800CD2F0,0x800CD2F0,0x3D -asm/non_matchings/code/z_camera/func_800CD3E4.s,func_800CD3E4,0x800CD3E4,0x1A +asm/non_matchings/code/z_camera/Camera_CalcUpVec.s,Camera_CalcUpVec,0x800CD04C,0x8F +asm/non_matchings/code/z_camera/Camera_ClampLerpScale.s,Camera_ClampLerpScale,0x800CD288,0x16 +asm/non_matchings/code/z_camera/Camera_ResetActionFuncState.s,Camera_ResetActionFuncState,0x800CD2E0,0x4 +asm/non_matchings/code/z_camera/Camera_UpdateInterface.s,Camera_UpdateInterface,0x800CD2F0,0x3D +asm/non_matchings/code/z_camera/Camera_BgCheckCorner.s,Camera_BgCheckCorner,0x800CD3E4,0x1A asm/non_matchings/code/z_camera/func_800CD44C.s,func_800CD44C,0x800CD44C,0x7A -asm/non_matchings/code/z_camera/func_800CD634.s,func_800CD634,0x800CD634,0x26 +asm/non_matchings/code/z_camera/Camera_CalcSlopeYAdj.s,Camera_CalcSlopeYAdj,0x800CD634,0x26 asm/non_matchings/code/z_camera/func_800CD6CC.s,func_800CD6CC,0x800CD6CC,0xB -asm/non_matchings/code/z_camera/func_800CD6F8.s,func_800CD6F8,0x800CD6F8,0x4F -asm/non_matchings/code/z_camera/func_800CD834.s,func_800CD834,0x800CD834,0x78 -asm/non_matchings/code/z_camera/func_800CDA14.s,func_800CDA14,0x800CDA14,0x56 -asm/non_matchings/code/z_camera/func_800CDB6C.s,func_800CDB6C,0x800CDB6C,0xC0 -asm/non_matchings/code/z_camera/func_800CDE6C.s,func_800CDE6C,0x800CDE6C,0x113 -asm/non_matchings/code/z_camera/func_800CE2B8.s,func_800CE2B8,0x800CE2B8,0xCA -asm/non_matchings/code/z_camera/func_800CE5E0.s,func_800CE5E0,0x800CE5E0,0x6F -asm/non_matchings/code/z_camera/func_800CE79C.s,func_800CE79C,0x800CE79C,0x65 -asm/non_matchings/code/z_camera/func_800CE930.s,func_800CE930,0x800CE930,0x6A -asm/non_matchings/code/z_camera/func_800CEAD8.s,func_800CEAD8,0x800CEAD8,0x58 -asm/non_matchings/code/z_camera/func_800CEC38.s,func_800CEC38,0x800CEC38,0x56 -asm/non_matchings/code/z_camera/func_800CED90.s,func_800CED90,0x800CED90,0x185 +asm/non_matchings/code/z_camera/Camera_CalcAtDefault.s,Camera_CalcAtDefault,0x800CD6F8,0x4F +asm/non_matchings/code/z_camera/Camera_CalcAtForScreen.s,Camera_CalcAtForScreen,0x800CD834,0x78 +asm/non_matchings/code/z_camera/Camera_CalcAtForNormal1.s,Camera_CalcAtForNormal1,0x800CDA14,0x56 +asm/non_matchings/code/z_camera/Camera_CalcAtForParallel.s,Camera_CalcAtForParallel,0x800CDB6C,0xC0 +asm/non_matchings/code/z_camera/Camera_CalcAtForFriendlyLockOn.s,Camera_CalcAtForFriendlyLockOn,0x800CDE6C,0x113 +asm/non_matchings/code/z_camera/Camera_CalcAtForEnemyLockOn.s,Camera_CalcAtForEnemyLockOn,0x800CE2B8,0xCA +asm/non_matchings/code/z_camera/Camera_CalcAtForHorse.s,Camera_CalcAtForHorse,0x800CE5E0,0x6F +asm/non_matchings/code/z_camera/Camera_ClampDist1.s,Camera_ClampDist1,0x800CE79C,0x65 +asm/non_matchings/code/z_camera/Camera_ClampDist2.s,Camera_ClampDist2,0x800CE930,0x6A +asm/non_matchings/code/z_camera/Camera_CalcDefaultPitch.s,Camera_CalcDefaultPitch,0x800CEAD8,0x58 +asm/non_matchings/code/z_camera/Camera_CalcDefaultYaw.s,Camera_CalcDefaultYaw,0x800CEC38,0x56 +asm/non_matchings/code/z_camera/Camera_CalcDefaultSwing.s,Camera_CalcDefaultSwing,0x800CED90,0x185 asm/non_matchings/code/z_camera/Camera_Noop.s,Camera_Noop,0x800CF3A4,0x4 asm/non_matchings/code/z_camera/Camera_Normal1.s,Camera_Normal1,0x800CF3B4,0x530 asm/non_matchings/code/z_camera/Camera_Normal2.s,Camera_Normal2,0x800D0874,0x8 @@ -767,48 +767,48 @@ asm/non_matchings/code/z_camera/Camera_Special6.s,Camera_Special6,0x800DD0FC,0x8 asm/non_matchings/code/z_camera/Camera_Special7.s,Camera_Special7,0x800DD11C,0x8 asm/non_matchings/code/z_camera/Camera_Special8.s,Camera_Special8,0x800DD13C,0x11F asm/non_matchings/code/z_camera/Camera_Special9.s,Camera_Special9,0x800DD5B8,0x1E8 -asm/non_matchings/code/z_camera/Camera_Alloc.s,Camera_Alloc,0x800DDD58,0x14 -asm/non_matchings/code/z_camera/Camera_Free.s,Camera_Free,0x800DDDA8,0xA +asm/non_matchings/code/z_camera/Camera_Create.s,Camera_Create,0x800DDD58,0x14 +asm/non_matchings/code/z_camera/Camera_Destroy.s,Camera_Destroy,0x800DDDA8,0xA asm/non_matchings/code/z_camera/Camera_Init.s,Camera_Init,0x800DDDD0,0x84 asm/non_matchings/code/z_camera/func_800DDFE0.s,func_800DDFE0,0x800DDFE0,0x40 -asm/non_matchings/code/z_camera/func_800DE0E0.s,func_800DE0E0,0x800DE0E0,0x3 -asm/non_matchings/code/z_camera/Camera_InitPlayerSettings.s,Camera_InitPlayerSettings,0x800DE0EC,0x87 +asm/non_matchings/code/z_camera/Camera_Stub800DE0E0.s,Camera_Stub800DE0E0,0x800DE0E0,0x3 +asm/non_matchings/code/z_camera/Camera_InitFocalActorSettings.s,Camera_InitFocalActorSettings,0x800DE0EC,0x87 asm/non_matchings/code/z_camera/Camera_ChangeStatus.s,Camera_ChangeStatus,0x800DE308,0x7 -asm/non_matchings/code/z_camera/func_800DE324.s,func_800DE324,0x800DE324,0xC2 -asm/non_matchings/code/z_camera/func_800DE62C.s,func_800DE62C,0x800DE62C,0x85 -asm/non_matchings/code/z_camera/func_800DE840.s,func_800DE840,0x800DE840,0x14 -asm/non_matchings/code/z_camera/func_800DE890.s,func_800DE890,0x800DE890,0x31 -asm/non_matchings/code/z_camera/func_800DE954.s,func_800DE954,0x800DE954,0x17 +asm/non_matchings/code/z_camera/Camera_UpdateWater.s,Camera_UpdateWater,0x800DE324,0xC2 +asm/non_matchings/code/z_camera/Camera_EarthquakeDay3.s,Camera_EarthquakeDay3,0x800DE62C,0x85 +asm/non_matchings/code/z_camera/Camera_UpdateHotRoom.s,Camera_UpdateHotRoom,0x800DE840,0x14 +asm/non_matchings/code/z_camera/Camera_SetSwordDistortion.s,Camera_SetSwordDistortion,0x800DE890,0x31 +asm/non_matchings/code/z_camera/Camera_RequestGiantsMaskSetting.s,Camera_RequestGiantsMaskSetting,0x800DE954,0x17 asm/non_matchings/code/z_camera/Camera_Update.s,Camera_Update,0x800DE9B0,0x2BA asm/non_matchings/code/z_camera/func_800DF498.s,func_800DF498,0x800DF498,0xE -asm/non_matchings/code/z_camera/Camera_SetMode.s,Camera_SetMode,0x800DF4D0,0xDC +asm/non_matchings/code/z_camera/Camera_ChangeModeFlags.s,Camera_ChangeModeFlags,0x800DF4D0,0xDC asm/non_matchings/code/z_camera/Camera_ChangeMode.s,Camera_ChangeMode,0x800DF840,0xB -asm/non_matchings/code/z_camera/func_800DF86C.s,func_800DF86C,0x800DF86C,0x20 -asm/non_matchings/code/z_camera/func_800DF8EC.s,func_800DF8EC,0x800DF8EC,0x77 +asm/non_matchings/code/z_camera/Camera_CheckValidMode.s,Camera_CheckValidMode,0x800DF86C,0x20 +asm/non_matchings/code/z_camera/Camera_ChangeSettingFlags.s,Camera_ChangeSettingFlags,0x800DF8EC,0x77 asm/non_matchings/code/z_camera/Camera_ChangeSetting.s,Camera_ChangeSetting,0x800DFAC8,0x13 -asm/non_matchings/code/z_camera/Camera_ChangeDataIdx.s,Camera_ChangeDataIdx,0x800DFB14,0x42 -asm/non_matchings/code/z_camera/func_800DFC1C.s,func_800DFC1C,0x800DFC1C,0x9 -asm/non_matchings/code/z_camera/func_800DFC40.s,func_800DFC40,0x800DFC40,0xA +asm/non_matchings/code/z_camera/Camera_ChangeActorCsCamIndex.s,Camera_ChangeActorCsCamIndex,0x800DFB14,0x42 +asm/non_matchings/code/z_camera/Camera_GetInputDir.s,Camera_GetInputDir,0x800DFC1C,0x9 +asm/non_matchings/code/z_camera/Camera_GetInputDirPitch.s,Camera_GetInputDirPitch,0x800DFC40,0xA asm/non_matchings/code/z_camera/Camera_GetInputDirYaw.s,Camera_GetInputDirYaw,0x800DFC68,0xA asm/non_matchings/code/z_camera/Camera_GetCamDir.s,Camera_GetCamDir,0x800DFC90,0x9 asm/non_matchings/code/z_camera/Camera_GetCamDirPitch.s,Camera_GetCamDirPitch,0x800DFCB4,0xA asm/non_matchings/code/z_camera/Camera_GetCamDirYaw.s,Camera_GetCamDirYaw,0x800DFCDC,0xA asm/non_matchings/code/z_camera/Camera_AddQuake.s,Camera_AddQuake,0x800DFD04,0x1D asm/non_matchings/code/z_camera/Camera_SetViewParam.s,Camera_SetViewParam,0x800DFD78,0x5E -asm/non_matchings/code/z_camera/func_800DFEF0.s,func_800DFEF0,0x800DFEF0,0xA -asm/non_matchings/code/z_camera/func_800DFF18.s,func_800DFF18,0x800DFF18,0x7 -asm/non_matchings/code/z_camera/func_800DFF34.s,func_800DFF34,0x800DFF34,0x4 -asm/non_matchings/code/z_camera/func_800DFF44.s,func_800DFF44,0x800DFF44,0x7 -asm/non_matchings/code/z_camera/Camera_SetFlags.s,Camera_SetFlags,0x800DFF60,0x9 -asm/non_matchings/code/z_camera/Camera_ClearFlags.s,Camera_ClearFlags,0x800DFF84,0xA +asm/non_matchings/code/z_camera/Camera_UnsetViewFlag.s,Camera_UnsetViewFlag,0x800DFEF0,0xA +asm/non_matchings/code/z_camera/Camera_OverwriteStateFlags.s,Camera_OverwriteStateFlags,0x800DFF18,0x7 +asm/non_matchings/code/z_camera/Camera_ResetActionFuncStateUnused.s,Camera_ResetActionFuncStateUnused,0x800DFF34,0x4 +asm/non_matchings/code/z_camera/Camera_SetCsParams.s,Camera_SetCsParams,0x800DFF44,0x7 +asm/non_matchings/code/z_camera/Camera_SetStateFlag.s,Camera_SetStateFlag,0x800DFF60,0x9 +asm/non_matchings/code/z_camera/Camera_UnsetStateFlag.s,Camera_UnsetStateFlag,0x800DFF84,0xA asm/non_matchings/code/z_camera/Camera_ChangeDoorCam.s,Camera_ChangeDoorCam,0x800DFFAC,0x34 asm/non_matchings/code/z_camera/Camera_Copy.s,Camera_Copy,0x800E007C,0x4C -asm/non_matchings/code/z_camera/func_800E01AC.s,func_800E01AC,0x800E01AC,0x3 +asm/non_matchings/code/z_camera/Camera_IsDbgCamEnabled.s,Camera_IsDbgCamEnabled,0x800E01AC,0x3 asm/non_matchings/code/z_camera/Camera_GetQuakeOffset.s,Camera_GetQuakeOffset,0x800E01B8,0x9 -asm/non_matchings/code/z_camera/func_800E01DC.s,func_800E01DC,0x800E01DC,0x13 -asm/non_matchings/code/z_camera/func_800E0228.s,func_800E0228,0x800E0228,0x4 +asm/non_matchings/code/z_camera/Camera_SetCameraData.s,Camera_SetCameraData,0x800E01DC,0x13 +asm/non_matchings/code/z_camera/Camera_GetNegOne.s,Camera_GetNegOne,0x800E0228,0x4 asm/non_matchings/code/z_camera/func_800E0238.s,func_800E0238,0x800E0238,0x1D -asm/non_matchings/code/z_camera/Camera_SetToTrackActor.s,Camera_SetToTrackActor,0x800E02AC,0x17 +asm/non_matchings/code/z_camera/Camera_SetFocalActor.s,Camera_SetFocalActor,0x800E02AC,0x17 asm/non_matchings/code/z_camera/Camera_SetTargetActor.s,Camera_SetTargetActor,0x800E0308,0x5 asm/non_matchings/code/z_camera/Camera_GetWaterYPos.s,Camera_GetWaterYPos,0x800E031C,0xB asm/non_matchings/code/z_camera/func_800E0348.s,func_800E0348,0x800E0348,0x16 From 6d20839ab0f6e439d159b279acf780061d5183a5 Mon Sep 17 00:00:00 2001 From: Tharo <17233964+Thar0@users.noreply.github.com> Date: Fri, 26 May 2023 18:57:44 +0100 Subject: [PATCH 20/51] Decompile padmgr.c (#1246) * Decompile padmgr.c * Format * Enum names * Update namefixer * Suggested changes Co-authored-by: Anghelo Carvajal * Suggested changes, improve motor.c Co-authored-by: Derek Hensley * Further suggested changes * Format * Fix `controller.h` comment Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: Anghelo Carvajal Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 32 +- include/io/controller.h | 80 +- include/irqmgr.h | 9 +- include/padmgr.h | 97 +++ include/ultra64/motor.h | 13 +- include/ultra64/rcp.h | 8 + include/variables.h | 6 +- include/z64.h | 33 +- include/z64frameadvance.h | 3 +- spec | 1 - src/audio/code_8019AF00.c | 4 +- src/boot_O2_g3/fault.c | 6 +- src/code/game.c | 2 +- src/code/main.c | 1 - src/code/padmgr.c | 795 +++++++++++++++++++- src/code/sys_rumble.c | 10 +- src/code/z_parameter.c | 12 +- src/code/z_rumble.c | 4 +- src/libultra/io/motor.c | 89 ++- src/overlays/gamestates/ovl_title/z_title.c | 2 +- tools/disasm/functions.txt | 50 +- tools/disasm/variables.txt | 10 +- tools/namefixer.py | 22 + tools/sizes/code_functions.csv | 50 +- 24 files changed, 1103 insertions(+), 236 deletions(-) create mode 100644 include/padmgr.h diff --git a/include/functions.h b/include/functions.h index 11c79548a..35010d601 100644 --- a/include/functions.h +++ b/include/functions.h @@ -328,7 +328,7 @@ 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); -// void osVoiceInit(void); +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* handle, s32 channel); s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); // void __osVoiceSetADConverter(void); s32 osAiSetFrequency(u32 frequency); @@ -2098,34 +2098,6 @@ ListAlloc* ListAlloc_Init(ListAlloc* this); // void ListAlloc_Free(void); void ListAlloc_FreeAll(ListAlloc* this); void Main(void* arg); -u32 Padmgr_GetControllerBitmask(void); -void func_80174F24(void (*arg0)(void*), void* arg1); -void func_80174F44(void (*arg0)(void*), void* arg1); -void func_80174F7C(void (*arg0)(s32), void* arg1); -void func_80174F9C(void (*arg0)(s32), void* arg1); -// OSMesgQueue* Padmgr_GetEventCallback(void); -// void func_80175008(void); -void Padmgr_SetEventCallback(OSMesg pvParm1); -// void func_8017506C(void); -// void Padmgr_Lock(void); -// void Padmgr_Unlock(void); -// void func_801750FC(void); -// void func_80175364(void); -void func_80175434(void); -void func_8017544C(s32 port, s32 rumbleOn); -void PadMgr_RumbleSet(u8 rumbleEnabled[MAXCONTROLLERS]); -s32 PadMgr_ControllerHasRumblePak(s32 port); -void Padmgr_CalcStickEdges(Input* input); -// void Padmgr_ParseState(void); -// void func_801759BC(void); -// void func_80175AE0(void); -// void Padmgr_Update(void); -// void Padmgr_Stop(void); -void func_80175E68(Input* input, s32 param_2); -void Padmgr_GetInput(Input* input, s32 param_2); -void Padmgr_GetInput2(Input* input, s32 param_2); -void Padmgr_ThreadEntry(PadMgr* padmgr); -void PadMgr_Init(OSMesgQueue* siEventCallbackQueue, IrqMgr* irqmgr, OSId threadId, OSPri threadPri, void* stack); void Sched_SwapFramebuffer(CfbInfo* cfbInfo); void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo); void Sched_HandleReset(SchedContext* sched); @@ -2614,7 +2586,7 @@ void Audio_ResetForAudioHeapStep3(void); void Audio_ResetForAudioHeapStep2(void); void Audio_ResetForAudioHeapStep1(s32 specId); -// void func_801A4EB0(void); +void func_801A4EB0(void); // void func_801A4EB8(void); void func_801A4FD8(void); void func_801A5080(u16 arg0); diff --git a/include/io/controller.h b/include/io/controller.h index 4321df096..b588b4198 100644 --- a/include/io/controller.h +++ b/include/io/controller.h @@ -35,10 +35,6 @@ #define CONT_CMD_WRITE_EEPROM_RX 1 #define CONT_CMD_RESET_RX 3 -#define CONT_CMD_NOP 0xFF -#define CONT_CMD_END 0xFE // Indicates end of a command -#define CONT_CMD_EXE 1 // Set pif ram status byte to this to do a command - #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 */ @@ -48,6 +44,52 @@ #define CONT_ERR_VOICE_WORD 14 #define CONT_ERR_VOICE_NO_RESPONSE 15 +// Joybus commands +#define CONT_CMD_REQUEST_STATUS 0 +#define CONT_CMD_READ_BUTTON 1 +#define CONT_CMD_READ_PAK 2 +#define CONT_CMD_WRITE_PAK 3 +#define CONT_CMD_READ_EEPROM 4 +#define CONT_CMD_WRITE_EEPROM 5 +#define CONT_CMD_READ36_VOICE 9 +#define CONT_CMD_WRITE20_VOICE 10 +#define CONT_CMD_READ2_VOICE 11 +#define CONT_CMD_WRITE4_VOICE 12 +#define CONT_CMD_SWRITE_VOICE 13 +#define CONT_CMD_CHANNEL_RESET 0xFD +#define CONT_CMD_RESET 0xFF + +// Bytes transmitted for each joybus command +#define CONT_CMD_REQUEST_STATUS_TX 1 +#define CONT_CMD_READ_BUTTON_TX 1 +#define CONT_CMD_READ_PAK_TX 3 +#define CONT_CMD_WRITE_PAK_TX 35 +#define CONT_CMD_READ_EEPROM_TX 2 +#define CONT_CMD_WRITE_EEPROM_TX 10 +#define CONT_CMD_READ36_VOICE_TX 3 +#define CONT_CMD_WRITE20_VOICE_TX 23 +#define CONT_CMD_READ2_VOICE_TX 3 +#define CONT_CMD_WRITE4_VOICE_TX 7 +#define CONT_CMD_SWRITE_VOICE_TX 3 +#define CONT_CMD_RESET_TX 1 + +// Bytes received for each joybus command +#define CONT_CMD_REQUEST_STATUS_RX 3 +#define CONT_CMD_READ_BUTTON_RX 4 +#define CONT_CMD_READ_PAK_RX 33 +#define CONT_CMD_WRITE_PAK_RX 1 +#define CONT_CMD_READ_EEPROM_RX 8 +#define CONT_CMD_WRITE_EEPROM_RX 1 +#define CONT_CMD_READ36_VOICE_RX 37 +#define CONT_CMD_WRITE20_VOICE_RX 1 +#define CONT_CMD_READ2_VOICE_RX 3 +#define CONT_CMD_WRITE4_VOICE_RX 1 +#define CONT_CMD_SWRITE_VOICE_RX 1 +#define CONT_CMD_RESET_RX 3 + +#define CONT_CMD_NOP 0xFF +#define CONT_CMD_END 0xFE // Indicates end of a command +#define CONT_CMD_EXE 1 // Set pif ram status byte to this to do a command #define DIR_STATUS_EMPTY 0 #define DIR_STATUS_UNKNOWN 1 @@ -81,6 +123,26 @@ #define CONT_ADDR_CRC_ER 0x04 #define CONT_EEPROM_BUSY 0x80 +// Accessory detection +#define CONT_ADDR_DETECT 0x8000 +// Rumble +#define CONT_ADDR_RUMBLE 0xC000 +// Controller Pak +// Transfer Pak +#define CONT_ADDR_GB_POWER 0x8000 // Same as the detection address, but semantically different +#define CONT_ADDR_GB_BANK 0xA000 +#define CONT_ADDR_GB_STATUS 0xB000 + +// Addresses sent to controller accessories are in blocks, not bytes +#define CONT_BLOCKS(x) ((x) / BLOCKSIZE) + +// Block addresses of the above +#define CONT_BLOCK_DETECT CONT_BLOCKS(CONT_ADDR_DETECT) +#define CONT_BLOCK_RUMBLE CONT_BLOCKS(CONT_ADDR_RUMBLE) +#define CONT_BLOCK_GB_POWER CONT_BLOCKS(CONT_ADDR_GB_POWER) +#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 @@ -88,6 +150,7 @@ #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 @@ -146,6 +209,8 @@ typedef struct { /* 0x26 */ u8 datacrc; } __OSContRamReadFormat; +#define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr)) + extern OSPifRam __osContPifRam; // extern UNK_TYPE1 D_8009CF0C; extern u8 __osContLastPoll; @@ -153,11 +218,4 @@ extern u8 __osMaxControllers; // extern OSMesgQueue D_8009CF38; // extern OSMesg D_8009CF50; -typedef struct { - /* 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/irqmgr.h b/include/irqmgr.h index 40ed322d1..ac2c74960 100644 --- a/include/irqmgr.h +++ b/include/irqmgr.h @@ -1,9 +1,14 @@ #ifndef IRQMGR_H #define IRQMGR_H -#include "PR/ultratypes.h" #include "PR/sched.h" -#include "ultra64/message.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 typedef struct IrqMgrClient { /* 0x0 */ struct IrqMgrClient* next; diff --git a/include/padmgr.h b/include/padmgr.h new file mode 100644 index 000000000..674c9bc4e --- /dev/null +++ b/include/padmgr.h @@ -0,0 +1,97 @@ +#ifndef PADMGR_H +#define PADMGR_H + +#include "libc/stdbool.h" +#include "io/controller.h" +#include "irqmgr.h" + +typedef struct { + /* 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 + +typedef enum { + /* 0 */ PADMGR_CONT_NONE, + /* 1 */ PADMGR_CONT_NORMAL, + /* 3 */ PADMGR_CONT_MOUSE = 3, + /* 4 */ PADMGR_CONT_VOICE_PLUGGED, // VRU plugged but not initialized + /* 5 */ PADMGR_CONT_VOICE, + /* -1 */ PADMGR_CONT_UNK = 0xFF +} ControllerDeviceType; + +typedef enum { + /* 0 */ CONT_PAK_NONE, + /* 1 */ CONT_PAK_RUMBLE, + /* 2 */ CONT_PAK_OTHER +} ControllerPakType; + +typedef struct { + /* 0x000 */ u8 validCtrlrsMask; + /* 0x004 */ void (*rumbleRetraceCallback)(void*); + /* 0x008 */ void* rumbleRetraceArg; + /* 0x00C */ void (*inputRetraceCallback)(void*); + /* 0x010 */ void* inputRetraceArg; + /* 0x014 */ OSContStatus padStatus[MAXCONTROLLERS]; + /* 0x024 */ OSMesg serialMsg; + /* 0x028 */ OSMesg lockMsg; + /* 0x02C */ OSMesg interruptMsgBuf[8]; + /* 0x04C */ OSMesgQueue serialLockQueue; + /* 0x064 */ OSMesgQueue lockQueue; + /* 0x07C */ OSMesgQueue interruptQueue; + /* 0x094 */ IrqMgrClient irqClient; + /* 0x09C */ IrqMgr* irqMgr; + /* 0x0A0 */ OSThread thread; + /* 0x250 */ Input inputs[MAXCONTROLLERS]; + /* 0x2B0 */ OSContPad pads[MAXCONTROLLERS]; + /* 0x2C8 */ u8 nControllers; + /* 0x2C9 */ u8 ctrlrType[MAXCONTROLLERS]; // type of controller currently connected to each port + /* 0x2CD */ u8 pakType[MAXCONTROLLERS]; // type of controller pak for each port (if applicable) + /* 0x2D1 */ u8 rumbleEnable[MAXCONTROLLERS]; // whether rumble is active for each port + /* 0x2D5 */ u8 rumbleTimer[MAXCONTROLLERS]; + /* 0x2DC */ OSPfs rumblePfs[MAXCONTROLLERS]; + /* 0x47C */ vu8 rumbleOffTimer; // amount of VI retraces to not rumble for, takes priority over rumbleOnTimer + /* 0x47D */ vu8 rumbleOnTimer; // amount of VI retraces to rumble for + /* 0x47E */ u8 isResetting; +} PadMgr; // size = 0x480 + +extern PadMgr gPadMgr; + +// Initialization + +s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status); +void PadMgr_Init(OSMesgQueue* siEvtQ, IrqMgr* irqMgr, OSId threadId, OSPri pri, void* stack); + +// Fetching inputs + +void PadMgr_GetInputNoLock(Input* inputs, s32 gameRequest); +void PadMgr_GetInput(Input* inputs, s32 gameRequest); +void PadMgr_GetInput2(Input* inputs, s32 gameRequest); + +// Callbacks + +void PadMgr_SetRumbleRetraceCallback(void (*callback)(void*), void* arg); +void PadMgr_UnsetRumbleRetraceCallback(void (*callback)(void*), void* arg); + +void PadMgr_SetInputRetraceCallback(void (*callback)(void*), void* arg); +void PadMgr_UnsetInputRetraceCallback(void (*callback)(void*), void* arg); + +// Valid controllers + +u8 PadMgr_GetValidControllersMask(void); + +// Voice queue + +OSMesgQueue* PadMgr_VoiceAcquireSerialEventQueue(void); +void PadMgr_VoiceReleaseSerialEventQueue(OSMesgQueue* serialEventQueue); + +// Rumble + +void PadMgr_RumbleStop(void); +void PadMgr_RumblePause(void); +void PadMgr_RumbleSetSingle(s32 port, s32 enable); +void PadMgr_RumbleSet(u8 enable[MAXCONTROLLERS]); +s32 PadMgr_ControllerHasRumblePak(s32 port); + +#endif diff --git a/include/ultra64/motor.h b/include/ultra64/motor.h index ad6828132..ed969b3de 100644 --- a/include/ultra64/motor.h +++ b/include/ultra64/motor.h @@ -5,13 +5,14 @@ #include "PR/pfs.h" #include "ultra64/message.h" -#define MOTOR_START 1 -#define MOTOR_STOP 0 +#define MOTOR_START 1 +#define MOTOR_STOP 0 -#define osMotorStart(x) __osMotorAccess((x), MOTOR_START) -#define osMotorStop(x) __osMotorAccess((x), MOTOR_STOP) +#define osMotorStart(x) __osMotorAccess((x), MOTOR_START) +#define osMotorStop(x) __osMotorAccess((x), MOTOR_STOP) -s32 __osMotorAccess(OSPfs* pfs, u32 vibrate); -s32 osMotorInit(OSMesgQueue* ctrlrqueue, OSPfs* pfs, s32 channel); +s32 __osMotorAccess(OSPfs* pfs, s32 flag); + +s32 osMotorInit(OSMesgQueue* mq, OSPfs* pfs, s32 channel); #endif diff --git a/include/ultra64/rcp.h b/include/ultra64/rcp.h index 6bd778ccf..7a336be28 100644 --- a/include/ultra64/rcp.h +++ b/include/ultra64/rcp.h @@ -11,4 +11,12 @@ #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 */ +#define CHNL_ERR_COLLISION 0x40 /* Bit 6 (Tx): Collision error */ + +#define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ + #endif diff --git a/include/variables.h b/include/variables.h index f540107b3..c8b511a7e 100644 --- a/include/variables.h +++ b/include/variables.h @@ -795,9 +795,6 @@ extern u32 cfbIdx[3]; extern s32 gScreenWidth; extern s32 gScreenHeight; extern u32 startHeapSize; -extern PadMgr* padmgrContext; -// extern UNK_TYPE4 controllerInputsCaptured; -// extern UNK_TYPE4 D_801D1538; extern UNK_PTR D_801D1540; // extern f32 sFactorialTbl[13]; extern Vec3f gZeroVec3f; @@ -2410,7 +2407,6 @@ extern u32 gSegments[NUM_SEGMENTS]; extern SchedContext gSchedContext; extern OSThread gGraphThread; -extern PadMgr gPadMgr; extern FaultClient sSchedFaultClient; extern OSTime sRSPGFXStartTime; @@ -2616,7 +2612,7 @@ extern s32 D_801FD120; // extern UNK_TYPE1 D_801FD598; // extern UNK_TYPE1 D_801FD5A0; // extern UNK_TYPE1 D_801FD5A4; -// extern UNK_TYPE1 D_801FD5B8; +extern OSVoiceHandle gVoiceHandle; // extern UNK_TYPE1 D_801FD5C4; // extern UNK_TYPE1 D_801FD5C8; // extern UNK_TYPE1 D_801FD5E8; diff --git a/include/z64.h b/include/z64.h index 95af2c157..e9bdcfe62 100644 --- a/include/z64.h +++ b/include/z64.h @@ -14,6 +14,7 @@ #include "osint.h" #include "os.h" #include "irqmgr.h" +#include "padmgr.h" #include "scheduler.h" #include "xstdio.h" @@ -481,7 +482,7 @@ typedef struct { /* 0x7D8 */ FaultClient* clients; /* 0x7DC */ FaultAddrConvClient* addrConvClients; /* 0x7E0 */ UNK_TYPE1 pad7E0[0x4]; - /* 0x7E4 */ Input padInput[4]; + /* 0x7E4 */ Input padInput[MAXCONTROLLERS]; /* 0x844 */ void* fb; } FaultThreadStruct; // size = 0x848 @@ -522,7 +523,7 @@ typedef struct GameState { /* 0x08 */ GameStateFunc destroy; /* 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[4]; + /* 0x14 */ Input input[MAXCONTROLLERS]; /* 0x74 */ TwoHeadArena heap; /* 0x84 */ GameAlloc alloc; /* 0x98 */ UNK_TYPE1 pad98[0x3]; @@ -541,34 +542,6 @@ typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Colli typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*); typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*); -typedef struct { - /* 0x000 */ u8 controllers; // bit 0 is set if controller 1 is plugged in, etc. - /* 0x001 */ UNK_TYPE1 pad1[0x13]; - /* 0x014 */ OSContStatus statuses[4]; - /* 0x024 */ UNK_TYPE4 unk24; - /* 0x028 */ OSMesg lockMesg[1]; - /* 0x02C */ OSMesg interrupts[8]; - /* 0x04C */ OSMesgQueue sSiIntMsgQ; - /* 0x064 */ OSMesgQueue lock; - /* 0x07C */ OSMesgQueue irqmgrCallbackQueue; - /* 0x094 */ IrqMgrClient irqmgrCallbackQueueNode; - /* 0x09C */ IrqMgr* irqmgr; - /* 0x0A0 */ OSThread thread; - /* 0x250 */ Input input[4]; - /* 0x2B0 */ OSContPad controllerState1[4]; - /* 0x2C8 */ u8 maxNumControllers; - /* 0x2C9 */ UNK_TYPE1 pad2C9[0x1B3]; - /* 0x47C */ u8 unk47C; - /* 0x47D */ u8 unk47D; - /* 0x47E */ u8 hasStopped; - /* 0x47F */ UNK_TYPE1 pad47F[0x1]; -} PadMgr; // size = 0x480 - -#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 - typedef struct { /* 0x000 */ IrqMgr* irqMgr; /* 0x004 */ SchedContext* sched; diff --git a/include/z64frameadvance.h b/include/z64frameadvance.h index c0feaed59..179a1adba 100644 --- a/include/z64frameadvance.h +++ b/include/z64frameadvance.h @@ -1,8 +1,7 @@ #ifndef Z64FRAMEADVANCE_H #define Z64FRAMEADVANCE_H -#include "ultra64.h" -#include "io/controller.h" +#include "padmgr.h" typedef struct FrameAdvanceContext { /* 0x0 */ s32 enabled; diff --git a/spec b/spec index 57fca6cda..ef85a1764 100644 --- a/spec +++ b/spec @@ -567,7 +567,6 @@ beginseg include "build/data/code/main.data.o" include "build/data/code/main.bss.o" include "build/src/code/padmgr.o" - include "build/data/code/padmgr.data.o" include "build/src/code/sched.o" include "build/src/code/speed_meter.o" include "build/data/code/speed_meter.data.o" diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index d107e65b7..287149c91 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -2058,11 +2058,11 @@ const char sAudioOcarinaUnusedText6[] = "last key step is too short !!! %d:%d %d const char sAudioOcarinaUnusedText7[] = "check is over!!! %d %d %d\n"; void AudioOcarina_ReadControllerInput(void) { - Input inputs[4]; + Input inputs[MAXCONTROLLERS]; Input* input = &inputs[0]; u32 ocarinaInputButtonPrev = sOcarinaInputButtonCur; - Padmgr_GetInput2(inputs, 0); + PadMgr_GetInput2(inputs, false); sOcarinaInputButtonCur = input->cur.button; sOcarinaInputButtonPrev = ocarinaInputButtonPrev; sOcarinaInputStickRel.x = input->rel.stick_x; diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 2c8f4a667..6e1656170 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -204,7 +204,7 @@ void Fault_Sleep(u32 duration) { } void Fault_PadCallback(Input* input) { - Padmgr_GetInput2(input, 0); + PadMgr_GetInput2(input, false); } void Fault_UpdatePadImpl() { @@ -474,7 +474,7 @@ void Fault_WaitForButtonCombo(void) { do { Fault_Sleep(0x10); Fault_UpdatePadImpl(); - } while (!CHECK_BTN_ALL(input->press.button, 0x80)); + } while (!CHECK_BTN_ALL(input->press.button, BTN_RESET)); } while (!CHECK_BTN_ALL(input->cur.button, BTN_DLEFT | BTN_L | BTN_R | BTN_CRIGHT)); } @@ -763,7 +763,7 @@ void Fault_SetOptionsFromController3(void) { u32 graphRA; u32 graphSP; - if (CHECK_BTN_ALL(input3->press.button, 0x80)) { + if (CHECK_BTN_ALL(input3->press.button, BTN_RESET)) { faultCustomOptions = !faultCustomOptions; } diff --git a/src/code/game.c b/src/code/game.c index 3ff4f9962..bc8b9e39f 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -128,7 +128,7 @@ void func_801736DC(GraphicsContext* gfxCtx) { } void Game_UpdateInput(GameState* gameState) { - Padmgr_GetInput(gameState->input, 1); + PadMgr_GetInput(gameState->input, true); } void Game_Update(GameState* gameState) { diff --git a/src/code/main.c b/src/code/main.c index 7fbb5ba39..6eadd591a 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -26,7 +26,6 @@ extern StackEntry sSchedStackInfo; extern StackEntry sAudioStackInfo; extern StackEntry sPadMgrStackInfo; extern AudioMgr sAudioMgr; -extern PadMgr gPadMgr; void Main(void* arg) { intptr_t fb; diff --git a/src/code/padmgr.c b/src/code/padmgr.c index 077ef1b2b..a04a14f57 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -1,58 +1,797 @@ +/** + * @file padmgr.c + * + * This file implements communicating with joybus devices at a high level and serving the results to other threads. + * + * Any device that can be plugged into one of the four controller ports such as a standard N64 controller is a joybus + * device. Some joybus devices are also located inside the cartridge such as EEPROM for save data or the Real-Time + * Clock, however neither of these are used in Zelda64 and so this type of communication is unimplemented. Unlike the + * padmgr implementation in OoT, there are three controller types supported: + * - Standard N64 Controller + * - N64 Mouse + * - Voice Recognition Unit + * + * Communicating with these devices is broken down into various layers: + * + * Other threads : The rest of the program that will use the polled data + * | + * PadMgr : Manages devices, submits polling commands at vertical retrace + * | + * Libultra osCont* routines : Interface for building commands and safely using the Serial Interface + * | + * Serial Interface : Hardware unit for sending joybus commands and receiving data via DMA + * | + * PIF : Forwards joybus commands and receives response data from the devices + * |---¬---¬---¬-------¬ + * 1 2 3 4 5 : The joybus devices plugged into the four controller ports or on the cartridge + * + * Joybus communication is handled on another thread as polling and receiving controller data is a slow process; the + * N64 programming manual section 26.2.4.1 quotes 2 milliseconds as the expected delay from calling + * `osContStartReadData` to receiving the data. By running this on a separate thread to the game state, work can be + * done while waiting for this operation to complete. + */ #include "global.h" +#include "io/controller.h" #include "ultra64/motor.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetControllerBitmask.s") +#define PADMGR_RETRACE_MSG (1 << 0) +#define PADMGR_PRE_NMI_MSG (1 << 1) +#define PADMGR_NMI_MSG (1 << 2) -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F24.s") +typedef enum { + /* 0 */ VOICE_INIT_FAILED, // voice initialization failed + /* 1 */ VOICE_INIT_TRY, // try to initialize voice + /* 2 */ VOICE_INIT_SUCCESS // voice initialized +} VoiceInitStatus; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F44.s") +PadMgr* sPadMgrInstance = &gPadMgr; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F7C.s") +s32 sPadMgrRetraceCount = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F9C.s") +s32 sVoiceInitStatus = VOICE_INIT_TRY; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetEventCallback.s") +/** + * Returns the bitmask of valid controllers. + * + * bit n set = controller (n+1) available. + */ +u8 PadMgr_GetValidControllersMask(void) { + return sPadMgrInstance->validCtrlrsMask; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175008.s") +/** + * Sets the callback function intended to be used to modify the rumble pak state on each VI with + * calls to `PadMgr_RumbleSetSingle`. The callback may be passed a single user-provided argument. + * + * @param callback callback to run before rumble state is updated for the current VI + * @param arg the argument to pass to the callback + * + * @see PadMgr_RumbleSetSingle + * @see PadMgr_UnsetRumbleRetraceCallback + */ +void PadMgr_SetRumbleRetraceCallback(void (*callback)(void*), void* arg) { + sPadMgrInstance->rumbleRetraceCallback = callback; + sPadMgrInstance->rumbleRetraceArg = arg; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_SetEventCallback.s") +/** + * Unsets the rumble retrace callback if the provided function and argument are the same as those already registered. + * + * @param callback the callback to test against + * @param arg the argument to test against + * + * @see PadMgr_SetRumbleRetraceCallback + */ +void PadMgr_UnsetRumbleRetraceCallback(void (*callback)(void*), void* arg) { + if ((sPadMgrInstance->rumbleRetraceCallback == callback) && (sPadMgrInstance->rumbleRetraceArg == arg)) { + sPadMgrInstance->rumbleRetraceCallback = NULL; + sPadMgrInstance->rumbleRetraceArg = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_8017506C.s") +/** + * Sets the callback function intended to be used to test for particular inputs on each VI, immediately after new + * inputs have been polled. + * + * This is useful for the rare cases where additional resolution is needed in the timings of player inputs, + * while the game is still updating comparatively slower. + * + * @param callback callback to run as soon as new inputs are obtained + * @param arg the argument to pass to the callback + * + * @see PadMgr_UnsetInputRetraceCallback + */ +void PadMgr_SetInputRetraceCallback(void (*callback)(void*), void* arg) { + sPadMgrInstance->inputRetraceCallback = callback; + sPadMgrInstance->inputRetraceArg = arg; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Lock.s") +/** + * Unsets the input retrace callback if the provided function and argument are the same as those already registered. + * + * @param callback the callback to test against + * @param arg the argument to test against + * + * @see PadMgr_SetInputRetraceCallback + */ +void PadMgr_UnsetInputRetraceCallback(void (*callback)(void*), void* arg) { + if ((sPadMgrInstance->inputRetraceCallback == callback) && (sPadMgrInstance->inputRetraceArg == arg)) { + sPadMgrInstance->inputRetraceCallback = NULL; + sPadMgrInstance->inputRetraceArg = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Unlock.s") +/** + * Acquires exclusive access to the serial event queue. + * + * When a DMA to/from PIF RAM completes, an SI interrupt is generated to notify the process that the DMA has completed + * and a message is posted to the serial event queue. If multiple processes are trying to use the SI at the same time + * it becomes ambiguous as to which DMA has completed, so a locking system is required to arbitrate access to the SI. + * + * Once the task requiring the serial event queue is complete, it should be released with a call to + * `PadMgr_ReleaseSerialEventQueue()`. + * + * If another process tries to acquire the event queue, the current thread will be blocked until the event queue is + * released. Note the possibility for a deadlock, if the thread that already holds the serial event queue attempts to + * acquire it again it will block forever. + * + * @return The message queue to which SI interrupt events are posted. + * + * @see PadMgr_ReleaseSerialEventQueue + */ +OSMesgQueue* PadMgr_AcquireSerialEventQueue(void) { + OSMesgQueue* serialEventQueue; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_801750FC.s") + osRecvMesg(&sPadMgrInstance->serialLockQueue, (OSMesg*)&serialEventQueue, OS_MESG_BLOCK); + return serialEventQueue; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175364.s") +/** + * Like `PadMgr_AcquireSerialEventQueue` but for Voice access. + * + * @see PadMgr_AcquireSerialEventQueue + * @see PadMgr_VoiceReleaseSerialEventQueue + */ +OSMesgQueue* PadMgr_VoiceAcquireSerialEventQueue(void) { + OSMesgQueue* serialEventQueue; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175434.s") + osRecvMesg(&sPadMgrInstance->serialLockQueue, (OSMesg*)&serialEventQueue, OS_MESG_BLOCK); + return serialEventQueue; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_8017544C.s") +/** + * Relinquishes access to the serial message queue, allowing another process to acquire and use it. + * + * @param serialEventQueue The serial message queue acquired by `PadMgr_AcquireSerialEventQueue` + * + * @see PadMgr_AcquireSerialEventQueue + */ +void PadMgr_ReleaseSerialEventQueue(OSMesgQueue* serialEventQueue) { + osSendMesg(&sPadMgrInstance->serialLockQueue, (OSMesg)serialEventQueue, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RumbleSet.s") +/** + * Like `PadMgr_ReleaseSerialEventQueue` but for Voice access. + * + * @see PadMgr_VoiceAcquireSerialEventQueue + */ +void PadMgr_VoiceReleaseSerialEventQueue(OSMesgQueue* serialEventQueue) { + osSendMesg(&sPadMgrInstance->serialLockQueue, (OSMesg)serialEventQueue, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_ControllerHasRumblePak.s") +/** + * Locks controller input data while padmgr is reading new inputs or another thread is using the current inputs. + * This prevents new inputs overwriting the current inputs while they are in use. + * + * @see PadMgr_UnlockPadData + */ +void PadMgr_LockPadData(void) { + osRecvMesg(&sPadMgrInstance->lockQueue, NULL, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_CalcStickEdges.s") +/** + * Unlocks controller input data, allowing padmgr to read new inputs or another thread to access the most recently + * polled inputs. + * + * @see PadMgr_LockPadData + */ +void PadMgr_UnlockPadData(void) { + osSendMesg(&sPadMgrInstance->lockQueue, NULL, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_ParseState.s") +/** + * Activates the rumble pak for all controllers it is enabled on, stops it for all controllers it is disabled on and + * attempts to initialize it for a controller if it is not already initialized. + */ +void PadMgr_UpdateRumble(void) { + s32 i; + s32 ret; + OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(); + s32 triedRumbleComm = false; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_801759BC.s") + for (i = 0; i < MAXCONTROLLERS; i++) { + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL) { + // Check status for whether a controller pak is connected + if (sPadMgrInstance->padStatus[i].status & CONT_CARD_ON) { + if (sPadMgrInstance->pakType[i] == CONT_PAK_RUMBLE) { + if (sPadMgrInstance->rumbleEnable[i]) { + if (sPadMgrInstance->rumbleTimer[i] < 3) { + // Rumble pak start -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175AE0.s") + if (osMotorStart(&sPadMgrInstance->rumblePfs[i]) != 0) { + // error + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } else { + sPadMgrInstance->rumbleTimer[i] = 3; + } + triedRumbleComm = true; + } + } else { + if (sPadMgrInstance->rumbleTimer[i] != 0) { + // Rumble Pak stop -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Update.s") + if (osMotorStop(&sPadMgrInstance->rumblePfs[i]) != 0) { + // error + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } else { + sPadMgrInstance->rumbleTimer[i]--; + } + triedRumbleComm = true; + } + } + } + } else if (sPadMgrInstance->pakType[i] != CONT_PAK_NONE) { + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Stop.s") + if (!triedRumbleComm) { + // Try to initialize the rumble pak for controller port `i` if a controller pak is connected and not already + // known to be an initialized a rumble pak + i = sPadMgrRetraceCount % MAXCONTROLLERS; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175E68.s") + if ((sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL) && + (sPadMgrInstance->padStatus[i].status & CONT_CARD_ON) && (sPadMgrInstance->pakType[i] != CONT_PAK_RUMBLE)) { + ret = osMotorInit(serialEventQueue, &sPadMgrInstance->rumblePfs[i], i); -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetInput.s") + if (ret == 0) { + // Got rumble pak + sPadMgrInstance->pakType[i] = CONT_PAK_RUMBLE; + sPadMgrInstance->rumbleTimer[i] = 2; + } else if (ret == PFS_ERR_DEVICE) { + // Not a rumble pak + if (sPadMgrInstance->pakType[i] != CONT_PAK_OTHER) { + sPadMgrInstance->pakType[i] = CONT_PAK_OTHER; + } + } else if (ret == PFS_ERR_CONTRFAIL) { + // Pak communication error + } else if (ret == PFS_ERR_NOPACK) { + // No controller pak + } else { + // Unrecognized return code + Fault_AddHungupAndCrash("../padmgr.c", 594); + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetInput2.s") + PadMgr_ReleaseSerialEventQueue(serialEventQueue); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_ThreadEntry.s") +/** + * Immediately stops rumble on all controllers + */ +void PadMgr_RumbleStop(void) { + OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(); + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_Init.s") + for (i = 0; i < MAXCONTROLLERS; i++) { + if ((sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL) && + (osMotorInit(serialEventQueue, &sPadMgrInstance->rumblePfs[i], i) == 0)) { + // If there is a rumble pak attached to this controller, stop it + osMotorStop(&sPadMgrInstance->rumblePfs[i]); + } + } + PadMgr_ReleaseSerialEventQueue(serialEventQueue); +} + +/** + * Prevents rumble for 12 VI, ~0.2 seconds at 60 VI/sec + */ +void PadMgr_RumblePause(void) { + sPadMgrInstance->rumbleOffTimer = 12; +} + +/** + * Enables or disables rumble on controller port `port` for 24 VI, + * ~0.4 seconds at 60 VI/sec and ~0.48 seconds at 50 VI/sec + */ +void PadMgr_RumbleSetSingle(s32 port, s32 enable) { + sPadMgrInstance->rumbleEnable[port] = enable; + sPadMgrInstance->rumbleOnTimer = 24; +} + +/** + * Enables or disables rumble on all controller ports for 24 VI, + * ~0.4 seconds at 60 VI/sec and ~0.48 seconds at 50 VI/sec + * + * @param enable Array of u8 of length MAXCONTROLLERS containing either true or false to enable or disable rumble + * for that controller + */ +void PadMgr_RumbleSet(u8 enable[MAXCONTROLLERS]) { + s32 i; + + for (i = 0; i < MAXCONTROLLERS; i++) { + sPadMgrInstance->rumbleEnable[i] = enable[i]; + } + sPadMgrInstance->rumbleOnTimer = 24; +} + +s32 PadMgr_ControllerHasRumblePak(s32 port) { + return sPadMgrInstance->pakType[port] == CONT_PAK_RUMBLE; +} + +void PadMgr_AdjustInput(Input* input) { + s32 plus; + s32 minus; + s32 pressX; + s32 pressX2; + s32 pressY; + s32 pressY2; + s32 pad1; + s32 pad2; + s32 pad3; + f32 pad4; + f32 newX; + f32 newY; + f32 magnitude; + f32 angle; + s8 curX = input->cur.stick_x; + s8 curY = input->cur.stick_y; + + if (CHECK_BTN_ANY(input->press.button, BTN_RESET) || (input->press.stick_x == 0)) { + input->press.stick_x = 61; + input->press.errno = -61; + input->press.stick_y = 63; + input->rel.errno = -63; + } + pressX = input->press.stick_x; + pressX2 = (s8)input->press.errno; + pressY = input->press.stick_y; + pressY2 = (s8)input->rel.errno; + + if (CHECK_BTN_ANY(input->cur.button, BTN_RESET)) { + minus = curX - 7; + plus = curX + 7; + + if (minus > 0) { + if (pressX < minus - 3) { + pressX = minus - 3; + input->press.stick_x = minus - 3; + } + } else if (plus < 0) { + if (pressX2 > plus + 3) { + pressX2 = plus + 3; + input->press.errno = plus + 3; + } + } + + minus = curY - 7; + plus = curY + 7; + + if (minus > 0) { + if (pressY < minus - 3) { + pressY = minus - 3; + input->press.stick_y = minus - 3; + } + } else if (plus < 0) { + if (pressY2 > plus + 3) { + pressY2 = plus + 3; + input->rel.errno = plus + 3; + } + } + } + + minus = curX - 7; + plus = curX + 7; + + if (minus > 0) { + newX = (pressX < minus) ? 1.0f : (f32)minus / pressX; + } else if (plus < 0) { + newX = (pressX2 > plus) ? -1.0f : -(f32)plus / pressX2; + } else { + newX = 0.0f; + } + + minus = curY - 7; + plus = curY + 7; + + if (minus > 0) { + newY = (pressY < minus) ? 1.0f : (f32)minus / pressY; + } else if (plus < 0) { + newY = (pressY2 > plus) ? -1.0f : -(f32)plus / pressY2; + } else { + newY = 0.0f; + } + + if (1) { + s32 pad; + + magnitude = sqrtf(SQ(newX) + SQ(newY)); + if (magnitude > 1.0f) { + magnitude = 1.0f; + } + angle = Math_Atan2F_XY(curY, -curX); + newX = -sinf(angle) * magnitude; + newY = cosf(angle) * magnitude; + } + input->rel.stick_x = newX * 60.5f; + input->rel.stick_y = newY * 60.5f; +} + +/** + * Updates `sPadMgrInstance->inputs` based on the error response of each controller + */ +void PadMgr_UpdateInputs(void) { + s32 diff; + Input* input = &sPadMgrInstance->inputs[0]; + s32 i; + OSContPad* pad = &sPadMgrInstance->pads[0]; + + for (i = 0; i < sPadMgrInstance->nControllers; i++, input++, pad++) { + s32 isStandardController; + + input->prev = input->cur; + isStandardController = sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL; + if (isStandardController) { + switch (pad->errno) { + case 0: + // No error, copy inputs + input->cur = *pad; + break; + + case CHNL_ERR_OVERRUN >> 4: + // Overrun error, reuse previous inputs + input->cur = input->prev; + break; + + case CHNL_ERR_NORESP >> 4: + // No response error, take inputs as 0 + input->cur.button = 0; + input->cur.stick_x = 0; + input->cur.stick_y = 0; + input->cur.errno = pad->errno; + if (sPadMgrInstance->ctrlrType[i] != PADMGR_CONT_NONE) { + // If we get no response, consider the controller disconnected + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_NONE; + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + sPadMgrInstance->rumbleTimer[i] = 0xFF; + } + break; + + default: + // Unknown error response + Fault_AddHungupAndCrash("../padmgr.c", 1098); + break; + } + } else { + input->cur.button = 0; + input->cur.stick_x = 0; + input->cur.stick_y = 0; + input->cur.errno = pad->errno; + } + + // If opposed directions on the D-Pad are pressed at the same time, mask both out + if ((input->cur.button & (BTN_DDOWN | BTN_DUP)) == (BTN_DDOWN | BTN_DUP)) { + input->cur.button &= ~(BTN_DDOWN | BTN_DUP); + } + if ((input->cur.button & (BTN_DRIGHT | BTN_DLEFT)) == (BTN_DRIGHT | BTN_DLEFT)) { + input->cur.button &= ~(BTN_DRIGHT | BTN_DLEFT); + } + + // Calculate pressed and relative inputs + diff = input->prev.button ^ input->cur.button; + input->press.button |= (u16)(diff & input->cur.button); + input->rel.button |= (u16)(diff & input->prev.button); + + if (1) {} + PadMgr_AdjustInput(input); + } +} + +/** + * Looks for plugged in voice recognition units and initializes them. + * + * This runs only on startup, there will be no attempts to initialize + * a VRU other than on the first VI retrace. + */ +void PadMgr_InitVoice(void) { + s32 i; + OSMesgQueue* serialEventQueue; + s32 ret; + + for (i = 0; i < sPadMgrInstance->nControllers; i++) { + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_VOICE_PLUGGED) { + serialEventQueue = PadMgr_AcquireSerialEventQueue(); + + ret = osVoiceInit(serialEventQueue, &gVoiceHandle, i); + + PadMgr_ReleaseSerialEventQueue(serialEventQueue); + + if (ret != 0) { + // error + } else { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_VOICE; + sVoiceInitStatus = VOICE_INIT_SUCCESS; + func_801A4EB0(); + } + } + } + // If sVoiceInitStatus is still VOICE_INIT_TRY after the first attempt to initialize a VRU, don't try again + if (sVoiceInitStatus == VOICE_INIT_TRY) { + sVoiceInitStatus = VOICE_INIT_FAILED; + } +} + +/** + * Update the state of connected controllers + */ +void PadMgr_UpdateConnections(void) { + s32 ctrlrMask = 0; + s32 i; + char msg[50]; + + for (i = 0; i < MAXCONTROLLERS; i++) { + if (sPadMgrInstance->padStatus[i].errno == 0) { + switch (sPadMgrInstance->padStatus[i].type & CONT_TYPE_MASK) { + case CONT_TYPE_NORMAL: + // Standard N64 Controller + ctrlrMask |= (1 << i); + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_NORMAL; + } + break; + + case CONT_TYPE_MOUSE: + // N64 Mouse + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_MOUSE; + } + break; + + case CONT_TYPE_VOICE: + // Voice Recognition Unit + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_VOICE_PLUGGED; + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } + break; + + default: + // Other/Unrecognized + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_UNK; + // "Recognized an unknown type of controller (%04x)" + sprintf(msg, "知らない種類のコントローラ(%04x)を認識しました", + sPadMgrInstance->padStatus[i].type); + } + // Missing break required for matching + } + } else if (sPadMgrInstance->ctrlrType[i] != PADMGR_CONT_NONE) { + // Plugged controller errored + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_NONE; + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + sPadMgrInstance->rumbleTimer[i] = 0xFF; + } + } + sPadMgrInstance->validCtrlrsMask = ctrlrMask; +} + +void PadMgr_HandleRetrace(void) { + OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(); + + // Begin reading controller data + osContStartReadData(serialEventQueue); + + // Execute rumble callback + if (sPadMgrInstance->rumbleRetraceCallback != NULL) { + sPadMgrInstance->rumbleRetraceCallback(sPadMgrInstance->rumbleRetraceArg); + } + + // Wait for controller data + osRecvMesg(serialEventQueue, NULL, OS_MESG_BLOCK); + osContGetReadData(sPadMgrInstance->pads); + + // Clear all but controller 1 + bzero(&sPadMgrInstance->pads[1], sizeof(*sPadMgrInstance->pads) * (MAXCONTROLLERS - 1)); + + // If in PreNMI, clear all controllers + if (sPadMgrInstance->isResetting) { + bzero(sPadMgrInstance->pads, sizeof(sPadMgrInstance->pads)); + } + + // Query controller statuses + osContStartQuery(serialEventQueue); + osRecvMesg(serialEventQueue, NULL, OS_MESG_BLOCK); + osContGetQuery(sPadMgrInstance->padStatus); + + // Lock serial message queue + PadMgr_ReleaseSerialEventQueue(serialEventQueue); + + // Update connections + PadMgr_UpdateConnections(); + + // Lock input data + PadMgr_LockPadData(); + + // Update input data + PadMgr_UpdateInputs(); + + // Execute input callback + if (sPadMgrInstance->inputRetraceCallback != NULL) { + sPadMgrInstance->inputRetraceCallback(sPadMgrInstance->inputRetraceArg); + } + + // Unlock input data + PadMgr_UnlockPadData(); + + // Try and initialize a Voice Recognition Unit if not already attempted + if (sVoiceInitStatus != VOICE_INIT_FAILED) { + PadMgr_InitVoice(); + } + + // Rumble Pak + if (gFaultStruct.msgId != 0) { + // If fault is active, no rumble + PadMgr_RumbleStop(); + } else if (sPadMgrInstance->rumbleOffTimer > 0) { + // If the rumble off timer is active, no rumble + --sPadMgrInstance->rumbleOffTimer; + PadMgr_RumbleStop(); + } else if (sPadMgrInstance->rumbleOnTimer == 0) { + // If the rumble on timer is inactive, no rumble + PadMgr_RumbleStop(); + } else if (!sPadMgrInstance->isResetting) { + // If not resetting, update rumble + PadMgr_UpdateRumble(); + --sPadMgrInstance->rumbleOnTimer; + } + + sPadMgrRetraceCount++; +} + +void PadMgr_HandlePreNMI(void) { + sPadMgrInstance->isResetting = true; + PadMgr_RumblePause(); +} + +/** + * Fetches the most recently polled inputs from padmgr. + * + * NOTE: This function does not lock the inputs while reading them. + * The padmgr thread may interrupt this function and poll new inputs while the thread running this function is + * currently copying the old inputs potentially resulting in a mix of newly polled and old inputs being used. + * It is preferable to use `PadMgr_GetInput` or `PadMgr_GetInput2`. + * + * @param inputs Array of Input of length MAXCONTROLLERS to copy inputs into + * @param gameRequest True if polling inputs for updating the game state + */ +void PadMgr_GetInputNoLock(Input* inputs, s32 gameRequest) { + s32 i; + Input* input = &sPadMgrInstance->inputs[0]; + Input* inputOut = &inputs[0]; + s32 buttonDiff; + + for (i = 0; i < MAXCONTROLLERS; i++) { + if (gameRequest) { + // Copy inputs as-is, press and rel are calculated prior in `PadMgr_UpdateInputs` + *inputOut = *input; + // Zero parts of the press and rel inputs in the polled inputs so they are not read more than once + input->press.button = 0; + input->rel.button = 0; + } else { + // Take as the previous inputs the inputs that are currently in the destination array + inputOut->prev = inputOut->cur; + // Copy current inputs from the polled inputs + inputOut->cur = input->cur; + // Calculate press and rel from these + buttonDiff = inputOut->prev.button ^ inputOut->cur.button; + inputOut->press.button = inputOut->cur.button & buttonDiff; + inputOut->rel.button = inputOut->prev.button & buttonDiff; + PadUtils_UpdateRelXY(inputOut); + } + input++; + inputOut++; + } +} + +/** + * Fetches the most recently polled inputs from padmgr. + * + * @param inputs Array of Input of length MAXCONTROLLERS to copy inputs into + * @param gameRequest True if polling inputs for updating the game state + */ +void PadMgr_GetInput(Input* inputs, s32 gameRequest) { + PadMgr_LockPadData(); + PadMgr_GetInputNoLock(inputs, gameRequest); + PadMgr_UnlockPadData(); +} + +/** + * Copy of `PadMgr_GetInput` + * + * @see PadMgr_GetInput + */ +void PadMgr_GetInput2(Input* inputs, s32 gameRequest) { + PadMgr_LockPadData(); + PadMgr_GetInputNoLock(inputs, gameRequest); + PadMgr_UnlockPadData(); +} + +void PadMgr_ThreadEntry() { + s16* interruptMsg = NULL; + s32 actionBits; + s32 exit; + + osCreateMesgQueue(&sPadMgrInstance->interruptQueue, sPadMgrInstance->interruptMsgBuf, + ARRAY_COUNT(sPadMgrInstance->interruptMsgBuf)); + IrqMgr_AddClient(sPadMgrInstance->irqMgr, &sPadMgrInstance->irqClient, &sPadMgrInstance->interruptQueue); + + actionBits = 0; + exit = false; + + while (!exit) { + // Process all messages currently in the queue, instead of only a single mssage. + // Deduplicates the same message. + do { + osRecvMesg(&sPadMgrInstance->interruptQueue, (OSMesg*)&interruptMsg, OS_MESG_BLOCK); + switch (*interruptMsg) { + case OS_SC_RETRACE_MSG: + actionBits |= PADMGR_RETRACE_MSG; + break; + + case OS_SC_PRE_NMI_MSG: + actionBits |= PADMGR_PRE_NMI_MSG; + break; + + case OS_SC_NMI_MSG: + actionBits |= PADMGR_NMI_MSG; + break; + } + } while (!MQ_IS_EMPTY(&sPadMgrInstance->interruptQueue)); + + // Act on received messages + while (actionBits != 0) { + if (actionBits & PADMGR_NMI_MSG) { + actionBits &= ~PADMGR_NMI_MSG; + exit = true; + } else if (actionBits & PADMGR_PRE_NMI_MSG) { + actionBits &= ~PADMGR_PRE_NMI_MSG; + PadMgr_HandlePreNMI(); + } else if (actionBits & PADMGR_RETRACE_MSG) { + actionBits &= ~PADMGR_RETRACE_MSG; + PadMgr_HandleRetrace(); + } + } + } + + IrqMgr_RemoveClient(sPadMgrInstance->irqMgr, &sPadMgrInstance->irqClient); +} + +void PadMgr_Init(OSMesgQueue* siEvtQ, IrqMgr* irqMgr, OSId threadId, OSPri pri, void* stack) { + bzero(sPadMgrInstance, sizeof(PadMgr)); + sPadMgrInstance->irqMgr = irqMgr; + + // These are unique access tokens, there should only ever be room for one OSMesg in these queues + osCreateMesgQueue(&sPadMgrInstance->serialLockQueue, &sPadMgrInstance->serialMsg, 1); + osCreateMesgQueue(&sPadMgrInstance->lockQueue, &sPadMgrInstance->lockMsg, 1); + + PadMgr_UnlockPadData(); + PadSetup_Init(siEvtQ, &sPadMgrInstance->validCtrlrsMask, sPadMgrInstance->padStatus); + sPadMgrInstance->nControllers = MAXCONTROLLERS; + osContSetCh(sPadMgrInstance->nControllers); + PadMgr_ReleaseSerialEventQueue(siEvtQ); + + osCreateThread(&sPadMgrInstance->thread, threadId, PadMgr_ThreadEntry, sPadMgrInstance, stack, pri); + osStartThread(&sPadMgrInstance->thread); +} diff --git a/src/code/sys_rumble.c b/src/code/sys_rumble.c index 4101758be..06bef6e34 100644 --- a/src/code/sys_rumble.c +++ b/src/code/sys_rumble.c @@ -24,12 +24,12 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { if (D_801D1E70) { for (i = 0; i < MAXCONTROLLERS; i++) { - func_8017544C(i, false); + PadMgr_RumbleSetSingle(i, false); } } D_801D1E70 = rumbleMgr->updateEnabled; - func_80175434(); + PadMgr_RumblePause(); return; } @@ -39,7 +39,7 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { // Start up the manager by wiping old requests if (rumbleMgr->state == RUMBLEMANAGER_STATE_INITIAL) { for (i = 0; i < MAXCONTROLLERS; i++) { - func_8017544C(i, false); + PadMgr_RumbleSetSingle(i, false); } for (i = 0; i < RUMBLE_REQUEST_BUFFER_SIZE; i++) { @@ -59,7 +59,7 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { rumbleMgr->state = RUMBLEMANAGER_STATE_RUNNING; - func_80175434(); + PadMgr_RumblePause(); } if (rumbleMgr->state != RUMBLEMANAGER_STATE_WIPE) { @@ -146,7 +146,7 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { rumbleMgr->overrideDecayStep = 0; rumbleMgr->overrideAccumulator = 0; - func_80175434(); + PadMgr_RumblePause(); } } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 41441f3a2..fe4ca5ef8 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -29,7 +29,7 @@ typedef struct { /* 0x03 */ u8 flags3; } RestrictionFlags; -Input sPostmanTimerInput[4]; +Input sPostmanTimerInput[MAXCONTROLLERS]; #define RESTRICTIONS_TABLE_END 0xFF @@ -887,10 +887,10 @@ void Interface_SetVertices(PlayState* play) { s32 sPostmanTimerInputBtnAPressed = false; -void Interface_PostmanTimerCallback(s32 arg0) { +void Interface_PostmanTimerCallback(void* arg) { s32 btnAPressed; - func_80175E68(&sPostmanTimerInput[0], 0); + PadMgr_GetInputNoLock(sPostmanTimerInput, false); btnAPressed = CHECK_BTN_ALL(sPostmanTimerInput[0].cur.button, BTN_A); if ((btnAPressed != sPostmanTimerInputBtnAPressed) && btnAPressed) { gSaveContext.postmanTimerStopOsTime = osGetTime(); @@ -5654,7 +5654,7 @@ void Interface_DrawTimers(PlayState* play) { } gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_POSTMAN_COUNTING; sPostmanTimerInputBtnAPressed = true; - func_80174F7C(Interface_PostmanTimerCallback, NULL); + PadMgr_SetInputRetraceCallback(Interface_PostmanTimerCallback, NULL); break; case TIMER_STATE_POSTMAN_STOP: @@ -5663,7 +5663,7 @@ void Interface_DrawTimers(PlayState* play) { postmanTimerStopOsTime - ((void)0, gSaveContext.timerStartOsTimes[TIMER_ID_POSTMAN]) - ((void)0, gSaveContext.timerPausedOsTimes[TIMER_ID_POSTMAN])); gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_POSTMAN_END; - func_80174F9C(Interface_PostmanTimerCallback, NULL); + PadMgr_UnsetInputRetraceCallback(Interface_PostmanTimerCallback, NULL); break; case TIMER_STATE_POSTMAN_COUNTING: @@ -7211,7 +7211,7 @@ void Interface_Update(PlayState* play) { void Interface_Destroy(PlayState* play) { Map_Destroy(play); - func_80174F9C(Interface_PostmanTimerCallback, NULL); + PadMgr_UnsetInputRetraceCallback(Interface_PostmanTimerCallback, NULL); } void Interface_Init(PlayState* play) { diff --git a/src/code/z_rumble.c b/src/code/z_rumble.c index ce5cc16b4..3cca1d432 100644 --- a/src/code/z_rumble.c +++ b/src/code/z_rumble.c @@ -68,11 +68,11 @@ void Rumble_Request(f32 distSq, u8 sourceIntensity, u8 decayTimer, u8 decayStep) void Rumble_Init(void) { RumbleManager_Init(&gRumbleMgr); - func_80174F24(Rumble_Update, NULL); + PadMgr_SetRumbleRetraceCallback(Rumble_Update, NULL); } void Rumble_Destroy(void) { - func_80174F44(Rumble_Update, NULL); + PadMgr_UnsetRumbleRetraceCallback(Rumble_Update, NULL); RumbleManager_Destroy(&gRumbleMgr); } diff --git a/src/libultra/io/motor.c b/src/libultra/io/motor.c index 649a8b368..9e0eb127e 100644 --- a/src/libultra/io/motor.c +++ b/src/libultra/io/motor.c @@ -6,40 +6,40 @@ #define BANK_ADDR 0x400 #define MOTOR_ID 0x80 -OSPifRam osPifBuffers[MAXCONTROLLERS]; +OSPifRam __MotorDataBuf[MAXCONTROLLERS]; s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); -s32 __osMotorAccess(OSPfs* pfs, u32 vibrate) { +s32 __osMotorAccess(OSPfs* pfs, s32 flag) { s32 i; s32 ret; - u8* buf = (u8*)&osPifBuffers[pfs->channel]; + u8* ptr = (u8*)&__MotorDataBuf[pfs->channel]; - if (!(pfs->status & 8)) { - return 5; + if (!(pfs->status & PFS_MOTOR_INITIALIZED)) { + return PFS_ERR_INVALID; } __osSiGetAccess(); - osPifBuffers[pfs->channel].status = 1; - buf += pfs->channel; + __MotorDataBuf[pfs->channel].status = CONT_CMD_EXE; + ptr += pfs->channel; for (i = 0; i < BLOCKSIZE; i++) { - ((__OSContRamReadFormat*)buf)->data[i] = vibrate; + READFORMAT(ptr)->data[i] = flag; } __osContLastPoll = CONT_CMD_END; - __osSiRawStartDma(OS_WRITE, &osPifBuffers[pfs->channel]); + __osSiRawStartDma(OS_WRITE, &__MotorDataBuf[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); - __osSiRawStartDma(OS_READ, &osPifBuffers[pfs->channel]); + __osSiRawStartDma(OS_READ, &__MotorDataBuf[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); - ret = ((__OSContRamReadFormat*)buf)->rxsize & 0xC0; + ret = READFORMAT(ptr)->rxsize & CHNL_ERR_MASK; if (!ret) { - if (!vibrate) { - if (((__OSContRamReadFormat*)buf)->datacrc != 0) { + if (!flag) { + if (READFORMAT(ptr)->datacrc != 0) { ret = PFS_ERR_CONTRFAIL; } } else { - if (((__OSContRamReadFormat*)buf)->datacrc != 0xEB) { + if (READFORMAT(ptr)->datacrc != 0xEB) { ret = PFS_ERR_CONTRFAIL; } } @@ -50,76 +50,75 @@ s32 __osMotorAccess(OSPfs* pfs, u32 vibrate) { return ret; } -void _MakeMotorData(s32 channel, OSPifRam* buf) { - u8* bufptr = (u8*)buf; - __OSContRamReadFormat mempakwr; +void _MakeMotorData(s32 channel, OSPifRam* mdata) { + u8* ptr = (u8*)mdata->ramarray; + __OSContRamReadFormat ramreadformat; s32 i; - mempakwr.dummy = 0xFF; - mempakwr.txsize = 0x23; - mempakwr.rxsize = 1; - mempakwr.cmd = 3; // write mempak - mempakwr.hi = 0x600 >> 3; - mempakwr.lo = (u8)(__osContAddressCrc(0x600) | (0x600 << 5)); + ramreadformat.dummy = CONT_CMD_NOP; + ramreadformat.txsize = CONT_CMD_WRITE_PAK_TX; + ramreadformat.rxsize = CONT_CMD_WRITE_PAK_RX; + ramreadformat.cmd = CONT_CMD_WRITE_PAK; + ramreadformat.hi = CONT_BLOCK_RUMBLE >> 3; + ramreadformat.lo = (u8)(__osContAddressCrc(CONT_BLOCK_RUMBLE) | (CONT_BLOCK_RUMBLE << 5)); if (channel != 0) { for (i = 0; i < channel; i++) { - *bufptr++ = 0; + *ptr++ = 0; } } - *(__OSContRamReadFormat*)bufptr = mempakwr; - bufptr += sizeof(mempakwr); - *bufptr = 0xFE; + *READFORMAT(ptr) = ramreadformat; + ptr += sizeof(ramreadformat); + *ptr = CONT_CMD_END; } -s32 osMotorInit(OSMesgQueue* ctrlrqueue, OSPfs* pfs, s32 channel) { +s32 osMotorInit(OSMesgQueue* mq, OSPfs* pfs, s32 channel) { s32 ret; - u8 sp24[BLOCKSIZE]; + u8 temp[BLOCKSIZE]; - pfs->queue = ctrlrqueue; + pfs->queue = mq; pfs->channel = channel; pfs->activebank = 0xFF; pfs->status = 0; ret = __osPfsSelectBank(pfs, 0xFE); - if (ret == 2) { + if (ret == PFS_ERR_NEW_PACK) { ret = __osPfsSelectBank(pfs, MOTOR_ID); } if (ret != 0) { return ret; } - ret = __osContRamRead(ctrlrqueue, channel, 0x400, sp24); - if (ret == 2) { - ret = 4; // "Controller pack communication error" + ret = __osContRamRead(mq, channel, CONT_BLOCK_DETECT, temp); + if (ret == PFS_ERR_NEW_PACK) { + ret = PFS_ERR_CONTRFAIL; } if (ret != 0) { return ret; } - if (sp24[BLOCKSIZE - 1] == 0xFE) { - return 0xB; + if (temp[BLOCKSIZE - 1] == 0xFE) { + return PFS_ERR_DEVICE; } ret = __osPfsSelectBank(pfs, MOTOR_ID); if (ret == 2) { - ret = 4; // "Controller pack communication error" + ret = PFS_ERR_CONTRFAIL; } if (ret != 0) { return ret; } - ret = __osContRamRead(ctrlrqueue, channel, BANK_ADDR, sp24); - if (ret == 2) { - ret = 4; // "Controller pack communication error" + ret = __osContRamRead(mq, channel, BANK_ADDR, temp); + if (ret == PFS_ERR_NEW_PACK) { + ret = PFS_ERR_CONTRFAIL; } if (ret != 0) { return ret; } - if (sp24[BLOCKSIZE - 1] != MOTOR_ID) { - return 0xB; + if (temp[BLOCKSIZE - 1] != MOTOR_ID) { + return PFS_ERR_DEVICE; } if (!(pfs->status & PFS_MOTOR_INITIALIZED)) { - _MakeMotorData(channel, &osPifBuffers[channel]); + _MakeMotorData(channel, &__MotorDataBuf[channel]); } pfs->status = PFS_MOTOR_INITIALIZED; - - return 0; // "Recognized rumble pak" + return 0; } diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 01e29668e..59b1bed02 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -165,7 +165,7 @@ void ConsoleLogo_Init(GameState* thisx) { this->state.destroy = ConsoleLogo_Destroy; this->exit = false; - if (!(Padmgr_GetControllerBitmask() & 1)) { + if (!(PadMgr_GetValidControllersMask() & 1)) { gSaveContext.fileNum = 0xFEDC; } else { gSaveContext.fileNum = 0xFF; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c3c12979b..6d9916fd7 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3164,33 +3164,33 @@ 0x80174B20:("ListAlloc_Free",), 0x80174BA0:("ListAlloc_FreeAll",), 0x80174BF0:("Main",), - 0x80174F10:("Padmgr_GetControllerBitmask",), - 0x80174F24:("func_80174F24",), - 0x80174F44:("func_80174F44",), - 0x80174F7C:("func_80174F7C",), - 0x80174F9C:("func_80174F9C",), - 0x80174FD4:("Padmgr_GetEventCallback",), - 0x80175008:("func_80175008",), - 0x8017503C:("Padmgr_SetEventCallback",), - 0x8017506C:("func_8017506C",), - 0x8017509C:("Padmgr_Lock",), - 0x801750CC:("Padmgr_Unlock",), - 0x801750FC:("func_801750FC",), - 0x80175364:("func_80175364",), - 0x80175434:("func_80175434",), - 0x8017544C:("func_8017544C",), + 0x80174F10:("PadMgr_GetValidControllersMask",), + 0x80174F24:("PadMgr_SetRumbleRetraceCallback",), + 0x80174F44:("PadMgr_UnsetRumbleRetraceCallback",), + 0x80174F7C:("PadMgr_SetInputRetraceCallback",), + 0x80174F9C:("PadMgr_UnsetInputRetraceCallback",), + 0x80174FD4:("PadMgr_AcquireSerialEventQueue",), + 0x80175008:("PadMgr_VoiceAcquireSerialEventQueue",), + 0x8017503C:("PadMgr_ReleaseSerialEventQueue",), + 0x8017506C:("PadMgr_VoiceReleaseSerialEventQueue",), + 0x8017509C:("PadMgr_LockPadData",), + 0x801750CC:("PadMgr_UnlockPadData",), + 0x801750FC:("PadMgr_UpdateRumble",), + 0x80175364:("PadMgr_RumbleStop",), + 0x80175434:("PadMgr_RumblePause",), + 0x8017544C:("PadMgr_RumbleSetSingle",), 0x80175474:("PadMgr_RumbleSet",), 0x801754C0:("PadMgr_ControllerHasRumblePak",), - 0x801754E0:("Padmgr_CalcStickEdges",), - 0x801757A4:("Padmgr_ParseState",), - 0x801759BC:("func_801759BC",), - 0x80175AE0:("func_80175AE0",), - 0x80175C80:("Padmgr_Update",), - 0x80175E3C:("Padmgr_Stop",), - 0x80175E68:("func_80175E68",), - 0x80175F98:("Padmgr_GetInput",), - 0x80175FD4:("Padmgr_GetInput2",), - 0x80176010:("Padmgr_ThreadEntry",), + 0x801754E0:("PadMgr_AdjustInput",), + 0x801757A4:("PadMgr_UpdateInputs",), + 0x801759BC:("PadMgr_InitVoice",), + 0x80175AE0:("PadMgr_UpdateConnections",), + 0x80175C80:("PadMgr_HandleRetrace",), + 0x80175E3C:("PadMgr_HandlePreNMI",), + 0x80175E68:("PadMgr_GetInputNoLock",), + 0x80175F98:("PadMgr_GetInput",), + 0x80175FD4:("PadMgr_GetInput2",), + 0x80176010:("PadMgr_ThreadEntry",), 0x80176194:("PadMgr_Init",), 0x80176280:("Sched_SwapFramebuffer",), 0x80176314:("Sched_RetraceUpdateFramebuffer",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b69ab2ff4..f40abb468 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -328,7 +328,7 @@ 0x8009CD50:("sRandFloat","f32","",0x4), 0x8009CD60:("sArenaLockMsg","OSMesg","[1]",0x4), 0x8009CD70:("tmp_task","OSTask","",0x40), - 0x8009CDB0:("osPifBuffers","OSPifRam","[4]",0x100), + 0x8009CDB0:("__MotorDataBuf","OSPifRam","[4]",0x100), 0x8009CEB0:("siAccessBuf","OSMesg","[1]",0x4), 0x8009CEB8:("__osSiAccessQueue","OSMesgQueue","",0x18), 0x8009CED0:("__osContPifRam","OSPifRam","",0x40), @@ -2180,9 +2180,9 @@ 0x801D1520:("gScreenWidth","s32","",0x4), 0x801D1524:("gScreenHeight","s32","",0x4), 0x801D1528:("startHeapSize","UNK_TYPE4","",0x4), - 0x801D1530:("padmgrContext","PadMgr*","",0x4), - 0x801D1534:("controllerInputsCaptured","UNK_TYPE4","",0x4), - 0x801D1538:("D_801D1538","UNK_TYPE4","",0x4), + 0x801D1530:("sPadMgrInstance","PadMgr*","",0x4), + 0x801D1534:("sPadMgrRetraceCount","UNK_TYPE4","",0x4), + 0x801D1538:("sVoiceInitStatus","UNK_TYPE4","",0x4), 0x801D1540:("D_801D1540","UNK_PTR","",0x4), 0x801D1570:("D_801D1570","f32","[13]",0x34), 0x801D15B0:("gZeroVec3f","Vec3f","",0xC), @@ -4292,7 +4292,7 @@ 0x801FD598:("sCustomSequencePc","UNK_TYPE1","",0x1), 0x801FD5A0:("D_801FD5A0","UNK_TYPE1","",0x1), 0x801FD5A4:("D_801FD5A4","UNK_TYPE1","",0x1), - 0x801FD5B8:("D_801FD5B8","UNK_TYPE1","",0x1), + 0x801FD5B8:("gVoiceHandle","UNK_TYPE1","",0x1), 0x801FD5C4:("D_801FD5C4","UNK_TYPE1","",0x1), 0x801FD5C8:("D_801FD5C8","UNK_TYPE1","",0x1), 0x801FD5E8:("D_801FD5E8","UNK_TYPE1","",0x1), diff --git a/tools/namefixer.py b/tools/namefixer.py index a0aa4b315..a3fbddec9 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -742,6 +742,28 @@ wordReplace = { "func_80102544": "LightContext_SetFog", + "Padmgr_GetControllerBitmask": "PadMgr_GetValidControllersMask", + "func_80174F24": "PadMgr_SetRumbleRetraceCallback", + "func_80174F44": "PadMgr_UnsetRumbleRetraceCallback", + "func_80174F7C": "PadMgr_SetInputRetraceCallback", + "func_80174F9C": "PadMgr_UnsetInputRetraceCallback", + "Padmgr_GetEventCallback": "PadMgr_AcquireSerialEventQueue", + "func_80175008": "PadMgr_VoiceAcquireSerialEventQueue", + "Padmgr_SetEventCallback": "PadMgr_ReleaseSerialEventQueue", + "func_8017506C": "PadMgr_VoiceReleaseSerialEventQueue", + "Padmgr_Lock": "PadMgr_LockPadData", + "Padmgr_Unlock": "PadMgr_UnlockPadData", + "func_801750FC": "PadMgr_UpdateRumble", + "func_80175364": "PadMgr_RumbleStop", + "func_80175434": "PadMgr_RumblePause", + "func_8017544C": "PadMgr_RumbleSetSingle", + "Padmgr_ParseState": "PadMgr_UpdateInputs", + "func_801759BC": "PadMgr_InitVoice", + "func_80175AE0": "PadMgr_UpdateConnections", + "Padmgr_Update": "PadMgr_HandleRetrace", + "Padmgr_Stop": "PadMgr_HandlePreNMI", + "func_80175E68": "PadMgr_GetInputNoLock", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index d6821e4aa..ba751f02a 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2678,33 +2678,33 @@ asm/non_matchings/code/listalloc/func_80174AB4.s,func_80174AB4,0x80174AB4,0x1B asm/non_matchings/code/listalloc/func_80174B20.s,func_80174B20,0x80174B20,0x20 asm/non_matchings/code/listalloc/func_80174BA0.s,func_80174BA0,0x80174BA0,0x14 asm/non_matchings/code/main/main.s,main,0x80174BF0,0xC8 -asm/non_matchings/code/padmgr/Padmgr_GetControllerBitmask.s,Padmgr_GetControllerBitmask,0x80174F10,0x5 -asm/non_matchings/code/padmgr/func_80174F24.s,func_80174F24,0x80174F24,0x8 -asm/non_matchings/code/padmgr/func_80174F44.s,func_80174F44,0x80174F44,0xE -asm/non_matchings/code/padmgr/func_80174F7C.s,func_80174F7C,0x80174F7C,0x8 -asm/non_matchings/code/padmgr/func_80174F9C.s,func_80174F9C,0x80174F9C,0xE -asm/non_matchings/code/padmgr/Padmgr_GetEventCallback.s,Padmgr_GetEventCallback,0x80174FD4,0xD -asm/non_matchings/code/padmgr/func_80175008.s,func_80175008,0x80175008,0xD -asm/non_matchings/code/padmgr/Padmgr_SetEventCallback.s,Padmgr_SetEventCallback,0x8017503C,0xC -asm/non_matchings/code/padmgr/func_8017506C.s,func_8017506C,0x8017506C,0xC -asm/non_matchings/code/padmgr/Padmgr_Lock.s,Padmgr_Lock,0x8017509C,0xC -asm/non_matchings/code/padmgr/Padmgr_Unlock.s,Padmgr_Unlock,0x801750CC,0xC -asm/non_matchings/code/padmgr/func_801750FC.s,func_801750FC,0x801750FC,0x9A -asm/non_matchings/code/padmgr/func_80175364.s,func_80175364,0x80175364,0x34 -asm/non_matchings/code/padmgr/func_80175434.s,func_80175434,0x80175434,0x6 -asm/non_matchings/code/padmgr/func_8017544C.s,func_8017544C,0x8017544C,0xA +asm/non_matchings/code/padmgr/PadMgr_GetValidControllersMask.s,PadMgr_GetValidControllersMask,0x80174F10,0x5 +asm/non_matchings/code/padmgr/PadMgr_SetRumbleRetraceCallback.s,PadMgr_SetRumbleRetraceCallback,0x80174F24,0x8 +asm/non_matchings/code/padmgr/PadMgr_UnsetRumbleRetraceCallback.s,PadMgr_UnsetRumbleRetraceCallback,0x80174F44,0xE +asm/non_matchings/code/padmgr/PadMgr_SetInputRetraceCallback.s,PadMgr_SetInputRetraceCallback,0x80174F7C,0x8 +asm/non_matchings/code/padmgr/PadMgr_UnsetInputRetraceCallback.s,PadMgr_UnsetInputRetraceCallback,0x80174F9C,0xE +asm/non_matchings/code/padmgr/PadMgr_AcquireSerialEventQueue.s,PadMgr_AcquireSerialEventQueue,0x80174FD4,0xD +asm/non_matchings/code/padmgr/PadMgr_VoiceAcquireSerialEventQueue.s,PadMgr_VoiceAcquireSerialEventQueue,0x80175008,0xD +asm/non_matchings/code/padmgr/PadMgr_ReleaseSerialEventQueue.s,PadMgr_ReleaseSerialEventQueue,0x8017503C,0xC +asm/non_matchings/code/padmgr/PadMgr_VoiceReleaseSerialEventQueue.s,PadMgr_VoiceReleaseSerialEventQueue,0x8017506C,0xC +asm/non_matchings/code/padmgr/PadMgr_LockPadData.s,PadMgr_LockPadData,0x8017509C,0xC +asm/non_matchings/code/padmgr/PadMgr_UnlockPadData.s,PadMgr_UnlockPadData,0x801750CC,0xC +asm/non_matchings/code/padmgr/PadMgr_UpdateRumble.s,PadMgr_UpdateRumble,0x801750FC,0x9A +asm/non_matchings/code/padmgr/PadMgr_RumbleStop.s,PadMgr_RumbleStop,0x80175364,0x34 +asm/non_matchings/code/padmgr/PadMgr_RumblePause.s,PadMgr_RumblePause,0x80175434,0x6 +asm/non_matchings/code/padmgr/PadMgr_RumbleSetSingle.s,PadMgr_RumbleSetSingle,0x8017544C,0xA asm/non_matchings/code/padmgr/PadMgr_RumbleSet.s,PadMgr_RumbleSet,0x80175474,0x13 asm/non_matchings/code/padmgr/PadMgr_ControllerHasRumblePak.s,PadMgr_ControllerHasRumblePak,0x801754C0,0x8 -asm/non_matchings/code/padmgr/Padmgr_CalcStickEdges.s,Padmgr_CalcStickEdges,0x801754E0,0xB1 -asm/non_matchings/code/padmgr/Padmgr_ParseState.s,Padmgr_ParseState,0x801757A4,0x86 -asm/non_matchings/code/padmgr/func_801759BC.s,func_801759BC,0x801759BC,0x49 -asm/non_matchings/code/padmgr/func_80175AE0.s,func_80175AE0,0x80175AE0,0x68 -asm/non_matchings/code/padmgr/Padmgr_Update.s,Padmgr_Update,0x80175C80,0x6F -asm/non_matchings/code/padmgr/Padmgr_Stop.s,Padmgr_Stop,0x80175E3C,0xB -asm/non_matchings/code/padmgr/func_80175E68.s,func_80175E68,0x80175E68,0x4C -asm/non_matchings/code/padmgr/Padmgr_GetInput.s,Padmgr_GetInput,0x80175F98,0xF -asm/non_matchings/code/padmgr/Padmgr_GetInput2.s,Padmgr_GetInput2,0x80175FD4,0xF -asm/non_matchings/code/padmgr/Padmgr_ThreadEntry.s,Padmgr_ThreadEntry,0x80176010,0x61 +asm/non_matchings/code/padmgr/PadMgr_AdjustInput.s,PadMgr_AdjustInput,0x801754E0,0xB1 +asm/non_matchings/code/padmgr/PadMgr_UpdateInputs.s,PadMgr_UpdateInputs,0x801757A4,0x86 +asm/non_matchings/code/padmgr/PadMgr_InitVoice.s,PadMgr_InitVoice,0x801759BC,0x49 +asm/non_matchings/code/padmgr/PadMgr_UpdateConnections.s,PadMgr_UpdateConnections,0x80175AE0,0x68 +asm/non_matchings/code/padmgr/PadMgr_HandleRetrace.s,PadMgr_HandleRetrace,0x80175C80,0x6F +asm/non_matchings/code/padmgr/PadMgr_HandlePreNMI.s,PadMgr_HandlePreNMI,0x80175E3C,0xB +asm/non_matchings/code/padmgr/PadMgr_GetInputNoLock.s,PadMgr_GetInputNoLock,0x80175E68,0x4C +asm/non_matchings/code/padmgr/PadMgr_GetInput.s,PadMgr_GetInput,0x80175F98,0xF +asm/non_matchings/code/padmgr/PadMgr_GetInput2.s,PadMgr_GetInput2,0x80175FD4,0xF +asm/non_matchings/code/padmgr/PadMgr_ThreadEntry.s,PadMgr_ThreadEntry,0x80176010,0x61 asm/non_matchings/code/padmgr/PadMgr_Init.s,PadMgr_Init,0x80176194,0x3B asm/non_matchings/code/sched/Sched_SwapFramebuffer.s,Sched_SwapFramebuffer,0x80176280,0x25 asm/non_matchings/code/sched/Sched_RetraceUpdateFramebuffer.s,Sched_RetraceUpdateFramebuffer,0x80176314,0x14 From c84eab6efbb10651ef99b8850588df48ed1e1559 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Fri, 26 May 2023 17:28:27 -0700 Subject: [PATCH 21/51] `z_fbdemo_wipe1` OK and assorted asset cleanup (#1244) --- ...{ovl_Arrow_fire.xml => ovl_Arrow_Fire.xml} | 0 .../ovl_fbdemo_triforce.xml} | 0 assets/xml/overlays/ovl_fbdemo_wipe1.xml | 9 ++ spec | 3 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 2 +- .../ovl_fbdemo_triforce/z_fbdemo_triforce.c | 2 +- .../fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c | 127 +++++++++++++++--- .../fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h | 12 +- 8 files changed, 130 insertions(+), 25 deletions(-) rename assets/xml/overlays/{ovl_Arrow_fire.xml => ovl_Arrow_Fire.xml} (100%) rename assets/xml/{objects/object_fbdemo_triforce.xml => overlays/ovl_fbdemo_triforce.xml} (100%) create mode 100644 assets/xml/overlays/ovl_fbdemo_wipe1.xml diff --git a/assets/xml/overlays/ovl_Arrow_fire.xml b/assets/xml/overlays/ovl_Arrow_Fire.xml similarity index 100% rename from assets/xml/overlays/ovl_Arrow_fire.xml rename to assets/xml/overlays/ovl_Arrow_Fire.xml diff --git a/assets/xml/objects/object_fbdemo_triforce.xml b/assets/xml/overlays/ovl_fbdemo_triforce.xml similarity index 100% rename from assets/xml/objects/object_fbdemo_triforce.xml rename to assets/xml/overlays/ovl_fbdemo_triforce.xml diff --git a/assets/xml/overlays/ovl_fbdemo_wipe1.xml b/assets/xml/overlays/ovl_fbdemo_wipe1.xml new file mode 100644 index 000000000..281c8ebfb --- /dev/null +++ b/assets/xml/overlays/ovl_fbdemo_wipe1.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spec b/spec index ef85a1764..4b8481a73 100644 --- a/spec +++ b/spec @@ -3194,8 +3194,7 @@ beginseg name "ovl_fbdemo_wipe1" compress include "build/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.o" - include "build/data/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1.data.o" - include "build/data/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1.reloc.o" + include "build/src/overlays/fbdemos/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1_reloc.o" endseg beginseg 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 971b778be..c356a5f17 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -19,7 +19,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play); void FireArrow_ChargeAndWait(ArrowFire* this, PlayState* play); void FireArrow_Fly(ArrowFire* this, PlayState* play); -#include "overlays/ovl_Arrow_fire/ovl_Arrow_Fire.c" +#include "overlays/ovl_Arrow_Fire/ovl_Arrow_Fire.c" ActorInit Arrow_Fire_InitVars = { ACTOR_ARROW_FIRE, diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c index c4eb826c7..cf1000add 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c +++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c @@ -6,7 +6,7 @@ #include "global.h" #include "z_fbdemo_triforce.h" -#include "assets/objects/object_fbdemo_triforce/ovl_fbdemo_triforce.c" +#include "assets/overlays/ovl_fbdemo_triforce/ovl_fbdemo_triforce.c" void* TransitionTriforce_Init(void* thisx); void TransitionTriforce_Destroy(void* thisx); diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c index 1ce5f0d59..94285c45b 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c @@ -7,6 +7,8 @@ #include "global.h" #include "z_fbdemo_wipe1.h" +#define THIS ((TransitionWipe1*)thisx) + void* TransitionWipe1_Init(void* thisx); void TransitionWipe1_Destroy(void* thisx); void TransitionWipe1_Update(void* thisx, s32 updateRate); @@ -17,35 +19,120 @@ void TransitionWipe1_SetColor(void* thisx, u32 color); void TransitionWipe1_SetEnvColor(void* thisx, u32 color); s32 TransitionWipe1_IsDone(void* thisx); -#if 0 +#include "assets/overlays/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1.c" + TransitionInit TransitionWipe1_InitVars = { - TransitionWipe1_Init, - TransitionWipe1_Destroy, - TransitionWipe1_Update, - TransitionWipe1_Draw, - TransitionWipe1_Start, - TransitionWipe1_SetType, - TransitionWipe1_SetColor, - TransitionWipe1_SetEnvColor, - TransitionWipe1_IsDone, + TransitionWipe1_Init, TransitionWipe1_Destroy, TransitionWipe1_Update, + TransitionWipe1_Draw, TransitionWipe1_Start, TransitionWipe1_SetType, + TransitionWipe1_SetColor, TransitionWipe1_SetEnvColor, TransitionWipe1_IsDone, }; -#endif +typedef enum { + /* 0 */ TRANS_WIPE1_DIR_IN, + /* 1 */ TRANS_WIPE1_DIR_OUT +} TransitionWipe1Direction; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Start.s") +void TransitionWipe1_Start(void* thisx) { + TransitionWipe1* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Init.s") + this->isDone = false; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Destroy.s") + if (this->direction != TRANS_WIPE1_DIR_IN) { + this->texY = (s32)(83.25f * (1 << 2)); + } else { + this->texY = (s32)(153.0f * (1 << 2)); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Update.s") + guPerspective(&this->projection, &this->normal, 60.0f, (4.0f / 3.0f), 10.0f, 12800.0f, 1.0f); + guLookAt(&this->lookAt, 0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Draw.s") +void* TransitionWipe1_Init(void* thisx) { + TransitionWipe1* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_IsDone.s") + bzero(this, sizeof(TransitionWipe1)); + return this; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_SetType.s") +void TransitionWipe1_Destroy(void* thisx) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_SetColor.s") +void TransitionWipe1_Update(void* thisx, s32 updateRate) { + TransitionWipe1* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_SetEnvColor.s") + if (this->direction != TRANS_WIPE1_DIR_IN) { + this->texY += (((void)0, gSaveContext.transWipeSpeed) * 3) / updateRate; + if (this->texY >= (s32)(153.0f * (1 << 2))) { + this->texY = (s32)(153.0f * (1 << 2)); + this->isDone = true; + } + } else { + this->texY -= (((void)0, gSaveContext.transWipeSpeed) * 3) / updateRate; + if (this->texY <= (s32)(83.25f * (1 << 2))) { + this->texY = (s32)(83.25f * (1 << 2)); + this->isDone = true; + } + } +} + +void TransitionWipe1_Draw(void* thisx, Gfx** gfxP) { + Gfx* gfx = *gfxP; + Mtx* modelView; + TransitionWipe1* this = THIS; + Gfx* texScroll; + s32 pad[4]; + + modelView = this->modelView[this->frame]; + this->frame ^= 1; + + guScale(&modelView[0], 0.56f, 0.56f, 1.0f); + guRotate(&modelView[1], 0.0f, 0.0f, 0.0f, 1.0f); + guTranslate(&modelView[2], 0.0f, 0.0f, 0.0f); + gDPPipeSync(gfx++); + texScroll = Gfx_BranchTexScroll(&gfx, this->texX, this->texY, 0, 0); + gSPSegment(gfx++, 8, texScroll); + gDPSetPrimColor(gfx++, 0, 0x80, this->primColor.r, this->primColor.g, this->primColor.b, 255); + gSPMatrix(gfx++, &this->projection, G_MTX_LOAD | G_MTX_PROJECTION); + gSPPerspNormalize(gfx++, this->normal); + gSPMatrix(gfx++, &this->lookAt, G_MTX_MUL | G_MTX_PROJECTION); + gSPMatrix(gfx++, &modelView[0], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(gfx++, &modelView[1], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPMatrix(gfx++, &modelView[2], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, sTransWipe1DL); + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +s32 TransitionWipe1_IsDone(void* thisx) { + TransitionWipe1* this = THIS; + + return this->isDone; +} + +void TransitionWipe1_SetType(void* thisx, s32 type) { + TransitionWipe1* this = THIS; + + if (type == TRANS_INSTANCE_TYPE_FILL_OUT) { + this->direction = TRANS_WIPE1_DIR_OUT; + } else { + this->direction = TRANS_WIPE1_DIR_IN; + } + + if (this->direction != TRANS_WIPE1_DIR_IN) { + this->texY = (s32)(83.25f * (1 << 2)); + } else { + this->texY = (s32)(153.0f * (1 << 2)); + } +} + +void TransitionWipe1_SetColor(void* thisx, u32 color) { + TransitionWipe1* this = THIS; + + this->primColor.rgba = color; +} + +void TransitionWipe1_SetEnvColor(void* thisx, u32 color) { + TransitionWipe1* this = THIS; + + this->envColor.rgba = color; +} diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h index 39f881b39..4906e531c 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h @@ -5,7 +5,17 @@ #include "color.h" typedef struct { - /* 0x000 */ char unk_0[0x218]; + /* 0x000 */ Color_RGBA8_u32 primColor; + /* 0x004 */ Color_RGBA8_u32 envColor; + /* 0x008 */ u8 direction; + /* 0x009 */ u8 frame; + /* 0x00A */ u8 isDone; + /* 0x00C */ u16 texX; + /* 0x00E */ u16 texY; + /* 0x010 */ u16 normal; + /* 0x018 */ Mtx projection; + /* 0x058 */ Mtx lookAt; + /* 0x098 */ Mtx modelView[2][3]; } TransitionWipe1; // size = 0x218 #endif From 74d881e92168b467fced28c47c3d8de17bf32d38 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Fri, 26 May 2023 20:54:30 -0400 Subject: [PATCH 22/51] `gfx.h` (#1248) * gfx.h * move rcp functions and variables to gfx.h * minor cleanup * Update include/gfx.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * format --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 81 ------- include/gfx.h | 197 ++++++++++++++++++ include/macros.h | 37 ---- include/variables.h | 3 - include/z64.h | 84 +------- src/code/z_rcp.c | 4 +- src/code/z_room.c | 4 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- 8 files changed, 203 insertions(+), 209 deletions(-) create mode 100644 include/gfx.h diff --git a/include/functions.h b/include/functions.h index 35010d601..292c5e210 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1597,87 +1597,6 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist); void Player_SetFeetPos(PlayState* play, Player* player, s32 limbIndex); void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor); -Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i); -Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i); -void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i); -Gfx* func_8012BFC4(Gfx* gfx); -Gfx* func_8012BFEC(Gfx* gfx); -Gfx* func_8012C014(Gfx* gfx); -void func_8012C058(GraphicsContext* gfxCtx); -void func_8012C080(GraphicsContext* gfxCtx); -void func_8012C0A8(GraphicsContext* gfxCtx); -void func_8012C0D0(GraphicsContext* gfxCtx); -void func_8012C0F8(GraphicsContext* gfxCtx); -void func_8012C120(GraphicsContext* gfxCtx); -void func_8012C148(GraphicsContext* gfxCtx); -void func_8012C170(GraphicsContext* gfxCtx); -Gfx* func_8012C198(Gfx* gfx); -void func_8012C1C0(GraphicsContext* gfxCtx); -Gfx* func_8012C1EC(Gfx* gfx); -void func_8012C214(GraphicsContext* gfxCtx); -void func_8012C240(GraphicsContext* gfxCtx); -void func_8012C268(PlayState* play); -void func_8012C28C(GraphicsContext* gfxCtx); -Gfx* func_8012C2B4(Gfx* gfx); -void func_8012C2DC(GraphicsContext* gfxCtx); -Gfx* func_8012C304(Gfx* gfx); -void func_8012C32C(GraphicsContext* gfxCtx); -void func_8012C354(GraphicsContext* gfxCtx); -void func_8012C37C(GraphicsContext* gfxCtx); -Gfx* func_8012C3A4(Gfx* gfx); -Gfx* func_8012C3CC(Gfx* gfx); -void func_8012C3F4(GraphicsContext* gfxCtx); -void func_8012C420(GraphicsContext* gfxCtx); -void func_8012C448(GraphicsContext* gfxCtx); -void func_8012C470(GraphicsContext* gfxCtx); -Gfx* func_8012C498(Gfx* gfx); -void func_8012C4C0(GraphicsContext* gfxCtx); -void func_8012C4E8(GraphicsContext* gfxCtx); -void func_8012C510(GraphicsContext* gfxCtx); -void func_8012C538(GraphicsContext* gfxCtx); -void func_8012C560(GraphicsContext* gfxCtx); -void func_8012C588(GraphicsContext* gfxCtx); -void func_8012C5B0(GraphicsContext* gfxCtx); -void func_8012C5D8(GraphicsContext* gfxCtx); -Gfx* func_8012C600(Gfx* gfx); -void func_8012C628(GraphicsContext* gfxCtx); -void func_8012C654(GraphicsContext* gfxCtx); -void func_8012C680(Gfx** gfxp); -void func_8012C6AC(GraphicsContext* gfxCtx); -void func_8012C6D4(GraphicsContext* gfxCtx); -void func_8012C6FC(GraphicsContext* gfxCtx); -Gfx* func_8012C724(Gfx* gfx); -Gfx* func_8012C74C(Gfx* gfx); -Gfx* func_8012C774(Gfx* gfx); -Gfx* func_8012C7B8(Gfx* gfx); -Gfx* func_8012C7FC(Gfx* gfx); -Gfx* func_8012C840(Gfx* gfx); -Gfx* func_8012C868(Gfx* gfx); -void func_8012C8AC(GraphicsContext* gfxCtx); -void func_8012C8D4(GraphicsContext* gfxCtx); -void func_8012C8FC(GraphicsContext* gfxCtx); -void func_8012C924(GraphicsContext* gfxCtx); -void func_8012C94C(GraphicsContext* gfxCtx); -void func_8012C974(GraphicsContext* gfxCtx); -void func_8012C9BC(GraphicsContext* gfxCtx); -void func_8012C9E4(GraphicsContext* gfxCtx); -void func_8012CA0C(Gfx** gfxp); -void func_8012CA38(GraphicsContext* gfxCtx); -Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); -void func_8012CB04(Gfx** gfxp, u32 x, u32 y); -Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y); -Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height); -Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2); -Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a); -Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a); -Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s32 a); -void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b); -void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); -void func_8012D40C(f32* param_1, f32* param_2, s16* param_3); - void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3); void Room_Init(PlayState* play, RoomContext* roomCtx); size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx); diff --git a/include/gfx.h b/include/gfx.h new file mode 100644 index 000000000..e08df2013 --- /dev/null +++ b/include/gfx.h @@ -0,0 +1,197 @@ +#ifndef GFX_H +#define GFX_H + +#include "ultra64.h" +#include "PR/sched.h" +#include "thga.h" +#include "alignment.h" + +struct GameState; + +typedef struct { + /* 0x000 */ Gfx taskStart[9]; + /* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl + /* 0x088 */ Gfx clearFrameBuffer[5]; // original name: clear_fb_dl + /* 0x0B0 */ Gfx setupBuffers[6]; // setup framebuffer and zbuffer + /* 0x0E0 */ Gfx unk_E0[12]; // unused + /* 0x140 */ Gfx syncSegments[17]; + /* 0x1C8 */ Gfx setScissor[2]; + /* 0x1D8 */ Gfx unk_1D8[25]; // unused + /* 0x2A0 */ Gfx disps[5]; + /* 0x2C8 */ Gfx clearFillRect[3]; // fillrect for clearing buffers + /* 0x2E0 */ Gfx fillRect[3]; // fillrect for general purpose + /* 0x2F8 */ Gfx debugDisp[1]; +} GfxMasterList; // size = 0x300 + +#define GFXPOOL_HEAD_MAGIC 0x1234 +#define GFXPOOL_TAIL_MAGIC 0x5678 + +typedef struct GfxPool { + /* 0x00000 */ u16 headMagic; // GFXPOOL_HEAD_MAGIC + /* 0x00008 */ GfxMasterList master; + /* 0x00308 */ Gfx polyXluBuffer[0x800]; + /* 0x04308 */ Gfx overlayBuffer[0x400]; + /* 0x06308 */ Gfx workBuffer[0x40]; + /* 0x06508 */ Gfx debugBuffer[0x40]; + /* 0x06708 */ Gfx polyOpaBuffer[0x3380]; + /* 0x20308 */ u16 tailMagic; // GFXPOOL_TAIL_MAGIC +} GfxPool; // size = 0x20310 + +typedef struct GraphicsContext { + /* 0x000 */ Gfx* polyOpaBuffer; // Pointer to "Zelda 0" + /* 0x004 */ Gfx* polyXluBuffer; // Pointer to "Zelda 1" + /* 0x008 */ char unk_8[0x8]; // Unused, could this be pointers to "Zelda 2" / "Zelda 3" + /* 0x010 */ Gfx* overlayBuffer; // Pointer to "Zelda 4" + /* 0x014 */ u32 unk_14; + /* 0x018 */ char unk_18[0x20]; + /* 0x038 */ OSMesg msgBuff[8]; + /* 0x058 */ OSMesgQueue* schedMsgQ; + /* 0x05C */ OSMesgQueue queue; + /* 0x074 */ char unk_74[0x04]; + /* 0x078 */ OSScTask task; + /* 0x0E0 */ char unk_E0[0xD0]; + /* 0x1B0 */ Gfx* workBuffer; + /* 0x1B4 */ TwoHeadGfxArena work; + /* 0x1C4 */ Gfx* debugBuffer; + /* 0x1C8 */ TwoHeadGfxArena debug; + /* 0x1D8 */ UNK_TYPE1 unk_1D8[0xAC]; + /* 0x284 */ OSViMode* viMode; + /* 0x288 */ void* zbuffer; + /* 0x28C */ char unk_28C[0x1C]; + /* 0x2A8 */ TwoHeadGfxArena overlay; // "Zelda 4" + /* 0x2B8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" + /* 0x2C8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" + /* 0x2D8 */ u32 gfxPoolIdx; + /* 0x2DC */ u16* curFrameBuffer; + /* 0x2E0 */ char unk_2E0[0x4]; + /* 0x2E4 */ u32 viConfigFeatures; + /* 0x2E8 */ char unk_2E8[0x2]; + /* 0x2EA */ u8 updateViMode; + /* 0x2EB */ u8 framebufferIndex; + /* 0x2EC */ void (*callback)(struct GraphicsContext*, u32); + /* 0x2F0 */ u32 callbackArg; + /* 0x2F4 */ f32 xScale; + /* 0x2F8 */ f32 yScale; + /* 0x2FC */ GfxMasterList* masterList; +} GraphicsContext; // size = 0x300 + +Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); +Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); +Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); +Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i); +Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i); +void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i); +Gfx* func_8012BFC4(Gfx* gfx); +Gfx* func_8012BFEC(Gfx* gfx); +Gfx* func_8012C014(Gfx* gfx); +void func_8012C058(GraphicsContext* gfxCtx); +void func_8012C080(GraphicsContext* gfxCtx); +void func_8012C0A8(GraphicsContext* gfxCtx); +void func_8012C0D0(GraphicsContext* gfxCtx); +void func_8012C0F8(GraphicsContext* gfxCtx); +void func_8012C120(GraphicsContext* gfxCtx); +void func_8012C148(GraphicsContext* gfxCtx); +void func_8012C170(GraphicsContext* gfxCtx); +Gfx* func_8012C198(Gfx* gfx); +void func_8012C1C0(GraphicsContext* gfxCtx); +Gfx* func_8012C1EC(Gfx* gfx); +void func_8012C214(GraphicsContext* gfxCtx); +void func_8012C240(GraphicsContext* gfxCtx); +void func_8012C268(struct GameState* gameState); +void func_8012C28C(GraphicsContext* gfxCtx); +Gfx* func_8012C2B4(Gfx* gfx); +void func_8012C2DC(GraphicsContext* gfxCtx); +Gfx* func_8012C304(Gfx* gfx); +void func_8012C32C(GraphicsContext* gfxCtx); +void func_8012C354(GraphicsContext* gfxCtx); +void func_8012C37C(GraphicsContext* gfxCtx); +Gfx* func_8012C3A4(Gfx* gfx); +Gfx* func_8012C3CC(Gfx* gfx); +void func_8012C3F4(GraphicsContext* gfxCtx); +void func_8012C420(GraphicsContext* gfxCtx); +void func_8012C448(GraphicsContext* gfxCtx); +void func_8012C470(GraphicsContext* gfxCtx); +Gfx* func_8012C498(Gfx* gfx); +void func_8012C4C0(GraphicsContext* gfxCtx); +void func_8012C4E8(GraphicsContext* gfxCtx); +void func_8012C510(GraphicsContext* gfxCtx); +void func_8012C538(GraphicsContext* gfxCtx); +void func_8012C560(GraphicsContext* gfxCtx); +void func_8012C588(GraphicsContext* gfxCtx); +void func_8012C5B0(GraphicsContext* gfxCtx); +void func_8012C5D8(GraphicsContext* gfxCtx); +Gfx* func_8012C600(Gfx* gfx); +void func_8012C628(GraphicsContext* gfxCtx); +void func_8012C654(GraphicsContext* gfxCtx); +void func_8012C680(Gfx** gfxp); +void func_8012C6AC(GraphicsContext* gfxCtx); +void func_8012C6D4(GraphicsContext* gfxCtx); +void func_8012C6FC(GraphicsContext* gfxCtx); +Gfx* func_8012C724(Gfx* gfx); +Gfx* func_8012C74C(Gfx* gfx); +Gfx* func_8012C774(Gfx* gfx); +Gfx* func_8012C7B8(Gfx* gfx); +Gfx* func_8012C7FC(Gfx* gfx); +Gfx* func_8012C840(Gfx* gfx); +Gfx* func_8012C868(Gfx* gfx); +void func_8012C8AC(GraphicsContext* gfxCtx); +void func_8012C8D4(GraphicsContext* gfxCtx); +void func_8012C8FC(GraphicsContext* gfxCtx); +void func_8012C924(GraphicsContext* gfxCtx); +void func_8012C94C(GraphicsContext* gfxCtx); +void func_8012C974(GraphicsContext* gfxCtx); +void func_8012C9BC(GraphicsContext* gfxCtx); +void func_8012C9E4(GraphicsContext* gfxCtx); +void func_8012CA0C(Gfx** gfxp); +void func_8012CA38(GraphicsContext* gfxCtx); +Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); +void func_8012CB04(Gfx** gfxp, u32 x, u32 y); +Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y); +Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height); +Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2); +Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a); +Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a); +Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s32 a); +void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b); +void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); +void func_8012D40C(f32* param_1, f32* param_2, s16* param_3); + +extern Gfx sSetupDL[73 * 6]; +extern Gfx gEmptyDL[]; + +#define WORK_DISP __gfxCtx->work.p +#define POLY_OPA_DISP __gfxCtx->polyOpa.p +#define POLY_XLU_DISP __gfxCtx->polyXlu.p +#define OVERLAY_DISP __gfxCtx->overlay.p +#define DEBUG_DISP __gfxCtx->debug.p + +// __gfxCtx shouldn't be used directly. +// Use the DISP macros defined above when writing to display buffers. +#define OPEN_DISPS(gfxCtx) \ + { \ + GraphicsContext* __gfxCtx = gfxCtx; \ + s32 __dispPad + +#define CLOSE_DISPS(gfxCtx) \ + (void)0; \ + } \ + (void)0 + +#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - ALIGN16(size)))) + +// Custom gbi macro +#define gDPSetTileCustom(pkt, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + { \ + gDPPipeSync(pkt); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, \ + masks, shifts); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, \ + cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ + } \ + (void)0 + +#endif diff --git a/include/macros.h b/include/macros.h index 70e07259f..9e74c40cd 100644 --- a/include/macros.h +++ b/include/macros.h @@ -77,26 +77,6 @@ #define ALIGN64(val) (((val) + 0x3F) & ~0x3F) #define ALIGN256(val) (((val) + 0xFF) & ~0xFF) -extern GraphicsContext* __gfxCtx; - -#define WORK_DISP __gfxCtx->work.p -#define POLY_OPA_DISP __gfxCtx->polyOpa.p -#define POLY_XLU_DISP __gfxCtx->polyXlu.p -#define OVERLAY_DISP __gfxCtx->overlay.p -#define DEBUG_DISP __gfxCtx->debug.p - -// __gfxCtx shouldn't be used directly. -// Use the DISP macros defined above when writing to display buffers. -#define OPEN_DISPS(gfxCtx) \ - { \ - GraphicsContext* __gfxCtx = gfxCtx; \ - s32 __dispPad - -#define CLOSE_DISPS(gfxCtx) \ - (void)0; \ - } \ - (void)0 - /** * `x` vertex x * `y` vertex y @@ -114,23 +94,6 @@ extern GraphicsContext* __gfxCtx; #define VTX_T(x, y, z, s, t, cr, cg, cb, a) \ { { x, y, z }, 0, { s, t }, { cr, cg, cb, a }, } -#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - ALIGN16(size)))) - -// Custom gbi macro -#define gDPSetTileCustom(pkt, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ - { \ - gDPPipeSync(pkt); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, \ - masks, shifts); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, \ - cms, masks, shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ - } \ - (void)0 - #define SQ(x) ((x) * (x)) #define ABS(x) ((x) >= 0 ? (x) : -(x)) #define ABS_ALT(x) ((x) < 0 ? -(x) : (x)) diff --git a/include/variables.h b/include/variables.h index c8b511a7e..4e3559077 100644 --- a/include/variables.h +++ b/include/variables.h @@ -561,9 +561,6 @@ extern struct_80124618 D_801C0490[]; extern Gfx gCullBackDList[]; extern Gfx gCullFrontDList[]; -extern Gfx sSetupDL[438]; -extern Gfx sFillSetupDL[12]; -extern Gfx gEmptyDL[1]; extern u32 gBitFlags[32]; extern u16 gEquipMasks[]; extern u16 gEquipNegMasks[]; diff --git a/include/z64.h b/include/z64.h index e9bdcfe62..6388bc120 100644 --- a/include/z64.h +++ b/include/z64.h @@ -25,6 +25,7 @@ #include "sfx.h" #include "message_data_static.h" +#include "gfx.h" #include "gfxprint.h" #include "sys_matrix.h" #include "tha.h" @@ -108,89 +109,6 @@ typedef struct { /* 0x8 */ void* end; } PolygonType2; // size = 0xC -typedef struct { - /* 0x000 */ Gfx taskStart[9]; - /* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl - /* 0x088 */ Gfx clearFrameBuffer[5]; // original name: clear_fb_dl - /* 0x0B0 */ Gfx setupBuffers[6]; // setup framebuffer and zbuffer - /* 0x0E0 */ Gfx unk_E0[12]; // unused - /* 0x140 */ Gfx syncSegments[17]; - /* 0x1C8 */ Gfx setScissor[2]; - /* 0x1D8 */ Gfx unk_1D8[25]; // unused - /* 0x2A0 */ Gfx disps[5]; - /* 0x2C8 */ Gfx clearFillRect[3]; // fillrect for clearing buffers - /* 0x2E0 */ Gfx fillRect[3]; // fillrect for general purpose - /* 0x2F8 */ Gfx debugDisp[1]; -} GfxMasterList; // size = 0x300 - -#define GFXPOOL_HEAD_MAGIC 0x1234 -#define GFXPOOL_TAIL_MAGIC 0x5678 - -typedef struct { - /* 0x00000 */ u16 headMagic; // 1234 - /* 0x00008 */ GfxMasterList master; - /* 0x00308 */ Gfx polyXluBuffer[2048]; - /* 0x04308 */ Gfx overlayBuffer[1024]; - /* 0x06308 */ Gfx workBuffer[64]; - /* 0x06508 */ Gfx debugBuffer[64]; - /* 0x06708 */ Gfx polyOpaBuffer[13184]; - /* 0x20308 */ u16 tailMagic; // 5678 -} GfxPool; // size = 0x20310 - -typedef struct GraphicsContext { - /* 0x000 */ Gfx* polyOpaBuffer; // Pointer to "Zelda 0" - /* 0x004 */ Gfx* polyXluBuffer; // Pointer to "Zelda 1" - /* 0x008 */ char unk_8[0x8]; // Unused, could this be pointers to "Zelda 2" / "Zelda 3" - /* 0x010 */ Gfx* overlayBuffer; // Pointer to "Zelda 4" - /* 0x014 */ u32 unk_14; - /* 0x018 */ char unk_18[0x20]; - /* 0x038 */ OSMesg msgBuff[8]; - /* 0x058 */ OSMesgQueue* schedMsgQ; - /* 0x05C */ OSMesgQueue queue; - /* 0x074 */ char unk_74[0x04]; - /* 0x078 */ OSScTask task; - /* 0x0E0 */ char unk_E0[0xD0]; - /* 0x1B0 */ Gfx* workBuffer; - /* 0x1B4 */ TwoHeadGfxArena work; - /* 0x1C4 */ Gfx* debugBuffer; - /* 0x1C8 */ TwoHeadGfxArena debug; - /* 0x1D8 */ char unk_1D8[0xAC]; - /* 0x284 */ OSViMode* viMode; - /* 0x288 */ void* zbuffer; - /* 0x28C */ char unk_28C[0x1C]; - /* 0x2A8 */ TwoHeadGfxArena overlay; // "Zelda 4" - /* 0x2B8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" - /* 0x2C8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" - /* 0x2D8 */ u32 gfxPoolIdx; - /* 0x2DC */ u16* curFrameBuffer; - /* 0x2E0 */ char unk_2E0[0x4]; - /* 0x2E4 */ u32 viConfigFeatures; - /* 0x2E8 */ char unk_2E8[0x2]; - /* 0x2EA */ u8 updateViMode; - /* 0x2EB */ u8 framebufferIndex; - /* 0x2EC */ void (*callback)(struct GraphicsContext*, u32); - /* 0x2F0 */ u32 callbackArg; - /* 0x2F4 */ f32 xScale; - /* 0x2F8 */ f32 yScale; - /* 0x2FC */ GfxMasterList* masterList; -} GraphicsContext; // size = 0x300 - -typedef enum IRQ_MSG_TYPE { - IRQ_VERTICAL_RETRACE_MSG = 0x1, - IRQ_PRENMI_2_MSG = 0x3, - IRQ_PRENMI_1_MSG = 0x4 -} IRQ_MSG_TYPE; - -typedef enum IRQ_TYPE { - IRQ_VERTICAL_RETRACE = 0x29A, - IRQ_SP = 0x29B, - IRQ_DP = 0x29C, - IRQ_PRENMI_1 = 0x29D, - IRQ_PRENMI_2 = 0x29F, - IRQ_PRENMI_3 = 0x2A0, - IRQ_PRENMI_4 = 0x2A1 -} IRQ_TYPE; - typedef struct { /* 0x00 */ u32 resetting; /* 0x04 */ u32 resetCount; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index b4bb6ea7d..ab972159c 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -897,8 +897,8 @@ void func_8012C240(GraphicsContext* gfxCtx) { gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]); } -void func_8012C268(PlayState* play) { - func_8012C28C(play->state.gfxCtx); +void func_8012C268(GameState* gameState) { + func_8012C28C(gameState->gfxCtx); } void func_8012C28C(GraphicsContext* gfxCtx) { diff --git a/src/code/z_room.c b/src/code/z_room.c index da221ccd4..9fb21dfa2 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -18,7 +18,7 @@ void Room_DrawNormal(PlayState* play, Room* room, u32 flags) { if (flags & ROOM_DRAW_OPA) { func_800BCBF4(&sZeroVec, play); gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); - func_8012C268(play); + func_8012C268(&play->state); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } @@ -85,7 +85,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { if (play->roomCtx.unk74 != NULL) { gSPSegment(POLY_OPA_DISP++, 0x06, play->roomCtx.unk74); } - func_8012C268(play); + func_8012C268(&play->state); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } 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 83d3ce8e1..cedf00861 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -1257,7 +1257,7 @@ void EnTest3_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C268(play); + func_8012C268(&play->state); if (this->player.invincibilityTimer > 0) { s32 temp2; // Must exist for stack order. Could hold the result of CLAMP instead. From 7a5cbf2e208b378848cbdfff6adfb825a92284dd Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sat, 27 May 2023 18:49:19 -0700 Subject: [PATCH 23/51] Namefixer Fixes (#1252) * Fixes * gSaveContext.save.playerData.doubleMagic --- .../kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c | 2 +- tools/namefixer.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 3d7e08221..d5d0368dd 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -605,7 +605,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202); // Magic - //! @bug should be gSaveContext.save.saveInfo.playerData.doubleMagic + //! @bug should be gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 75, 202); // Lottery diff --git a/tools/namefixer.py b/tools/namefixer.py index a3fbddec9..a03cc06cf 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -18,7 +18,7 @@ simpleReplace = { wordReplace = { # Functions "Actor_GetSwitchFlag": "Flags_GetSwitch", - "Math_FAtan2F": "Math_Atan2S_XY", + # "Math_FAtan2F": "Math_Atan2S_XY", // All old Math_FAtan2F should be renamed, so func_80086B30 can be renamed to Math_FAtan2F "Math_Acot2F": "Math_Atan2F_XY", "atan_flip": "Math_Atan2F_XY", "atans": "Math_Atan2S", @@ -830,9 +830,8 @@ wordReplace = { "gSaveContext.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags", "gSaveContext.bomberCode": "gSaveContext.save.saveInfo.bomberCode", "gSaveContext.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount", - "gSaveContext.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", - "gSaveContext.save.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", - "gSaveContext.save.saveInfo.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", + "gSaveContext.cutscene": "gSaveContext.save.cutsceneIndex", + "gSaveContext.save.cutscene": "gSaveContext.save.cutsceneIndex", "gSaveContext.health": "gSaveContext.save.saveInfo.playerData.health", "gSaveContext.equips": "gSaveContext.save.saveInfo.equips", "gSaveContext.unk_1016": "gSaveContext.jinxTimer", @@ -840,7 +839,7 @@ wordReplace = { "gSaveContext.equips.buttonItems": "gSaveContext.save.equips.buttonItems", "gSaveContext.unk_48C8": "gSaveContext.dungeonIndex", "gSaveContext.save.saveInfo.playerData.magicAcquired": "gSaveContext.save.saveInfo.playerData.isMagicAcquired", - "gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired", + "gSaveContext.save.playerData.doubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired", "gSaveContext.unk_3F28": "gSaveContext.magicState", "gSaveContext.unk_3F30": "gSaveContext.magicFillTarget", "gSaveContext.unk_3F2C": "gSaveContext.magicFlag", From 20f7e2199ac4c53095f3bc60ec30958f1bfb5e41 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 28 May 2023 12:19:53 -0600 Subject: [PATCH 24/51] ovl_Bg_Tobira01 OK and documented (#1247) * Decompiled source of tobira01 * Documented and formatted in prep for merge request * Added spacing, renamed unused back to what it was, added definitions, changed 1.6666 to division * Ran weekeventreg script, added additional spaces throughout the file, removed the macros for 0 and 60, updated some missed this casts, renamed spot11 out names * Converted gSaveContext calls over to CLEAR_WEEKEVENTREG calls from review feedback * Reformatted some files * More review feedback * Removed _tex --- assets/xml/objects/object_spot11_obj.xml | 18 ++--- spec | 3 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 3 +- .../actors/ovl_Bg_Tobira01/z_bg_tobira01.c | 79 +++++++++++++++++-- .../actors/ovl_Bg_Tobira01/z_bg_tobira01.h | 11 ++- undefined_syms.txt | 4 - 6 files changed, 92 insertions(+), 26 deletions(-) diff --git a/assets/xml/objects/object_spot11_obj.xml b/assets/xml/objects/object_spot11_obj.xml index c049bb337..58d146203 100644 --- a/assets/xml/objects/object_spot11_obj.xml +++ b/assets/xml/objects/object_spot11_obj.xml @@ -1,13 +1,13 @@  - - - - - - - - - + + + + + + + + + diff --git a/spec b/spec index 4b8481a73..81f25e374 100644 --- a/spec +++ b/spec @@ -3589,8 +3589,7 @@ beginseg name "ovl_Bg_Tobira01" compress include "build/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.o" - include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.data.o" - include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.reloc.o" + include "build/src/overlays/actors/ovl_Bg_Tobira01/ovl_Bg_Tobira01_reloc.o" endseg beginseg 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 b2e59a51b..be9413567 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -84,8 +84,7 @@ BgBreakwallStruct D_808B8140[] = { func_808B77D0, NULL }, { OBJECT_IKNINSIDE_OBJ, NULL, object_ikninside_obj_DL_00AEC0, object_ikninside_obj_Matanimheader_00BCB8, NULL, func_808B751C, func_808B7A10, func_808B7D34 }, - { OBJECT_SPOT11_OBJ, object_spot11_obj_DL_0013F0, NULL, NULL, &object_spot11_obj_Colheader_001EB8, func_808B736C, - func_808B77D0, NULL }, + { OBJECT_SPOT11_OBJ, gWoodStepDL, NULL, NULL, &gWoodStepCol, func_808B736C, func_808B77D0, NULL }, }; static InitChainEntry sInitChain[] = { diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index 17722bda2..2eb95f6bb 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -16,7 +16,6 @@ void BgTobira01_Destroy(Actor* thisx, PlayState* play); void BgTobira01_Update(Actor* thisx, PlayState* play); void BgTobira01_Draw(Actor* thisx, PlayState* play); -/* const ActorInit Bg_Tobira01_InitVars = { ACTOR_BG_TOBIRA01, ACTORCAT_PROP, @@ -28,14 +27,80 @@ const ActorInit Bg_Tobira01_InitVars = { (ActorFunc)BgTobira01_Update, (ActorFunc)BgTobira01_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/func_80B12430.s") +void BgTobira01_Action(BgTobira01* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s16 csId = this->dyna.actor.csId; + s16 prevPosYTick; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Init.s") + if (this->cutsceneRequested) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); + SET_WEEKEVENTREG(WEEKEVENTREG_88_40); + this->cutsceneRequested = false; + } else { + CutsceneManager_Queue(csId); + } + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (this->posYTick == 0) && + (play->actorCtx.playerImpact.timer != 0) && + (play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND) && + (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) { + this->cutsceneRequested = true; + this->unk16C = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Destroy.s") + prevPosYTick = this->posYTick; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) { + this->posYTick++; + } else { + this->posYTick--; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Update.s") + this->posYTick = CLAMP(this->posYTick, 0, 60); + if (prevPosYTick != this->posYTick) { + Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG); + this->dyna.actor.world.pos.y = this->posY = (this->posYTick * (5.0f / 3.0f)) + this->dyna.actor.home.pos.y; + this->timer = 180; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Draw.s") + if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && + (DECR(this->timer) == 0)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + } +} + +void BgTobira01_Init(Actor* thisx, PlayState* play) { + BgTobira01* this = THIS; + + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); + DynaPolyActor_LoadMesh(play, &this->dyna, &gGoronDoorCol); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + Actor_SetScale(&this->dyna.actor, 1.0f); + this->timer = gSaveContext.save.isNight; + this->posYTick = 0; + this->actionFunc = BgTobira01_Action; +} + +void BgTobira01_Destroy(Actor* thisx, PlayState* play) { + BgTobira01* this = THIS; + + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); +} + +void BgTobira01_Update(Actor* thisx, PlayState* play) { + BgTobira01* this = THIS; + + this->actionFunc(this, play); +} + +void BgTobira01_Draw(Actor* thisx, PlayState* play) { + OPEN_DISPS(play->state.gfxCtx); + + func_8012C28C(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++, gGoronDoorDL); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h index 9ddd0233d..b53c2302e 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h @@ -5,9 +5,16 @@ struct BgTobira01; +typedef void (*BgTobira01ActionFunc)(struct BgTobira01*, PlayState*); + typedef struct BgTobira01 { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x2C]; + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ BgTobira01ActionFunc actionFunc; + /* 0x160 */ s16 posYTick; + /* 0x162 */ s16 timer; + /* 0x164 */ f32 posY; + /* 0x168 */ s32 cutsceneRequested; + /* 0x16C */ s32 unk16C; } BgTobira01; // size = 0x170 #endif // Z_BG_TOBIRA01_H diff --git a/undefined_syms.txt b/undefined_syms.txt index 1e09ceaab..2187673fc 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -586,10 +586,6 @@ D_060005F8 = 0x060005F8; D_06000A20 = 0x06000A20; D_06000040 = 0x06000040; -/* ovl_Bg_Tobira01 */ -D_060011C0 = 0x060011C0; -D_06000088 = 0x06000088; - // ovl_Boss_01 D_06000C44 = 0x06000C44; From efc9df3f56046bf11097715204aee96d433a952e Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 28 May 2023 17:41:37 -0400 Subject: [PATCH 25/51] `ovl_player_actor`: Dawn of a new PR (#1227) * Rename Player_UpdateBottleHeld * Match func_808497A0 * func_80852290 NON_MATCHING * Match func_8083B3B4 * Params cleanup * Match func_8083FBC4 * sfxId cleanups and others * Fix declaration of functions from D_8085D990 * Change D_8085BE84 to be a 2D array * ARRAY_COUNT_2D * Match func_8085ADA0 * func_808426F0 nonmatching * Match func_80852290 * Match func_808426F0 Co-authored-by: engineer124 * Add notes to Player_SetDoAction * Name putAwayCountdown * rebase * Match func_80856918 * format * func_8084933C nonmatching small amount of boomerang documentation * Progress on moving data near where it is used * finish moving data * format * cleanup up remaining data * more match * Some minor cleanups * PlayerCsMode enum * func_80851F18 nonmatching * Fix unk_B10 * Purge ExchangeItemID enum * Rename `targetActor` to `talkActor` * Name `targetedActor` * PLAYER_LIMB_BUF_SIZE Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Change SkelAnime Player functions to take a void pointer for the corresponding buffers * Use PlayerAnimationFrame on Player_DrawImpl * Match func_8082F1AC * Match func_8083D23C * cleanup * Match and clean up func_808373F8 * Match and document func_8083A98C * PLAYER_PARAMS macro and PlayerInitMode enum * Preliminary names for InitMode functions * Match func_8083C8E8 * remove redundant externs * Match func_8084933C * cleanup func_8084933C * Access D_8085BE84 directly instead of using a macro * Match func_8084AC84 * Fix boomearng typo * OK boomerang * cleanup func_8083D168 * untargetedRotY * this->unk_14E = ABS_ALT(var_v1); * GIFIELD macros * sort of a match * Match func_8084C16C Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Use the same trick to match func_808573A4 * Add note on Deku spinning * Match func_8084D18C * Match func_80850D68 * Improve func_80832660 * Match func_80854EFC Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Rename unk_B2A to getItemDrawId * Some cleanup * fix merge issues * format * minor anim docs * Match func_808553F4 * Cleanup func_808553F4 * func_8083D860 nonmatching * Match func_8083D860 * Defake func_80859BA8 * () * Add notes to PlayerAnimGroup enum * underwaterTimer Co-authored-by: engineer124 * some stateFlags cleaning * more stateFlags cleaning * some notes and minor cleanups * more general cleanups * Slightly less fake func_80832CAC * Document some melee weapon damage stuff * Mark lunge storage * Note PCS patch * match * add notes to bss * yeet extra indentation * add reloc as nonmatching to spec * floorSfxOffset * Player_GetFloorSfx * Player_GetFloorSfxByAge * Comments for AnimSfx dunctions * Name some AnimSfx functions * Name AnimSfx stuff * Some PlayerAgeProperties notes * use animflag defines * Player_SpawnExplosive * fix enum and some other minor fixes * Bit more misc. cleanup * Use OoT's version of func_808333CC * Note on quickspin buffer * Final nonmatching, func_80851F18 Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> * RIP player.c * Name Player_StopHorizontalMovement * misc fixes * Actor_DeactivateLens * fixes * typos and tweaks * minor stuff * add names as comments on the animgoup array * Correct some function names and data type * add anim commets to ageproperties * some notes * De-fake func_80840F90 * Defake & clean up func_8085ADA0 * Improve func_80859BA8 * Enums in func_80852B28 * Name some secret-related things * 3 small things * stuff * Player_TalkWithPlayer * SurfaceType_GetFloorType * SurfaceType_GetWallFlags * and more bgcheck stuff * more bss naming * sPlayerControlInput * clean up func_80836F10 a bit * name the parameters of func_80835BF8 * door stuff * remove NON_MATCHING * remove D_8085D2B0 padding * Name some Player_Cutscene_ functions * various cleanups * format * remainingHopsCounter * some cleanups on the struct * Actor_RequestRumble * this->exchangeItemId = PLAYER_AP_NONE; * fix merge stuff * format * PlayerUnkAA5 * Name two cylinder-related functions * BSS * Add MagicConsume's enum, treat lensActive as bool * Update func_808332A0 based on better info * fix merge * fix merge issues * remove redundant comments * Name Player_AddQuake * ANIM_FLAG_UPDATE*_*Y * Format * AT_TYPE_ENEMY * fix merge issues * format * fix uintptr_ts * Rename * Name leftHandMf * fix merge issues * format * exchangeItemId <= PLAYER_IA_MINUS1 * getItemDrawIdPlusOne * currentActorCsIndex * <= PLAYER_IA_MINUS1 * fix merge issues * format * namefixer and bss * fix build * bombs parameters cleanup * bss * Fix building * fix building * Fix building * Fix building and cleanups * Pre-PR cleanup * really... * format * review * stateFlag Mistakes * 268 * 0.1f * z64door.h * fix cutscene stuff * bss * Update include/z64player.h Co-authored-by: EllipticEllipsis * Update include/z64player.h Co-authored-by: EllipticEllipsis * reiew * PR Review * collision * review * format and a few stuff i missed * EnBomExplosiveType * weekeventregconvert and eventinfconvert * more review * review * bss * review * re format sGetItemTable * Entangle PlayerMask and PlayerItemAction * a few extra cases i missed * bss * review * EnArrow stuff * ARROW_MAGIC_DEKU_BUBBLE * minor format * merge * fix bss * review * !ARROW_IS_ARROW * review * bool cleanup * fix merge * review * Player_StopCutscene * Player_RequestQuake * quakeIndex * Player_RequestQuakeAndRumble * knobDoor and slidingDoor * bss * fix * review * dog and float --------- Co-authored-by: Elliptic Ellipsis Co-authored-by: engineer124 Co-authored-by: petrie911 Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> --- Makefile | 2 +- diff_settings.py | 0 include/functions.h | 5 +- include/macros.h | 2 + include/z64.h | 13 +- include/z64actor.h | 5 + include/z64animation.h | 7 +- include/z64door.h | 24 + include/z64effect.h | 8 +- include/z64item.h | 64 +- include/z64player.h | 212 +- include/z64save.h | 2 +- spec | 4 +- src/boot_O2_g3/boot_main.c | 1 + src/code/z_actor.c | 75 +- src/code/z_camera.c | 10 +- src/code/z_eff_blure.c | 84 +- src/code/z_en_hy_code.c | 16 +- src/code/z_play.c | 4 +- src/code/z_player_lib.c | 58 +- src/code/z_skelanime.c | 2 +- src/code/z_sub_s.c | 4 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 1 + .../actors/ovl_Arms_Hook/z_arms_hook.h | 2 +- .../z_bg_dblue_waterfall.c | 4 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 59 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.h | 6 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 8 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 188 +- .../actors/ovl_Door_Shutter/z_door_shutter.h | 9 +- .../actors/ovl_Door_Spiral/z_door_spiral.h | 3 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 4 +- .../z_eff_kamejima_wave.c | 1 - src/overlays/actors/ovl_En_Am/z_en_am.c | 5 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 109 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.h | 35 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 8 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 53 +- src/overlays/actors/ovl_En_Boom/z_en_boom.h | 7 +- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 3 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 5 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 3 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 161 +- src/overlays/actors/ovl_En_Door/z_en_door.h | 25 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 61 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.h | 7 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 3 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 10 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 38 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 6 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 4 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 3 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 4 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 12 - src/overlays/actors/ovl_En_Horse/z_en_horse.h | 16 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 6 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 10 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 10 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 11 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 36 +- .../actors/ovl_En_Maruta/z_en_maruta.c | 10 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 1 + .../actors/ovl_En_Peehat/z_en_peehat.c | 5 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 6 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 3 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 5 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 4 +- .../actors/ovl_En_Stream/z_en_stream.c | 6 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 18 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 7 +- src/overlays/actors/ovl_En_Toto/z_en_toto.h | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 5 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 6 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 4 +- .../actors/ovl_player_actor/z_player.c | 21475 +++++++++++++++- .../z_eff_ss_g_splash.c | 20 +- .../z_eff_ss_g_splash.h | 6 + tools/disasm/disasm.py | 4 +- tools/disasm/functions.txt | 140 +- tools/disasm/variables.txt | 185 +- tools/gitable.py | 1171 + tools/namefixer.py | 5 + undefined_syms.txt | 12 - 87 files changed, 22423 insertions(+), 2223 deletions(-) mode change 100755 => 100644 diff_settings.py create mode 100644 include/z64door.h create mode 100755 tools/gitable.py diff --git a/Makefile b/Makefile index 892d0355b..8782c02ad 100644 --- a/Makefile +++ b/Makefile @@ -102,7 +102,7 @@ endif # Check code syntax with host compiler ifneq ($(RUN_CC_CHECK),0) - CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-label + CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-label -Wno-sign-compare -Wno-tautological-compare CC_CHECK := gcc -fno-builtin -fsyntax-only -funsigned-char -fdiagnostics-color -std=gnu89 -D _LANGUAGE_C -D NON_MATCHING $(IINC) -nostdinc $(CHECK_WARNINGS) ifneq ($(WERROR), 0) CC_CHECK += -Werror diff --git a/diff_settings.py b/diff_settings.py old mode 100755 new mode 100644 diff --git a/include/functions.h b/include/functions.h index 292c5e210..bcc79f9e5 100644 --- a/include/functions.h +++ b/include/functions.h @@ -726,8 +726,9 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params); void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx); void Enemy_StartFinishingBlow(PlayState* play, Actor* actor); -s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3); -s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3); +s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3); +s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3); +s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3); void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList); void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 radius, s32 countMinusOne, f32 randAccelWeight, s16 scale, s16 scaleStep, u8 useLighting); void func_800BBFB0(PlayState* play, Vec3f* position, f32 arg2, s32 arg3, s16 arg4, s16 scaleStep, u8 arg6); diff --git a/include/macros.h b/include/macros.h index 9e74c40cd..f2bcb07dd 100644 --- a/include/macros.h +++ b/include/macros.h @@ -17,6 +17,8 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) +#define ARRAY_COUNT_2D(arr) (ARRAY_COUNT(arr) * ARRAY_COUNT(arr[0])) + // TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address rather than add/sub 0x80000000 #define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) + RDRAM_CACHED) #define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - RDRAM_CACHED) diff --git a/include/z64.h b/include/z64.h index 6388bc120..05aad655e 100644 --- a/include/z64.h +++ b/include/z64.h @@ -82,11 +82,12 @@ #define Z_PRIORITY_IRQMGR 18 typedef enum { - /* 0 */ EQUIP_SLOT_B, - /* 1 */ EQUIP_SLOT_C_LEFT, - /* 2 */ EQUIP_SLOT_C_DOWN, - /* 3 */ EQUIP_SLOT_C_RIGHT, - /* 4 */ EQUIP_SLOT_A + /* -1 */ EQUIP_SLOT_NONE = -1, + /* 0 */ EQUIP_SLOT_B, + /* 1 */ EQUIP_SLOT_C_LEFT, + /* 2 */ EQUIP_SLOT_C_DOWN, + /* 3 */ EQUIP_SLOT_C_RIGHT, + /* 4 */ EQUIP_SLOT_A } EquipSlot; typedef struct { @@ -517,7 +518,7 @@ typedef struct PlayState { /* 0x18770 */ void (*unk_18770)(struct PlayState* play, Player* player); /* 0x18774 */ s32 (*startPlayerFishing)(struct PlayState* play); /* 0x18778 */ s32 (*grabPlayer)(struct PlayState* play, Player* player); - /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, s32 mode); + /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, PlayerCsMode csMode); /* 0x18780 */ void (*func_18780)(Player* player, struct PlayState* play); /* 0x18784 */ s32 (*damagePlayer)(struct PlayState* play, s32 damage); /* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor); diff --git a/include/z64actor.h b/include/z64actor.h index 3a646fe8f..f58716401 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -739,6 +739,11 @@ typedef struct NpcInteractInfo { /* 0x24 */ UNK_TYPE1 unk_24[0x4]; } NpcInteractInfo; // size = 0x28 +typedef struct BlinkInfo { + /* 0x0 */ s16 eyeTexIndex; + /* 0x2 */ s16 blinkTimer; +} BlinkInfo; // size = 0x4 + extern TargetRangeParams gTargetRanges[]; extern s16 D_801AED48[8]; extern Gfx D_801AEF88[]; diff --git a/include/z64animation.h b/include/z64animation.h index 44c35312d..316dfe341 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -14,9 +14,13 @@ struct PlayerAnimationFrame; #define LIMB_DONE 0xFF #define ANIM_FLAG_1 (1 << 0) -#define ANIM_FLAG_UPDATEY (1 << 1) +#define ANIM_FLAG_UPDATE_Y (1 << 1) #define ANIM_FLAG_4 (1 << 2) +#define ANIM_FLAG_8 (1 << 3) #define ANIM_FLAG_NOMOVE (1 << 4) +#define ANIM_FLAG_80 (1 << 7) +#define ANIM_FLAG_100 (1 << 8) +#define ANIM_FLAG_200 (1 << 9) typedef enum AnimationMode { /* 0 */ ANIMMODE_LOOP, @@ -326,6 +330,7 @@ void AnimationContext_Update(struct PlayState* play, AnimationContext* animation void SkelAnime_InitPlayer(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount); void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime); s32 PlayerAnimation_Update(struct PlayState* play, SkelAnime* skelAnime); +void PlayerAnimation_AnimateFrame(struct PlayState* play, SkelAnime* skelAnime); void Animation_SetMorph(struct PlayState* play, SkelAnime* skelAnime, f32 morphFrames); void PlayerAnimation_Change(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); void PlayerAnimation_PlayOnce(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation); diff --git a/include/z64door.h b/include/z64door.h new file mode 100644 index 000000000..26653c308 --- /dev/null +++ b/include/z64door.h @@ -0,0 +1,24 @@ +#ifndef Z64_DOOR_H +#define Z64_DOOR_H + +#include "ultra64.h" +#include "z64actor.h" + +typedef struct KnobDoorActor { + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ SkelAnime skelAnime; + /* 0x1A0 */ u8 animIndex; + /* 0x1A1 */ u8 playOpenAnim; + /* 0x1A2 */ s8 requiredObjBankIndex; + /* 0x1A3 */ s8 dlIndex; +} KnobDoorActor; // size = 0x1A4 + +typedef struct SlidingDoorActor { + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ s16 unk_15C; + /* 0x15E */ s16 unk_15E; +} SlidingDoorActor; // size = 0x160 + +#define DOOR_GET_TRANSITION_ID(thisx) ((u16)(thisx)->params >> 10) + +#endif diff --git a/include/z64effect.h b/include/z64effect.h index d6ab8b3b5..71ad80510 100644 --- a/include/z64effect.h +++ b/include/z64effect.h @@ -118,10 +118,10 @@ typedef struct { /* 0x188 */ u16 flags; /* 0x18A */ s16 addAngleChange; /* 0x18C */ s16 addAngle; - /* 0x18E */ Color_RGBA8 p1StartColor; - /* 0x192 */ Color_RGBA8 p2StartColor; - /* 0x196 */ Color_RGBA8 p1EndColor; - /* 0x19A */ Color_RGBA8 p2EndColor; + /* 0x18E */ u8 p1StartColor[4]; + /* 0x192 */ u8 p2StartColor[4]; + /* 0x196 */ u8 p1EndColor[4]; + /* 0x19A */ u8 p2EndColor[4]; /* 0x19E */ u8 numElements; // "now_edge_num" /* 0x19F */ u8 elemDuration; /* 0x1A0 */ u8 unkFlag; diff --git a/include/z64item.h b/include/z64item.h index d1d36ebba..345a22897 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -332,12 +332,16 @@ typedef enum GetItemId { /* 0x08 */ GI_WALLET_ADULT, /* 0x09 */ GI_WALLET_GIANT, /* 0x0A */ GI_RECOVERY_HEART, - /* 0x0C */ GI_HEART_PIECE = 0x0C, + /* 0x0B */ GI_0B, + /* 0x0C */ GI_HEART_PIECE, /* 0x0D */ GI_HEART_CONTAINER, /* 0x0E */ GI_MAGIC_SMALL, /* 0x0F */ GI_MAGIC_LARGE, - /* 0x11 */ GI_STRAY_FAIRY = 0x11, - /* 0x14 */ GI_BOMBS_1 = 0x14, + /* 0x10 */ GI_10, + /* 0x11 */ GI_STRAY_FAIRY, + /* 0x12 */ GI_12, + /* 0x13 */ GI_13, + /* 0x14 */ GI_BOMBS_1, /* 0x15 */ GI_BOMBS_5, /* 0x16 */ GI_BOMBS_10, /* 0x17 */ GI_BOMBS_20, @@ -360,8 +364,14 @@ typedef enum GetItemId { /* 0x28 */ GI_NUTS_1, /* 0x29 */ GI_NUTS_5, /* 0x2A */ GI_NUTS_10, - /* 0x2E */ GI_BOMBCHUS_20 = 0x2E, - /* 0x32 */ GI_SHIELD_HERO = 0x32, + /* 0x2B */ GI_2B, + /* 0x2C */ GI_2C, + /* 0x2D */ GI_2D, + /* 0x2E */ GI_BOMBCHUS_20, + /* 0x2F */ GI_2F, + /* 0x30 */ GI_30, + /* 0x31 */ GI_31, + /* 0x32 */ GI_SHIELD_HERO, /* 0x33 */ GI_SHIELD_MIRROR, /* 0x34 */ GI_POWDER_KEG, /* 0x35 */ GI_MAGIC_BEANS, @@ -379,10 +389,24 @@ typedef enum GetItemId { /* 0x41 */ GI_HOOKSHOT, /* 0x42 */ GI_LENS, /* 0x43 */ GI_PICTO_BOX, - /* 0x4C */ GI_OCARINA = 0x4C, - /* 0x50 */ GI_BOMBERS_NOTEBOOK = 0x50, - /* 0x52 */ GI_SKULL_TOKEN = 0x52, - /* 0x55 */ GI_REMAINS_ODOLWA = 0x55, + /* 0x44 */ GI_44, + /* 0x45 */ GI_45, + /* 0x46 */ GI_46, + /* 0x47 */ GI_47, + /* 0x48 */ GI_48, + /* 0x49 */ GI_49, + /* 0x4A */ GI_4A, + /* 0x4B */ GI_4B, + /* 0x4C */ GI_OCARINA, + /* 0x4D */ GI_4D, + /* 0x4E */ GI_4E, + /* 0x4F */ GI_4F, + /* 0x50 */ GI_BOMBERS_NOTEBOOK, + /* 0x51 */ GI_51, + /* 0x52 */ GI_SKULL_TOKEN, + /* 0x53 */ GI_53, + /* 0x54 */ GI_54, + /* 0x55 */ GI_REMAINS_ODOLWA, /* 0x56 */ GI_REMAINS_GOHT, /* 0x57 */ GI_REMAINS_GYORG, /* 0x58 */ GI_REMAINS_TWINMOLD, @@ -410,9 +434,14 @@ typedef enum GetItemId { /* 0x6E */ GI_SEAHORSE, /* 0x6F */ GI_CHATEAU_BOTTLE, /* 0x70 */ GI_HYLIAN_LOACH, - /* 0x75 */ GI_75 = 0x75, + /* 0x71 */ GI_71, + /* 0x72 */ GI_72, + /* 0x73 */ GI_73, + /* 0x74 */ GI_74, + /* 0x75 */ GI_75, /* 0x76 */ GI_ICE_TRAP, - /* 0x78 */ GI_MASK_DEKU = 0x78, + /* 0x77 */ GI_77, + /* 0x78 */ GI_MASK_DEKU, /* 0x79 */ GI_MASK_GORON, /* 0x7A */ GI_MASK_ZORA, /* 0x7B */ GI_MASK_FIERCE_DEITY, @@ -436,7 +465,8 @@ typedef enum GetItemId { /* 0x8D */ GI_MASK_BLAST, /* 0x8E */ GI_MASK_SCENTS, /* 0x8F */ GI_MASK_KAFEIS_MASK, - /* 0x91 */ GI_CHATEAU = 0x91, + /* 0x90 */ GI_90, + /* 0x91 */ GI_CHATEAU, /* 0x92 */ GI_MILK, /* 0x93 */ GI_GOLD_DUST_2, /* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel @@ -463,7 +493,15 @@ typedef enum GetItemId { /* 0xA9 */ GI_BOTTLE_STOLEN, // buy back stolen bottle /* 0xAA */ GI_LETTER_TO_KAFEI, /* 0xAB */ GI_PENDANT_OF_MEMORIES, - /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN = 0xB4, + /* 0xAC */ GI_AC, + /* 0xAD */ GI_AD, + /* 0xAE */ GI_AE, + /* 0xAF */ GI_AF, + /* 0xB0 */ GI_B0, + /* 0xB1 */ GI_B1, + /* 0xB2 */ GI_B2, + /* 0xB3 */ GI_B3, + /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN, /* 0xB5 */ GI_TINGLE_MAP_WOODFALL, /* 0xB6 */ GI_TINGLE_MAP_SNOWHEAD, /* 0xB7 */ GI_TINGLE_MAP_ROMANI_RANCH, diff --git a/include/z64player.h b/include/z64player.h index 3bcc53fde..d9c80384f 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -43,35 +43,6 @@ typedef enum PlayerTransformation { /* 5 */ PLAYER_FORM_MAX } PlayerTransformation; -typedef enum PlayerMask { - /* 0x00 */ PLAYER_MASK_NONE, - /* 0x01 */ PLAYER_MASK_TRUTH, - /* 0x02 */ PLAYER_MASK_KAFEIS_MASK, - /* 0x03 */ PLAYER_MASK_ALL_NIGHT, - /* 0x04 */ PLAYER_MASK_BUNNY, - /* 0x05 */ PLAYER_MASK_KEATON, - /* 0x06 */ PLAYER_MASK_GARO, - /* 0x07 */ PLAYER_MASK_ROMANI, - /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER, - /* 0x09 */ PLAYER_MASK_POSTMAN, - /* 0x0A */ PLAYER_MASK_COUPLE, - /* 0x0B */ PLAYER_MASK_GREAT_FAIRY, - /* 0x0C */ PLAYER_MASK_GIBDO, - /* 0x0D */ PLAYER_MASK_DON_GERO, - /* 0x0E */ PLAYER_MASK_KAMARO, - /* 0x0F */ PLAYER_MASK_CAPTAIN, - /* 0x10 */ PLAYER_MASK_STONE, - /* 0x11 */ PLAYER_MASK_BREMEN, - /* 0x12 */ PLAYER_MASK_BLAST, - /* 0x13 */ PLAYER_MASK_SCENTS, - /* 0x14 */ PLAYER_MASK_GIANT, - /* 0x15 */ PLAYER_MASK_FIERCE_DEITY, - /* 0x16 */ PLAYER_MASK_GORON, - /* 0x17 */ PLAYER_MASK_ZORA, - /* 0x18 */ PLAYER_MASK_DEKU, - /* 0x19 */ PLAYER_MASK_MAX -} PlayerMask; - typedef enum { /* 0 */ PLAYER_ENV_HAZARD_NONE, /* 1 */ PLAYER_ENV_HAZARD_HOTROOM, @@ -89,7 +60,7 @@ typedef enum PlayerItemAction { /* 0x03 */ PLAYER_IA_SWORD_KOKIRI = PLAYER_IA_SWORD_MIN, /* 0x04 */ PLAYER_IA_SWORD_RAZOR, /* 0x05 */ PLAYER_IA_SWORD_GILDED, - /* 0x06 */ PLAYER_IA_SWORD_GREAT_FAIRY, + /* 0x06 */ PLAYER_IA_SWORD_TWO_HANDED, /* 0x07 */ PLAYER_IA_STICK, /* 0x08 */ PLAYER_IA_ZORA_FINS, /* 0x09 */ PLAYER_IA_BOW, @@ -143,7 +114,8 @@ typedef enum PlayerItemAction { /* 0x37 */ PLAYER_IA_37, /* 0x38 */ PLAYER_IA_38, /* 0x39 */ PLAYER_IA_39, - /* 0x3A */ PLAYER_IA_MASK_TRUTH, + /* 0x3A */ PLAYER_IA_MASK_MIN, + /* 0x3A */ PLAYER_IA_MASK_TRUTH = PLAYER_IA_MASK_MIN, /* 0x3B */ PLAYER_IA_MASK_KAFEIS_MASK, /* 0x3C */ PLAYER_IA_MASK_ALL_NIGHT, /* 0x3D */ PLAYER_IA_MASK_BUNNY, @@ -163,10 +135,12 @@ typedef enum PlayerItemAction { /* 0x4B */ PLAYER_IA_MASK_BLAST, /* 0x4C */ PLAYER_IA_MASK_SCENTS, /* 0x4D */ PLAYER_IA_MASK_GIANT, - /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY, + /* 0x4E */ PLAYER_IA_MASK_TRANSFORMATION_MIN, + /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY = PLAYER_IA_MASK_TRANSFORMATION_MIN, /* 0x4F */ PLAYER_IA_MASK_GORON, /* 0x50 */ PLAYER_IA_MASK_ZORA, /* 0x51 */ PLAYER_IA_MASK_DEKU, + /* 0x51 */ PLAYER_IA_MASK_MAX = PLAYER_IA_MASK_DEKU, /* 0x52 */ PLAYER_IA_LENS, /* 0x53 */ PLAYER_IA_MAX } PlayerItemAction; @@ -190,12 +164,45 @@ typedef enum PlayerMeleeWeapon { /* 1 */ PLAYER_MELEEWEAPON_SWORD_KOKIRI = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_KOKIRI), /* 2 */ PLAYER_MELEEWEAPON_SWORD_RAZOR = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_RAZOR), /* 3 */ PLAYER_MELEEWEAPON_SWORD_GILDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GILDED), - /* 4 */ PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY), + /* 4 */ PLAYER_MELEEWEAPON_SWORD_TWO_HANDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED), /* 5 */ PLAYER_MELEEWEAPON_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_STICK), /* 6 */ PLAYER_MELEEWEAPON_ZORA_FINS = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_ZORA_FINS), /* 7 */ PLAYER_MELEEWEAPON_MAX } PlayerMeleeWeapon; +// Relies on mask item actions to be contiguous +#define GET_MASK_FROM_IA(itemAction) ((itemAction) - (PLAYER_IA_MASK_MIN - 1)) +#define GET_IA_FROM_MASK(mask) ((mask) + (PLAYER_IA_MASK_MIN - 1)) + +typedef enum PlayerMask { + /* 0x00 */ PLAYER_MASK_NONE, + /* 0x01 */ PLAYER_MASK_TRUTH = GET_MASK_FROM_IA(PLAYER_IA_MASK_TRUTH), + /* 0x02 */ PLAYER_MASK_KAFEIS_MASK = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAFEIS_MASK), + /* 0x03 */ PLAYER_MASK_ALL_NIGHT = GET_MASK_FROM_IA(PLAYER_IA_MASK_ALL_NIGHT), + /* 0x04 */ PLAYER_MASK_BUNNY = GET_MASK_FROM_IA(PLAYER_IA_MASK_BUNNY), + /* 0x05 */ PLAYER_MASK_KEATON = GET_MASK_FROM_IA(PLAYER_IA_MASK_KEATON), + /* 0x06 */ PLAYER_MASK_GARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GARO), + /* 0x07 */ PLAYER_MASK_ROMANI = GET_MASK_FROM_IA(PLAYER_IA_MASK_ROMANI), + /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER = GET_MASK_FROM_IA(PLAYER_IA_MASK_CIRCUS_LEADER), + /* 0x09 */ PLAYER_MASK_POSTMAN = GET_MASK_FROM_IA(PLAYER_IA_MASK_POSTMAN), + /* 0x0A */ PLAYER_MASK_COUPLE = GET_MASK_FROM_IA(PLAYER_IA_MASK_COUPLE), + /* 0x0B */ PLAYER_MASK_GREAT_FAIRY = GET_MASK_FROM_IA(PLAYER_IA_MASK_GREAT_FAIRY), + /* 0x0C */ PLAYER_MASK_GIBDO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIBDO), + /* 0x0D */ PLAYER_MASK_DON_GERO = GET_MASK_FROM_IA(PLAYER_IA_MASK_DON_GERO), + /* 0x0E */ PLAYER_MASK_KAMARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAMARO), + /* 0x0F */ PLAYER_MASK_CAPTAIN = GET_MASK_FROM_IA(PLAYER_IA_MASK_CAPTAIN), + /* 0x10 */ PLAYER_MASK_STONE = GET_MASK_FROM_IA(PLAYER_IA_MASK_STONE), + /* 0x11 */ PLAYER_MASK_BREMEN = GET_MASK_FROM_IA(PLAYER_IA_MASK_BREMEN), + /* 0x12 */ PLAYER_MASK_BLAST = GET_MASK_FROM_IA(PLAYER_IA_MASK_BLAST), + /* 0x13 */ PLAYER_MASK_SCENTS = GET_MASK_FROM_IA(PLAYER_IA_MASK_SCENTS), + /* 0x14 */ PLAYER_MASK_GIANT = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIANT), + /* 0x15 */ PLAYER_MASK_FIERCE_DEITY = GET_MASK_FROM_IA(PLAYER_IA_MASK_FIERCE_DEITY), + /* 0x16 */ PLAYER_MASK_GORON = GET_MASK_FROM_IA(PLAYER_IA_MASK_GORON), + /* 0x17 */ PLAYER_MASK_ZORA = GET_MASK_FROM_IA(PLAYER_IA_MASK_ZORA), + /* 0x18 */ PLAYER_MASK_DEKU = GET_MASK_FROM_IA(PLAYER_IA_MASK_DEKU), + /* 0x19 */ PLAYER_MASK_MAX +} PlayerMask; + // Relies on bottle-related item actions to be contiguous #define GET_BOTTLE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_BOTTLE_MIN) @@ -244,7 +251,7 @@ typedef enum PlayerSword { /* 0 */ PLAYER_SWORD_KOKIRI = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI), /* 1 */ PLAYER_SWORD_RAZOR = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR), /* 2 */ PLAYER_SWORD_GILDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED), - /* 3 */ PLAYER_SWORD_GREAT_FAIRY = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY), + /* 3 */ PLAYER_SWORD_TWO_HANDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED), /* 4 */ PLAYER_SWORD_MAX } PlayerSword; @@ -287,6 +294,12 @@ typedef enum PlayerMeleeWeaponAnimation { /* 34 */ PLAYER_MWA_MAX } PlayerMeleeWeaponAnimation; +typedef enum PlayerMeleeWeaponState { + /* -1 */ PLAYER_MELEE_WEAPON_STATE_MINUS_1 = -1, + /* 0 */ PLAYER_MELEE_WEAPON_STATE_0, + /* 1 */ PLAYER_MELEE_WEAPON_STATE_1 +} PlayerMeleeWeaponState; + typedef enum PlayerDoorType { /* -1 */ PLAYER_DOORTYPE_TALKING = -1, // Displays a message instead of opening /* 0 */ PLAYER_DOORTYPE_NONE, @@ -300,13 +313,61 @@ typedef enum PlayerDoorType { typedef enum PlayerAnimType { /* 0 */ PLAYER_ANIMTYPE_DEFAULT, // DEFAULT /* 1 */ PLAYER_ANIMTYPE_1, - /* 2 */ PLAYER_ANIMTYPE_2, + /* 2 */ PLAYER_ANIMTYPE_2, // Shield but no sword? /* 3 */ PLAYER_ANIMTYPE_3, // Two hand weapon /* 4 */ PLAYER_ANIMTYPE_4, /* 5 */ PLAYER_ANIMTYPE_5, /* 6 */ PLAYER_ANIMTYPE_MAX } PlayerAnimType; +typedef enum PlayerAnimGroup { + /* 0 */ PLAYER_ANIMGROUP_0, // STANDING_IDLE + /* 1 */ PLAYER_ANIMGROUP_1, // WALKING + /* 2 */ PLAYER_ANIMGROUP_2, // RUNNING + /* 3 */ PLAYER_ANIMGROUP_3, + /* 4 */ PLAYER_ANIMGROUP_4, + /* 5 */ PLAYER_ANIMGROUP_5, // Z-Targeting ? + /* 6 */ PLAYER_ANIMGROUP_6, // Start or finishing some animation + /* 7 */ PLAYER_ANIMGROUP_7, // DRAW_MELEE_WEAPON + /* 8 */ PLAYER_ANIMGROUP_8, // OPEN_DOOR_LEFT_FIERCE_DEITY + /* 9 */ PLAYER_ANIMGROUP_9, // OPEN_DOOR_LEFT_HUMAN + /* 10 */ PLAYER_ANIMGROUP_10, // OPEN_DOOR_RIGHT_FIERCE_DEITY + /* 11 */ PLAYER_ANIMGROUP_11, // OPEN_DOOR_RIGHT_HUMAN + /* 12 */ PLAYER_ANIMGROUP_12, // GRABBING + /* 13 */ PLAYER_ANIMGROUP_13, // FALLING/LANDING? + /* 14 */ PLAYER_ANIMGROUP_14, // landing from short distances? + /* 15 */ PLAYER_ANIMGROUP_15, // ROLLING + /* 16 */ PLAYER_ANIMGROUP_16, // BONK/BONKING + /* 17 */ PLAYER_ANIMGROUP_17, + /* 18 */ PLAYER_ANIMGROUP_18, + /* 19 */ PLAYER_ANIMGROUP_19, // START_SHIELDING + /* 20 */ PLAYER_ANIMGROUP_20, // SHIELDING + /* 21 */ PLAYER_ANIMGROUP_21, // STOP_SHIELDING/END_SHIELDING + /* 22 */ PLAYER_ANIMGROUP_22, // SLOW_SIDE_WALK? + /* 23 */ PLAYER_ANIMGROUP_23, // SIDE_WALK + /* 24 */ PLAYER_ANIMGROUP_24, // SIDE_WALK_RIGHT + /* 25 */ PLAYER_ANIMGROUP_25, + /* 26 */ PLAYER_ANIMGROUP_26, + /* 27 */ PLAYER_ANIMGROUP_27, + /* 28 */ PLAYER_ANIMGROUP_28, // THROWING + /* 29 */ PLAYER_ANIMGROUP_29, // PUT_DOWN_OBJECT? + /* 30 */ PLAYER_ANIMGROUP_30, // back walking slow? + /* 31 */ PLAYER_ANIMGROUP_31, + /* 32 */ PLAYER_ANIMGROUP_32, + /* 33 */ PLAYER_ANIMGROUP_33, + /* 34 */ PLAYER_ANIMGROUP_34, // PULLING_START + /* 35 */ PLAYER_ANIMGROUP_35, // PULLING + /* 36 */ PLAYER_ANIMGROUP_36, // PULLING_END + /* 37 */ PLAYER_ANIMGROUP_37, // climbing from a ledge? + /* 38 */ PLAYER_ANIMGROUP_38, // ledge + /* 39 */ PLAYER_ANIMGROUP_39, // ledge + /* 40 */ PLAYER_ANIMGROUP_40, // climbing from a ledge + /* 41 */ PLAYER_ANIMGROUP_41, + /* 42 */ PLAYER_ANIMGROUP_42, + /* 43 */ PLAYER_ANIMGROUP_43, + /* 44 */ PLAYER_ANIMGROUP_MAX +} PlayerAnimGroup; + typedef enum PlayerModelType { // left hand /* 0 */ PLAYER_MODELTYPE_LH_OPEN, @@ -464,7 +525,7 @@ typedef struct PlayerAnimationFrame { #define GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0x0F00) typedef struct PlayerAgeProperties { - /* 0x00 */ f32 unk_00; // ceilingCheckHeight? + /* 0x00 */ f32 unk_00; // ceilingCheckHeight /* 0x04 */ f32 shadowScale; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; @@ -478,7 +539,7 @@ typedef struct PlayerAgeProperties { /* 0x2C */ f32 unk_2C; // water stuff // depthInWater /* 0x30 */ f32 unk_30; // water stuff // depthInWater /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; // wallCheckHeight? + /* 0x38 */ f32 unk_38; // wallCheckHeight /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ Vec3s unk_44; @@ -489,9 +550,9 @@ typedef struct PlayerAgeProperties { /* 0x94 */ u16 surfaceSfxIdOffset; /* 0x98 */ f32 unk_98; /* 0x9C */ f32 unk_9C; - /* 0xA0 */ PlayerAnimationHeader* unk_A0; - /* 0xA4 */ PlayerAnimationHeader* unk_A4; - /* 0xA8 */ PlayerAnimationHeader* unk_A8; + /* 0xA0 */ PlayerAnimationHeader* openChestAnim; + /* 0xA4 */ PlayerAnimationHeader* unk_A4; // OoT leftovers to interact with the Master Sword + /* 0xA8 */ PlayerAnimationHeader* unk_A8; // OoT leftovers to interact with the Master Sword /* 0xAC */ PlayerAnimationHeader* unk_AC; /* 0xB0 */ PlayerAnimationHeader* unk_B0; /* 0xB4 */ PlayerAnimationHeader* unk_B4[4]; @@ -547,7 +608,7 @@ typedef enum PlayerCsMode { /* 0x0F */ PLAYER_CSMODE_15, /* 0x10 */ PLAYER_CSMODE_16, /* 0x11 */ PLAYER_CSMODE_17, - /* 0x12 */ PLAYER_CSMODE_18, + /* 0x12 */ PLAYER_CSMODE_18, // Strangled by Wallmaster /* 0x13 */ PLAYER_CSMODE_19, /* 0x14 */ PLAYER_CSMODE_20, /* 0x15 */ PLAYER_CSMODE_21, @@ -555,7 +616,7 @@ typedef enum PlayerCsMode { /* 0x17 */ PLAYER_CSMODE_23, /* 0x18 */ PLAYER_CSMODE_24, /* 0x19 */ PLAYER_CSMODE_25, - /* 0x1A */ PLAYER_CSMODE_26, + /* 0x1A */ PLAYER_CSMODE_26, // Halt! /* 0x1B */ PLAYER_CSMODE_27, /* 0x1C */ PLAYER_CSMODE_28, /* 0x1D */ PLAYER_CSMODE_29, @@ -613,7 +674,7 @@ typedef enum PlayerCsMode { /* 0x51 */ PLAYER_CSMODE_81, /* 0x52 */ PLAYER_CSMODE_82, /* 0x53 */ PLAYER_CSMODE_83, - /* 0x54 */ PLAYER_CSMODE_84, + /* 0x54 */ PLAYER_CSMODE_84, // Sucked by the moon /* 0x55 */ PLAYER_CSMODE_85, /* 0x56 */ PLAYER_CSMODE_86, /* 0x57 */ PLAYER_CSMODE_87, @@ -867,10 +928,11 @@ typedef enum PlayerCsMode { #define PLAYER_STATE3_20000000 (1 << 29) // #define PLAYER_STATE3_40000000 (1 << 30) -// +// TARGETING_HOSTILE? #define PLAYER_STATE3_80000000 (1 << 31) +#define PLAYER_GET_BG_CAM_INDEX(thisx) ((thisx)->params & 0xFF) #define PLAYER_GET_INITMODE(thisx) (((thisx)->params & 0xF00) >> 8) typedef enum PlayerInitMode { @@ -894,6 +956,15 @@ typedef enum PlayerInitMode { #define PLAYER_PARAMS(startBgCamIndex, initMode) ((startBgCamIndex & 0xFF) | ((initMode & 0xF) << 8)) +typedef enum PlayerUnkAA5 { + /* 0 */ PLAYER_UNKAA5_0, + /* 1 */ PLAYER_UNKAA5_1, + /* 2 */ PLAYER_UNKAA5_2, + /* 3 */ PLAYER_UNKAA5_3, + /* 4 */ PLAYER_UNKAA5_4, + /* 5 */ PLAYER_UNKAA5_5, +} PlayerUnkAA5; + typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play); typedef s32 (*PlayerFuncAC4)(struct Player* this, struct PlayState* play); typedef void (*PlayerFuncD58)(struct PlayState* play, struct Player* this); @@ -917,31 +988,13 @@ typedef struct Player { /* 0x151 */ u8 rightHandType; /* 0x152 */ u8 sheathType; /* 0x153 */ u8 currentMask; // PlayerMask enum - /* 0x154 */ s8 unk_154; + /* 0x154 */ s8 unk_154; // EquipSlot enum // Last pressed equip slot? /* 0x155 */ u8 prevMask; /* 0x158 */ Gfx** rightHandDLists; /* 0x15C */ Gfx** leftHandDLists; /* 0x160 */ Gfx** sheathDLists; /* 0x164 */ Gfx** waistDLists; - /* 0x168 */ f32 unk_168; - /* 0x16C */ f32 unk_16C; - /* 0x170 */ f32 unk_170; - /* 0x174 */ f32 unk_174; - /* 0x178 */ f32 unk_178; - /* 0x17C */ f32 unk_17C; - /* 0x180 */ f32 unk_180; - /* 0x184 */ f32 unk_184; - /* 0x188 */ f32 unk_188; - /* 0x18C */ f32 unk_18C; - /* 0x190 */ f32 unk_190; - /* 0x194 */ f32 unk_194; - /* 0x198 */ f32 unk_198; - /* 0x19C */ f32 unk_19C; - /* 0x1A0 */ f32 unk_1A0; - /* 0x1A4 */ f32 unk_1A4; - /* 0x1A8 */ f32 unk_1A8; - /* 0x1AC */ f32 unk_1AC; - /* 0x1B0 */ f32 unk_1B0; + /* 0x168 */ UNK_TYPE1 unk_168[0x4C]; /* 0x1B4 */ s16 unk_1B4; /* 0x1B6 */ char unk_1B6[2]; /* 0x1B8 */ u8 giObjectLoading; @@ -960,8 +1013,7 @@ typedef struct Player { /* 0x2C8 */ SkelAnime unk_2C8; /* 0x30C */ Vec3s jointTable[5]; /* 0x32A */ Vec3s morphTable[5]; - /* 0x348 */ s16 eyeTexId; - /* 0x34A */ s16 eyeAnimTimer; + /* 0x348 */ BlinkInfo blinkInfo; /* 0x34C */ Actor* heldActor; /* 0x350 */ PosRot leftHandWorld; /* 0x364 */ Actor* rightHandActor; @@ -980,12 +1032,12 @@ typedef struct Player { /* 0x395 */ u8 prevCsMode; // PlayerCsMode enum /* 0x396 */ u8 unk_396; // currentActorActionId? /* 0x397 */ u8 unk_397; // PlayerDoorType enum - /* 0x398 */ Actor* unk_398; + /* 0x398 */ Actor* unk_398; // csActor? /* 0x39C */ UNK_TYPE1 unk_39C[0x4]; /* 0x3A0 */ Vec3f unk_3A0; /* 0x3AC */ Vec3f unk_3AC; /* 0x3B8 */ u16 unk_3B8; - /* 0x3BA */ s16 unk_3BA; + /* 0x3BA */ s16 doorBgCamIndex; /* 0x3BC */ s16 subCamId; /* 0x3BE */ char unk_3BE[2]; /* 0x3C0 */ Vec3f unk_3C0; @@ -1028,7 +1080,7 @@ typedef struct Player { /* 0xA9C */ f32 secretRumbleCharge; // builds per frame until discharges with a rumble request /* 0xAA0 */ f32 closestSecretDistSq; // Used to augment `secretRumbleCharge`. Cleared every frame /* 0xAA4 */ s8 unk_AA4; - /* 0xAA5 */ u8 unk_AA5; + /* 0xAA5 */ u8 unk_AA5; // PlayerUnkAA5 enum /* 0xAA6 */ u16 unk_AA6; // flags of some kind /* 0xAA8 */ s16 unk_AA8; /* 0xAAA */ s16 unk_AAA; @@ -1049,20 +1101,21 @@ typedef struct Player { /* 0xADA */ s8 meleeWeaponAnimation; /* 0xADB */ s8 meleeWeaponState; /* 0xADC */ s8 unk_ADC; - /* 0xADD */ s8 unk_ADD; + /* 0xADD */ s8 unk_ADD; // Some sort of combo counter /* 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 + /* 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 /* 0xAEC */ f32 unk_AEC; - /* 0xAF0 */ union { // TODO: this may be an union of two structs + /* 0xAF0 */ union { Vec3f unk_AF0[2]; f32 arr_AF0[6]; }; - /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array + /* 0xB08 */ f32 unk_B08; + /* 0xB0C */ f32 unk_B0C; /* 0xB10 */ f32 unk_B10[6]; - /* 0xB28 */ s16 unk_B28; //Burning stick timer? + /* 0xB28 */ s16 unk_B28; // Burning stick timer? /* 0xB2A */ s8 getItemDrawIdPlusOne; /* 0xB2B */ s8 unk_B2B; /* 0xB2C */ f32 windSpeed; @@ -1088,7 +1141,7 @@ typedef struct Player { /* 0xB64 */ u8 unk_B64; /* 0xB65 */ u8 shockTimer; /* 0xB66 */ u8 unk_B66; - /* 0xB67 */ u8 unk_B67; // deku remaining hops counter + /* 0xB67 */ u8 remainingHopsCounter; // Deku hopping on water /* 0xB68 */ s16 fallStartHeight; // last truncated Y position before falling /* 0xB6A */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down) /* 0xB6C */ s16 unk_B6C; @@ -1100,8 +1153,8 @@ typedef struct Player { /* 0xB76 */ s16 unk_B76; /* 0xB78 */ f32 unk_B78; /* 0xB7C */ f32 unk_B7C; - /* 0xB80 */ f32 unk_B80; - /* 0xB84 */ s16 unk_B84; + /* 0xB80 */ f32 pushedSpeed; // Pushing player, examples include water currents, floor conveyors, climbing sloped surfaces + /* 0xB84 */ s16 pushedYaw; // Yaw of direction in which player is being pushed /* 0xB86 */ s16 unk_B86[2]; // unknown length /* 0xB8A */ s16 unk_B8A; /* 0xB8C */ s16 unk_B8C; @@ -1112,7 +1165,7 @@ typedef struct Player { /* 0xB96 */ s16 unk_B96; /* 0xB98 */ WeaponInfo meleeWeaponInfo[3]; /* 0xBEC */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX]; - /* 0xCC4 */ MtxF mf_CC4; + /* 0xCC4 */ MtxF leftHandMf; /* 0xD04 */ MtxF shieldMf; /* 0xD44 */ u8 isBurning; /* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; // one flame per body part @@ -1120,8 +1173,7 @@ typedef struct Player { /* 0xD58 */ PlayerFuncD58 unk_D58; /* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame) /* 0xD5D */ u8 unk_D5D; - /* 0xD5E */ u8 unk_D5E; - /* 0xD5F */ u8 unk_D5F; + /* 0xD5E */ u8 floorProperty; // FloorProperty enum /* 0xD60 */ f32 unk_D60; /* 0xD64 */ s16 unk_D64; /* 0xD66 */ u16 unk_D66; // sfx diff --git a/include/z64save.h b/include/z64save.h index 9d580803f..01acfed0e 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -338,7 +338,7 @@ typedef struct SaveContext { /* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE" /* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item" /* 0x3DBB */ u8 unk_3DBB; // "next_walk" - /* 0x3DBC */ s16 dogParams; // "dog_flag" + /* 0x3DBC */ s16 dogParams; // OoT leftover. "dog_flag" /* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status" /* 0x3DBF */ u8 showTitleCard; // "name_display" /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer" diff --git a/spec b/spec index 81f25e374..003c76dd4 100644 --- a/spec +++ b/spec @@ -700,9 +700,7 @@ beginseg name "ovl_player_actor" compress include "build/src/overlays/actors/ovl_player_actor/z_player.o" - include "build/data/ovl_player_actor/ovl_player_actor.data.o" - include "build/data/ovl_player_actor/ovl_player_actor.bss.o" - include "build/data/ovl_player_actor/ovl_player_actor.reloc.o" + include "build/src/overlays/actors/ovl_player_actor/ovl_player_actor_reloc.o" endseg beginseg diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 7b8d7126b..6a561992b 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index a5ca767dc..ffa77e9bf 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1374,7 +1374,7 @@ s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { player->csMode = csMode; player->unk_398 = actor; - player->unk_3BA = 0; + player->doorBgCamIndex = 0; return true; } @@ -1382,7 +1382,7 @@ s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); if (func_800B724C(play, actor, csMode)) { - player->unk_3BA = 1; + player->doorBgCamIndex = 1; return true; } return false; @@ -3490,49 +3490,50 @@ void Enemy_StartFinishingBlow(PlayState* play, Actor* actor) { } // blinking routine -s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) { - if (DECR(arg0[1]) == 0) { - arg0[1] = Rand_S16Offset(arg1, arg2); +s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) { + if (DECR(info->blinkTimer) == 0) { + info->blinkTimer = Rand_S16Offset(arg1, arg2); } - if (arg0[1] - arg3 > 0) { - arg0[0] = 0; - } else if ((arg0[1] - arg3 >= -1) || (arg0[1] < 2)) { - arg0[0] = 1; + if (info->blinkTimer - arg3 > 0) { + info->eyeTexIndex = 0; + } else if ((info->blinkTimer - arg3 >= -1) || (info->blinkTimer < 2)) { + info->eyeTexIndex = 1; } else { - arg0[0] = 2; + info->eyeTexIndex = 2; } - return arg0[0]; + return info->eyeTexIndex; } // blinking routine -s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) { - if (DECR(arg0[1]) == 0) { - arg0[1] = Rand_S16Offset(arg1, arg2); +s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) { + if (DECR(info->blinkTimer) == 0) { + info->blinkTimer = Rand_S16Offset(arg1, arg2); } - if (arg0[1] - arg3 > 0) { - arg0[0] = 0; - } else if (arg0[1] - arg3 == 0) { - arg0[0] = 1; + if (info->blinkTimer - arg3 > 0) { + info->eyeTexIndex = 0; + } else if (info->blinkTimer - arg3 == 0) { + info->eyeTexIndex = 1; } else { - arg0[0] = 2; + info->eyeTexIndex = 2; } - return arg0[0]; + return info->eyeTexIndex; } // unused blinking routine -s16 func_800BBC20(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) { - if (DECR(arg0[1]) == 0) { - arg0[1] = Rand_S16Offset(arg1, arg2); - arg0[0]++; - if ((arg0[0] % 3) == 0) { - arg0[0] = (s32)(Rand_ZeroOne() * arg3) * 3; +s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) { + if (DECR(info->blinkTimer) == 0) { + info->blinkTimer = Rand_S16Offset(arg1, arg2); + info->eyeTexIndex++; + if ((info->eyeTexIndex % 3) == 0) { + info->eyeTexIndex = (s32)(Rand_ZeroOne() * arg3) * 3; } } - return arg0[0]; + + return info->eyeTexIndex; } void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList) { @@ -3614,15 +3615,15 @@ void func_800BC154(PlayState* play, ActorContext* actorCtx, Actor* actor, u8 act // Damage flags for EnArrow u32 sArrowDmgFlags[] = { - DMG_FIRE_ARROW, // ENARROW_0 - DMG_NORMAL_ARROW, // ENARROW_1 - DMG_NORMAL_ARROW, // ENARROW_2 - DMG_FIRE_ARROW, // ENARROW_3 - DMG_ICE_ARROW, // ENARROW_4 - DMG_LIGHT_ARROW, // ENARROW_5 - DMG_DEKU_NUT, // ENARROW_6 - DMG_DEKU_BUBBLE, // ENARROW_7 - DMG_DEKU_NUT, // ENARROW_8 + DMG_FIRE_ARROW, // ARROW_TYPE_NORMAL_LIT + DMG_NORMAL_ARROW, // ARROW_TYPE_NORMAL_HORSE + DMG_NORMAL_ARROW, // ARROW_TYPE_NORMAL + DMG_FIRE_ARROW, // ARROW_TYPE_FIRE + DMG_ICE_ARROW, // ARROW_TYPE_ICE + DMG_LIGHT_ARROW, // ARROW_TYPE_LIGHT + DMG_DEKU_NUT, // ARROW_TYPE_SLINGSHOT + DMG_DEKU_BUBBLE, // ARROW_TYPE_DEKU_BUBBLE + DMG_DEKU_NUT, // ARROW_TYPE_DEKU_NUT }; u32 Actor_GetArrowDmgFlags(s32 params) { @@ -4476,7 +4477,7 @@ s32 func_800BE184(PlayState* play, Actor* actor, f32 xzDist, s16 arg3, s16 arg4, s16 phi_v0 = BINANG_SUB(BINANG_ROT180(actor->yawTowardsPlayer), player->actor.shape.rot.y); s16 temp_t0 = actor->yawTowardsPlayer - arg5; - if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != 0)) { + if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0)) { if ((arg4 >= ABS_ALT(phi_v0)) && (arg3 >= ABS_ALT(temp_t0))) { return true; } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index ea600b30e..89b148942 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -465,13 +465,13 @@ s32 func_800CBA7C(Camera* camera) { } } -s32 func_800CBAAC(Camera* camera) { +PlayerMeleeWeaponState func_800CBAAC(Camera* camera) { Actor* focalActor = camera->focalActor; if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { return ((Player*)focalActor)->meleeWeaponState; } else { - return 0; + return PLAYER_MELEE_WEAPON_STATE_0; } } @@ -506,13 +506,13 @@ s32 func_800CBB88(Camera* camera) { Actor* focalActor = camera->focalActor; if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { - if ((((Player*)focalActor)->meleeWeaponState != 0) && + if ((((Player*)focalActor)->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (((Player*)focalActor)->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT)) { return 3; } if ((((Player*)focalActor)->stateFlags2 & PLAYER_STATE2_20000) || - ((((Player*)focalActor)->meleeWeaponState != 0) && + ((((Player*)focalActor)->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (((Player*)focalActor)->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK))) { return 1; } @@ -3958,7 +3958,7 @@ s32 Camera_Battle1(Camera* camera) { } camera->roll = Camera_ScaledStepToCeilS(sp88, camera->roll, 0.06f, 5); - if (func_800CBAAC(camera) != 0) { + if (func_800CBAAC(camera) != PLAYER_MELEE_WEAPON_STATE_0) { phi_f12 = ((camera->play->state.frames & 8) != 0) ? roData->unk_20 - (roData->unk_20 * 0.5f) : roData->unk_20; } else { phi_f12 = ((gSaveContext.save.saveInfo.playerData.health <= 16) ? 0.8f : 1.0f) * (sp78 - (sp78 * 0.05f * spEC)); diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 5f0221969..520431401 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -114,23 +114,17 @@ void EffectBlure_Init1(void* thisx, void* initParamsx) { EffectBlureInit1* initParams = (EffectBlureInit1*)initParamsx; if ((this != NULL) && (initParams != NULL)) { + s32 i; + EffectBlure_InitElements(this); - this->p1StartColor.r = initParams->p1StartColor[0]; - this->p2StartColor.r = initParams->p2StartColor[0]; - this->p1EndColor.r = initParams->p1EndColor[0]; - this->p2EndColor.r = initParams->p2EndColor[0]; - this->p1StartColor.g = initParams->p1StartColor[1]; - this->p2StartColor.g = initParams->p2StartColor[1]; - this->p1EndColor.g = initParams->p1EndColor[1]; - this->p2EndColor.g = initParams->p2EndColor[1]; - this->p1StartColor.b = initParams->p1StartColor[2]; - this->p2StartColor.b = initParams->p2StartColor[2]; - this->p1EndColor.b = initParams->p1EndColor[2]; - this->p2EndColor.b = initParams->p2EndColor[2]; - this->p1StartColor.a = initParams->p1StartColor[3]; - this->p2StartColor.a = initParams->p2StartColor[3]; - this->p1EndColor.a = initParams->p1EndColor[3]; - this->p2EndColor.a = initParams->p2EndColor[3]; + + for (i = 0; i < 4; i++) { + this->p1StartColor[i] = initParams->p1StartColor[i]; + this->p2StartColor[i] = initParams->p2StartColor[i]; + this->p1EndColor[i] = initParams->p1EndColor[i]; + this->p2EndColor[i] = initParams->p2EndColor[i]; + } + this->elemDuration = initParams->elemDuration; this->unkFlag = initParams->unkFlag; this->calcMode = initParams->calcMode; @@ -155,23 +149,17 @@ void EffectBlure_Init2(void* thisx, void* initParamsx) { EffectBlureInit2* initParams = (EffectBlureInit2*)initParamsx; if ((this != NULL) && (initParams != NULL)) { + s32 i; + EffectBlure_InitElements(this); - this->p1StartColor.r = initParams->p1StartColor[0]; - this->p2StartColor.r = initParams->p2StartColor[0]; - this->p1EndColor.r = initParams->p1EndColor[0]; - this->p2EndColor.r = initParams->p2EndColor[0]; - this->p1StartColor.g = initParams->p1StartColor[1]; - this->p2StartColor.g = initParams->p2StartColor[1]; - this->p1EndColor.g = initParams->p1EndColor[1]; - this->p2EndColor.g = initParams->p2EndColor[1]; - this->p1StartColor.b = initParams->p1StartColor[2]; - this->p2StartColor.b = initParams->p2StartColor[2]; - this->p1EndColor.b = initParams->p1EndColor[2]; - this->p2EndColor.b = initParams->p2EndColor[2]; - this->p1StartColor.a = initParams->p1StartColor[3]; - this->p2StartColor.a = initParams->p2StartColor[3]; - this->p1EndColor.a = initParams->p1EndColor[3]; - this->p2EndColor.a = initParams->p2EndColor[3]; + + for (i = 0; i < 4; i++) { + this->p1StartColor[i] = initParams->p1StartColor[i]; + this->p2StartColor[i] = initParams->p2StartColor[i]; + this->p1EndColor[i] = initParams->p1EndColor[i]; + this->p2EndColor[i] = initParams->p2EndColor[i]; + } + this->elemDuration = initParams->elemDuration; this->unkFlag = initParams->unkFlag; this->calcMode = initParams->calcMode; @@ -372,14 +360,14 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3 color1->r = color1->g = color1->b = color1->a = 255; color2->r = color2->g = color2->b = color2->a = 255; } else { - color1->r = func_800B0A24(this->p1StartColor.r, this->p1EndColor.r, ratio); - color1->g = func_800B0A24(this->p1StartColor.g, this->p1EndColor.g, ratio); - color1->b = func_800B0A24(this->p1StartColor.b, this->p1EndColor.b, ratio); - color1->a = func_800B0A24(this->p1StartColor.a, this->p1EndColor.a, ratio); - color2->r = func_800B0A24(this->p2StartColor.r, this->p2EndColor.r, ratio); - color2->g = func_800B0A24(this->p2StartColor.g, this->p2EndColor.g, ratio); - color2->b = func_800B0A24(this->p2StartColor.b, this->p2EndColor.b, ratio); - color2->a = func_800B0A24(this->p2StartColor.a, this->p2EndColor.a, ratio); + color1->r = func_800B0A24(this->p1StartColor[0], this->p1EndColor[0], ratio); + color1->g = func_800B0A24(this->p1StartColor[1], this->p1EndColor[1], ratio); + color1->b = func_800B0A24(this->p1StartColor[2], this->p1EndColor[2], ratio); + color1->a = func_800B0A24(this->p1StartColor[3], this->p1EndColor[3], ratio); + color2->r = func_800B0A24(this->p2StartColor[0], this->p2EndColor[0], ratio); + color2->g = func_800B0A24(this->p2StartColor[1], this->p2EndColor[1], ratio); + color2->b = func_800B0A24(this->p2StartColor[2], this->p2EndColor[2], ratio); + color2->a = func_800B0A24(this->p2StartColor[3], this->p2EndColor[3], ratio); } } @@ -992,19 +980,19 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) { vtx[j].v.flag = 0; vtx[j].v.tc[0] = 0; vtx[j].v.tc[1] = 0; - vtx[j].v.cn[0] = func_800B0A24(this->p1StartColor.r, this->p1EndColor.r, ratio); - vtx[j].v.cn[1] = func_800B0A24(this->p1StartColor.g, this->p1EndColor.g, ratio); - vtx[j].v.cn[2] = func_800B0A24(this->p1StartColor.b, this->p1EndColor.b, ratio); - vtx[j].v.cn[3] = func_800B0A24(this->p1StartColor.a, this->p1EndColor.a, ratio); + vtx[j].v.cn[0] = func_800B0A24(this->p1StartColor[0], this->p1EndColor[0], ratio); + vtx[j].v.cn[1] = func_800B0A24(this->p1StartColor[1], this->p1EndColor[1], ratio); + vtx[j].v.cn[2] = func_800B0A24(this->p1StartColor[2], this->p1EndColor[2], ratio); + vtx[j].v.cn[3] = func_800B0A24(this->p1StartColor[3], this->p1EndColor[3], ratio); j++; vtx[j].v.flag = 0; vtx[j].v.tc[0] = 0; vtx[j].v.tc[1] = 0; - vtx[j].v.cn[0] = func_800B0A24(this->p2StartColor.r, this->p2EndColor.r, ratio); - vtx[j].v.cn[1] = func_800B0A24(this->p2StartColor.g, this->p2EndColor.g, ratio); - vtx[j].v.cn[2] = func_800B0A24(this->p2StartColor.b, this->p2EndColor.b, ratio); - vtx[j].v.cn[3] = func_800B0A24(this->p2StartColor.a, this->p2EndColor.a, ratio); + vtx[j].v.cn[0] = func_800B0A24(this->p2StartColor[0], this->p2EndColor[0], ratio); + vtx[j].v.cn[1] = func_800B0A24(this->p2StartColor[1], this->p2EndColor[1], ratio); + vtx[j].v.cn[2] = func_800B0A24(this->p2StartColor[2], this->p2EndColor[2], ratio); + vtx[j].v.cn[3] = func_800B0A24(this->p2StartColor[3], this->p2EndColor[3], ratio); j++; } } diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index 674f4bfa4..b5992dec4 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -69,13 +69,13 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { do { doorIter = SubS_FindActor(play, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR); door = (EnDoor*)doorIter; - dist = Actor_WorldDistXYZToActor(actor, &door->dyna.actor); + dist = Actor_WorldDistXYZToActor(actor, &door->knobDoor.dyna.actor); if (!isSetup || (dist < minDist)) { nearestDoor = door; minDist = dist; isSetup = true; } - doorIter = door->dyna.actor.next; + doorIter = door->knobDoor.dyna.actor.next; } while (doorIter != NULL); if (1) {} @@ -134,16 +134,16 @@ void func_800F0BB4(EnHy* enHy, PlayState* play, EnDoor* door, s16 arg3, s16 arg4 Vec3f offset; f32 phi_f0; - Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &enHy->actor.world.pos); + Actor_OffsetOfPointInActorCoords(&door->knobDoor.dyna.actor, &offset, &enHy->actor.world.pos); phi_f0 = (offset.z >= 0.0f) ? 1.0f : -1.0f; animIndex = ((s8)phi_f0 < 0) ? 0 : 2; EnHy_ChangeObjectAndAnim(enHy, play, (animIndex == 0) ? arg3 : arg4); enHy->skelAnime.baseTransl = *enHy->skelAnime.jointTable; enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable; - enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATEY | ANIM_FLAG_1); + enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATE_Y | ANIM_FLAG_1); AnimationContext_SetMoveActor(play, &enHy->actor, &enHy->skelAnime, 1.0f); - door->unk_1A1 = 1; - door->animIndex = animIndex; + door->knobDoor.playOpenAnim = true; + door->knobDoor.animIndex = animIndex; } s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5) { @@ -157,7 +157,7 @@ s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg if (door != NULL) { ret = true; func_800F0BB4(enHy, play, door, arg3, arg4); - yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos); + yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos); enHy->actor.world.pos.x += arg5 * Math_SinS(yaw); enHy->actor.world.pos.z += arg5 * Math_CosS(yaw); enHy->actor.world.rot.y = -yaw; @@ -179,7 +179,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) { if (door != NULL) { ret = true; func_800F0BB4(enHy, play, door, arg2, arg3); - enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos); + 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; diff --git a/src/code/z_play.c b/src/code/z_play.c index 7f615018e..e25b50b4b 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -2327,8 +2327,8 @@ void Play_Init(GameState* thisx) { Camera_InitFocalActorSettings(&this->mainCamera, &player->actor); gDbgCamEnabled = false; - if ((player->actor.params & 0xFF) != 0xFF) { - Camera_ChangeActorCsCamIndex(&this->mainCamera, player->actor.params & 0xFF); + if (PLAYER_GET_BG_CAM_INDEX(&player->actor) != 0xFF) { + Camera_ChangeActorCsCamIndex(&this->mainCamera, PLAYER_GET_BG_CAM_INDEX(&player->actor)); } CutsceneManager_StoreCamera(&this->mainCamera); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index f8b33b853..5509fd4a1 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -472,7 +472,7 @@ void func_80123140(PlayState* play, Player* player) { REG(39) = bootRegs[8]; REG(43) = bootRegs[9]; R_RUN_SPEED_LIMIT = bootRegs[10]; - REG(68) = bootRegs[11]; + REG(68) = bootRegs[11]; // gravity REG(69) = bootRegs[12]; IREG(66) = bootRegs[13]; IREG(67) = bootRegs[14]; @@ -503,7 +503,7 @@ s32 Player_InBlockingCsMode(PlayState* play, Player* player) { s32 Player_InCsMode(PlayState* play) { Player* player = GET_PLAYER(play); - return Player_InBlockingCsMode(play, player) || player->unk_AA5 == 5; + return Player_InBlockingCsMode(play, player) || (player->unk_AA5 == PLAYER_UNKAA5_5); } s32 func_80123420(Player* player) { @@ -556,8 +556,8 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) { Player* player = GET_PLAYER(play); if (player->stateFlags3 & PLAYER_STATE3_1000) { - player->unk_B08[0] = arg1; - player->unk_B08[1] += arg1 * 0.05f; + player->unk_B08 = arg1; + player->unk_B0C += arg1 * 0.05f; player->currentYaw = arg2; player->actor.home.rot.y = arg2; player->actor.shape.rot.y = arg2; @@ -659,7 +659,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_KOKIRI PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_RAZOR PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_GILDED - PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_GREAT_FAIRY + PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_TWO_HANDED PLAYER_MODELGROUP_STICK, // PLAYER_IA_STICK PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW @@ -1316,6 +1316,7 @@ 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; player->stateFlags2 &= ~PLAYER_STATE2_2000; @@ -1445,7 +1446,7 @@ PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) { s32 Player_IsHoldingTwoHandedWeapon(Player* player) { // Relies on the itemActions for two-handed weapons being contiguous. - if ((player->heldItemAction >= PLAYER_IA_SWORD_GREAT_FAIRY) && (player->heldItemAction <= PLAYER_IA_STICK)) { + if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_STICK)) { return true; } @@ -2038,7 +2039,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** pos->x *= player->ageProperties->unk_08; pos->z *= player->ageProperties->unk_08; } - if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) { + if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y)) { pos->y *= player->ageProperties->unk_08; } } @@ -2552,14 +2553,16 @@ void func_8012669C(PlayState* play, Player* player, Vec3f* arg2, Vec3f* arg3) { Matrix_MultVec3f(arg2, &sp3C); Matrix_MultVec3f(arg3, &sp30); - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if (func_80126440(play, NULL, &player->meleeWeaponInfo[0], &sp3C, &sp30) && (player->transformation != PLAYER_FORM_GORON) && (!(player->stateFlags1 & PLAYER_STATE1_400000))) { EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[0]), &player->meleeWeaponInfo[0].tip, &player->meleeWeaponInfo[0].base); } - if ((player->meleeWeaponState > 0) && ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) || - (player->stateFlags2 & PLAYER_STATE2_20000))) { + + if ((player->meleeWeaponState >= PLAYER_MELEE_WEAPON_STATE_1) && + ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) || + (player->stateFlags2 & PLAYER_STATE2_20000))) { Matrix_MultVec3f(&arg2[1], &sp3C); Matrix_MultVec3f(&arg3[1], &sp30); func_80126440(play, &player->meleeWeaponQuads[0], &player->meleeWeaponInfo[1], &sp3C, &sp30); @@ -2714,7 +2717,7 @@ void func_80126BD0(PlayState* play, Player* player, s32 arg2) { gSPDisplayList(POLY_OPA_DISP++, D_801C0AB4[arg2]); - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if ((((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT)) && (arg2 == 0)) || ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) && (arg2 != 0))) { func_8012669C(play, player, D_801C0A00, D_801C09DC); @@ -3296,7 +3299,7 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) { Matrix_Push(); Matrix_Translate(-428.26f, 267.2f, -33.82f, MTXMODE_APPLY); Matrix_RotateZYX(-0x8000, 0, 0x4000, MTXMODE_APPLY); - Matrix_Scale(1.0f, player->unk_B08[1], 1.0f, MTXMODE_APPLY); + Matrix_Scale(1.0f, player->unk_B0C, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); @@ -3413,7 +3416,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G 3000.0f, // PLAYER_MELEEWEAPON_SWORD_KOKIRI 3000.0f, // PLAYER_MELEEWEAPON_SWORD_RAZOR 4000.0f, // PLAYER_MELEEWEAPON_SWORD_GILDED - 5500.0f, // PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY + 5500.0f, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED -1.0f, // PLAYER_MELEEWEAPON_STICK 2500.0f, // PLAYER_MELEEWEAPON_ZORA_FINS }; @@ -3421,19 +3424,19 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) || ((player->transformation != PLAYER_FORM_ZORA) && ((player->itemAction == PLAYER_IA_STICK) || - ((player->meleeWeaponState != 0) && + ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_RIGHT) && (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))))) { if (player->itemAction == PLAYER_IA_STICK) { - D_801C0994->x = player->unk_B08[1] * 5000.0f; + D_801C0994->x = player->unk_B0C * 5000.0f; } else { D_801C0994->x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(player)]; } func_80126B8C(play, player); } - Matrix_Get(&player->mf_CC4); - Matrix_MtxFToYXZRot(&player->mf_CC4, &player->leftHandWorld.rot, false); + Matrix_Get(&player->leftHandMf); + Matrix_MtxFToYXZRot(&player->leftHandMf, &player->leftHandWorld.rot, false); } } } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) { @@ -3458,18 +3461,18 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G Matrix_MultZero(&sp20C); temp_fv0 = Math_Vec3f_DistXYZ(sPlayerCurBodyPartPos, &sp20C); - player->unk_B08[0] = temp_fv0 - 3.0f; + player->unk_B08 = temp_fv0 - 3.0f; if (temp_fv0 < 3.0f) { - player->unk_B08[0] = 0.0f; + player->unk_B08 = 0.0f; } else { - player->unk_B08[0] *= 1.6f; - if (player->unk_B08[0] > 1.0f) { - player->unk_B08[0] = 1.0f; + player->unk_B08 *= 1.6f; + if (player->unk_B08 > 1.0f) { + player->unk_B08 = 1.0f; } } - player->unk_B08[1] = -0.5f; + player->unk_B0C = -0.5f; } - Matrix_Scale(1.0f, player->unk_B08[0], 1.0f, MTXMODE_APPLY); + Matrix_Scale(1.0f, player->unk_B08, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -3518,7 +3521,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G Player_DrawHookshotReticle(play, player, 77600.0f); } } - } else if (player->meleeWeaponState != 0) { + } else if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT) { func_80126B8C(play, player); } @@ -3590,6 +3593,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G for (i = 0; i < ARRAY_COUNT(sp178); i++) { Matrix_Push(); Matrix_Scale(sp178[i].x, sp178[i].y, sp178[i].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -3811,7 +3815,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G &player->meleeWeaponInfo[0].base); } } else if (limbIndex == PLAYER_LIMB_RIGHT_SHIN) { - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) || (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_START) || (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { @@ -3819,7 +3823,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G } } } else if (limbIndex == PLAYER_LIMB_WAIST) { - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT) { Math_Vec3f_Copy(&player->unk_AF0[1], &player->meleeWeaponInfo[0].base); func_8012669C(play, player, D_801C0A90, D_801C0A6C); diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 085cb4de2..cff66dacb 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1944,7 +1944,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) { skelAnime->jointTable->x = skelAnime->baseTransl.x; skelAnime->prevTransl.z = skelAnime->jointTable->z; skelAnime->jointTable->z = skelAnime->baseTransl.z; - if (skelAnime->moveFlags & ANIM_FLAG_UPDATEY) { + if (skelAnime->moveFlags & ANIM_FLAG_UPDATE_Y) { if (skelAnime->moveFlags & ANIM_FLAG_NOMOVE) { diff->y = 0.0f; } else { diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index a4d95af64..d19253df5 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -15,7 +15,7 @@ Vec3f gOneVec3f = { 1.0f, 1.0f, 1.0f }; s32 D_801C5DBC[] = { 0, 1 }; // Unused /** - * Finds the first EnDoor instance with unk_1A4 == 5 and the specified switchFlag. + * Finds the first EnDoor instance with doorType == ENDOOR_TYPE_5 and the specified switchFlag. */ EnDoor* SubS_FindDoor(PlayState* play, s32 switchFlag) { Actor* actor = NULL; @@ -29,7 +29,7 @@ EnDoor* SubS_FindDoor(PlayState* play, s32 switchFlag) { break; } - if ((door->unk_1A4 == 5) && (door->switchFlag == (u8)switchFlag)) { + if ((door->doorType == ENDOOR_TYPE_5) && (door->switchFlag == (u8)switchFlag)) { break; } diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index e271449b5..49525c864 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -141,6 +141,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { if (this->timer != 0 && (this->collider.base.atFlags & AT_HIT) && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) { Actor* touchedActor = this->collider.base.at; + if ((touchedActor->update != NULL) && (touchedActor->flags & (ACTOR_FLAG_200 | ACTOR_FLAG_400))) { if (this->collider.info.atHitInfo->bumperFlags & BUMP_HOOKABLE) { ArmsHook_AttachHookToActor(this, touchedActor); diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h index 31b675f41..bde007da1 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h @@ -15,7 +15,7 @@ typedef struct ArmsHook { /* 0x1EC */ Vec3f unk1EC; /* 0x1F8 */ Actor* grabbed; /* 0x1FC */ Vec3f unk1FC; - /* 0x208 */ UNK_TYPE1 unk208[0x2]; + /* 0x208 */ s8 unk_208; /* 0x20A */ s16 timer; /* 0x20C */ ArmsHookActionFunc actionFunc; } ArmsHook; // size = 0x210 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 8f3de2b2e..db2c79e39 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 @@ -321,8 +321,8 @@ void func_80B84610(BgDblueWaterfall* this, PlayState* play) { player->actor.world.pos.x += sp34.x; player->actor.world.pos.z += sp34.z; if (this && this && this) {} - player->unk_B80 = 8.0f; - player->unk_B84 = this->actor.yawTowardsPlayer; + player->pushedSpeed = 8.0f; + player->pushedYaw = this->actor.yawTowardsPlayer; } static InitChainEntry sInitChain[] = { diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 9a3bbabdf..119c3854a 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -68,10 +68,10 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) { f32 temp_fv0; s16 temp_v0; - if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer < 100.0f)) { - temp_fv0 = func_80ACAB10(play, &this->dyna.actor, 0.0f, 65.0f, 15.0f); + if (!Player_InCsMode(play) && (this->slidingDoor.dyna.actor.xzDistToPlayer < 100.0f)) { + temp_fv0 = func_80ACAB10(play, &this->slidingDoor.dyna.actor, 0.0f, 65.0f, 15.0f); if (fabsf(temp_fv0) < 50.0f) { - temp_v0 = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y; + temp_v0 = player->actor.shape.rot.y - this->slidingDoor.dyna.actor.shape.rot.y; if (temp_fv0 > 0.0f) { temp_v0 = (0x8000 - temp_v0); } @@ -91,31 +91,32 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) { void BgOpenShutter_Init(Actor* thisx, PlayState* play) { BgOpenShutter* this = THIS; - Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_open_obj_Colheader_001640); + Actor_ProcessInitChain(&this->slidingDoor.dyna.actor, sInitChain); + DynaPolyActor_Init(&this->slidingDoor.dyna, DYNA_TRANSFORM_POS); + DynaPolyActor_LoadMesh(play, &this->slidingDoor.dyna, &object_open_obj_Colheader_001640); this->actionFunc = func_80ACAD88; } void BgOpenShutter_Destroy(Actor* thisx, PlayState* play) { BgOpenShutter* this = THIS; - s32 params = BGOPENSHUTTER_GET_A(thisx); + s32 transition = DOOR_GET_TRANSITION_ID(thisx); - play->doorCtx.transitionActorList[params].id = -play->doorCtx.transitionActorList[params].id; - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); + play->doorCtx.transitionActorList[transition].id = -play->doorCtx.transitionActorList[transition].id; + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->slidingDoor.dyna.bgId); } void func_80ACAD88(BgOpenShutter* this, PlayState* play) { s32 doorDirection; - if (this->unk_15C != 0) { + if (this->slidingDoor.unk_15C != 0) { Player* player = GET_PLAYER(play); - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); - Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->dyna.actor, player->unk_3BA, 0.0f, 12, 15, 10); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); + Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->slidingDoor.dyna.actor, player->doorBgCamIndex, 0.0f, + 12, 15, 10); this->unk_164 = 0; this->actionFunc = func_80ACAE5C; - this->dyna.actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; } else { Player* player = GET_PLAYER(play); @@ -123,20 +124,20 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) { if (doorDirection > 0) { player->doorType = PLAYER_DOORTYPE_SLIDING; player->doorDirection = doorDirection; - player->doorActor = &this->dyna.actor; + player->doorActor = &this->slidingDoor.dyna.actor; func_80122F28(player); } } } void func_80ACAE5C(BgOpenShutter* this, PlayState* play) { - Math_StepToF(&this->dyna.actor.velocity.y, 15.0f, 3.0f); - if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 120.0f, - this->dyna.actor.velocity.y)) { + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 15.0f, 3.0f); + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y + 120.0f, + this->slidingDoor.dyna.actor.velocity.y)) { this->unk_164++; } if (this->unk_164 >= 10) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); this->actionFunc = func_80ACAEF0; } } @@ -145,20 +146,22 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) { s32 pad; s16 quakeIndex; - Math_StepToF(&this->dyna.actor.velocity.y, 20.0f, 8.0f); - if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, this->dyna.actor.velocity.y)) { - this->dyna.actor.floorHeight = this->dyna.actor.home.pos.y; - Actor_SpawnFloorDustRing(play, &this->dyna.actor, &this->dyna.actor.world.pos, 60.0f, 10, 8.0f, 500, 10, true); - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 20.0f, 8.0f); + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y, + this->slidingDoor.dyna.actor.velocity.y)) { + this->slidingDoor.dyna.actor.floorHeight = this->slidingDoor.dyna.actor.home.pos.y; + Actor_SpawnFloorDustRing(play, &this->slidingDoor.dyna.actor, &this->slidingDoor.dyna.actor.world.pos, 60.0f, + 10, 8.0f, 500, 10, true); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_BIGWALL_BOUND); quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, -32536); Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); Quake_SetDuration(quakeIndex, 10); - Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 180, 20, 100); + Rumble_Request(this->slidingDoor.dyna.actor.xyzDistToPlayerSq, 180, 20, 100); - this->unk_15C = 0; + this->slidingDoor.unk_15C = 0; this->actionFunc = func_80ACAD88; } } @@ -172,14 +175,14 @@ void BgOpenShutter_Update(Actor* thisx, PlayState* play2) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_124); if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_OPEN) { if (this->actionFunc == func_80ACAD88) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); this->actionFunc = func_80ACAE5C; - this->dyna.actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; } this->unk_164 = 0; } else if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_CLOSED) { if (this->actionFunc == func_80ACAE5C) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); this->actionFunc = func_80ACAEF0; } } diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h index f6c6067d4..c035606b1 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h @@ -2,16 +2,14 @@ #define Z_BG_OPEN_SHUTTER_H #include "global.h" - -#define BGOPENSHUTTER_GET_A(thisx) ((u16)((thisx)->params) >> 0xA) +#include "z64door.h" struct BgOpenShutter; typedef void (*BgOpenShutterActionFunc)(struct BgOpenShutter*, PlayState*); typedef struct BgOpenShutter { - /* 0x000 */ DynaPolyActor dyna; - /* 0x15C */ s16 unk_15C; + /* 0x000 */ SlidingDoorActor slidingDoor; /* 0x160 */ BgOpenShutterActionFunc actionFunc; /* 0x164 */ s32 unk_164; } BgOpenShutter; // size = 0x168 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 054b612bc..c8ceed19b 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -1842,16 +1842,16 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sHeadJntSphElementsInit); i++) { if (this->headCollider.elements[i].info.toucherFlags & TOUCH_HIT) { this->headCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT; - player->unk_B84 = this->actor.shape.rot.y; - player->unk_B80 = 20.0f; + player->pushedYaw = this->actor.shape.rot.y; + player->pushedSpeed = 20.0f; } } for (i = 0; i < ARRAY_COUNT(sBodyJntSphElementsInit); i++) { if (this->bodyCollider.elements[i].info.toucherFlags & TOUCH_HIT) { this->bodyCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT; - player->unk_B84 = this->actor.shape.rot.y; - player->unk_B80 = 20.0f; + player->pushedYaw = this->actor.shape.rot.y; + player->pushedSpeed = 20.0f; } } } 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 fcc183ef9..eac8b10ab 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -139,15 +139,17 @@ void DoorShutter_SetupAction(DoorShutter* this, DoorShutterActionFunc actionFunc } s32 func_808A0900(DoorShutter* this, PlayState* play) { - TransitionActorEntry* transitionEntry = &play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)]; + TransitionActorEntry* transitionEntry = + &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]; s8 frontRoom = transitionEntry->sides[0].room; if (frontRoom == transitionEntry->sides[1].room) { - if (ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, this->actor.yawTowardsPlayer)) < 0x4000) { + if (ABS_ALT(BINANG_SUB(this->slidingDoor.dyna.actor.shape.rot.y, + this->slidingDoor.dyna.actor.yawTowardsPlayer)) < 0x4000) { frontRoom = -1; } } - return frontRoom == this->actor.room; + return frontRoom == this->slidingDoor.dyna.actor.room; } s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) { @@ -173,13 +175,13 @@ s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) { } if (doorType == 1) { - if (!Flags_GetClear(play, this->actor.room)) { + if (!Flags_GetClear(play, this->slidingDoor.dyna.actor.room)) { DoorShutter_SetupAction(this, func_808A0F88); this->unk_168 = 1.0f; return true; } } else if ((doorType == 2) || (doorType == 7)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); this->unk_168 = 1.0f; return true; @@ -201,8 +203,8 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { s32 sp24; s32 i; - Actor_ProcessInitChain(&this->actor, sInitChain); - this->doorType = DOORSHUTTER_GET_380(&this->actor); + Actor_ProcessInitChain(&this->slidingDoor.dyna.actor, sInitChain); + this->doorType = DOORSHUTTER_GET_380(&this->slidingDoor.dyna.actor); sp24 = D_808A2240[this->doorType]; if (sp24 < 0) { @@ -216,7 +218,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { sp24 = shutterSceneInfo->index; if (sp24 == 6) { - this->actor.flags |= ACTOR_FLAG_10000000; + this->slidingDoor.dyna.actor.flags |= ACTOR_FLAG_10000000; } } else if (sp24 == 0) { BossDoorInfo* bossDoorInfo = &D_808A22A0[0]; @@ -227,13 +229,13 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { } } - this->unk_15E = bossDoorInfo->index; + this->slidingDoor.unk_15E = bossDoorInfo->index; } else { - this->actor.room = -1; + this->slidingDoor.dyna.actor.room = -1; } if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { - Actor_Kill(&this->actor); + Actor_Kill(&this->slidingDoor.dyna.actor); return; } @@ -241,19 +243,19 @@ 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->actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { this->unk_166 = 10; } } - Actor_SetFocus(&this->actor, 60.0f); + Actor_SetFocus(&this->slidingDoor.dyna.actor, 60.0f); } void DoorShutter_Destroy(Actor* thisx, PlayState* play) { DoorShutter* this = THIS; - if (this->actor.room >= 0) { - s32 transitionActorId = DOORSHUTTER_GET_FC00(&this->actor); + if (this->slidingDoor.dyna.actor.room >= 0) { + s32 transitionActorId = DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor); play->doorCtx.transitionActorList[transitionActorId].id = -play->doorCtx.transitionActorList[transitionActorId].id; @@ -263,8 +265,8 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) { void DoorShutter_SetupType(DoorShutter* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex) && (!R_PLAY_FILL_SCREEN_ON || (R_PLAY_FILL_SCREEN_ALPHA == 0))) { - this->actor.objBankIndex = this->requiredObjBankIndex; - this->actor.draw = DoorShutter_Draw; + this->slidingDoor.dyna.actor.objBankIndex = this->requiredObjBankIndex; + this->slidingDoor.dyna.actor.draw = DoorShutter_Draw; DoorShutter_SetupDoor(this, play); } } @@ -278,7 +280,7 @@ f32 func_808A0D90(PlayState* play, DoorShutter* this, f32 arg2, f32 arg3, f32 ar sp28.y = player->actor.world.pos.y + arg2; sp28.z = player->actor.world.pos.z; - Actor_OffsetOfPointInActorCoords(&this->actor, &sp1C, &sp28); + Actor_OffsetOfPointInActorCoords(&this->slidingDoor.dyna.actor, &sp1C, &sp28); if ((arg3 < fabsf(sp1C.x)) || (arg4 < fabsf(sp1C.y))) { return FLT_MAX; @@ -294,7 +296,7 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { f32 temp_f0 = func_808A0D90(play, this, 0.0f, shutterInfo->unk_0A, shutterInfo->unk_0B); if (fabsf(temp_f0) < 50.0f) { - s16 temp_v0_2 = BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y); + s16 temp_v0_2 = BINANG_SUB(player->actor.shape.rot.y, this->slidingDoor.dyna.actor.shape.rot.y); if (temp_f0 > 0.0f) { temp_v0_2 = 0x8000 - temp_v0_2; @@ -309,8 +311,9 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { } void func_808A0F88(DoorShutter* this, PlayState* play) { - if (Flags_GetClear(play, this->actor.room) || Flags_GetClearTemp(play, this->actor.room)) { - this->csId = this->actor.csId; + if (Flags_GetClear(play, this->slidingDoor.dyna.actor.room) || + Flags_GetClearTemp(play, this->slidingDoor.dyna.actor.room)) { + this->csId = this->slidingDoor.dyna.actor.csId; if (this->doorType == 7) { if (this->csId != CS_ID_NONE) { this->csId = CutsceneManager_GetAdditionalCsId(this->csId); @@ -318,8 +321,8 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { } if (CutsceneManager_IsNext(this->csId)) { - CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); - Flags_SetClear(play, this->actor.room); + CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor); + Flags_SetClear(play, this->slidingDoor.dyna.actor.room); DoorShutter_SetupAction(this, func_808A1784); this->unk_167 = -1; } else { @@ -329,8 +332,8 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; - player->doorActor = &this->actor; - this->actor.textId = 0x1801; + player->doorActor = &this->slidingDoor.dyna.actor; + this->slidingDoor.dyna.actor.textId = 0x1801; func_80122F28(player); } } @@ -339,16 +342,16 @@ void func_808A1080(DoorShutter* this, PlayState* play) { } void func_808A1090(DoorShutter* this, PlayState* play) { - if (this->unk_15C != 0) { + if (this->slidingDoor.unk_15C != 0) { DoorShutter_SetupAction(this, func_808A1684); - this->actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; if (this->unk_166 != 0) { - Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->actor)); + Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor)); if (this->doorType != 5) { gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; - Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { - Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); } } } else { @@ -359,7 +362,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { player->doorType = PLAYER_DOORTYPE_SLIDING; player->doorDirection = doorDirection; - player->doorActor = &this->actor; + player->doorActor = &this->slidingDoor.dyna.actor; if (this->unk_163 == 7) { player->doorTimer = 12; @@ -368,20 +371,21 @@ void func_808A1090(DoorShutter* this, PlayState* play) { } if (this->doorType == 6) { - if (gSaveContext.save.saveInfo.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity < + (DOORSHUTTER_GET_1F(&this->slidingDoor.dyna.actor) * 0x10)) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->actor.textId = 0x14FC; + this->slidingDoor.dyna.actor.textId = 0x14FC; } } else if (this->unk_166 != 0) { if (this->doorType == 5) { if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.mapIndex)) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->actor.textId = 0x1803; + this->slidingDoor.dyna.actor.textId = 0x1803; } player->doorTimer += 10; } else if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->actor.textId = 0x1802; + this->slidingDoor.dyna.actor.textId = 0x1802; } else { player->doorTimer += 10; } @@ -392,7 +396,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { } void func_808A1288(DoorShutter* this, PlayState* play) { - if (this->actor.category == ACTORCAT_DOOR) { + if (this->slidingDoor.dyna.actor.category == ACTORCAT_DOOR) { Player* player = GET_PLAYER(play); s32 sp38 = this->unk_164; s32 sp34 = 0xF; @@ -406,17 +410,18 @@ void func_808A1288(DoorShutter* this, PlayState* play) { this->unk_164 = sp38; this->unk_168 = 0.0f; - Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->actor, player->unk_3BA, this->unk_168, 12, sp34, 10); + Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->slidingDoor.dyna.actor, player->doorBgCamIndex, + this->unk_168, 12, sp34, 10); } } s32 func_808A1340(DoorShutter* this, PlayState* play) { Vec3f sp2C; - if (this->actor.velocity.y == 0.0f) { + if (this->slidingDoor.dyna.actor.velocity.y == 0.0f) { func_808A1288(this, play); if (this->unk_163 != 7) { - Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_OPEN); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); } } @@ -424,20 +429,22 @@ s32 func_808A1340(DoorShutter* this, PlayState* play) { s32 pad; if (this->unk_163 == 7) { - func_800B9010(&this->actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG); + func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG); } - Lib_Vec3f_TranslateAndRotateY(&this->actor.home.pos, this->actor.shape.rot.y, + Lib_Vec3f_TranslateAndRotateY(&this->slidingDoor.dyna.actor.home.pos, this->slidingDoor.dyna.actor.shape.rot.y, (this->unk_163 == 7) ? &D_808A22C4 : &D_808A22D0, &sp2C); - Math_StepToF(&this->actor.velocity.y, 5.0f, 0.5f); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f); - if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &sp2C, this->actor.velocity.y) == 0.0f) { + if (Math_Vec3f_StepToXZ(&this->slidingDoor.dyna.actor.world.pos, &sp2C, + this->slidingDoor.dyna.actor.velocity.y) == 0.0f) { return true; } } else { - Math_StepToF(&this->actor.velocity.y, 15.0f, 3.0f); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 15.0f, 3.0f); - if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y + 200.0f, this->actor.velocity.y)) { + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y + 200.0f, + this->slidingDoor.dyna.actor.velocity.y)) { return true; } } @@ -449,13 +456,13 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { if (temp == this->unk_168) { if (arg2 == 1.0f) { - Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_METALDOOR_CLOSE); } else { - Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_OPEN); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_METALDOOR_OPEN); } if ((this->csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->csId)) { - func_800B724C(play, &this->actor, PLAYER_CSMODE_1); + func_800B724C(play, &this->slidingDoor.dyna.actor, PLAYER_CSMODE_1); } } @@ -467,10 +474,10 @@ 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->actor))) { - this->csId = this->actor.csId; + if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + this->csId = this->slidingDoor.dyna.actor.csId; if (CutsceneManager_IsNext(this->csId)) { - CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor); DoorShutter_SetupAction(this, func_808A1784); this->unk_167 = -1; } else { @@ -480,15 +487,15 @@ void func_808A1548(DoorShutter* this, PlayState* play) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; - player->doorActor = &this->actor; - this->actor.textId = 0x1800; + player->doorActor = &this->slidingDoor.dyna.actor; + this->slidingDoor.dyna.actor.textId = 0x1800; func_80122F28(player); } } } void func_808A1618(DoorShutter* this, PlayState* play) { - if ((this->unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) { + if ((this->slidingDoor.unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); } else { func_808A1090(this, play); @@ -505,14 +512,14 @@ void func_808A1684(DoorShutter* this, PlayState* play) { phi_f0 = 50.0f; } - if (phi_f0 < this->actor.xzDistToPlayer) { + if (phi_f0 < this->slidingDoor.dyna.actor.xzDistToPlayer) { if (this->unk_163 == 7) { - this->actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; } else { if (DoorShutter_SetupDoor(this, play)) { - this->actor.velocity.y = 30.0f; + this->slidingDoor.dyna.actor.velocity.y = 30.0f; } - Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); } DoorShutter_SetupAction(this, func_808A1B48); } @@ -521,7 +528,7 @@ void func_808A1684(DoorShutter* this, PlayState* play) { void func_808A1784(DoorShutter* this, PlayState* play) { if (this->unk_167 != 0) { - if (func_800F22C4(this->csId, &this->actor) != 0) { + if (func_800F22C4(this->csId, &this->slidingDoor.dyna.actor) != 0) { if (this->unk_167 < 0) { if ((play->state.frames % 2) != 0) { this->unk_167++; @@ -545,16 +552,18 @@ void func_808A1784(DoorShutter* this, PlayState* play) { void func_808A1884(DoorShutter* this, PlayState* play) { Player* player = GET_PLAYER(play); - s8 room = this->actor.room; + s8 room = this->slidingDoor.dyna.actor.room; Vec3f sp44; - if (this->actor.room >= 0) { - Actor_OffsetOfPointInActorCoords(&this->actor, &sp44, &player->actor.world.pos); + if (this->slidingDoor.dyna.actor.room >= 0) { + Actor_OffsetOfPointInActorCoords(&this->slidingDoor.dyna.actor, &sp44, &player->actor.world.pos); - this->actor.room = - play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)].sides[(sp44.z < 0.0f) ? 0 : 1].room; + this->slidingDoor.dyna.actor.room = + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)] + .sides[(sp44.z < 0.0f) ? 0 : 1] + .room; - if (room != this->actor.room) { + if (room != this->slidingDoor.dyna.actor.room) { Room temp = play->roomCtx.curRoom; play->roomCtx.curRoom = play->roomCtx.prevRoom; @@ -564,8 +573,8 @@ void func_808A1884(DoorShutter* this, PlayState* play) { func_8012EBF8(play, &play->roomCtx); } - this->unk_15C = 0; - this->actor.velocity.y = 0.0f; + this->slidingDoor.unk_15C = 0; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_800)) { DoorShutter_SetupAction(this, func_808A1C50); @@ -580,20 +589,22 @@ void func_808A1884(DoorShutter* this, PlayState* play) { s32 func_808A1A70(DoorShutter* this) { if (this->unk_163 == 7) { if (this->unk_163 == 7) { - func_800B9010(&this->actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG); + func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG); } - Math_StepToF(&this->actor.velocity.y, 5.0f, 0.5f); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f); - if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->actor.home.pos, this->actor.velocity.y) == 0.0f) { + if (Math_Vec3f_StepToXZ(&this->slidingDoor.dyna.actor.world.pos, &this->slidingDoor.dyna.actor.home.pos, + this->slidingDoor.dyna.actor.velocity.y) == 0.0f) { return true; } } else { - if (this->actor.velocity.y < 20.0f) { - Math_StepToF(&this->actor.velocity.y, 20.0f, 8.0f); + if (this->slidingDoor.dyna.actor.velocity.y < 20.0f) { + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 20.0f, 8.0f); } - if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, this->actor.velocity.y)) { + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y, + this->slidingDoor.dyna.actor.velocity.y)) { return true; } } @@ -604,18 +615,19 @@ void func_808A1B48(DoorShutter* this, PlayState* play) { s16 quakeIndex; if (func_808A1A70(this)) { - if (this->actor.velocity.y > 20.0f) { - this->actor.floorHeight = this->actor.home.pos.y; - Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 45.0f, 10, 8.0f, 500, 10, 0); + if (this->slidingDoor.dyna.actor.velocity.y > 20.0f) { + this->slidingDoor.dyna.actor.floorHeight = this->slidingDoor.dyna.actor.home.pos.y; + Actor_SpawnFloorDustRing(play, &this->slidingDoor.dyna.actor, &this->slidingDoor.dyna.actor.world.pos, + 45.0f, 10, 8.0f, 500, 10, 0); } - Actor_PlaySfx(&this->actor, NA_SE_EV_BIGWALL_BOUND); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_BIGWALL_BOUND); quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, -32536); Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); Quake_SetDuration(quakeIndex, 10); - Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100); + Rumble_Request(this->slidingDoor.dyna.actor.xyzDistToPlayerSq, 180, 20, 100); func_808A1884(this, play); } @@ -639,7 +651,9 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_163 == 7) { - this->actor.home.rot.z = Math_Vec3f_DistXZ(&this->actor.home.pos, &this->actor.world.pos) * -100.0f; + this->slidingDoor.dyna.actor.home.rot.z = + Math_Vec3f_DistXZ(&this->slidingDoor.dyna.actor.home.pos, &this->slidingDoor.dyna.actor.world.pos) * + -100.0f; } } } @@ -652,8 +666,9 @@ s32 func_808A1D68(DoorShutter* this, PlayState* play) { return true; } - temp_a0 = BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &play->view.eye), this->actor.shape.rot.y); - temp_a1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); + temp_a0 = BINANG_SUB(Actor_WorldYawTowardPoint(&this->slidingDoor.dyna.actor, &play->view.eye), + this->slidingDoor.dyna.actor.shape.rot.y); + temp_a1 = BINANG_SUB(this->slidingDoor.dyna.actor.yawTowardsPlayer, this->slidingDoor.dyna.actor.shape.rot.y); temp_a0 = ABS_ALT(temp_a0); temp_a1 = ABS_ALT(temp_a1); @@ -678,26 +693,27 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { if (this->unk_164 == 7) { Matrix_Translate(0.0f, 64.96f, 0.0f, MTXMODE_APPLY); - Matrix_RotateZS(this->actor.home.rot.z, MTXMODE_APPLY); + Matrix_RotateZS(this->slidingDoor.dyna.actor.home.rot.z, MTXMODE_APPLY); Matrix_Translate(0.0f, -64.96f, 0.0f, MTXMODE_APPLY); } if (sp44->unk_04 != 0) { TransitionActorEntry* transitionEntry = - &play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)]; + &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]; if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { - s16 yaw = this->actor.shape.rot.y - Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos); + s16 yaw = this->slidingDoor.dyna.actor.shape.rot.y - + Math_Vec3f_Yaw(&play->view.eye, &this->slidingDoor.dyna.actor.world.pos); if (ABS_ALT(yaw) < 0x4000) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } - } else if (this->actor.room == transitionEntry->sides[0].room) { + } else if (this->slidingDoor.dyna.actor.room == transitionEntry->sides[0].room) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } } else if (this->doorType == 5) { - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808A22DC[this->unk_15E])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808A22DC[this->slidingDoor.unk_15E])); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 7f18e0546..abdf0ce84 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h @@ -2,6 +2,7 @@ #define Z_DOOR_SHUTTER_H #include "global.h" +#include "z64door.h" struct DoorShutter; @@ -10,14 +11,10 @@ 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_380(thisx) (((thisx)->params >> 7) & 7) -#define DOORSHUTTER_GET_FC00(thisx) ((u16)(thisx)->params >> 0xA) typedef struct DoorShutter { - /* 0x0000 */ Actor actor; - /* 0x0144 */ UNK_TYPE1 unk144[0x18]; - /* 0x015C */ s16 unk_15C; - /* 0x015E */ s16 unk_15E; - /* 0x0160 */ s16 csId; + /* 0x000 */ SlidingDoorActor slidingDoor; + /* 0x160 */ s16 csId; /* 0x0162 */ u8 doorType; /* 0x0163 */ u8 unk_163; /* 0x0164 */ u8 unk_164; 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 701b38639..af4f27aea 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h @@ -7,7 +7,8 @@ struct DoorSpiral; typedef struct DoorSpiral { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0xC]; + /* 0x144 */ u8 shouldClimb; + /* 0x145 */ UNK_TYPE1 unk_145[0xB]; } DoorSpiral; // size = 0x150 #endif // Z_DOOR_SPIRAL_H diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index 2833477e4..02dad6c0c 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -326,7 +326,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { distanceTraveled = this->distanceTraveled; gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); - if (player->unk_B08[0] >= 0.85f) { + if (player->unk_B08 >= 0.85f) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0); } else { gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 0); @@ -339,7 +339,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (*distanceTraveled * 255.0f)); aux = 1.0f - SQ(*distanceTraveled); - Matrix_Mult(&player->mf_CC4, MTXMODE_NEW); + Matrix_Mult(&player->leftHandMf, MTXMODE_NEW); Matrix_Translate(initialPositions->x * ((this->dx * aux) + (1.0f - this->dx)), (initialPositions->y * (1.0f - *distanceTraveled)) + 320.0f, (initialPositions->z * (1.0f - *distanceTraveled)) + -20.0f, MTXMODE_APPLY); 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 fbe4c27cf..03123fedc 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 @@ -4,7 +4,6 @@ * Description: Wave Created by Turtle Awakening */ -#include "prevent_bss_reordering.h" #include "z_eff_kamejima_wave.h" #include "objects/object_kamejima/object_kamejima.h" 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 31d137299..261b47bd4 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -422,8 +422,9 @@ void func_808B0894(EnAm* this, PlayState* play) { this->armosYaw = this->actor.yawTowardsPlayer; func_808B0208(this, play); if (this->explodeTimer == 1) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 2, 0); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 2, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; } diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index b94e3ecb5..aff4a9de6 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -78,26 +78,26 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { EnArrow* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - if (this->actor.params == -ENARROW_8) { + if (this->actor.params == -ARROW_TYPE_DEKU_NUT) { this->unk_263 = 1; - this->actor.params = ENARROW_8; + this->actor.params = ARROW_TYPE_DEKU_NUT; } - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { SkelAnime_Init(play, &this->arrow.skelAnime, &gameplay_keep_Skel_014560, &gameplay_keep_Anim_0128BC, this->arrow.jointTable, this->arrow.jointTable, 5); - if (this->actor.params < ENARROW_3) { - if (this->actor.params == ENARROW_1) { + if (this->actor.params < ARROW_TYPE_FIRE) { + if (this->actor.params == ARROW_TYPE_NORMAL_HORSE) { D_8088C234.elemDuration = 4; } else { D_8088C234.elemDuration = 16; } Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C234); - } else if (this->actor.params == ENARROW_3) { + } else if (this->actor.params == ARROW_TYPE_FIRE) { Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C258); - } else if (this->actor.params == ENARROW_4) { + } else if (this->actor.params == ARROW_TYPE_ICE) { Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C27C); - } else if (this->actor.params == ENARROW_5) { + } else if (this->actor.params == ARROW_TYPE_LIGHT) { Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C2A0); } } @@ -105,20 +105,20 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { Collider_InitQuad(play, &this->collider); Collider_SetQuad(play, &this->collider, &this->actor, &sQuadInit); - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { this->collider.info.toucherFlags &= ~(TOUCH_SFX_WOOD | TOUCH_SFX_HARD); this->collider.info.toucherFlags |= 0; } - if (this->actor.params < ENARROW_0) { + if (this->actor.params < ARROW_TYPE_NORMAL_LIT) { this->collider.base.atFlags = (AT_TYPE_ENEMY | AT_ON); } else { this->collider.info.toucher.dmgFlags = Actor_GetArrowDmgFlags(this->actor.params); - if (this->actor.params == ENARROW_8) { + if (this->actor.params == ARROW_TYPE_DEKU_NUT) { this->collider.info.toucher.damage = 1; } - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { Actor_SetScale(&this->actor, 1.0f); } } @@ -128,7 +128,7 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { void EnArrow_Destroy(Actor* thisx, PlayState* play) { EnArrow* this = THIS; - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { Effect_Destroy(play, this->unk_240); } @@ -138,7 +138,7 @@ void EnArrow_Destroy(Actor* thisx, PlayState* play) { this->unk_264->flags &= ~ACTOR_FLAG_8000; } - if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6) && (this->actor.child == NULL)) { + if (ARROW_IS_MAGICAL(this->actor.params) && (this->actor.child == NULL)) { Magic_Reset(play); } } @@ -153,7 +153,7 @@ void func_8088A594(EnArrow* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->actor.parent != NULL) { - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (Math_SmoothStepToF(&this->bubble.unk_144, 16.0f, 0.07f, 1.8f, 0.0f) > 0.5f) { func_800B9010(&this->actor, NA_SE_PL_DEKUNUTS_BUBLE_BREATH - SFX_FLAG); return; @@ -166,8 +166,8 @@ void func_8088A594(EnArrow* this, PlayState* play) { } } } else { - if ((this->actor.params != ENARROW_8) && (player->unk_D57 == 0)) { - if (this->actor.params == ENARROW_7) { + if ((this->actor.params != ARROW_TYPE_DEKU_NUT) && (player->unk_D57 == 0)) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { Magic_Reset(play); } Actor_Kill(&this->actor); @@ -175,22 +175,22 @@ void func_8088A594(EnArrow* this, PlayState* play) { } switch (this->actor.params) { - case ENARROW_6: + case ARROW_TYPE_SLINGSHOT: Player_PlaySfx(player, NA_SE_IT_SLING_SHOT); break; - case ENARROW_0: - case ENARROW_1: - case ENARROW_2: + case ARROW_TYPE_NORMAL_LIT: + case ARROW_TYPE_NORMAL_HORSE: + case ARROW_TYPE_NORMAL: Player_PlaySfx(player, NA_SE_IT_ARROW_SHOT); break; - case ENARROW_3: - case ENARROW_4: - case ENARROW_5: + case ARROW_TYPE_FIRE: + case ARROW_TYPE_ICE: + case ARROW_TYPE_LIGHT: Player_PlaySfx(player, NA_SE_IT_MAGIC_ARROW_SHOT); - case ENARROW_7: + case ARROW_TYPE_DEKU_BUBBLE: Player_PlaySfx(player, NA_SE_PL_DEKUNUTS_FIRE); break; } @@ -198,13 +198,13 @@ void func_8088A594(EnArrow* this, PlayState* play) { this->actionFunc = func_8088ACE0; Math_Vec3f_Copy(&this->unk_228, &this->actor.world.pos); - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { this->bubble.unk_144 = CLAMP_MIN(this->bubble.unk_144, 3.5f); func_8088A514(this); this->unk_260 = 99; Magic_Reset(play); - } else if (this->actor.params >= ENARROW_6) { - if ((this->actor.params == ENARROW_8) && (this->actor.world.rot.x < 0)) { + } else if (!ARROW_IS_ARROW(this->actor.params)) { + if ((this->actor.params == ARROW_TYPE_DEKU_NUT) && (this->actor.world.rot.x < 0)) { Actor_SetScale(&this->actor, 0.009f); this->unk_260 = 40; } else { @@ -295,14 +295,14 @@ void func_8088AA98(EnArrow* this, PlayState* play) { EffectSsGRipple_Spawn(play, &sp44, 100, 500, 4); EffectSsGRipple_Spawn(play, &sp44, 100, 500, 8); - if ((this->actor.params == ENARROW_4) || (this->actor.params == ENARROW_3)) { - if ((this->actor.params == ENARROW_4) && (func_8088B6B0 != this->actionFunc)) { + if ((this->actor.params == ARROW_TYPE_ICE) || (this->actor.params == ARROW_TYPE_FIRE)) { + if ((this->actor.params == ARROW_TYPE_ICE) && (func_8088B6B0 != this->actionFunc)) { Actor_Spawn(&play->actorCtx, play, ACTOR_BG_ICEFLOE, sp44.x, sp44.y, sp44.z, 0, 0, 0, 300); Actor_Kill(&this->actor); return; } - this->actor.params = ENARROW_2; + this->actor.params = ARROW_TYPE_NORMAL; this->collider.info.toucher.dmgFlags = 0x20; if (this->actor.child != NULL) { @@ -329,9 +329,9 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { s32 sp50; if ((DECR(this->unk_260) == 0) || - ((this->actor.params == ENARROW_7) && + ((this->actor.params == ARROW_TYPE_DEKU_BUBBLE) && ((this->unk_262 != 0) || (phi_a2 = (this->collider.base.atFlags & AT_HIT) != 0)))) { - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (phi_a2 && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4) && (this->collider.base.atFlags & AT_BOUNCED)) { if ((this->collider.base.at != NULL) && (this->collider.base.at->id != ACTOR_OBJ_SYOKUDAI)) { @@ -361,18 +361,18 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { return; } - sp50 = - (this->actor.params != ENARROW_0) && (this->actor.params < ENARROW_8) && (this->collider.base.atFlags & AT_HIT); + sp50 = (this->actor.params != ARROW_TYPE_NORMAL_LIT) && (this->actor.params < ARROW_TYPE_DEKU_NUT) && + (this->collider.base.atFlags & AT_HIT); if (sp50 || (this->unk_262 != 0)) { - if (this->actor.params >= ENARROW_6) { + if (!ARROW_IS_ARROW(this->actor.params)) { if (sp50) { this->actor.world.pos.x = (this->actor.world.pos.x + this->actor.prevPos.x) * 0.5f; this->actor.world.pos.y = (this->actor.world.pos.y + this->actor.prevPos.y) * 0.5f; this->actor.world.pos.z = (this->actor.world.pos.z + this->actor.prevPos.z) * 0.5f; } - if (this->actor.params == ENARROW_8) { + if (this->actor.params == ARROW_TYPE_DEKU_NUT) { R_TRANS_FADE_FLASH_ALPHA_STEP = -1; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_M_FIRE1, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, this->actor.speed == 0.0f); @@ -408,12 +408,12 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { } else if (this->unk_262 != 0) { this->actionFunc = func_8088B630; Animation_PlayOnce(&this->arrow.skelAnime, &gameplay_keep_Anim_0128BC); - if (this->actor.params >= ENARROW_0) { + if (this->actor.params >= ARROW_TYPE_NORMAL_LIT) { this->unk_260 = 60; } else { this->unk_260 = 20; } - if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) { + if (ARROW_IS_MAGICAL(this->actor.params)) { this->actor.draw = NULL; } Actor_PlaySfx(&this->actor, NA_SE_IT_ARROW_STICK_OBJ); @@ -422,7 +422,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { } } else { func_8088AA98(this, play); - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (this->bubble.unk_149 == 0) { sp78 = sqrtf(SQ(this->actor.speed) + SQ(this->actor.velocity.y)); sp74 = Math_SinS(this->actor.world.rot.y) * this->actor.speed; @@ -473,7 +473,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { this->actor.wallBgId = spA8; } - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y); } } @@ -540,21 +540,27 @@ void EnArrow_Update(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); if ((this->unk_263 != 0) || - ((this->actor.params >= ENARROW_0) && ((this->actor.params == ENARROW_7) || (player->unk_D57 != 0))) || + ((this->actor.params >= ARROW_TYPE_NORMAL_LIT) && + ((this->actor.params == ARROW_TYPE_DEKU_BUBBLE) || (player->unk_D57 != 0))) || !Player_InBlockingCsMode(play, player)) { this->actionFunc(this, play); } - if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) { - s16 sp44[] = { ACTOR_ARROW_FIRE, ACTOR_ARROW_ICE, ACTOR_ARROW_LIGHT }; + if (ARROW_IS_MAGICAL(this->actor.params)) { + s16 sp44[] = { + ACTOR_ARROW_FIRE, // ARROW_MAGIC_FIRE + ACTOR_ARROW_ICE, // ARROW_MAGIC_ICE + ACTOR_ARROW_LIGHT, // ARROW_MAGIC_LIGHT + }; if (this->actor.child == NULL) { - Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, sp44[this->actor.params - ENARROW_3], + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, sp44[ARROW_GET_MAGIC_FROM_TYPE(this->actor.params)], this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } - } else if (this->actor.params == ENARROW_0) { + } else if (this->actor.params == ARROW_TYPE_NORMAL_LIT) { func_800B0EB0(play, &this->unk_234, &D_8088C2CC, &D_8088C2D8, &D_8088C2E4, &D_8088C2E8, 100, 0, 8); } + Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.prevPos); } @@ -579,8 +585,8 @@ void func_8088B88C(PlayState* play, EnArrow* this, EnArrowUnkStruct* arg2) { } Matrix_MultVec3f(&sp4C[0], &sp40); Matrix_MultVec3f(&sp4C[1], &sp34); - if (this->actor.params < ENARROW_8) { - sp30 = this->actor.params < ENARROW_6; + if (this->actor.params < ARROW_TYPE_DEKU_NUT) { + sp30 = ARROW_IS_ARROW(this->actor.params); if (this->unk_264 == NULL) { sp30 &= func_80126440(play, &this->collider, &this->unk_244, &sp40, &sp34); } else if (sp30 && (sp40.x == this->unk_244.tip.x) && (sp40.y == this->unk_244.tip.y) && @@ -635,11 +641,11 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { EnArrow* this = THIS; s32 phi_v0; - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { func_8012C28C(play->state.gfxCtx); SkelAnime_DrawLod(play, this->arrow.skelAnime.skeleton, this->arrow.skelAnime.jointTable, NULL, NULL, &this->actor, this->actor.projectedPos.z < 160.0f ? 0 : 1); - } else if (this->actor.params == ENARROW_7) { + } else if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { s32 spA4 = 255 - (s32)(this->bubble.unk_144 * 4.0f); f32 spA0 = (this->actor.speed * 0.1f) + 1.0f; f32 sp9C = (1.0f / spA0); @@ -697,7 +703,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { gSPClearGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING); - if (this->actor.params == ENARROW_6) { + if (this->actor.params == ARROW_TYPE_SLINGSHOT) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 0, 255, 255, sp63); sp5C = 50.0f; @@ -737,5 +743,6 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } + func_8088B88C(play, this, &D_8088C2EC[0]); } diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h index 313dd86bb..14d5bef94 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h @@ -7,17 +7,30 @@ struct EnArrow; typedef void (*EnArrowActionFunc)(struct EnArrow*, PlayState*); -enum { - /* 0 */ ENARROW_0, // Lit arrow - /* 1 */ ENARROW_1, // Horse arrow - /* 2 */ ENARROW_2, // Normal arrow - /* 3 */ ENARROW_3, // Fire arrow - /* 4 */ ENARROW_4, // Ice arrow - /* 5 */ ENARROW_5, // Light arrow - /* 6 */ ENARROW_6, // ? - /* 7 */ ENARROW_7, // Deku bubble - /* 8 */ ENARROW_8, // Deku Nut -}; +typedef enum ArrowType { + /* 0 */ ARROW_TYPE_NORMAL_LIT, // Normal arrow lit on fire + /* 1 */ ARROW_TYPE_NORMAL_HORSE, // Normal arrow shot while riding a horse + /* 2 */ ARROW_TYPE_NORMAL, + /* 3 */ ARROW_TYPE_FIRE, + /* 4 */ ARROW_TYPE_ICE, + /* 5 */ ARROW_TYPE_LIGHT, + /* 6 */ ARROW_TYPE_SLINGSHOT, + /* 7 */ ARROW_TYPE_DEKU_BUBBLE, + /* 8 */ ARROW_TYPE_DEKU_NUT +} ArrowType; + +#define ARROW_IS_MAGICAL(arrowType) (((arrowType) >= ARROW_TYPE_FIRE) && ((arrowType) <= ARROW_TYPE_LIGHT)) +#define ARROW_GET_MAGIC_FROM_TYPE(arrowType) (s32)((arrowType) - ARROW_TYPE_FIRE) +#define ARROW_IS_ARROW(arrowType) ((arrowType) < ARROW_TYPE_SLINGSHOT) + +typedef enum ArrowMagic { + /* -1 */ ARROW_MAGIC_INVALID = -1, + /* 0 */ ARROW_MAGIC_FIRE = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_FIRE), + /* 1 */ ARROW_MAGIC_ICE = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_ICE), + /* 2 */ ARROW_MAGIC_LIGHT = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_LIGHT), + /* 3 */ ARROW_MAGIC_DEKU_BUBBLE // Only used in Player. Does not map to ARROW_TYPE_SLINGSHOT +} ArrowMagic; + typedef struct { /* 0x144 */ SkelAnime skelAnime; 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 17ebe10f7..cb9c6e3ec 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -348,7 +348,7 @@ void EnBom_Explode(EnBom* this, PlayState* play) { this->collider2.elements->dim.worldSphere.radius = D_80872E8C[this->isPowderKeg]; if (this->timer == 7) { - this->collider2.base.atFlags &= ~OC1_TYPE_1; + this->collider2.base.atFlags &= ~AT_TYPE_ENEMY; } if (this->actor.params == BOMB_TYPE_EXPLOSION) { 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 bf568cd6a..40558a919 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -11,11 +11,17 @@ typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*); #define ENBOM_GETZ_80(thisx) ((thisx)->shape.rot.z & 0x80) #define ENBOM_GETZ_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8) -typedef enum { +typedef enum BombType { /* 0 */ BOMB_TYPE_BODY, /* 1 */ BOMB_TYPE_EXPLOSION, } BombType; +// Passed via x rotation +typedef enum EnBomExplosiveType { + /* 0 */ BOMB_EXPLOSIVE_TYPE_BOMB, + /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG, +} EnBomExplosiveType; + typedef struct EnBom { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider1; 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 a2246b442..8d2461649 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 @@ -326,7 +326,7 @@ void EnBomChu_Explode(EnBomChu* this, PlayState* play) { s32 i; bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); this->shouldTimerCountDown = true; this->isMoving = false; 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 4abfad7b1..eacaa3dce 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -164,7 +164,7 @@ void EnBoom_Destroy(Actor* thisx, PlayState* play) { } void func_808A2918(EnBoom* this, PlayState* play) { - Actor* sp7C; + Actor* targetActor; Player* player = GET_PLAYER(play); s32 sp74; s16 sp72; @@ -175,25 +175,26 @@ void func_808A2918(EnBoom* this, PlayState* play) { f32 sp64; f32 distXYZ; - sp7C = this->player; + targetActor = this->moveTo; - if (sp7C != NULL) { - sp72 = Actor_WorldYawTowardPoint(&this->actor, &sp7C->focus.pos); + if (targetActor != NULL) { + sp72 = Actor_WorldYawTowardPoint(&this->actor, &targetActor->focus.pos); sp70 = this->actor.world.rot.y - sp72; - sp6E = Actor_WorldPitchTowardPoint(&this->actor, &sp7C->focus.pos); + sp6E = Actor_WorldPitchTowardPoint(&this->actor, &targetActor->focus.pos); sp6C = this->actor.world.rot.x - sp6E; - sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &sp7C->focus.pos)) * 0.005f; + sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &targetActor->focus.pos)) * 0.005f; if (sp64 < 0.12f) { sp64 = 0.12f; } - if ((&player->actor != sp7C) && ((sp7C->update == NULL) || ((this->unk_1CF < 0) && (ABS_ALT(sp70) > 0x4000)))) { - this->player = NULL; + if ((&player->actor != targetActor) && + ((targetActor->update == NULL) || ((this->unk_1CF < 0) && (ABS_ALT(sp70) > 0x4000)))) { + this->moveTo = NULL; } else { if (this->unk_1CE != 0) { this->unk_1CE--; - this->actor.world.rot.y += (this->actor.params == 0) ? 0x190 : -0x190; + this->actor.world.rot.y += (this->actor.params == ZORA_BOOMERANG_LEFT) ? 0x190 : -0x190; } else { if (this->unk_1CF > 0) { this->unk_1CF--; @@ -242,7 +243,7 @@ void func_808A2918(EnBoom* this, PlayState* play) { if (sp74 != 0) { this->actor.world.rot.x = -this->actor.world.rot.x; this->actor.world.rot.y += 0x8000; - this->player = &player->actor; + this->moveTo = &player->actor; this->unk_1CC = 0; } } @@ -250,34 +251,34 @@ void func_808A2918(EnBoom* this, PlayState* play) { if (this->unk_1CC <= 16) { distXYZ = Math_Vec3f_DistXYZ(&this->actor.world.pos, &player->actor.focus.pos); - if (&player->actor != this->player) { - if (this->player == 0) { + if (&player->actor != this->moveTo) { + if (this->moveTo == 0) { this->unk_1CE = 8; } - this->player = &player->actor; + this->moveTo = &player->actor; } if (distXYZ < 40.0f) { - sp7C = this->unk_1C8; - if (sp7C != NULL) { - Math_Vec3f_Copy(&sp7C->world.pos, &player->actor.world.pos); - if (sp7C->id == ACTOR_EN_ITEM00) { - sp7C->gravity = -0.9f; - sp7C->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH); + targetActor = this->unk_1C8; + if (targetActor != NULL) { + Math_Vec3f_Copy(&targetActor->world.pos, &player->actor.world.pos); + if (targetActor->id == ACTOR_EN_ITEM00) { + targetActor->gravity = -0.9f; + targetActor->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH); } else { - sp7C->flags &= ~ACTOR_FLAG_2000; + targetActor->flags &= ~ACTOR_FLAG_2000; } } Actor_Kill(&this->actor); } } - sp7C = this->unk_1C8; - if (sp7C != NULL) { - if (sp7C->update == NULL) { + targetActor = this->unk_1C8; + if (targetActor != NULL) { + if (targetActor->update == NULL) { this->unk_1C8 = NULL; } else { - Math_Vec3f_Copy(&sp7C->world.pos, &this->actor.world.pos); + Math_Vec3f_Copy(&targetActor->world.pos, &this->actor.world.pos); } } } @@ -298,7 +299,7 @@ void EnBoom_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, 0.0f); } - if (this->actor.params != 0) { + if (this->actor.params != ZORA_BOOMERANG_LEFT) { this->unk_1CD--; } else { this->unk_1CD++; @@ -326,7 +327,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_APPLY); - Matrix_RotateZS((this->actor.params != 0) ? 0x1F40 : -0x1F40, MTXMODE_APPLY); + Matrix_RotateZS((this->actor.params != ZORA_BOOMERANG_LEFT) ? 0x1F40 : -0x1F40, MTXMODE_APPLY); Matrix_RotateXS(this->actor.world.rot.x, MTXMODE_APPLY); Matrix_MultVec3f(&sp58->unk_04, &sp4C); Matrix_MultVec3f(&sp58->unk_10, &sp40); diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.h b/src/overlays/actors/ovl_En_Boom/z_en_boom.h index e5e3fa2b3..7bae2b150 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.h +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.h @@ -3,6 +3,11 @@ #include "global.h" +typedef enum { + /* 0 */ ZORA_BOOMERANG_LEFT, + /* 1 */ ZORA_BOOMERANG_RIGHT +} EnBoomType; + struct EnBoom; typedef void (*EnBoomActionFunc)(struct EnBoom*, PlayState*); @@ -10,7 +15,7 @@ typedef void (*EnBoomActionFunc)(struct EnBoom*, PlayState*); typedef struct EnBoom { /* 0x000 */ Actor actor; /* 0x144 */ ColliderQuad collider; - /* 0x1C4 */ Actor* player; + /* 0x1C4 */ Actor* moveTo; /* 0x1C8 */ Actor* unk_1C8; /* 0x1CC */ u8 unk_1CC; /* 0x1CD */ u8 unk_1CD; diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index 05072da72..4055399e2 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -416,7 +416,7 @@ void EnButte_Update(Actor* thisx, PlayState* play) { this->unk_258 += 0x600; if (ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) { - if (GET_PLAYER(play)->meleeWeaponState == 0) { + if (GET_PLAYER(play)->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) { if (this->unk_252 > 0) { this->unk_252--; } 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 6f7d32de1..def6dd27a 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 @@ -203,7 +203,8 @@ void func_80AFE25C(EnColMan* this, PlayState* play) { CLEAR_TAG_SMALL_EXPLOSION); } else { EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.y, this->actor.world.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; 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 535b0d65f..8446ff413 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -438,8 +438,9 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { return true; } - if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && this->actor.isTargeted && - (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && Player_IsFacingActor(&this->actor, 0x2000, play)) { + if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + this->actor.isTargeted && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && + Player_IsFacingActor(&this->actor, 0x2000, play)) { if (Rand_ZeroOne() < 0.5f) { func_8089C024(this, 2); } else { 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 a57814337..c2fd7acf1 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -914,7 +914,8 @@ void func_808787B0(EnDodongo* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { if (this->timer == 0) { EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.y, this->actor.world.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; } 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 e2b225e23..47a7bcd34 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -15,7 +15,6 @@ #include "objects/object_wdor03/object_wdor03.h" #include "objects/object_wdor04/object_wdor04.h" #include "objects/object_wdor05/object_wdor05.h" -#include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_numa_obj/object_numa_obj.h" #include "objects/object_kaizoku_obj/object_kaizoku_obj.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" @@ -387,21 +386,22 @@ static Gfx* D_808679A4[14][2] = { void EnDoor_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; s32 objectBankIndex; - EnDoorInfo* objectInfo = sObjInfo; + EnDoorInfo* objectInfo = &sObjInfo[0]; EnDoor* this = THIS; s32 i; - Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + Actor_ProcessInitChain(&this->knobDoor.dyna.actor, sInitChain); - this->unk_1A4 = ENDOOR_GET_PARAMS_7(thisx); + this->doorType = ENDOOR_GET_TYPE(thisx); this->switchFlag = ENDOOR_GET_PARAMS_7F(thisx); - if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) { - DynaPolyActor_Init(&this->dyna, 0); - DynaPolyActor_LoadMesh(play, &this->dyna, &gDoorCol); + if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { + DynaPolyActor_Init(&this->knobDoor.dyna, 0); + DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol); } - SkelAnime_Init(play, &this->skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable, this->limbTable, 5); - if (this->unk_1A4 == 5) { + 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]; } else { for (i = 0; i < ARRAY_COUNT(sObjInfo) - 34; i++, objectInfo++) { @@ -414,52 +414,53 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { } } - this->dlIndex = objectInfo->dListIndex; + this->knobDoor.dlIndex = objectInfo->dListIndex; objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); if (objectBankIndex < 0) { objectInfo = &sObjInfo[15]; objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); if (objectBankIndex != 0) { - Actor_Kill(&this->dyna.actor); + Actor_Kill(&this->knobDoor.dyna.actor); return; } } - this->requiredObjBankIndex = objectBankIndex; - this->dlIndex = objectInfo->dListIndex; // Set twice? - if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) { + this->knobDoor.requiredObjBankIndex = objectBankIndex; + this->knobDoor.dlIndex = objectInfo->dListIndex; // Set twice? + if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { func_80866A5C(this, play); } else { this->actionFunc = func_80866A5C; } - Actor_SetFocus(&this->dyna.actor, 35.0f); + Actor_SetFocus(&this->knobDoor.dyna.actor, 35.0f); } void EnDoor_Destroy(Actor* thisx, PlayState* play) { EnDoor* this = (EnDoor*)thisx; - if (this->unk_1A4 != 7) { - TransitionActorEntry* transitionEntry = &play->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA]; + if (this->doorType != ENDOOR_TYPE_7) { + TransitionActorEntry* transitionEntry = + &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->knobDoor.dyna.actor)]; if (transitionEntry->id < 0) { transitionEntry->id = -transitionEntry->id; } } else if (this->switchFlag == 0) { - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->knobDoor.dyna.bgId); } } void func_80866A5C(EnDoor* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex)) { - this->dyna.actor.objBankIndex = this->requiredObjBankIndex; + if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) { + this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex; this->actionFunc = func_80866B20; - this->dyna.actor.world.rot.y = 0; - if (this->unk_1A4 == 1) { + this->knobDoor.dyna.actor.world.rot.y = 0; + if (this->doorType == ENDOOR_TYPE_1) { if (!Flags_GetSwitch(play, this->switchFlag)) { this->unk_1A6 = 10; } - } else if ((this->unk_1A4 == 4) && - (Actor_WorldDistXZToActor(&this->dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) { + } else if ((this->doorType == ENDOOR_TYPE_4) && + (Actor_WorldDistXZToActor(&this->knobDoor.dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) { this->actionFunc = func_8086704C; - this->dyna.actor.world.rot.y = -0x1800; + this->knobDoor.dyna.actor.world.rot.y = -0x1800; } } } @@ -468,28 +469,29 @@ void func_80866B20(EnDoor* this, PlayState* play) { static s32 D_80867BC0; Player* player = GET_PLAYER(play); - if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state) && (this->dyna.actor.textId == 0x1821)) { + if (Actor_ProcessTalkRequest(&this->knobDoor.dyna.actor, &play->state) && + (this->knobDoor.dyna.actor.textId == 0x1821)) { D_80867BC0 = true; } - if (this->unk_1A1 != 0) { + if (this->knobDoor.playOpenAnim) { this->actionFunc = func_80867144; - Animation_PlayOnceSetSpeed(&this->skelAnime, sAnimations[this->animIndex], + Animation_PlayOnceSetSpeed(&this->knobDoor.skelAnime, sAnimations[this->knobDoor.animIndex], (player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f); if (this->unk_1A6 != 0) { gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; Flags_SetSwitch(play, this->switchFlag); - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } } else if (this->unk_1A7 != 0) { this->actionFunc = func_80866F94; - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN); + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_OPEN); } else if (!Player_InCsMode(play)) { Vec3f playerPosRelToDoor; - Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos); + Actor_OffsetOfPointInActorCoords(&this->knobDoor.dyna.actor, &playerPosRelToDoor, &player->actor.world.pos); if (D_80867BC0 || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) && (fabsf(playerPosRelToDoor.z) < 50.0f))) { - s16 yawDiff = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y; + s16 yawDiff = player->actor.shape.rot.y - this->knobDoor.dyna.actor.shape.rot.y; if (playerPosRelToDoor.z > 0.0f) { yawDiff = (0x8000 - yawDiff); @@ -497,51 +499,52 @@ void func_80866B20(EnDoor* this, PlayState* play) { if (ABS_ALT(yawDiff) < 0x3000) { player->doorType = PLAYER_DOORTYPE_HANDLE; player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f; - player->doorActor = &this->dyna.actor; + player->doorActor = &this->knobDoor.dyna.actor; if (this->unk_1A6 != 0) { if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->dyna.actor.textId = 0x1802; + this->knobDoor.dyna.actor.textId = 0x1802; } else { player->doorTimer = 10; } - } else if (this->unk_1A4 == 4) { + } else if (this->doorType == ENDOOR_TYPE_4) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->dyna.actor.textId = 0x1800; - } else if ((this->unk_1A4 == 0) || (this->unk_1A4 == 2) || (this->unk_1A4 == 3)) { + this->knobDoor.dyna.actor.textId = 0x1800; + } else if ((this->doorType == ENDOOR_TYPE_0) || (this->doorType == ENDOOR_TYPE_2) || + (this->doorType == ENDOOR_TYPE_3)) { s32 halfDaysDayBit = (play->actorCtx.halfDaysBit & HALFDAYBIT_DAWNS) >> 1; s32 halfDaysNightBit = play->actorCtx.halfDaysBit & HALFDAYBIT_NIGHTS; s16 temp_a2 = D_801AED48[this->switchFlag & 7]; s32 textIdOffset = (this->switchFlag >> 3) & 0xF; - if (((this->unk_1A4 == 0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) || - ((this->unk_1A4 == 2) && !(halfDaysNightBit & temp_a2)) || - ((this->unk_1A4 == 3) && !(halfDaysDayBit & temp_a2))) { + if (((this->doorType == ENDOOR_TYPE_0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) || + ((this->doorType == ENDOOR_TYPE_2) && !(halfDaysNightBit & temp_a2)) || + ((this->doorType == ENDOOR_TYPE_3) && !(halfDaysDayBit & temp_a2))) { s16 baseTextId = 0x182D; - if (this->unk_1A4 == 3) { + if (this->doorType == ENDOOR_TYPE_3) { baseTextId = 0x180D; - } else if (this->unk_1A4 == 2) { + } else if (this->doorType == ENDOOR_TYPE_2) { baseTextId = 0x181D; } player->doorType = PLAYER_DOORTYPE_TALKING; - this->dyna.actor.textId = baseTextId + textIdOffset; + this->knobDoor.dyna.actor.textId = baseTextId + textIdOffset; } - } else if ((this->unk_1A4 == 5) && (playerPosRelToDoor.z > 0.0f)) { + } else if ((this->doorType == ENDOOR_TYPE_5) && (playerPosRelToDoor.z > 0.0f)) { ScheduleOutput scheduleOutput; if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &scheduleOutput)) { - this->dyna.actor.textId = scheduleOutput.result + 0x1800; + this->knobDoor.dyna.actor.textId = scheduleOutput.result + 0x1800; - player->doorType = ((this->dyna.actor.textId == 0x1821) && D_80867BC0) + player->doorType = ((this->knobDoor.dyna.actor.textId == 0x1821) && D_80867BC0) ? PLAYER_DOORTYPE_PROXIMITY : PLAYER_DOORTYPE_TALKING; } } func_80122F28(player); } - } else if ((this->unk_1A4 == 4) && (this->dyna.actor.xzDistToPlayer > 240.0f)) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN); + } else if ((this->doorType == ENDOOR_TYPE_4) && (this->knobDoor.dyna.actor.xzDistToPlayer > 240.0f)) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_OPEN); this->actionFunc = func_80867080; } } @@ -556,34 +559,34 @@ void func_80866F94(EnDoor* this, PlayState* play) { } else { direction = -1; } - if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) { + if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) { Math_StepToC(&this->unk_1A7, 0, 1); } } else { - if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x7D0)) { + if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, 0, 0x7D0)) { this->actionFunc = func_80866B20; - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE); + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE); } } } void func_8086704C(EnDoor* this, PlayState* play) { - if (this->dyna.actor.xzDistToPlayer < 120.0f) { + if (this->knobDoor.dyna.actor.xzDistToPlayer < 120.0f) { this->actionFunc = func_808670F0; } } void func_80867080(EnDoor* this, PlayState* play) { - if (this->dyna.actor.xzDistToPlayer < 120.0f) { + if (this->knobDoor.dyna.actor.xzDistToPlayer < 120.0f) { this->actionFunc = func_808670F0; - } else if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, -0x1800, 0x100)) { + } else if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, -0x1800, 0x100)) { this->actionFunc = func_8086704C; } } void func_808670F0(EnDoor* this, PlayState* play) { - if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x700)) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE); + if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, 0, 0x700)) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_CLOSE); this->actionFunc = func_80866B20; } } @@ -593,19 +596,19 @@ void func_80867144(EnDoor* this, PlayState* play) { s32 i; if (DECR(this->unk_1A6) == 0) { - if (SkelAnime_Update(&this->skelAnime) != 0) { + if (SkelAnime_Update(&this->knobDoor.skelAnime)) { this->actionFunc = func_80866B20; - this->unk_1A1 = 0; - } else if (Animation_OnFrame(&this->skelAnime, sAnimOpenFrames[this->animIndex])) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_OC_DOOR_OPEN); - if (this->skelAnime.playSpeed < 1.5f) { + this->knobDoor.playOpenAnim = false; + } else if (Animation_OnFrame(&this->knobDoor.skelAnime, sAnimOpenFrames[this->knobDoor.animIndex])) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_OC_DOOR_OPEN); + if (this->knobDoor.skelAnime.playSpeed < 1.5f) { numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50; for (i = 0; i < numEffects; i++) { - EffectSsBubble_Spawn(play, &this->dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f); + EffectSsBubble_Spawn(play, &this->knobDoor.dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f); } } - } else if (Animation_OnFrame(&this->skelAnime, sAnimCloseFrames[this->animIndex])) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE); + } else if (Animation_OnFrame(&this->knobDoor.skelAnime, sAnimCloseFrames[this->knobDoor.animIndex])) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_CLOSE); } } } @@ -620,28 +623,28 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* TransitionActorEntry* transitionEntry; EnDoor* this = THIS; - if (limbIndex == 4) { - Gfx** dl = D_808679A4[this->dlIndex]; + if (limbIndex == DOOR_LIMB_4) { + Gfx** dl = D_808679A4[this->knobDoor.dlIndex]; s16 temp; s32 dlIndex; transitionEntry = NULL; - if (this->unk_1A4 != 7) { - transitionEntry = &play->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA]; + if (this->doorType != ENDOOR_TYPE_7) { + transitionEntry = &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->knobDoor.dyna.actor)]; } - rot->z += this->dyna.actor.world.rot.y; - if ((this->unk_1A4 == 7) || (play->roomCtx.prevRoom.num >= 0) || + rot->z += this->knobDoor.dyna.actor.world.rot.y; + if ((this->doorType == ENDOOR_TYPE_7) || (play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { s32 pad; - temp = (this->dyna.actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z) - - Math_Vec3f_Yaw(&play->view.eye, &this->dyna.actor.world.pos); + temp = (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[3].z + rot->z) - + Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos); *dList = (ABS_ALT(temp) < 0x4000) ? dl[0] : dl[1]; } else { dlIndex = 0; - if (transitionEntry->sides[0].room != this->dyna.actor.room) { + if (transitionEntry->sides[0].room != this->knobDoor.dyna.actor.room) { dlIndex = 1; } *dList = dl[dlIndex]; @@ -653,17 +656,17 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnDoor_Draw(Actor* thisx, PlayState* play) { EnDoor* this = THIS; - if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) { + if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { OPEN_DISPS(play->state.gfxCtx); - if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) { + if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8); } else { func_8012C28C(play->state.gfxCtx); } - SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDoor_OverrideLimbDraw, NULL, - &this->dyna.actor); - if (this->dyna.actor.world.rot.y != 0) { - if (this->dyna.actor.world.rot.y > 0) { + SkelAnime_DrawOpa(play, this->knobDoor.skelAnime.skeleton, this->knobDoor.skelAnime.jointTable, + EnDoor_OverrideLimbDraw, NULL, &this->knobDoor.dyna.actor); + if (this->knobDoor.dyna.actor.world.rot.y != 0) { + if (this->knobDoor.dyna.actor.world.rot.y > 0) { gSPDisplayList(POLY_OPA_DISP++, gDoorRightDL); } else { gSPDisplayList(POLY_OPA_DISP++, gDoorLeftDL); 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 bea44a122..b6fc7c254 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.h +++ b/src/overlays/actors/ovl_En_Door/z_en_door.h @@ -2,27 +2,34 @@ #define Z_EN_DOOR_H #include "global.h" +#include "z64door.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnDoor; typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*); -#define ENDOOR_GET_PARAMS_7(thisx) (((thisx)->params >> 7) & 7) +#define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7) #define ENDOOR_GET_PARAMS_7F(thisx) (((thisx)->params) & 0x7F) +typedef enum EnDoorType { + /* 0 */ ENDOOR_TYPE_0, + /* 1 */ ENDOOR_TYPE_1, + /* 2 */ ENDOOR_TYPE_2, + /* 3 */ ENDOOR_TYPE_3, + /* 4 */ ENDOOR_TYPE_4, + /* 5 */ ENDOOR_TYPE_5, + /* 6 */ ENDOOR_TYPE_6, + /* 7 */ ENDOOR_TYPE_7 +} EnDoorType; typedef struct EnDoor { - /* 0x000 */ DynaPolyActor dyna; - /* 0x15C */ SkelAnime skelAnime; - /* 0x1A0 */ u8 animIndex; - /* 0x1A1 */ u8 unk_1A1; - /* 0x1A2 */ s8 requiredObjBankIndex; - /* 0x1A3 */ s8 dlIndex; - /* 0x1A4 */ u8 unk_1A4; + /* 0x000 */ KnobDoorActor knobDoor; + /* 0x1A4 */ u8 doorType; /* 0x1A5 */ u8 switchFlag; /* 0x1A6 */ u8 unk_1A6; /* 0x1A7 */ s8 unk_1A7; - /* 0x1A8 */ Vec3s limbTable[5]; + /* 0x1A8 */ Vec3s limbTable[DOOR_LIMB_MAX]; /* 0x1C8 */ EnDoorActionFunc actionFunc; } EnDoor; 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 8959dde7a..84902f540 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 @@ -92,9 +92,9 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { s32 i; EnDoorEtc* this = THIS; - Actor_ProcessInitChain(&this->actor, sInitChain); - Actor_SetScale(&this->actor, 0.01f); - this->actor.shape.rot.x = -0x4000; + Actor_ProcessInitChain(&this->knobDoor.dyna.actor, sInitChain); + Actor_SetScale(&this->knobDoor.dyna.actor, 0.01f); + this->knobDoor.dyna.actor.shape.rot.x = -0x4000; this->angle = 0; for (i = 0; i < 15; i++, objectInfo++) { if (play->sceneId == objectInfo->sceneId) { @@ -106,19 +106,19 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { } objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); if (objectIndex < 0) { - Actor_Kill(&this->actor); + Actor_Kill(&this->knobDoor.dyna.actor); } else { - this->objectIndex = objectIndex; - this->dListIndex = objectInfo->dListIndex; - if (this->actor.objBankIndex == this->objectIndex) { + this->knobDoor.requiredObjBankIndex = objectIndex; + this->knobDoor.dlIndex = objectInfo->dListIndex; + if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { EnDoorEtc_WaitForObject(this, play); } else { this->actionFunc = EnDoorEtc_WaitForObject; } } Collider_InitCylinder(play, &this->collider); - Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.colChkInfo.mass = MASS_IMMOVABLE; + Collider_SetCylinder(play, &this->collider, &this->knobDoor.dyna.actor, &sCylinderInit); + this->knobDoor.dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; } void EnDoorEtc_Destroy(Actor* thisx, PlayState* play) { @@ -139,11 +139,11 @@ s32 EnDoorEtc_IsDistanceGreater(Vec3f* a, Vec3f* b, f32 c) { } void EnDoorEtc_WaitForObject(EnDoorEtc* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) { + this->knobDoor.dyna.actor.flags &= ~ACTOR_FLAG_10; + this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex; this->actionFunc = func_80AC2354; - this->actor.draw = EnDoorEtc_Draw; + this->knobDoor.dyna.actor.draw = EnDoorEtc_Draw; } } @@ -175,27 +175,28 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play) { s16 yawDiff; s32 yawDiffAbs; - Actor_OffsetOfPointInActorCoords(&this->actor, &playerOffsetFromDoor, &player->actor.world.pos); - if (this->unk_1A1 == 0) { + Actor_OffsetOfPointInActorCoords(&this->knobDoor.dyna.actor, &playerOffsetFromDoor, &player->actor.world.pos); + if (!this->knobDoor.playOpenAnim) { if ((!Player_InCsMode(play)) && ((fabsf(playerOffsetFromDoor.y) < 20.0f) && fabsf(playerOffsetFromDoor.x) < 20.0f) && (fabsf(playerOffsetFromDoor.z) < 50.0f)) { - yawDiff = player->actor.shape.rot.y - this->actor.shape.rot.y; + yawDiff = player->actor.shape.rot.y - this->knobDoor.dyna.actor.shape.rot.y; if (playerOffsetFromDoor.z > 0.0f) { yawDiff = 0x8000 - yawDiff; } yawDiffAbs = ABS_ALT(yawDiff); if (yawDiffAbs < 0x3000) { player->doorDirection = (playerOffsetFromDoor.z >= 0.0f) ? 1.0f : -1.0f; - player->doorActor = &this->actor; - player->doorType = -1; + player->doorActor = &this->knobDoor.dyna.actor; + player->doorType = PLAYER_DOORTYPE_TALKING; } } } - if ((this->actor.textId == 0x239B) && Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->actor))) { - Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->actor)); + 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)); this->actionFunc = func_80AC2154; - this->actor.textId = 0x1800; // "It won't budge!" + this->knobDoor.dyna.actor.textId = 0x1800; // "It won't budge!" this->unk_1F4 |= 1; this->timer = 0x5A; } @@ -206,18 +207,18 @@ void func_80AC2354(EnDoorEtc* this, PlayState* play) { while (door != NULL) { if ((door->id != ACTOR_EN_DOOR) || - !EnDoorEtc_IsDistanceGreater(&door->world.pos, &this->actor.world.pos, 10.0f)) { + !EnDoorEtc_IsDistanceGreater(&door->world.pos, &this->knobDoor.dyna.actor.world.pos, 10.0f)) { door = door->next; } else { - this->actor.world.pos.x = door->world.pos.x; - this->actor.world.pos.y = door->world.pos.y; - this->actor.world.pos.z = door->world.pos.z; - this->actor.shape.rot.y = door->shape.rot.y; - this->actor.world.rot.y = door->world.rot.y; + this->knobDoor.dyna.actor.world.pos.x = door->world.pos.x; + this->knobDoor.dyna.actor.world.pos.y = door->world.pos.y; + this->knobDoor.dyna.actor.world.pos.z = door->world.pos.z; + this->knobDoor.dyna.actor.shape.rot.y = door->shape.rot.y; + this->knobDoor.dyna.actor.world.rot.y = door->world.rot.y; Actor_Kill(door); this->actionFunc = func_80AC21A0; - this->actor.textId = 0x239B; - Actor_SetFocus(&this->actor, 70.0f); + this->knobDoor.dyna.actor.textId = 0x239B; + Actor_SetFocus(&this->knobDoor.dyna.actor, 70.0f); break; } } @@ -229,7 +230,7 @@ void EnDoorEtc_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_1F4 & 1) { - Collider_UpdateCylinder(&this->actor, &this->collider); + Collider_UpdateCylinder(&this->knobDoor.dyna.actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } 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 49ca83f2a..9cd63248f 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 @@ -2,6 +2,7 @@ #define Z_EN_DOOR_ETC_H #include "global.h" +#include "z64door.h" struct EnDoorEtc; @@ -10,11 +11,7 @@ struct EnDoorEtc; typedef void (*EnDoorEtcActionFunc)(struct EnDoorEtc*, PlayState*); typedef struct EnDoorEtc { - /* 0x000 */ Actor actor; - /* 0x144 */ char pad_144[0x5D]; - /* 0x1A1 */ u8 unk_1A1; - /* 0x1A2 */ s8 objectIndex; - /* 0x1A3 */ u8 dListIndex; // Never read, inferred from ovl_En_Door + /* 0x000 */ KnobDoorActor knobDoor; /* 0x1A4 */ s16 angle; /* 0x1A6 */ s16 timer; /* 0x1A8 */ ColliderCylinder collider; 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 2c7fdc030..0f9b4c766 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1268,7 +1268,8 @@ void EnEgol_Update(Actor* thisx, PlayState* play) { // last argument is DMG_ZORA_BOOMERANG | DMG_HOOKSHOT | DMG_NORMAL_ARROW | DMG_FIRE_ARROW | DMG_ICE_ARROW | // DMG_LIGHT_ARROW | DMG_DEKU_BUBBLE - if ((projectile != NULL) && !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ENARROW_5))) { + if ((projectile != NULL) && + !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ARROW_TYPE_LIGHT))) { this->eyelidRotTarget = 0xFA0; this->eyeShutTimer = 20; if (this->action == EYEGORE_ACTION_LASER) { 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 3d68d34d7..097822dd1 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -489,7 +489,7 @@ void EnFamos_SetupChase(EnFamos* this) { void EnFamos_Chase(EnFamos* this, PlayState* play) { Player* player = GET_PLAYER(play); Vec3f abovePlayerPos; - u32 surfaceType; + FloorProperty surfaceType; EnFamos_UpdateBobbingHeight(this); Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800); @@ -502,7 +502,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) { surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && // close enough - (surfaceType != 0xC && surfaceType != 0xD)) { + (surfaceType != FLOOR_PROPERTY_12 && surfaceType != FLOOR_PROPERTY_13)) { EnFamos_SetupAttackAim(this); } else if ((Player_GetMask(play) == PLAYER_MASK_STONE) || @@ -689,9 +689,9 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) { this->actor.world.pos.x = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.x; this->actor.world.pos.z = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.z; if (this->stateTimer == 1) { - EnBom* explosion = - (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY); + EnBom* explosion = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, + this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (explosion != NULL) { explosion->timer = 0; // instant explosion } 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 306f1d94d..d9645885e 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1949,25 +1949,25 @@ void EnFishing_DrawRod(PlayState* play) { D_8090CD34 = 0.0f; } - spC8 = player->unk_B08[1]; - Math_SmoothStepToF(&player->unk_B08[1], input->rel.stick_y * 0.02f, 0.3f, 5.0f, 0.0f); - spC8 = player->unk_B08[1] - spC8; + spC8 = player->unk_B0C; + Math_SmoothStepToF(&player->unk_B0C, input->rel.stick_y * 0.02f, 0.3f, 5.0f, 0.0f); + spC8 = player->unk_B0C - spC8; - spC4 = player->unk_B08[0]; - Math_SmoothStepToF(&player->unk_B08[0], input->rel.stick_x * 0.02f, 0.3f, 5.0f, 0.0f); - spC4 = player->unk_B08[0] - spC4; + spC4 = player->unk_B08; + Math_SmoothStepToF(&player->unk_B08, input->rel.stick_x * 0.02f, 0.3f, 5.0f, 0.0f); + spC4 = player->unk_B08 - spC4; - if (player->unk_B08[0] > 1.0f) { - player->unk_B08[0] = 1.0f; + if (player->unk_B08 > 1.0f) { + player->unk_B08 = 1.0f; } - if (player->unk_B08[1] > 1.0f) { - player->unk_B08[1] = 1.0f; + if (player->unk_B0C > 1.0f) { + player->unk_B0C = 1.0f; } - if (player->unk_B08[0] < -1.0f) { - player->unk_B08[0] = -1.0f; + if (player->unk_B08 < -1.0f) { + player->unk_B08 = -1.0f; } - if (player->unk_B08[1] < -1.0f) { - player->unk_B08[1] = -1.0f; + if (player->unk_B0C < -1.0f) { + player->unk_B0C = -1.0f; } Math_ApproachF(&D_8090CD28, spC4 * 70.0f * -0.01f, 1.0f, D_8090CD30); @@ -1976,8 +1976,8 @@ void EnFishing_DrawRod(PlayState* play) { Math_ApproachF(&D_8090CD34, 1.0f, 1.0f, 0.1f); Math_ApproachZeroF(&D_8090CD38, 1.0f, 0.05f); } else { - Math_ApproachZeroF(&player->unk_B08[1], 1.0f, 0.1f); - Math_ApproachZeroF(&player->unk_B08[0], 1.0f, 0.1f); + Math_ApproachZeroF(&player->unk_B0C, 1.0f, 0.1f); + Math_ApproachZeroF(&player->unk_B08, 1.0f, 0.1f); Math_ApproachF(&D_8090CD2C, (Math_SinS(D_809171FE * 3000) * 0.025f) + -0.03f, 1.0f, 0.05f); Math_ApproachZeroF(&D_8090CD28, 1.0f, 0.05f); @@ -1994,7 +1994,7 @@ void EnFishing_DrawRod(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 155, 0, 255); - Matrix_Mult(&player->mf_CC4, MTXMODE_NEW); + Matrix_Mult(&player->leftHandMf, MTXMODE_NEW); if (sLinkAge != 1) { Matrix_Translate(0.0f, 400.0f, 0.0f, MTXMODE_APPLY); @@ -2009,11 +2009,11 @@ void EnFishing_DrawRod(PlayState* play) { } Matrix_RotateXFApply(-0.6283185f); - Matrix_RotateZF((player->unk_B08[0] * 0.5f) + 0.4712389f, MTXMODE_APPLY); + Matrix_RotateZF((player->unk_B08 * 0.5f) + 0.4712389f, MTXMODE_APPLY); Matrix_RotateXFApply((D_8090CD40 + 20.0f) * 0.01f * M_PI); Matrix_Scale(0.70000005f, 0.70000005f, 0.70000005f, MTXMODE_APPLY); - spC0 = (D_8090CD3C * (((player->unk_B08[1] - 1.0f) * -0.25f) + 0.5f)) + (D_8090CD2C + D_8090CD38); + spC0 = (D_8090CD3C * (((player->unk_B0C - 1.0f) * -0.25f) + 0.5f)) + (D_8090CD2C + D_8090CD38); Matrix_Translate(0.0f, 0.0f, -1300.0f, MTXMODE_APPLY); 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 f31dd7cd2..573b911c4 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -1019,7 +1019,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = SubS_GetAdditionalPath(play, sp55, D_80951A0C[scheduleOutput->result]); } - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != NULL) { sp4C = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp40, &sp4C[0]); @@ -1029,7 +1029,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); Math_Vec3f_Copy(&this->actor.world.pos, &sp40); - if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) { + if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->knobDoor.dyna.actor.shape.rot.y)) <= 0x4000) { this->unk_261 = -75; } else { this->unk_261 = 75; @@ -1450,7 +1450,7 @@ s32 func_80950804(EnGm* this, PlayState* play) { door = func_8094DF90(play, this->unk_258); if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) { - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if ((this->unk_3BA / (f32)this->unk_3B8) <= 0.9f) { door->unk_1A7 = this->unk_261; } else { 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 3f993ae3a..edf1cb104 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -6,6 +6,7 @@ #include "z_en_go.h" #include "z64quake.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/object_oF1d_map/object_oF1d_map.h" #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/object_taisou/object_taisou.h" @@ -1249,7 +1250,8 @@ s32 func_80A13E80(EnGo* this, PlayState* play) { func_80A12C48(this, play, 1); Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166A4, &sp48); gSaveContext.powderKegTimer = 2400; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, 1, 0, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, + 0, 0, BOMB_TYPE_BODY); func_80A134B0(this, play, 1); this->unk_3C2 = 0; this->unk_3C0++; 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 6d8e64931..b9f6acb68 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -5,6 +5,7 @@ */ #include "z_en_gs.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/object_gs/object_gs.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -871,7 +872,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { if (this->actor.playerHeightRel < -12000.0f) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 0); + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, this->actor.world.rot.y, 0, BOMB_TYPE_BODY); Actor_Kill(&this->actor); sp7C = 0; } diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index 44e42d01a..a88c8bb38 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -279,8 +279,8 @@ void func_80B22500(EnHakurock* this, PlayState* play) { } else if ((&player->actor == this->collider.base.oc) && (player->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) && (player->linearVelocity > 8.0f)) { - player->unk_B08[0] = player->linearVelocity = -5.0f; - player->unk_B08[1] += (player->linearVelocity * 0.05f); + player->unk_B08 = player->linearVelocity = -5.0f; + player->unk_B0C += (player->linearVelocity * 0.05f); player->actor.velocity.y = 5.0f; player->currentYaw = player->actor.world.rot.y; player->actor.home.rot.y = player->actor.world.rot.y; 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 f12599df7..2e68c75d6 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -108,18 +108,6 @@ typedef struct { RaceWaypoint* waypoints; } RaceInfo; -typedef enum { - /* 0 */ ENHORSE_ANIM_IDLE, - /* 1 */ ENHORSE_ANIM_WHINNY, - /* 2 */ ENHORSE_ANIM_STOPPING, - /* 3 */ ENHORSE_ANIM_REARING, - /* 4 */ ENHORSE_ANIM_WALK, - /* 5 */ ENHORSE_ANIM_TROT, - /* 6 */ ENHORSE_ANIM_GALLOP, - /* 7 */ ENHORSE_ANIM_LOW_JUMP, - /* 8 */ ENHORSE_ANIM_HIGH_JUMP -} EnHorseAnimation; - static AnimationHeader* sEponaAnimations[] = { &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_005F64, &object_horse_link_child_Anim_004DE8, &object_horse_link_child_Anim_007D50, &object_horse_link_child_Anim_0043AC, 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 b2c58bcad..9f8cd2063 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -75,7 +75,7 @@ typedef enum EnHorseAction { /* 25 */ ENHORSE_ACTION_25 } EnHorseAction; -typedef enum { +typedef enum EnHorsePlayerDir { /* 0 */ PLAYER_DIR_FRONT_R, /* 1 */ PLAYER_DIR_FRONT_L, /* 2 */ PLAYER_DIR_BACK_R, @@ -84,7 +84,19 @@ typedef enum { /* 5 */ PLAYER_DIR_SIDE_L } EnHorsePlayerDir; -typedef enum { +typedef enum EnHorseAnimation { + /* 0 */ ENHORSE_ANIM_IDLE, + /* 1 */ ENHORSE_ANIM_WHINNY, + /* 2 */ ENHORSE_ANIM_STOPPING, + /* 3 */ ENHORSE_ANIM_REARING, + /* 4 */ ENHORSE_ANIM_WALK, + /* 5 */ ENHORSE_ANIM_TROT, + /* 6 */ ENHORSE_ANIM_GALLOP, + /* 7 */ ENHORSE_ANIM_LOW_JUMP, + /* 8 */ ENHORSE_ANIM_HIGH_JUMP +} EnHorseAnimation; + +typedef enum HorseType { /* 0 */ HORSE_TYPE_EPONA, /* 1 */ HORSE_TYPE_HNI, /* 2 */ HORSE_TYPE_2, 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 e053a8528..a0960a60f 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -556,7 +556,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = SubS_GetAdditionalPath(play, sp55, D_80BF3318[scheduleOutput->result]); } - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != NULL) { sp4C = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp40, &sp4C[0]); @@ -566,7 +566,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); Math_Vec3f_Copy(&this->actor.world.pos, &sp40); - if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) { + if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->knobDoor.dyna.actor.shape.rot.y)) <= 0x4000) { this->unk_2A4 = -75; } else { this->unk_2A4 = 75; @@ -735,7 +735,7 @@ s32 func_80BF2470(EnIg* this, PlayState* play) { s32 pad; if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) { - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (((f32)this->unk_3E2 / this->unk_3E0) <= 0.9f) { door->unk_1A7 = this->unk_2A4; } else { 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 8f48622c8..2134ded5b 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -377,7 +377,7 @@ void EnJs_TakeMask(s32 itemActions, s32 childType) { s32 temp = 0; if ((childType >= 0) && (childType < 9)) { - itemActions -= PLAYER_IA_MASK_TRUTH; + itemActions -= PLAYER_IA_MASK_MIN; childType *= 3; if (itemActions < 8) { masksGivenOnMoon[childType] |= 1 << itemActions; @@ -543,7 +543,7 @@ void func_80969748(EnJs* this, PlayState* play) { } if (itemAction > PLAYER_IA_NONE) { Message_CloseTextbox(play); - if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) { + if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_TRANSFORMATION_MIN)) { EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor)); Inventory_UnequipItem(itemAction - 4); if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) { @@ -551,7 +551,7 @@ void func_80969748(EnJs* this, PlayState* play) { } else { player->actor.textId = 0x2213; } - } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) { + } else if ((itemAction >= PLAYER_IA_MASK_TRANSFORMATION_MIN) && (itemAction <= PLAYER_IA_MASK_MAX)) { player->actor.textId = 0x2211; } else { player->actor.textId = 0x2210; @@ -692,7 +692,7 @@ void func_80969C54(EnJs* this, PlayState* play) { if (itemAction > PLAYER_IA_NONE) { Message_CloseTextbox(play); - if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) { + if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_TRANSFORMATION_MIN)) { EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor)); Inventory_UnequipItem(itemAction - 4); if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) { @@ -700,7 +700,7 @@ void func_80969C54(EnJs* this, PlayState* play) { } else { player->actor.textId = 0x2222; } - } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) { + } else if ((itemAction >= PLAYER_IA_MASK_TRANSFORMATION_MIN) && (itemAction <= PLAYER_IA_MASK_MAX)) { player->actor.textId = 0x2220; } else { player->actor.textId = 0x221D; 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 7d8f46f91..e90b14f82 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -902,7 +902,8 @@ void func_80B872F4(EnKaizoku* this, PlayState* play) { if ((this->lookTimer == 0) && !func_80B85858(this, play) && !func_80B85A00(this, play, false)) { s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; - if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && (yawDiff >= 0x1F40)) { + if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + (yawDiff >= 0x1F40)) { this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; func_80B88CD8(this); } else if (Actor_IsFacingPlayer(&this->picto.actor, 0xBB8)) { @@ -1285,7 +1286,8 @@ void func_80B88378(EnKaizoku* this, PlayState* play) { this->skelAnime.playSpeed = 1.0f; sp2A = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y); - if (this->picto.actor.xzDistToPlayer < 150.0f && player->meleeWeaponState != 0 && sp2A >= 0x2000) { + if ((this->picto.actor.xzDistToPlayer < 150.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + (sp2A >= 0x2000)) { this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; if (Rand_ZeroOne() > 0.7f) { func_80B88CD8(this); @@ -1938,8 +1940,8 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { pos.z = this->bodyCollider.info.bumper.hitPos.z; if (player->transformation != PLAYER_FORM_HUMAN) { - player->unk_B84 = this->picto.actor.yawTowardsPlayer; - player->unk_B80 = 15.0f; + player->pushedYaw = this->picto.actor.yawTowardsPlayer; + player->pushedSpeed = 15.0f; } this->bodyCollider.base.acFlags &= ~AC_HIT; 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 c3cdeae33..24147b0d1 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 @@ -359,8 +359,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 0; } - if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) || - (player->stateFlags2 & PLAYER_STATE2_80000)) { + if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + (player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) { return 1; } break; @@ -370,7 +370,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 0; } - if ((player->meleeWeaponState != 0) || (player->stateFlags2 & PLAYER_STATE2_80000)) { + if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + (player->stateFlags2 & PLAYER_STATE2_80000)) { return 1; } break; @@ -380,8 +381,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 0; } - if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) || - (player->stateFlags2 & PLAYER_STATE2_80000)) { + if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + (player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) { return 1; } this->unk_28E = 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 0586b2111..1b9cb743a 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 @@ -144,7 +144,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { this->isCharging = false; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { - player->unk_B08[0] = 1.0f; + player->unk_B08 = 1.0f; this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { @@ -155,7 +155,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { this->scaleTarget = 3; } } else { - player->unk_B08[0] = 0.5f; + player->unk_B08 = 0.5f; this->collider.info.toucher.damage = sDamages[this->type]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR; if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { @@ -229,11 +229,11 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { Player* player = GET_PLAYER(play); Actor* child = this->actor.child; - this->unk1B0 = player->unk_B08[0]; + this->unk1B0 = player->unk_B08; this->actor.world.pos = player->bodyPartsPos[0]; this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000; - if (!this->isCharging && (player->unk_B08[0] >= 0.1f)) { + if (!this->isCharging && (player->unk_B08 >= 0.1f)) { if ((gSaveContext.magicState != MAGIC_STATE_IDLE) || ((ENMTHUNDER_GET_MAGIC_COST(&this->actor) != 0) && !Magic_Consume(play, ENMTHUNDER_GET_MAGIC_COST(&this->actor), MAGIC_CONSUME_WAIT_PREVIEW))) { @@ -247,8 +247,8 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { this->isCharging = true; } - if (player->unk_B08[0] >= 0.1f) { - Rumble_Request(0.0f, (s32)(player->unk_B08[0] * 150.0f), 2, (s32)(player->unk_B08[0] * 150.0f)); + if (player->unk_B08 >= 0.1f) { + Rumble_Request(0.0f, (s32)(player->unk_B08 * 150.0f), 2, (s32)(player->unk_B08 * 150.0f)); } if (player->stateFlags2 & PLAYER_STATE2_20000) { @@ -256,8 +256,8 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { child->parent = NULL; } - if (player->unk_B08[0] <= 0.15f) { - if ((player->unk_B08[0] >= 0.1f) && (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) { + if (player->unk_B08 <= 0.15f) { + if ((player->unk_B08 >= 0.1f) && (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) { AudioSfx_PlaySfx(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); AudioSfx_PlaySfx(NA_SE_IT_SWORD_SWING_HARD, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, @@ -273,7 +273,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP; } - if (player->unk_B08[0] < 0.85f) { + if (player->unk_B08 < 0.85f) { this->collider.info.toucher.damage = sDamages[this->type]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR; if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { @@ -320,26 +320,26 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { return; } - if (player->unk_B08[0] > 0.15f) { + if (player->unk_B08 > 0.15f) { this->chargingAlpha = 255; if (this->actor.child == NULL) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_DUST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, EFF_DUST_TYPE_SPIN_ATTACK_CHARGE); } - this->adjustLightsArg1 += (((player->unk_B08[0] - 0.15f) * 1.5f) - this->adjustLightsArg1) * 0.5f; - } else if (player->unk_B08[0] > .1f) { - this->chargingAlpha = (s32)((player->unk_B08[0] - .1f) * 255.0f * 20.0f); - this->lightColorFrac = (player->unk_B08[0] - .1f) * 10.0f; + this->adjustLightsArg1 += (((player->unk_B08 - 0.15f) * 1.5f) - this->adjustLightsArg1) * 0.5f; + } else if (player->unk_B08 > .1f) { + this->chargingAlpha = (s32)((player->unk_B08 - .1f) * 255.0f * 20.0f); + this->lightColorFrac = (player->unk_B08 - .1f) * 10.0f; } else { this->chargingAlpha = 0; } - if (player->unk_B08[0] > 0.85f) { + if (player->unk_B08 > 0.85f) { func_8019F900(&player->actor.projectedPos, 2); - } else if (player->unk_B08[0] > 0.15f) { + } else if (player->unk_B08 > 0.15f) { func_8019F900(&player->actor.projectedPos, 1); - } else if (player->unk_B08[0] > 0.1f) { + } else if (player->unk_B08 > 0.1f) { func_8019F900(&player->actor.projectedPos, 0); } @@ -540,7 +540,7 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) { break; } - Matrix_Mult(&player->mf_CC4, MTXMODE_NEW); + Matrix_Mult(&player->leftHandMf, MTXMODE_NEW); if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) { Matrix_Translate(0.0f, 220.0f, 0.0f, MTXMODE_APPLY); 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 95890455c..7d79bcd75 100644 --- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c +++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c @@ -491,11 +491,11 @@ s32 func_80B37B78(EnMaruta* this, PlayState* play) { s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, 0x8000); temp_v1 = BINANG_SUB(temp_v1, player->actor.shape.rot.y); - if ((ABS_ALT(temp_v1) < 0x1555) || - ((player->meleeWeaponState != 0) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) || - (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) || - (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) || - (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) { + if ((ABS_ALT(temp_v1) < 0x1555) || ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) || + (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) || + (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) || + (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) { return true; } return false; 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 a4d820364..aefebdfc4 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/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index 2f4678b8d..d45cacbae 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -660,8 +660,9 @@ void func_80898654(EnPeehat* this) { void func_808986A4(EnPeehat* this, PlayState* play) { if (this->unk_2B0 == 5) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0x602, 0); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0x602, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 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 088d5c8a4..f00d64fca 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1242,7 +1242,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = SubS_GetAdditionalPath(play, sp55, D_80AFB430[scheduleOutput->result]); } - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != 0) { sp4C = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp40, &sp4C[0]); @@ -1251,7 +1251,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->unk_278, &sp34); this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); Math_Vec3f_Copy(&this->actor.world.pos, &sp40); - temp = this->actor.world.rot.y - door->dyna.actor.shape.rot.y; + temp = this->actor.world.rot.y - door->knobDoor.dyna.actor.shape.rot.y; if (ABS_ALT(temp) <= 0x4000) { this->unk_260 = -0x4B; } else { @@ -1704,7 +1704,7 @@ s32 func_80AF9D04(EnPm* this, PlayState* play) { f32 temp; if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) { - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (((f32)this->unk_36E / this->unk_36C) <= 0.9f) { door->unk_1A7 = this->unk_260; } else { 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 53ae73479..3516364ba 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 @@ -243,7 +243,8 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) { f32 dist; if (this->megCloneId == POE_SISTERS_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) { - if ((player->meleeWeaponState == 0 || player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) && + if ((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0 || + player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) && ((player->actor.world.pos.y - player->actor.floorHeight) < 1.0f)) { Math_StepToF(&this->megDistToPlayer, 110.0f, 3.0f); } else { 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 81898dfa6..8badfe741 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -740,8 +740,9 @@ void EnRat_Bounced(EnRat* this, PlayState* play) { } void EnRat_Explode(EnRat* this, PlayState* play) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; 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 d552c5605..0acd6fbf9 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -589,8 +589,8 @@ void func_80BF4AB8(EnRg* this, PlayState* play) { this->unk_326 = 0x28; if (player->stateFlags3 & PLAYER_STATE3_1000) { player->linearVelocity *= 0.5f; - player->unk_B08[0] = player->linearVelocity; - player->unk_B08[1] += player->linearVelocity * 0.05f; + player->unk_B08 = player->linearVelocity; + player->unk_B0C += player->linearVelocity * 0.05f; if (BINANG_SUB(this->actor.yawTowardsPlayer, player->currentYaw) > 0) { player->currentYaw += 0x2000; } else { diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c index 11e5ce7d6..912a700f8 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c @@ -93,11 +93,11 @@ void EnStream_SuckPlayer(EnStream* this, PlayState* play) { this->actor.scale.y) != EN_STREAM_PLAYER_OUTSIDE_RANGE) { xzDist = sqrtf(SQ(posDifference.x) + SQ(posDifference.z)); yDistWithOffset = player->actor.world.pos.y - (this->actor.world.pos.y - 90.0f); - player->unk_B84 = Math_Atan2S(-posDifference.x, -posDifference.z); + player->pushedYaw = Math_Atan2S(-posDifference.x, -posDifference.z); if (xzDist > 3.0f) { - Math_SmoothStepToF(&player->unk_B80, 3.0f, 0.5f, xzDist, 0.0f); + Math_SmoothStepToF(&player->pushedSpeed, 3.0f, 0.5f, xzDist, 0.0f); } else { - player->unk_B80 = 0.0f; + player->pushedSpeed = 0.0f; Math_SmoothStepToF(&player->actor.world.pos.x, this->actor.world.pos.x, 0.5f, 3.0f, 0.0f); Math_SmoothStepToF(&player->actor.world.pos.z, this->actor.world.pos.z, 0.5f, 3.0f, 0.0f); } 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 cedf00861..444142715 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -589,13 +589,13 @@ s32 func_80A3F384(EnTest3* this, PlayState* play) { EnDoor* door = (EnDoor*)func_80A3F2BC(play, this, ACTOR_EN_DOOR, ACTORCAT_DOOR, 55.0f, 20.0f); Vec3f offset; - if ((door != NULL) && (door->unk_1A1 == 0) && - ((player->doorType == 0) || (&door->dyna.actor != player->doorActor)) && - Actor_ActorAIsFacingActorB(&this->player.actor, &door->dyna.actor, 0x3000)) { - Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &this->player.actor.world.pos); - this->player.doorType = 1; + if ((door != NULL) && !door->knobDoor.playOpenAnim && + ((player->doorType == PLAYER_DOORTYPE_NONE) || (&door->knobDoor.dyna.actor != player->doorActor)) && + Actor_ActorAIsFacingActorB(&this->player.actor, &door->knobDoor.dyna.actor, 0x3000)) { + Actor_OffsetOfPointInActorCoords(&door->knobDoor.dyna.actor, &offset, &this->player.actor.world.pos); + this->player.doorType = PLAYER_DOORTYPE_HANDLE; this->player.doorDirection = (offset.z >= 0.0f) ? 1.0f : -1.0f; - this->player.doorActor = &door->dyna.actor; + this->player.doorActor = &door->knobDoor.dyna.actor; this->player.csId = CS_ID_NONE; return true; } @@ -1103,7 +1103,7 @@ s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos->z *= this->player.ageProperties->unk_08; } if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) || - (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) { + (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y)) { pos->y *= this->player.ageProperties->unk_08; } pos->y -= this->player.unk_AB8; @@ -1176,8 +1176,8 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL leftHandActor->world.rot.y = this->player.actor.shape.rot.y + this->player.leftHandWorld.rot.y; leftHandActor->shape.rot.y = leftHandActor->world.rot.y; } else { - Matrix_Get(&this->player.mf_CC4); - Matrix_MtxFToYXZRot(&this->player.mf_CC4, &this->player.leftHandWorld.rot, false); + Matrix_Get(&this->player.leftHandMf); + Matrix_MtxFToYXZRot(&this->player.leftHandMf, &this->player.leftHandWorld.rot, false); func_80126B8C(play, &this->player); } 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 d434bacaa..01fa7c7cd 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -471,7 +471,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) { if ((door != NULL) && (this->unk_2CA & 0x400)) { Vec3f sp5C; - Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->dyna.actor.world.pos); + Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->knobDoor.dyna.actor.world.pos); door->unk_1A7 = 2; if (sp5C.z < -20.0f) { this->unk_2CA &= ~0x400; 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 3a563ab60..6c0733979 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -214,7 +214,7 @@ void func_80BA383C(EnToto* this, PlayState* play) { } Animation_PlayOnce(&this->skelAnime, D_80BA5078[this->unk2B4]); } - func_800BBB74(this->unk260, 0x14, 0x50, 3); + func_800BBB74(&this->blinkInfo, 20, 80, 3); } void func_80BA3930(EnToto* this, PlayState* play) { @@ -316,7 +316,7 @@ void func_80BA3D38(EnToto* this, PlayState* play) { this->text = ENTOTO_WEEK_EVENT_FLAGS ? D_80BA50BC : D_80BA5088; func_80BA4C0C(this, play); play->actorCtx.flags |= ACTORCTX_FLAG_5; - this->unk260[0] = 0; + this->blinkInfo.eyeTexIndex = 0; } void func_80BA3DBC(EnToto* this, PlayState* play) { @@ -586,6 +586,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { if (gSaveContext.save.playerForm != (i + 1) && (D_80BA5128[i] & this->unk2B3)) { Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6); + Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_F) | 0xFFFFF000); } @@ -728,7 +729,7 @@ void EnToto_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->unk260[0]])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->blinkInfo.eyeTexIndex])); Scene_SetRenderModeXlu(play, 0, 1); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); 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 cf9f3c718..dc2b0947e 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h @@ -26,7 +26,7 @@ typedef struct EnToto { /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[18]; /* 0x1F4 */ Vec3s morphTable[18]; - /* 0x260 */ s16 unk260[2]; + /* 0x260 */ BlinkInfo blinkInfo; /* 0x264 */ ColliderCylinder collider; /* 0x2B0 */ u8 actionFuncIndex; /* 0x2B1 */ u8 unk2B1; 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 505df7f11..29778ec71 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -391,8 +391,9 @@ void func_808CCCF0(EnVm* this, PlayState* play) { this->unk_214--; if (this->unk_214 == 1) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0x6FF, 0); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0x6FF, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; 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 44a50e99d..ed3ec36f9 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -616,7 +616,8 @@ void func_80991280(EnWf* this, PlayState* play) { if (!func_8099408C(play, this) && !func_80990948(play, this, 0)) { phi_v1 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y)); - if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != 0) && (phi_v1 >= 0x1F40)) { + if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + (phi_v1 >= 0x1F40)) { this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.yawTowardsPlayer; func_80991948(this); @@ -666,7 +667,8 @@ void func_8099149C(EnWf* this, PlayState* play) { sp28 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y)); - if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && (player->meleeWeaponState != 0) && (sp28 >= 0x1F40)) { + if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && + (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (sp28 >= 0x1F40)) { this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.yawTowardsPlayer; if (Rand_ZeroOne() > 0.7f) { 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 41cdd8369..336076199 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -184,8 +184,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { Math_ApproachF(&this->unk_1A0, 3.0f, 1.0f, 1.0f); Math_ApproachF(&this->unk_19C, this->unk_1A0, 1.0f, 0.1f); } - player->unk_B84 = this->unk_1A4; - player->unk_B80 = this->unk_19C; + player->pushedYaw = this->unk_1A4; + player->pushedSpeed = this->unk_19C; } } else { if (this->unk_172 & 8) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 1f92e8825..5147f8732 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -9,1297 +9,20198 @@ #include "z64rumble.h" #include "z64shrink_window.h" -#define THIS ((Player*)thisx) +#include "overlays/actors/ovl_Arms_Hook/z_arms_hook.h" +#include "overlays/actors/ovl_Door_Spiral/z_door_spiral.h" +#include "overlays/actors/ovl_Door_Shutter/z_door_shutter.h" +#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" +#include "overlays/actors/ovl_En_Boom/z_en_boom.h" +#include "overlays/actors/ovl_En_Box/z_en_box.h" +#include "overlays/actors/ovl_En_Door/z_en_door.h" +#include "overlays/actors/ovl_En_Horse/z_en_horse.h" +#include "overlays/actors/ovl_En_Ishi/z_en_ishi.h" +#include "overlays/actors/ovl_En_Test3/z_en_test3.h" +#include "overlays/actors/ovl_En_Test7/z_en_test7.h" +#include "overlays/actors/ovl_En_Torch2/z_en_torch2.h" -extern UNK_TYPE D_06008860; -extern UNK_TYPE D_0600BDD8; -extern UNK_TYPE D_060178D0; +#include "overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h" + +#include "objects/gameplay_keep/gameplay_keep.h" + +#include "objects/object_link_boy/object_link_boy.h" +#include "objects/object_link_goron/object_link_goron.h" +#include "objects/object_link_zora/object_link_zora.h" +#include "objects/object_link_nuts/object_link_nuts.h" +#include "objects/object_link_child/object_link_child.h" + +#define THIS ((Player*)thisx) void Player_Init(Actor* thisx, PlayState* play); void Player_Destroy(Actor* thisx, PlayState* play); void Player_Update(Actor* thisx, PlayState* play); void Player_Draw(Actor* thisx, PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DA90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DABC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DAD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DAFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DBC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DCA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DD2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE14.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE88.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF48.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E00C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E078.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E0CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E0F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E12C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E188.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E1BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E1F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E224.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E438.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E4A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E514.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E55C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E5A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E5EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E634.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E67C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E6D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E6F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E784.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E794.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E820.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E920.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E9C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EAC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EAF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EB18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EB38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EC9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ECCC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ECE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ED20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ED94.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EEA4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EEE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF54.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EFE4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F02C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F09C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F0E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F164.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F1AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F43C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F470.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F524.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F594.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F62C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F7F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F8A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F8BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F938.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FA5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FB68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FBE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FCC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FD0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FDC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FE0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808302CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808304BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808305BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808306F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808308DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808309CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830A58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830AE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830B38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830B88.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830CE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830D40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830DF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830E30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830F9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830FD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831010.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831124.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831194.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083133C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808313A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808313F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831454.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831494.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083172C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831760.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808317C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831814.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808318C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831944.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831990.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831F34.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832090.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083213C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083216C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808323C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832444.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083249C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808324EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832558.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832578.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832660.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832754.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832888.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832CAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832F24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832F78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833058.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808331FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808332A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808333CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808334D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808335B0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808335F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833728.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083375C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833864.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833998.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808339B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808339D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833A64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833AA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808340AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808340D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834104.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834140.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808341F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808344C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834534.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083456C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808345A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808345C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834600.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834CD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834D50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834DB8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834DFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835324.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808353DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835428.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808354A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808355D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083562C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835BC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835BF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835C64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835CD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835D2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835D58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835DF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835EAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083604C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836258.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808365DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836888.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083692C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836988.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808369F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836A5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836A98.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836AD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836B3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836C70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836D8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836DC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836EA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836F10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808370D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837134.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808373A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808373F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837730.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083784C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808378FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083798C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808379C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837B60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837BD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837BF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837C20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837C78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837CEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837DEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808381A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808381F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083827C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083868C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838760.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808387A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838830.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808388B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808389BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838A20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838A90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808391D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839518.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808395F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808396B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839770.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839800.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839860.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839978.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839A10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839A84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839CD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839E3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839E74.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839ED0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839F98.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A04C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A0CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A114.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A274.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A4A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A548.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A580.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A658.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A6C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A794.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A844.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A878.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A98C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AD04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AD8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083ADB8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083ADF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AE38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AECC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AF30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AF8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B030.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B090.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B0E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B1A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B23C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B29C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B2E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B32C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B3B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B73C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B798.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B850.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B8D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B930.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083BB4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083BF54.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C62C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C6E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C85C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C8E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CB04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CB58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CBC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CCB4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CF68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D168.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D23C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D6DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D738.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D78C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D860.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DCC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DD1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DEE4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DF38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DFC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E14C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E234.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E28C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E2F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E354.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E404.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E514.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E758.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E7F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E8E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E958.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E9C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EA44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EBD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EE60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F144.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F190.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F230.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F27C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F358.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F57C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F828.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F8A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FBC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FCF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FD80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FE38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FE90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FEF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FF30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FFEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808400CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808401F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840770.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840980.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808409A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840A30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840CD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840DEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840E24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840E5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840EC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840F34.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840F90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808411D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808412A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808412BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841358.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841408.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808414E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841528.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808415A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808415E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841624.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841744.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084182C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841A50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Init.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80842510.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808425B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808426F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808430E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80843178.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80843EC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808442D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808445C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808446F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844784.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844D80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844EF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Update.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808463C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80846460.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Draw.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Destroy.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847190.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084748C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808475B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808477D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847880.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847994.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808479F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847A50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847A94.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847BF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847E2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847ED4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847F1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847FF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848048.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808481CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848250.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848294.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808482E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808484CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808484F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848570.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848640.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848780.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808487B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848808.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084894C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848A0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848AB0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848B6C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848BF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848E4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849054.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808490B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808491B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084923C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808492C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084933C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849570.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849620.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808496AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808497A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849A9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849DD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849FE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A26C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A5C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A794.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A884.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A8E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AB4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AC84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AEEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AF9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B0EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B288.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B3B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B4A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B5C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BAA4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BBF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BC64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BE40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BF28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BFDC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C124.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C16C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C6EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C94C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CA24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CB58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CCEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CE84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D18C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D4EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D770.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D820.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E034.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E25C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E334.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E434.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E4E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E58C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E65C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E724.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E980.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084ED9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084EE50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084EF9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F1B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F3DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F4E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FC0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FD7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FE48.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FE7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808505D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850734.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850854.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808508C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850BA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850BF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850D20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850D68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808513EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851588.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808516B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808519FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851B58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851BD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851C40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851D30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851EAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851EC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851F18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808521E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852290.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085255C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808525C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085269C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852B28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852C04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852FD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808530E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853194.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808534C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853754.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853850.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853A5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853CC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853D68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854010.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808540A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854118.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085421C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085437C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085439C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854430.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854614.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808546D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854800.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808548B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854C70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854CD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854EFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808550D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855218.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808553F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855818.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855A7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855AF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855B9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855C28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855E08.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855F9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856000.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856074.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856110.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808561B0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808566C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085687C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856888.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856918.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808573A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857640.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808576BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808577E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857950.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857A44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857AEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857BE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858C84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858CC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858D48.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DB4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DDC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858FBC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858FE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859028.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859168.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808591BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859210.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859248.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085929C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859300.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859414.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808594D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808595B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085968C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859708.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085978C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859890.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859990.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808599DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859A10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859A44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859AD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859AF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859B28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859B54.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859BA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859C60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859D44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859D70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859EBC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859F4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859FCC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859FF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A04C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A120.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A144.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A19C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A1D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A24C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A2AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A330.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A364.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A40C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A4A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A530.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A5DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A66C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A6C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A710.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A768.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A7C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A8C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A940.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AACC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AB58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085ABA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AC9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AD5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085ADA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B08C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B134.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B170.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B1F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B28C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B384.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B3E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B460.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B74C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B820.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B854.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B930.s") +s32 Player_GrabPlayer(PlayState* play, Player* player); +s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode); +void func_8085B384(Player* this, PlayState* play); +s32 Player_InflictDamage(PlayState* play, s32 damage); +void Player_TalkWithPlayer(PlayState* play, Actor* actor); +void func_8085B74C(PlayState* play); +void func_8085B820(PlayState* play, s16 arg1); +PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId); +s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode); + +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 func_80831990(PlayState* play, Player* this, ItemId item); + +s32 func_80848BF4(Player* this, PlayState* play); + +void func_80836988(Player* this, PlayState* play); + +void func_808484F0(Player* this); + +void func_80838A20(PlayState* play, Player* this); +void func_80839978(PlayState* play, Player* this); +void func_80839A10(PlayState* play, Player* this); + +typedef enum AnimSfxType { + /* 1 */ ANIMSFX_TYPE_GENERAL = 1, + /* 2 */ ANIMSFX_TYPE_FLOOR, + /* 3 */ ANIMSFX_TYPE_FLOOR_BY_AGE, + /* 4 */ ANIMSFX_TYPE_VOICE, + /* 5 */ ANIMSFX_TYPE_FLOOR_LAND, // does not use sfxId + /* 6 */ ANIMSFX_TYPE_6, // FLOOR_WALK_Something // does not use sfxId + /* 7 */ ANIMSFX_TYPE_FLOOR_JUMP, // does not use sfxId + /* 8 */ ANIMSFX_TYPE_8, // FLOOR_WALK_Something2 // does not use sfxId + /* 9 */ ANIMSFX_TYPE_9, // Uses NA_SE_PL_WALK_LADDER // does not use sfxId, unused + /* 10 */ ANIMSFX_TYPE_SURFACE, +} AnimSfxType; + +#define ANIMSFX_SHIFT_TYPE(type) ((type) << 11) + +#define ANIMSFX_CONTINUE (1) +#define ANIMSFX_STOP (0) + +#define ANIMSFX_FLAGS(type, frame, cont) \ + (((ANIMSFX_##cont) == ANIMSFX_STOP ? -1 : 1) * (ANIMSFX_SHIFT_TYPE(type) | ((frame)&0x7FF))) + +#define ANIMSFX(type, frame, sfxId, cont) \ + { (sfxId), ANIMSFX_FLAGS(type, frame, cont) } + +#define ANIMSFX_GET_TYPE(data) ((data)&0x7800) +#define ANIMSFX_GET_FRAME(data) ((data)&0x7FF) + +typedef struct AnimSfxEntry { + /* 0x0 */ u16 sfxId; + /* 0x2 */ s16 flags; // negative marks the end +} AnimSfxEntry; // size = 0x4 + +/* action funcs */ +void func_808496AC(Player* this, PlayState* play); +void func_808497A0(Player* this, PlayState* play); +void func_80849A9C(Player* this, PlayState* play); +void func_80849DD0(Player* this, PlayState* play); +void func_80849FE0(Player* this, PlayState* play); +void func_8084A26C(Player* this, PlayState* play); +void func_8084A5C0(Player* this, PlayState* play); +void func_8084A794(Player* this, PlayState* play); +void func_8084A884(Player* this, PlayState* play); +void func_8084A8E8(Player* this, PlayState* play); +void func_8084AB4C(Player* this, PlayState* play); +void func_8084AC84(Player* this, PlayState* play); +void func_8084AEEC(Player* this, PlayState* play); +void func_8084AF9C(Player* this, PlayState* play); +void func_8084B0EC(Player* this, PlayState* play); +void func_8084B288(Player* this, PlayState* play); +void func_8084B3B8(Player* this, PlayState* play); +void func_8084B4A8(Player* this, PlayState* play); +void func_8084B5C0(Player* this, PlayState* play); +void func_8084BAA4(Player* this, PlayState* play); +void func_8084BBF0(Player* this, PlayState* play); +void func_8084BC64(Player* this, PlayState* play); +void func_8084BE40(Player* this, PlayState* play); +void func_8084BF28(Player* this, PlayState* play); +void func_8084BFDC(Player* this, PlayState* play); +void func_8084C16C(Player* this, PlayState* play); +void func_8084C6EC(Player* this, PlayState* play); +void func_8084C94C(Player* this, PlayState* play); +void func_8084CA24(Player* this, PlayState* play); +void func_8084CB58(Player* this, PlayState* play); +void func_8084CCEC(Player* this, PlayState* play); +void func_8084CE84(Player* this, PlayState* play); +void func_8084D18C(Player* this, PlayState* play); +void func_8084D4EC(Player* this, PlayState* play); +void func_8084D770(Player* this, PlayState* play); +void func_8084D820(Player* this, PlayState* play); +void func_8084E034(Player* this, PlayState* play); +void func_8084E25C(Player* this, PlayState* play); +void func_8084E334(Player* this, PlayState* play); +void func_8084E434(Player* this, PlayState* play); +void func_8084E4E4(Player* this, PlayState* play); +void func_8084E58C(Player* this, PlayState* play); +void func_8084E65C(Player* this, PlayState* play); +void func_8084E724(Player* this, PlayState* play); +void func_8084E980(Player* this, PlayState* play); +void func_8084ED9C(Player* this, PlayState* play); +void func_8084EE50(Player* this, PlayState* play); +void func_8084EF9C(Player* this, PlayState* play); +void func_8084F1B8(Player* this, PlayState* play); +void func_8084F3DC(Player* this, PlayState* play); +void func_8084F4E8(Player* this, PlayState* play); +void func_8084FC0C(Player* this, PlayState* play); +void func_8084FE7C(Player* this, PlayState* play); +void func_808505D0(Player* this, PlayState* play); +void func_808508C8(Player* this, PlayState* play); +void func_80850B18(Player* this, PlayState* play); +void func_80850D68(Player* this, PlayState* play); +void func_808513EC(Player* this, PlayState* play); +void func_80851588(Player* this, PlayState* play); +void func_808516B4(Player* this, PlayState* play); +void func_808519FC(Player* this, PlayState* play); +void func_80851B58(Player* this, PlayState* play); +void func_80851BD4(Player* this, PlayState* play); +void func_8085269C(Player* this, PlayState* play); +void func_80852B28(Player* this, PlayState* play); +void func_80852C04(Player* this, PlayState* play); +void func_80852FD4(Player* this, PlayState* play); +void func_80853194(Player* this, PlayState* play); +void func_808534C0(Player* this, PlayState* play); +void func_80853754(Player* this, PlayState* play); +void func_80853850(Player* this, PlayState* play); +void func_80853A5C(Player* this, PlayState* play); +void func_80853CC0(Player* this, PlayState* play); +void func_80853D68(Player* this, PlayState* play); +void func_80854010(Player* this, PlayState* play); +void func_808540A0(Player* this, PlayState* play); +void func_80854118(Player* this, PlayState* play); +void func_8085421C(Player* this, PlayState* play); +void func_8085437C(Player* this, PlayState* play); +void func_8085439C(Player* this, PlayState* play); +void func_80854430(Player* this, PlayState* play); +void func_80854614(Player* this, PlayState* play); +void func_808546D0(Player* this, PlayState* play); +void func_80854800(Player* this, PlayState* play); +void func_808548B8(Player* this, PlayState* play); +void func_80854C70(Player* this, PlayState* play); +void func_808553F4(Player* this, PlayState* play); +void func_80855818(Player* this, PlayState* play); +void func_80855A7C(Player* this, PlayState* play); +void func_80855AF4(Player* this, PlayState* play); +void func_80855B9C(Player* this, PlayState* play); +void func_80855C28(Player* this, PlayState* play); +void func_80855E08(Player* this, PlayState* play); +void func_808561B0(Player* this, PlayState* play); +void func_80856918(Player* this, PlayState* play); +void func_808573A4(Player* this, PlayState* play); +void func_80857BE8(Player* this, PlayState* play); +void func_8085B08C(Player* this, PlayState* play); + +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 func_80848780(Player* this, PlayState* play); +s32 func_808487B8(Player* this, PlayState* play); +s32 func_80848B6C(Player* this, PlayState* play); +s32 func_808490B4(Player* this, PlayState* play); +s32 func_808491B4(Player* this, PlayState* play); +s32 func_80848808(Player* this, PlayState* play); +s32 func_8084894C(Player* this, PlayState* play); +s32 func_80848A0C(Player* this, PlayState* play); +s32 func_80848AB0(Player* this, PlayState* play); +s32 func_80848E4C(Player* this, PlayState* play); +s32 func_80849054(Player* this, PlayState* play); +s32 func_8084923C(Player* this, PlayState* play); +s32 func_808492C4(Player* this, PlayState* play); +s32 func_8084933C(Player* this, PlayState* play); +s32 func_80849570(Player* this, PlayState* play); +s32 func_80849620(Player* this, PlayState* play); + +/* Init Mode functions */ +void Player_InitMode_0(PlayState* play, Player* this); +void Player_InitMode_1(PlayState* play, Player* this); +void Player_InitMode_2(PlayState* play, Player* this); +void Player_InitMode_3(PlayState* play, Player* this); +void Player_InitMode_4(PlayState* play, Player* this); +void Player_InitMode_5(PlayState* play, Player* this); +void Player_InitMode_6(PlayState* play, Player* this); +void Player_InitMode_7(PlayState* play, Player* this); +void func_80841744(PlayState* play, Player* this); +void func_80841744(PlayState* play, Player* this); +void func_8083ADF0(PlayState* play, Player* this); +void Player_InitMode_B(PlayState* play, Player* this); +void Player_InitMode_Telescope(PlayState* play, Player* this); +void Player_InitMode_D(PlayState* play, Player* this); +void func_8083ADF0(PlayState* play, Player* this); +void Player_InitMode_F(PlayState* play, Player* this); + +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2); + +void func_80859EBC(PlayState* play, Player* this, s32 arg2); + +void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859AD0(PlayState* play, Player* this, void* arg2); +void func_80859B28(PlayState* play, Player* this, void* arg2); +void func_8085ADA0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859C60(PlayState* play, Player* this, void* arg2); +void func_8085A710(PlayState* play, Player* this, void* anim); +void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A6C0(PlayState* play, Player* this, void* anim); +void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2); +void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg); +void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A364(PlayState* play, Player* this, void* arg2); +void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A40C(PlayState* play, Player* this, void* arg2); +void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A4A4(PlayState* play, Player* this, void* arg2); +void func_8085A5DC(PlayState* play, Player* this, void* arg2); +void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859AF8(PlayState* play, Player* this, void* arg2); +void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859EBC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); + +void func_8085A768(PlayState* play, Player* this, void* arg2); +void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2); + +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859CA0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A66C(PlayState* play, Player* this, void* arg2); +void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A530(PlayState* play, Player* this, void* arg2); +void func_8085A768(PlayState* play, Player* this, void* arg2); +void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2); + +// ItemActions +void func_8082F594(PlayState* play, Player* this); +void func_8082F5A4(PlayState* play, Player* this); +void func_8082F8A0(PlayState* play, Player* this); +void func_8082F5C0(PlayState* play, Player* this); +void func_8082F7F4(PlayState* play, Player* this); +void Player_SpawnExplosive(PlayState* play, Player* this); + +void func_80858DB4(PlayState* play, Player* this, void* anim); +void func_80858DDC(PlayState* play, Player* this, void* anim); +void func_80858E40(PlayState* play, Player* this, void* anim); +void func_80858E60(PlayState* play, Player* this, void* anim); +void func_80858E80(PlayState* play, Player* this, void* anim); +void func_80858EA0(PlayState* play, Player* this, void* anim); +void func_80858EFC(PlayState* play, Player* this, void* anim); +void func_80858F1C(PlayState* play, Player* this, void* anim); +void func_80858F3C(PlayState* play, Player* this, void* anim); +void func_80858F5C(PlayState* play, Player* this, void* anim); +void func_80858FBC(PlayState* play, Player* this, void* anim); +void func_80859028(PlayState* play, Player* this, void* anim); +void func_808591BC(PlayState* play, Player* this, void* anim); +void func_80858DFC(PlayState* play, Player* this, void* anim); +void func_80858EC0(PlayState* play, Player* this, void* anim); +void func_80858F7C(PlayState* play, Player* this, void* anim); +void func_80858F9C(PlayState* play, Player* this, void* anim); +void func_80859168(PlayState* play, Player* this, void* anim); +void func_80859210(PlayState* play, Player* this, void* arg2); + +typedef struct struct_8085C2A4 { + /* 0x0 */ PlayerAnimationHeader* unk_0; + /* 0x4 */ PlayerAnimationHeader* unk_4; + /* 0x8 */ PlayerAnimationHeader* unk_8; +} struct_8085C2A4; // size = 0xC + +typedef struct BlureColors { + /* 0x0 */ u8 p1StartColor[4]; + /* 0x4 */ u8 p2StartColor[4]; + /* 0x8 */ u8 p1EndColor[4]; + /* 0xC */ u8 p2EndColor[4]; +} BlureColors; // size = 0x10 + +typedef void (*PlayerCueInterpreter)(PlayState*, Player*, CsCmdActorCue*); + +typedef struct struct_8085DA94 { + /* 0x0 */ s8 type; + /* 0x4 */ union { + void* ptr; // Do not use, required in the absence of designated initialisors + PlayerAnimationHeader* anim; + PlayerCueInterpreter func; + AnimSfxEntry* entry; + }; +} struct_8085DA94; // size = 0x8 + +typedef struct struct_8085E368 { + /* 0x0 */ Vec3s base; + /* 0x6 */ Vec3s range; +} struct_8085E368; // size = 0xC + +typedef struct struct_8085D910 { + /* 0x0 */ u8 unk_0; + /* 0x1 */ u8 unk_1; + /* 0x2 */ u8 unk_2; + /* 0x3 */ u8 unk_3; +} struct_8085D910; // size = 0x4 + +typedef struct struct_8085D848_unk_00 { + /* 0x0 */ s16 fogNear; + /* 0x2 */ u8 fogColor[3]; + /* 0x5 */ u8 ambientColor[3]; +} struct_8085D848_unk_00; // size = 0x8 + +typedef struct struct_8085D848_unk_18 { + /* 0x00 */ Vec3f pos; + /* 0x0C */ u8 color[3]; + /* 0x10 */ s16 radius; +} struct_8085D848_unk_18; // size = 0x14 + +typedef struct struct_8085D848 { + /* 0x00 */ struct_8085D848_unk_00 unk_00[3]; + /* 0x18 */ struct_8085D848_unk_18 light[3]; +} struct_8085D848; // size = 0x54 + +typedef struct struct_8085D80C { + /* 0x0 */ s16 actorId; + /* 0x2 */ s16 params; +} struct_8085D80C; // size = 0x4 + +typedef struct struct_8085D798 { + /* 0x0 */ s16 actorId; + /* 0x2 */ s8 actorParams; + /* 0x3 */ u8 itemId; + /* 0x4 */ u8 itemAction; + /* 0x5 */ u8 textId; +} struct_8085D798; // size = 0x6 + +typedef struct struct_8085D714 { + /* 0x0 */ u8 unk_0; + /* 0x4 */ PlayerAnimationHeader* unk_4; +} struct_8085D714; // size = 0x8 + +typedef struct struct_8085D224 { + /* 0x0 */ PlayerAnimationHeader* anim; + /* 0x4 */ f32 unk_4; + /* 0x8 */ f32 unk_8; +} struct_8085D224; // size = 0xC + +typedef struct FallImpactInfo { + /* 0x0 */ s8 damage; + /* 0x1 */ u8 sourceIntensity; + /* 0x2 */ u8 decayTimer; + /* 0x3 */ u8 decayStep; + /* 0x4 */ u16 sfxId; +} FallImpactInfo; // size = 0x6 + +typedef struct AttackAnimInfo { + /* 0x00 */ PlayerAnimationHeader* unk_0; + /* 0x04 */ PlayerAnimationHeader* unk_4; + /* 0x08 */ PlayerAnimationHeader* unk_8; + /* 0x0C */ u8 unk_C; + /* 0x0D */ u8 unk_D; +} AttackAnimInfo; // size = 0x10 + +typedef struct MeleeWeaponDamageInfo { + /* 0x0 */ s32 dmgFlags; + // Presumably these two fields are intended for Fierce Deity, but will also work for Deku if it can equip a sword + /* 0x4 */ u8 dmgTransformedNormal; + /* 0x5 */ u8 dmgTransformedStrong; + /* 0x6 */ u8 dmgHumanNormal; + /* 0x7 */ u8 dmgHumanStrong; +} MeleeWeaponDamageInfo; // size = 0x8 + +typedef struct struct_8085CC88 { + /* 0x0 */ PlayerAnimationHeader* anim; + /* 0x4 */ u8 frame; +} struct_8085CC88; // size = 0x8 + +typedef struct { + /* 0x0 */ u8 itemId; + /* 0x2 */ s16 actorId; +} ExplosiveInfo; // size = 0x4 + +typedef struct { + /* 0x0 */ Color_RGB8 unk_0; + /* 0x3 */ Color_RGB8 unk_3; + /* 0x6 */ Color_RGB8 unk_6; + /* 0xA */ s16 unk_A; + /* 0xC */ s16 unk_C; +} struct_8082F02C_arg1; // size = 0xE + +typedef struct GetItemEntry { + /* 0x0 */ u8 itemId; + /* 0x1 */ u8 field; // various bit-packed data + /* 0x2 */ s8 gid; // defines the draw id and chest opening animation + /* 0x3 */ u8 textId; + /* 0x4 */ u16 objectId; +} GetItemEntry; // size = 0x6 + +typedef struct struct_8085D200 { + /* 0x0 */ PlayerAnimationHeader* unk_0; + /* 0x4 */ PlayerAnimationHeader* unk_4; + /* 0x8 */ u8 unk_8; + /* 0x9 */ u8 unk_9; +} struct_8085D200; // size = 0xC + +f32 D_80862AFC; // distance of the analog stick to its center +s16 D_80862B00; // analog stick angle/yaw +s16 D_80862B02; // analog stick yaw + camera yaw +s32 D_80862B04; // boolean, set to the return value of func_8083216C +FloorType sPlayerCurrentFloorType; +u32 sPlayerCurrentWallFlags; +ConveyorSpeed sPlayerConveyorSpeedIndex; +s16 sPlayerIsOnFloorConveyor; +s16 D_80862B16; // SurfaceType_GetConveyorDirection << 0xA +f32 D_80862B18; // D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight; +FloorProperty sPlayerPrevFloorProperty; +s32 D_80862B20; // ABS_ALT(this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000)) +s32 D_80862B24; // ABS_ALT(BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000))) +s16 D_80862B28; +s32 D_80862B2C; // D_80862B2C = player->currentMask; +Vec3f D_80862B30; +f32 D_80862B3C; +FloorEffect D_80862B40; // SurfaceType_GetFloorEffect +Input* sPlayerControlInput; +s32 D_80862B48; +s32 D_80862B4C; +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); +} + +void Player_StopHorizontalMovement(Player* this) { + this->linearVelocity = 0.0f; + this->actor.speed = 0.0f; +} + +void func_8082DAD4(Player* this) { + Player_StopHorizontalMovement(this); + this->unk_AA5 = PLAYER_UNKAA5_0; +} + +s32 func_8082DAFC(PlayState* play) { + Player* player = GET_PLAYER(play); + + return CHECK_FLAG_ALL(player->actor.flags, ACTOR_FLAG_TALK_REQUESTED); +} + +void Player_AnimationPlayOnce(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayOnce(play, &this->skelAnime, anim); +} + +void Player_AnimationPlayLoop(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayLoop(play, &this->skelAnime, anim); +} + +void func_8082DB60(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayLoopSetSpeed(play, &this->skelAnime, anim, 2.0f / 3.0f); +} + +void func_8082DB90(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 2.0f / 3.0f); +} + +void Player_AnimationPlayOnceReverse(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, -2.0f / 3.0f, Animation_GetLastFrame(anim), 0.0f, + ANIMMODE_ONCE, 0.0f); +} + +void func_8082DC28(Player* this) { + this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y = 0; +} + +void func_8082DC38(Player* this) { + this->stateFlags2 &= ~PLAYER_STATE2_20000; + this->meleeWeaponState = PLAYER_MELEE_WEAPON_STATE_0; + this->meleeWeaponInfo[2].active = false; + this->meleeWeaponInfo[1].active = false; + this->meleeWeaponInfo[0].active = false; +} + +void func_8082DC64(PlayState* play, Player* this) { + if ((this->subCamId != CAM_ID_NONE) && (play->cameraPtrs[this->subCamId] != NULL)) { + this->subCamId = CAM_ID_NONE; + } + + this->stateFlags2 &= ~(PLAYER_STATE2_400 | PLAYER_STATE2_800); +} + +void func_8082DCA0(PlayState* play, Player* this) { + Actor* heldActor = this->heldActor; + + if ((heldActor != NULL) && !Player_IsHoldingHookshot(this)) { + this->actor.child = NULL; + this->heldActor = NULL; + this->interactRangeActor = NULL; + heldActor->parent = NULL; + this->stateFlags1 &= ~PLAYER_STATE1_800; + } + + if (Player_GetExplosiveHeld(this) > PLAYER_EXPLOSIVE_NONE) { + func_8082F8BC(play, this, PLAYER_IA_NONE); + this->heldItemId = ITEM_FE; + } +} + +void func_8082DD2C(PlayState* play, Player* this) { + if ((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor == NULL)) { + if (this->interactRangeActor != NULL) { + if (this->getItemId == GI_NONE) { + this->stateFlags1 &= ~PLAYER_STATE1_800; + this->interactRangeActor = NULL; + } + } else { + this->stateFlags1 &= ~PLAYER_STATE1_800; + } + } + + func_8082DC38(this); + this->unk_AA5 = PLAYER_UNKAA5_0; + func_8082DC64(play, this); + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + this->stateFlags1 &= + ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000); + this->stateFlags2 &= ~(PLAYER_STATE2_10 | PLAYER_STATE2_80); + this->unk_ADD = 0; + this->unk_ADC = 0; + this->actor.shape.rot.x = 0; + this->actor.shape.rot.z = 0; + this->unk_ABC = 0.0f; + this->unk_AC0 = 0.0f; +} + +s32 func_8082DE14(PlayState* play, Player* this) { + if (this->heldItemAction > PLAYER_IA_LAST_USED) { + func_80831990(play, this, ITEM_NONE); + return true; + } else { + return false; + } +} + +void func_8082DE50(PlayState* play, Player* this) { + func_8082DD2C(play, this); + func_8082DCA0(play, this); +} + +s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) { + s16 temp_v0 = this->unk_D64 - D_80862B00; + + this->unk_AE8 += arg1 + (s16)(ABS_ALT(temp_v0) * fabsf(D_80862AFC) * (1.0f / 0x600F0)); + if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B | BTN_A)) { + this->unk_AE8 += 5; + } + + return this->unk_AE8 >= arg2; +} + +void func_8082DF2C(PlayState* play) { + if (play->actorCtx.freezeFlashTimer == 0) { + play->actorCtx.freezeFlashTimer = 1; + } +} + +u8 D_8085B9F0[PLAYER_LIMB_MAX] = { + false, // PLAYER_LIMB_NONE + false, // PLAYER_LIMB_ROOT + false, // PLAYER_LIMB_WAIST + false, // PLAYER_LIMB_LOWER_ROOT + false, // PLAYER_LIMB_R_THIGH + false, // PLAYER_LIMB_R_SHIN + false, // PLAYER_LIMB_R_FOOT + false, // PLAYER_LIMB_L_THIGH + false, // PLAYER_LIMB_L_SHIN + false, // PLAYER_LIMB_L_FOOT + true, // PLAYER_LIMB_UPPER_ROOT + true, // PLAYER_LIMB_HEAD + true, // PLAYER_LIMB_HAT + true, // PLAYER_LIMB_COLLAR + true, // PLAYER_LIMB_L_SHOULDER + true, // PLAYER_LIMB_L_FOREARM + true, // PLAYER_LIMB_L_HAND + true, // PLAYER_LIMB_R_SHOULDER + true, // PLAYER_LIMB_R_FOREARM + true, // PLAYER_LIMB_R_HAND + true, // PLAYER_LIMB_SHEATH + true, // PLAYER_LIMB_TORSO +}; +u8 D_8085BA08[PLAYER_LIMB_MAX] = { + false, // PLAYER_LIMB_NONE + false, // PLAYER_LIMB_ROOT + false, // PLAYER_LIMB_WAIST + false, // PLAYER_LIMB_LOWER_ROOT + false, // PLAYER_LIMB_R_THIGH + false, // PLAYER_LIMB_R_SHIN + false, // PLAYER_LIMB_R_FOOT + false, // PLAYER_LIMB_L_THIGH + false, // PLAYER_LIMB_L_SHIN + false, // PLAYER_LIMB_L_FOOT + false, // PLAYER_LIMB_UPPER_ROOT + false, // PLAYER_LIMB_HEAD + false, // PLAYER_LIMB_HAT + false, // PLAYER_LIMB_COLLAR + true, // PLAYER_LIMB_L_SHOULDER + true, // PLAYER_LIMB_L_FOREARM + true, // PLAYER_LIMB_L_HAND + false, // PLAYER_LIMB_R_SHOULDER + false, // PLAYER_LIMB_R_FOREARM + false, // PLAYER_LIMB_R_HAND + false, // PLAYER_LIMB_SHEATH + false, // PLAYER_LIMB_TORSO +}; +u8 D_8085BA20[PLAYER_LIMB_MAX] = { + false, // PLAYER_LIMB_NONE + false, // PLAYER_LIMB_ROOT + false, // PLAYER_LIMB_WAIST + false, // PLAYER_LIMB_LOWER_ROOT + false, // PLAYER_LIMB_R_THIGH + false, // PLAYER_LIMB_R_SHIN + false, // PLAYER_LIMB_R_FOOT + false, // PLAYER_LIMB_L_THIGH + false, // PLAYER_LIMB_L_SHIN + false, // PLAYER_LIMB_L_FOOT + false, // PLAYER_LIMB_UPPER_ROOT + false, // PLAYER_LIMB_HEAD + false, // PLAYER_LIMB_HAT + false, // PLAYER_LIMB_COLLAR + false, // PLAYER_LIMB_L_SHOULDER + false, // PLAYER_LIMB_L_FOREARM + false, // PLAYER_LIMB_L_HAND + true, // PLAYER_LIMB_R_SHOULDER + true, // PLAYER_LIMB_R_FOREARM + true, // PLAYER_LIMB_R_HAND + false, // PLAYER_LIMB_SHEATH + false, // PLAYER_LIMB_TORSO +}; + +void Player_RequestRumble(PlayState* play, Player* this, s32 sourceIntensity, s32 decayTimer, s32 decayStep, + s32 distSq) { + if (this == GET_PLAYER(play)) { + Rumble_Request(distSq, sourceIntensity, decayTimer, decayStep); + } +} + +// TODO: less dumb name +#define SFX_VOICE_BANK_SIZE 0x20 + +PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { + { + // unk_00; + 84.0f, + // shadowScale; + 90.0f, + // unk_08; + 1.5f, + // unk_0C; + 166.5f, + // unk_10; + 105.0f, + // unk_14; + 119.100006f, + // unk_18; + 88.5f, + // unk_1C; + 61.5f, + // unk_20; + 28.5f, + // unk_24; + 54.0f, + // unk_28; + 75.0f, + // unk_2C; + 84.0f, + // unk_30; + 102.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 27.0f, + // unk_3C; + 24.75f, + // unk_40; + 105.0f, + // unk_44 + { 9, 0x123F, 0x167 }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + }, + { + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 0, + // surfaceSfxIdOffset; + 0x80, + // unk_98; + 33.0f, + // unk_9C; + 44.15145f, + // openChestAnim + &gPlayerAnim_link_demo_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_link_normal_climb_startA, + // unk_B0 + &gPlayerAnim_link_normal_climb_startB, + // unk_B4 + { + &gPlayerAnim_link_normal_climb_upL, + &gPlayerAnim_link_normal_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_link_normal_climb_endAL, + &gPlayerAnim_link_normal_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_link_normal_climb_endBR, + &gPlayerAnim_link_normal_climb_endBL, + }, + }, + { + // unk_00; + 70.0f, + // shadowScale; + 90.0f, + // unk_08; + 0.74f, + // unk_0C; + 111.0f, + // unk_10; + 70.0f, + // unk_14; + 79.4f, + // unk_18; + 59.0f, + // unk_1C; + 41.0f, + // unk_20; + 19.0f, + // unk_24; + 36.0f, + // unk_28; + 50.0f, + // unk_2C; + 56.0f, + // unk_30; + 68.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 19.5f, + // unk_3C; + 18.2f, + // unk_40; + 80.0f, + // unk_44 + { 0x17, 0xF3B, 0xDF }, + { + { 0x18, 0xF3B, 0xDF }, + { 0x17, 0x14CF, 0xDF }, + { 0x18, 0xF3B, 0xDF }, + { 0x17, 0x14CF, 0xDF }, + }, + { + { 0x17, 0x14CF, 0xDF }, + { 0x18, 0x1AF2, 0xDF }, + { 0x17, 0x14CF, 0xDF }, + { 0x18, 0x1AF2, 0xDF }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 6, + // surfaceSfxIdOffset; + 0x150, + // unk_98; + -25.0f, + // unk_9C; + 42.0f, + // openChestAnim + &gPlayerAnim_pg_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_pg_climb_startA, + // unk_B0 + &gPlayerAnim_pg_climb_startB, + // unk_B4 + { + &gPlayerAnim_pg_climb_upL, + &gPlayerAnim_pg_climb_upR, + &gPlayerAnim_pg_climb_upL, + &gPlayerAnim_pg_climb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_pg_climb_endAL, + &gPlayerAnim_pg_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_pg_climb_endBR, + &gPlayerAnim_pg_climb_endBL, + }, + }, + { + // unk_00; + 56.0f, + // shadowScale; + 90.0f, + // unk_08; + 1.0f, + // unk_0C; + 111.0f, + // unk_10; + 70.0f, + // unk_14; + 79.4f, + // unk_18; + 59.0f, + // unk_1C; + 41.0f, + // unk_20; + 19.0f, + // unk_24; + 36.0f, + // unk_28; + 50.0f, + // unk_2C; + 56.0f, + // unk_30; + 68.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 18.0f, + // unk_3C; + 23.0f, + // unk_40; + 70.0f, + // unk_44 + { 0x17, 0x1323, -0x6D }, + { + { 0x17, 0x1323, -0x58 }, + { 0x17, 0x18B7, -0x6D }, + { 0x17, 0x1323, -0x58 }, + { 0x17, 0x18B7, -0x6D }, + }, + { + { 0x17, 0x18B7, -0x6D }, + { 0x18, 0x1EDA, -0x58 }, + { 0x17, 0x18B7, -0x6D }, + { 0x18, 0x1EDA, -0x58 }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 5, + // surfaceSfxIdOffset; + 0x120, + // unk_98; + 22.0f, + // unk_9C; + 36.0f, + // openChestAnim + &gPlayerAnim_pz_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_pz_climb_startA, + // unk_B0 + &gPlayerAnim_pz_climb_startB, + // unk_B4 + { + &gPlayerAnim_pz_climb_upL, + &gPlayerAnim_pz_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_pz_climb_endAL, + &gPlayerAnim_pz_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_pz_climb_endBR, + &gPlayerAnim_pz_climb_endBL, + }, + }, + { + // unk_00; + 35.0f, + // shadowScale; + 50.0f, + // unk_08; + 0.3f, + // unk_0C; + 71.0f, + // unk_10; + 50.0f, + // unk_14; + 49.0f, + // unk_18; + 39.0f, + // unk_1C; + 27.0f, + // unk_20; + 19.0f, + // unk_24; + 8.0f, + // unk_28; + 13.6f, + // unk_2C; + 24.0f, + // unk_30; + 24.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 14.0f, + // unk_3C; + 12.0f, + // unk_40; + 55.0f, + // unk_44 + { -0x18, 0xDED, 0x36C }, + { + { -0x18, 0xD92, 0x35E }, + { -0x18, 0x1371, 0x3A9 }, + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + }, + { + { -0x18, 0x1371, 0x3A9 }, + { -0x18, 0x195F, 0x3A9 }, + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 4, + // surfaceSfxIdOffset; + 0xF0, + // unk_98; + -21.0f, + // unk_9C; + 33.0f, + // openChestAnim + &gPlayerAnim_pn_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_clink_normal_climb_startA, + // unk_B0 + &gPlayerAnim_clink_normal_climb_startB, + // unk_B4 + { + &gPlayerAnim_clink_normal_climb_upL, + &gPlayerAnim_clink_normal_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_clink_normal_climb_endAL, + &gPlayerAnim_clink_normal_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_clink_normal_climb_endBR, + &gPlayerAnim_clink_normal_climb_endBL, + }, + }, + { + // unk_00; + 40.0f, + // shadowScale; + 60.0f, + // unk_08; + 11.0f / 17.0f, + // unk_0C; + 71.0f, + // unk_10; + 50.0f, + // unk_14; + 49.0f, + // unk_18; + 39.0f, + // unk_1C; + 27.0f, + // unk_20; + 19.0f, + // unk_24; + 22.0f, + // unk_28; + 32.4f, + // unk_2C; + 32.0f, + // unk_30; + 48.0f, + // unk_34; // height? + 11.0f / 17.0f * 70.0f, + // unk_38; + 14.0f, + // unk_3C; + 12.0f, + // unk_40; + 55.0f, + // unk_44 + { -0x18, 0xDED, 0x36C }, + { + { -0x18, 0xD92, 0x35E }, + { -0x18, 0x1371, 0x3A9 }, + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + }, + { + { -0x18, 0x1371, 0x3A9 }, + { -0x18, 0x195F, 0x3A9 }, + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 1, + // surfaceSfxIdOffset; + 0, + // unk_98; + 22.0f, + // unk_9C; + 29.4343f, + // openChestAnim + &gPlayerAnim_clink_demo_Tbox_open, + // unk_A4 + &gPlayerAnim_clink_demo_goto_future, + // unk_A8 + &gPlayerAnim_clink_demo_return_to_future, + // unk_AC + &gPlayerAnim_clink_normal_climb_startA, + // unk_B0 + &gPlayerAnim_clink_normal_climb_startB, + // unk_B4 + { + &gPlayerAnim_clink_normal_climb_upL, + &gPlayerAnim_clink_normal_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_clink_normal_climb_endAL, + &gPlayerAnim_clink_normal_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_clink_normal_climb_endBR, + &gPlayerAnim_clink_normal_climb_endBL, + }, + }, +}; + +PlayerAnimationHeader* D_8085BE84[PLAYER_ANIMGROUP_MAX][PLAYER_ANIMTYPE_MAX] = { + // PLAYER_ANIMGROUP_0 + { + &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward + &gPlayerAnim_link_normal_wait, // Default idle standing, looking forward, sword and shield + &gPlayerAnim_link_normal_wait, // Default idle standing, looking forward, sword and shield + &gPlayerAnim_link_fighter_wait_long, // Default idle standing, looking forward, two hand weapon + &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward + &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward + }, + // PLAYER_ANIMGROUP_1 + { + &gPlayerAnim_link_normal_walk_free, + &gPlayerAnim_link_normal_walk, + &gPlayerAnim_link_normal_walk, + &gPlayerAnim_link_fighter_walk_long, + &gPlayerAnim_link_normal_walk_free, + &gPlayerAnim_link_normal_walk_free, + }, + // PLAYER_ANIMGROUP_2 + { + &gPlayerAnim_link_normal_run_free, // Running with empty hands + &gPlayerAnim_link_fighter_run, // Running with Sword and Shield in hands + &gPlayerAnim_link_normal_run, + &gPlayerAnim_link_fighter_run_long, // Running with Two handed weapon + &gPlayerAnim_link_normal_run_free, // Running with empty hands + &gPlayerAnim_link_normal_run_free, // Running with empty hands + }, + // PLAYER_ANIMGROUP_3 + { + &gPlayerAnim_link_normal_damage_run_free, + &gPlayerAnim_link_fighter_damage_run, + &gPlayerAnim_link_normal_damage_run_free, + &gPlayerAnim_link_fighter_damage_run_long, + &gPlayerAnim_link_normal_damage_run_free, + &gPlayerAnim_link_normal_damage_run_free, + }, + // PLAYER_ANIMGROUP_4 + { + &gPlayerAnim_link_normal_waitL_free, + &gPlayerAnim_link_anchor_waitL, + &gPlayerAnim_link_anchor_waitL, + &gPlayerAnim_link_fighter_waitL_long, + &gPlayerAnim_link_normal_waitL_free, + &gPlayerAnim_link_normal_waitL_free, + }, + // PLAYER_ANIMGROUP_5 + { + &gPlayerAnim_link_normal_waitR_free, + &gPlayerAnim_link_anchor_waitR, + &gPlayerAnim_link_anchor_waitR, + &gPlayerAnim_link_fighter_waitR_long, + &gPlayerAnim_link_normal_waitR_free, + &gPlayerAnim_link_normal_waitR_free, + }, + // PLAYER_ANIMGROUP_6 + { + &gPlayerAnim_link_fighter_wait2waitR_long, + &gPlayerAnim_link_normal_wait2waitR, + &gPlayerAnim_link_normal_wait2waitR, + &gPlayerAnim_link_fighter_wait2waitR_long, + &gPlayerAnim_link_fighter_wait2waitR_long, + &gPlayerAnim_link_fighter_wait2waitR_long, + }, + // PLAYER_ANIMGROUP_7 + { + &gPlayerAnim_link_normal_normal2fighter_free, + &gPlayerAnim_link_fighter_normal2fighter, + &gPlayerAnim_link_fighter_normal2fighter, + &gPlayerAnim_link_normal_normal2fighter_free, + &gPlayerAnim_link_normal_normal2fighter_free, + &gPlayerAnim_link_normal_normal2fighter_free, + }, + // PLAYER_ANIMGROUP_8 + { + &gPlayerAnim_link_demo_doorA_link_free, + &gPlayerAnim_link_demo_doorA_link, + &gPlayerAnim_link_demo_doorA_link, + &gPlayerAnim_link_demo_doorA_link_free, + &gPlayerAnim_link_demo_doorA_link_free, + &gPlayerAnim_link_demo_doorA_link_free, + }, + // PLAYER_ANIMGROUP_9 + { + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + }, + // PLAYER_ANIMGROUP_10 + { + &gPlayerAnim_link_demo_doorB_link_free, + &gPlayerAnim_link_demo_doorB_link, + &gPlayerAnim_link_demo_doorB_link, + &gPlayerAnim_link_demo_doorB_link_free, + &gPlayerAnim_link_demo_doorB_link_free, + &gPlayerAnim_link_demo_doorB_link_free, + }, + // PLAYER_ANIMGROUP_11 + { + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + }, + // PLAYER_ANIMGROUP_12 + { + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + &gPlayerAnim_link_normal_carryB, // + &gPlayerAnim_link_normal_carryB, // + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + }, + // PLAYER_ANIMGROUP_13 + { + &gPlayerAnim_link_normal_landing_free, + &gPlayerAnim_link_normal_landing, + &gPlayerAnim_link_normal_landing, + &gPlayerAnim_link_normal_landing_free, + &gPlayerAnim_link_normal_landing_free, + &gPlayerAnim_link_normal_landing_free, + }, + // PLAYER_ANIMGROUP_14 + { + &gPlayerAnim_link_normal_short_landing_free, + &gPlayerAnim_link_normal_short_landing, + &gPlayerAnim_link_normal_short_landing, + &gPlayerAnim_link_normal_short_landing_free, + &gPlayerAnim_link_normal_short_landing_free, + &gPlayerAnim_link_normal_short_landing_free, + }, + // PLAYER_ANIMGROUP_15 + { + &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands + &gPlayerAnim_link_normal_landing_roll, // Rolling with sword and shield + &gPlayerAnim_link_normal_landing_roll, // Rolling with sword and shield + &gPlayerAnim_link_fighter_landing_roll_long, // Rolling with two hand weapon + &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands + &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands + }, + // PLAYER_ANIMGROUP_16 + { + &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk + &gPlayerAnim_link_normal_hip_down, // Rolling bonk swrod and shield + &gPlayerAnim_link_normal_hip_down, // Rolling bonk swrod and shield + &gPlayerAnim_link_normal_hip_down_long, // Rolling bonk two hand weapon + &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk + &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk + }, + // PLAYER_ANIMGROUP_17 + { + &gPlayerAnim_link_normal_walk_endL_free, + &gPlayerAnim_link_normal_walk_endL, + &gPlayerAnim_link_normal_walk_endL, + &gPlayerAnim_link_fighter_walk_endL_long, + &gPlayerAnim_link_normal_walk_endL_free, + &gPlayerAnim_link_normal_walk_endL_free, + }, + // PLAYER_ANIMGROUP_18 + { + &gPlayerAnim_link_normal_walk_endR_free, + &gPlayerAnim_link_normal_walk_endR, + &gPlayerAnim_link_normal_walk_endR, + &gPlayerAnim_link_fighter_walk_endR_long, + &gPlayerAnim_link_normal_walk_endR_free, + &gPlayerAnim_link_normal_walk_endR_free, + }, + // PLAYER_ANIMGROUP_19 + { + &gPlayerAnim_link_normal_defense_free, + &gPlayerAnim_link_normal_defense, + &gPlayerAnim_link_normal_defense, + &gPlayerAnim_link_normal_defense_free, + &gPlayerAnim_link_bow_defense, + &gPlayerAnim_link_normal_defense_free, + }, + // PLAYER_ANIMGROUP_20 + { + &gPlayerAnim_link_normal_defense_wait_free, + &gPlayerAnim_link_normal_defense_wait, + &gPlayerAnim_link_normal_defense_wait, + &gPlayerAnim_link_normal_defense_wait_free, + &gPlayerAnim_link_bow_defense_wait, + &gPlayerAnim_link_normal_defense_wait_free, + }, + // PLAYER_ANIMGROUP_21 + { + &gPlayerAnim_link_normal_defense_end_free, + &gPlayerAnim_link_normal_defense_end, + &gPlayerAnim_link_normal_defense_end, + &gPlayerAnim_link_normal_defense_end_free, + &gPlayerAnim_link_normal_defense_end_free, + &gPlayerAnim_link_normal_defense_end_free, + }, + // PLAYER_ANIMGROUP_22 + { + &gPlayerAnim_link_normal_side_walk_free, + &gPlayerAnim_link_normal_side_walk, + &gPlayerAnim_link_normal_side_walk, + &gPlayerAnim_link_fighter_side_walk_long, + &gPlayerAnim_link_normal_side_walk_free, + &gPlayerAnim_link_normal_side_walk_free, + }, + // PLAYER_ANIMGROUP_23 + { + &gPlayerAnim_link_normal_side_walkL_free, // Side walking + &gPlayerAnim_link_anchor_side_walkL, // Side walking with sword and shield in hands + &gPlayerAnim_link_anchor_side_walkL, // Side walking with sword and shield in hands + &gPlayerAnim_link_fighter_side_walkL_long, + &gPlayerAnim_link_normal_side_walkL_free, // Side walking + &gPlayerAnim_link_normal_side_walkL_free, // Side walking + }, + // PLAYER_ANIMGROUP_24 + { + &gPlayerAnim_link_normal_side_walkR_free, + &gPlayerAnim_link_anchor_side_walkR, + &gPlayerAnim_link_anchor_side_walkR, + &gPlayerAnim_link_fighter_side_walkR_long, + &gPlayerAnim_link_normal_side_walkR_free, + &gPlayerAnim_link_normal_side_walkR_free, + }, + // PLAYER_ANIMGROUP_25 + { + &gPlayerAnim_link_normal_45_turn_free, + &gPlayerAnim_link_normal_45_turn, + &gPlayerAnim_link_normal_45_turn, + &gPlayerAnim_link_normal_45_turn_free, + &gPlayerAnim_link_normal_45_turn_free, + &gPlayerAnim_link_normal_45_turn_free, + }, + // PLAYER_ANIMGROUP_26 + { + &gPlayerAnim_link_normal_waitL2wait, + &gPlayerAnim_link_normal_waitL2wait, + &gPlayerAnim_link_normal_waitL2wait, + &gPlayerAnim_link_fighter_waitL2wait_long, + &gPlayerAnim_link_fighter_waitL2wait_long, + &gPlayerAnim_link_fighter_waitL2wait_long, + }, + // PLAYER_ANIMGROUP_27 + { + &gPlayerAnim_link_normal_waitR2wait, + &gPlayerAnim_link_normal_waitR2wait, + &gPlayerAnim_link_normal_waitR2wait, + &gPlayerAnim_link_fighter_waitR2wait_long, + &gPlayerAnim_link_fighter_waitR2wait_long, + &gPlayerAnim_link_fighter_waitR2wait_long, + }, + // PLAYER_ANIMGROUP_28 + { + &gPlayerAnim_link_normal_throw_free, + &gPlayerAnim_link_normal_throw, + &gPlayerAnim_link_normal_throw, + &gPlayerAnim_link_normal_throw_free, + &gPlayerAnim_link_normal_throw_free, + &gPlayerAnim_link_normal_throw_free, + }, + // PLAYER_ANIMGROUP_29 + { + &gPlayerAnim_link_normal_put_free, + &gPlayerAnim_link_normal_put, + &gPlayerAnim_link_normal_put, + &gPlayerAnim_link_normal_put_free, + &gPlayerAnim_link_normal_put_free, + &gPlayerAnim_link_normal_put_free, + }, + // PLAYER_ANIMGROUP_30 + { + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + }, + // PLAYER_ANIMGROUP_31 + { + &gPlayerAnim_link_normal_check_free, + &gPlayerAnim_link_normal_check, + &gPlayerAnim_link_normal_check, + &gPlayerAnim_link_normal_check_free, + &gPlayerAnim_link_normal_check_free, + &gPlayerAnim_link_normal_check_free, + }, + // PLAYER_ANIMGROUP_32 + { + &gPlayerAnim_link_normal_check_wait_free, + &gPlayerAnim_link_normal_check_wait, + &gPlayerAnim_link_normal_check_wait, + &gPlayerAnim_link_normal_check_wait_free, + &gPlayerAnim_link_normal_check_wait_free, + &gPlayerAnim_link_normal_check_wait_free, + }, + // PLAYER_ANIMGROUP_33 + { + &gPlayerAnim_link_normal_check_end_free, + &gPlayerAnim_link_normal_check_end, + &gPlayerAnim_link_normal_check_end, + &gPlayerAnim_link_normal_check_end_free, + &gPlayerAnim_link_normal_check_end_free, + &gPlayerAnim_link_normal_check_end_free, + }, + // PLAYER_ANIMGROUP_34 + { + &gPlayerAnim_link_normal_pull_start_free, + &gPlayerAnim_link_normal_pull_start, + &gPlayerAnim_link_normal_pull_start, + &gPlayerAnim_link_normal_pull_start_free, + &gPlayerAnim_link_normal_pull_start_free, + &gPlayerAnim_link_normal_pull_start_free, + }, + // PLAYER_ANIMGROUP_35 + { + &gPlayerAnim_link_normal_pulling_free, + &gPlayerAnim_link_normal_pulling, + &gPlayerAnim_link_normal_pulling, + &gPlayerAnim_link_normal_pulling_free, + &gPlayerAnim_link_normal_pulling_free, + &gPlayerAnim_link_normal_pulling_free, + }, + // PLAYER_ANIMGROUP_36 + { + &gPlayerAnim_link_normal_pull_end_free, + &gPlayerAnim_link_normal_pull_end, + &gPlayerAnim_link_normal_pull_end, + &gPlayerAnim_link_normal_pull_end_free, + &gPlayerAnim_link_normal_pull_end_free, + &gPlayerAnim_link_normal_pull_end_free, + }, + // PLAYER_ANIMGROUP_37 + { + &gPlayerAnim_link_normal_fall_up_free, + &gPlayerAnim_link_normal_fall_up, + &gPlayerAnim_link_normal_fall_up, + &gPlayerAnim_link_normal_fall_up_free, + &gPlayerAnim_link_normal_fall_up_free, + &gPlayerAnim_link_normal_fall_up_free, + }, + // PLAYER_ANIMGROUP_38 + { + &gPlayerAnim_link_normal_jump_climb_hold_free, + &gPlayerAnim_link_normal_jump_climb_hold, + &gPlayerAnim_link_normal_jump_climb_hold, + &gPlayerAnim_link_normal_jump_climb_hold_free, + &gPlayerAnim_link_normal_jump_climb_hold_free, + &gPlayerAnim_link_normal_jump_climb_hold_free, + }, + // PLAYER_ANIMGROUP_39 + { + &gPlayerAnim_link_normal_jump_climb_wait_free, + &gPlayerAnim_link_normal_jump_climb_wait, + &gPlayerAnim_link_normal_jump_climb_wait, + &gPlayerAnim_link_normal_jump_climb_wait_free, + &gPlayerAnim_link_normal_jump_climb_wait_free, + &gPlayerAnim_link_normal_jump_climb_wait_free, + }, + // PLAYER_ANIMGROUP_40 + { + &gPlayerAnim_link_normal_jump_climb_up_free, + &gPlayerAnim_link_normal_jump_climb_up, + &gPlayerAnim_link_normal_jump_climb_up, + &gPlayerAnim_link_normal_jump_climb_up_free, + &gPlayerAnim_link_normal_jump_climb_up_free, + &gPlayerAnim_link_normal_jump_climb_up_free, + }, + // PLAYER_ANIMGROUP_41 + { + &gPlayerAnim_link_normal_down_slope_slip_end_free, + &gPlayerAnim_link_normal_down_slope_slip_end, + &gPlayerAnim_link_normal_down_slope_slip_end, + &gPlayerAnim_link_normal_down_slope_slip_end_long, + &gPlayerAnim_link_normal_down_slope_slip_end_free, + &gPlayerAnim_link_normal_down_slope_slip_end_free, + }, + // PLAYER_ANIMGROUP_42 + { + &gPlayerAnim_link_normal_up_slope_slip_end_free, + &gPlayerAnim_link_normal_up_slope_slip_end, + &gPlayerAnim_link_normal_up_slope_slip_end, + &gPlayerAnim_link_normal_up_slope_slip_end_long, + &gPlayerAnim_link_normal_up_slope_slip_end_free, + &gPlayerAnim_link_normal_up_slope_slip_end_free, + }, + // PLAYER_ANIMGROUP_43 + { + &gPlayerAnim_sude_nwait, + &gPlayerAnim_lkt_nwait, + &gPlayerAnim_lkt_nwait, + &gPlayerAnim_sude_nwait, + &gPlayerAnim_sude_nwait, + &gPlayerAnim_sude_nwait, + } +}; + +struct_8085C2A4 D_8085C2A4[] = { + /* 0 / Forward */ + { + &gPlayerAnim_link_fighter_front_jump, + &gPlayerAnim_link_fighter_front_jump_end, + &gPlayerAnim_link_fighter_front_jump_endR, + }, + /* 1 / Left */ + { + &gPlayerAnim_link_fighter_Lside_jump, + &gPlayerAnim_link_fighter_Lside_jump_end, + &gPlayerAnim_link_fighter_Lside_jump_endL, + }, + /* 2 / Back */ + { + &gPlayerAnim_link_fighter_backturn_jump, + &gPlayerAnim_link_fighter_backturn_jump_end, + &gPlayerAnim_link_fighter_backturn_jump_endR, + }, + /* 3 / Right */ + { + &gPlayerAnim_link_fighter_Rside_jump, + &gPlayerAnim_link_fighter_Rside_jump_end, + &gPlayerAnim_link_fighter_Rside_jump_endR, + }, + /* 4 / */ + { + &gPlayerAnim_link_normal_newroll_jump_20f, + &gPlayerAnim_link_normal_newroll_jump_end_20f, + &gPlayerAnim_link_normal_newroll_jump_end_20f, + }, + /* 5 / */ + { + &gPlayerAnim_link_normal_newside_jump_20f, + &gPlayerAnim_link_normal_newside_jump_end_20f, + &gPlayerAnim_link_normal_newside_jump_end_20f, + }, +}; + +// sCylinderInit +ColliderCylinderInit D_8085C2EC = { + { + COLTYPE_HIT5, + AT_NONE, + AC_ON | AC_TYPE_ENEMY, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_PLAYER, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK1, + { 0x00000000, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { 12, 60, 0, { 0, 0, 0 } }, +}; + +// sShieldCylinderInit +ColliderCylinderInit D_8085C318 = { + { + COLTYPE_METAL, + AT_ON | AT_TYPE_PLAYER, + AC_ON | AC_HARD | AC_TYPE_ENEMY, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK2, + { 0x00100000, 0x00, 0x02 }, + { 0xD7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { 25, 60, 0, { 0, 0, 0 } }, +}; + +// sMeleeWeaponQuadInit +ColliderQuadInit D_8085C344 = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_PLAYER, + AC_NONE, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK2, + { 0x00000000, 0x00, 0x01 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + 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 } } }, +}; + +// sShieldQuadInit +ColliderQuadInit D_8085C394 = { + { + COLTYPE_METAL, + AT_ON | AT_TYPE_PLAYER, + AC_ON | AC_HARD | AC_TYPE_ENEMY, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK2, + { 0x00100000, 0x00, 0x00 }, + { 0xD7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_ON, + 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 } } }, +}; + +f32 D_8085C3E4 = 1.0f; +f32 D_8085C3E8 = 1.0f; + +// ANIMSFX_TYPE_VOICE +void Player_AnimSfx_PlayVoice(Player* this, u16 sfxId) { + u16 sfxOffset; + + if (this->currentMask == PLAYER_MASK_GIANT) { + func_8019F830(&this->actor.projectedPos, sfxId); + } else if (this->actor.id == ACTOR_PLAYER) { + if (this->currentMask == PLAYER_MASK_SCENTS) { + sfxOffset = SFX_VOICE_BANK_SIZE * 7; + } else { + sfxOffset = this->ageProperties->voiceSfxIdOffset; + } + + Player_PlaySfx(this, sfxOffset + sfxId); + } +} + +u16 D_8085C3EC[] = { + NA_SE_VO_LI_SWEAT, + NA_SE_VO_LI_SNEEZE, + NA_SE_VO_LI_RELAX, + NA_SE_VO_LI_FALL_L, +}; + +void func_8082E00C(Player* this) { + s32 i; + u16* sfxIdPtr = D_8085C3EC; + + for (i = 0; i < ARRAY_COUNT(D_8085C3EC); i++) { + AudioSfx_StopById((u16)(*sfxIdPtr + this->ageProperties->voiceSfxIdOffset)); + sfxIdPtr++; + } +} + +u16 Player_GetFloorSfx(Player* this, u16 sfxId) { + return sfxId + this->floorSfxOffset; +} + +// ANIMSFX_TYPE_FLOOR +void Player_AnimSfx_PlayFloor(Player* this, u16 sfxId) { + Player_PlaySfx(this, Player_GetFloorSfx(this, sfxId)); +} + +u16 Player_GetFloorSfxByAge(Player* this, u16 sfxId) { + return sfxId + this->floorSfxOffset + this->ageProperties->surfaceSfxIdOffset; +} + +// ANIMSFX_TYPE_FLOOR_BY_AGE +void Player_AnimSfx_PlayFloorByAge(Player* this, u16 sfxId) { + Player_PlaySfx(this, Player_GetFloorSfxByAge(this, sfxId)); +} + +// ANIMSFX_TYPE_6 and ANIMSFX_TYPE_8 +void Player_AnimSfx_PlayFloorWalk(Player* this, f32 freqVolumeLerp) { + s32 sfxId; + + if (this->currentMask == PLAYER_MASK_GIANT) { + sfxId = NA_SE_PL_GIANT_WALK; + } else { + sfxId = Player_GetFloorSfxByAge(this, NA_SE_PL_WALK_GROUND); + } + + // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume + func_8019F638(&this->actor.projectedPos, sfxId, freqVolumeLerp); +} + +// ANIMSFX_TYPE_FLOOR_JUMP +void Player_AnimSfx_PlayFloorJump(Player* this) { + Player_PlaySfx(this, Player_GetFloorSfxByAge(this, NA_SE_PL_JUMP_GROUND)); +} + +// ANIMSFX_TYPE_FLOOR_LAND +void Player_AnimSfx_PlayFloorLand(Player* this) { + Player_PlaySfx(this, Player_GetFloorSfxByAge(this, NA_SE_PL_LAND_GROUND)); +} + +void func_8082E1F0(Player* this, u16 sfxId) { + Player_PlaySfx(this, sfxId); + this->stateFlags2 |= PLAYER_STATE2_8; +} + +void Player_PlayAnimSfx(Player* this, AnimSfxEntry* entry) { + s32 cond; + + do { + s32 data = ABS_ALT(entry->flags); + s32 type = ANIMSFX_GET_TYPE(data); + + if (PlayerAnimation_OnFrame(&this->skelAnime, fabsf(ANIMSFX_GET_FRAME(data)))) { + if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_GENERAL)) { + Player_PlaySfx(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR)) { + Player_AnimSfx_PlayFloor(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_BY_AGE)) { + Player_AnimSfx_PlayFloorByAge(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_VOICE)) { + Player_AnimSfx_PlayVoice(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_LAND)) { + Player_AnimSfx_PlayFloorLand(this); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_6)) { + Player_AnimSfx_PlayFloorWalk(this, 6.0f); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_JUMP)) { + Player_AnimSfx_PlayFloorJump(this); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_8)) { + Player_AnimSfx_PlayFloorWalk(this, 0.0f); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_9)) { + // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume + func_8019F638(&this->actor.projectedPos, this->ageProperties->surfaceSfxIdOffset + NA_SE_PL_WALK_LADDER, + 0.0f); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_SURFACE)) { + Player_PlaySfx(this, entry->sfxId + this->ageProperties->surfaceSfxIdOffset); + } + } + + cond = entry->flags >= 0; + entry++; + } while (cond); +} + +void func_8082E438(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -6.0f); +} + +void func_8082E4A4(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -6.0f); +} + +void func_8082E514(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f); +} + +void func_8082E55C(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f); +} + +void func_8082E5A8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); +} + +void func_8082E5EC(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); +} + +void func_8082E634(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -16.0f); +} + +// Player_AnimationPlayLoopIfCurrentFinished +s32 func_8082E67C(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, anim); + return true; + } else { + return false; + } +} + +void func_8082E6D0(Player* this) { + this->skelAnime.prevTransl = this->skelAnime.baseTransl; + this->skelAnime.prevRot = this->actor.shape.rot.y; +} + +void func_8082E6F8(Player* this) { + func_8082E6D0(this); + this->skelAnime.prevTransl.x *= this->ageProperties->unk_08; + this->skelAnime.prevTransl.y *= this->ageProperties->unk_08; + this->skelAnime.prevTransl.z *= this->ageProperties->unk_08; +} + +void func_8082E784(Player* this) { + this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y = 0; +} + +void func_8082E794(Player* this) { + if (this->skelAnime.moveFlags) { + func_8082DC28(this); + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = this->skelAnime.baseTransl.x; + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = this->skelAnime.baseTransl.z; + + if (this->skelAnime.moveFlags & ANIM_FLAG_8) { + if (this->skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y) { + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = this->skelAnime.prevTransl.y; + } + } else { + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = this->skelAnime.baseTransl.y; + } + func_8082E6D0(this); + this->skelAnime.moveFlags = 0; + } +} + +void func_8082E820(Player* this, s32 moveFlags) { + Vec3f pos; + + this->skelAnime.moveFlags = moveFlags; + this->skelAnime.prevTransl = this->skelAnime.baseTransl; + SkelAnime_UpdateTranslation(&this->skelAnime, &pos, this->actor.shape.rot.y); + + if (moveFlags & ANIM_FLAG_1) { + pos.x *= this->ageProperties->unk_08; + pos.z *= this->ageProperties->unk_08; + this->actor.world.pos.x += pos.x * this->actor.scale.x; + this->actor.world.pos.z += pos.z * this->actor.scale.z; + } + + if (moveFlags & ANIM_FLAG_UPDATE_Y) { + if (!(moveFlags & ANIM_FLAG_4)) { + pos.y *= this->ageProperties->unk_08; + } + this->actor.world.pos.y += pos.y * this->actor.scale.y; + } + + func_8082DC28(this); +} + +void func_8082E920(PlayState* play, Player* this, s32 moveFlags) { + if (moveFlags & ANIM_FLAG_200) { + func_8082E6F8(this); + } else if ((moveFlags & ANIM_FLAG_100) || this->skelAnime.moveFlags) { + func_8082E6D0(this); + } else { + this->skelAnime.prevTransl = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1]; + this->skelAnime.prevRot = this->actor.shape.rot.y; + } + + this->skelAnime.moveFlags = moveFlags; + Player_StopHorizontalMovement(this); + AnimationContext_DisableQueue(play); +} + +void func_8082E9C8(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags, f32 playSpeed) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, playSpeed); + func_8082E920(play, this, moveFlags); +} + +void func_8082EA10(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082E9C8(play, this, anim, moveFlags, 3.0f / 3.0f); +} + +void func_8082EA38(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082E9C8(play, this, anim, moveFlags, 2.0f / 3.0f); +} + +void func_8082EA60(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082EA38(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_200); +} + +void func_8082EA80(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags, f32 playSpeed) { + PlayerAnimation_PlayLoopSetSpeed(play, &this->skelAnime, anim, playSpeed); + func_8082E920(play, this, moveFlags); +} + +void func_8082EAC8(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082EA80(play, this, anim, moveFlags, 3.0f / 3.0f); +} + +void func_8082EAF0(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082EA80(play, this, anim, moveFlags, 2.0f / 3.0f); +} + +void func_8082EB18(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082EAF0(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE); +} + +void func_8082EB38(PlayState* play, Player* this) { + s8 var_v0; + s8 var_v1; + + this->unk_D60 = D_80862AFC; + this->unk_D64 = D_80862B00; + func_800FF3A0(&D_80862AFC, &D_80862B00, sPlayerControlInput); + + if (D_80862AFC < 8.0f) { + D_80862AFC = 0.0f; + } + + D_80862B02 = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]) + D_80862B00; + this->unk_ADE = (this->unk_ADE + 1) % ARRAY_COUNT(this->unk_ADF); + if (D_80862AFC < 55.0f) { + var_v0 = -1; + var_v1 = -1; + } else { + var_v1 = ((u16)(D_80862B00 + 0x2000)) >> 9; + var_v0 = ((u16)(BINANG_SUB(D_80862B02, this->actor.shape.rot.y) + 0x2000)) >> 14; + } + this->unk_ADF[this->unk_ADE] = var_v1; + this->unk_AE3[this->unk_ADE] = var_v0; +} + +void func_8082EC9C(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, D_8085C3E4); +} + +s32 func_8082ECCC(Player* this) { + return this->stateFlags1 & PLAYER_STATE1_1000000; +} + +#define CHEST_ANIM_SHORT 0 +#define CHEST_ANIM_LONG 1 + +// TODO: consider what to do with the NONEs: cannot use a zero-argument macro like OoT since the text id is involved. +#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim) \ + { itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId } + +#define GIFIELD_GET_DROP_TYPE(field) ((field)&0x1F) +#define GIFIELD_20 (1 << 5) +#define GIFIELD_40 (1 << 6) +#define GIFIELD_NO_COLLECTIBLE (1 << 7) +/** + * `flags` must be 0, GIFIELD_20, GIFIELD_40 or GIFIELD_NO_COLLECTIBLE (which can be or'ed together) + * `dropType` must be either a value from the `Item00Type` enum or 0 if the `GIFIELD_NO_COLLECTIBLE` flag was used + */ +#define GIFIELD(flags, dropType) ((flags) | (dropType)) + +GetItemEntry sGetItemTable[GI_MAX - 1] = { + // GI_RUPEE_GREEN + GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xC4, GIFIELD(0, ITEM00_RUPEE_GREEN), CHEST_ANIM_SHORT), + // GI_RUPEE_BLUE + GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0x2, GIFIELD(0, ITEM00_RUPEE_BLUE), CHEST_ANIM_SHORT), + // GI_RUPEE_10 + GET_ITEM(ITEM_RUPEE_10, OBJECT_GI_RUPY, GID_RUPEE_RED, 0x3, GIFIELD(0, ITEM00_RUPEE_RED), CHEST_ANIM_SHORT), + // GI_RUPEE_RED + GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0x4, GIFIELD(0, ITEM00_RUPEE_RED), CHEST_ANIM_SHORT), + // GI_RUPEE_PURPLE + GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0x5, GIFIELD(0, ITEM00_RUPEE_PURPLE), + CHEST_ANIM_SHORT), + // GI_RUPEE_SILVER + GET_ITEM(ITEM_RUPEE_SILVER, OBJECT_GI_RUPY, GID_RUPEE_SILVER, 0x6, GIFIELD(0, ITEM00_RUPEE_PURPLE), + CHEST_ANIM_SHORT), + // GI_RUPEE_HUGE + GET_ITEM(ITEM_RUPEE_HUGE, OBJECT_GI_RUPY, GID_RUPEE_HUGE, 0x7, GIFIELD(0, ITEM00_RUPEE_HUGE), CHEST_ANIM_SHORT), + // GI_WALLET_ADULT + GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x8, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_WALLET_GIANT + GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x9, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_RECOVERY_HEART + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0xA, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_0B + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0xB, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_HEART_PIECE + GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_HEART_CONTAINER + GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xD, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MAGIC_SMALL + GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE, + GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_SMALL), CHEST_ANIM_SHORT), + // GI_MAGIC_LARGE + GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xF, + GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_LARGE), CHEST_ANIM_SHORT), + // GI_10 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x10, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_STRAY_FAIRY + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x11, 0, 0), + // GI_12 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x12, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_13 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x13, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_BOMBS_1 + GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x14, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_5 + GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x15, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_10 + GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x16, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_20 + GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x17, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_30 + GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x18, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_STICKS_1 + GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x19, GIFIELD(0, ITEM00_STICK), CHEST_ANIM_SHORT), + // GI_BOMBCHUS_10 + GET_ITEM(ITEM_BOMBCHUS_10, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x1A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_BOMB_BAG_20 + GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x1B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOMB_BAG_30 + GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x1C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOMB_BAG_40 + GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x1D, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_ARROWS_10 + GET_ITEM(ITEM_ARROWS_10, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0x1E, GIFIELD(GIFIELD_40, ITEM00_ARROWS_30), + CHEST_ANIM_SHORT), + // GI_ARROWS_30 + GET_ITEM(ITEM_ARROWS_30, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0x1F, GIFIELD(GIFIELD_40, ITEM00_ARROWS_40), + CHEST_ANIM_SHORT), + // GI_ARROWS_40 + GET_ITEM(ITEM_ARROWS_40, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0x20, GIFIELD(GIFIELD_40, ITEM00_ARROWS_50), + CHEST_ANIM_SHORT), + // GI_ARROWS_50 + GET_ITEM(ITEM_ARROWS_40, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0x21, GIFIELD(GIFIELD_40, ITEM00_ARROWS_50), + CHEST_ANIM_SHORT), + // GI_QUIVER_30 + GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x22, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_QUIVER_40 + GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x23, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_QUIVER_50 + GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x24, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_ARROW_FIRE + GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x25, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_ARROW_ICE + GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x26, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_ARROW_LIGHT + GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x27, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_NUTS_1 + GET_ITEM(ITEM_NUT, OBJECT_GI_NUTS, GID_NUTS, 0x28, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_NUTS_5 + GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x29, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_NUTS_10 + GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x2A, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_2B + GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2B, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_2C + GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_2D + GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0x2D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_BOMBCHUS_20 + GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x2E, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_2F + GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x2F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_30 + GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x30, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_31 + GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x31, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_SHIELD_HERO + GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x32, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), + // GI_SHIELD_MIRROR + GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x33, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_POWDER_KEG + GET_ITEM(ITEM_POWDER_KEG, OBJECT_GI_BIGBOMB, GID_POWDER_KEG, 0x34, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MAGIC_BEANS + GET_ITEM(ITEM_MAGIC_BEANS, OBJECT_GI_BEAN, GID_MAGIC_BEANS, 0x35, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_BOMBCHUS_1 + GET_ITEM(ITEM_BOMBCHUS_1, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x36, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_SWORD_KOKIRI + GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0x37, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_RAZOR + GET_ITEM(ITEM_SWORD_RAZOR, OBJECT_GI_SWORD_2, GID_SWORD_RAZOR, 0x38, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_GILDED + GET_ITEM(ITEM_SWORD_GILDED, OBJECT_GI_SWORD_3, GID_SWORD_GILDED, 0x39, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOMBCHUS_5 + GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x3A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_SWORD_GREAT_FAIRY + GET_ITEM(ITEM_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4, GID_SWORD_GREAT_FAIRY, 0x3B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_KEY_SMALL + GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x3C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_KEY_BOSS + GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0x3D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MAP + GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x3E, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_COMPASS + GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x3F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_40 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x40, 0, 0), + // GI_HOOKSHOT + GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x41, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_LENS + GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x42, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_PICTO_BOX + GET_ITEM(ITEM_PICTO_BOX, OBJECT_GI_CAMERA, GID_PICTO_BOX, 0x43, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_44 + GET_ITEM(ITEM_PICTO_BOX, OBJECT_UNSET_0, GID_NONE, 0x44, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_45 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x45, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_46 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x46, 0, 0), + // GI_47 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x47, 0, 0), + // GI_48 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x48, 0, 0), + // GI_49 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x49, 0, 0), + // GI_4A + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4A, 0, 0), + // GI_4B + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4B, 0, 0), + // GI_OCARINA + GET_ITEM(ITEM_OCARINA, OBJECT_GI_OCARINA, GID_OCARINA, 0x4C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_4D + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4D, 0, 0), + // GI_4E + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4E, 0, 0), + // GI_4F + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4F, 0, 0), + // GI_BOMBERS_NOTEBOOK + GET_ITEM(ITEM_BOMBERS_NOTEBOOK, OBJECT_GI_SCHEDULE, GID_BOMBERS_NOTEBOOK, 0x50, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_51 + GET_ITEM(ITEM_NONE, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x51, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_SKULL_TOKEN + GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0x52, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_53 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x53, 0, 0), + // GI_54 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x54, 0, 0), + // GI_REMAINS_ODOLWA + GET_ITEM(ITEM_REMAINS_ODOLWA, OBJECT_UNSET_0, GID_REMAINS_ODOLWA, 0x55, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_REMAINS_GOHT + GET_ITEM(ITEM_REMAINS_GOHT, OBJECT_UNSET_0, GID_REMAINS_GOHT, 0x56, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_REMAINS_GYORG + GET_ITEM(ITEM_REMAINS_GYORG, OBJECT_UNSET_0, GID_REMAINS_GYORG, 0x57, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_REMAINS_TWINMOLD + GET_ITEM(ITEM_REMAINS_TWINMOLD, OBJECT_UNSET_0, GID_REMAINS_TWINMOLD, 0x58, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_POTION_RED_BOTTLE + GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_BOTTLE_RED, GID_57, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), + GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOTTLE + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x5A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_POTION_RED + GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x5B, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_POTION_GREEN + GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x5C, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_POTION_BLUE + GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x5D, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_FAIRY + GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE_04, GID_FAIRY, 0x5E, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_DEKU_PRINCESS + GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x5F, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MILK_BOTTLE + GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x60, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MILK_HALF + GET_ITEM(ITEM_MILK_HALF, OBJECT_GI_MILK, GID_MILK, 0x61, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_FISH + GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x62, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BUG + GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x63, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BLUE_FIRE + GET_ITEM(ITEM_BLUE_FIRE, OBJECT_UNSET_0, GID_NONE, 0x64, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_POE + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x65, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BIG_POE + GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0x66, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SPRING_WATER + GET_ITEM(ITEM_SPRING_WATER, OBJECT_UNSET_0, GID_NONE, 0x67, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_HOT_SPRING_WATER + GET_ITEM(ITEM_HOT_SPRING_WATER, OBJECT_UNSET_0, GID_NONE, 0x68, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_ZORA_EGG + GET_ITEM(ITEM_ZORA_EGG, OBJECT_GI_BOTTLE_15, GID_ZORA_EGG, 0x69, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_GOLD_DUST + GET_ITEM(ITEM_GOLD_DUST, OBJECT_GI_BOTTLE_16, GID_SEAHORSE, 0x6A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MUSHROOM + GET_ITEM(ITEM_MUSHROOM, OBJECT_GI_MAGICMUSHROOM, GID_MUSHROOM, 0x6B, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_6C + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x6C, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_6D + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x6D, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SEAHORSE + GET_ITEM(ITEM_SEAHORSE, OBJECT_GI_BOTTLE_16, GID_SEAHORSE, 0x6E, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_CHATEAU_BOTTLE + GET_ITEM(ITEM_CHATEAU, OBJECT_GI_BOTTLE_21, GID_CHATEAU, 0x6F, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_HYLIAN_LOACH + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x70, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_71 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x71, 0, 0), + // GI_72 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x72, 0, 0), + // GI_73 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x73, 0, 0), + // GI_74 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x74, 0, 0), + // GI_75 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x75, 0, 0), + // GI_ICE_TRAP + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x76, 0, 0), + // GI_77 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x77, 0, 0), + // GI_MASK_DEKU + GET_ITEM(ITEM_MASK_DEKU, OBJECT_GI_NUTSMASK, GID_MASK_DEKU, 0x78, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_GORON + GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x79, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_ZORA + GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x7A, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_FIERCE_DEITY + GET_ITEM(ITEM_MASK_FIERCE_DEITY, OBJECT_GI_MASK03, GID_MASK_FIERCE_DEITY, 0x7B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_CAPTAIN + GET_ITEM(ITEM_MASK_CAPTAIN, OBJECT_GI_MASK18, GID_MASK_CAPTAIN, 0x7C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_GIANT + GET_ITEM(ITEM_MASK_GIANT, OBJECT_GI_MASK23, GID_MASK_GIANT, 0x7D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_ALL_NIGHT + GET_ITEM(ITEM_MASK_ALL_NIGHT, OBJECT_GI_MASK06, GID_MASK_ALL_NIGHT, 0x7E, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_BUNNY + GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x7F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_KEATON + GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x80, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_GARO + GET_ITEM(ITEM_MASK_GARO, OBJECT_GI_MASK09, GID_MASK_GARO, 0x81, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_ROMANI + GET_ITEM(ITEM_MASK_ROMANI, OBJECT_GI_MASK10, GID_MASK_ROMANI, 0x82, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_CIRCUS_LEADER + GET_ITEM(ITEM_MASK_CIRCUS_LEADER, OBJECT_GI_MASK11, GID_MASK_CIRCUS_LEADER, 0x83, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_POSTMAN + GET_ITEM(ITEM_MASK_POSTMAN, OBJECT_GI_MASK12, GID_MASK_POSTMAN, 0x84, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_COUPLE + GET_ITEM(ITEM_MASK_COUPLE, OBJECT_GI_MASK13, GID_MASK_COUPLE, 0x85, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_GREAT_FAIRY + GET_ITEM(ITEM_MASK_GREAT_FAIRY, OBJECT_GI_MASK14, GID_MASK_GREAT_FAIRY, 0x86, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_GIBDO + GET_ITEM(ITEM_MASK_GIBDO, OBJECT_GI_MASK15, GID_MASK_GIBDO, 0x87, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_DON_GERO + GET_ITEM(ITEM_MASK_DON_GERO, OBJECT_GI_MASK16, GID_MASK_DON_GERO, 0x88, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_KAMARO + GET_ITEM(ITEM_MASK_KAMARO, OBJECT_GI_MASK17, GID_MASK_KAMARO, 0x89, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_TRUTH + GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x8A, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_STONE + GET_ITEM(ITEM_MASK_STONE, OBJECT_GI_STONEMASK, GID_MASK_STONE, 0x8B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_BREMEN + GET_ITEM(ITEM_MASK_BREMEN, OBJECT_GI_MASK20, GID_MASK_BREMEN, 0x8C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_BLAST + GET_ITEM(ITEM_MASK_BLAST, OBJECT_GI_MASK21, GID_MASK_BLAST, 0x8D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_SCENTS + GET_ITEM(ITEM_MASK_SCENTS, OBJECT_GI_MASK22, GID_MASK_SCENTS, 0x8E, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_KAFEIS_MASK + GET_ITEM(ITEM_MASK_KAFEIS_MASK, OBJECT_GI_MASK05, GID_MASK_KAFEIS_MASK, 0x8F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_90 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x90, 0, 0), + // GI_CHATEAU + GET_ITEM(ITEM_CHATEAU_2, OBJECT_GI_BOTTLE_21, GID_CHATEAU, 0x91, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MILK + GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x92, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_GOLD_DUST_2 + GET_ITEM(ITEM_GOLD_DUST_2, OBJECT_GI_GOLD_DUST, GID_GOLD_DUST, 0x93, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_HYLIAN_LOACH_2 + GET_ITEM(ITEM_HYLIAN_LOACH_2, OBJECT_GI_LOACH, GID_HYLIAN_LOACH, 0x94, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_SEAHORSE_CAUGHT + GET_ITEM(ITEM_SEAHORSE_CAUGHT, OBJECT_GI_SEAHORSE, GID_SEAHORSE_CAUGHT, 0x95, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MOON_TEAR + GET_ITEM(ITEM_MOON_TEAR, OBJECT_GI_RESERVE00, GID_MOON_TEAR, 0x96, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_LAND + GET_ITEM(ITEM_DEED_LAND, OBJECT_GI_RESERVE01, GID_DEED_LAND, 0x97, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_SWAMP + GET_ITEM(ITEM_DEED_SWAMP, OBJECT_GI_RESERVE01, GID_DEED_SWAMP, 0x98, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_MOUNTAIN + GET_ITEM(ITEM_DEED_MOUNTAIN, OBJECT_GI_RESERVE01, GID_DEED_MOUNTAIN, 0x99, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_OCEAN + GET_ITEM(ITEM_DEED_OCEAN, OBJECT_GI_RESERVE01, GID_DEED_OCEAN, 0x9A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_SWORD_GREAT_FAIRY_STOLEN + GET_ITEM(ITEM_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4, GID_SWORD_GREAT_FAIRY, 0x9B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_KOKIRI_STOLEN + GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0x9C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_RAZOR_STOLEN + GET_ITEM(ITEM_SWORD_RAZOR, OBJECT_GI_SWORD_2, GID_SWORD_RAZOR, 0x9D, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_GILDED_STOLEN + GET_ITEM(ITEM_SWORD_GILDED, OBJECT_GI_SWORD_3, GID_SWORD_GILDED, 0x9E, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SHIELD_HERO_STOLEN + GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x9F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), + // GI_ROOM_KEY + GET_ITEM(ITEM_ROOM_KEY, OBJECT_GI_RESERVE_B_00, GID_ROOM_KEY, 0xA0, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_LETTER_TO_MAMA + GET_ITEM(ITEM_LETTER_MAMA, OBJECT_GI_RESERVE_B_01, GID_LETTER_MAMA, 0xA1, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_A2 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA2, 0, 0), + // GI_A3 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA3, 0, 0), + // GI_A4 + GET_ITEM(ITEM_NONE, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0xA4, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_A5 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA5, 0, 0), + // GI_A6 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA6, 0, 0), + // GI_A7 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA7, 0, 0), + // GI_A8 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA8, 0, 0), + // GI_BOTTLE_STOLEN + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0xA9, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_LETTER_TO_KAFEI + GET_ITEM(ITEM_LETTER_TO_KAFEI, OBJECT_GI_RESERVE_C_00, GID_LETTER_TO_KAFEI, 0xAA, + GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_PENDANT_OF_MEMORIES + GET_ITEM(ITEM_PENDANT_OF_MEMORIES, OBJECT_GI_RESERVE_C_01, GID_PENDANT_OF_MEMORIES, 0xAB, + GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_AC + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAC, 0, 0), + // GI_AD + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAD, 0, 0), + // GI_AE + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAE, 0, 0), + // GI_AF + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAF, 0, 0), + // GI_B0 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB0, 0, 0), + // GI_B1 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB1, 0, 0), + // GI_B2 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB2, 0, 0), + // GI_B3 + GET_ITEM(ITEM_NONE, OBJECT_GI_MSSA, GID_MASK_SUN, 0xB3, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_TINGLE_MAP_CLOCK_TOWN + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB4, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_WOODFALL + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB5, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_SNOWHEAD + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB6, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_ROMANI_RANCH + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB7, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_GREAT_BAY + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB8, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_STONE_TOWER + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB9, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), +}; + +// Player_UpdateCurrentGetItemDrawId? +void func_8082ECE0(Player* this) { + GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; + + this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); +} + +PlayerAnimationHeader* func_8082ED20(Player* this) { + if ((this->transformation == PLAYER_FORM_ZORA) || (this->actor.id != ACTOR_PLAYER)) { + return &gPlayerAnim_pz_wait; + } + if (this->transformation == PLAYER_FORM_GORON) { + return &gPlayerAnim_pg_wait; + } + if (this->currentMask == PLAYER_MASK_SCENTS) { + return &gPlayerAnim_cl_msbowait; + } + return D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]; +} + +PlayerAnimationHeader* sPlayerIdleAnimations[][2] = { + { &gPlayerAnim_link_normal_wait_typeA_20f, &gPlayerAnim_link_normal_waitF_typeA_20f }, // ROOM_BEHAVIOR_TYPE2_0 + { &gPlayerAnim_link_normal_wait_typeC_20f, &gPlayerAnim_link_normal_waitF_typeC_20f }, // ROOM_BEHAVIOR_TYPE2_1 + { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, // ROOM_BEHAVIOR_TYPE2_2 + { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, // ROOM_BEHAVIOR_TYPE2_HOT + { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_4 + { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_5 + { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_6 + { &gPlayerAnim_link_wait_heat1_20f, &gPlayerAnim_link_waitF_heat1_20f }, + { &gPlayerAnim_link_wait_heat2_20f, &gPlayerAnim_link_waitF_heat2_20f }, + { &gPlayerAnim_link_wait_itemD1_20f, &gPlayerAnim_link_wait_itemD1_20f }, + { &gPlayerAnim_link_wait_itemA_20f, &gPlayerAnim_link_waitF_itemA_20f }, + { &gPlayerAnim_link_wait_itemB_20f, &gPlayerAnim_link_waitF_itemB_20f }, + { &gPlayerAnim_link_wait_itemC_20f, &gPlayerAnim_link_wait_itemC_20f }, + { &gPlayerAnim_link_wait_itemD2_20f, &gPlayerAnim_link_wait_itemD2_20f }, + { &gPlayerAnim_cl_msbowait, &gPlayerAnim_cl_msbowait }, +}; + +AnimSfxEntry D_8085C8C4[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 8, NA_SE_VO_LI_SNEEZE, STOP), +}; +AnimSfxEntry D_8085C8C8[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 18, NA_SE_VO_LI_SWEAT, STOP), +}; +AnimSfxEntry D_8085C8CC[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_BREATH_REST, STOP), +}; +AnimSfxEntry D_8085C8D0[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 10, NA_SE_VO_LI_BREATH_REST, STOP), +}; + +AnimSfxEntry D_8085C8D4[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 44, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 48, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 52, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 56, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 60, NA_SE_PL_CALM_HIT, STOP), +}; + +AnimSfxEntry D_8085C8E8[] = { + ANIMSFX(ANIMSFX_TYPE_8, 25, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 44, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 48, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 52, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 56, NA_SE_NONE, STOP), +}; + +AnimSfxEntry D_8085C900[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 16, NA_SE_IT_SHIELD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 20, NA_SE_IT_SHIELD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 70, NA_SE_IT_SHIELD_SWING, STOP), +}; + +AnimSfxEntry D_8085C90C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 10, NA_SE_IT_HAMMER_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 10, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 22, NA_SE_IT_SWORD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 22, NA_SE_VO_LI_SWORD_N, STOP), +}; + +AnimSfxEntry D_8085C91C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 39, NA_SE_IT_SWORD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 39, NA_SE_VO_LI_SWORD_N, STOP), +}; +AnimSfxEntry D_8085C924[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 20, NA_SE_VO_LI_RELAX, STOP), +}; + +AnimSfxEntry D_8085C928[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 12, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 61, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 68, NA_SE_VO_LI_POO_WAIT, STOP), +}; + +AnimSfxEntry* D_8085C93C[] = { + D_8085C8C4, D_8085C8C8, D_8085C8CC, D_8085C8D0, D_8085C8D4, D_8085C8E8, + D_8085C900, D_8085C90C, D_8085C91C, D_8085C924, D_8085C928, NULL, +}; + +// Used to index into D_8085C93C +u8 D_8085C96C[] = { + 0, 0, 1, 1, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 3, 3, 4, 4, 8, 8, 5, 5, 6, 6, 7, 7, 9, 9, 11, 11, +}; + +s32 func_8082ED94(Player* this) { + PlayerAnimationHeader** entry; + s32 i; + + if ((this->skelAnime.animation != &gPlayerAnim_link_normal_newroll_jump_end_20f) && + (this->skelAnime.animation != &gPlayerAnim_link_normal_newside_jump_end_20f)) { + if ((this->skelAnime.animation != func_8082ED20(this)) || + (this->skelAnime.animation == &gPlayerAnim_cl_msbowait)) { + for (i = 0, entry = &sPlayerIdleAnimations[0][0]; i < ARRAY_COUNT_2D(sPlayerIdleAnimations); i++) { + if (this->skelAnime.animation == *entry) { + return i + 1; + } + entry++; + } + + return 0; + } + } + + return -1; +} + +void func_8082EEA4(Player* this, s32 arg1) { + u8 temp_v0 = D_8085C96C[arg1]; + + if (temp_v0 != 0) { + Player_PlayAnimSfx(this, D_8085C93C[temp_v0 - 1]); + } +} + +PlayerAnimationHeader* func_8082EEE0(Player* this) { + if (this->unk_B64 != 0) { + return D_8085BE84[PLAYER_ANIMGROUP_3][this->modelAnimType]; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType]; + } +} + +s32 func_8082EF20(Player* this) { + return func_8082ECCC(this) && (this->unk_ACC != 0); +} + +PlayerAnimationHeader* func_8082EF54(Player* this) { + if (func_8082EF20(this)) { + return &gPlayerAnim_link_boom_throw_waitR; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_5][this->modelAnimType]; + } +} + +PlayerAnimationHeader* func_8082EF9C(Player* this) { + if (func_8082EF20(this)) { + return &gPlayerAnim_link_boom_throw_waitL; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_4][this->modelAnimType]; + } +} + +PlayerAnimationHeader* func_8082EFE4(Player* this) { + if (func_800B7128(this)) { + return &gPlayerAnim_link_bow_side_walk; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_22][this->modelAnimType]; + } +} + +void func_8082F02C(PlayState* play, struct_8082F02C_arg1* arg1, f32 arg2) { + func_800FD59C(play, &arg1->unk_0, arg2); + func_800FD5E0(play, &arg1->unk_3, arg2); + func_800FD654(play, &arg1->unk_6, arg2); + func_800FD698(play, arg1->unk_A, arg1->unk_C, arg2); +} + +/** + * Revert cylinder to normal properties + */ +void Player_ResetCylinder(Player* this) { + this->cylinder.base.colType = COLTYPE_HIT5; + this->cylinder.base.atFlags = AT_NONE; + this->cylinder.base.acFlags = AC_ON | AC_TYPE_ENEMY; + this->cylinder.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL; + this->cylinder.info.elemType = ELEMTYPE_UNK1; + this->cylinder.info.toucher.dmgFlags = 0; + this->cylinder.info.bumper.dmgFlags = 0xF7CFFFFF; + this->cylinder.info.toucherFlags = TOUCH_NONE | TOUCH_SFX_NORMAL; + this->cylinder.dim.radius = 12; +} + +/** + * Give cylinder special properties for attacks, uses include + * - Normal roll + * - Deku spin + * - Deku launch + * - Goron pound + * - Goron spike roll + * - Zora barrier + * + * and possibly more. + * + * @param dmgFlags Damage flags (DMGFLAG defines) + * @param damage to do + * @param radius of cylinder + */ +void Player_SetCylinderForAttack(Player* this, u32 dmgFlags, s32 damage, s32 radius) { + this->cylinder.base.atFlags = AT_ON | AT_TYPE_PLAYER; + if (radius > 30) { + this->cylinder.base.ocFlags1 = OC1_NONE; + } else { + this->cylinder.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL; + } + + this->cylinder.info.elemType = ELEMTYPE_UNK2; + this->cylinder.info.toucherFlags = TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_NORMAL; + this->cylinder.dim.radius = radius; + this->cylinder.info.toucher.dmgFlags = dmgFlags; + this->cylinder.info.toucher.damage = damage; + + if (dmgFlags & DMG_GORON_POUND) { + this->cylinder.base.acFlags = AC_NONE; + } else { + this->cylinder.base.colType = COLTYPE_NONE; + this->cylinder.info.bumper.dmgFlags = 0xF7CFFFFF; + + if (dmgFlags & DMG_ZORA_BARRIER) { + this->cylinder.base.acFlags = AC_NONE; + } else { + this->cylinder.base.acFlags = AC_ON | AC_TYPE_ENEMY; + } + } +} + +// Check for starting Zora barrier +void func_8082F164(Player* this, u16 button) { + if ((this->transformation == PLAYER_FORM_ZORA) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, button)) { + this->stateFlags1 |= PLAYER_STATE1_10; + } +} + +struct_8082F02C_arg1 D_8085C98C = { + { 0, 0, 0 }, { 255, 255, 155 }, { 20, 20, 50 }, 940, 5000, +}; + +// Run Zora Barrier +void func_8082F1AC(PlayState* play, Player* this) { + s32 sp4C = this->unk_B62; + f32 temp; + s16 sp46; + s16 sp44; + f32 sp40; + f32 sp3C; + s32 var_v0; + + if ((gSaveContext.save.saveInfo.playerData.magic != 0) && (this->stateFlags1 & PLAYER_STATE1_10)) { + if (gSaveContext.magicState == MAGIC_STATE_IDLE) { + Magic_Consume(play, 0, MAGIC_CONSUME_GORON_ZORA); + } + + temp = 16.0f; + if (gSaveContext.save.saveInfo.playerData.magic >= 16) { + var_v0 = 255; + } else { + var_v0 = (gSaveContext.save.saveInfo.playerData.magic / temp) * 255.0f; + } + Math_StepToS(&this->unk_B62, var_v0, 50); + } else if (Math_StepToS(&this->unk_B62, 0, 50) && (gSaveContext.magicState != MAGIC_STATE_IDLE)) { + Magic_Reset(play); + } + + if ((this->unk_B62 != 0) || (sp4C != 0)) { + f32 sp34; + f32 new_var; + + sp46 = play->gameplayFrames * 7000; + sp44 = play->gameplayFrames * 14000; + func_8082F02C(play, &D_8085C98C, this->unk_B62 / 255.0f); + + sp34 = Math_SinS(sp44) * 40.0f; + sp40 = Math_CosS(sp44) * 40.0f; + sp3C = Math_SinS(sp46) * sp34; + new_var = Math_CosS(sp46) * sp34; + + Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x + sp40, this->actor.world.pos.y + sp3C, + this->actor.world.pos.z + new_var, 100, 200, 255, 600); + + Player_PlaySfx(this, NA_SE_PL_ZORA_SPARK_BARRIER - SFX_FLAG); + Actor_SetPlayerImpact(play, PLAYER_IMPACT_ZORA_BARRIER, 2, 100.0f, &this->actor.world.pos); + } +} + +void func_8082F43C(PlayState* play, Player* this, PlayerFuncAC4 arg2) { + this->unk_AC4 = arg2; + this->unk_ACE = 0; + this->unk_AC8 = 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) { + PlayerAnimationHeader* curAnim = this->skelAnime.animation; + PlayerAnimationHeader*(*iter)[PLAYER_ANIMTYPE_MAX] = (void*)&D_8085BE84[0][this->modelAnimType]; + s32 i; + + this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000000); + + for (i = 0; i < PLAYER_ANIMGROUP_MAX; i++) { + if (curAnim == **iter) { + break; + } + iter++; + } + + func_8082F8BC(play, this, itemAction); + + if (i < PLAYER_ANIMGROUP_MAX) { + this->skelAnime.animation = GET_PLAYER_ANIM(i, this->modelAnimType); + } +} + +s8 sItemItemActions[] = { + PLAYER_IA_OCARINA, // ITEM_OCARINA, + PLAYER_IA_BOW, // ITEM_BOW, + PLAYER_IA_BOW_FIRE, // ITEM_ARROW_FIRE, + PLAYER_IA_BOW_ICE, // ITEM_ARROW_ICE, + PLAYER_IA_BOW_LIGHT, // ITEM_ARROW_LIGHT, + PLAYER_IA_PICTO_BOX, // ITEM_OCARINA_FAIRY, + PLAYER_IA_BOMB, // ITEM_BOMB, + PLAYER_IA_BOMBCHU, // ITEM_BOMBCHU, + PLAYER_IA_STICK, // ITEM_STICK, + PLAYER_IA_NUT, // ITEM_NUT, + PLAYER_IA_MAGIC_BEANS, // ITEM_MAGIC_BEANS, + PLAYER_IA_PICTO_BOX, // ITEM_SLINGSHOT, + PLAYER_IA_POWDER_KEG, // ITEM_POWDER_KEG, + PLAYER_IA_PICTO_BOX, // ITEM_PICTO_BOX, + PLAYER_IA_LENS, // ITEM_LENS, + PLAYER_IA_HOOKSHOT, // ITEM_HOOKSHOT, + PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_GREAT_FAIRY, + PLAYER_IA_PICTO_BOX, // ITEM_LONGSHOT, // OoT Leftover + PLAYER_IA_BOTTLE_EMPTY, // ITEM_BOTTLE, + PLAYER_IA_BOTTLE_POTION_RED, // ITEM_POTION_RED, + PLAYER_IA_BOTTLE_POTION_GREEN, // ITEM_POTION_GREEN, + PLAYER_IA_BOTTLE_POTION_BLUE, // ITEM_POTION_BLUE, + PLAYER_IA_BOTTLE_FAIRY, // ITEM_FAIRY, + PLAYER_IA_BOTTLE_DEKU_PRINCESS, // ITEM_DEKU_PRINCESS, + PLAYER_IA_BOTTLE_MILK, // ITEM_MILK_BOTTLE, + PLAYER_IA_BOTTLE_MILK_HALF, // ITEM_MILK_HALF, + PLAYER_IA_BOTTLE_FISH, // ITEM_FISH, + PLAYER_IA_BOTTLE_BUG, // ITEM_BUG, + PLAYER_IA_BOTTLE_BUG, // ITEM_BLUE_FIRE, // ! + PLAYER_IA_BOTTLE_POE, // ITEM_POE, + PLAYER_IA_BOTTLE_BIG_POE, // ITEM_BIG_POE, + PLAYER_IA_BOTTLE_SPRING_WATER, // ITEM_SPRING_WATER, + PLAYER_IA_BOTTLE_HOT_SPRING_WATER, // ITEM_HOT_SPRING_WATER, + PLAYER_IA_BOTTLE_ZORA_EGG, // ITEM_ZORA_EGG, + PLAYER_IA_BOTTLE_GOLD_DUST, // ITEM_GOLD_DUST, + PLAYER_IA_BOTTLE_MUSHROOM, // ITEM_MUSHROOM, + PLAYER_IA_BOTTLE_SEAHORSE, // ITEM_SEA_HORSE, + PLAYER_IA_BOTTLE_CHATEAU, // ITEM_CHATEAU, + PLAYER_IA_BOTTLE_HYLIAN_LOACH, // ITEM_HYLIAN_LOACH, + PLAYER_IA_BOTTLE_POE, // ITEM_OBABA_DRINK, // ! + PLAYER_IA_MOON_TEAR, // ITEM_MOON_TEAR, + PLAYER_IA_DEED_LAND, // ITEM_DEED_LAND, + PLAYER_IA_DEED_SWAMP, // ITEM_DEED_SWAMP, + PLAYER_IA_DEED_MOUNTAIN, // ITEM_DEED_MOUNTAIN, + PLAYER_IA_DEED_OCEAN, // ITEM_DEED_OCEAN, + PLAYER_IA_ROOM_KEY, // ITEM_ROOM_KEY, + PLAYER_IA_LETTER_MAMA, // ITEM_LETTER_MAMA, + PLAYER_IA_LETTER_TO_KAFEI, // ITEM_LETTER_TO_KAFEI, + PLAYER_IA_PENDANT_OF_MEMORIES, // ITEM_PENDANT_MEMORIES, + PLAYER_IA_38, // ITEM_TINGLE_MAP, // ! + PLAYER_IA_MASK_DEKU, // ITEM_MASK_DEKU, + PLAYER_IA_MASK_GORON, // ITEM_MASK_GORON, + PLAYER_IA_MASK_ZORA, // ITEM_MASK_ZORA, + PLAYER_IA_MASK_FIERCE_DEITY, // ITEM_MASK_FIERCE_DEITY, + PLAYER_IA_MASK_TRUTH, // ITEM_MASK_TRUTH, + PLAYER_IA_MASK_KAFEIS_MASK, // ITEM_MASK_KAFEIS_MASK, + PLAYER_IA_MASK_ALL_NIGHT, // ITEM_MASK_ALL_NIGHT, + PLAYER_IA_MASK_BUNNY, // ITEM_MASK_BUNNY, + PLAYER_IA_MASK_KEATON, // ITEM_MASK_KEATON, + PLAYER_IA_MASK_GARO, // ITEM_MASK_GARO, + PLAYER_IA_MASK_ROMANI, // ITEM_MASK_ROMANI, + PLAYER_IA_MASK_CIRCUS_LEADER, // ITEM_MASK_CIRCUS_LEADER, + PLAYER_IA_MASK_POSTMAN, // ITEM_MASK_POSTMAN, + PLAYER_IA_MASK_COUPLE, // ITEM_MASK_COUPLE, + PLAYER_IA_MASK_GREAT_FAIRY, // ITEM_MASK_GREAT_FAIRY, + PLAYER_IA_MASK_GIBDO, // ITEM_MASK_GIBDO, + PLAYER_IA_MASK_DON_GERO, // ITEM_MASK_DON_GERO, + PLAYER_IA_MASK_KAMARO, // ITEM_MASK_KAMARO, + PLAYER_IA_MASK_CAPTAIN, // ITEM_MASK_CAPTAIN, + PLAYER_IA_MASK_STONE, // ITEM_MASK_STONE, + PLAYER_IA_MASK_BREMEN, // ITEM_MASK_BREMEN, + PLAYER_IA_MASK_BLAST, // ITEM_MASK_BLAST, + PLAYER_IA_MASK_SCENTS, // ITEM_MASK_SCENTS, + PLAYER_IA_MASK_GIANT, // ITEM_MASK_GIANT, + PLAYER_IA_BOW_FIRE, // ITEM_BOW_ARROW_FIRE, + PLAYER_IA_BOW_ICE, // ITEM_BOW_ARROW_ICE, + PLAYER_IA_BOW_LIGHT, // ITEM_BOW_ARROW_LIGHT, + PLAYER_IA_SWORD_KOKIRI, // ITEM_SWORD_KOKIRI, + PLAYER_IA_SWORD_RAZOR, // ITEM_SWORD_RAZOR, + PLAYER_IA_SWORD_GILDED, // ITEM_SWORD_GILDED, + PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_DEITY, +}; + +PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) { + if (item >= ITEM_FD) { + return PLAYER_IA_NONE; + } else if (item == ITEM_FC) { + return PLAYER_IA_LAST_USED; + } else if (item == ITEM_FISHING_ROD) { + return PLAYER_IA_FISHING_ROD; + } else if ((item == ITEM_SWORD_KOKIRI) && (this->transformation == PLAYER_FORM_ZORA)) { + return PLAYER_IA_ZORA_FINS; + } else { + return sItemItemActions[item]; + } +} + +void func_8082F594(PlayState* play, Player* this) { +} + +void func_8082F5A4(PlayState* play, Player* this) { + this->unk_B28 = 0; + this->unk_B0C = 1.0f; +} + +void func_8082F5C0(PlayState* play, Player* this) { + this->stateFlags1 |= PLAYER_STATE1_8; + + if (this->heldItemAction == PLAYER_IA_NUT) { + this->unk_B28 = -2; + } else { + this->unk_B28 = -1; + } + this->unk_ACC = 0; +} + +PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { + func_80848780, // PLAYER_IA_NONE + func_80848780, // PLAYER_IA_LAST_USED + func_80848780, // PLAYER_IA_FISHING_ROD + func_808487B8, // PLAYER_IA_SWORD_KOKIRI + func_808487B8, // PLAYER_IA_SWORD_RAZOR + func_808487B8, // PLAYER_IA_SWORD_GILDED + func_808487B8, // PLAYER_IA_SWORD_TWO_HANDED + func_80848780, // PLAYER_IA_STICK + func_80848780, // PLAYER_IA_ZORA_FINS + func_80848B6C, // PLAYER_IA_BOW + func_80848B6C, // PLAYER_IA_BOW_FIRE + func_80848B6C, // PLAYER_IA_BOW_ICE + func_80848B6C, // PLAYER_IA_BOW_LIGHT + func_80848B6C, // PLAYER_IA_HOOKSHOT + func_808490B4, // PLAYER_IA_BOMB + func_808490B4, // PLAYER_IA_POWDER_KEG + func_808490B4, // PLAYER_IA_BOMBCHU + func_808491B4, // PLAYER_IA_11 + func_80848B6C, // PLAYER_IA_NUT + func_80848780, // PLAYER_IA_PICTO_BOX + func_80848780, // PLAYER_IA_OCARINA + func_80848780, // PLAYER_IA_BOTTLE_EMPTY + func_80848780, // PLAYER_IA_BOTTLE_FISH + func_80848780, // PLAYER_IA_BOTTLE_SPRING_WATER + func_80848780, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + func_80848780, // PLAYER_IA_BOTTLE_ZORA_EGG + func_80848780, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + func_80848780, // PLAYER_IA_BOTTLE_GOLD_DUST + func_80848780, // PLAYER_IA_BOTTLE_1C + func_80848780, // PLAYER_IA_BOTTLE_SEA_HORSE + func_80848780, // PLAYER_IA_BOTTLE_MUSHROOM + func_80848780, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + func_80848780, // PLAYER_IA_BOTTLE_BUG + func_80848780, // PLAYER_IA_BOTTLE_POE + func_80848780, // PLAYER_IA_BOTTLE_BIG_POE + func_80848780, // PLAYER_IA_BOTTLE_POTION_RED + func_80848780, // PLAYER_IA_BOTTLE_POTION_BLUE + func_80848780, // PLAYER_IA_BOTTLE_POTION_GREEN + func_80848780, // PLAYER_IA_BOTTLE_MILK + func_80848780, // PLAYER_IA_BOTTLE_MILK_HALF + func_80848780, // PLAYER_IA_BOTTLE_CHATEAU + func_80848780, // PLAYER_IA_BOTTLE_FAIRY + func_80848780, // PLAYER_IA_MOON_TEAR + func_80848780, // PLAYER_IA_DEED_LAND + func_80848780, // PLAYER_IA_ROOM_KEY + func_80848780, // PLAYER_IA_LETTER_TO_KAFEI + func_80848780, // PLAYER_IA_MAGIC_BEANS + func_80848780, // PLAYER_IA_DEED_SWAMP + func_80848780, // PLAYER_IA_DEED_MOUNTAIN + func_80848780, // PLAYER_IA_DEED_OCEAN + func_80848780, // PLAYER_IA_32 + func_80848780, // PLAYER_IA_LETTER_MAMA + func_80848780, // PLAYER_IA_34 + func_80848780, // PLAYER_IA_35 + func_80848780, // PLAYER_IA_PENDANT_MEMORIES + func_80848780, // PLAYER_IA_37 + func_80848780, // PLAYER_IA_38 + func_80848780, // PLAYER_IA_39 + func_80848780, // PLAYER_IA_MASK_TRUTH + func_80848780, // PLAYER_IA_MASK_KAFEIS_MASK + func_80848780, // PLAYER_IA_MASK_ALL_NIGHT + func_80848780, // PLAYER_IA_MASK_BUNNY + func_80848780, // PLAYER_IA_MASK_KEATON + func_80848780, // PLAYER_IA_MASK_GARO + func_80848780, // PLAYER_IA_MASK_ROMANI + func_80848780, // PLAYER_IA_MASK_CIRCUS_LEADER + func_80848780, // PLAYER_IA_MASK_POSTMAN + func_80848780, // PLAYER_IA_MASK_COUPLE + func_80848780, // PLAYER_IA_MASK_GREAT_FAIRY + func_80848780, // PLAYER_IA_MASK_GIBDO + func_80848780, // PLAYER_IA_MASK_DON_GERO + func_80848780, // PLAYER_IA_MASK_KAMARO + func_80848780, // PLAYER_IA_MASK_CAPTAIN + func_80848780, // PLAYER_IA_MASK_STONE + func_80848780, // PLAYER_IA_MASK_BREMEN + func_80848780, // PLAYER_IA_MASK_BLAST + func_80848780, // PLAYER_IA_MASK_SCENTS + func_80848780, // PLAYER_IA_MASK_GIANT + func_80848780, // PLAYER_IA_MASK_FIERCE_DEITY + func_80848780, // PLAYER_IA_MASK_GORON + func_80848780, // PLAYER_IA_MASK_ZORA + func_80848780, // PLAYER_IA_MASK_DEKU + func_80848780, // PLAYER_IA_LENS +}; + +// sPlayerItemActionInits? +void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { + func_8082F594, // PLAYER_IA_NONE + func_8082F594, // PLAYER_IA_LAST_USED + func_8082F594, // PLAYER_IA_FISHING_ROD + func_8082F594, // PLAYER_IA_SWORD_KOKIRI + func_8082F594, // PLAYER_IA_SWORD_RAZOR + func_8082F594, // PLAYER_IA_SWORD_GILDED + func_8082F594, // PLAYER_IA_SWORD_TWO_HANDED + func_8082F5A4, // PLAYER_IA_STICK + func_8082F8A0, // PLAYER_IA_ZORA_FINS + func_8082F5C0, // PLAYER_IA_BOW + func_8082F5C0, // PLAYER_IA_BOW_FIRE + func_8082F5C0, // PLAYER_IA_BOW_ICE + func_8082F5C0, // PLAYER_IA_BOW_LIGHT + func_8082F7F4, // PLAYER_IA_HOOKSHOT + Player_SpawnExplosive, // PLAYER_IA_BOMB + Player_SpawnExplosive, // PLAYER_IA_POWDER_KEG + Player_SpawnExplosive, // PLAYER_IA_BOMBCHU + func_8082F8A0, // PLAYER_IA_11 + func_8082F5C0, // PLAYER_IA_NUT + func_8082F594, // PLAYER_IA_PICTO_BOX + func_8082F594, // PLAYER_IA_OCARINA + func_8082F594, // PLAYER_IA_BOTTLE_EMPTY + func_8082F594, // PLAYER_IA_BOTTLE_FISH + func_8082F594, // PLAYER_IA_BOTTLE_SPRING_WATER + func_8082F594, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + func_8082F594, // PLAYER_IA_BOTTLE_ZORA_EGG + func_8082F594, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + func_8082F594, // PLAYER_IA_BOTTLE_GOLD_DUST + func_8082F594, // PLAYER_IA_BOTTLE_1C + func_8082F594, // PLAYER_IA_BOTTLE_SEA_HORSE + func_8082F594, // PLAYER_IA_BOTTLE_MUSHROOM + func_8082F594, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + func_8082F594, // PLAYER_IA_BOTTLE_BUG + func_8082F594, // PLAYER_IA_BOTTLE_POE + func_8082F594, // PLAYER_IA_BOTTLE_BIG_POE + func_8082F594, // PLAYER_IA_BOTTLE_POTION_RED + func_8082F594, // PLAYER_IA_BOTTLE_POTION_BLUE + func_8082F594, // PLAYER_IA_BOTTLE_POTION_GREEN + func_8082F594, // PLAYER_IA_BOTTLE_MILK + func_8082F594, // PLAYER_IA_BOTTLE_MILK_HALF + func_8082F594, // PLAYER_IA_BOTTLE_CHATEAU + func_8082F594, // PLAYER_IA_BOTTLE_FAIRY + func_8082F594, // PLAYER_IA_MOON_TEAR + func_8082F594, // PLAYER_IA_DEED_LAND + func_8082F594, // PLAYER_IA_ROOM_KEY + func_8082F594, // PLAYER_IA_LETTER_TO_KAFEI + func_8082F594, // PLAYER_IA_MAGIC_BEANS + func_8082F594, // PLAYER_IA_DEED_SWAMP + func_8082F594, // PLAYER_IA_DEED_MOUNTAIN + func_8082F594, // PLAYER_IA_DEED_OCEAN + func_8082F594, // PLAYER_IA_32 + func_8082F594, // PLAYER_IA_LETTER_MAMA + func_8082F594, // PLAYER_IA_34 + func_8082F594, // PLAYER_IA_35 + func_8082F594, // PLAYER_IA_PENDANT_MEMORIES + func_8082F594, // PLAYER_IA_37 + func_8082F594, // PLAYER_IA_38 + func_8082F594, // PLAYER_IA_39 + func_8082F594, // PLAYER_IA_MASK_TRUTH + func_8082F594, // PLAYER_IA_MASK_KAFEIS_MASK + func_8082F594, // PLAYER_IA_MASK_ALL_NIGHT + func_8082F594, // PLAYER_IA_MASK_BUNNY + func_8082F594, // PLAYER_IA_MASK_KEATON + func_8082F594, // PLAYER_IA_MASK_GARO + func_8082F594, // PLAYER_IA_MASK_ROMANI + func_8082F594, // PLAYER_IA_MASK_CIRCUS_LEADER + func_8082F594, // PLAYER_IA_MASK_POSTMAN + func_8082F594, // PLAYER_IA_MASK_COUPLE + func_8082F594, // PLAYER_IA_MASK_GREAT_FAIRY + func_8082F594, // PLAYER_IA_MASK_GIBDO + func_8082F594, // PLAYER_IA_MASK_DON_GERO + func_8082F594, // PLAYER_IA_MASK_KAMARO + func_8082F594, // PLAYER_IA_MASK_CAPTAIN + func_8082F594, // PLAYER_IA_MASK_STONE + func_8082F594, // PLAYER_IA_MASK_BREMEN + func_8082F594, // PLAYER_IA_MASK_BLAST + func_8082F594, // PLAYER_IA_MASK_SCENTS + func_8082F594, // PLAYER_IA_MASK_GIANT + func_8082F594, // PLAYER_IA_MASK_FIERCE_DEITY + func_8082F594, // PLAYER_IA_MASK_GORON + func_8082F594, // PLAYER_IA_MASK_ZORA + func_8082F594, // PLAYER_IA_MASK_DEKU + func_8082F594, // PLAYER_IA_LENS +}; + +void func_8082F5FC(Player* this, Actor* actor) { + this->heldActor = actor; + this->interactRangeActor = actor; + this->getItemId = GI_NONE; + this->leftHandWorld.rot.y = actor->shape.rot.y - this->actor.shape.rot.y; + 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 }, +}; + +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 }, +}; + +ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = { + { ITEM_BOMB, ACTOR_EN_BOM }, // PLAYER_EXPLOSIVE_BOMB + { ITEM_POWDER_KEG, ACTOR_EN_BOM }, // PLAYER_EXPLOSIVE_POWDER_KEG + { ITEM_BOMBCHU, ACTOR_EN_BOM_CHU }, // PLAYER_EXPLOSIVE_BOMBCHU +}; + +void Player_SpawnExplosive(PlayState* play, Player* this) { + PlayerExplosive explosiveType; + ExplosiveInfo* explosiveInfo; + Actor* explosiveActor; + + if (this->stateFlags1 & PLAYER_STATE1_800) { + func_8082DE14(play, this); + return; + } + + explosiveType = Player_GetExplosiveHeld(this); + explosiveInfo = &sPlayerExplosiveInfo[explosiveType]; + if ((explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) && (gSaveContext.powderKegTimer == 0)) { + gSaveContext.powderKegTimer = 200; + } + + explosiveActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, explosiveInfo->actorId, + this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, + (explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) ? BOMB_EXPLOSIVE_TYPE_POWDER_KEG + : BOMB_EXPLOSIVE_TYPE_BOMB, + this->actor.shape.rot.y, 0, BOMB_TYPE_BODY); + if (explosiveActor != NULL) { + if ((explosiveType == PLAYER_EXPLOSIVE_BOMB) && (play->unk_1887E != 0)) { + play->unk_1887E--; + if (play->unk_1887E == 0) { + play->unk_1887E = -1; + } + } else if ((explosiveType == PLAYER_EXPLOSIVE_BOMBCHU) && (play->unk_1887D != 0)) { + play->unk_1887D--; + if (play->unk_1887D == 0) { + play->unk_1887D = -1; + } + } else { + Inventory_ChangeAmmo(explosiveInfo->itemId, -1); + } + func_8082F5FC(this, explosiveActor); + } else if (explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) { + gSaveContext.powderKegTimer = 0; + } +} + +// SpawnHookshot? +void func_8082F7F4(PlayState* play, Player* this) { + ArmsHook* armsHook; + + this->stateFlags1 |= PLAYER_STATE1_8; + this->unk_B28 = -3; + this->unk_B48 = 0.0f; + + this->heldActor = + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_ARMS_HOOK, this->actor.world.pos.x, + 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); + return; + } + armsHook = (ArmsHook*)this->heldActor; + armsHook->actor.objBankIndex = this->actor.objBankIndex; + armsHook->unk_208 = this->transformation; +} + +void func_8082F8A0(PlayState* play, Player* this) { + this->stateFlags1 |= PLAYER_STATE1_1000000; +} + +void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { + this->itemAction = this->heldItemAction = itemAction; + this->modelGroup = this->nextModelGroup; + + this->stateFlags1 &= ~(PLAYER_STATE1_1000000 | PLAYER_STATE1_8); + + this->unk_B08 = 0.0f; + this->unk_B0C = 0.0f; + this->unk_B28 = 0; + + D_8085CB3C[itemAction](play, this); + Player_SetModelGroup(this, this->modelGroup); +} + +// AttackAnimInfo sMeleeAttackAnimInfo +AttackAnimInfo sMeleeAttackAnimInfo[PLAYER_MWA_MAX] = { + // PLAYER_MWA_FORWARD_SLASH_1H + { &gPlayerAnim_link_fighter_normal_kiru, &gPlayerAnim_link_fighter_normal_kiru_end, + &gPlayerAnim_link_fighter_normal_kiru_endR, 1, 4 }, + // PLAYER_MWA_FORWARD_SLASH_2H + { &gPlayerAnim_link_fighter_Lnormal_kiru, &gPlayerAnim_link_fighter_Lnormal_kiru_end, + &gPlayerAnim_link_anchor_Lnormal_kiru_endR, 1, 4 }, + // PLAYER_MWA_FORWARD_COMBO_1H + { &gPlayerAnim_link_fighter_normal_kiru_finsh, &gPlayerAnim_link_fighter_normal_kiru_finsh_end, + &gPlayerAnim_link_anchor_normal_kiru_finsh_endR, 0, 5 }, + // PLAYER_MWA_FORWARD_COMBO_2H + { &gPlayerAnim_link_fighter_Lnormal_kiru_finsh, &gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end, + &gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR, 1, 7 }, + // PLAYER_MWA_RIGHT_SLASH_1H + { &gPlayerAnim_link_fighter_Lside_kiru, &gPlayerAnim_link_fighter_Lside_kiru_end, + &gPlayerAnim_link_anchor_Lside_kiru_endR, 1, 4 }, + // PLAYER_MWA_RIGHT_SLASH_2H + { &gPlayerAnim_link_fighter_LLside_kiru, &gPlayerAnim_link_fighter_LLside_kiru_end, + &gPlayerAnim_link_anchor_LLside_kiru_endL, 0, 5 }, + // PLAYER_MWA_RIGHT_COMBO_1H + { &gPlayerAnim_link_fighter_Lside_kiru_finsh, &gPlayerAnim_link_fighter_Lside_kiru_finsh_end, + &gPlayerAnim_link_anchor_Lside_kiru_finsh_endR, 2, 8 }, + // PLAYER_MWA_RIGHT_COMBO_2H + { &gPlayerAnim_link_fighter_LLside_kiru_finsh, &gPlayerAnim_link_fighter_LLside_kiru_finsh_end, + &gPlayerAnim_link_anchor_LLside_kiru_finsh_endR, 3, 8 }, + // PLAYER_MWA_LEFT_SLASH_1H + { &gPlayerAnim_link_fighter_Rside_kiru, &gPlayerAnim_link_fighter_Rside_kiru_end, + &gPlayerAnim_link_anchor_Rside_kiru_endR, 0, 4 }, + // PLAYER_MWA_LEFT_SLASH_2H + { &gPlayerAnim_link_fighter_LRside_kiru, &gPlayerAnim_link_fighter_LRside_kiru_end, + &gPlayerAnim_link_anchor_LRside_kiru_endR, 0, 5 }, + // PLAYER_MWA_LEFT_COMBO_1H + { &gPlayerAnim_link_fighter_Rside_kiru_finsh, &gPlayerAnim_link_fighter_Rside_kiru_finsh_end, + &gPlayerAnim_link_anchor_Rside_kiru_finsh_endR, 0, 6 }, + // PLAYER_MWA_LEFT_COMBO_2H + { &gPlayerAnim_link_fighter_LRside_kiru_finsh, &gPlayerAnim_link_fighter_LRside_kiru_finsh_end, + &gPlayerAnim_link_anchor_LRside_kiru_finsh_endL, 1, 5 }, + // PLAYER_MWA_STAB_1H + { &gPlayerAnim_link_fighter_pierce_kiru, &gPlayerAnim_link_fighter_pierce_kiru_end, + &gPlayerAnim_link_anchor_pierce_kiru_endR, 0, 3 }, + // PLAYER_MWA_STAB_2H + { &gPlayerAnim_link_fighter_Lpierce_kiru, &gPlayerAnim_link_fighter_Lpierce_kiru_end, + &gPlayerAnim_link_anchor_Lpierce_kiru_endL, 0, 3 }, + // PLAYER_MWA_STAB_COMBO_1H + { &gPlayerAnim_link_fighter_pierce_kiru_finsh, &gPlayerAnim_link_fighter_pierce_kiru_finsh_end, + &gPlayerAnim_link_anchor_pierce_kiru_finsh_endR, 1, 9 }, + // PLAYER_MWA_STAB_COMBO_2H + { &gPlayerAnim_link_fighter_Lpierce_kiru_finsh, &gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end, + &gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR, 1, 8 }, + // PLAYER_MWA_FLIPSLASH_START + { &gPlayerAnim_link_fighter_jump_rollkiru, &gPlayerAnim_link_fighter_jump_kiru_finsh, + &gPlayerAnim_link_fighter_jump_kiru_finsh, 7, 99 }, + // PLAYER_MWA_JUMPSLASH_START + { &gPlayerAnim_link_fighter_Lpower_jump_kiru, &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, + &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, 7, 99 }, + // PLAYER_MWA_ZORA_JUMPKICK_START + { &gPlayerAnim_pz_jumpAT, &gPlayerAnim_pz_jumpATend, &gPlayerAnim_pz_jumpATend, 8, 99 }, + // PLAYER_MWA_FLIPSLASH_FINISH + { &gPlayerAnim_link_fighter_jump_kiru_finsh, &gPlayerAnim_link_fighter_jump_kiru_finsh_end, + &gPlayerAnim_link_fighter_jump_kiru_finsh_end, 1, 2 }, + // PLAYER_MWA_JUMPSLASH_FINISH + { &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, &gPlayerAnim_link_fighter_Lpower_jump_kiru_end, + &gPlayerAnim_link_fighter_Lpower_jump_kiru_end, 1, 2 }, + // PLAYER_MWA_ZORA_JUMPKICK_FINISH + { &gPlayerAnim_pz_jumpATend, &gPlayerAnim_pz_wait, &gPlayerAnim_link_normal_waitR_free, 1, 2 }, + // PLAYER_MWA_BACKSLASH_RIGHT + { &gPlayerAnim_link_fighter_turn_kiruR, &gPlayerAnim_link_fighter_turn_kiruR_end, + &gPlayerAnim_link_fighter_turn_kiruR_end, 1, 5 }, + // PLAYER_MWA_BACKSLASH_LEFT + { &gPlayerAnim_link_fighter_turn_kiruL, &gPlayerAnim_link_fighter_turn_kiruL_end, + &gPlayerAnim_link_fighter_turn_kiruL_end, 1, 4 }, + // PLAYER_MWA_GORON_PUNCH_LEFT + { &gPlayerAnim_pg_punchA, &gPlayerAnim_pg_punchAend, &gPlayerAnim_pg_punchAendR, 6, 8 }, + // PLAYER_MWA_GORON_PUNCH_RIGHT + { &gPlayerAnim_pg_punchB, &gPlayerAnim_pg_punchBend, &gPlayerAnim_pg_punchBendR, 12, 18 }, + // PLAYER_MWA_GORON_PUNCH_BUTT + { &gPlayerAnim_pg_punchC, &gPlayerAnim_pg_punchCend, &gPlayerAnim_pg_punchCendR, 8, 14 }, + // PLAYER_MWA_ZORA_PUNCH_LEFT + { &gPlayerAnim_pz_attackA, &gPlayerAnim_pz_attackAend, &gPlayerAnim_pz_attackAendR, 2, 5 }, + // PLAYER_MWA_ZORA_PUNCH_COMBO + { &gPlayerAnim_pz_attackB, &gPlayerAnim_pz_attackBend, &gPlayerAnim_pz_attackBendR, 3, 8 }, + // PLAYER_MWA_ZORA_PUNCH_KICK + { &gPlayerAnim_pz_attackC, &gPlayerAnim_pz_attackCend, &gPlayerAnim_pz_attackCendR, 3, 10 }, + // PLAYER_MWA_SPIN_ATTACK_1H + { &gPlayerAnim_link_fighter_rolling_kiru, &gPlayerAnim_link_fighter_rolling_kiru_end, + &gPlayerAnim_link_anchor_rolling_kiru_endR, 0, 12 }, + // PLAYER_MWA_SPIN_ATTACK_2H + { &gPlayerAnim_link_fighter_Lrolling_kiru, &gPlayerAnim_link_fighter_Lrolling_kiru_end, + &gPlayerAnim_link_anchor_Lrolling_kiru_endR, 0, 15 }, + // PLAYER_MWA_BIG_SPIN_1H + { &gPlayerAnim_link_fighter_Wrolling_kiru, &gPlayerAnim_link_fighter_Wrolling_kiru_end, + &gPlayerAnim_link_anchor_rolling_kiru_endR, 0, 16 }, + // PLAYER_MWA_BIG_SPIN_2H + { &gPlayerAnim_link_fighter_Wrolling_kiru, &gPlayerAnim_link_fighter_Wrolling_kiru_end, + &gPlayerAnim_link_anchor_Lrolling_kiru_endR, 0, 16 }, +}; + +PlayerAnimationHeader* D_8085CF50[] = { + &gPlayerAnim_link_fighter_power_kiru_start, + &gPlayerAnim_link_fighter_Lpower_kiru_start, +}; +PlayerAnimationHeader* D_8085CF58[] = { + &gPlayerAnim_link_fighter_power_kiru_startL, + &gPlayerAnim_link_fighter_Lpower_kiru_start, +}; +PlayerAnimationHeader* D_8085CF60[] = { + &gPlayerAnim_link_fighter_power_kiru_wait, + &gPlayerAnim_link_fighter_Lpower_kiru_wait, +}; +PlayerAnimationHeader* D_8085CF68[] = { + &gPlayerAnim_link_fighter_power_kiru_wait_end, + &gPlayerAnim_link_fighter_Lpower_kiru_wait_end, +}; +PlayerAnimationHeader* D_8085CF70[] = { + &gPlayerAnim_link_fighter_power_kiru_walk, + &gPlayerAnim_link_fighter_Lpower_kiru_walk, +}; +PlayerAnimationHeader* D_8085CF78[] = { + &gPlayerAnim_link_fighter_power_kiru_side_walk, + &gPlayerAnim_link_fighter_Lpower_kiru_side_walk, +}; + +u8 D_8085CF80[] = { + PLAYER_MWA_SPIN_ATTACK_1H, + PLAYER_MWA_SPIN_ATTACK_2H, +}; +u8 D_8085CF84[] = { + PLAYER_MWA_BIG_SPIN_1H, + PLAYER_MWA_BIG_SPIN_2H, +}; + +// sBlureColors +BlureColors D_8085CF88[] = { + { { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 } }, + { { 165, 185, 255, 185 }, { 205, 225, 255, 50 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 } }, +}; + +void Player_OverrideBlureColors(PlayState* play, Player* this, s32 colorType, s32 elemDuration) { + EffectBlure* blure0 = Effect_GetByIndex(this->meleeWeaponEffectIndex[0]); + EffectBlure* blure1 = Effect_GetByIndex(this->meleeWeaponEffectIndex[1]); + s32 i; + + for (i = 0; i < 4; i++) { + blure0->p1StartColor[i] = D_8085CF88[colorType].p1StartColor[i]; + blure0->p2StartColor[i] = D_8085CF88[colorType].p2StartColor[i]; + blure0->p1EndColor[i] = D_8085CF88[colorType].p1EndColor[i]; + blure0->p2EndColor[i] = D_8085CF88[colorType].p2EndColor[i]; + blure1->p1StartColor[i] = D_8085CF88[colorType].p1StartColor[i]; + blure1->p2StartColor[i] = D_8085CF88[colorType].p2StartColor[i]; + blure1->p1EndColor[i] = D_8085CF88[colorType].p1EndColor[i]; + blure1->p2EndColor[i] = D_8085CF88[colorType].p2EndColor[i]; + } + + if (this->transformation == PLAYER_FORM_DEKU) { + elemDuration = 8; + } + blure0->elemDuration = elemDuration; + blure1->elemDuration = elemDuration; +} + +void func_8082FA5C(PlayState* play, Player* this, PlayerMeleeWeaponState meleeWeaponState) { + u16 voiceSfxId; + u16 itemSfxId; + + if (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) { + voiceSfxId = NA_SE_VO_LI_SWORD_N; + if (this->transformation == PLAYER_FORM_GORON) { + itemSfxId = NA_SE_IT_GORON_PUNCH_SWING; + } else { + itemSfxId = NA_SE_NONE; + if (this->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) { + voiceSfxId = NA_SE_VO_LI_SWORD_L; + } else if (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) { + itemSfxId = NA_SE_IT_GORON_PUNCH_SWING; + } else { + itemSfxId = NA_SE_IT_SWORD_SWING_HARD; + if (this->unk_ADD >= 3) { + voiceSfxId = NA_SE_VO_LI_SWORD_L; + } else { + itemSfxId = (this->heldItemAction == PLAYER_IA_SWORD_TWO_HANDED) ? NA_SE_IT_HAMMER_SWING + : NA_SE_IT_SWORD_SWING; + } + } + } + + if (itemSfxId != NA_SE_NONE) { + func_8082E1F0(this, itemSfxId); + } + + if (!((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_START) && + (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH))) { + Player_AnimSfx_PlayVoice(this, voiceSfxId); + } + + Player_OverrideBlureColors(play, this, 0, 4); + } + + this->meleeWeaponState = meleeWeaponState; +} + +s32 func_8082FB68(Player* this) { + if ((this->targetedActor != NULL) && CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + this->stateFlags3 |= PLAYER_STATE3_80000000; + return true; + } + + if (this->stateFlags3 & PLAYER_STATE3_80000000) { + this->stateFlags3 &= ~PLAYER_STATE3_80000000; + if (this->linearVelocity == 0.0f) { + this->currentYaw = this->actor.shape.rot.y; + } + } + + return false; +} + +s32 func_8082FBE8(Player* this) { + return func_80123420(this) || func_80123434(this); +} + +s32 func_8082FC24(Player* this) { + return func_8082FB68(this) || func_80123434(this); +} + +void func_8082FC60(Player* this) { + this->unk_B44 = 0.0f; + this->unk_B40 = 0.0f; +} + +s32 func_8082FC78(Player* this, ItemId item) { + if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->itemAction)) { + return true; + } else { + return false; + } +} + +s32 func_8082FCC4(Player* this, ItemId item, PlayerItemAction itemAction) { + if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == itemAction)) { + return true; + } else { + return false; + } +} + +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)) { + return btn; + } + } + + return EQUIP_SLOT_NONE; +} + +u16 D_8085CFA8[] = { + BTN_B, + BTN_CLEFT, + BTN_CDOWN, + BTN_CRIGHT, +}; + +// Return currently-pressed button, in order of priority B, CLEFT, CDOWN, CRIGHT. +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])) { + break; + } + } + + return i; +} + +void func_8082FE0C(Player* this, PlayState* play) { + if (this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000)) { + return; + } + if (this->stateFlags2 & PLAYER_STATE2_2000000) { + return; + } + if (this->stateFlags3 & PLAYER_STATE3_20000000) { + return; + } + if (func_801240DC(this)) { + return; + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + if (this->currentMask != PLAYER_MASK_NONE) { + PlayerItemAction maskItemAction = GET_IA_FROM_MASK(this->currentMask); + EquipSlot btn = func_8082FD0C(this, maskItemAction); + + if (btn <= EQUIP_SLOT_NONE) { + s32 maskIdMinusOne = + GET_MASK_FROM_IA(Player_ItemToItemAction(this, GET_CUR_FORM_BTN_ITEM(this->unk_154))) - 1; + + if ((maskIdMinusOne < PLAYER_MASK_TRUTH - 1) || (maskIdMinusOne >= PLAYER_MASK_MAX - 1)) { + maskIdMinusOne = this->currentMask - 1; + } + func_80831990(play, this, Player_MaskIdToItemId(maskIdMinusOne)); + return; + } + + if ((this->currentMask == PLAYER_MASK_GIANT) && (gSaveContext.save.saveInfo.playerData.magic == 0)) { + func_80838A20(play, this); + } + + this->unk_154 = btn; + } + } + + 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); + } else { + s32 pad; + ItemId item; + EquipSlot i = func_8082FDC4(); + + i = ((i >= EQUIP_SLOT_A) && (this->transformation == PLAYER_FORM_FIERCE_DEITY) && + (this->heldItemAction != PLAYER_IA_SWORD_TWO_HANDED)) + ? EQUIP_SLOT_B + : i; + + item = func_8012364C(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])) { + break; + } + } + + item = func_8012364C(play, this, i); + if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->heldItemAction)) { + D_80862B4C = 1; + } + } else if (item == ITEM_F0) { + if (this->blastMaskTimer == 0) { + EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.focus.pos.x, + this->actor.focus.pos.y, this->actor.focus.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); + + if (bomb != NULL) { + bomb->timer = 0; + this->blastMaskTimer = 310; + } + } + } else if (item == ITEM_F1) { + func_80839978(play, this); + } else if (item == ITEM_F2) { + func_80839A10(play, this); + } else if ((Player_BButtonSwordFromIA(this, Player_ItemToItemAction(this, item)) != PLAYER_B_SWORD_NONE) && + (gSaveContext.jinxTimer != 0)) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + Message_StartTextbox(play, 0xF7, NULL); + } + } else { + this->heldItemButton = i; + func_80831990(play, this, item); + } + } +} + +void func_808302CC(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + s32 pad[3]; + u8 nextModelAnimType; + s32 var_v1; + s8 itemAction = Player_ItemToItemAction(this, this->heldItemId); + s32 pad3; + f32 startFrame; + f32 endFrame; + f32 frameSpeed; + + func_8082F43C(play, this, func_80848808); + + nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; + var_v1 = D_8085CD00[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) && + ((this->heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (this->heldItemAction == PLAYER_IA_11)))) { + var_v1 = (itemAction == PLAYER_IA_NONE) ? -13 : 13; + } + + this->unk_14E = ABS_ALT(var_v1); + anim = D_8085CC88[this->unk_14E].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) { + frameSpeed = 1.2f; + startFrame = 0.0f; + } else { + frameSpeed = -1.2f; + startFrame = endFrame; + endFrame = 0.0f; + } + + if (itemAction != 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; +} + +void func_808304BC(Player* this, PlayState* play) { + if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) { + 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_0) && (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); + } + } + } + } + } + + if (this->stateFlags3 & PLAYER_STATE3_40000000) { + func_808302CC(this, play); + } +} + +// EN_ARROW ammo related? +s32 func_808305BC(PlayState* play, Player* this, ItemId* item, ArrowType* typeParam) { + if (this->heldItemAction == PLAYER_IA_NUT) { + *item = ITEM_NUT; + *typeParam = (this->transformation == PLAYER_FORM_DEKU) ? ARROW_TYPE_DEKU_BUBBLE : ARROW_TYPE_SLINGSHOT; + } else { + *item = ITEM_BOW; + *typeParam = (this->stateFlags1 & PLAYER_STATE1_800000) + ? ARROW_TYPE_NORMAL_HORSE + : (this->heldItemAction - PLAYER_IA_BOW + ARROW_TYPE_NORMAL); + } + + if (this->transformation == PLAYER_FORM_DEKU) { + return ((gSaveContext.save.saveInfo.playerData.magic >= 2) || + (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) && (play->sceneId == SCENE_BOWLING))) + ? 1 + : 0; + } + if (this->stateFlags3 & PLAYER_STATE3_400) { + return 1; + } + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + return play->interfaceCtx.minigameAmmo; + } + if (play->unk_1887C != 0) { + return play->unk_1887C; + } + + return AMMO(*item); +} + +u16 D_8085CFB0[] = { + NA_SE_PL_BOW_DRAW, + NA_SE_NONE, + NA_SE_IT_HOOKSHOT_READY, +}; + +u8 sMagicArrowCosts[] = { + 4, // ARROW_MAGIC_FIRE + 4, // ARROW_MAGIC_ICE + 8, // ARROW_MAGIC_LIGHT + 2, // ARROW_MAGIC_DEKU_BUBBLE +}; + +// Draw bow or hookshot / first person items? +s32 func_808306F8(Player* this, PlayState* play) { + if ((this->heldItemAction >= PLAYER_IA_BOW_FIRE) && (this->heldItemAction <= PLAYER_IA_BOW_LIGHT) && + (gSaveContext.magicState != MAGIC_STATE_IDLE)) { + play_sound(NA_SE_SY_ERROR); + } else { + func_8082F43C(play, this, func_80848BF4); + + this->stateFlags3 |= PLAYER_STATE3_40; + this->unk_ACC = 14; + + if (this->unk_B28 >= 0) { + s32 var_v1 = ABS_ALT(this->unk_B28); + ItemId item; + ArrowType arrowType; + ArrowMagic magicArrowType; + + if (var_v1 != 2) { + Player_PlaySfx(this, D_8085CFB0[var_v1 - 1]); + } + + if (!Player_IsHoldingHookshot(this) && (func_808305BC(play, this, &item, &arrowType) > 0)) { + if (this->unk_B28 >= 0) { + magicArrowType = ARROW_GET_MAGIC_FROM_TYPE(arrowType); + + if ((ARROW_GET_MAGIC_FROM_TYPE(arrowType) >= ARROW_MAGIC_FIRE) && + (ARROW_GET_MAGIC_FROM_TYPE(arrowType) <= ARROW_MAGIC_LIGHT)) { + if (((void)0, gSaveContext.save.saveInfo.playerData.magic) < sMagicArrowCosts[magicArrowType]) { + arrowType = ARROW_TYPE_NORMAL; + magicArrowType = ARROW_MAGIC_INVALID; + } + } else if ((arrowType == ARROW_TYPE_DEKU_BUBBLE) && + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) || (play->sceneId != SCENE_BOWLING))) { + magicArrowType = ARROW_MAGIC_DEKU_BUBBLE; + } else { + magicArrowType = ARROW_MAGIC_INVALID; + } + + this->heldActor = Actor_SpawnAsChild( + &play->actorCtx, &this->actor, play, ACTOR_EN_ARROW, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, arrowType); + + if ((this->heldActor != NULL) && (magicArrowType > ARROW_MAGIC_INVALID)) { + Magic_Consume(play, sMagicArrowCosts[magicArrowType], MAGIC_CONSUME_NOW); + } + } + } + } + + return true; + } + + return false; +} + +// Take out / put away sounds? +void func_808308DC(PlayState* play, Player* this) { + s32 isGoronOrDeku = (this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU); + + if ((this->heldItemAction != PLAYER_IA_NONE) && !isGoronOrDeku) { + if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) { + func_8082E1F0(this, NA_SE_IT_SWORD_PUTAWAY); + } else { + func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS); + } + } + + func_80831990(play, this, this->heldItemId); + + if (!isGoronOrDeku) { + if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) { + func_8082E1F0(this, NA_SE_IT_SWORD_PICKOUT); + } else if (this->heldItemAction != PLAYER_IA_NONE) { + func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS); + } + } +} + +void func_808309CC(PlayState* play, Player* this) { + if (func_80848808 == this->unk_AC4) { + func_808308DC(play, this); + } + + func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + this->unk_ACC = 0; + this->unk_AA4 = 0; + func_8082DCA0(play, this); + this->stateFlags3 &= ~PLAYER_STATE3_40000000; +} + +PlayerAnimationHeader* D_8085CFBC[2] = { + &gPlayerAnim_link_anchor_waitR2defense, + &gPlayerAnim_link_anchor_waitR2defense_long, +}; +PlayerAnimationHeader* D_8085CFC4[2] = { + &gPlayerAnim_link_anchor_waitL2defense, + &gPlayerAnim_link_anchor_waitL2defense_long, +}; +PlayerAnimationHeader* D_8085CFCC[2] = { + &gPlayerAnim_link_anchor_defense_hit, + &gPlayerAnim_link_anchor_defense_long_hitL, +}; +PlayerAnimationHeader* D_8085CFD4[2] = { + &gPlayerAnim_link_anchor_defense_hit, + &gPlayerAnim_link_anchor_defense_long_hitR, +}; +PlayerAnimationHeader* D_8085CFDC[2] = { + &gPlayerAnim_link_normal_defense_hit, + &gPlayerAnim_link_fighter_defense_long_hit, +}; + +PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) { + func_8082F43C(play, this, func_8084894C); + func_8082DCA0(play, this); + + if (this->unk_B40 < 0.5f) { + return D_8085CFBC[Player_IsHoldingTwoHandedWeapon(this)]; + } else { + return D_8085CFC4[Player_IsHoldingTwoHandedWeapon(this)]; + } +} + +void func_80830AE8(Player* this) { + s32 sfxId = (this->transformation == PLAYER_FORM_GORON) + ? NA_SE_PL_GORON_SQUAT + : ((this->transformation == PLAYER_FORM_DEKU) ? NA_SE_PL_CHANGE_ARMS : NA_SE_IT_SHIELD_SWING); + + Player_PlaySfx(this, sfxId); +} + +void func_80830B38(Player* this) { + s32 sfxId = (this->transformation == PLAYER_FORM_GORON) + ? NA_SE_PL_BALL_TO_GORON + : ((this->transformation == PLAYER_FORM_DEKU) ? NA_SE_PL_TAKE_OUT_SHIELD : NA_SE_IT_SHIELD_REMOVE); + + Player_PlaySfx(this, sfxId); +} + +s32 func_80830B88(PlayState* play, Player* this) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_400000 | PLAYER_STATE1_800000 | PLAYER_STATE1_20000000))) { + if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || ((this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if ((play->unk_1887C == 0) && (this->heldItemAction == this->itemAction)) { + if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) || + (!Player_IsGoronOrDeku(this) && + ((((this->transformation == PLAYER_FORM_ZORA)) && + !(this->stateFlags1 & PLAYER_STATE1_2000000)) || + ((this->transformation == PLAYER_FORM_HUMAN) && + (this->currentShield != PLAYER_SHIELD_NONE))) && + func_8082FBE8(this))) { + PlayerAnimationHeader* anim = func_80830A58(play, this); + f32 lastFrame = Animation_GetLastFrame(anim); + + PlayerAnimation_Change(play, &this->unk_284, anim, 3.0f / 3.0f, lastFrame, lastFrame, + ANIMMODE_ONCE, 0.0f); + func_80830AE8(this); + return true; + } + } + } + } + } + + return false; +} + +void func_80830CE8(PlayState* play, Player* this) { + func_8082F43C(play, this, func_80848AB0); + + if (this->itemAction <= PLAYER_IA_MINUS1) { + func_80123C58(this); + } + + Animation_Reverse(&this->unk_284); + func_80830B38(this); +} + +void func_80830D40(PlayState* play, Player* this) { + struct_8085CC88* entry = &D_8085CC88[this->unk_14E]; + f32 frame = entry->frame; + + if (this->unk_284.playSpeed < 0.0f) { + frame -= 1.0f; + } + if (PlayerAnimation_OnFrame(&this->unk_284, frame)) { + func_808308DC(play, this); + } + func_8082FB68(this); +} + +s32 func_80830DF0(Player* this, PlayState* play) { + if (this->stateFlags3 & PLAYER_STATE3_40000000) { + func_808302CC(this, play); + } else { + return false; + } + return true; +} + +s32 func_80830E30(Player* this, PlayState* play) { + if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) { + func_8082F43C(play, this, func_8084923C); + + PlayerAnimation_PlayOnce(play, &this->unk_284, + (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT) + ? &gPlayerAnim_pz_cutterwaitA + : ((this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) + ? &gPlayerAnim_pz_cutterwaitB + : &gPlayerAnim_pz_cutterwaitC)); + this->unk_ACC = 0xA; + } else { + if (!func_808306F8(this, play)) { + return false; + } + + PlayerAnimation_PlayOnce(play, &this->unk_284, + (Player_IsHoldingHookshot(this)) + ? &gPlayerAnim_link_hook_shot_ready + : ((this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf + : &gPlayerAnim_link_bow_bow_ready)); + } + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_uma_anim_walk); + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->transformation != PLAYER_FORM_ZORA)) { + Player_AnimationPlayLoop(play, this, func_8082ED20(this)); + } + + return true; +} + +s32 func_80830F9C(PlayState* play) { + return (play->unk_1887C > 0) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B); +} + +s32 func_80830FD4(PlayState* play) { + return (play->unk_1887C != 0) && + (play->unk_1887C < 0 || CHECK_BTN_ANY(sPlayerControlInput->cur.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)); +} + +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) || + (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_BOWARROW) == 0)) { + return true; + } + this->unk_AA5 = PLAYER_UNKAA5_3; + } + return false; +} + +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 (func_80830E30(this, play)) { + return func_80831010(this, play); + } + } + } + return false; +} + +s32 func_80831124(PlayState* play, Player* this) { + if (this->actor.child != NULL) { + if (this->heldActor == NULL) { + this->heldActor = this->actor.child; + Player_RequestRumble(play, this, 255, 10, 250, SQ(0)); + Player_PlaySfx(this, NA_SE_IT_HOOKSHOT_RECEIVE); + } + return true; + } + return false; +} + +s32 func_80831194(PlayState* play, Player* this) { + if (this->heldActor != NULL) { + if (!Player_IsHoldingHookshot(this)) { + ItemId item; + ArrowType arrowType; + + func_808305BC(play, this, &item, &arrowType); + if ((this->transformation != PLAYER_FORM_DEKU) && !(this->stateFlags3 & PLAYER_STATE3_400)) { + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + if ((play->sceneId != SCENE_SYATEKI_MIZU) && (play->sceneId != SCENE_F01) && + (play->sceneId != SCENE_SYATEKI_MORI)) { + play->interfaceCtx.minigameAmmo--; + } + } else if (play->unk_1887C != 0) { + play->unk_1887C--; + } else { + Inventory_ChangeAmmo(item, -1); + } + } + + if (play->unk_1887C == 1) { + play->unk_1887C = -10; + } + + Player_RequestRumble(play, this, 150, 10, 150, SQ(0)); + } else { + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + this->unk_B48 = 0.0f; + } + + this->unk_D57 = (this->transformation == PLAYER_FORM_DEKU) ? 20 : 4; + + this->heldActor->parent = NULL; + this->actor.child = NULL; + this->heldActor = NULL; + return true; + } + + return false; +} + +void func_8083133C(Player* this) { + this->stateFlags1 |= PLAYER_STATE1_20000; + + if (!(this->skelAnime.moveFlags & ANIM_FLAG_80) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + (D_80862B20 < 0x2000)) { + this->currentYaw = this->actor.shape.rot.y = this->actor.wallYaw + 0x8000; + } + + this->targetYaw = this->actor.shape.rot.y; +} + +s32 func_808313A8(PlayState* play, Player* this, Actor* actor) { + if (actor == NULL) { + func_8082DE50(play, this); + func_80836988(this, play); + return true; + } + + return false; +} + +void func_808313F0(Player* this, PlayState* play) { + if (!func_808313A8(play, this, this->heldActor)) { + func_8082F43C(play, this, func_808490B4); + PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + } +} + +// Stops the current fanfare if a stateflag is set; these two are Kamaro Dancing and Bremen Marching. +void func_80831454(Player* this) { + if ((this->stateFlags3 & PLAYER_STATE3_20000000) || (this->stateFlags2 & PLAYER_STATE2_2000000)) { + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); + } +} + +s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { + s32 i; + f32* ptr; + + if (actionFunc == this->actionFunc) { + return false; + } + + play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON; + + if (this->actor.flags & ACTOR_FLAG_20000000) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + this->actor.flags &= ~ACTOR_FLAG_20000000; + } else if ((func_80857BE8 == this->actionFunc) || (func_808561B0 == this->actionFunc)) { + this->actor.shape.shadowDraw = ActorShadow_DrawFeet; + this->actor.shape.shadowScale = this->ageProperties->shadowScale; + this->unk_ABC = 0.0f; + if (func_80857BE8 == this->actionFunc) { + if (this->stateFlags3 & PLAYER_STATE3_80000) { + Magic_Reset(play); + } + func_8082DD2C(play, this); + this->actor.shape.rot.x = 0; + this->actor.shape.rot.z = 0; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_800; + } else { + Actor_SetScale(&this->actor, 0.01f); + } + } else if ((this->transformation == PLAYER_FORM_GORON) && + (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { + func_80831990(play, this, ITEM_NONE); + } + + func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); + this->actionFunc = actionFunc; + + if ((this->itemAction != this->heldItemAction) && (!(arg3 & 1) || !(this->stateFlags1 & PLAYER_STATE1_400000))) { + func_80123C58(this); + } + + if (!(arg3 & 1) && !(this->stateFlags1 & PLAYER_STATE1_800)) { + func_808309CC(play, this); + PlayerAnimation_PlayLoop(play, &this->unk_284, func_8082ED20(this)); + this->stateFlags1 &= ~PLAYER_STATE1_400000; + } + + func_80831454(this); + func_8082E794(this); + + this->stateFlags1 &= ~(PLAYER_STATE1_40 | PLAYER_STATE1_4000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000 | + PLAYER_STATE1_80000000); + this->stateFlags2 &= ~(PLAYER_STATE2_80000 | PLAYER_STATE2_800000 | PLAYER_STATE2_2000000 | PLAYER_STATE2_8000000 | + PLAYER_STATE2_10000000); + this->stateFlags3 &= + ~(PLAYER_STATE3_2 | PLAYER_STATE3_8 | PLAYER_STATE3_80 | PLAYER_STATE3_200 | PLAYER_STATE3_2000 | + 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->unk_AA4 = 0; + this->unk_B86[0] = 0; + this->unk_B86[1] = 0; + this->unk_B8A = 0; + this->unk_B8C = 0; + this->unk_B8E = 0; + + // TODO: Is there no other way to write this that works? + i = 0; + ptr = this->unk_B10; + do { + *ptr = 0.0f; + ptr++; + i++; + } while (i < ARRAY_COUNT(this->unk_B10)); + + this->actor.shape.rot.z = 0; + + Player_ResetCylinder(this); + func_8082E00C(this); + + return true; +} + +void func_8083172C(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { + s32 moveFlags = this->skelAnime.moveFlags; + + this->skelAnime.moveFlags = 0; + Player_SetAction(play, this, actionFunc, arg3); + this->skelAnime.moveFlags = moveFlags; +} + +void func_80831760(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { + if (this->itemAction > PLAYER_IA_MINUS1) { + PlayerItemAction heldItemAction = this->itemAction; + + this->itemAction = this->heldItemAction; + Player_SetAction(play, this, actionFunc, arg3); + this->itemAction = heldItemAction; + + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); + } +} + +void func_808317C4(Player* this) { + if (Player_IsHoldingHookshot(this)) { + if (this->heldActor != NULL) { + Actor_Kill(this->heldActor); + this->actor.child = NULL; + this->heldActor = NULL; + } + } +} + +s32 func_80831814(Player* this, PlayState* play, PlayerUnkAA5 arg2) { + if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_800 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000))) { + if (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_FIRSTPERSON) != 0) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (func_801242B4(this) && (this->actor.depthInWater < this->ageProperties->unk_2C))) { + this->unk_AA5 = arg2; + return true; + } + } + } + return false; +} + +// Toggle Lens +void func_808318C0(PlayState* play) { + if (Magic_Consume(play, 0, MAGIC_CONSUME_LENS)) { + if (play->actorCtx.lensActive) { + Actor_DeactivateLens(play); + } else { + play->actorCtx.lensActive = true; + } + + play_sound(play->actorCtx.lensActive ? NA_SE_SY_GLASSMODE_ON : NA_SE_SY_GLASSMODE_OFF); + } else { + play_sound(NA_SE_SY_ERROR); + } +} + +// Toggle Lens from a button press +void func_80831944(PlayState* play, Player* this) { + if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS) { + func_808318C0(play); + } +} + +// Proposed name: Player_UseItem +void func_80831990(PlayState* play, Player* this, ItemId item) { + PlayerItemAction itemAction = Player_ItemToItemAction(this, item); + + if ((((this->heldItemAction == this->itemAction) && + (!(this->stateFlags1 & PLAYER_STATE1_400000) || + (Player_MeleeWeaponFromIA(itemAction) != PLAYER_MELEEWEAPON_NONE) || (itemAction == PLAYER_IA_NONE))) || + ((this->itemAction <= PLAYER_IA_MINUS1) && + ((Player_MeleeWeaponFromIA(itemAction) != PLAYER_MELEEWEAPON_NONE) || (itemAction == PLAYER_IA_NONE)))) && + ((itemAction == PLAYER_IA_NONE) || !(this->stateFlags1 & PLAYER_STATE1_8000000) || + (itemAction == PLAYER_IA_MASK_ZORA) || + ((this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)))) { + s32 var_v1 = ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) && + ((this->transformation != PLAYER_FORM_HUMAN) || (itemAction >= PLAYER_IA_MASK_GIANT))); + CollisionPoly* sp5C; + s32 sp58; + f32 sp54; + PlayerExplosive explosiveType; + + if (var_v1 || + (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) && (itemAction != PLAYER_IA_NONE)) || + (itemAction == PLAYER_IA_OCARINA) || + ((itemAction > PLAYER_IA_BOTTLE_MIN) && itemAction < PLAYER_IA_MASK_MIN) || + ((itemAction == PLAYER_IA_PICTO_BOX) && (this->talkActor != NULL) && + (this->exchangeItemId > PLAYER_IA_NONE))) { + if (var_v1) { + PlayerTransformation playerForm = (itemAction < PLAYER_IA_MASK_FIERCE_DEITY) + ? PLAYER_FORM_HUMAN + : itemAction - PLAYER_IA_MASK_FIERCE_DEITY; + + if (((this->currentMask != PLAYER_MASK_GIANT) && (itemAction == PLAYER_IA_MASK_GIANT) && + ((gSaveContext.magicState != MAGIC_STATE_IDLE) || + (gSaveContext.save.saveInfo.playerData.magic == 0))) || + (!(this->stateFlags1 & PLAYER_STATE1_8000000) && + BgCheck_EntityCheckCeiling(&play->colCtx, &sp54, &this->actor.world.pos, + sPlayerAgeProperties[playerForm].unk_00, &sp5C, &sp58, &this->actor))) { + play_sound(NA_SE_SY_ERROR); + return; + } + } + if ((itemAction == PLAYER_IA_MAGIC_BEANS) && (AMMO(ITEM_MAGIC_BEANS) == 0)) { + play_sound(NA_SE_SY_ERROR); + } else { + this->itemAction = itemAction; + this->unk_AA5 = PLAYER_UNKAA5_5; + } + } else if (((itemAction == PLAYER_IA_STICK) && (AMMO(ITEM_STICK) == 0)) || + (((play->unk_1887D != 0) || (play->unk_1887E != 0)) && + (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 5)) || + ((play->unk_1887D == 0) && (play->unk_1887E == 0) && + ((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) && + ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) || + (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) { + play_sound(NA_SE_SY_ERROR); + } else if (itemAction == PLAYER_IA_LENS) { + func_808318C0(play); + } else if (itemAction == PLAYER_IA_PICTO_BOX) { + if (!func_80831814(this, play, PLAYER_UNKAA5_2)) { + play_sound(NA_SE_SY_ERROR); + } + } else if ((itemAction == PLAYER_IA_NUT) && + ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) { + if (AMMO(ITEM_NUT) != 0) { + func_8083A658(play, this); + } else { + play_sound(NA_SE_SY_ERROR); + } + } else if ((this->transformation == PLAYER_FORM_HUMAN) && (itemAction >= PLAYER_IA_MASK_MIN) && + (itemAction < PLAYER_IA_MASK_GIANT)) { + PlayerMask maskId = GET_MASK_FROM_IA(itemAction); + + this->prevMask = this->currentMask; + if (maskId == this->currentMask) { + this->currentMask = PLAYER_MASK_NONE; + func_8082E1F0(this, NA_SE_PL_TAKE_OUT_SHIELD); + } else { + this->currentMask = maskId; + func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS); + } + gSaveContext.save.equippedMask = this->currentMask; + } else if ((itemAction != this->heldItemAction) || + ((this->heldActor == NULL) && (Player_ExplosiveFromIA(this, itemAction) > PLAYER_EXPLOSIVE_NONE))) { + u8 nextAnimType; + + 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)) { + this->heldItemId = item; + this->stateFlags3 |= PLAYER_STATE3_40000000; + } else { + func_808317C4(this); + func_8082DCA0(play, this); + func_8082F470(play, this, itemAction); + if (!var_v1) { + D_80862B48 = 1; + D_80862B4C = 1; + } + } + } else { + D_80862B48 = 1; + D_80862B4C = 1; + } + } +} + +void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + s32 sp24 = func_801242B4(this); + + func_8082DE50(play, this); + Player_SetAction(play, this, sp24 ? func_80851BD4 : func_8084BFDC, 0); + Player_AnimationPlayOnce(play, this, anim); + + if (anim == &gPlayerAnim_link_derth_rebirth) { + this->skelAnime.endFrame = 84.0f; + } + + this->stateFlags1 |= PLAYER_STATE1_80; + + func_8082DAD4(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DOWN); + + if (this == GET_PLAYER(play)) { + this->csId = play->playerCsIds[PLAYER_CS_ID_DEATH]; + Audio_SetBgmVolumeOff(); + gSaveContext.powderKegTimer = 0; + gSaveContext.unk_1014 = 0; + gSaveContext.jinxTimer = 0; + + if (Inventory_ConsumeFairy(play)) { + play->gameOverCtx.state = GAMEOVER_REVIVE_START; + this->unk_AE7 = 1; + } else { + play->gameOverCtx.state = GAMEOVER_DEATH_START; + func_801A41F8(0); + Audio_PlayFanfare(NA_BGM_GAME_OVER); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } + + ShrinkWindow_Letterbox_SetSizeTarget(32); + } +} + +s32 func_80832090(Player* this) { + return (!(func_8084D770 == this->actionFunc) || + (((this->stateFlags3 & PLAYER_STATE3_40000000)) && + ((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) && + (!(func_80848808 == this->unk_AC4) || + Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction); +} + +// Whether action is Bremen marching or Kamaro dancing +s32 func_8083213C(Player* this) { + return (func_8084AC84 == this->actionFunc) || (func_8084AEEC == this->actionFunc); +} + +s32 func_8083216C(Player* this, PlayState* play) { + if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) { + Player_SetAction(play, this, func_80855E08, 1); + this->stateFlags3 |= PLAYER_STATE3_80; + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_hook_fly_start); + func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80)); + func_8082DAD4(this); + this->currentYaw = this->actor.shape.rot.y; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + this->unk_AA6 |= 0x43; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); + return true; + } + + if (func_80832090(this)) { + func_808304BC(this, play); + if (func_80852B28 == this->actionFunc) { + return true; + } + } + + if (!this->unk_AC4(this, play)) { + return false; + } + + if (this->unk_AC8 != 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); + } + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) { + Math_StepToF(&this->unk_AC8, 0.0f, 0.25f); + AnimationContext_SetInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable, 1.0f - this->unk_AC8); + } + } 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); + } else { + AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable); + } + + return true; +} + +s32 func_808323C0(Player* this, s16 csId) { + if ((csId > CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != csId)) { + if (!CutsceneManager_IsNext(csId)) { + CutsceneManager_Queue(csId); + + return false; + } + CutsceneManager_Start(csId, &this->actor); + } + this->csId = csId; + + return true; +} + +s32 func_80832444(Player* this) { + if (this->csId > CS_ID_NONE) { + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); + return false; + } + + CutsceneManager_Start(this->csId, &this->actor); + } + return true; +} + +s32 func_8083249C(Player* this) { + if ((this->csId > CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->csId)) { + return func_80832444(this); + } + return true; +} + +s32 func_808324EC(PlayState* play, Player* this, PlayerFuncD58 arg2, s32 csId) { + this->unk_D58 = arg2; + this->csId = csId; + Player_SetAction(play, this, func_8084D770, 0); + func_8083249C(this); + this->stateFlags2 |= PLAYER_STATE2_40; + return func_8082DE14(play, this); +} + +s32 func_80832558(PlayState* play, Player* this, PlayerFuncD58 arg2) { + return func_808324EC(play, this, arg2, CS_ID_NONE); +} + +// To do with turning, related to targeting +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; + + if ((targetedActor != NULL) && ((play->actorCtx.targetContext.unk4B != 0) || (this != GET_PLAYER(play))) && + (targetedActor->id != ACTOR_OBJ_NOZOKI)) { + Math_ScaledStepToS(&this->actor.shape.rot.y, + Math_Vec3f_Yaw(&this->actor.world.pos, &targetedActor->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); + } + } else if (!(this->stateFlags2 & PLAYER_STATE2_40)) { + Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x7D0); + } + + this->unk_B4C = this->actor.shape.rot.y - previousYaw; +} + +s16 func_80832660(s16* pValue, s16 target, s16 step, s16 arg3, s16 arg4, s16 arg5) { + s16 temp1; + s16 temp2; + s16 temp3; + + temp1 = temp2 = arg4 - *pValue; + temp2 = CLAMP(temp2, -arg5, arg5); + *pValue += BINANG_SUB(temp1, temp2); + + Math_ScaledStepToS(pValue, target, step); + + temp3 = *pValue; + if (*pValue < -arg3) { + *pValue = -arg3; + } else if (arg3 < *pValue) { + *pValue = arg3; + } + return temp3 - *pValue; +} + +s16 func_80832754(Player* this, s32 arg1) { + s16 sp36; + s16 var_s1 = this->actor.shape.rot.y; + + if (arg1) { + this->upperLimbRot.x = this->actor.focus.rot.x; + var_s1 = this->actor.focus.rot.y; + this->unk_AA6 |= 0x41; + } else { + s16 temp = + func_80832660(&this->headLimbRot.x, this->actor.focus.rot.x, 0x258, 0x2710, this->actor.focus.rot.x, 0); + + func_80832660(&this->upperLimbRot.x, temp, 0xC8, 0xFA0, this->headLimbRot.x, 0x2710); + + sp36 = this->actor.focus.rot.y - var_s1; + func_80832660(&sp36, 0, 0xC8, 0x5DC0, this->upperLimbRot.y, 0x1F40); + var_s1 = this->actor.focus.rot.y - sp36; + func_80832660(&this->headLimbRot.y, (sp36 - this->upperLimbRot.y), 0xC8, 0x1F40, sp36, 0x1F40); + func_80832660(&this->upperLimbRot.y, sp36, 0xC8, 0x1F40, this->headLimbRot.y, 0x1F40); + this->unk_AA6 |= 0xD9; + } + + return var_s1; +} + +void func_80832888(Player* this, PlayState* play) { + s32 var_v1 = 0; + Actor* var_v1_2; + s32 heldZ = CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_Z); + s32 temp_v0_3; + s32 var_a1; + + if (!heldZ) { + this->stateFlags1 &= ~PLAYER_STATE1_40000000; + } + + if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0) || + (this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (this->stateFlags3 & PLAYER_STATE3_80)) { + this->unk_738 = 0; + } else if (heldZ || (this->stateFlags2 & PLAYER_STATE2_2000) || (this->unk_A78 != NULL)) { + if (this->unk_738 <= 5) { + this->unk_738 = 5; + } else { + this->unk_738--; + } + } else if (this->stateFlags1 & PLAYER_STATE1_20000) { + this->unk_738 = 0; + } else if (this->unk_738 != 0) { + this->unk_738--; + } + + if (this->unk_738 > 5) { + var_v1 = 1; + } + + temp_v0_3 = func_8082DAFC(play); + if (temp_v0_3 || (this->unk_738 != 0) || (this->stateFlags1 & (PLAYER_STATE1_1000 | PLAYER_STATE1_2000000))) { + if (!temp_v0_3) { + 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_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 != NULL) && + (((var_v1_2 != this->targetedActor)) || (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->unk_738 = 0xF; + this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); + } else if (!var_a1) { + func_80123DA4(this); + } + this->stateFlags1 &= ~PLAYER_STATE1_40000000; + } else if (!(this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) && + (func_808573A4 != this->actionFunc)) { + func_8083133C(this); + } + } + + if (this->targetedActor != NULL) { + if ((this == GET_PLAYER(play)) && (this->targetedActor != this->unk_A78) && + func_800B83F8(this->targetedActor, this, var_v1)) { + func_80123DA4(this); + this->stateFlags1 |= PLAYER_STATE1_40000000; + } else if (this->targetedActor != NULL) { + this->targetedActor->targetPriority = 0x28; + } + } else if (this->unk_A78 != NULL) { + this->targetedActor = this->unk_A78; + } + } + + if ((this->targetedActor != 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)) { + this->stateFlags1 |= PLAYER_STATE1_10000; + } + } else if (this->stateFlags1 & PLAYER_STATE1_20000) { + this->stateFlags2 &= ~PLAYER_STATE2_2000; + } else { + func_80123DC0(this); + } + } else { + func_80123DC0(this); + } +} + +s32 func_80832CAC(PlayState* play, Player* this, f32* arg2, s16* outYaw, f32 arg4) { + f32 temp_fv1_2; + + if ((this->unk_AA5 != PLAYER_UNKAA5_0) || func_8082DA90(play) || (this->stateFlags1 & PLAYER_STATE1_1)) { + *arg2 = 0.0f; + *outYaw = this->actor.shape.rot.y; + } else { + *arg2 = D_80862AFC; + *outYaw = D_80862B00; + if (arg4 != 0.0f) { + *arg2 -= 20.0f; + if (*arg2 < 0.0f) { + *arg2 = 0.0f; + } else { + temp_fv1_2 = 1.0f - Math_CosS(*arg2 * 450.0f); + *arg2 = (SQ(temp_fv1_2) * 30.0f) + 7.0f; + } + } else { + *arg2 *= 0.8f; + } + + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + *arg2 *= 1.5f; + } + + if (D_80862AFC != 0.0f) { + f32 temp_fv0 = Math_SinS(this->unk_B6C); + f32 var_fa0 = this->unk_B50; + f32 var_fa1; + + if (this->unk_AB8 != 0.0f) { + var_fa1 = (this->targetedActor != NULL) ? 0.002f : 0.008f; + + var_fa0 -= this->unk_AB8 * var_fa1; + var_fa0 = CLAMP_MIN(var_fa0, 2.0f); + } + *arg2 = (*arg2 * 0.14f) - (8.0f * temp_fv0 * temp_fv0); + *arg2 = CLAMP(*arg2, 0.0f, var_fa0); + if (temp_fv0) {} //! FAKE + return true; + } + } + + return false; +} + +s32 func_80832F24(Player* this) { + return Math_StepToF(&this->linearVelocity, 0.0f, REG(43) / 100.0f); +} + +s32 func_80832F78(Player* this, f32* arg1, s16* outYaw, f32 arg3, PlayState* play) { + 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); + } + } else if (func_80123434(this)) { + *outYaw = this->targetYaw; + } + + return false; + } + + *outYaw += Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + return true; +} + +/** + * The values of following arrays are used as indices for the `D_8085D054` 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, +}; + +s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { + if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { + if (arg3) { + D_80862B04 = func_8083216C(this, play); + if (func_80852B28 == this->actionFunc) { + return true; + } + } + + if (func_801240DC(this)) { + this->unk_AA6 |= 0x41; + return true; + } + + if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (func_80848808 != this->unk_AC4)) { + while (*arg2 >= 0) { + if (D_8085D054[*arg2](this, play)) { + return true; + } + arg2++; + } + + if (D_8085D054[-*arg2](this, play)) { + return true; + } + } + + if (func_8083213C(this)) { + return true; + } + } else if (this->stateFlags1 & PLAYER_STATE1_800) { + func_8083216C(this, play); + } + + return false; +} + +s32 func_808331FC(PlayState* play, Player* this, SkelAnime* skelAnime, f32 frame) { + if ((skelAnime->endFrame - frame) <= skelAnime->curFrame) { + f32 sp24; + s16 sp22; + + if (func_80833058(play, this, D_8085D01C, 1)) { + return 0; + } + + if (D_80862B04 || func_80832F78(this, &sp24, &sp22, 0.018f, play)) { + return 1; + } + } + return -1; +} + +void func_808332A0(PlayState* play, Player* this, s32 magicCost, s32 isSwordBeam) { + if (magicCost != 0) { + this->unk_B08 = 0.0f; + } else { + this->unk_B08 = 0.5f; + } + + this->stateFlags1 |= PLAYER_STATE1_1000; + if ((this->actor.id == ACTOR_PLAYER) && (isSwordBeam || (this->transformation == PLAYER_FORM_HUMAN))) { + s16 pitch = 0; + Actor* thunder; + + if (isSwordBeam) { + if (this->targetedActor != NULL) { + pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->targetedActor->focus.pos); + } + if (gSaveContext.save.saveInfo.playerData.magic == 0) { + return; + } + } + + thunder = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_M_THUNDER, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x, + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y, this->bodyPartsPos[PLAYER_BODYPART_WAIST].z, + pitch, 0, 0, (this->heldItemAction - PLAYER_IA_SWORD_KOKIRI) | magicCost); + + if ((thunder != NULL) && isSwordBeam) { + Magic_Consume(play, 1, MAGIC_CONSUME_DEITY_BEAM); + this->unk_D57 = 4; + } + } +} + +// Check for inputs for quickspin +s32 func_808333CC(Player* this) { + s8 sp3C[4]; + s8* iter; + s8* iter2; + s8 temp1; + s8 temp2; + s32 i; + + if (this->heldItemAction == PLAYER_IA_STICK) { + return false; + } + + iter = &this->unk_ADF[0]; + iter2 = &sp3C[0]; + for (i = 0; i < 4; i++, iter++, iter2++) { + if ((*iter2 = *iter) < 0) { + return false; + } + *iter2 *= 2; + } + + temp1 = sp3C[0] - sp3C[1]; + if (ABS_ALT(temp1) < 10) { + return false; + } + + iter2 = &sp3C[1]; + for (i = 1; i < 3; i++, iter2++) { + temp2 = *iter2 - *(iter2 + 1); + if ((ABS_ALT(temp2) < 10) || (temp2 * temp1 < 0)) { + return false; + } + } + + return true; +} + +void func_808334D4(PlayState* play, Player* this) { + PlayerAnimationHeader* anim; + + if ((this->meleeWeaponAnimation >= PLAYER_MWA_RIGHT_SLASH_1H) && + (this->meleeWeaponAnimation <= PLAYER_MWA_RIGHT_COMBO_2H)) { + anim = D_8085CF58[Player_IsHoldingTwoHandedWeapon(this)]; + } else { + anim = D_8085CF50[Player_IsHoldingTwoHandedWeapon(this)]; + } + + func_8082DC38(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 8.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -9.0f); + func_808332A0(play, this, 2 << 8, false); +} + +void func_808335B0(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8084CCEC, 1); + func_808334D4(play, this); +} + +s8 D_8085D090[] = { + PLAYER_MWA_STAB_1H, + PLAYER_MWA_RIGHT_SLASH_1H, + PLAYER_MWA_RIGHT_SLASH_1H, + PLAYER_MWA_LEFT_SLASH_1H, +}; + +s8 D_8085D094[][3] = { + { PLAYER_MWA_ZORA_PUNCH_LEFT, PLAYER_MWA_ZORA_PUNCH_COMBO, PLAYER_MWA_ZORA_PUNCH_KICK }, + { PLAYER_MWA_GORON_PUNCH_LEFT, PLAYER_MWA_GORON_PUNCH_RIGHT, PLAYER_MWA_GORON_PUNCH_BUTT }, +}; + +PlayerMeleeWeaponAnimation func_808335F4(Player* this) { + s32 temp_a1; + PlayerMeleeWeaponAnimation meleeWeaponAnim; + + temp_a1 = this->unk_AE3[this->unk_ADE]; + if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_GORON)) { + s32 requiredScopeTemp; + + // yikes + meleeWeaponAnim = ((this->transformation == PLAYER_FORM_ZORA) ? D_8085D094[0] : D_8085D094[1])[this->unk_ADD]; + + if (this->unk_ADD != 0) { + this->meleeWeaponAnimation = meleeWeaponAnim; + if (this->unk_ADD >= 2) { + this->unk_ADD = -1; + } + } + } else { + if (func_808333CC(this)) { + meleeWeaponAnim = PLAYER_MWA_SPIN_ATTACK_1H; + } else { + if (temp_a1 < 0) { + meleeWeaponAnim = func_8082FBE8(this) ? PLAYER_MWA_FORWARD_SLASH_1H : PLAYER_MWA_RIGHT_SLASH_1H; + } else { + meleeWeaponAnim = D_8085D090[temp_a1]; + if (meleeWeaponAnim == PLAYER_MWA_STAB_1H) { + this->stateFlags2 |= PLAYER_STATE2_40000000; + if (!func_8082FBE8(this)) { + meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H; + } + } + } + + if (this->heldItemAction == PLAYER_IA_STICK) { + meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H; + } + } + + if (Player_IsHoldingTwoHandedWeapon(this)) { + meleeWeaponAnim++; + } + } + return meleeWeaponAnim; +} + +void func_80833728(Player* this, s32 index, u32 dmgFlags, s32 damage) { + this->meleeWeaponQuads[index].info.toucher.dmgFlags = dmgFlags; + this->meleeWeaponQuads[index].info.toucher.damage = damage; + + if (dmgFlags == DMG_DEKU_STICK) { + this->meleeWeaponQuads[index].info.toucherFlags = (TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_WOOD); + } else { + this->meleeWeaponQuads[index].info.toucherFlags = (TOUCH_ON | TOUCH_NEAREST); + } +} + +MeleeWeaponDamageInfo D_8085D09C[PLAYER_MELEEWEAPON_MAX] = { + { DMG_GORON_PUNCH, 2, 2, 0, 0 }, // PLAYER_MELEEWEAPON_NONE + { DMG_SWORD, 4, 8, 1, 2 }, // PLAYER_MELEEWEAPON_SWORD_KOKIRI + { DMG_SWORD, 4, 8, 2, 4 }, // PLAYER_MELEEWEAPON_SWORD_RAZOR + { DMG_SWORD, 4, 8, 3, 6 }, // PLAYER_MELEEWEAPON_SWORD_GILDED + { DMG_SWORD, 4, 8, 4, 8 }, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED + { DMG_DEKU_STICK, 0, 0, 2, 4 }, // PLAYER_MELEEWEAPON_STICK + { DMG_ZORA_PUNCH, 1, 2, 0, 0 }, // PLAYER_MELEEWEAPON_ZORA_FINS +}; + +// New function in NE0: split out of func_80833864 to be able to call it to patch Power Crouch Stab. +void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { + MeleeWeaponDamageInfo* dmgInfo = &D_8085D09C[0]; + s32 damage; + + if (this->actor.id == ACTOR_EN_TEST3) { + // Was Kafei originally intended to be able to punch? + meleeWeaponAnim = PLAYER_MWA_GORON_PUNCH_LEFT; + this->meleeWeaponAnimation = -1; + } else { + //! @bug Quick Put Away Damage: Since 0 is also the "no weapon" value, producing a weapon quad without a weapon + //! in hand, such as during Quick Put Away, produced a quad with the Goron punch properties, which does 0 damage + //! as human. + dmgInfo = &D_8085D09C[(this->transformation == PLAYER_FORM_GORON) ? PLAYER_MELEEWEAPON_NONE + : Player_GetMeleeWeaponHeld(this)]; + } + + //! @bug Great Deku Sword: Presumably the dmgTransformed fields are intended for Fierce Deity, but also work for + //! Deku if it is able to equip a sword (such as with the "0th day" glitch), giving Great Fairy's Sword damage. + damage = + ((meleeWeaponAnim >= PLAYER_MWA_FLIPSLASH_START) && (meleeWeaponAnim <= PLAYER_MWA_ZORA_JUMPKICK_FINISH)) + ? ((this->transformation == PLAYER_FORM_HUMAN) ? dmgInfo->dmgHumanStrong : dmgInfo->dmgTransformedStrong) + : ((this->transformation == PLAYER_FORM_HUMAN) ? dmgInfo->dmgHumanNormal : dmgInfo->dmgTransformedNormal); + + func_80833728(this, 0, dmgInfo->dmgFlags, damage); + func_80833728(this, 1, dmgInfo->dmgFlags, damage); +} + +void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { + func_8083375C(this, meleeWeaponAnim); + Player_SetAction(play, this, func_808548B8, 0); + this->unk_AE8 = 0; + + if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { + func_8082DC38(this); + } + + // Accumulate consecutive slashes to do the "third slash" types + if ((meleeWeaponAnim != this->meleeWeaponAnimation) || (this->unk_ADD >= 3)) { + this->unk_ADD = 0; + } + + this->unk_ADD++; + if (this->unk_ADD >= 3) { + meleeWeaponAnim += 2; + } + + this->meleeWeaponAnimation = meleeWeaponAnim; + func_8082DB90(play, this, sMeleeAttackAnimInfo[meleeWeaponAnim].unk_0); + this->unk_ADC = this->skelAnime.animLength + 4.0f; + + if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_START) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_START)) { + func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE)); + } + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80833998(Player* this, s32 invincibilityTimer) { + if (this->invincibilityTimer >= 0) { + this->invincibilityTimer = invincibilityTimer; + this->unk_B5F = 0; + } +} + +void func_808339B4(Player* this, s32 invincibilityTimer) { + if (this->invincibilityTimer > invincibilityTimer) { + this->invincibilityTimer = invincibilityTimer; + } + this->unk_B5F = 0; +} + +// Player_InflictDamageImpl? +s32 func_808339D4(PlayState* play, Player* this, s32 damage) { + if ((this->invincibilityTimer != 0) || (this->stateFlags3 & PLAYER_STATE3_400000) || + (this->actor.id != ACTOR_PLAYER)) { + return 1; + } + + if (this->actor.category != ACTORCAT_PLAYER) { + this->actor.colChkInfo.damage = -damage; + return Actor_ApplyDamage(&this->actor); + } + + if (this->currentMask == PLAYER_MASK_GIANT) { + damage >>= 2; + } + + return Health_ChangeBy(play, damage); +} + +void func_80833A64(Player* this) { + this->skelAnime.prevTransl = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1]; + func_8082E820(this, 1 | ANIM_FLAG_UPDATE_Y); +} + +void func_80833AA0(Player* this, PlayState* play) { + if (Player_SetAction(play, this, func_8084C16C, 0)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); + this->unk_AE8 = 1; + } + if (this->unk_AA5 != PLAYER_UNKAA5_4) { + this->unk_AA5 = PLAYER_UNKAA5_0; + } +} + +// TODO: this can be one array, but should it be? +PlayerAnimationHeader* D_8085D0D4[] = { + &gPlayerAnim_link_normal_front_shit, + &gPlayerAnim_link_normal_front_shitR, + &gPlayerAnim_link_normal_back_shit, + &gPlayerAnim_link_normal_back_shitR, + // }; + // PlayerAnimationHeader* D_8085D0E4[] = { + &gPlayerAnim_link_normal_front_hit, + &gPlayerAnim_link_anchor_front_hitR, + &gPlayerAnim_link_normal_back_hit, + &gPlayerAnim_link_anchor_back_hitR, +}; + +void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 velocityY, s16 arg5, + s32 invincibilityTimer) { + PlayerAnimationHeader* anim = NULL; + + if (this->stateFlags1 & PLAYER_STATE1_2000) { + func_80833A64(this); + } + + this->unk_B64 = 0; + + Player_PlaySfx(this, NA_SE_PL_DAMAGE); + + if (func_808339D4(play, this, -this->actor.colChkInfo.damage) == 0) { + this->stateFlags2 &= ~PLAYER_STATE2_80; + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->stateFlags1 & PLAYER_STATE1_8000000)) { + return; + } + } + + if (this->actor.colChkInfo.damage != 0) { + func_80833998(this, invincibilityTimer); + } + + if (this->stateFlags2 & PLAYER_STATE2_10) { + return; + } + + if (arg2 == 3) { + Player_SetAction(play, this, func_808546D0, 0); + anim = &gPlayerAnim_link_normal_ice_down; + func_8082DAD4(this); + this->actor.velocity.y = 0.0f; + + Player_RequestRumble(play, this, 255, 10, 40, SQ(0)); + + Player_PlaySfx(this, NA_SE_PL_FREEZE_S); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE); + } else if (arg2 == 4) { + Player_SetAction(play, this, func_80854800, 0); + func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock); + func_8082DAD4(this); + + this->unk_AE8 = 20; + this->actor.velocity.y = 0.0f; + + Player_RequestRumble(play, this, 255, 80, 150, SQ(0)); + } else { + arg5 -= this->actor.shape.rot.y; + + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + Player_SetAction(play, this, func_80851B58, 0); + Player_RequestRumble(play, this, 180, 20, 50, SQ(0)); + + if (arg2 == 1) { + this->linearVelocity = speed * 1.5f; + this->actor.velocity.y = velocityY * 0.7f; + } else { + this->linearVelocity = 4.0f; + this->actor.velocity.y = 0.0f; + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + anim = &gPlayerAnim_link_swimer_swim_hit; + } else if ((arg2 == 1) || (arg2 == 2) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (this->stateFlags1 & + (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) { + Player_SetAction(play, this, func_8084BC64, 0); + + this->stateFlags3 |= PLAYER_STATE3_2; + + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + func_8082DAD4(this); + + if (arg2 == 2) { + this->unk_AE8 = 4; + + this->actor.speed = 3.0f; + this->linearVelocity = 3.0f; + this->actor.velocity.y = 6.0f; + + func_8082E5A8(play, this, D_8085BE84[PLAYER_ANIMGROUP_3][this->modelAnimType]); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } else { + this->actor.speed = speed; + this->linearVelocity = speed; + this->actor.velocity.y = velocityY; + + if (ABS_ALT(arg5) > 0x4000) { + anim = &gPlayerAnim_link_normal_front_downA; + } else { + anim = &gPlayerAnim_link_normal_back_downA; + } + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_L); + } + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } else if ((this->linearVelocity > 4.0f) && !func_80123420(this)) { + this->unk_B64 = 20; + + Player_RequestRumble(play, this, 120, 20, 10, SQ(0)); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + + return; + } else { + PlayerAnimationHeader** animPtr = D_8085D0D4; + + Player_SetAction(play, this, func_8084BBF0, 0); + func_8082FC60(this); + + if (this->actor.colChkInfo.damage < 5) { + Player_RequestRumble(play, this, 120, 20, 10, SQ(0)); + } else { + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + this->linearVelocity = 23.0f; + + animPtr += 4; + } + + if (ABS_ALT(arg5) <= 0x4000) { + animPtr += 2; + } + + if (func_80123420(this)) { + animPtr++; + } + + anim = *animPtr; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } + + this->actor.shape.rot.y += arg5; + this->currentYaw = this->actor.shape.rot.y; + this->actor.world.rot.y = this->actor.shape.rot.y; + + if (ABS_ALT(arg5) > 0x4000) { + this->actor.shape.rot.y += 0x8000; + } + } + + func_8082DE50(play, this); + + this->stateFlags1 |= PLAYER_STATE1_4000000; + + if (anim != NULL) { + func_8082DB90(play, this, anim); + } +} + +s32 func_808340AC(FloorType floorType) { + s32 temp_v0 = floorType - FLOOR_TYPE_2; + + if ((temp_v0 >= FLOOR_TYPE_2 - FLOOR_TYPE_2) && (temp_v0 <= FLOOR_TYPE_3 - FLOOR_TYPE_2)) { + return temp_v0; + } + return -1; +} + +s32 func_808340D4(FloorType floorType) { + return (floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_7) || (floorType == FLOOR_TYPE_12); +} + +void func_80834104(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8085421C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000; +} + +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->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->linearVelocity = 0.0f; + } +} + +s32 func_808341F4(PlayState* play, Player* this) { + f32 temp_fv0; + f32 flameScale; + f32 flameIntensity; + s32 i; + s32 timerStep; + s32 spawnedFlame = false; + s32 var_v0; + s32 var_v1; + u8* timerPtr = this->flameTimers; + + if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) { + timerStep = 0; + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->cylinder.base.ocFlags1 & OC1_HIT) { + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); + this->linearVelocity = 0.0f; + } + func_80834140(play, this, &gPlayerAnim_link_derth_rebirth); + } + } else { + if (this->transformation == PLAYER_FORM_GORON) { + var_v1 = 20; + } else { + var_v1 = (s32)(this->linearVelocity * 0.4f) + 1; + } + + if (this->stateFlags2 & PLAYER_STATE2_8) { + var_v0 = 100; + } else { + var_v0 = 0; + } + + timerStep = var_v0 + var_v1; + } + + for (i = 0; i < PLAYER_BODYPART_MAX; i++, timerPtr++) { + if (*timerPtr <= timerStep) { + *timerPtr = 0; + } else { + spawnedFlame = true; + *timerPtr -= timerStep; + if (*timerPtr > 20.0f) { + temp_fv0 = (*timerPtr - 20.0f) * 0.01f; + flameScale = CLAMP(temp_fv0, 0.19999999f, 0.2f); + } else { + flameScale = *timerPtr * 0.01f; + } + + flameIntensity = (*timerPtr - 25.0f) * 0.02f; + flameIntensity = CLAMP(flameIntensity, 0.0f, 1.0f); + EffectSsFireTail_SpawnFlameOnPlayer(play, flameScale, i, flameIntensity); + } + } + + if (spawnedFlame) { + Player_PlaySfx(this, NA_SE_EV_TORCH - SFX_FLAG); + if ((play->gameplayFrames % 4) == 0) { + Player_InflictDamage(play, -1); + } + } else { + this->isBurning = false; + } + + return this->stateFlags1 & PLAYER_STATE1_80; +} + +s32 func_808344C0(PlayState* play, Player* this) { + s32 i = 0; + + while (i < ARRAY_COUNT(this->flameTimers)) { + this->flameTimers[i] = Rand_S16Offset(0, 200); + i++; + } + + this->isBurning = true; + return func_808341F4(play, this); +} + +s32 func_80834534(PlayState* play, Player* this) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_L); + return func_808344C0(play, this); +} + +s32 func_8083456C(PlayState* play, Player* this) { + if (this->actor.colChkInfo.acHitEffect == 1) { + return func_80834534(play, this); + } + return false; +} + +void func_808345A8(Player* this) { + if ((this->invincibilityTimer > 0) && (this->invincibilityTimer < 20)) { + this->invincibilityTimer = 20; + } +} + +void func_808345C8(void) { + if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + gSaveContext.save.equippedMask = PLAYER_MASK_NONE; + } +} + +s32 func_80834600(Player* this, PlayState* play) { + s32 pad74; + s32 var_v0; + + if (this->unk_D6A != 0) { + if (!Player_InBlockingCsMode(play, this)) { + Player_InflictDamage(play, -16); + this->unk_D6A = 0; + } + } else if ((var_v0 = ((Player_GetHeight(this) - 8.0f) < (this->unk_AB8 * this->actor.scale.y))) || + (this->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + (this->stateFlags2 & PLAYER_STATE2_80000000)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + + if (var_v0) { + func_80169FDC(&play->state); + func_808345C8(); + Scene_SetExitFade(play); + } else { + func_80169EFC(&play->state); + func_808345C8(); + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_TAKEN_AWAY); + play->haltAllActors = true; + play_sound(NA_SE_OC_ABYSS); + } else if ((this->unk_B75 != 0) && ((this->unk_B75 >= 3) || (this->invincibilityTimer == 0))) { + u8 sp6C[] = { 0, 2, 1, 1 }; + + if (!func_8083456C(play, this)) { + if (this->unk_B75 == 4) { + this->shockTimer = 40; + } + + this->actor.colChkInfo.damage += this->unk_B74; + func_80833B18(play, this, sp6C[this->unk_B75 - 1], this->unk_B78, this->unk_B7C, this->unk_B76, 20); + } + } else if ((this->shieldQuad.base.acFlags & AC_BOUNCED) || (this->shieldCylinder.base.acFlags & AC_BOUNCED) || + ((this->invincibilityTimer < 0) && (this->cylinder.base.acFlags & AC_HIT) && + (this->cylinder.info.acHitInfo != NULL) && + (this->cylinder.info.acHitInfo->toucher.dmgFlags != DMG_UNBLOCKABLE))) { + PlayerAnimationHeader* var_a2; + s32 sp64; + + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + if ((this->invincibilityTimer >= 0) && !Player_IsGoronOrDeku(this)) { + sp64 = (func_8084B5C0 == this->actionFunc); + if (!func_801242B4(this)) { + Player_SetAction(play, this, func_8084BAA4, 0); + } + + this->unk_AE7 = sp64; + if ((s8)sp64 == 0) { + func_8082F43C(play, this, func_80848A0C); + 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); + } else { + Player_AnimationPlayOnce(play, this, D_8085CFDC[Player_IsHoldingTwoHandedWeapon(this)]); + } + } + + if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) { + this->linearVelocity = -18.0f; + this->currentYaw = this->actor.shape.rot.y; + } + + return false; + } else if ((this->unk_D6B != 0) || (this->invincibilityTimer > 0) || (this->stateFlags1 & PLAYER_STATE1_4000000) || + (this->csMode != PLAYER_CSMODE_0) || (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) || + (this->meleeWeaponQuads[1].base.atFlags & AT_HIT) || (this->cylinder.base.atFlags & AT_HIT) || + (this->shieldCylinder.base.atFlags & AT_HIT)) { + return false; + } else if (this->cylinder.base.acFlags & AC_HIT) { + Actor* sp60 = this->cylinder.base.ac; + s32 var_a2_2; + + if (sp60->flags & ACTOR_FLAG_1000000) { + Player_PlaySfx(this, NA_SE_PL_BODY_HIT); + } + + if (this->actor.colChkInfo.acHitEffect == 2) { + var_a2_2 = 3; + } else if (this->actor.colChkInfo.acHitEffect == 3) { + var_a2_2 = 4; + } else if (this->actor.colChkInfo.acHitEffect == 7) { + var_a2_2 = 1; + this->shockTimer = 40; + } else if (this->actor.colChkInfo.acHitEffect == 9) { + var_a2_2 = 1; + if (func_80834534(play, this)) { + return true; + } + + } else if (((this->actor.colChkInfo.acHitEffect == 4) && (this->currentMask != PLAYER_MASK_GIANT)) || + (this->stateFlags3 & PLAYER_STATE3_1000)) { + var_a2_2 = 1; + } else { + var_a2_2 = 0; + if (func_8083456C(play, this)) { + return true; + } + } + func_80833B18(play, this, var_a2_2, 4.0f, 5.0f, Actor_WorldYawTowardActor(sp60, &this->actor), 20); + } else if (this->invincibilityTimer != 0) { + return false; + } else { + s32 sp58 = func_808340AC(sPlayerCurrentFloorType); + u32 sp54 = SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + s32 var_a1 = 0; + s32 var_v1_2; + s32 pad48; + + if ((sp58 < 0) || + ((sp54 == 0) && (this->transformation == PLAYER_FORM_GORON) && !(this->actor.depthInWater > 0.0f))) { + var_a1 = (this->actor.wallPoly != NULL) && + SurfaceType_IsWallDamage(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); + if (var_a1 == 0) { + //! FAKE? + goto label; + } + } + var_v1_2 = (var_a1 != 0) ? this->actor.wallBgId : this->actor.floorBgId; + if (((this->transformation == PLAYER_FORM_DEKU) || (this->transformation == PLAYER_FORM_ZORA)) && + ((sp58 >= 0) && (sp54 == 0) && !(this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < -30.0f))) { + func_80834534(play, this); + } else { + this->actor.colChkInfo.damage = 4; + func_80833B18(play, this, (var_v1_2 == BGCHECK_SCENE) ? 0 : 1, 4.0f, 5.0f, + (var_a1 != 0) ? this->actor.wallYaw : this->actor.shape.rot.y, 20); + return true; + } + } + + //! FAKE? + if (0) { + label: + return false; + } + + return true; +} + +void func_80834CD0(Player* this, f32 arg1, u16 sfxId) { + this->actor.velocity.y = arg1 * D_8085C3E4; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + + if (sfxId != NA_SE_NONE) { + Player_AnimSfx_PlayFloorJump(this); + Player_AnimSfx_PlayVoice(this, sfxId); + } + + this->stateFlags1 |= PLAYER_STATE1_40000; + this->fallStartHeight = this->actor.world.pos.y; +} + +void func_80834D50(PlayState* play, Player* this, PlayerAnimationHeader* anim, f32 speed, u16 sfxId) { + Player_SetAction(play, this, func_8084C16C, 1); + if (anim != NULL) { + func_8082DB90(play, this, anim); + } + func_80834CD0(this, speed, sfxId); +} + +void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlayState* play) { + func_80834D50(play, this, anim, speed, NA_SE_VO_LI_SWORD_N); +} + +s32 func_80834DFC(Player* this, PlayState* play) { + if ((this->transformation != PLAYER_FORM_GORON) && + ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || (this->unk_B5C < 4)) && + !(this->stateFlags1 & PLAYER_STATE1_800) && (this->unk_B5C >= 2) && + (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->wallHeight < this->ageProperties->unk_14))) { + s32 var_v1 = false; + PlayerAnimationHeader* anim; + f32 wallHeight; + + if (func_801242B4(this)) { + f32 depth = (this->transformation == PLAYER_FORM_FIERCE_DEITY) ? 80.0f : 50.0f; + + if (this->actor.depthInWater < depth) { + if ((this->unk_B5C < 2) || (this->ageProperties->unk_10 < this->wallHeight)) { + return false; + } + } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || (this->unk_B5C >= 3)) { + return false; + } + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + ((this->ageProperties->unk_14 <= this->wallHeight) && (this->stateFlags1 & PLAYER_STATE1_8000000))) { + return false; + } + + if ((this->actor.wallBgId != BGCHECK_SCENE) && (sPlayerCurrentWallFlags & WALL_FLAG_6)) { + if (this->unk_B5D >= 6) { + this->stateFlags2 |= PLAYER_STATE2_4; + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + var_v1 = true; + } + } + } else if ((this->unk_B5D >= 6) || CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + var_v1 = true; + } + + if (var_v1) { + Player_SetAction(play, this, func_8084D4EC, 0); + wallHeight = this->wallHeight; + + if (this->ageProperties->unk_14 <= wallHeight) { + anim = &gPlayerAnim_link_normal_250jump_start; + this->linearVelocity = 1.0f; + } else { + CollisionPoly* poly; + s32 bgId; + f32 wallPolyNormalX = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.x); + f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.z); + f32 var_fv1 = this->wallDistance + 0.5f; // wallDistance + f32 yIntersect; + s32 pad; + + this->stateFlags1 |= PLAYER_STATE1_4; + + if (func_801242B4(this)) { + wallHeight -= 60.0f * this->ageProperties->unk_08; + anim = &gPlayerAnim_link_swimer_swim_15step_up; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + } else if (this->ageProperties->unk_18 <= wallHeight) { + wallHeight -= 59.0f * this->ageProperties->unk_08; + anim = &gPlayerAnim_link_normal_150step_up; + } else { + wallHeight -= 41.0f * this->ageProperties->unk_08; + anim = &gPlayerAnim_link_normal_100step_up; + } + + this->unk_ABC -= wallHeight * 100.0f; + + this->actor.world.pos.x -= var_fv1 * wallPolyNormalX; + this->actor.world.pos.y += this->wallHeight + 10.0f; + this->actor.world.pos.z -= var_fv1 * wallPolyNormalZ; + + yIntersect = + BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &this->actor.world.pos); + if ((this->actor.world.pos.y - yIntersect) <= 20.0f) { + this->actor.world.pos.y = yIntersect; + if (bgId != BGCHECK_SCENE) { + DynaPoly_SetPlayerOnTop(&play->colCtx, bgId); + } + } + + func_8082DAD4(this); + this->actor.velocity.y = 0.0f; + } + + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND; + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f); + AnimationContext_DisableQueue(play); + this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; + return true; + } + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->unk_B5C == 1) && (this->unk_B5D >= 3)) { + f32 temp = (this->wallHeight * 0.08f) + 5.5f; + + func_80834DB8(this, &gPlayerAnim_link_normal_jump, temp, play); + this->linearVelocity = 2.5f; + return true; + } + + return false; +} + +void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) { + Player_SetAction(play, this, func_8084D820, 0); + func_8082DD2C(play, this); + + this->csId = CS_ID_NONE; + this->unk_AE7 = 1; + this->unk_AE8 = 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; + + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); +} + +void func_808353DC(PlayState* play, Player* this) { + Player_SetAction(play, this, func_808508C8, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); +} + +s32 func_80835428(PlayState* play, Player* this) { + if (!func_8082DA90(play) && (this->stateFlags1 & PLAYER_STATE1_80000000)) { + func_80834104(play, this); + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_S); + func_8019F128(NA_SE_OC_SECRET_WARP_IN); + return true; + } + return false; +} + +/** + * The actual entrances each "return entrance" value can map to. + * This is used by scenes that are shared between locations. + * + * This 1D array is split into groups of entrances. + * The start of each group is indexed by `sReturnEntranceGroupIndices` values. + * The resulting groups are then indexed by the spawn value. + * + * The spawn value (`PlayState.curSpawn`) is set to a different value depending on the entrance used to enter the + * scene, which allows these dynamic "return entrances" to link back to the previous scene. + * + * Seems unused in MM + */ +u16 sReturnEntranceGroupData[] = { + // 0xFE00 + /* 0 */ 0x1000, +}; + +/** + * The values are indices into `sReturnEntranceGroupData` marking the start of each group + */ +u8 sReturnEntranceGroupIndices[] = { + 0, // 0xFE00 +}; + +// subfunction of OoT's func_80839034 +void func_808354A4(PlayState* play, s32 arg1, s32 arg2) { + play->nextEntrance = play->setupExitList[arg1]; + + if (play->nextEntrance == 0xFFFF) { + gSaveContext.respawnFlag = 4; + play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_UNK_3].entrance; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + } else if (play->nextEntrance >= 0xFE00) { + play->nextEntrance = + sReturnEntranceGroupData[sReturnEntranceGroupIndices[play->nextEntrance - 0xFE00] + play->curSpawn]; + + Scene_SetExitFade(play); + } else { + if (arg2) { + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = play->nextEntrance; + func_80169EFC(&play->state); + gSaveContext.respawnFlag = -2; + } + + gSaveContext.unk_3DBB = 1; + Scene_SetExitFade(play); + } + + play->transitionTrigger = TRANS_TRIGGER_START; +} + +void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_80833AA0(this, play); + this->unk_AE8 = -2; + func_8082E5EC(play, this, anim); + func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE); +} + +// related to grottos (?) +s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) { + s32 var_a3; + FloorType floorType; + s32 sp34; + s32 sp30; + + if ((this == GET_PLAYER(play)) && !(this->stateFlags1 & PLAYER_STATE1_80) && !func_8082DA90(play) && + (this->csMode == PLAYER_CSMODE_0) && !(this->stateFlags1 & PLAYER_STATE1_1)) { + var_a3 = 0; + if (((poly != NULL) && (var_a3 = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), (var_a3 != 0)) && + (((play->sceneId != SCENE_GORONRACE) && (play->sceneId != SCENE_DEKU_KING)) || (var_a3 < 3)) && + (((play->sceneId != SCENE_20SICHITAI) && (play->sceneId != SCENE_20SICHITAI2)) || (var_a3 < 0x15)) && + ((play->sceneId != SCENE_11GORONNOSATO) || (var_a3 < 6))) || + (func_808340D4(sPlayerCurrentFloorType) && (this->floorProperty == FLOOR_PROPERTY_12))) { + sp34 = this->unk_D68 - (s32)this->actor.world.pos.y; + if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sp34 < 400) && (D_80862B18 > 100.0f)) { + if ((this->floorProperty != FLOOR_PROPERTY_5) && (this->floorProperty != FLOOR_PROPERTY_12)) { + this->linearVelocity = 0.0f; + } + + return false; + } else { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } + + if (var_a3 == 0) { + func_80169EFC(&play->state); + Scene_SetExitFade(play); + } else { + func_808354A4(play, var_a3 - 1, + SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2); + if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->floorProperty == FLOOR_PROPERTY_5)) { + func_8019F128(NA_SE_OC_TUNAMI); + func_801A4058(5); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + (this->floorProperty == FLOOR_PROPERTY_12)) { + func_8019F128(NA_SE_OC_SECRET_WARP_IN); + } + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + if (D_801BDAA0) { + D_801BDAA0 = false; + } else { + D_801BDA9C = true; + } + } + } + + if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + ((floorType = SurfaceType_GetFloorType(&play->colCtx, poly, bgId)) != FLOOR_TYPE_10) && + ((sp34 < 100) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (floorType == FLOOR_TYPE_11) { + func_8019F128(NA_SE_OC_SECRET_HOLE_OUT); + func_801A4058(5); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } else { + func_8085B74C(play); + } + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_StopHorizontalMovement(this); + } + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0); + this->stateFlags1 |= PLAYER_STATE1_1 | PLAYER_STATE1_20000000; + return true; + } + } else { + if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.floorPoly == NULL)) { + BgCheck_EntityRaycastFloor7(&play->colCtx, &this->actor.floorPoly, &sp30, &this->actor, + &this->actor.world.pos); + if (this->actor.floorPoly == NULL) { + func_80169EFC(&play->state); + return false; + } + //! FAKE + if (1) {} + } + + if (!(this->stateFlags1 & PLAYER_STATE1_80000000)) { + if (((this->actor.world.pos.y < -4000.0f) || + (((this->floorProperty == FLOOR_PROPERTY_5) || (this->floorProperty == FLOOR_PROPERTY_12) || + (this->floorProperty == FLOOR_PROPERTY_13)) && + ((D_80862B18 < 100.0f) || (this->fallDistance > 400))))) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->floorProperty == FLOOR_PROPERTY_5) { + func_80169FDC(&play->state); + func_808345C8(); + } else { + func_80169EFC(&play->state); + } + if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + gSaveContext.respawnFlag = -5; + } + + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + play_sound(NA_SE_OC_ABYSS); + } else { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } + + if (this->floorProperty == FLOOR_PROPERTY_13) { + Player_SetAction(play, this, func_808497A0, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } else { + func_80834104(play, this); + this->unk_AE8 = 9999; + if (this->floorProperty == FLOOR_PROPERTY_5) { + this->unk_AE7 = -1; + } else { + this->unk_AE7 = 1; + } + } + } + } + } + + this->unk_D68 = this->actor.world.pos.y; + } + } + + return false; +} + +void Player_TranslateAndRotateY(Player* this, Vec3f* translation, Vec3f* src, Vec3f* dst) { + Lib_Vec3f_TranslateAndRotateY(translation, this->actor.shape.rot.y, src, dst); +} + +// Player_GetPosInACertainDirectionFromARadiusAway +void func_80835BF8(Vec3f* srcPos, s16 rotY, f32 radius, Vec3f* dstPos) { + dstPos->x = Math_SinS(rotY) * radius + srcPos->x; + dstPos->z = Math_CosS(rotY) * radius + srcPos->z; +} + +Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* translation, Vec3f* arg3, s32 elfParams) { + Vec3f pos; + + Player_TranslateAndRotateY(this, translation, arg3, &pos); + + return Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, pos.x, pos.y, pos.z, 0, 0, 0, elfParams); +} + +f32 func_80835CD8(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos, CollisionPoly** outPoly, s32* outBgId) { + Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, pos); + return BgCheck_EntityRaycastFloor5(&play->colCtx, outPoly, outBgId, &this->actor, pos); +} + +f32 func_80835D2C(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos) { + CollisionPoly* poly; + s32 bgId; + + return func_80835CD8(play, this, arg2, pos, &poly, &bgId); +} + +s32 func_80835D58(PlayState* play, Player* this, Vec3f* arg2, CollisionPoly** outPoly, s32* bgId, Vec3f* posResult) { + Vec3f posA; + Vec3f posB; + + posA.x = this->actor.world.pos.x; + posA.y = this->actor.world.pos.y + arg2->y; + posA.z = this->actor.world.pos.z; + Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, &posB); + + return BgCheck_EntityLineTest2(&play->colCtx, &posA, &posB, posResult, outPoly, true, false, false, true, bgId, + &this->actor); +} + +Vec3f D_8085D100 = { 0.0f, 50.0f, 0.0f }; + +s32 func_80835DF8(PlayState* play, Player* this, CollisionPoly** outPoly, s32* outBgId) { + Vec3f pos; + 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)); + return true; + } + return false; +} + +/** + * PLAYER_DOORTYPE_STAIRCASE: DoorSpiral + */ +void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) { + static Vec3f D_8085D10C = { 20.0f, 0.0f, 20.0f }; + DoorSpiral* doorStaircase = (DoorSpiral*)door; + + this->currentYaw = doorStaircase->actor.home.rot.y + 0x8000; + this->actor.shape.rot.y = this->currentYaw; + if (this->linearVelocity <= 0.0f) { + this->linearVelocity = 0.1f; + } + func_80835324(play, this, 50.0f, this->actor.shape.rot.y); + + this->unk_397 = this->doorType; + this->unk_AE7 = 0; + this->stateFlags1 |= PLAYER_STATE1_20000000; + func_80835BF8(&doorStaircase->actor.world.pos, doorStaircase->actor.shape.rot.y, -140.0f, &this->unk_3A0); + + D_8085D10C.x = (this->doorDirection != 0) ? -400.0f : 400.0f; + D_8085D10C.z = 200.0f; + Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D10C, &this->unk_3AC); + + doorStaircase->shouldClimb = true; + + func_8082DAD4(this); + + if (this->doorTimer != 0) { + this->unk_AE8 = 0; + func_8082E438(play, this, func_8082ED20(this)); + this->skelAnime.endFrame = 0.0f; + } else { + this->linearVelocity = 0.1f; + } + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0); + this->doorBgCamIndex = + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorStaircase->actor)].sides[0].bgCamIndex; + Actor_DeactivateLens(play); + this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG; +} + +/** + * PLAYER_DOORTYPE_SLIDING: DoorShutter, BgOpenShutter + */ +void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) { + SlidingDoorActor* doorSliding = (SlidingDoorActor*)door; + Vec3f sp38; + + this->currentYaw = doorSliding->dyna.actor.home.rot.y; + if (this->doorDirection > 0) { + this->currentYaw -= 0x8000; + } + this->actor.shape.rot.y = this->currentYaw; + if (this->linearVelocity <= 0.0f) { + this->linearVelocity = 0.1f; + } + + func_80835324(play, this, 50.0f, this->actor.shape.rot.y); + this->unk_AE7 = 0; + this->unk_397 = this->doorType; + this->stateFlags1 |= PLAYER_STATE1_20000000; + Actor_OffsetOfPointInActorCoords(&doorSliding->dyna.actor, &sp38, &this->actor.world.pos); + + func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, + (42.0f - fabsf(sp38.z)) * this->doorDirection, &this->actor.world.pos); + func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, this->doorDirection * 20.0f, + &this->unk_3A0); + func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, this->doorDirection * -120.0f, + &this->unk_3AC); + + doorSliding->unk_15C = 1; + func_8082DAD4(this); + + if (this->doorTimer != 0) { + this->unk_AE8 = 0; + func_8082E438(play, this, func_8082ED20(this)); + this->skelAnime.endFrame = 0.0f; + } else { + this->linearVelocity = 0.1f; + } + + if (doorSliding->dyna.actor.category == ACTORCAT_DOOR) { + this->doorBgCamIndex = play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorSliding->dyna.actor)] + .sides[this->doorDirection > 0 ? 0 : 1] + .bgCamIndex; + Actor_DeactivateLens(play); + } +} + +// sPlayerOpenDoorLeftAnimPerForm +PlayerAnimationHeader* D_8085D118[] = { + &gPlayerAnim_pg_doorA_open, // PLAYER_FORM_GORON + &gPlayerAnim_pz_doorA_open, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_doorA_open, // PLAYER_FORM_DEKU +}; +// sPlayerOpenDoorRightAnimPerForm +PlayerAnimationHeader* D_8085D124[] = { + &gPlayerAnim_pg_doorB_open, // PLAYER_FORM_GORON + &gPlayerAnim_pz_doorB_open, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_doorB_open, // PLAYER_FORM_DEKU +}; + +/** + * PLAYER_DOORTYPE_TALKING: EnDoorEtc + * PLAYER_DOORTYPE_HANDLE: EnDoor + * PLAYER_DOORTYPE_FAKE: + * PLAYER_DOORTYPE_PROXIMITY: EnDoor + */ +void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { + s32 temp = this->transformation - 1; + PlayerAnimationHeader* anim; + f32 temp_fv0; // sp5C + KnobDoorActor* doorHandle = (KnobDoorActor*)door; + + doorHandle->animIndex = this->transformation; + + if (this->doorDirection < 0) { + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + anim = D_8085BE84[PLAYER_ANIMGROUP_8][this->modelAnimType]; + } else if (this->transformation == PLAYER_FORM_HUMAN) { + anim = D_8085BE84[PLAYER_ANIMGROUP_9][this->modelAnimType]; + } else { + anim = D_8085D118[temp]; + } + } else { + doorHandle->animIndex += 5; + + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + anim = D_8085BE84[PLAYER_ANIMGROUP_10][this->modelAnimType]; + } else if (this->transformation == PLAYER_FORM_HUMAN) { + anim = D_8085BE84[PLAYER_ANIMGROUP_11][this->modelAnimType]; + } else { + anim = D_8085D124[temp]; + } + } + + Player_SetAction(play, this, func_8084E034, 0); + this->stateFlags2 |= PLAYER_STATE2_800000; + func_8082DE14(play, this); + if (this->doorDirection < 0) { + this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y; + } else { + this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y - 0x8000; + } + + this->currentYaw = this->actor.shape.rot.y; + temp_fv0 = this->doorDirection * 22.0f; + func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, temp_fv0, + &this->actor.world.pos); + func_8082EC9C(play, this, anim); + + if (this->doorTimer != 0) { + this->skelAnime.endFrame = 0.0f; + } + + func_8082DAD4(this); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200); + doorHandle->playOpenAnim = true; + if (this->doorType != PLAYER_DOORTYPE_FAKE) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + s32 enDoorType = ENDOOR_GET_TYPE(&doorHandle->dyna.actor); + + this->stateFlags1 |= PLAYER_STATE1_20000000; + + if (this->actor.category == ACTORCAT_PLAYER) { + Actor_DeactivateLens(play); + func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, -temp_fv0, &pos); + pos.y = doorHandle->dyna.actor.world.pos.y + 10.0f; + BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); + + if (func_8083562C(play, this, poly, BGCHECK_SCENE)) { + gSaveContext.entranceSpeed = 2.0f; + } else if (enDoorType != ENDOOR_TYPE_7) { + Camera* mainCam; + + this->unk_AE7 = 38.0f * D_8085C3E8; + mainCam = Play_GetCamera(play, CAM_ID_MAIN); + + Camera_ChangeDoorCam(mainCam, &doorHandle->dyna.actor, + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorHandle->dyna.actor)] + .sides[(this->doorDirection > 0) ? 0 : 1] + .bgCamIndex, + 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); + } + } + } +} + +// door stuff +s32 func_808365DC(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)) || + ((this->doorType >= PLAYER_DOORTYPE_HANDLE) && CutsceneManager_IsNext(CS_ID_GLOBAL_DOOR))) && + (!(this->stateFlags1 & PLAYER_STATE1_800) && + (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || (func_8085437C == this->actionFunc) || + (this->doorType == PLAYER_DOORTYPE_STAIRCASE) || (this->doorType == PLAYER_DOORTYPE_PROXIMITY))))) { + Actor* doorActor = this->doorActor; + Actor* var_v0_3; + + if (this->doorType <= PLAYER_DOORTYPE_TALKING) { + Player_TalkWithPlayer(play, doorActor); + if (doorActor->textId == 0x1821) { + doorActor->flags |= ACTOR_FLAG_TALK_REQUESTED; + } + return true; + } + + gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 0; + + if (this->doorType == PLAYER_DOORTYPE_STAIRCASE) { + Player_Door_Staircase(play, this, doorActor); + } else if (this->doorType == PLAYER_DOORTYPE_SLIDING) { + Player_Door_Sliding(play, this, doorActor); + } else { + Player_Door_Knob(play, this, doorActor); + } + + if (this->actor.category == ACTORCAT_PLAYER) { + this->csId = CS_ID_GLOBAL_DOOR; + CutsceneManager_Start(this->csId, &this->actor); + } + + if (this->actor.category == ACTORCAT_PLAYER) { + if ((this->doorType < PLAYER_DOORTYPE_FAKE) && (doorActor->category == ACTORCAT_DOOR) && + ((this->doorType != PLAYER_DOORTYPE_HANDLE) || (ENDOOR_GET_TYPE(doorActor) != ENDOOR_TYPE_7))) { + s8 roomNum = play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(doorActor)] + .sides[(this->doorDirection > 0) ? 0 : 1] + .room; + + if ((roomNum >= 0) && (roomNum != play->roomCtx.curRoom.num)) { + Room_StartRoomTransition(play, &play->roomCtx, roomNum); + } + } + } + + doorActor->room = play->roomCtx.curRoom.num; + if (((var_v0_3 = doorActor->child) != NULL) || ((var_v0_3 = doorActor->parent) != NULL)) { + var_v0_3->room = play->roomCtx.curRoom.num; + } + return true; + } + } + + return false; +} + +void func_80836888(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + + Player_SetAction(play, this, func_80849A9C, 1); + + if (this->unk_B40 < 0.5f) { + anim = func_8082EF54(this); + this->unk_B40 = 0.0f; + } else { + anim = func_8082EF9C(this); + this->unk_B40 = 1.0f; + } + + this->unk_B44 = this->unk_B40; + Player_AnimationPlayLoop(play, this, anim); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8083692C(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849DD0, 1); + func_8082E438(play, this, func_8082ED20(this)); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80836988(Player* this, PlayState* play) { + if (func_80123420(this)) { + func_80836888(this, play); + } else if (func_80123434(this)) { + func_8083692C(this, play); + } else { + func_8085B384(this, play); + } +} + +void func_808369F4(Player* this, PlayState* play) { + PlayerActionFunc actionFunc; + + if (func_80123420(this)) { + actionFunc = func_80849A9C; + } else if (func_80123434(this)) { + actionFunc = func_80849DD0; + } else { + actionFunc = func_80849FE0; + } + Player_SetAction(play, this, actionFunc, 1); +} + +void func_80836A5C(Player* this, PlayState* play) { + func_808369F4(this, play); + if (func_80123420(this)) { + this->unk_AE8 = 1; + } +} + +void func_80836A98(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + func_80836A5C(this, play); + func_8082EC9C(play, this, anim); +} + +void func_80836AD8(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80857BE8, 0); + this->unk_B28 = 0; + this->unk_B86[1] = 0; + this->unk_AF0[0].x = 0.0f; + this->unk_AF0[0].y = 0.0f; + this->unk_AF0[0].z = 0.0f; + this->unk_B08 = 0.0f; + this->unk_B0C = 0.0f; + Player_PlaySfx(this, NA_SE_PL_GORON_TO_BALL); +} + +void func_80836B3C(PlayState* play, Player* this, f32 arg2) { + this->currentYaw = this->actor.shape.rot.y; + this->actor.world.rot.y = this->actor.shape.rot.y; + + if (this->transformation == PLAYER_FORM_GORON) { + func_80836AD8(play, this); + PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType], + 1.5f * D_8085C3E4, 0.0f, 6.0f, ANIMMODE_ONCE, 0.0f); + } else { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType]; + + Player_SetAction(play, this, func_8084C6EC, 0); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.25f * D_8085C3E4, arg2, Animation_GetLastFrame(anim), + ANIMMODE_ONCE, 0.0f); + } +} + +void func_80836C70(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex) { + static Vec3f D_8085D130 = { 0, 0, 0 }; + s32 i; + + for (i = 0; i < 4; i++) { + Vec3f velocity; + + velocity.x = randPlusMinusPoint5Scaled(4.0f); + velocity.y = Rand_ZeroFloat(2.0f); + velocity.z = randPlusMinusPoint5Scaled(4.0f); + D_8085D130.y = -0.2f; + EffectSsHahen_Spawn(play, &this->bodyPartsPos[bodyPartIndex], &velocity, &D_8085D130, 0, 10, OBJECT_LINK_NUTS, + 16, object_link_nuts_DL_008860); + } +} + +void func_80836D8C(Player* this) { + this->actor.focus.rot.x = 0; + this->actor.focus.rot.z = 0; + this->headLimbRot.x = 0; + this->headLimbRot.y = 0; + this->headLimbRot.z = 0; + this->upperLimbRot.x = 0; + this->upperLimbRot.y = 0; + this->upperLimbRot.z = 0; + this->actor.shape.rot.y = this->actor.focus.rot.y; + this->currentYaw = this->actor.focus.rot.y; +} + +s32 func_80836DC0(PlayState* play, Player* this) { + if ((MREG(48) != 0) || func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + Player_SetAction(play, this, func_808561B0, 0); + this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); + func_8082E438(play, this, &gPlayerAnim_pn_attack); + Player_StopHorizontalMovement(this); + func_80836D8C(this); + this->actor.shape.shadowDraw = ActorShadow_DrawCircle; + this->unk_B48 = -2000.0f; + this->actor.shape.shadowScale = 13.0f; + func_8082E1F0(this, NA_SE_PL_DEKUNUTS_IN_GRD); + return true; + } + + return false; +} + +void Player_RequestQuake(PlayState* play, u16 speed, s16 y, s16 duration) { + s16 quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); + + Quake_SetSpeed(quakeIndex, speed); + Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); + Quake_SetDuration(quakeIndex, duration); +} + +FallImpactInfo sFallImpactInfos[] = { + { -8, 180, 40, 100, NA_SE_VO_LI_LAND_DAMAGE_S }, + { -16, 255, 140, 150, NA_SE_VO_LI_LAND_DAMAGE_S }, +}; + +// Player_FallAgainstTheFloor, Player_LetTheBodiesHitTheFloor, Player_ImpactFloor, Player_ProcessFallDamage, +// Player_DamageOnFloorImpact, Player_CalculateFallDamage +s32 func_80836F10(PlayState* play, Player* this) { + s32 fallDistance; + + if ((sPlayerCurrentFloorType == FLOOR_TYPE_6) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + (this->csMode != PLAYER_CSMODE_0)) { + fallDistance = 0; + } else { + fallDistance = this->fallDistance; + } + + Math_StepToF(&this->linearVelocity, 0.0f, 1.0f); + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + + // Height enough for fall damage + if (fallDistance >= 400) { + s32 index; + FallImpactInfo* entry; + + if (this->fallDistance < 800) { + // small fall + index = 0; + } else { + // big fall + index = 1; + } + + Player_PlaySfx(this, NA_SE_PL_BODY_HIT); + + entry = &sFallImpactInfos[index]; + Player_AnimSfx_PlayVoice(this, entry->sfxId); + + if (Player_InflictDamage(play, entry->damage)) { + // Player's dead + return -1; + } + + func_80833998(this, 40); + Player_RequestQuake(play, 32967, 2, 30); + Player_RequestRumble(play, this, entry->sourceIntensity, entry->decayTimer, entry->decayStep, SQ(0)); + + return index + 1; + } + + // Tiny fall, won't damage player + if (fallDistance > 200) { + fallDistance = fallDistance * 2; + fallDistance = CLAMP_MAX(fallDistance, 255); + + Player_RequestRumble(play, this, fallDistance, fallDistance * 0.1f, fallDistance, SQ(0)); + if (sPlayerCurrentFloorType == FLOOR_TYPE_6) { + //! @bug unreachable code: When sPlayerCurrentFloorType is equal to FLOOR_TYPE_6 then fallDistance is + //! ignored (set to zero), so the previous check based on said variable will always fail, producing this + //! current check to always be false. + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + } + } + + Player_AnimSfx_PlayFloorLand(this); + return 0; +} + +s32 func_808370D4(PlayState* play, Player* this) { + if ((this->fallDistance < 800) && (this->unk_AE3[this->unk_ADE] == 0) && !(this->stateFlags1 & PLAYER_STATE1_800)) { + func_80836B3C(play, this, 0.0f); + + return true; + } + return false; +} + +void func_80837134(PlayState* play, Player* this) { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_13][this->modelAnimType]; + s32 temp_v0_2; // sp28 + + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + + if (this->transformation == PLAYER_FORM_DEKU) { + s32 var_v1 = false; + + if ((this->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) || + (this->skelAnime.animation == &gPlayerAnim_pn_kakkufinish)) { + func_80836C70(play, this, PLAYER_BODYPART_LEFT_HAND); + func_80836C70(play, this, PLAYER_BODYPART_RIGHT_HAND); + var_v1 = true; + } + + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && func_80836DC0(play, this)) { + return; + } + + if (var_v1) { + func_80836A98(this, anim, play); + Player_AnimSfx_PlayFloorLand(this); + return; + } + } else if (this->stateFlags2 & PLAYER_STATE2_80000) { + if (func_80123420(this)) { + anim = D_8085C2A4[this->unk_AE7].unk_8; + } else { + anim = D_8085C2A4[this->unk_AE7].unk_4; + } + } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_run_jump) { + anim = &gPlayerAnim_link_normal_run_jump_end; + } else if (func_80123420(this)) { + anim = &gPlayerAnim_link_anchor_landingR; + func_8082FC60(this); + } else if (this->fallDistance <= 80) { + anim = D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType]; + } else if (func_808370D4(play, this)) { + return; + } + + temp_v0_2 = func_80836F10(play, this); + if (temp_v0_2 > 0) { // Player suffered damage because of this fall + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_13][this->modelAnimType], play); + this->skelAnime.endFrame = 8.0f; + + if (temp_v0_2 == 1) { + this->unk_AE8 = 0xA; + } else { + this->unk_AE8 = 0x14; + } + } else if (temp_v0_2 == 0) { + func_80836A98(this, anim, play); + } +} + +void func_808373A4(PlayState* play, Player* this) { + func_8082E438(play, this, &gPlayerAnim_pn_attack); + this->unk_B10[0] = 20000.0f; + this->unk_B10[1] = 0x30000; + Player_PlaySfx(this, NA_SE_PL_DEKUNUTS_ATTACK); +} + +s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { + PlayerAnimationHeader* anim; + f32 speed; + s16 yawDiff = this->currentYaw - this->actor.shape.rot.y; + + if ((IREG(66) / 100.0f) < this->linearVelocity) { + speed = IREG(67) / 100.0f; + } else { + speed = (IREG(68) / 100.0f + (IREG(69) * this->linearVelocity) / 1000.0f); + + if ((this->transformation == PLAYER_FORM_DEKU) && (speed < 8.0f)) { + speed = 8.0f; + } else if (speed < 5.0f) { + speed = 5.0f; + } + } + + if ((ABS_ALT(yawDiff) >= 0x1000) || (this->linearVelocity <= 4.0f)) { + anim = &gPlayerAnim_link_normal_jump; + } else { + s32 var_v1; + + if ((this->transformation != PLAYER_FORM_DEKU) && + (((sPlayerPrevFloorProperty == FLOOR_PROPERTY_1)) || (sPlayerPrevFloorProperty == FLOOR_PROPERTY_2))) { + if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_1) { + var_v1 = 4; + } else { + var_v1 = 5; + } + + 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->stateFlags2 |= PLAYER_STATE2_80000; + this->unk_AE7 = var_v1; + return true; + } + anim = &gPlayerAnim_link_normal_run_jump; + } + + // Deku hopping + if (this->transformation == PLAYER_FORM_DEKU) { + speed *= 0.3f + ((5 - this->remainingHopsCounter) * 0.18f); + if (speed < 4.0f) { + speed = 4.0f; + } + + 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->stateFlags3 |= PLAYER_STATE3_200000; + Player_PlaySfx(this, (NA_SE_PL_DEKUNUTS_JUMP5 + 1 - this->remainingHopsCounter)); + Player_AnimSfx_PlayVoice(this, sfxId); + this->remainingHopsCounter--; + if (this->remainingHopsCounter == 0) { + this->stateFlags2 |= PLAYER_STATE2_80000; + func_808373A4(play, this); + } + + return true; + } + + if (this->actor.velocity.y > 0.0f) { + sfxId = NA_SE_NONE; + } + } + + func_80834D50(play, this, anim, speed, sfxId); + this->unk_AE8 = 1; + + return true; +} + +s32 func_80837730(PlayState* play, Player* this, f32 arg2, s32 scale) { + f32 sp3C = fabsf(arg2); + + if (sp3C > 2.0f) { + WaterBox* waterBox; + f32 sp34; + Vec3f pos; + + Math_Vec3f_Copy(&pos, &this->bodyPartsPos[PLAYER_BODYPART_WAIST]); + pos.y += 20.0f; + if (WaterBox_GetSurface1(play, &play->colCtx, pos.x, pos.z, &pos.y, &waterBox)) { + sp34 = pos.y - this->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y; + if ((sp34 > -2.0f) && (sp34 < 100.0f)) { + EffectSsGSplash_Spawn(play, &pos, NULL, NULL, + (sp3C <= 10.0f) ? EFFSSGSPLASH_TYPE_0 : EFFSSGSPLASH_TYPE_1, scale); + return true; + } + } + } + + return false; +} + +s32 func_8083784C(Player* this) { + if (this->actor.velocity.y < 0.0f) { + if ((this->actor.depthInWater > 0.0f) && + ((this->ageProperties->unk_2C - this->actor.depthInWater) < D_80862B18)) { + if ((this->remainingHopsCounter != 0) && (gSaveContext.save.saveInfo.playerData.health != 0) && + !(this->stateFlags1 & PLAYER_STATE1_4000000)) { + if (((this->talkActor == NULL) || !(this->talkActor->flags & ACTOR_FLAG_10000))) { + return true; + } + } + } + } + + return false; +} + +void func_808378FC(PlayState* play, Player* this) { + if (!func_8082FC24(this)) { + this->stateFlags2 |= PLAYER_STATE2_20; + } + + if (func_8083784C(this) && func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP)) { + func_80837730(play, this, 20.0f, this->actor.velocity.y * 50.0f); + } +} + +s32 func_8083798C(Player* this) { + return (this->interactRangeActor != NULL) && (this->heldActor == NULL) && + (this->transformation != PLAYER_FORM_DEKU); +} + +void func_808379C0(PlayState* play, Player* this) { + if (func_8083798C(this)) { + Actor* interactRangeActor = this->interactRangeActor; + PlayerAnimationHeader* anim; + + if ((interactRangeActor->id == ACTOR_EN_ISHI) && (ENISHI_GET_1(interactRangeActor) != 0)) { + Player_SetAction(play, this, func_8084E334, 0); + anim = &gPlayerAnim_link_silver_carry; + } else if (((interactRangeActor->id == ACTOR_EN_BOMBF) || (interactRangeActor->id == ACTOR_EN_KUSA) || + (interactRangeActor->id == ACTOR_EN_KUSA2) || (interactRangeActor->id == ACTOR_OBJ_GRASS_CARRY)) && + (Player_GetStrength() <= PLAYER_STRENGTH_DEKU)) { + Player_SetAction(play, this, func_8084E4E4, 0); + anim = &gPlayerAnim_link_normal_nocarry_free; + + this->actor.world.pos.x = + (Math_SinS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.x; + this->actor.world.pos.z = + (Math_CosS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.z; + + this->currentYaw = this->actor.shape.rot.y = interactRangeActor->yawTowardsPlayer + 0x8000; + } else { + Player_SetAction(play, this, func_8084E25C, 0); + anim = D_8085BE84[PLAYER_ANIMGROUP_12][this->modelAnimType]; + } + + Player_AnimationPlayOnce(play, this, anim); + } else { + func_80836988(this, play); + this->stateFlags1 &= ~PLAYER_STATE1_800; + } +} + +void func_80837B60(PlayState* play, Player* this) { + func_8083172C(play, this, func_8084E980, 0); + + this->exchangeItemId = PLAYER_IA_NONE; + this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); + if (this->actor.textId != 0) { + Message_StartTextbox(play, this->actor.textId, this->talkActor); + } + this->targetedActor = this->talkActor; +} + +void func_80837BD0(PlayState* play, Player* this) { + func_8083172C(play, this, func_8084FE7C, 0); +} + +void func_80837BF8(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8084ED9C, 0); +} + +void func_80837C20(PlayState* play, Player* this) { + s32 sp1C = this->unk_AE8; + s32 sp18 = this->unk_AE7; + + func_8083172C(play, this, func_8084F4E8, 0); + this->actor.velocity.y = 0.0f; + + this->unk_AE8 = sp1C; + this->unk_AE7 = sp18; +} + +void func_80837C78(PlayState* play, Player* this) { + func_8083172C(play, this, func_80852C04, 0); + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000); + + if (this->getItemId == GI_HEART_CONTAINER) { + this->unk_AE8 = 20; + } else if (this->getItemId >= GI_NONE) { + this->unk_AE8 = 1; + } else { + this->getItemId = -this->getItemId; + } +} + +void func_80837CEC(PlayState* play, Player* this, CollisionPoly* arg2, f32 arg3, PlayerAnimationHeader* anim) { + f32 nx = COLPOLY_GET_NORMAL(arg2->normal.x); + f32 nz = COLPOLY_GET_NORMAL(arg2->normal.z); + + Player_SetAction(play, this, func_8084F1B8, 0); + func_8082DE50(play, this); + Player_AnimationPlayOnce(play, this, anim); + + this->actor.world.pos.x -= (arg3 + 1.0f) * nx; + this->actor.world.pos.z -= (arg3 + 1.0f) * nz; + this->actor.shape.rot.y = Math_Atan2S_XY(nz, nx); + this->currentYaw = this->actor.shape.rot.y; + + func_8082DAD4(this); + this->actor.velocity.y = 0.0f; + func_8082E6D0(this); +} + +s32 func_80837DEC(Player* this, PlayState* play) { + if ((this->transformation != PLAYER_FORM_GORON) && (this->transformation != PLAYER_FORM_DEKU) && + (this->actor.depthInWater < -80.0f)) { + if ((ABS_ALT(this->unk_B6C)) < 0xAAA && (ABS_ALT(this->unk_B6E) < 0xAAA)) { + CollisionPoly* entityPoly; + CollisionPoly* sp90; + s32 entityBgId; + s32 sp88; + Vec3f sp7C; + Vec3f sp70; + f32 temp_fv1_2; + f32 entityNormalX; + f32 entityNormalY; + f32 entityNormalZ; + f32 temp_fv0_2; + f32 var_fv1; + + sp7C.x = this->actor.prevPos.x - this->actor.world.pos.x; + sp7C.z = this->actor.prevPos.z - this->actor.world.pos.z; + + var_fv1 = sqrtf(SQXZ(sp7C)); + if (var_fv1 != 0.0f) { + var_fv1 = 5.0f / var_fv1; + } else { + var_fv1 = 0.0f; + } + + sp7C.x = this->actor.prevPos.x + (sp7C.x * var_fv1); + sp7C.y = this->actor.world.pos.y; + sp7C.z = this->actor.prevPos.z + (sp7C.z * var_fv1); + + if (BgCheck_EntityLineTest2(&play->colCtx, &this->actor.world.pos, &sp7C, &sp70, &entityPoly, true, false, + false, true, &entityBgId, &this->actor)) { + if (ABS_ALT(entityPoly->normal.y) < 0x258) { + s32 var_v1_2; // sp54 + + entityNormalX = COLPOLY_GET_NORMAL(entityPoly->normal.x); + entityNormalY = COLPOLY_GET_NORMAL(entityPoly->normal.y); + entityNormalZ = COLPOLY_GET_NORMAL(entityPoly->normal.z); + + temp_fv0_2 = Math3D_UDistPlaneToPos(entityNormalX, entityNormalY, entityNormalZ, entityPoly->dist, + &this->actor.world.pos); + + sp70.x = this->actor.world.pos.x - ((temp_fv0_2 + 1.0f) * entityNormalX); + sp70.z = this->actor.world.pos.z - ((temp_fv0_2 + 1.0f) * entityNormalZ); + sp70.y = this->actor.world.pos.y + 268 * 0.1f; + + temp_fv1_2 = this->actor.world.pos.y - + BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp88, &this->actor, &sp70); + if ((temp_fv1_2 >= -11.0f) && (temp_fv1_2 <= 0.0f)) { + var_v1_2 = sPlayerPrevFloorProperty == FLOOR_PROPERTY_6; + if (!var_v1_2) { + if (SurfaceType_GetWallFlags(&play->colCtx, entityPoly, entityBgId) & WALL_FLAG_3) { + var_v1_2 = true; + } + } + + func_80837CEC(play, this, entityPoly, temp_fv0_2, + var_v1_2 ? &gPlayerAnim_link_normal_Fclimb_startB + : &gPlayerAnim_link_normal_fall); + if (var_v1_2) { + func_80832558(play, this, func_80837C20); + + this->actor.shape.rot.y = this->currentYaw += 0x8000; + this->stateFlags1 |= PLAYER_STATE1_200000; + 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; + } else { + this->stateFlags1 |= PLAYER_STATE1_2000; + this->stateFlags1 &= ~PLAYER_STATE1_20000; + } + + Player_PlaySfx(this, NA_SE_PL_SLIPDOWN); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); + return true; + } + } + } + } + } + + return false; +} + +void func_808381A0(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + Player_SetAction(play, this, func_8084F3DC, 0); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f); +} + +Vec3f D_8085D148 = { 0.0f, 50.0f, 0.0f }; + +s32 func_808381F8(PlayState* play, Player* this) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + f32 yIntersect; + + Player_TranslateAndRotateY(this, &this->actor.prevPos, &D_8085D148, &pos); + + yIntersect = BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); + + return fabsf(yIntersect - this->actor.world.pos.y) < 10.0f; +} + +Vec3f D_8085D154 = { 0.0f, 0.0f, 100.0f }; + +void func_8083827C(Player* this, PlayState* play) { + s32 temp_t0; // sp64 + CollisionPoly* sp60; + s32 sp5C; + WaterBox* sp58; + Vec3f sp4C; + f32 sp48; + f32 sp44; + + this->fallDistance = this->fallStartHeight - (s32)this->actor.world.pos.y; + if (!(this->stateFlags1 & (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + ((this->stateFlags1 & PLAYER_STATE1_80000000) || + !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + if (func_80835428(play, this)) { + return; + } + + if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_8) { + this->actor.world.pos.x = this->actor.prevPos.x; + this->actor.world.pos.z = this->actor.prevPos.z; + return; + } + + if ((this->stateFlags3 & PLAYER_STATE3_2) || (this->skelAnime.moveFlags & ANIM_FLAG_80)) { + return; + } + + if ((func_8084C16C == this->actionFunc) || (func_8084C94C == this->actionFunc) || + (func_8084CA24 == this->actionFunc) || (func_80857BE8 == this->actionFunc) || + (func_808546D0 == this->actionFunc) || (func_80854800 == this->actionFunc)) { + return; + } + + if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_7) || (this->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + ((this->skelAnime.moveFlags & ANIM_FLAG_8) && func_808381F8(play, this))) { + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); + if (this->linearVelocity > 0.0f) { + Player_StopHorizontalMovement(this); + } + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH; + return; + } + + temp_t0 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y); + Player_SetAction(play, this, func_8084C16C, 1); + func_8082DD2C(play, this); + + this->floorSfxOffset = this->unk_D66; + if ((this->transformation != PLAYER_FORM_GORON) && + ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0)) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_LEAVE)) { + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + if ((sPlayerPrevFloorProperty != FLOOR_PROPERTY_6) && (sPlayerPrevFloorProperty != FLOOR_PROPERTY_9) && + (D_80862B18 > 20.0f) && (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0)) { + if ((ABS_ALT(temp_t0) < 0x2000) && (this->linearVelocity > 3.0f)) { + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + if (((this->transformation == PLAYER_FORM_ZORA) && + CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || + ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_11) && + (this->transformation != PLAYER_FORM_GORON) && + (this->transformation != PLAYER_FORM_DEKU))) { + + sp48 = func_80835CD8(play, this, &D_8085D154, &sp4C, &sp60, &sp5C); + sp44 = this->actor.world.pos.y; + + if (WaterBox_GetSurface1(play, &play->colCtx, sp4C.x, sp4C.z, &sp44, &sp58) && + ((sp44 - sp48) > 50.0f)) { + func_80834DB8(this, &gPlayerAnim_link_normal_run_jump_water_fall, 6.0f, play); + Player_SetAction(play, this, func_8084C94C, 0); + return; + } + } + } + func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP); + return; + } + } + } + } + + // Checking if the ledge is tall enough for Player to hang from + if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_9) || (D_80862B18 <= this->ageProperties->unk_34) || + !func_80837DEC(this, play)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); + } + } else { + this->fallStartHeight = this->actor.world.pos.y; + this->remainingHopsCounter = 5; + } +} + +s32 func_8083868C(PlayState* play, Player* this) { + s32 camMode; + Camera* camera; + + if (this->unk_AA5 == PLAYER_UNKAA5_3) { + if (func_800B7118(this)) { + if (this->transformation == PLAYER_FORM_HUMAN) { + camMode = CAM_MODE_SLINGSHOT; + } else if (this->transformation == PLAYER_FORM_DEKU) { + camMode = CAM_MODE_DEKUSHOOT; + } else { + camMode = CAM_MODE_BOWARROW; + } + } else { + camMode = CAM_MODE_ZORAFIN; + } + } else { + camMode = CAM_MODE_FIRSTPERSON; + } + + camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN) + : Play_GetCamera(play, ((EnTest3*)this)->subCamId); + + return Camera_ChangeMode(camera, camMode); +} + +void Player_StopCutscene(Player* this) { + if (this->csId > CS_ID_NONE) { + CutsceneManager_Stop(this->csId); + this->csId = CS_ID_NONE; + } +} + +s32 func_808387A0(PlayState* play, Player* this) { + if (this->unk_AA5 == PLAYER_UNKAA5_4) { + Player_StopCutscene(this); + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + Player_SetAction(play, this, func_8085B08C, 0); + if (this->doorBgCamIndex != 0) { + this->stateFlags1 |= PLAYER_STATE1_20000000; + } + func_8082DC38(this); + + return true; + } + return false; +} + +void func_80838830(Player* this, s16 objectId) { + s32 pad[2]; + + if (objectId != OBJECT_UNSET_0) { + this->giObjectLoading = true; + osCreateMesgQueue(&this->giObjectLoadQueue, &this->giObjectLoadMsg, 1); + DmaMgr_SendRequestImpl(&this->giObjectDmaRequest, this->giObjectSegment, gObjectTable[objectId].vromStart, + gObjectTable[objectId].vromEnd - gObjectTable[objectId].vromStart, 0, + &this->giObjectLoadQueue, NULL); + } +} + +PlayerAnimationHeader* D_8085D160[PLAYER_FORM_MAX] = { + &gPlayerAnim_pz_maskoffstart, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_pg_maskoffstart, // PLAYER_FORM_GORON + &gPlayerAnim_pz_maskoffstart, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_maskoffstart, // PLAYER_FORM_DEKU + &gPlayerAnim_cl_setmask, // PLAYER_FORM_HUMAN +}; + +void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerForm) { + func_8082DE50(play, this); + func_80831760(play, this, func_808553F4, 0); + func_8082E4A4(play, this, D_8085D160[this->transformation]); + gSaveContext.save.playerForm = playerForm; + this->stateFlags1 |= PLAYER_STATE1_2; + + D_80862B50 = play->envCtx.lightSettings; + this->actor.velocity.y = 0.0f; + Actor_DeactivateLens(play); +} + +void func_808389BC(PlayState* play, Player* this) { + func_80831760(play, this, func_80855AF4, 0); + func_8082E4A4(play, this, &gPlayerAnim_cl_setmask); + this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000); + func_8082DAD4(this); +} + +void func_80838A20(PlayState* play, Player* this) { + func_80831760(play, this, func_80855B9C, 0); + func_8082DB90(play, this, &gPlayerAnim_cl_maskoff); + this->currentMask = PLAYER_MASK_NONE; + this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000); + func_8082DAD4(this); + Magic_Reset(play); +} + +u8 sPlayerMass[PLAYER_FORM_MAX] = { + 100, // PLAYER_FORM_FIERCE_DEITY + 200, // PLAYER_FORM_GORON + 80, // PLAYER_FORM_ZORA + 20, // PLAYER_FORM_DEKU + 50, // PLAYER_FORM_HUMAN +}; + +PlayerAnimationHeader* D_8085D17C[PLAYER_FORM_MAX] = { + &gPlayerAnim_link_normal_okarina_start, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_pg_gakkistart, // PLAYER_FORM_GORON + &gPlayerAnim_pz_gakkistart, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_gakkistart, // PLAYER_FORM_DEKU + &gPlayerAnim_link_normal_okarina_start, // PLAYER_FORM_HUMAN +}; +PlayerAnimationHeader* D_8085D190[PLAYER_FORM_MAX] = { + &gPlayerAnim_link_normal_okarina_swing, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_pg_gakkiplay, // PLAYER_FORM_GORON + &gPlayerAnim_pz_gakkiplay, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_gakkiplay, // PLAYER_FORM_DEKU + &gPlayerAnim_link_normal_okarina_swing, // PLAYER_FORM_HUMAN +}; + +u8 D_8085D1A4[PLAYER_IA_MAX] = { + GI_NONE, // PLAYER_IA_NONE + GI_NONE, // PLAYER_IA_LAST_USED + GI_NONE, // PLAYER_IA_FISHING_ROD + GI_SWORD_KOKIRI, // PLAYER_IA_SWORD_KOKIRI + GI_SWORD_RAZOR, // PLAYER_IA_SWORD_RAZOR + GI_SWORD_GILDED, // PLAYER_IA_SWORD_GILDED + GI_SWORD_GREAT_FAIRY, // PLAYER_IA_SWORD_TWO_HANDED + GI_STICKS_1, // PLAYER_IA_STICK + GI_SWORD_KOKIRI, // PLAYER_IA_ZORA_FINS + GI_QUIVER_30, // PLAYER_IA_BOW + GI_ARROW_FIRE, // PLAYER_IA_BOW_FIRE + GI_ARROW_ICE, // PLAYER_IA_BOW_ICE + GI_ARROW_LIGHT, // PLAYER_IA_BOW_LIGHT + GI_HOOKSHOT, // PLAYER_IA_HOOKSHOT + GI_BOMBS_1, // PLAYER_IA_BOMB + GI_POWDER_KEG, // PLAYER_IA_POWDER_KEG + GI_BOMBCHUS_10, // PLAYER_IA_BOMBCHU + GI_40, // PLAYER_IA_11 + GI_NUTS_1, // PLAYER_IA_NUT + GI_PICTO_BOX, // PLAYER_IA_PICTO_BOX + GI_OCARINA, // PLAYER_IA_OCARINA + GI_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY + GI_FISH, // PLAYER_IA_BOTTLE_FISH + GI_75, // PLAYER_IA_BOTTLE_SPRING_WATER + GI_ICE_TRAP, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + GI_ZORA_EGG, // PLAYER_IA_BOTTLE_ZORA_EGG + GI_GOLD_DUST, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + GI_6C, // PLAYER_IA_BOTTLE_GOLD_DUST + GI_SEAHORSE, // PLAYER_IA_BOTTLE_1C + GI_MUSHROOM, // PLAYER_IA_BOTTLE_SEAHORSE + GI_HYLIAN_LOACH, // PLAYER_IA_BOTTLE_MUSHROOM + GI_DEKU_PRINCESS, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + GI_BUG, // PLAYER_IA_BOTTLE_BUG + GI_POE, // PLAYER_IA_BOTTLE_POE + GI_BIG_POE, // PLAYER_IA_BOTTLE_BIG_POE + GI_POTION_RED, // PLAYER_IA_BOTTLE_POTION_RED + GI_POTION_BLUE, // PLAYER_IA_BOTTLE_POTION_BLUE + GI_POTION_GREEN, // PLAYER_IA_BOTTLE_POTION_GREEN + GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK + GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK_HALF + GI_CHATEAU, // PLAYER_IA_BOTTLE_CHATEAU + GI_FAIRY, // PLAYER_IA_BOTTLE_FAIRY + GI_MOON_TEAR, // PLAYER_IA_MOON_TEAR + GI_DEED_LAND, // PLAYER_IA_DEED_LAND + GI_ROOM_KEY, // PLAYER_IA_ROOM_KEY + GI_LETTER_TO_KAFEI, // PLAYER_IA_LETTER_TO_KAFEI + GI_MAGIC_BEANS, // PLAYER_IA_MAGIC_BEANS + GI_DEED_SWAMP, // PLAYER_IA_DEED_SWAMP + GI_DEED_MOUNTAIN, // PLAYER_IA_DEED_MOUNTAIN + GI_DEED_OCEAN, // PLAYER_IA_DEED_OCEAN + GI_MOON_TEAR, // PLAYER_IA_32 + GI_LETTER_TO_MAMA, // PLAYER_IA_LETTER_MAMA + GI_A7, // PLAYER_IA_34 + GI_A8, // PLAYER_IA_35 + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_PENDANT_OF_MEMORIES + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_37 + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_38 + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_39 + GI_MASK_TRUTH, // PLAYER_IA_MASK_TRUTH + GI_MASK_KAFEIS_MASK, // PLAYER_IA_MASK_KAFEIS_MASK + GI_MASK_ALL_NIGHT, // PLAYER_IA_MASK_ALL_NIGHT + GI_MASK_BUNNY, // PLAYER_IA_MASK_BUNNY + GI_MASK_KEATON, // PLAYER_IA_MASK_KEATON + GI_MASK_GARO, // PLAYER_IA_MASK_GARO + GI_MASK_ROMANI, // PLAYER_IA_MASK_ROMANI + GI_MASK_CIRCUS_LEADER, // PLAYER_IA_MASK_CIRCUS_LEADER + GI_MASK_POSTMAN, // PLAYER_IA_MASK_POSTMAN + GI_MASK_COUPLE, // PLAYER_IA_MASK_COUPLE + GI_MASK_GREAT_FAIRY, // PLAYER_IA_MASK_GREAT_FAIRY + GI_MASK_GIBDO, // PLAYER_IA_MASK_GIBDO + GI_MASK_DON_GERO, // PLAYER_IA_MASK_DON_GERO + GI_MASK_KAMARO, // PLAYER_IA_MASK_KAMARO + GI_MASK_CAPTAIN, // PLAYER_IA_MASK_CAPTAIN + GI_MASK_STONE, // PLAYER_IA_MASK_STONE + GI_MASK_BREMEN, // PLAYER_IA_MASK_BREMEN + GI_MASK_BLAST, // PLAYER_IA_MASK_BLAST + GI_MASK_SCENTS, // PLAYER_IA_MASK_SCENTS + GI_MASK_GIANT, // PLAYER_IA_MASK_GIANT + GI_MASK_FIERCE_DEITY, // PLAYER_IA_MASK_FIERCE_DEITY + GI_MASK_GORON, // PLAYER_IA_MASK_GORON + GI_MASK_ZORA, // PLAYER_IA_MASK_ZORA + GI_MASK_DEKU, // PLAYER_IA_MASK_DEKU + GI_LENS, // PLAYER_IA_LENS +}; + +PlayerAnimationHeader* D_8085D1F8[] = { + &gPlayerAnim_link_normal_give_other, + &gPlayerAnim_link_normal_take_out, // Hold up cutscene item; "this item doesn't work here" +}; + +s32 func_80838A90(Player* this, PlayState* play) { + PlayerBottle bottleAction; + + if (this->unk_AA5 != PLAYER_UNKAA5_0) { + if (!(this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) && + !(this->stateFlags1 & PLAYER_STATE1_8000000) && !(this->stateFlags1 & PLAYER_STATE1_800000) && + !(this->stateFlags3 & PLAYER_STATE3_8) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) { + Player_StopCutscene(this); + func_80833AA0(this, play); + return true; + } + if (!func_808387A0(play, this)) { + if (this->unk_AA5 == PLAYER_UNKAA5_5) { + if ((this->itemAction >= PLAYER_IA_MASK_MIN) && (this->itemAction <= PLAYER_IA_MASK_MAX)) { + PlayerMask maskId = GET_MASK_FROM_IA(this->itemAction); + + this->prevMask = this->currentMask; + if (((maskId == this->currentMask) != 0) || (this->itemAction < PLAYER_IA_MASK_GIANT) || + ((this->itemAction == PLAYER_IA_MASK_GIANT) && (this->transformation != PLAYER_FORM_HUMAN))) { + if (maskId == this->currentMask) { + this->currentMask = PLAYER_MASK_NONE; + } else { + this->currentMask = maskId; + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + func_80838A20(play, this); + return true; + } + + func_808388B8(play, this, PLAYER_FORM_HUMAN); + } else { + this->currentMask = maskId; + if (this->currentMask == PLAYER_MASK_GIANT) { + func_808389BC(play, this); + return true; + } + func_808388B8(play, this, this->itemAction - PLAYER_IA_MASK_FIERCE_DEITY); + } + gSaveContext.save.equippedMask = this->currentMask; + } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) || + (this->itemAction == PLAYER_IA_PICTO_BOX) || + ((this->itemAction != this->unk_B2B) && + ((this->itemAction == PLAYER_IA_BOTTLE_BIG_POE) || + ((this->itemAction >= PLAYER_IA_BOTTLE_ZORA_EGG) && + (this->itemAction <= PLAYER_IA_BOTTLE_HYLIAN_LOACH)) || + (this->itemAction > PLAYER_IA_BOTTLE_FAIRY) || + ((this->talkActor != NULL) && (this->exchangeItemId > PLAYER_IA_NONE) && + (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) && + (this->itemAction == PLAYER_IA_MAGIC_BEANS)) || + ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) && + (Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE))))))) { + Actor* talkActor; + s32 heldItemTemp = this->itemAction; + + Player_StopCutscene(this); + this->itemAction = PLAYER_IA_NONE; + func_80831760(play, this, func_80853A5C, 0); + talkActor = this->talkActor; + this->itemAction = heldItemTemp; + this->csId = CS_ID_NONE; + + if ((talkActor != NULL) && (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) && + (this->itemAction == PLAYER_IA_MAGIC_BEANS)) || + ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) && + (this->exchangeItemId > PLAYER_IA_NONE)))) { + this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_40); + if (this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) { + Inventory_ChangeAmmo(ITEM_MAGIC_BEANS, -1); + func_80831760(play, this, func_8084B4A8, 0); + this->currentYaw = talkActor->yawTowardsPlayer + 0x8000; + this->actor.shape.rot.y = this->currentYaw; + if (talkActor->xzDistToPlayer < 40.0f) { + func_8082DB90(play, this, &gPlayerAnim_link_normal_backspace); + func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE); + } else { + func_8082E438(play, this, D_8085BE84[31][this->modelAnimType]); + } + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_AE8 = 80; + this->unk_AE7 = -1; + this->targetedActor = this->talkActor; + } else { + this->csId = CS_ID_GLOBAL_TALK; + } + + talkActor->flags |= ACTOR_FLAG_TALK_REQUESTED; + this->actor.textId = 0; + this->targetedActor = this->talkActor; + } 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->actor.textId = 0xFE; + } + this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; + this->exchangeItemId = this->itemAction; + if (this->unk_AE7 >= 0) { + Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]); + } + func_8082DAD4(this); + return true; + } else { + bottleAction = Player_BottleFromIA(this, this->itemAction); + + if (bottleAction > PLAYER_BOTTLE_NONE) { + Player_StopCutscene(this); + if (bottleAction >= PLAYER_BOTTLE_FAIRY) { + func_80831760(play, this, func_80853754, 0); + func_8082DB90(play, this, &gPlayerAnim_link_bottle_bug_out); + } else if ((bottleAction > PLAYER_BOTTLE_EMPTY) && (bottleAction < PLAYER_BOTTLE_POE)) { + func_80831760(play, this, func_80853850, 0); + func_8082DB90(play, this, &gPlayerAnim_link_bottle_fish_out); + this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]; + } else { + func_80831760(play, this, func_80853194, 0); + func_8082E4A4(play, this, + (this->transformation == PLAYER_FORM_DEKU) + ? &gPlayerAnim_pn_drinkstart + : &gPlayerAnim_link_bottle_drink_demo_start); + } + } else { + Actor* actorUnkA90 = this->unk_A90; + + if ((actorUnkA90 == NULL) || (actorUnkA90->id == ACTOR_EN_ZOT) || + (actorUnkA90->csId == CS_ID_NONE)) { + if (!func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA])) { + return false; + } + } else { + this->csId = CS_ID_NONE; + } + func_80831760(play, this, func_8085269C, 0); + if ((this->skelAnime.playSpeed < 0.0f) || + ((this->skelAnime.animation != D_8085D17C[this->transformation]) && + (this->skelAnime.animation != D_8085D190[this->transformation]))) { + func_8082DB90(play, this, D_8085D17C[this->transformation]); + } + this->stateFlags2 |= PLAYER_STATE2_8000000; + if (actorUnkA90 != NULL) { + this->actor.flags |= ACTOR_FLAG_20000000; + if (actorUnkA90->id == ACTOR_EN_ZOT) { + this->unk_A94 = -1.0f; + } else { + actorUnkA90->flags |= ACTOR_FLAG_20000000; + } + } + } + } + } else { + if (func_8083868C(play, this) != CAM_MODE_NORMAL) { + Player_StopCutscene(this); + if (!(this->stateFlags1 & PLAYER_STATE1_800000)) { + Player_SetAction(play, this, func_8084E724, 1); + this->unk_AE8 = 13; + func_80836D8C(this); + if (this->unk_AA5 == PLAYER_UNKAA5_2) { + play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; + } + } + this->stateFlags1 |= PLAYER_STATE1_100000; + play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + Player_StopHorizontalMovement(this); + return true; + } + this->unk_AA5 = PLAYER_UNKAA5_0; + play_sound(NA_SE_SY_ERROR); + return false; + } + this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000); + func_8082DAD4(this); + } + return true; + } + return false; +} + +s32 func_808391D8(Player* this, PlayState* play) { + if (gSaveContext.save.saveInfo.playerData.health != 0) { + Actor* talkActor = this->talkActor; + Actor* targetedActor = this->targetedActor; + 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)); + + if (var_t2 || (this->tatlTextId != 0)) { + //! @bug The comparison `((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000)` always evaluates to `true` + var_t1 = (this->tatlTextId < 0) && ((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000); + + if (var_t1 || !var_t2) { + var_a1 = this->tatlActor; + if (var_t1) { + targetedActor = NULL; + talkActor = NULL; + } + } else { + var_a1 = targetedActor; + } + } + } + + if ((talkActor != NULL) || (var_a1 != NULL)) { + if ((targetedActor == NULL) || (targetedActor == talkActor) || (targetedActor == var_a1)) { + if (!(this->stateFlags1 & PLAYER_STATE1_800) || + ((this->heldActor != NULL) && + (var_t1 || (talkActor == this->heldActor) || (var_a1 == this->heldActor) || + ((talkActor != NULL) && (talkActor->flags & ACTOR_FLAG_10000))))) { + if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (this->stateFlags1 & PLAYER_STATE1_800000) || func_801242B4(this))) { + if (talkActor != NULL) { + if ((targetedActor == NULL) || (targetedActor == talkActor)) { + this->stateFlags2 |= PLAYER_STATE2_2; + } + + if (!CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + return false; + } + + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || + (talkActor->flags & ACTOR_FLAG_10000)) { + var_a1 = NULL; + } else if (var_a1 == NULL) { + return false; + } + } + + if (var_a1 != NULL) { + if (!var_t1) { + this->stateFlags2 |= PLAYER_STATE2_200000; + if (!CutsceneManager_IsNext(CS_ID_GLOBAL_TALK) || + !CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP)) { + return false; + } + } + + talkActor = var_a1; + this->talkActor = NULL; + + if (var_t1 || !var_t2) { + var_a1->textId = ABS_ALT(this->tatlTextId); + } else if (var_a1->hintId != 0xFF) { + var_a1->textId = var_a1->hintId + 0x1900; + } + } + + this->currentMask = D_80862B2C; + gSaveContext.save.equippedMask = this->currentMask; + Player_TalkWithPlayer(play, talkActor); + return true; + } + } + } + } + } + + return false; +} + +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))) { + this->stateFlags2 |= PLAYER_STATE2_200000; + } else if ((this->tatlTextId == 0) && !func_80123420(this) && + CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP) && + !func_80831814(this, play, PLAYER_UNKAA5_1)) { + play_sound(NA_SE_SY_ERROR); + } + return false; +} + +// Jumpslash/Jumpkick start +void func_808395F0(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim, f32 linearVelocity, + f32 yVelocity) { + if (this->transformation == PLAYER_FORM_ZORA) { + linearVelocity *= 1.1f; + meleeWeaponAnim = PLAYER_MWA_ZORA_JUMPKICK_START; + yVelocity *= 0.9f; + } + + func_80833864(play, this, meleeWeaponAnim); + Player_SetAction(play, this, func_8084CB58, 0); + this->stateFlags3 |= PLAYER_STATE3_2; + this->linearVelocity = linearVelocity; + this->currentYaw = this->actor.shape.rot.y; + this->actor.velocity.y = yVelocity; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + Player_AnimSfx_PlayFloorJump(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L); +} + +s32 func_808396B8(PlayState* play, Player* this) { + if (!(this->stateFlags1 & PLAYER_STATE1_400000) && + (((this->actor.id != ACTOR_PLAYER) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) || + ((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)))) { + return true; + } + + return false; +} + +s32 func_80839770(Player* this, PlayState* play) { + if (func_808396B8(play, this)) { + if ((this->transformation != PLAYER_FORM_GORON) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) { + func_808395F0(play, this, + (this->transformation == PLAYER_FORM_ZORA) ? PLAYER_MWA_ZORA_JUMPKICK_START + : PLAYER_MWA_JUMPSLASH_START, + 3.0f, 4.5f); + return true; + } + } + return false; +} + +s32 func_80839800(Player* this, PlayState* play) { + if ((this->unk_AE3[this->unk_ADE] == 0) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) { + func_80836B3C(play, this, 0.0f); + return true; + } + return false; +} + +void func_80839860(Player* this, PlayState* play, s32 arg2) { + s32 pad; + f32 speed = (!(arg2 & 1) ? 5.8f : 3.5f); + + if (this->currentBoots == PLAYER_BOOTS_GIANT) { + speed /= 2.0f; + } + + //! FAKE + if (arg2 == 2) {} + + 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->currentYaw = this->actor.shape.rot.y + (arg2 << 0xE); + this->linearVelocity = !(arg2 & 1) ? 6.0f : 8.5f; + + this->stateFlags2 |= PLAYER_STATE2_80000; + Player_PlaySfx(this, ((arg2 << 0xE) == 0x8000) ? NA_SE_PL_ROLL : NA_SE_PL_SKIP); +} + +void func_80839978(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->itemAction = PLAYER_IA_OCARINA; + func_80831760(play, this, func_8084AC84, 0); + func_8082DB60(play, this, &gPlayerAnim_clink_normal_okarina_walk); + func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_200); + this->stateFlags3 |= PLAYER_STATE3_20000000; + this->unk_B48 = this->linearVelocity; + Audio_PlayFanfare(NA_BGM_BREMEN_MARCH); + } +} + +void func_80839A10(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->itemAction = PLAYER_IA_NONE; + func_80831760(play, this, func_8084AEEC, 0); + func_8082DB60(play, this, &gPlayerAnim_alink_dance_loop); + this->stateFlags2 |= PLAYER_STATE2_2000000; + Audio_PlayFanfare(NA_BGM_KAMARO_DANCE); + } +} + +s32 func_80839A84(PlayState* play, Player* this) { + if (this->transformation == PLAYER_FORM_DEKU) { + if (func_80836DC0(play, this)) { + return true; + } + } else { + return false; + } + + Player_SetAction(play, this, func_808573A4, 0); + this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); + this->unk_ADC = 4; + func_808373A4(play, this); + return true; +} + +s32 func_80839B18(Player* this, PlayState* play) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && + (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerCurrentFloorType != FLOOR_TYPE_7) && + (D_80862B40 != FLOOR_EFFECT_1)) { + s32 temp_a2 = this->unk_AE3[this->unk_ADE]; + + if (temp_a2 <= 0) { + if (func_8082FBE8(this)) { + if (this->actor.category != ACTORCAT_PLAYER) { + if (temp_a2 < 0) { + func_80834DB8(this, &gPlayerAnim_link_normal_jump, REG(69) / 100.0f, play); + } else { + 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)) { + func_808395F0(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f); + } else if (!func_80839A84(play, this)) { + func_80836B3C(play, this, 0.0f); + } + + return true; + } + } else { + func_80839860(this, play, temp_a2); + return true; + } + } + + return false; +} + +void func_80839CD8(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + f32 var_fv0 = this->unk_B38 - 3.0f; + + if (var_fv0 < 0.0f) { + var_fv0 += 29.0f; + } + + if (var_fv0 < 14.0f) { + anim = D_8085BE84[PLAYER_ANIMGROUP_17][this->modelAnimType]; + var_fv0 = 11.0f - var_fv0; + if (var_fv0 < 0.0f) { + var_fv0 = -var_fv0 * 1.375f; + } + var_fv0 = var_fv0 / 11.0f; + } else { + anim = D_8085BE84[PLAYER_ANIMGROUP_18][this->modelAnimType]; + var_fv0 = 26.0f - var_fv0; + if (var_fv0 < 0.0f) { + var_fv0 = -var_fv0 * 2; + } + var_fv0 = var_fv0 / 12.0f; + } + + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + 4.0f * var_fv0); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80839E3C(Player* this, PlayState* play) { + func_808369F4(this, play); + func_80839CD8(this, play); +} + +void func_80839E74(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849FE0, 1); + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80839ED0(Player* this, PlayState* play) { + if (!(this->stateFlags3 & PLAYER_STATE3_80) && (func_80852B28 != this->actionFunc) && !func_8083213C(this)) { + func_80836D8C(this); + if (!(this->stateFlags1 & PLAYER_STATE1_40)) { + if (func_801242B4(this)) { + func_808353DC(play, this); + } else { + func_80836988(this, play); + } + } + if (this->unk_AA5 < PLAYER_UNKAA5_5) { + this->unk_AA5 = PLAYER_UNKAA5_0; + } + } + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000); +} + +s32 func_80839F98(PlayState* play, Player* this) { + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + if (this->linearVelocity != 0.0f) { + func_80836B3C(play, this, 0.0f); + return true; + } + func_80836AD8(play, this); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, 2.0f / 3.0f, 0.0f, 7.0f, + ANIMMODE_ONCE, 0.0f); + return true; + } + return false; +} + +// Toggles swimming/walking underwater as Zora +void func_8083A04C(Player* this) { + if (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + } + if (func_808508C8 == this->actionFunc) { + this->unk_AE8 = 20; + } + } else { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + this->currentBoots = PLAYER_BOOTS_ZORA_UNDERWATER; + } + } +} + +s32 func_8083A0CC(Player* this, PlayState* play) { + if (!D_80862B04 && (this->transformation == PLAYER_FORM_ZORA)) { + func_8083A04C(this); + } + return false; +} + +s32 func_8083A114(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); + } else if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && !func_8082FB68(this)) { + if (this->transformation == PLAYER_FORM_GORON) { + if (func_80839F98(play, this)) { + return true; + } + } else if (func_80839A84(play, this) || func_80839800(this, play)) { + return true; + } + + if ((this->putAwayCountdown == 0) && (this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) && + (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { + func_80831990(play, this, ITEM_NONE); + } else { + this->stateFlags2 ^= PLAYER_STATE2_100000; + } + } + } + + return false; +} + +s32 func_8083A274(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) || + ((((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_8082DC38(this); + func_8082DCA0(play, this); + if (Player_SetAction(play, this, func_8084B5C0, 0)) { + this->stateFlags1 |= PLAYER_STATE1_400000; + if (this->transformation != PLAYER_FORM_GORON) { + PlayerAnimationHeader* anim; + f32 endFrame; + + if (!Player_IsGoronOrDeku(this)) { + Player_SetModelsForHoldingShield(this); + anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType]; + } else { + anim = (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_gurd + : &gPlayerAnim_clink_normal_defense_ALL; + } + + if (anim != this->skelAnime.animation) { + if (func_80123420(this)) { + this->unk_B3C = 1.0f; + } else { + this->unk_B3C = 0.0f; + func_8082FC60(this); + } + this->upperLimbRot.x = 0; + this->upperLimbRot.y = 0; + this->upperLimbRot.z = 0; + } + + endFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, + (anim == &gPlayerAnim_pn_gurd) ? 0.0f : endFrame, endFrame, ANIMMODE_ONCE, + 0.0f); + } + func_80830AE8(this); + } + + return true; + } + } + + return false; +} + +s32 func_8083A4A4(Player* this, f32* arg1, s16* arg2, f32 arg3) { + s16 yaw = this->currentYaw - *arg2; + + if (ABS_ALT(yaw) > 0x6000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, arg3)) { + *arg1 = 0.0f; + *arg2 = this->currentYaw; + } else { + return true; + } + } + return false; +} + +void func_8083A548(Player* this) { + if ((this->unk_ADC > 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + this->unk_ADC = -this->unk_ADC; + } +} + +s32 func_8083A580(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)) { + if ((this->unk_ADC > 0) && (((this->transformation == PLAYER_FORM_ZORA)) || + ((this->unk_ADC == 1) && (this->heldItemAction != PLAYER_IA_STICK)))) { + if (this->transformation == PLAYER_FORM_ZORA) { + func_80830E30(this, play); + } else { + func_808335B0(play, this); + } + return true; + } + } + } else { + func_8083A548(this); + } + return false; +} + +s32 func_8083A658(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + Player_SetAction(play, this, func_80852B28, 0); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_light_bom); + this->unk_AA5 = PLAYER_UNKAA5_0; + return true; + } + return false; +} + +struct_8085D200 D_8085D200[] = { + { &gPlayerAnim_link_bottle_bug_miss, &gPlayerAnim_link_bottle_bug_in, 2, 3 }, + { &gPlayerAnim_link_bottle_fish_miss, &gPlayerAnim_link_bottle_fish_in, 5, 3 }, +}; + +s32 func_8083A6C0(PlayState* play, Player* this) { + if (D_80862B48 != 0) { + if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { + Player_SetAction(play, this, func_808534C0, 0); + if (this->actor.depthInWater > 12.0f) { + this->unk_AE8 = 1; + } + func_8082DB90(play, this, D_8085D200[this->unk_AE8].unk_0); + Player_PlaySfx(this, NA_SE_IT_SWORD_SWING); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); + return true; + } + return false; + } + return false; +} + +void func_8083A794(Player* this, PlayState* play) { + if ((func_8084AF9C != this->actionFunc) && (func_8084B0EC != this->actionFunc)) { + this->unk_B70 = 0; + this->unk_B34 = 0.0f; + this->unk_B38 = 0.0f; + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType]); + } + + Player_SetAction(play, this, func_8082FBE8(this) ? func_8084B0EC : func_8084AF9C, 1); +} + +void func_8083A844(Player* this, PlayState* play, s16 currentYaw) { + this->currentYaw = currentYaw; + this->actor.shape.rot.y = this->currentYaw; + func_8083A794(this, play); +} + +s32 func_8083A878(PlayState* play, Player* this, f32 arg2) { + WaterBox* waterBox; + f32 ySurface = this->actor.world.pos.y; + + if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface, + &waterBox)) { + ySurface -= this->actor.world.pos.y; + if (this->ageProperties->unk_24 <= ySurface) { + Player_SetAction(play, this, func_80850B18, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); + this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000); + this->unk_AE8 = 20; + this->linearVelocity = 2.0f; + func_80123140(play, this); + return false; + } + } + func_80835324(play, this, arg2, this->actor.shape.rot.y); + this->stateFlags1 |= PLAYER_STATE1_20000000; + return true; +} + +/** + * Update for using telescopes. SCENE_AYASHIISHOP acts quite differently: it has a different camera mode and cannot use + * zooming. + * + * - Stick inputs move the view; shape.rot.y is used as a base position which cannot be looked too far away from. (This + * is not necessarily the same as the original angle of the spawn.) + * - A can be used to zoom (except in SCENE_AYASHIISHOP) + * - B exits, using the RESPAWN_MODE_DOWN entrance + */ +void func_8083A98C(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + Player* this = THIS; + s32 camMode; + + if (play->csCtx.state != CS_STATE_IDLE) { + return; + } + + if (DECR(this->unk_AE8) != 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) { + Message_StartTextbox(play, (play->sceneId == SCENE_AYASHIISHOP) ? 0x2A00 : 0x5E6, NULL); + } + } else { + sPlayerControlInput = play->state.input; + if (play->view.fovy >= 25.0f) { + s16 prevFocusX = thisx->focus.rot.x; + s16 prevFocusY = thisx->focus.rot.y; + s16 inputY; + s16 inputX; + s16 newYaw; // from base position shape.rot.y + + // Pitch: + inputY = sPlayerControlInput->rel.stick_y * 4; + // Add input, clamped to prevent turning too fast + thisx->focus.rot.x += CLAMP(inputY, -0x12C, 0x12C); + // Prevent looking too far up or down + thisx->focus.rot.x = CLAMP(thisx->focus.rot.x, -0x2EE0, 0x2EE0); + + // Yaw: shape.rot.y is used as a fixed starting position + inputX = sPlayerControlInput->rel.stick_x * -4; + // Start from current position: no input -> no change + newYaw = thisx->focus.rot.y - thisx->shape.rot.y; + // Add input, clamped to prevent turning too fast + newYaw += CLAMP(inputX, -0x12C, 0x12C); + // Prevent looking too far left or right of base position + newYaw = CLAMP(newYaw, -0x3E80, 0x3E80); + thisx->focus.rot.y = thisx->shape.rot.y + newYaw; + + if (play->sceneId == SCENE_00KEIKOKU) { + f32 focusDeltaX = (s16)(thisx->focus.rot.x - prevFocusX); + f32 focusDeltaY = (s16)(thisx->focus.rot.y - prevFocusY); + + func_8019FAD8(&gSfxDefaultPos, NA_SE_PL_TELESCOPE_MOVEMENT - SFX_FLAG, + sqrtf(SQ(focusDeltaX) + SQ(focusDeltaY)) / 300.0f); + } + } + + if (play->sceneId == SCENE_AYASHIISHOP) { + camMode = CAM_MODE_DEKUHIDE; + } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { // Zoom + camMode = CAM_MODE_TARGET; + } else { + camMode = CAM_MODE_NORMAL; + } + + // Exit + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + Message_CloseTextbox(play); + + if (play->sceneId == SCENE_00KEIKOKU) { + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTRANCE(ASTRAL_OBSERVATORY, 2); + } else { + u16 entrance; + + if (play->sceneId == SCENE_AYASHIISHOP) { + entrance = ENTRANCE(CURIOSITY_SHOP, 3); + } else { + entrance = ENTRANCE(PIRATES_FORTRESS_INTERIOR, 8); + } + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = entrance; + } + + func_80169EFC(&play->state); + gSaveContext.respawnFlag = -2; + play->transitionType = TRANS_TYPE_CIRCLE; + } + } + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_TELESCOPE); + Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), camMode); +} + +// Set up using a telescope +void Player_InitMode_Telescope(PlayState* play, Player* this) { + this->actor.update = func_8083A98C; + this->actor.draw = NULL; + if (play->sceneId == SCENE_00KEIKOKU) { + this->actor.focus.rot.x = 0xBD8; + this->actor.focus.rot.y = -0x4D74; + this->unk_AE8 = 20; + } else if (play->sceneId == SCENE_AYASHIISHOP) { + this->actor.focus.rot.x = 0x9A6; + this->actor.focus.rot.y = 0x2102; + this->unk_AE8 = 2; + } else { + this->actor.focus.rot.x = 0x9A6; + this->actor.focus.rot.y = 0x2102; + this->unk_AE8 = 20; + } + play->actorCtx.flags |= ACTORCTX_FLAG_1; +} + +void Player_InitMode_B(PlayState* play, Player* this) { + func_8085B384(this, play); +} + +void Player_InitMode_D(PlayState* play, Player* this) { + if (func_8083A878(play, this, 180.0f)) { + this->unk_AE8 = -20; + } +} + +// InitModes 0xA and 0xE +void func_8083ADF0(PlayState* play, Player* this) { + this->linearVelocity = 2.0f; + gSaveContext.entranceSpeed = 2.0f; + + if (func_8083A878(play, this, 120.0f)) { + this->unk_AE8 = -15; + } +} + +void Player_InitMode_F(PlayState* play, Player* this) { + if (gSaveContext.entranceSpeed < 0.1f) { + gSaveContext.entranceSpeed = 0.1f; + } + + 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; + } + } +} + +void func_8083AECC(Player* this, s16 currentYaw, PlayState* play) { + Player_SetAction(play, this, func_8084A5C0, 1); + PlayerAnimation_CopyJointToMorph(play, &this->skelAnime); + this->unk_B38 = 0.0f; + this->unk_B34 = 0.0f; + this->currentYaw = currentYaw; +} + +void func_8083AF30(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A26C, 1); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType]); +} + +void func_8083AF8C(Player* this, s16 currentYaw, PlayState* play) { + Player_SetAction(play, this, func_8084B288, 1); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_walk, 1.0f, 0.0f, + Animation_GetLastFrame(&gPlayerAnim_link_anchor_back_walk), ANIMMODE_ONCE, -6.0f); + this->linearVelocity = 8.0f; + this->currentYaw = currentYaw; +} + +void func_8083B030(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A8E8, 1); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType]); + this->unk_B38 = 0.0f; +} + +void func_8083B090(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084B3B8, 1); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_brake, 6.0f / 3.0f); +} + +void func_8083B0E4(PlayState* play, Player* this, s16 currentYaw) { + this->currentYaw = currentYaw; + Player_SetAction(play, this, func_8084AB4C, 1); + this->unk_B4E = 1200; + this->unk_B4E *= D_8085C3E4; + PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 1.0f, 0.0f, + 0.0f, ANIMMODE_LOOP, -6.0f); +} + +void func_8083B1A0(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + + Player_SetAction(play, this, func_80849FE0, 1); + if (this->unk_B40 < 0.5f) { + anim = D_8085BE84[PLAYER_ANIMGROUP_27][this->modelAnimType]; + } else { + anim = D_8085BE84[PLAYER_ANIMGROUP_26][this->modelAnimType]; + } + Player_AnimationPlayOnce(play, this, anim); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8083B23C(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849A9C, 1); + func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]); + this->unk_AE8 = 1; +} + +void func_8083B29C(Player* this, PlayState* play) { + if (this->linearVelocity != 0.0f) { + func_8083A794(this, play); + } else { + func_8083B1A0(this, play); + } +} + +void func_8083B2E4(Player* this, PlayState* play) { + if (this->linearVelocity != 0.0f) { + func_8083A794(this, play); + } else { + func_80836988(this, play); + } +} + +void func_8083B32C(PlayState* play, Player* this, f32 arg2) { + this->stateFlags1 |= PLAYER_STATE1_40000; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + func_8082DC64(play, this); + + if (func_80837730(play, this, arg2, 500)) { + Player_PlaySfx(this, NA_SE_EV_JUMP_OUT_WATER); + } + func_80123140(play, this); +} + +s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { + if ((!(this->stateFlags1 & PLAYER_STATE1_400) && !(this->stateFlags2 & PLAYER_STATE2_400) && + (this->transformation != PLAYER_FORM_ZORA)) && + ((input == NULL) || + ((((this->interactRangeActor == NULL) || (this->interactRangeActor->id != ACTOR_EN_ZOG)) && + CHECK_BTN_ALL(input->press.button, BTN_A)) && + ((ABS_ALT(this->unk_AAA) < 0x2EE0) && (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && + ((s32)SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) <= + CONVEYOR_SPEED_SLOW))))) { + if (func_8085B08C != this->actionFunc) { + Player_SetAction(play, this, func_808516B4, 0); + } + + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_swimer_swim_deep_start); + this->unk_AAA = 0; + this->stateFlags2 |= PLAYER_STATE2_400; + this->actor.velocity.y = 0.0f; + if (input != NULL) { + this->stateFlags2 |= PLAYER_STATE2_800; + Player_PlaySfx(this, NA_SE_PL_DIVE_BUBBLE); + } + + return true; + } + + if ((this->transformation != PLAYER_FORM_DEKU) && + ((this->stateFlags1 & PLAYER_STATE1_400) || + ((this->stateFlags2 & PLAYER_STATE2_400) && + (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || + (this->unk_AAA < -0x1555)))) && + ((this->actor.depthInWater - this->actor.velocity.y) < this->ageProperties->unk_30)) { + s32 temp_v0_3; + s16 sp2A; + f32 sp24; + + this->stateFlags2 &= ~PLAYER_STATE2_400; + func_8082DC64(play, this); + temp_v0_3 = func_80837730(play, this, this->actor.velocity.y, 0x1F4); + if (this->stateFlags3 & PLAYER_STATE3_8000) { + sp2A = this->unk_B86[1]; + sp24 = this->unk_B48 * 1.5f; + Player_SetAction(play, this, func_8084CA24, 1); + this->stateFlags3 |= PLAYER_STATE3_8000; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + sp24 = CLAMP_MAX(sp24, 13.5f); + this->linearVelocity = Math_CosS(this->unk_AAA) * sp24; + this->actor.velocity.y = -Math_SinS(this->unk_AAA) * sp24; + this->unk_B86[1] = sp2A; + Player_PlaySfx(this, NA_SE_EV_JUMP_OUT_WATER); + return true; + } + + if (temp_v0_3) { + Player_PlaySfx(this, NA_SE_PL_FACE_UP); + } else { + Player_PlaySfx(this, NA_SE_PL_FACE_UP); + } + + if (input != NULL) { + Player_SetAction(play, this, func_808519FC, 1); + if (this->stateFlags1 & PLAYER_STATE1_400) { + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); + } + this->unk_AE8 = 2; + } + + func_8082E438(play, this, + (this->stateFlags1 & PLAYER_STATE1_800) ? &gPlayerAnim_link_swimer_swim_get + : &gPlayerAnim_link_swimer_swim_deep_end); + return true; + } + + return false; +} + +void func_8083B73C(PlayState* play, Player* this, s16 currentYaw) { + Player_SetAction(play, this, func_808513EC, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); + this->actor.shape.rot.y = currentYaw; + this->currentYaw = currentYaw; +} + +void func_8083B798(PlayState* play, Player* this) { + if (this->transformation == PLAYER_FORM_ZORA) { + Player_SetAction(play, this, func_808513EC, 0); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim, 1.0f, + Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim), 0.0f, ANIMMODE_LOOP, 0.0f); + this->unk_B48 = 2.0f; + } else { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim); + this->unk_AE8 = 1; + } + + this->unk_AAA = 0x3E80; +} + +void func_8083B850(PlayState* play, Player* this) { + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + this->prevBoots = PLAYER_BOOTS_ZORA_LAND; + Player_SetAction(play, this, func_80850D68, 0); + this->unk_B48 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)); + Player_OverrideBlureColors(play, this, 1, 8); + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + this->prevBoots = PLAYER_BOOTS_ZORA_LAND; +} + +void func_8083B8D0(PlayState* play, Player* this) { + if (func_80837730(play, this, this->actor.velocity.y, 500)) { + Player_PlaySfx(this, NA_SE_EV_DIVE_INTO_WATER); + if (this->fallDistance > 800) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + } + } +} + +void func_8083B930(PlayState* play, Player* this) { + PlayerAnimationHeader* var_a2; + + if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (func_80857BE8 == this->actionFunc)) { + func_8082DE50(play, this); + + if (func_8084CA24 == this->actionFunc) { + func_8083B850(play, this); + this->stateFlags3 |= PLAYER_STATE3_8000; + } else if ((this->transformation == PLAYER_FORM_ZORA) && (func_8084C94C == this->actionFunc)) { + func_8083B850(play, this); + this->stateFlags3 |= PLAYER_STATE3_8000; + func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); + } 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; + } else if (func_8084C94C == this->actionFunc) { + Player_SetAction(play, this, func_808516B4, 0); + func_8083B798(play, this); + } else { + Player_SetAction(play, this, func_808508C8, 1); + func_8082E438(play, this, + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ? &gPlayerAnim_link_swimer_wait2swim_wait + : &gPlayerAnim_link_swimer_land2swim_wait); + } + } + if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->actor.depthInWater < this->ageProperties->unk_2C)) { + func_8083B8D0(play, this); + } + + this->stateFlags1 |= PLAYER_STATE1_8000000; + this->stateFlags2 |= PLAYER_STATE2_400; + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + + this->unk_AEC = 0.0f; + func_80123140(play, this); +} + +void func_8083BB4C(PlayState* play, Player* this) { + f32 sp1C = this->actor.depthInWater - this->ageProperties->unk_2C; + + if (sp1C < 0.0f) { + this->underwaterTimer = 0; + if ((this->transformation == PLAYER_FORM_ZORA) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + } + func_801A3E38(0); + } else { + func_801A3E38(0x20); + if ((this->transformation == PLAYER_FORM_ZORA) || (sp1C < 10.0f)) { + this->underwaterTimer = 0; + } else if (this->underwaterTimer < 300) { + this->underwaterTimer++; + } + } + + if ((this->actor.parent == NULL) && (func_8084D4EC != this->actionFunc) && (func_8084F3DC != this->actionFunc) && + ((func_8084CA24 != this->actionFunc) || (this->actor.velocity.y < -2.0f))) { + if (this->ageProperties->unk_2C < this->actor.depthInWater) { + if (this->transformation == PLAYER_FORM_GORON) { + func_80834140(play, this, &gPlayerAnim_link_swimer_swim_down); + func_808345C8(); + func_8083B8D0(play, this); + } else if (this->transformation == PLAYER_FORM_DEKU) { + if (this->remainingHopsCounter != 0) { + func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP); + } else { + if ((play->sceneId == SCENE_20SICHITAI) && (this->unk_3CF == 0)) { + if (CHECK_EVENTINF(EVENTINF_50)) { + play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 2); + } else { + play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1); + } + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + this->stateFlags1 |= PLAYER_STATE1_200; + play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED); + } else if ((this->unk_3CF == 0) && + ((play->sceneId == SCENE_30GYOSON) || (play->sceneId == SCENE_31MISAKI) || + (play->sceneId == SCENE_TORIDE))) { + func_80169EFC(&play->state); + func_808345C8(); + } else { + Player_SetAction(play, this, func_808497A0, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } + func_8083B8D0(play, this); + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || + (((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) && + (func_8084E724 != this->actionFunc) && (func_80851B58 != this->actionFunc) && + (func_80851BD4 != this->actionFunc) && (func_808508C8 != this->actionFunc) && + (func_808513EC != this->actionFunc) && (func_80851588 != this->actionFunc) && + (func_808516B4 != this->actionFunc) && (func_808519FC != this->actionFunc) && + (func_80850B18 != this->actionFunc) && (func_80850D68 != this->actionFunc))) { + func_8083B930(play, this); + } + } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->actor.depthInWater < this->ageProperties->unk_24) && + (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (this->skelAnime.moveFlags == 0) { + func_8083B0E4(play, this, this->actor.shape.rot.y); + } + func_8083B32C(play, this, this->actor.velocity.y); + } + } +} + +void func_8083BF54(PlayState* play, Player* this) { + Vec3f sp84; + s32 temp_v0; + s32 var_a2; + + this->actor.terminalVelocity = -20.0f; + this->actor.gravity = REG(68) / 100.0f; + + var_a2 = false; + temp_v0 = func_808340D4(sPlayerCurrentFloorType); + + if (temp_v0 || + (((var_a2 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) || (sPlayerCurrentFloorType == FLOOR_TYPE_15))) || + (sPlayerCurrentFloorType == FLOOR_TYPE_13))) { + f32 temp_fv1_2; + f32 var_fa1; + f32 var_ft4; + f32 var_fv0; + u16 sfxId; + + var_ft4 = fabsf(this->linearVelocity + D_80862B3C) * 20.0f; + if (temp_v0) { + if (sPlayerCurrentFloorType == FLOOR_TYPE_4) { + var_fa1 = 1300.0f; + } else if (sPlayerCurrentFloorType == FLOOR_TYPE_7) { + var_fa1 = 20000.0f; + var_ft4 = 0.0f; + } else { + var_fa1 = 10000.0f; + var_ft4 *= 1.6f; + } + sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG; + } else if (var_a2) { + if (sPlayerCurrentFloorType == FLOOR_TYPE_14) { + var_fa1 = 400.0f; + var_ft4 *= 10.0f; + } else { + var_fa1 = 1300.0f; + var_ft4 = 0.0f; + } + sfxId = NA_SE_PL_SINK_ON_SNOW - SFX_FLAG; + } else { + var_fa1 = (this->transformation == PLAYER_FORM_GORON) ? 10000.0f : 1000.0f; + var_ft4 = 0.0f; + sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG; + } + + var_fa1 = CLAMP_MIN(var_fa1, this->unk_AB8); + + var_fv0 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) ? 200.0f : (var_fa1 - this->unk_AB8) * 0.02f; + var_fv0 = CLAMP(var_fv0, 0.0f, 300.0f); + + temp_fv1_2 = this->unk_AB8; + this->unk_AB8 += var_fv0 - var_ft4; + this->unk_AB8 = CLAMP(this->unk_AB8, 0.0f, var_fa1); + + if ((this->linearVelocity == 0.0f) && (fabsf(this->unk_AB8 - temp_fv1_2) > 2.0f)) { + func_800B8F98(&this->actor, sfxId); + } + + this->actor.gravity -= this->unk_AB8 * 0.004f; + } else { + this->unk_AB8 = 0.0f; + } + + if ((this->stateFlags3 & PLAYER_STATE3_10) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) { + if (this->actor.depthInWater < 50.0f) { + f32 temp_fv1_5; + Vec3f* bodyPartsPos; + f32 var_fa0_3; + f32 var_ft4_2; + + var_ft4_2 = fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].x - this->unk_D6C.x) + + fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].y - this->unk_D6C.y) + + fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].z - this->unk_D6C.z); + var_ft4_2 = CLAMP_MAX(var_ft4_2, 4.0f); + + this->unk_AEC += var_ft4_2; + if (this->unk_AEC > 15.0f) { + this->unk_AEC = 0.0f; + sp84.x = (Rand_ZeroOne() * 10.0f) + this->actor.world.pos.x; + sp84.y = this->actor.world.pos.y + this->actor.depthInWater; + sp84.z = (Rand_ZeroOne() * 10.0f) + this->actor.world.pos.z; + + EffectSsGRipple_Spawn(play, &sp84, 100, 500, 0); + + if ((this->linearVelocity > 4.0f) && !func_801242B4(this) && + ((this->actor.world.pos.y + this->actor.depthInWater) < + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y)) { + func_80837730(play, this, 20.0f, + (fabsf(this->linearVelocity) * 50.0f) + (this->actor.depthInWater * 5.0f)); + } else if (this->stateFlags3 & PLAYER_STATE3_8000) { + s32 i; + + var_fa0_3 = (this->actor.world.pos.y + this->actor.depthInWater) - 5.0f; + bodyPartsPos = this->bodyPartsPos; + + for (i = 0; i < PLAYER_BODYPART_MAX; i++, bodyPartsPos++) { + temp_fv1_5 = bodyPartsPos->y - var_fa0_3; + + if (temp_fv1_5 > 0.0f) { + func_80837730(play, this, 20.0f, + fabsf(this->linearVelocity) * 20.0f + (temp_fv1_5 * 10.0f)); + } + } + } + } + } + + if (this->ageProperties->unk_2C < this->actor.depthInWater) { + s32 numBubbles = 0; + s32 i; + f32 var_fv1; + + var_fv1 = (this->stateFlags1 & PLAYER_STATE1_4000000) + ? -fabsf(this->linearVelocity) + : ((func_80850D68 == this->actionFunc) + ? (ABS_ALT(this->unk_B8A) * -0.004f) + (this->unk_B48 * -0.38f) + : this->actor.velocity.y); + + if ((var_fv1 > -1.0f) || ((this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (Rand_ZeroOne() < 0.2f) { + numBubbles = 1; + } + } else { + numBubbles = var_fv1 * -0.3f; + if (numBubbles > 8) { + numBubbles = 8; + } + } + + for (i = 0; i < numBubbles; i++) { + EffectSsBubble_Spawn(play, &this->actor.world.pos, 20.0f, 10.0f, 20.0f, 0.13f); + } + } + } +} + +s32 func_8083C62C(Player* this, s32 arg1) { + Actor* targetedActor = this->targetedActor; + Vec3f headPos; + s16 pitchTarget; + s16 yawTarget; + + headPos.x = this->actor.world.pos.x; + 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); + + Math_SmoothStepToS(&this->actor.focus.rot.y, yawTarget, 4, 0x2710, 0); + Math_SmoothStepToS(&this->actor.focus.rot.x, pitchTarget, 4, 0x2710, 0); + + this->unk_AA6 |= 2; + + return func_80832754(this, arg1); +} + +Vec3f D_8085D218 = { 0.0f, 100.0f, 40.0f }; + +void func_8083C6E8(Player* this, PlayState* play) { + if (this->targetedActor != NULL) { + if (func_800B7128(this) || func_8082EF20(this)) { + func_8083C62C(this, true); + } else { + func_8083C62C(this, false); + } + return; + } + + if (sPlayerCurrentFloorType == FLOOR_TYPE_11) { + Math_SmoothStepToS(&this->actor.focus.rot.x, -20000, 10, 4000, 800); + } else { + s16 sp46 = 0; + f32 yIntersect; + Vec3f pos; + s16 temp_v0; + + yIntersect = func_80835D2C(play, this, &D_8085D218, &pos); + if (yIntersect > BGCHECK_Y_MIN) { + temp_v0 = Math_Atan2S_XY(40.0f, this->actor.world.pos.y - yIntersect); + sp46 = CLAMP(temp_v0, -4000, 4000); + } + this->actor.focus.rot.y = this->actor.shape.rot.y; + Math_SmoothStepToS(&this->actor.focus.rot.x, sp46, 14, 4000, 30); + } + + func_80832754(this, func_800B7128(this) || func_8082EF20(this)); +} + +void func_8083C85C(Player* this) { + Math_ScaledStepToS(&this->upperLimbRot.x, D_80862B3C * -500.0f, 900); + this->headLimbRot.x = (-(f32)this->upperLimbRot.x * 0.5f); + this->unk_AA6 |= 0x48; +} + +void func_8083C8E8(Player* this, PlayState* play) { + if ((func_800B7128(this) == 0) && (func_8082EF20(this) == 0) && + ((this->linearVelocity > 5.0f) || (D_80862B3C != 0.0f))) { + s16 temp1; + s16 temp2; + + temp1 = this->linearVelocity * 200.0f; + temp2 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y) * this->linearVelocity * 0.1f; + + temp1 = CLAMP(temp1, -0xFA0, 0xFA0); + + temp1 += (s16)(s32)(D_80862B3C * -500.0f); + + temp1 = CLAMP(temp1, -0x2EE0, 0x2EE0); + + temp2 = CLAMP(-temp2, -0xFA0, 0xFA0); + + Math_ScaledStepToS(&this->upperLimbRot.x, temp1, 0x384); + this->headLimbRot.x = -(f32)this->upperLimbRot.x * 0.5f; + Math_ScaledStepToS(&this->headLimbRot.z, temp2, 0x12C); + Math_ScaledStepToS(&this->upperLimbRot.z, temp2, 0xC8); + this->unk_AA6 |= 0x168; + } else { + func_8083C6E8(this, play); + } +} + +void func_8083CB04(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, s16 arg5) { + Math_AsymStepToF(&this->linearVelocity, arg1, arg3, arg4); + Math_ScaledStepToS(&this->currentYaw, arg2, arg5); +} + +void func_8083CB58(Player* this, f32 arg1, s16 arg2) { + func_8083CB04(this, arg1, arg2, REG(19) / 100.0f, 1.5f, REG(27)); +} + +s32 func_8083CBC4(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6) { + s16 temp_v0 = this->currentYaw - arg2; + + if ((this->unk_B50 * 1.5f) < fabsf(this->linearVelocity)) { + arg5 *= 4.0f; + arg3 *= 4.0f; + } + + if (ABS_ALT(temp_v0) > 0x6000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, arg3) == 0) { + return false; + } + + this->currentYaw = arg2; + } else { + Math_AsymStepToF(&this->linearVelocity, arg1, arg4, arg5); + Math_ScaledStepToS(&this->currentYaw, arg2, arg6); + } + + return true; +} + +struct_8085D224 D_8085D224[][2] = { + { + { &gPlayerAnim_link_uma_left_up, 35.17f, 6.6099997f }, + { &gPlayerAnim_link_uma_right_up, -34.16f, 7.91f }, + }, + { + { &gPlayerAnim_cl_uma_leftup, 22.718237f, 2.3294117f }, + { &gPlayerAnim_cl_uma_rightup, -22.0f, 1.9800001f }, + }, +}; + +u16 D_8085D254[] = { + 0x1804, // PLAYER_FORM_GORON + 0x1805, // PLAYER_FORM_ZORA + 0x1806, // PLAYER_FORM_DEKU + 0x1806, // PLAYER_FORM_HUMAN +}; + +u16 D_8085D25C[] = { + 0x1804, // PLAYER_FORM_FIERCE_DEITY + 0x1804, // PLAYER_FORM_GORON + 0x1805, // PLAYER_FORM_ZORA + 0x1806, // PLAYER_FORM_DEKU +}; + +// Player_MountHorse +s32 func_8083CCB4(Player* this, PlayState* play) { + EnHorse* rideActor = (EnHorse*)this->rideActor; + + if (rideActor != NULL) { + if ((rideActor->type != HORSE_TYPE_2) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + rideActor->actor.textId = D_8085D254[this->transformation - 1]; + Player_TalkWithPlayer(play, &rideActor->actor); + return true; + } + } + + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + } else if ((rideActor->type == HORSE_TYPE_2) && (this->transformation != PLAYER_FORM_HUMAN)) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + rideActor->actor.textId = D_8085D25C[this->transformation]; + Player_TalkWithPlayer(play, &rideActor->actor); + return true; + } + } + + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + } else { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + s32 pad[2]; + f32 sp28 = Math_CosS(rideActor->actor.shape.rot.y); + f32 sp24 = Math_SinS(rideActor->actor.shape.rot.y); + struct_8085D224* entry; + f32 temp_fv0; + f32 temp_fv1; + + func_80832558(play, this, func_80837BD0); + + this->stateFlags1 |= PLAYER_STATE1_800000; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER; + this->isBurning = false; + + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + entry = D_8085D224[0]; + } else { + entry = D_8085D224[1]; + } + if (this->mountSide >= 0) { + entry++; + } + + temp_fv0 = entry->unk_4; + temp_fv1 = entry->unk_8; + this->actor.world.pos.x = + rideActor->actor.world.pos.x + rideActor->riderPos.x + ((temp_fv0 * sp28) + (temp_fv1 * sp24)); + this->actor.world.pos.z = + rideActor->actor.world.pos.z + rideActor->riderPos.z + ((temp_fv1 * sp28) - (temp_fv0 * sp24)); + this->unk_B48 = rideActor->actor.world.pos.y - this->actor.world.pos.y; + + this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; + + Actor_MountHorse(play, this, &rideActor->actor); + Player_AnimationPlayOnce(play, this, entry->anim); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); + this->actor.parent = this->rideActor; + func_8082DAD4(this); + Actor_DeactivateLens(play); + + return true; + } + } + } + + return false; +} + +PlayerAnimationHeader* D_8085D264[] = { + &gPlayerAnim_link_normal_down_slope_slip, + &gPlayerAnim_link_normal_up_slope_slip, +}; + +s32 func_8083CF68(PlayState* play, Player* this) { + if (!Player_InBlockingCsMode(play, this) && !(this->cylinder.base.ocFlags1 & OC1_HIT)) { + if ((func_80853D68 != this->actionFunc) && (func_80857BE8 != this->actionFunc) && + (D_80862B40 == FLOOR_EFFECT_1)) { + s16 playerVelYaw = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); + Vec3f slopeNormal; + s16 downwardSlopeYaw; + s16 velYawToDownwardSlope; + f32 slopeSlowdownSpeed; + f32 temp_fv1; + f32 var_fa1; + f32 slopeSlowdownSpeedStep; + + Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw); + velYawToDownwardSlope = downwardSlopeYaw - playerVelYaw; + + if (ABS_ALT(velYawToDownwardSlope) > 0x3E80) { // 87.9 degrees + var_fa1 = (func_80857BE8 == this->actionFunc) ? Math_CosS(this->unk_B6C) : slopeNormal.y; + slopeSlowdownSpeed = (1.0f - var_fa1) * 40.0f; + temp_fv1 = fabsf(this->actor.speed) + slopeSlowdownSpeed; + slopeSlowdownSpeedStep = SQ(temp_fv1) * 0.011f; + slopeSlowdownSpeedStep = CLAMP_MIN(slopeSlowdownSpeedStep, 2.2f); + + // slows down speed as player is climbing a slope + this->pushedYaw = downwardSlopeYaw; + Math_StepToF(&this->pushedSpeed, slopeSlowdownSpeed, slopeSlowdownSpeedStep); + } else { + Player_SetAction(play, this, func_80853D68, 0); + func_8082DE50(play, this); + func_8082E514(play, this, D_8085D264[this->unk_AE7]); + this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); + this->currentYaw = downwardSlopeYaw; + if (D_80862B28 >= 0) { + this->unk_AE7 = 1; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); + } + + return true; + } + } + } + + return false; +} + +void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) { + Item00Type dropType = GIFIELD_GET_DROP_TYPE(giEntry->field); + + if (!(giEntry->field & GIFIELD_NO_COLLECTIBLE)) { + Item_DropCollectible(play, &this->actor.world.pos, dropType | 0x8000); + + if ((dropType == ITEM00_BOMBS_A) || (dropType == ITEM00_ARROWS_30) || (dropType == ITEM00_ARROWS_40) || + (dropType == ITEM00_ARROWS_50) || (dropType == ITEM00_RUPEE_GREEN) || (dropType == ITEM00_RUPEE_BLUE) || + (dropType == ITEM00_RUPEE_RED) || (dropType == ITEM00_RUPEE_PURPLE) || (dropType == ITEM00_RUPEE_HUGE)) { + return; + } + } + + Item_Give(play, giEntry->itemId); + play_sound((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); +} + +s32 func_8083D23C(Player* this, PlayState* play) { + if (gSaveContext.save.saveInfo.playerData.health != 0) { + Actor* interactRangeActor = this->interactRangeActor; + + if (interactRangeActor != NULL) { + if (this->getItemId > GI_NONE) { + if (this->getItemId < GI_MAX) { + GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; + + interactRangeActor->parent = &this->actor; + if ((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) || + ((s16)giEntry->objectId == OBJECT_GI_BOMB_2)) { + func_8082DCA0(play, this); + func_80838830(this, giEntry->objectId); + + if (!(this->stateFlags2 & PLAYER_STATE2_400) || + (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER)) { + Player_StopCutscene(this); + func_808324EC(play, this, func_80837C78, play->playerCsIds[PLAYER_CS_ID_ITEM_GET]); + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) + ? &gPlayerAnim_pn_getB + : &gPlayerAnim_link_demo_get_itemB); + } + + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); + func_8082DAD4(this); + + return true; + } + + func_8083D168(play, this, giEntry); + this->getItemId = GI_NONE; + } + } else if (this->csMode == PLAYER_CSMODE_0) { + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + if (this->getItemId != GI_NONE) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + GetItemEntry* giEntry = &sGetItemTable[-this->getItemId - 1]; + EnBox* chest = (EnBox*)interactRangeActor; + + if ((giEntry->itemId != ITEM_NONE) && + (((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) && + (giEntry->field & GIFIELD_40)) || + (((Item_CheckObtainability(giEntry->itemId) != ITEM_NONE)) && + (giEntry->field & GIFIELD_20)))) { + this->getItemId = + (giEntry->itemId == ITEM_MASK_CAPTAIN) ? -GI_RECOVERY_HEART : -GI_RUPEE_BLUE; + giEntry = &sGetItemTable[-this->getItemId - 1]; + } + + func_80832558(play, this, func_80837C78); + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); + func_80838830(this, giEntry->objectId); + + this->actor.world.pos.x = + interactRangeActor->world.pos.x - + (Math_SinS(interactRangeActor->shape.rot.y) * this->ageProperties->unk_9C); + this->actor.world.pos.z = + interactRangeActor->world.pos.z - + (Math_CosS(interactRangeActor->shape.rot.y) * this->ageProperties->unk_9C); + this->actor.world.pos.y = interactRangeActor->world.pos.y; + this->currentYaw = this->actor.shape.rot.y = interactRangeActor->shape.rot.y; + + func_8082DAD4(this); + if ((giEntry->itemId != ITEM_NONE) && (giEntry->gid >= 0) && + (Item_CheckObtainability(giEntry->itemId) == ITEM_NONE)) { + this->csId = chest->csId2; + func_8082DB90(play, this, this->ageProperties->openChestAnim); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | + ANIM_FLAG_NOMOVE | ANIM_FLAG_80); + this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER; + chest->unk_1EC = 1; + } else { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_box_kick); + chest->unk_1EC = -1; + } + + return true; + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->transformation != PLAYER_FORM_DEKU)) { + if ((this->heldActor == NULL) || Player_IsHoldingHookshot(this)) { + EnBom* bomb = (EnBom*)interactRangeActor; + + if (((this->transformation != PLAYER_FORM_GORON) && + (((bomb->actor.id == ACTOR_EN_BOM) && bomb->isPowderKeg) || + ((interactRangeActor->id == ACTOR_EN_ISHI) && (interactRangeActor->params & 1)) || + (interactRangeActor->id == ACTOR_EN_MM)))) { + return false; + } + + this->stateFlags2 |= PLAYER_STATE2_10000; + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + func_80832558(play, this, func_808379C0); + func_8082DAD4(this); + this->stateFlags1 |= PLAYER_STATE1_800; + + return true; + } + } + } + } + } + } + } + + return false; +} + +// Player_SetAction_Throwing +void func_8083D6DC(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084E65C, 1); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_28][this->modelAnimType]); +} + +// Determines whether a held actor should be dropped or thrown: false implies droppable. +s32 func_8083D738(Player* this, Actor* heldActor) { + if ((heldActor != NULL) && !(heldActor->flags & ACTOR_FLAG_800000) && + ((this->linearVelocity < 1.1f) || (heldActor->id == ACTOR_EN_BOM_CHU))) { + return false; + } + return true; +} + +s32 func_8083D78C(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)) { + if (!func_808313A8(play, this, this->heldActor)) { + if (!func_8083D738(this, this->heldActor)) { + Player_SetAction(play, this, func_8084E58C, 1); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_29][this->modelAnimType]); + return true; + } + func_8083D6DC(this, play); + } + + return true; + } + } + return false; +} + +s32 func_8083D860(Player* this, PlayState* play) { + if ((this->wallHeight >= 79.0f) && + (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) || + (this->actor.depthInWater < this->ageProperties->unk_2C))) { + s32 var_t0 = (sPlayerCurrentWallFlags & WALL_FLAG_3) ? 2 : 0; + s32 temp_t2 = sPlayerCurrentWallFlags & WALL_FLAG_1; + + if ((var_t0 != 0) || temp_t2 || + SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { + CollisionPoly* wallPoly = this->actor.wallPoly; + f32 sp78; + f32 sp74; + f32 zOut; + f32 yOut; + Vec3f sp48[3]; + s32 i; + f32 sp40; + Vec3f* sp3C; + f32 xOut; + + yOut = xOut = 0.0f; + if (var_t0 != 0) { + sp78 = this->actor.world.pos.x; + sp74 = this->actor.world.pos.z; + } else { + sp3C = sp48; + CollisionPoly_GetVerticesByBgId(wallPoly, this->actor.wallBgId, &play->colCtx, sp48); + sp78 = xOut = sp48[0].x; + sp74 = zOut = sp48[0].z; + yOut = sp48[0].y; + + for (i = 1; i < ARRAY_COUNT(sp48); i++) { + sp3C++; + + if (sp78 > sp3C->x) { + sp78 = sp3C->x; + } else if (xOut < sp3C->x) { + xOut = sp3C->x; + } + + if (sp74 > sp3C->z) { + sp74 = sp3C->z; + } else if (zOut < sp3C->z) { + zOut = sp3C->z; + } + + if (yOut > sp3C->y) { + yOut = sp3C->y; + } + } + + sp78 = (sp78 + xOut) * 0.5f; + sp74 = (sp74 + zOut) * 0.5f; + + xOut = ((this->actor.world.pos.x - sp78) * COLPOLY_GET_NORMAL(wallPoly->normal.z)) - + ((this->actor.world.pos.z - sp74) * COLPOLY_GET_NORMAL(wallPoly->normal.x)); + + sp40 = this->actor.world.pos.y - yOut; + yOut = ((s32)((sp40 / 15.0f) + 0.5f) * 15.0f) - sp40; + xOut = fabsf(xOut); + } + + if (xOut < 8.0f) { + f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); + f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); + f32 wallDistance = this->wallDistance; + PlayerAnimationHeader* anim; + + func_80832558(play, this, func_80837C20); + + this->stateFlags1 |= PLAYER_STATE1_200000; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + + if ((var_t0 != 0) || temp_t2) { + if ((this->unk_AE7 = var_t0) != 0) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + anim = &gPlayerAnim_link_normal_Fclimb_startA; + + } else { + anim = &gPlayerAnim_link_normal_Fclimb_hold2upL; + } + wallDistance = (this->ageProperties->unk_3C + 4.0f) - wallDistance; + } else { + anim = this->ageProperties->unk_AC; + wallDistance = 20.5f; + } + + this->unk_AE8 = -2; + this->actor.world.pos.y += yOut; + + this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; + } else { + anim = this->ageProperties->unk_B0; + wallDistance = (this->ageProperties->unk_38 - this->ageProperties->unk_3C) + 17.0f; + this->unk_AE8 = -4; + + this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE + } + + this->actor.world.pos.x = (wallDistance * wallPolyNormalX) + sp78; + this->actor.world.pos.z = (wallDistance * wallPolyNormalZ) + sp74; + func_8082DAD4(this); + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + Player_AnimationPlayOnce(play, this, anim); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | + ANIM_FLAG_80); + return true; + } + } + } + + return false; +} + +void func_8083DCC4(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + func_8083172C(play, this, func_8084FC0C, 0); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 4.0f / 3.0f); +} + +s32 func_8083DD1C(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { + CollisionPoly* wallPoly; + s32 bgId; + Vec3f sp74; + Vec3f sp68; + Vec3f sp5C; + f32 cos = Math_CosS(this->actor.shape.rot.y); + f32 sin = Math_SinS(this->actor.shape.rot.y); + + sp74.x = this->actor.world.pos.x + (arg5 * sin); + sp74.z = this->actor.world.pos.z + (arg5 * cos); + sp68.x = this->actor.world.pos.x + (arg4 * sin); + sp68.z = this->actor.world.pos.z + (arg4 * cos); + sp74.y = sp68.y = this->actor.world.pos.y + arg2; + + if (BgCheck_EntityLineTest2(&play->colCtx, &sp74, &sp68, &sp5C, &this->actor.wallPoly, true, false, false, true, + &bgId, &this->actor)) { + f32 wallPolyNormalX; + f32 wallPolyNormalZ; + + wallPoly = this->actor.wallPoly; + this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT; + this->actor.wallBgId = bgId; + sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, wallPoly, bgId); + + wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); + wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); + + Math_ScaledStepToS(&this->actor.shape.rot.y, Math_Atan2S_XY(-wallPolyNormalZ, -wallPolyNormalX), 0x320); + + this->currentYaw = this->actor.shape.rot.y; + this->actor.world.pos.x = sp5C.x - (Math_SinS(this->actor.shape.rot.y) * arg3); + this->actor.world.pos.z = sp5C.z - (Math_CosS(this->actor.shape.rot.y) * arg3); + + return true; + } + + this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT; + return false; +} + +void func_8083DEE4(PlayState* play, Player* this) { + f32 temp_fv0 = this->ageProperties->unk_38; + + func_8083DD1C(play, this, 268 * 0.1f, temp_fv0 + 5.0f, temp_fv0 + 15.0f, 0.0f); +} + +void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + if (!func_80832558(play, this, func_80837BF8)) { + Player_SetAction(play, this, func_8084ED9C, 0); + } + + Player_AnimationPlayOnce(play, this, anim); + func_8082DAD4(this); + + this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; +} + +s32 func_8083DFC4(Player* this, PlayState* play) { + if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + (D_80862B20 < 0x3000)) { + if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) { + return true; + } + + if (!func_801242B4(this) && ((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_4)) && + (sPlayerCurrentWallFlags & WALL_FLAG_6) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + (this->wallHeight >= 39.0f)) { + this->stateFlags2 |= PLAYER_STATE2_1; + + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { + DynaPolyActor* dyna; + + if ((this->actor.wallBgId != BGCHECK_SCENE) && + ((dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId)) != NULL)) { + this->rightHandActor = &dyna->actor; + } else { + this->rightHandActor = NULL; + } + + func_8083DF38(this, &gPlayerAnim_link_normal_push_wait, play); + return true; + } + } + } + + return false; +} + +s32 func_8083E14C(PlayState* play, Player* this) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + ((this->stateFlags2 & PLAYER_STATE2_10) || CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) { + DynaPolyActor* var_v1 = NULL; + + if (this->actor.wallBgId != BGCHECK_SCENE) { + var_v1 = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + } + + if (&var_v1->actor == this->rightHandActor) { + if (this->stateFlags2 & PLAYER_STATE2_10) { + return true; + } + return false; + } + } + + func_808369F4(this, play); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_wait_end); + this->stateFlags2 &= ~PLAYER_STATE2_10; + return true; +} + +void func_8083E234(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084EE50, 0); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_start); + this->stateFlags2 |= PLAYER_STATE2_10; +} + +void func_8083E28C(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084EF9C, 0); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_34][this->modelAnimType]); + this->stateFlags2 |= PLAYER_STATE2_10; +} + +void func_8083E2F4(Player* this, PlayState* play) { + this->stateFlags1 &= ~(PLAYER_STATE1_200000 | PLAYER_STATE1_8000000); + func_80833AA0(this, play); + + if (this->transformation == PLAYER_FORM_DEKU) { + this->linearVelocity = -1.7f; + } else { + this->linearVelocity = -0.4f; + } +} + +s32 func_8083E354(Player* this, PlayState* play) { + if (!CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && + (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT)) { + if ((sPlayerCurrentWallFlags & WALL_FLAG_3) || (sPlayerCurrentWallFlags & WALL_FLAG_1) || + SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { + return false; + } + } + + func_8083E2F4(this, play); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); + return true; +} + +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) { + func_8083C62C(this, func_800B7128(this) || func_8082EF20(this)); + } + + temp_fv1 = fabsf(sp1C) / 0x8000; + if (((SQ(temp_fv1) * 50.0f) + 6.0f) < arg1) { + return 1; + } + + if ((((1.0f - temp_fv1) * 10.0f) + 6.8f) < arg1) { + return -1; + } + return 0; +} + +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)) { + *arg2 *= Math_SinS(var_a2); + + if (*arg2 != 0.0f) { + *arg3 = (((temp_v1 >= 0) ? 1 : -1) * 0x4000) + this->actor.shape.rot.y; + } else { + *arg3 = this->actor.shape.rot.y; + } + + if (this->targetedActor != 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) { + return func_8083E404(this, *arg2, *arg3); + } + + func_8083C6E8(this, play); + if ((*arg2 != 0.0f) && (var_a2 < 0x1770)) { + return 1; + } + + if ((Math_SinS(0x4000 - (var_a2 >> 1)) * 200.0f) < *arg2) { + return -1; + } + } + return 0; +} + +s32 func_8083E758(Player* this, f32* arg1, s16* arg2) { + f32 temp_fv0; + u16 temp_v0; + s16 var_v1; + + var_v1 = *arg2 - this->actor.shape.rot.y; + temp_v0 = ABS_ALT(var_v1); + temp_fv0 = Math_CosS(temp_v0); + *arg1 *= temp_fv0; + + // Can't be (*arg1 != 0.0f) + if (*arg1 != 0) { + if (temp_fv0 > 0.0f) { + return 1; + } + return -1; + } + return 0; +} + +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]); + u16 temp; + + temp = (ABS_ALT(temp_a0) - 0x2000); + if ((temp < 0x4000) || (this->unk_B4C != 0)) { + return -1; + } + return 1; + } + + return 0; +} + +void func_8083E8E0(Player* this, f32 arg1, s16 arg2) { + s16 temp = arg2 - this->actor.shape.rot.y; + + if (arg1 > 0.0f) { + if (temp < 0) { + this->unk_B44 = 0.0f; + } else { + this->unk_B44 = 1.0f; + } + } + + Math_StepToF(&this->unk_B40, this->unk_B44, 0.3f); +} + +void func_8083E958(PlayState* play, Player* this) { + PlayerAnimation_BlendToJoint(play, &this->skelAnime, func_8082EF54(this), this->unk_B38, func_8082EF9C(this), + this->unk_B38, this->unk_B40, this->blendTableBuffer); +} + +s32 func_8083E9C4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { + f32 temp_fv0; + + if ((arg3 == 0.0f) && (arg1 > 0.0f)) { + arg3 = arg2; + } + temp_fv0 = (arg0 + arg1) - arg3; + if (((temp_fv0 * arg1) >= 0.0f) && (((temp_fv0 - arg1) * arg1) < 0.0f)) { + return true; + } + return false; +} + +void func_8083EA44(Player* this, f32 arg1) { + s32 sp24; + f32 updateScale = R_UPDATE_RATE / 2.0f; + + arg1 *= updateScale; + if (arg1 < -7.25f) { + arg1 = -7.25f; + } else if (arg1 > 7.25f) { + arg1 = 7.25f; + } + + sp24 = func_8083E9C4(this->unk_B38, arg1, 29.0f, 10.0f); + + if (sp24 || func_8083E9C4(this->unk_B38, arg1, 29.0f, 24.0f)) { + Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity); + if (this->linearVelocity > 4.0f) { + this->stateFlags2 |= PLAYER_STATE2_8; + } + this->actor.shape.unk_17 = sp24 ? 1 : 2; + } + + this->unk_B38 += arg1; + if (this->unk_B38 < 0.0f) { + this->unk_B38 += 29.0f; + } else if (this->unk_B38 >= 29.0f) { + this->unk_B38 -= 29.0f; + } +} + +void Player_ChooseIdleAnim(PlayState* play, Player* this) { + PlayerAnimationHeader* anim; + u32 healthIsCritical; + PlayerAnimationHeader** animPtr; + s32 animIndex; + s32 rand; + f32 morphFrames; + s16 lastFrame; + + if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) || + ((this->actor.id == ACTOR_PLAYER) && + (((this->targetedActor != 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)))))) { + this->stateFlags2 &= ~PLAYER_STATE2_10000000; + anim = func_8082ED20(this); + } else { + this->stateFlags2 |= PLAYER_STATE2_10000000; + + if (this->stateFlags1 & PLAYER_STATE1_800) { + anim = func_8082ED20(this); + } else { + animIndex = play->roomCtx.curRoom.behaviorType2; + + if (healthIsCritical) { + if (this->unk_AA4 >= 0) { + animIndex = 7; + this->unk_AA4 = -1; + } else { + animIndex = 8; + } + } else { + rand = Rand_ZeroOne() * 5.0f; + if (rand < 4) { + if (((rand != 0) && (rand != 3)) || + ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) && + ((rand == 3) || (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)))) { + if ((rand == 0) && Player_IsHoldingTwoHandedWeapon(this)) { + rand = 4; + } + animIndex = rand + 9; + } + } + } + + animPtr = &sPlayerIdleAnimations[animIndex][0]; + if (this->modelAnimType != PLAYER_ANIMTYPE_1) { + animPtr = &sPlayerIdleAnimations[animIndex][1]; + } + anim = *animPtr; + } + } + + lastFrame = 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)) { + morphFrames = 0.0f; + } else { + morphFrames = -6.0f; + } + + PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, lastFrame, ANIMMODE_ONCE, + morphFrames); +} + +void func_8083EE60(Player* this, PlayState* play) { + f32 temp_fv0; + f32 var_fs0; + + if (this->unk_B34 < 1.0f) { + f32 temp_fs0 = R_UPDATE_RATE / 2.0f; + + func_8083EA44(this, REG(35) / 1000.0f); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType], + this->unk_B38); + this->unk_B34 += (1.0f * 1.0f) * temp_fs0; + if (this->unk_B34 >= 1.0f) { + this->unk_B34 = 1.0f; + } + var_fs0 = this->unk_B34; + } else { + temp_fv0 = this->linearVelocity - (REG(48) / 100.0f); + + if (temp_fv0 < 0.0f) { + var_fs0 = 1.0f; + func_8083EA44(this, ((REG(35)) / 1000.0f) + (((REG(36)) / 1000.0f) * this->linearVelocity)); + + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType], + this->unk_B38); + } else { + var_fs0 = (REG(37) / 1000.0f) * temp_fv0; + if (var_fs0 < 1.0f) { + func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); + } else { + var_fs0 = 1.0f; + func_8083EA44(this, (REG(39) / 100.0f) + ((REG(38) / 1000.0f) * temp_fv0)); + } + + PlayerAnimation_LoadToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType], + this->unk_B38); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, &gPlayerAnim_link_normal_back_run, + this->unk_B38 * (16.0f / 29.0f)); + } + } + if (var_fs0 < 1.0f) { + PlayerAnimation_InterpJointMorph(play, &this->skelAnime, 1.0f - var_fs0); + } +} + +void func_8083F144(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A794, 1); + func_8082E438(play, this, &gPlayerAnim_link_normal_back_brake); +} + +s32 func_8083F190(Player* this, f32* arg1, s16* arg2, PlayState* play) { + if (this->linearVelocity > 6.0f) { + func_8083F144(this, play); + return true; + } + + if (*arg1 != 0.0f) { + if (func_80832F24(this)) { + *arg1 = 0.0f; + *arg2 = this->currentYaw; + } else { + return true; + } + } + return false; +} + +void func_8083F230(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A884, 1); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_brake_end); +} + +void func_8083F27C(PlayState* play, Player* this) { + f32 temp_fv0; + PlayerAnimationHeader* sp38; + PlayerAnimationHeader* sp34; + + sp38 = D_8085BE84[PLAYER_ANIMGROUP_23][this->modelAnimType]; + sp34 = D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType]; + + this->skelAnime.animation = sp38; + + func_8083EA44(this, (REG(30) / 1000.0f) + ((REG(32) / 1000.0f) * this->linearVelocity)); + + temp_fv0 = this->unk_B38 * (16.0f / 29.0f); + PlayerAnimation_BlendToJoint(play, &this->skelAnime, sp34, temp_fv0, sp38, temp_fv0, this->unk_B40, + this->blendTableBuffer); +} + +void func_8083F358(Player* this, s32 arg1, PlayState* play) { + PlayerAnimationHeader* var_v0; + f32 var_fv1; + s16 var_a1; + + if (ABS_ALT(D_80862B28) < 0xE38) { + var_a1 = 0; + } else { + var_a1 = CLAMP(D_80862B28, -0x2AAA, 0x2AAA); + } + + Math_ScaledStepToS(&this->unk_B70, var_a1, 0x190); + if ((this->modelAnimType == PLAYER_ANIMTYPE_3) || ((this->unk_B70 == 0) && (this->unk_AB8 <= 0.0f))) { + if (arg1 == 0) { + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38); + } else { + PlayerAnimation_LoadToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38); + } + return; + } + + if (this->unk_B70 != 0) { + var_fv1 = this->unk_B70 / (f32)0x2AAA; + } else { + var_fv1 = this->unk_AB8 * 0.0006f; + } + + var_fv1 *= fabsf(this->linearVelocity) * 0.5f; + if (var_fv1 > 1.0f) { + var_fv1 = 1.0f; + } + + if (var_fv1 < 0.0f) { + var_v0 = &gPlayerAnim_link_normal_climb_down; + var_fv1 = -var_fv1; + } else { + var_v0 = &gPlayerAnim_link_normal_climb_up; + } + + if (arg1 == 0) { + PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38, var_v0, this->unk_B38, var_fv1, this->blendTableBuffer); + } else { + PlayerAnimation_BlendToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38, var_v0, this->unk_B38, var_fv1, this->blendTableBuffer); + } +} + +void func_8083F57C(Player* this, PlayState* play) { + f32 temp_fv0; + f32 var_fs0; + + if (this->unk_B34 < 1.0f) { + f32 temp_fs0; + + temp_fs0 = R_UPDATE_RATE / 2.0f; + func_8083EA44(this, REG(35) / 1000.0f); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38); + + // required + this->unk_B34 += 1 * temp_fs0; + if (this->unk_B34 >= 1.0f) { + this->unk_B34 = 1.0f; + } + var_fs0 = this->unk_B34; + } else { + temp_fv0 = (this->linearVelocity - (REG(48) / 100.0f)); + if (temp_fv0 < 0.0f) { + var_fs0 = 1.0f; + func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); + func_8083F358(this, 0, play); + } else { + var_fs0 = (REG(37) / 1000.0f) * temp_fv0; + if (var_fs0 < 1.0f) { + func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); + } else { + var_fs0 = 1.0f; + func_8083EA44(this, (REG(39) / 100.0f) + ((REG(38) / 1000.0f) * temp_fv0)); + } + func_8083F358(this, 1, play); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, func_8082EEE0(this), this->unk_B38 * (20.0f / 29.0f)); + } + } + + if (var_fs0 < 1.0f) { + PlayerAnimation_InterpJointMorph(play, &this->skelAnime, 1.0f - var_fs0); + } +} + +void func_8083F828(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) { + arg1->x = randPlusMinusPoint5Scaled(arg3) + arg0->x; + arg1->y = randPlusMinusPoint5Scaled(arg4) + (arg0->y + arg2); + arg1->z = randPlusMinusPoint5Scaled(arg3) + arg0->z; +} + +Color_RGBA8 D_8085D26C = { 255, 255, 255, 255 }; +Vec3f D_8085D270 = { 0.0f, 0.04f, 0.0f }; + +s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 randAccelWeight, s32 scale, + s32 scaleStep, s32 useLighting) { + static Vec3f D_8085D27C = { 0.0f, 0.0f, 0.0f }; + static Vec3f D_8085D288 = { 0.0f, 0.0f, 0.0f }; + + if ((countMax < 0) || (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG)) { + s32 count = func_80173B48(&play->state) / 20000000; + Vec3f pos; + s32 i; + + count = (count >= ABS_ALT(countMax)) ? ABS_ALT(countMax) : count; + for (i = 0; i < count; i++) { + func_8083F828(&this->actor.world.pos, &pos, 0.0f, 40.0f, 10.0f); + D_8085D27C.x = randPlusMinusPoint5Scaled(3.0f); + D_8085D27C.z = randPlusMinusPoint5Scaled(3.0f); + EffectSsDust_Spawn(play, 0, &pos, &D_8085D27C, &D_8085D270, &D_8085D26C, &D_8085D26C, scale, scaleStep, 42, + 0); + } + + return true; + } else if ((this->floorSfxOffset == NA_SE_PL_WALK_GROUND - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG)) { + s32 count = func_80173B48(&play->state) / 12000000; + + if (count > 0) { + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, radius, + (count < countMax) ? count : countMax, randAccelWeight, scale, scaleStep, + useLighting); + + return true; + } + } else if (this->floorSfxOffset == NA_SE_PL_WALK_GRASS - SFX_FLAG) { + s32 count = func_80173B48(&play->state) / 12000000; + Vec3f velocity; + Vec3f pos; + s32 i; + + count = (count >= countMax) ? countMax : count; + for (i = 0; i < count; i++) { + func_8083F828(&this->actor.world.pos, &pos, 0.0f, 20.0f, 20.0f); + velocity.x = randPlusMinusPoint5Scaled(3.0f); + velocity.y = Rand_ZeroFloat(2.0f); + velocity.z = randPlusMinusPoint5Scaled(3.0f); + D_8085D288.y = -0.1f; + EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip); + } + } + + return false; +} + +s32 func_8083FBC4(PlayState* play, Player* this) { + if ((this->floorSfxOffset == NA_SE_PL_WALK_GROUND - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG)) { + Vec3f* feetPos = this->actor.shape.feetPos; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->actor.shape.feetPos); i++) { + func_800B1210(play, feetPos, &gZeroVec3f, &gZeroVec3f, 50, 30); + feetPos++; + } + + return true; + } + + if (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) { + Vec3f* feetPos = this->actor.shape.feetPos; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->actor.shape.feetPos); i++) { + EffectSsDust_Spawn(play, 0, feetPos, &gZeroVec3f, &D_8085D270, &D_8085D26C, &D_8085D26C, 100, 40, 17, 0); + feetPos++; + } + + return true; + } + + return false; +} + +s32 func_8083FCF0(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4) { + if (arg4 < this->skelAnime.curFrame) { + func_8082DC38(this); + } else if (arg2 <= this->skelAnime.curFrame) { + this->stateFlags3 |= PLAYER_STATE3_2000000; + func_8082FA5C(play, this, + (arg3 <= this->skelAnime.curFrame) ? PLAYER_MELEE_WEAPON_STATE_1 + : PLAYER_MELEE_WEAPON_STATE_MINUS_1); + return true; + } + return false; +} + +// 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)) { + //! 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->meleeWeaponAnimation = PLAYER_MWA_STAB_1H; + this->currentYaw = this->actor.shape.rot.y + this->upperLimbRot.y; + this->unk_ADD = 0; + return true; + } + return false; +} + +s32 func_8083FE38(Player* this, PlayState* play) { + return func_80838A90(this, play) || func_808391D8(this, play) || func_8083D23C(this, play); +} + +void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { + Player_RequestQuake(play, 27767, 7, 20); + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + Player_PlaySfx(this, sfxId); +} + +void func_8083FEF4(PlayState* play, Player* this) { + Inventory_ChangeAmmo(ITEM_STICK, -1); + func_80831990(play, this, ITEM_NONE); +} + +s32 func_8083FF30(PlayState* play, Player* this) { + if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B0C > 0.5f)) { + if (AMMO(ITEM_STICK) != 0) { + EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND], + BINANG_ADD(this->actor.shape.rot.y, 0x8000)); + this->unk_B0C = 0.5f; + func_8083FEF4(play, this); + Player_PlaySfx(this, NA_SE_IT_WOODSTICK_BROKEN); + } + return true; + } + + return false; +} + +// handles razor sword health and breaking +s32 func_8083FFEC(PlayState* play, Player* this) { + if (this->heldItemAction == PLAYER_IA_SWORD_RAZOR) { + if (gSaveContext.save.saveInfo.playerData.swordHealth > 0) { + 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_PlaySfx(this, NA_SE_IT_MAJIN_SWORD_BROKEN); + if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + Message_StartTextbox(play, 0xF9, NULL); + } + } + } + return true; + } + return false; +} + +// Could return the last function, but never used as such +void func_80840094(PlayState* play, Player* this) { + func_8083FF30(play, this); + func_8083FFEC(play, this); +} + +PlayerAnimationHeader* D_8085D294[] = { + &gPlayerAnim_link_fighter_rebound, + &gPlayerAnim_link_fighter_rebound_long, + &gPlayerAnim_link_fighter_reboundR, + &gPlayerAnim_link_fighter_rebound_longR, +}; + +void func_808400CC(PlayState* play, Player* this) { + if (func_8084B5C0 != this->actionFunc) { + func_8082DD2C(play, this); + if ((this->transformation != PLAYER_FORM_HUMAN) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { + u8 moveFlags = this->skelAnime.moveFlags; + s32 pad; + + this->skelAnime.moveFlags = 0; + Player_SetAction(play, this, func_80854C70, 0); + this->skelAnime.moveFlags = moveFlags; + } else { + s32 var_v1; + s32 pad; + + Player_SetAction(play, this, func_80854C70, 0); + if (func_80123420(this)) { + var_v1 = 2; + } else { + var_v1 = 0; + } + func_8082DB90(play, this, D_8085D294[Player_IsHoldingTwoHandedWeapon(this) + var_v1]); + } + } + + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + this->linearVelocity = -18.0f; + func_80840094(play, this); +} + +s32 func_808401F4(PlayState* play, Player* this) { + if (this->meleeWeaponState >= PLAYER_MELEE_WEAPON_STATE_1) { + s32 temp_v0_3; + + if (this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) { + if (!(this->meleeWeaponQuads[0].base.atFlags & AT_BOUNCED) && + !(this->meleeWeaponQuads[1].base.atFlags & AT_BOUNCED)) { + if (this->skelAnime.curFrame >= 2.0f) { + CollisionPoly* poly; + s32 bgId; + Vec3f spC8; + Vec3f pos; + Vec3f spB0; + Vec3f* var_a1; + Vec3f* temp_a0 = &this->meleeWeaponInfo[0].tip; + f32 var_fv1; + + if (this->linearVelocity >= 0.0f) { + var_a1 = &this->meleeWeaponInfo[0].base; + if ((this->transformation == PLAYER_FORM_GORON) || (this->actor.id == ACTOR_EN_TEST3)) { + var_a1 = &this->unk_AF0[1]; + } + + var_fv1 = Math_Vec3f_DistXYZAndStoreDiff(temp_a0, var_a1, &spB0); + if (var_fv1 != 0.0f) { + var_fv1 = (var_fv1 + 10.0f) / var_fv1; + } + + spC8.x = temp_a0->x + (spB0.x * var_fv1); + spC8.y = temp_a0->y + (spB0.y * var_fv1); + spC8.z = temp_a0->z + (spB0.z * var_fv1); + if (BgCheck_EntityLineTest2(&play->colCtx, &spC8, temp_a0, &pos, &poly, 1, 0, 0, 1, &bgId, + &this->actor)) { + if (!SurfaceType_IsIgnoredByEntities(&play->colCtx, poly, bgId) && + (SurfaceType_GetFloorType(&play->colCtx, poly, bgId) != FLOOR_TYPE_6) && + !func_800B90AC(play, &this->actor, poly, bgId, &pos)) { + if (this->transformation == PLAYER_FORM_GORON) { + MtxF sp64; + Vec3s actorRot; + DynaPolyActor* temp_v0; + + func_8082DF2C(play); + Player_RequestQuakeAndRumble(play, this, NA_SE_IT_HAMMER_HIT); + if (this->transformation == PLAYER_FORM_GORON) { + Actor_SetPlayerImpact(play, PLAYER_IMPACT_BONK, 2, 100.0f, + &this->actor.world.pos); + func_800C0094(poly, pos.x, pos.y, pos.z, &sp64); + Matrix_MtxFToYXZRot(&sp64, &actorRot, true); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, pos.x, pos.y, pos.z, + actorRot.x, actorRot.y, actorRot.z, 500); + } + + if (bgId != BGCHECK_SCENE) { + temp_v0 = DynaPoly_GetActor(&play->colCtx, bgId); + + if (((this->meleeWeaponQuads[0].base.atFlags & AT_HIT) && + (&temp_v0->actor == this->meleeWeaponQuads[0].base.at)) || + ((this->meleeWeaponQuads[1].base.atFlags & AT_HIT) && + (&temp_v0->actor == this->meleeWeaponQuads[1].base.at))) { + return false; + } + } + + func_808400CC(play, this); + if (this->transformation != PLAYER_FORM_GORON) { + return true; + } + return false; + } + + if (this->linearVelocity >= 0.0f) { + SurfaceMaterial surfaceMaterial = + SurfaceType_GetMaterial(&play->colCtx, poly, bgId); + + if (surfaceMaterial == SURFACE_MATERIAL_WOOD) { + CollisionCheck_SpawnShieldParticlesWood(play, &pos, &this->actor.projectedPos); + } else { + pos.x += 8.0f * COLPOLY_GET_NORMAL(poly->normal.x); + pos.y += 8.0f * COLPOLY_GET_NORMAL(poly->normal.y); + pos.x += 8.0f * COLPOLY_GET_NORMAL(poly->normal.z); + CollisionCheck_SpawnShieldParticles(play, &pos); + + if (surfaceMaterial == SURFACE_MATERIAL_DIRT_SOFT) { + Player_PlaySfx(this, NA_SE_IT_WALL_HIT_SOFT); + } else { + Player_PlaySfx(this, NA_SE_IT_WALL_HIT_HARD); + } + } + + func_80840094(play, this); + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + this->linearVelocity = -14.0f; + } + } + } + } + } + } else { + func_808400CC(play, this); + func_8082DF2C(play); + return true; + } + } + + temp_v0_3 = (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) != 0; + if (temp_v0_3 || (this->meleeWeaponQuads[1].base.atFlags & AT_HIT)) { + if ((this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) && + (this->transformation != PLAYER_FORM_GORON)) { + Actor* temp_v1 = this->meleeWeaponQuads[temp_v0_3 ? 0 : 1].base.at; + + if ((temp_v1 != NULL) && (temp_v1->id != ACTOR_EN_KANBAN)) { + func_8082DF2C(play); + } + } + + if (!func_8083FF30(play, this)) { + func_8083FFEC(play, this); + if (this->actor.colChkInfo.atHitEffect == 1) { + this->actor.colChkInfo.damage = 8; + func_80833B18(play, this, 4, 0.0f, 0.0f, this->actor.shape.rot.y, 20); + return true; + } + } + } + } + + return false; +} + +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->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, + -16.0f); + } else { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_derth_rebirth, 1.0f, 99.0f, + Animation_GetLastFrame(&gPlayerAnim_link_derth_rebirth), ANIMMODE_ONCE, + 0.0f); + } + gSaveContext.healthAccumulator = 0xA0; + this->unk_AE8 = -1; + } + } else if (gSaveContext.healthAccumulator == 0) { + Player_StopCutscene(this); + + this->stateFlags1 &= ~PLAYER_STATE1_80; + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_808353DC(play, this); + } else { + func_8085B384(this, play); + } + + this->unk_D6B = 20; + func_808339B4(this, -20); + Audio_SetBgmVolumeOn(); + } + } else if (this->unk_AE7 != 0) { + Player_StopCutscene(this); + this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE]; + this->unk_AE8 = 60; + Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, 5); + Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); + } else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) { + play->gameOverCtx.state = GAMEOVER_DEATH_FADE_OUT; + } +} + +void func_80840980(Player* this, u16 sfxId) { + Player_AnimSfx_PlayVoice(this, sfxId); +} + +void func_808409A8(PlayState* play, Player* this, f32 speed, f32 yVelocity) { + Actor* heldActor = this->heldActor; + + if (!func_808313A8(play, this, heldActor)) { + heldActor->world.rot.y = this->actor.shape.rot.y; + heldActor->speed = speed; + heldActor->velocity.y = yVelocity; + func_808309CC(play, this); + Player_PlaySfx(this, NA_SE_PL_THROW); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } +} + +// Check if bonked and if so, rumble, play sound, etc. +s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) { + Actor* cylinderOc = NULL; + + if (arg3 <= *arg2) { + // If interacting with a wall and close to facing it + if (((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B24 < 0x1C00)) || + // or, impacting something's cylinder + (((this->cylinder.base.ocFlags1 & OC1_HIT) && (cylinderOc = this->cylinder.base.oc) != NULL) && + // and that something is a Beaver Race ring, + ((cylinderOc->id == ACTOR_EN_TWIG) || + // or something is a tree and `this` is close to facing it (note the this actor's facing direction would + // be antiparallel to the cylinder's actor's yaw if this was directly facing it) + (((cylinderOc->id == ACTOR_EN_WOOD02) || (cylinderOc->id == ACTOR_EN_SNOWWD) || + (cylinderOc->id == ACTOR_OBJ_TREE)) && + (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, cylinderOc->yawTowardsPlayer)) > 0x6000))))) { + + if (!func_8082DA90(play)) { + if (this->doorType == PLAYER_DOORTYPE_STAIRCASE) { + func_8085B384(this, play); + return true; + } + + if (cylinderOc != NULL) { + cylinderOc->home.rot.y = 1; + } else if (this->actor.wallBgId != BGCHECK_SCENE) { // i.e. was an actor + DynaPolyActor* wallPolyActor = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + + // Large crates, barrels and palm trees + if ((wallPolyActor != NULL) && + ((wallPolyActor->actor.id == ACTOR_OBJ_KIBAKO2) || + (wallPolyActor->actor.id == ACTOR_OBJ_TARU) || (wallPolyActor->actor.id == ACTOR_OBJ_YASI))) { + wallPolyActor->actor.home.rot.z = 1; + } + } + + if (!(this->stateFlags3 & PLAYER_STATE3_1000)) { + if ((this->stateFlags3 & PLAYER_STATE3_8000) && (func_8084CA24 != this->actionFunc)) { + Player_SetAction(play, this, func_80851B58, 0); + func_8082DB90(play, this, &gPlayerAnim_link_swimer_swim_hit); + func_8082DD2C(play, this); + this->linearVelocity *= 0.2f; + } else { + Player_SetAction(play, this, func_8084C6EC, 0); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]); + this->unk_AE8 = 1; + } + } + + this->linearVelocity = -this->linearVelocity; + Player_RequestQuake(play, 33267, 3, 12); + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + Actor_SetPlayerImpact(play, PLAYER_IMPACT_BONK, 2, 100.0f, &this->actor.world.pos); + Player_PlaySfx(this, NA_SE_PL_BODY_HIT); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + return true; + } + } + } + return false; +} + +s32 func_80840CD4(Player* this, PlayState* play) { + if (func_808387A0(play, this)) { + this->stateFlags2 |= PLAYER_STATE2_20000; + } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + PlayerMeleeWeaponAnimation meleeWeaponAnim; + + if ((this->unk_B08 >= 0.85f) || func_808333CC(this)) { + meleeWeaponAnim = D_8085CF84[Player_IsHoldingTwoHandedWeapon(this)]; + } else { + meleeWeaponAnim = D_8085CF80[Player_IsHoldingTwoHandedWeapon(this)]; + } + func_80833864(play, this, meleeWeaponAnim); + func_808339B4(this, -8); + this->stateFlags2 |= PLAYER_STATE2_20000; + if (this->unk_AE3[this->unk_ADE] == 0) { + this->stateFlags2 |= PLAYER_STATE2_40000000; + } + } else { + return false; + } + + return true; +} + +void func_80840DEC(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084CE84, 1); +} + +void func_80840E24(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084D18C, 1); +} + +void func_80840E5C(Player* this, PlayState* play) { + func_808369F4(this, play); + func_8082DC38(this); + func_8082E438(play, this, D_8085CF68[Player_IsHoldingTwoHandedWeapon(this)]); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80840EC0(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084CCEC, 1); + Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); + this->unk_AE8 = 1; + this->unk_B38 = 0.0f; +} + +// Spin attack size +void func_80840F34(Player* this) { + Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f); +} + +s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* playerAction, f32 arg3, s16 arg4, s32 arg5) { + if ((arg5 != 0) && (this->linearVelocity == 0.0f)) { + return PlayerAnimation_Update(play, &this->skelAnime); + } + + if (arg5 != 2) { + f32 halfUpdateRate = R_UPDATE_RATE / 2.0f; + f32 curDiffX = playerAction->endPos.x - this->actor.world.pos.x; + f32 curDiffZ = playerAction->endPos.z - this->actor.world.pos.z; + f32 scaledCurDist = sqrtf(SQ(curDiffX) + SQ(curDiffZ)) / halfUpdateRate; + s32 framesLeft = (playerAction->endFrame - play->csCtx.curFrame) + 1; + + arg4 = Math_Atan2S_XY(curDiffZ, curDiffX); + + if (arg5 == 1) { + f32 distX = playerAction->endPos.x - playerAction->startPos.x; + f32 distZ = playerAction->endPos.z - playerAction->startPos.z; + s32 temp = (((sqrtf(SQ(distX) + SQ(distZ)) / halfUpdateRate) / + (playerAction->endFrame - playerAction->startFrame)) / + 1.5f) * + 4.0f; + if (temp >= framesLeft) { + arg3 = 0.0f; + arg4 = this->actor.shape.rot.y; + } else { + arg3 = scaledCurDist / ((framesLeft - temp) + 1); + } + } else { + arg3 = scaledCurDist / framesLeft; + } + } + + this->stateFlags2 |= PLAYER_STATE2_20; + func_8083F57C(this, play); + func_8083CB58(this, arg3, arg4); + if ((arg3 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_80839CD8(this, play); + } + + return false; +} + +s32 func_808411D4(PlayState* play, Player* this, f32* arg2, s32 arg3) { + f32 xDiff = this->unk_3A0.x - this->actor.world.pos.x; + f32 yDiff = this->unk_3A0.z - this->actor.world.pos.z; + s32 sp2C; + s32 pad2; + s16 var_v1; + + sp2C = sqrtf(SQ(xDiff) + SQ(yDiff)); + var_v1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_3A0); + if (sp2C < arg3) { + *arg2 = 0.0f; + var_v1 = this->actor.shape.rot.y; + } + if (func_80840F90(play, this, NULL, *arg2, var_v1, 2)) { + return 0; + } + return sp2C; +} + +void Player_InitMode_0(PlayState* play, Player* this) { + this->actor.update = func_801229EC; + this->actor.draw = NULL; +} + +void Player_InitMode_2(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80854118, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_okarina_warp_goal, 2.0f / 3.0f, 0.0f, 24.0f, + ANIMMODE_ONCE, 0.0f); + this->actor.world.pos.y += 800.0f; +} + +u8 D_8085D2B0[] = { + ITEM_SWORD_RAZOR, + ITEM_SWORD_KOKIRI, +}; + +// OoT leftover? +void func_80841358(PlayState* play, Player* this, s32 arg2) { + ItemId item; + PlayerItemAction itemAction; + + //! @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); + this->heldItemId = item; + this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); + func_8082F8BC(play, this, itemAction); + func_808309CC(play, this); + if (arg2) { + Player_PlaySfx(this, NA_SE_IT_SWORD_PICKOUT); + } +} + +Vec3f D_8085D2B4 = { -1.0f, 69.0f, 20.0f }; + +void Player_InitMode_1(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80852FD4, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + Math_Vec3f_Copy(&this->actor.world.pos, &D_8085D2B4); + this->currentYaw = this->actor.shape.rot.y = -0x8000; + PlayerAnimation_Change(play, &this->skelAnime, this->ageProperties->unk_A8, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, + 0.0f); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200); + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + func_80841358(play, this, false); + } + this->unk_AE8 = 20; +} + +void Player_InitMode_3(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8085437C, 0); + func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void Player_InitMode_4(PlayState* play, Player* this) { + func_80834DB8(this, &gPlayerAnim_link_normal_jump, 12.0f, play); + Player_SetAction(play, this, func_8085439C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->fallStartHeight = this->actor.world.pos.y; +} + +void Player_InitMode_7(PlayState* play, Player* this) { + func_80833B18(play, this, 1, 2.0f, 2.0f, this->actor.shape.rot.y + 0x8000, 0); +} + +void Player_InitMode_5(PlayState* play, Player* this) { + Player_SetAction(play, this, func_808540A0, 0); + this->actor.draw = NULL; + this->stateFlags1 |= PLAYER_STATE1_20000000; +} + +void Player_InitMode_6(PlayState* play, Player* this) { + if (gSaveContext.save.isOwlSave) { + Player_SetAction(play, this, func_808496AC, 0); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_AE8 = 0x28; + gSaveContext.save.isOwlSave = false; + } else { + Player_SetAction(play, this, func_80849FE0, 0); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->stateFlags2 |= PLAYER_STATE2_20000000; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST7, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, 0, 0, ENTEST7_MINUS1); + } +} + +// InitModes 0x8 and 0x9 +void func_80841744(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80855C28, 0); + if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) { + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); + this->itemAction = PLAYER_IA_OCARINA; + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); + } else { + func_8082DB60(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + } + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_ABC = -10000.0f; + this->unk_AE8 = 0x2710; + this->unk_B10[5] = 8.0f; +} + +static InitChainEntry sInitChain[] = { + ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), +}; + +Vec3s D_8085D2C4 = { -57, 3377, 0 }; + +void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) { + Actor_ProcessInitChain(&this->actor, sInitChain); + this->currentYaw = this->actor.world.rot.y; + + if ((PLAYER_GET_INITMODE(&this->actor) != PLAYER_INITMODE_TELESCOPE) && + ((gSaveContext.respawnFlag != 2) || + (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams != PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) { + 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; + + 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; + + if (this->transformation == PLAYER_FORM_GORON) { + SkelAnime_InitFlex(play, &this->unk_2C8, &gLinkGoronShieldingSkel, &gLinkGoronShieldingAnim, + this->jointTable, this->morphTable, LINK_GORON_SHIELDING_LIMB_MAX); + } + + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFeet, this->ageProperties->shadowScale); + } + + this->subCamId = CAM_ID_NONE; + Collider_InitAndSetCylinder(play, &this->cylinder, &this->actor, &D_8085C2EC); + Collider_InitAndSetCylinder(play, &this->shieldCylinder, &this->actor, &D_8085C318); + Collider_InitAndSetQuad(play, &this->meleeWeaponQuads[0], &this->actor, &D_8085C344); + Collider_InitAndSetQuad(play, &this->meleeWeaponQuads[1], &this->actor, &D_8085C344); + Collider_InitAndSetQuad(play, &this->shieldQuad, &this->actor, &D_8085C394); +} + +void func_80841A50(PlayState* play, Player* this) { + if ((play->roomCtx.curRoom.num >= 0) && (play->roomCtx.prevRoom.num < 0)) { + Math_Vec3f_Copy(&this->unk_3C0, &this->actor.world.pos); + this->unk_3CC = this->actor.shape.rot.y; + this->unk_3CE = play->roomCtx.curRoom.num; + this->unk_3CF = 1; + } +} + +typedef void (*PlayerInitModeFunc)(PlayState*, Player*); + +// Initialisation functions for various gameplay modes depending on spawn params. There may be at most 0x10 due to it +// using a single nybble. +// sInitModeFuncs +PlayerInitModeFunc D_8085D2CC[0x10] = { + /* 0x0 */ Player_InitMode_0, + /* 0x1 */ Player_InitMode_1, + /* 0x2 */ Player_InitMode_2, + /* 0x3 */ Player_InitMode_3, + /* 0x4 */ Player_InitMode_4, + /* 0x5 */ Player_InitMode_5, + /* 0x6 */ Player_InitMode_6, + /* 0x7 */ Player_InitMode_7, + /* 0x8 */ func_80841744, + /* 0x9 */ func_80841744, + /* 0xA */ func_8083ADF0, + /* 0xB */ Player_InitMode_B, + /* 0xC */ Player_InitMode_Telescope, + /* 0xD */ Player_InitMode_D, + /* 0xE */ func_8083ADF0, + /* 0xF */ Player_InitMode_F, +}; + +// sBlureInit +EffectBlureInit2 D_8085D30C = { + 0, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 4, + 0, 2, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, +}; + +// sTireMarkInit ? +EffectTireMarkInit D_8085D330 = { 0, 63, { 0, 0, 15, 100 } }; + +// sTireMarkGoronColor ? +Color_RGBA8 D_8085D338 = { 0, 0, 15, 100 }; +// sTireMarkOtherColor ? +Color_RGBA8 D_8085D33C = { 0, 0, 0, 150 }; +Vec3f D_8085D340 = { 0.0f, 50.0f, 0.0f }; + +void Player_Init(Actor* thisx, PlayState* play) { + s32 pad; + Player* this = THIS; + s8 objBankIndex; + s32 respawnFlag; + s32 var_a1; + PlayerInitMode initMode; + + play->playerInit = Player_InitCommon; + play->playerUpdate = Player_UpdateCommon; + play->unk_18770 = func_8085B170; + play->startPlayerFishing = Player_StartFishing; + play->grabPlayer = Player_GrabPlayer; + play->startPlayerCutscene = func_8085B28C; + play->func_18780 = func_8085B384; + play->damagePlayer = Player_InflictDamage; + play->talkWithPlayer = Player_TalkWithPlayer; + play->unk_1878C = func_8085B74C; + play->unk_18790 = func_8085B820; + play->unk_18794 = func_8085B854; + play->setPlayerTalkAnim = func_8085B930; + + gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = GAMEPLAY_KEEP; + + this->actor.room = -1; + this->csId = CS_ID_NONE; + + if (this->actor.shape.rot.x != 0) { + this->transformation = this->actor.shape.rot.x - 1; + + objBankIndex = Object_GetIndex(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); + this->actor.objBankIndex = objBankIndex; + if (objBankIndex < 0) { + Actor_Kill(&this->actor); + return; + } + + Actor_SetObjectDependency(play, &this->actor); + } else { + this->transformation = gSaveContext.save.playerForm; + if (this->transformation == PLAYER_FORM_HUMAN) { + if (gSaveContext.save.equippedMask == PLAYER_MASK_GIANT) { + gSaveContext.save.equippedMask = PLAYER_MASK_NONE; + } + this->currentMask = gSaveContext.save.equippedMask; + } else { + this->currentMask = this->transformation + PLAYER_MASK_FIERCE_DEITY; + gSaveContext.save.equippedMask = PLAYER_MASK_NONE; + } + + Inventory_UpdateDeitySwordEquip(play); + + this->unk_B28 = 0; + this->unk_B90 = 0; + this->unk_B92 = 0; + this->unk_B94 = 0; + this->unk_B96 = 0; + this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000 | PLAYER_STATE1_1000000 | PLAYER_STATE1_2000000); + this->stateFlags2 &= ~(PLAYER_STATE2_20000 | PLAYER_STATE2_1000000 | PLAYER_STATE2_40000000); + this->stateFlags3 &= + ~(PLAYER_STATE3_8 | PLAYER_STATE3_40 | PLAYER_STATE3_80 | PLAYER_STATE3_100 | PLAYER_STATE3_200 | + PLAYER_STATE3_800 | PLAYER_STATE3_1000 | PLAYER_STATE3_2000 | PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | + PLAYER_STATE3_40000 | PLAYER_STATE3_80000 | PLAYER_STATE3_100000 | PLAYER_STATE3_200000 | + PLAYER_STATE3_800000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_2000000); + this->unk_B08 = 0.0f; + this->unk_B0C = 0.0f; + } + + if (this->transformation == PLAYER_FORM_ZORA) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + this->unk_B10[0] = 1.0f; + } else { + this->unk_B10[0] = 0.0f; + } + } + + this->actor.flags &= ~(ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH | ACTOR_FLAG_CAN_PRESS_SWITCH); + if (this->transformation != PLAYER_FORM_DEKU) { + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH; + if (this->transformation == PLAYER_FORM_GORON) { + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH; + } + } + + this->ageProperties = &sPlayerAgeProperties[this->transformation]; + + this->itemAction = PLAYER_IA_NONE; + this->heldItemAction = PLAYER_IA_NONE; + this->heldItemId = ITEM_NONE; + + func_80831990(play, this, ITEM_NONE); + Player_SetEquipmentData(play, this); + this->prevBoots = this->currentBoots; + Player_InitCommon(this, play, gPlayerSkeletons[this->transformation]); + + if (this->actor.shape.rot.z != 0) { + EffectTireMark* tireMark; + + this->actor.shape.rot.z = 0; + Player_OverrideBlureColors(play, this, 0, 4); + + tireMark = Effect_GetByIndex(this->meleeWeaponEffectIndex[2]); + if (this->transformation == PLAYER_FORM_GORON) { + tireMark->color = D_8085D338; + } else { + tireMark->color = D_8085D33C; + } + + if ((this->csMode == PLAYER_CSMODE_9) || (this->csMode == PLAYER_CSMODE_93)) { + Player_SetAction(play, this, func_8085B08C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } else { + Player_SetAction(play, this, func_80855818, 0); + this->actor.shape.rot.y = this->currentYaw; + + if (this->prevMask != PLAYER_MASK_NONE) { + func_8082DB90(play, this, &gPlayerAnim_cl_maskoff); + } else if (this->transformation == PLAYER_FORM_HUMAN) { + PlayerAnimation_Change(play, &this->skelAnime, D_8085D160[this->transformation], -2.0f / 3.0f, 9.0f, + 0.0f, ANIMMODE_ONCE, 0.0f); + } else { + func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend); + } + + this->stateFlags1 |= (PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000); + this->stateFlags3 |= PLAYER_STATE3_20000; + this->unk_B10[5] = 3.0f; + } + return; + } + + this->prevMask = this->currentMask; + + Effect_Add(play, &this->meleeWeaponEffectIndex[0], EFFECT_BLURE2, 0, 0, &D_8085D30C); + Effect_Add(play, &this->meleeWeaponEffectIndex[1], EFFECT_BLURE2, 0, 0, &D_8085D30C); + + Player_OverrideBlureColors(play, this, 0, 4); + if (this->transformation == PLAYER_FORM_GORON) { + D_8085D330.color = D_8085D338; + } else { + D_8085D330.color = D_8085D33C; + } + Effect_Add(play, &this->meleeWeaponEffectIndex[2], EFFECT_TIRE_MARK, 0, 0, &D_8085D330); + + if (this->actor.shape.rot.x != 0) { + this->actor.shape.rot.x = 0; + this->csMode = PLAYER_CSMODE_68; + Player_SetAction(play, this, func_8085B08C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + return; + } + + play->unk_1887C = 0; + play->unk_1887D = 0; + play->unk_1887E = 0; + this->giObjectSegment = ZeldaArena_Malloc(0x2000); + this->maskObjectSegment = ZeldaArena_Malloc(0x3800); + + Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 255, 128, 0, -1); + this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); + Play_AssignPlayerCsIdsFromScene(&play->state, this->actor.csId); + + respawnFlag = gSaveContext.respawnFlag; + if (respawnFlag != 0) { + if (respawnFlag == -3) { + this->actor.params = gSaveContext.respawn[RESPAWN_MODE_UNK_3].playerParams; + } else { + if ((respawnFlag == 1) || (respawnFlag == -1)) { + this->unk_D6A = -2; + } + + if (respawnFlag != -7) { + s32 respawnIndex; + + if ((respawnFlag == -8) || (respawnFlag == -5) || (respawnFlag == -4)) { + respawnFlag = 1; + } + + if ((respawnFlag < 0) && (respawnFlag != -1) && (respawnFlag != -6)) { + respawnIndex = RESPAWN_MODE_DOWN; + } else { + respawnIndex = (respawnFlag < 0) ? RESPAWN_MODE_TOP : respawnFlag - 1; + + Math_Vec3f_Copy(&this->actor.world.pos, &gSaveContext.respawn[respawnIndex].pos); + Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos); + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos); + + this->fallStartHeight = this->actor.world.pos.y; + + this->currentYaw = this->actor.shape.rot.y = gSaveContext.respawn[respawnIndex].yaw; + this->actor.params = gSaveContext.respawn[respawnIndex].playerParams; + } + + play->actorCtx.sceneFlags.switches[2] = gSaveContext.respawn[respawnIndex].tempSwitchFlags; + play->actorCtx.sceneFlags.collectible[1] = gSaveContext.respawn[respawnIndex].unk_18; + play->actorCtx.sceneFlags.collectible[2] = gSaveContext.respawn[respawnIndex].tempCollectFlags; + } + } + } + + var_a1 = ((respawnFlag == 4) || (gSaveContext.respawnFlag == -4)) ? 1 : 0; + if (func_801226E0(play, var_a1) == 0) { + gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = PLAYER_PARAMS(thisx->params, PLAYER_INITMODE_D); + } + + gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1; + if (respawnFlag == 0) { + gSaveContext.respawn[RESPAWN_MODE_TOP] = gSaveContext.respawn[RESPAWN_MODE_DOWN]; + } + gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = + PLAYER_PARAMS(gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams, PLAYER_INITMODE_D); + + initMode = PLAYER_GET_INITMODE(&this->actor); + if (((initMode == PLAYER_INITMODE_5) || (initMode == PLAYER_INITMODE_6)) && + (gSaveContext.save.cutsceneIndex >= 0xFFF0)) { + initMode = PLAYER_INITMODE_D; + } + + D_8085D2CC[initMode](play, this); + + if ((this->actor.draw != NULL) && gSaveContext.save.hasTatl && + ((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && + (play->sceneId != SCENE_SPOT00)) { + this->tatlActor = Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D340, 0); + + if (gSaveContext.dogParams != 0) { + gSaveContext.dogParams |= 0x8000; + } + + 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); + func_808313F0(this, play); + } else if (gSaveContext.unk_1014 != 0) { + func_8082F5FC(this, Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM, + this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0x8000)); + func_808313F0(this, play); + } + } + + Minimap_SavePlayerRoomInitInfo(play); + func_80841A50(play, this); + this->unk_3CF = 0; + R_PLAY_FILL_SCREEN_ON = 0; +} + +void func_80842510(s16* arg0) { + s16 temp_ft0; + + temp_ft0 = (ABS_ALT(*arg0) * 100.0f) / 1000.0f; + temp_ft0 = CLAMP(temp_ft0, 0x190, 0xFA0); + + Math_ScaledStepToS(arg0, 0, temp_ft0); +} + +void func_808425B4(Player* this) { + if (!(this->unk_AA6 & 2)) { + s16 sp26 = this->actor.focus.rot.y - this->actor.shape.rot.y; + + func_80842510(&sp26); + this->actor.focus.rot.y = this->actor.shape.rot.y + sp26; + } + if (!(this->unk_AA6 & 1)) { + func_80842510(&this->actor.focus.rot.x); + } + if (!(this->unk_AA6 & 8)) { + func_80842510(&this->headLimbRot.x); + } + if (!(this->unk_AA6 & 0x40)) { + func_80842510(&this->upperLimbRot.x); + } + if (!(this->unk_AA6 & 4)) { + func_80842510(&this->actor.focus.rot.z); + } + if (!(this->unk_AA6 & 0x10)) { + func_80842510(&this->headLimbRot.y); + } + if (!(this->unk_AA6 & 0x20)) { + func_80842510(&this->headLimbRot.z); + } + if (!(this->unk_AA6 & 0x80)) { + if (this->unk_AA8 != 0) { + func_80842510(&this->unk_AA8); + } else { + func_80842510(&this->upperLimbRot.y); + } + } + if (!(this->unk_AA6 & 0x100)) { + func_80842510(&this->upperLimbRot.z); + } + + this->unk_AA6 = 0; +} + +/** + * Sets the DoAction for the interface A/B buttons, depending on a significant number of things + */ +void Player_SetDoAction(PlayState* play, Player* this) { + DoAction doActionB; + s32 sp38; + + if (this != GET_PLAYER(play)) { + return; + } + + doActionB = -1; + sp38 = func_801242B4(this) || (func_8084CA24 == this->actionFunc); + + // Set B do action + if (this->transformation == PLAYER_FORM_GORON) { + if (this->stateFlags3 & PLAYER_STATE3_80000) { + doActionB = DO_ACTION_NONE; + } else if (this->stateFlags3 & PLAYER_STATE3_1000) { + doActionB = DO_ACTION_POUND; + } else { + doActionB = DO_ACTION_PUNCH; + } + } else if (this->transformation == PLAYER_FORM_ZORA) { + if ((!(this->stateFlags1 & PLAYER_STATE1_8000000)) || + (!sp38 && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + doActionB = DO_ACTION_PUNCH; + } else { + doActionB = DO_ACTION_DIVE; + } + } else if (this->transformation == PLAYER_FORM_DEKU) { + doActionB = DO_ACTION_SHOOT; + } else { // PLAYER_FORM_HUMAN + if (this->currentMask == PLAYER_MASK_BLAST) { + doActionB = DO_ACTION_EXPLODE; + } else if (this->currentMask == PLAYER_MASK_BREMEN) { + doActionB = DO_ACTION_MARCH; + } else if (this->currentMask == PLAYER_MASK_KAMARO) { + doActionB = DO_ACTION_DANCE; + } + } + + if (doActionB > -1) { + func_801155B4(play, doActionB); + } else if (play->interfaceCtx.unk_21C != 0) { + play->interfaceCtx.unk_21C = 0; + play->interfaceCtx.bButtonDoAction = 0; + } + + // Set A do action + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) || + ((play->msgCtx.currentTextId >= 0x100) && (play->msgCtx.currentTextId <= 0x200)) || + ((play->msgCtx.currentTextId >= 0x1BB2) && (play->msgCtx.currentTextId < 0x1BB7))) { + Actor* heldActor = this->heldActor; + Actor* interactRangeActor = this->interactRangeActor; + s32 pad; + s32 sp28 = this->unk_AE3[this->unk_ADE]; + s32 sp24; + DoAction doActionA = + ((this->transformation == PLAYER_FORM_GORON) && !(this->stateFlags1 & PLAYER_STATE1_400000)) + ? DO_ACTION_CURL + : DO_ACTION_NONE; + + if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { + doActionA = DO_ACTION_SNAP; + } else if (Player_InBlockingCsMode(play, this) || (this->actor.flags & ACTOR_FLAG_20000000) || + (this->stateFlags1 & PLAYER_STATE1_1000) || (this->stateFlags3 & PLAYER_STATE3_80000) || + (func_80854430 == this->actionFunc)) { + doActionA = DO_ACTION_NONE; + } else if (this->stateFlags1 & PLAYER_STATE1_100000) { + doActionA = DO_ACTION_RETURN; + } else if ((this->heldItemAction == PLAYER_IA_FISHING_ROD) && (this->unk_B28 != 0)) { + doActionA = (this->unk_B28 == 2) ? DO_ACTION_REEL : DO_ACTION_NONE; + doActionA = (this->unk_B28 == 2) ? DO_ACTION_REEL : DO_ACTION_NONE; //! FAKE: duplicated statement + } else if (this->stateFlags3 & PLAYER_STATE3_2000) { + doActionA = DO_ACTION_DOWN; + } else if ((this->doorType != PLAYER_DOORTYPE_NONE) && (this->doorType != PLAYER_DOORTYPE_STAIRCASE) && + !(this->stateFlags1 & PLAYER_STATE1_800)) { + doActionA = DO_ACTION_OPEN; + } else if (this->stateFlags3 & PLAYER_STATE3_200000) { + static u8 D_8085D34C[] = { + DO_ACTION_1, DO_ACTION_2, DO_ACTION_3, DO_ACTION_4, DO_ACTION_5, DO_ACTION_6, DO_ACTION_7, DO_ACTION_8, + }; + + doActionA = D_8085D34C[this->remainingHopsCounter]; + } else if ((!(this->stateFlags1 & PLAYER_STATE1_800) || (heldActor == NULL)) && (interactRangeActor != NULL) && + (this->getItemId < GI_NONE)) { + doActionA = DO_ACTION_OPEN; + } else if (!sp38 && (this->stateFlags2 & PLAYER_STATE2_1)) { + doActionA = DO_ACTION_GRAB; + } else if ((this->stateFlags2 & PLAYER_STATE2_4) || + (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->rideActor != NULL))) { + doActionA = DO_ACTION_CLIMB; + } else if ((this->stateFlags1 & PLAYER_STATE1_800000) && + (!EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && (func_808505D0 != this->actionFunc))) { + if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) { + if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->id == ACTOR_DM_CHAR08)) { + doActionA = DO_ACTION_SPEAK; + } else { + doActionA = DO_ACTION_CHECK; + } + } else if (!func_8082DA90(play) && !func_800B7128(this) && !(this->stateFlags1 & PLAYER_STATE1_100000)) { + doActionA = DO_ACTION_FASTER; + } else { + doActionA = DO_ACTION_NONE; + } + } else if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) { + if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->category == ACTORCAT_ENEMY) || + (this->talkActor->id == ACTOR_DM_CHAR08)) { + doActionA = DO_ACTION_SPEAK; + } else { + doActionA = DO_ACTION_CHECK; + } + } else if ((this->stateFlags1 & (PLAYER_STATE1_2000 | PLAYER_STATE1_200000)) || + ((this->stateFlags1 & PLAYER_STATE1_800000) && (this->stateFlags2 & PLAYER_STATE2_400000))) { + doActionA = DO_ACTION_DOWN; + } else if ((this->stateFlags1 & PLAYER_STATE1_800) && (this->getItemId == GI_NONE) && (heldActor != NULL)) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (heldActor->id == ACTOR_EN_NIW)) { + if (!func_8083D738(this, heldActor)) { + doActionA = DO_ACTION_DROP; + } else { + doActionA = DO_ACTION_THROW; + } + } else { + doActionA = DO_ACTION_NONE; + } + } else if (this->stateFlags2 & PLAYER_STATE2_10000) { + doActionA = DO_ACTION_GRAB; + } else if (this->stateFlags2 & PLAYER_STATE2_800) { + static u8 D_8085D354[] = { DO_ACTION_1, DO_ACTION_2 }; + s32 var_v0; + + var_v0 = ((120.0f - this->actor.depthInWater) / 40.0f); + var_v0 = CLAMP(var_v0, 0, ARRAY_COUNT(D_8085D354) - 1); + + doActionA = D_8085D354[var_v0]; + } else if (this->stateFlags3 & PLAYER_STATE3_100) { + doActionA = DO_ACTION_JUMP; + } else if (this->stateFlags3 & PLAYER_STATE3_1000) { + doActionA = DO_ACTION_RETURN; + } else if (!func_8082FBE8(this) && (this->stateFlags1 & PLAYER_STATE1_8000000) && !sp38) { + doActionA = DO_ACTION_SURFACE; + } else if (((this->transformation != PLAYER_FORM_DEKU) && + (sp38 || ((this->stateFlags1 & PLAYER_STATE1_8000000) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)))) || + ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) { + doActionA = (this->transformation == PLAYER_FORM_ZORA) ? DO_ACTION_SWIM + : ((this->stateFlags1 & PLAYER_STATE1_8000000) && (interactRangeActor != NULL) && + (interactRangeActor->id == ACTOR_EN_ZOG)) + ? DO_ACTION_GRAB + : DO_ACTION_DIVE; + } else { + sp24 = func_8082FBE8(this); + if ((sp24 && (this->transformation != PLAYER_FORM_DEKU)) || !(this->stateFlags1 & PLAYER_STATE1_400000) || + !Player_IsGoronOrDeku(this)) { + if ((this->transformation != PLAYER_FORM_GORON) && + !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_4000)) && (sp28 <= 0) && + ((func_80123420(this)) || + ((sPlayerCurrentFloorType != FLOOR_TYPE_7) && + ((func_80123434(this)) || ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && + !(this->stateFlags1 & PLAYER_STATE1_400000) && (sp28 == 0)))))) { + doActionA = DO_ACTION_ATTACK; + } else if ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && sp24 && (sp28 > 0)) { + doActionA = DO_ACTION_JUMP; + } else if ((this->transformation == PLAYER_FORM_DEKU) && !(this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + doActionA = DO_ACTION_ATTACK; + } else if (((this->transformation == PLAYER_FORM_HUMAN) || + (this->transformation == PLAYER_FORM_ZORA)) && + ((this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) || + ((this->stateFlags2 & PLAYER_STATE2_100000) && + (play->actorCtx.targetContext.arrowPointedActor == NULL)))) { + doActionA = DO_ACTION_PUTAWAY; + + if (play->msgCtx.currentTextId == 0) {} //! FAKE + } + } + } + + if (doActionA != DO_ACTION_PUTAWAY) { + this->putAwayCountdown = 20; + } else if (this->putAwayCountdown != 0) { + doActionA = DO_ACTION_NONE; + this->putAwayCountdown--; + } + + func_8011552C(play, doActionA); + + // Set Tatl state + if (!Play_InCsMode(play) && (this->stateFlags2 & PLAYER_STATE2_200000) && + !(this->stateFlags3 & PLAYER_STATE3_100)) { + if (this->targetedActor != NULL) { + func_80115764(play, 0x2B); + } else { + func_80115764(play, 0x2A); + } + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + } else { + func_80115764(play, 0x2C); + } + } +} + +s32 func_808430E0(Player* this) { + if ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + func_8083784C(this)) { + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + return false; + } + + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + sPlayerCurrentFloorType = FLOOR_TYPE_0; + } + this->unk_B6C = 0; + this->unk_B6E = 0; + D_80862B28 = 0; + return true; +} + +void func_80843178(PlayState* play, Player* this) { + u8 spC7 = 0; + CollisionPoly* floorPoly; + f32 temp_fv0; + f32 temp_fv0_3; + f32 temp_fv1; + u32 updBgCheckInfoFlags; + s32 spAC = (func_8084D820 == this->actionFunc) && (this->unk_397 == 4); + + sPlayerPrevFloorProperty = this->floorProperty; + + temp_fv0 = this->ageProperties->unk_38; + temp_fv1 = this->ageProperties->unk_00; + + if (this->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000)) { + if ((!(this->stateFlags1 & PLAYER_STATE1_80) && !(this->stateFlags2 & PLAYER_STATE2_4000) && + (this->stateFlags1 & PLAYER_STATE1_80000000)) || + spAC) { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } else { + if ((this->stateFlags1 & 1) && (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) && + ((this->unk_D68 - (s32)this->actor.world.pos.y) >= 100)) { + updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } else if (!(this->stateFlags1 & PLAYER_STATE1_1) && + ((func_8084E034 == this->actionFunc) || (func_8084D820 == this->actionFunc))) { + updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + this->actor.bgCheckFlags &= ~(BGCHECKFLAG_WALL | BGCHECKFLAG_PLAYER_WALL_INTERACT); + } else { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } + } + } else { + if (func_808561B0 == this->actionFunc) { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_800; + } else if ((this->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) && (this->linearVelocity >= 8.0f)) { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20 | UPDBGCHECKINFO_FLAG_100 | + UPDBGCHECKINFO_FLAG_200; + } else { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } + } + + if (this->stateFlags3 & PLAYER_STATE3_1) { + updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); + } + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4) { + this->stateFlags3 |= PLAYER_STATE3_10; + } + + if (func_801242B4(this)) { + updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); + } + + Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, temp_fv0, temp_fv1, updBgCheckInfoFlags); + + this->unk_AC0 -= (this->actor.world.pos.y - this->actor.prevPos.y) / this->actor.scale.y; + this->unk_AC0 = CLAMP(this->unk_AC0, -1000.0f, 1000.0f); + + if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) { + this->actor.velocity.y = 0.0f; + } + + D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight; + sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; + floorPoly = this->actor.floorPoly; + + if ((floorPoly != NULL) && (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4)) { + this->floorProperty = SurfaceType_GetFloorProperty(&play->colCtx, floorPoly, this->actor.floorBgId); + if (this == GET_PLAYER(play)) { + 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)); + } else { + DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId); + } + } + + sPlayerConveyorSpeedIndex = SurfaceType_GetConveyorSpeed(&play->colCtx, floorPoly, this->actor.floorBgId); + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { + sPlayerIsOnFloorConveyor = SurfaceType_IsFloorConveyor(&play->colCtx, floorPoly, this->actor.floorBgId); + if ((!sPlayerIsOnFloorConveyor && (this->actor.depthInWater > 20.0f)) || + (sPlayerIsOnFloorConveyor && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + D_80862B16 = SurfaceType_GetConveyorDirection(&play->colCtx, floorPoly, this->actor.floorBgId) << 0xA; + } else { + sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; + } + } + } + + this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT; + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + static Vec3f D_8085D358 = { 0.0f, 0.0f, 0.0f }; + CollisionPoly* spA8; + s32 spA4; + s16 temp_v1_3; + f32 sp9C; + + D_8085D358.y = 178.0f * 0.1f; + D_8085D358.z = this->ageProperties->unk_38 + 10.0f; + + if (func_80835D58(play, this, &D_8085D358, &spA8, &spA4, &D_80862B30)) { + this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT; + if (spA8 != this->actor.wallPoly) { + this->actor.wallPoly = spA8; + this->actor.wallBgId = spA4; + this->actor.wallYaw = Math_Atan2S_XY(spA8->normal.z, spA8->normal.x); + } + } + + temp_v1_3 = this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000); + sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); + D_80862B20 = ABS_ALT(temp_v1_3); + temp_v1_3 = BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000)); + D_80862B24 = ABS_ALT(temp_v1_3); + + temp_fv0_3 = D_80862B24 * 0.00008f; + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (temp_fv0_3 >= 1.0f)) { + this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f; + } else { + temp_fv1 = (R_RUN_SPEED_LIMIT / 100.0f) * temp_fv0_3; + + this->unk_B50 = temp_fv1; + if (temp_fv1 < 0.1f) { + this->unk_B50 = 0.1f; + } + } + + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B20 < 0x3000)) { + CollisionPoly* wallPoly = this->actor.wallPoly; + + if (ABS_ALT(wallPoly->normal.y) < 0x258) { + f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); + f32 wallPolyNormalY = COLPOLY_GET_NORMAL(wallPoly->normal.y); + f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); + f32 temp_fv1_3; + CollisionPoly* sp84; + CollisionPoly* sp80; + s32 sp7C; + Vec3f sp70; + f32 temp_fv0_5; + f32 sp68; + s32 temp_v1_6; + + this->wallDistance = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ, + wallPoly->dist, &this->actor.world.pos); + temp_fv1_3 = this->wallDistance + 10.0f; + sp70.x = this->actor.world.pos.x - (temp_fv1_3 * wallPolyNormalX); + sp70.z = this->actor.world.pos.z - (temp_fv1_3 * wallPolyNormalZ); + sp70.y = this->actor.world.pos.y + this->ageProperties->unk_0C; + temp_fv0_5 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp84, &sp7C, &this->actor, &sp70); + + this->wallHeight = temp_fv0_5 - this->actor.world.pos.y; + if ((this->wallHeight < 178.0f * 0.1f) || + ((BgCheck_EntityCheckCeiling(&play->colCtx, &sp68, &this->actor.world.pos, + (temp_fv0_5 - this->actor.world.pos.y) + 20.0f, &sp80, &sp7C, + &this->actor) != 0))) { + this->wallHeight = 399.96002f; + } else { + D_8085D358.y = (temp_fv0_5 + 5.0f) - this->actor.world.pos.y; + + if ((func_80835D58(play, this, &D_8085D358, &sp80, &sp7C, &D_80862B30)) && + (temp_v1_6 = this->actor.wallYaw - Math_Atan2S_XY(sp80->normal.z, sp80->normal.x), + ABS_ALT(temp_v1_6) < 0x4000) && + !(SurfaceType_CheckWallFlag1(&play->colCtx, sp80, sp7C))) { + this->wallHeight = 399.96002f; + } else if (SurfaceType_CheckWallFlag0(&play->colCtx, wallPoly, this->actor.wallBgId) == 0) { + if (this->ageProperties->unk_1C <= this->wallHeight) { + if (ABS_ALT(sp84->normal.y) > 0x5DC0) { + if ((this->ageProperties->unk_14 <= this->wallHeight) || func_801242B4(this)) { + spC7 = 4; + } else if (this->ageProperties->unk_18 <= this->wallHeight) { + spC7 = 3; + } else { + spC7 = 2; + } + } + } else { + spC7 = 1; + } + } + } + } + } + } else { + this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f; + this->wallHeight = 0.0f; + this->unk_B5D = 0; + } + + if (spC7 == this->unk_B5C) { + if (this->linearVelocity != 0.0f) { + if (this->unk_B5D < 0x64) { + this->unk_B5D++; + } + } + } else { + this->unk_B5C = spC7; + this->unk_B5D = 0; + } + + sPlayerCurrentFloorType = SurfaceType_GetFloorType(&play->colCtx, floorPoly, this->actor.floorBgId); + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + f32 floorPolyNormalX; + f32 floorPolyNormalY; + f32 floorPolyNormalZ; + f32 sp54; + s32 pad; + f32 sp4C; + + D_80862B40 = SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + if (func_808430E0(this) == 0) { + floorPolyNormalY = COLPOLY_GET_NORMAL(floorPoly->normal.y); + + if (this->actor.floorBgId != BGCHECK_SCENE) { + DynaPoly_SetPlayerOnTop(&play->colCtx, this->actor.floorBgId); + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && (this->actor.depthInWater <= 24.0f) && + (D_80862B40 != FLOOR_EFFECT_1) && (sPlayerConveyorSpeedIndex == CONVEYOR_SPEED_DISABLED) && + (floorPolyNormalY > 0.5f)) { + if (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_SONG_WARP]) { + func_80841A50(play, this); + } + } + + floorPolyNormalX = COLPOLY_GET_NORMAL(floorPoly->normal.x); + floorPolyNormalY = 1.0f / floorPolyNormalY; + floorPolyNormalZ = COLPOLY_GET_NORMAL(floorPoly->normal.z); + + sp54 = Math_SinS(this->currentYaw); + sp4C = Math_CosS(this->currentYaw); + this->unk_B6C = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY); + this->unk_B6E = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp4C) - (floorPolyNormalZ * sp54)) * floorPolyNormalY); + sp54 = Math_SinS(this->actor.shape.rot.y); + sp4C = Math_CosS(this->actor.shape.rot.y); + D_80862B28 = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY); + func_8083CF68(play, this); + } + } else { + func_808430E0(this); + D_80862B40 = FLOOR_EFFECT_0; + } + + if (floorPoly != NULL) { + this->unk_D66 = this->floorSfxOffset; + if (spAC != 0) { + this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG; + return; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) { + if (this->actor.depthInWater < 50.0f) { + if (this->actor.depthInWater < 20.0f) { + this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_SE_PL_WALK_DIRT - SFX_FLAG + : NA_SE_PL_WALK_WATER0 - SFX_FLAG; + } else { + this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_CODE_DIRT_DEEP - SFX_FLAG + : NA_SE_PL_WALK_WATER1 - SFX_FLAG; + } + + return; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_200) { + this->floorSfxOffset = NA_SE_PL_WALK_SAND - SFX_FLAG; + } else if (COLPOLY_GET_NORMAL(floorPoly->normal.y) > 0.5f) { + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, floorPoly, this->actor.floorBgId); + } + } +} + +void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { + u8 seqMode; + s32 pad[2]; + Camera* camera; + s32 camMode; + + if (this == GET_PLAYER(play)) { + seqMode = SEQ_MODE_DEFAULT; + if (this->stateFlags1 & PLAYER_STATE1_100000) { + seqMode = SEQ_MODE_STILL; + } else if (this->csMode != PLAYER_CSMODE_0) { + Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_NORMAL); + } else { + camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN) + : Play_GetCamera(play, ((EnTest3*)this)->subCamId); + if ((this->actor.parent != NULL) && (this->stateFlags3 & PLAYER_STATE3_80)) { + camMode = CAM_MODE_HOOKSHOT; + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->actor.parent); + } else if (func_8084BC64 == this->actionFunc) { + camMode = CAM_MODE_STILL; + } else if (this->stateFlags3 & PLAYER_STATE3_8000) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + camMode = CAM_MODE_GORONDASH; + } else { + camMode = CAM_MODE_FREEFALL; + } + } else if (this->stateFlags3 & PLAYER_STATE3_80000) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + camMode = CAM_MODE_GORONDASH; + } else { + camMode = CAM_MODE_GORONJUMP; + } + } else if (this->stateFlags2 & PLAYER_STATE2_100) { + camMode = CAM_MODE_PUSHPULL; + } else if (this->targetedActor != NULL) { + if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED)) { + camMode = CAM_MODE_TALK; + } else if (this->stateFlags1 & PLAYER_STATE1_10000) { + if (this->stateFlags1 & PLAYER_STATE1_2000000) { + camMode = CAM_MODE_FOLLOWBOOMERANG; + } else { + camMode = CAM_MODE_FOLLOWTARGET; + } + } else { + camMode = CAM_MODE_BATTLE; + } + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->targetedActor); + } else if (this->stateFlags1 & PLAYER_STATE1_1000) { + camMode = CAM_MODE_CHARGE; + } else if (this->stateFlags3 & PLAYER_STATE3_100) { + camMode = CAM_MODE_DEKUHIDE; + } else if (this->stateFlags1 & PLAYER_STATE1_2000000) { + camMode = CAM_MODE_FOLLOWBOOMERANG; + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->boomerangActor); + } else if (this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000)) { + if (func_80123434(this)) { + camMode = CAM_MODE_HANGZ; + } else { + camMode = CAM_MODE_HANG; + } + } else if ((this->stateFlags3 & PLAYER_STATE3_2000) && (this->actor.velocity.y < 0.0f)) { + if (this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) { + camMode = CAM_MODE_DEKUFLYZ; + } else { + camMode = CAM_MODE_DEKUFLY; + } + } else if (this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) { + if (func_800B7128(this) || func_8082EF20(this)) { + camMode = CAM_MODE_BOWARROWZ; + } else if (this->stateFlags1 & PLAYER_STATE1_200000) { + camMode = CAM_MODE_CLIMBZ; + } else { + camMode = CAM_MODE_TARGET; + } + } else if ((this->stateFlags1 & PLAYER_STATE1_400000) && (this->transformation != 0)) { + camMode = CAM_MODE_STILL; + } else if (this->stateFlags1 & PLAYER_STATE1_40000) { + camMode = CAM_MODE_JUMP; + } else if (this->stateFlags1 & PLAYER_STATE1_200000) { + camMode = CAM_MODE_CLIMB; + } else if (this->stateFlags1 & PLAYER_STATE1_80000) { + camMode = CAM_MODE_FREEFALL; + } else if (((func_808548B8 == this->actionFunc) && + (this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) && + (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) || + (this->stateFlags3 & PLAYER_STATE3_8) || + ((func_8084FE7C == this->actionFunc) && (this->unk_AE8 == 0)) || + (func_808505D0 == this->actionFunc)) { + camMode = CAM_MODE_STILL; + } else { + camMode = CAM_MODE_NORMAL; + if ((this->linearVelocity == 0.0f) && + (!(this->stateFlags1 & PLAYER_STATE1_800000) || (this->rideActor->speed == 0.0f))) { + seqMode = SEQ_MODE_STILL; + } + } + + Camera_ChangeMode(camera, camMode); + } + + if (play->actorCtx.targetContext.bgmEnemy != NULL) { + seqMode = SEQ_MODE_ENEMY; + Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetContext.bgmEnemy->xyzDistToPlayerSq)); + } + + Audio_SetSequenceMode(seqMode); + } +} + +Vec3f D_8085D364 = { 0.0f, 0.5f, 0.0f }; +Vec3f D_8085D370 = { 0.0f, 0.5f, 0.0f }; +Color_RGBA8 D_8085D37C = { 255, 255, 100, 255 }; +Color_RGBA8 D_8085D380 = { 255, 50, 0, 0 }; + +void func_808442D8(PlayState* play, Player* this) { + f32 var_fa0; + f32 temp_fv1; + + if (this->unk_B0C == 0.0f) { + func_80831990(play, this, ITEM_NONE); + return; + } + + var_fa0 = 1.0f; + if (DECR(this->unk_B28) == 0) { + Inventory_ChangeAmmo(ITEM_STICK, -1); + this->unk_B28 = 1; + this->unk_B0C = 0.0f; + var_fa0 = 0.0f; + } else if (this->unk_B28 >= 0xC9) { + var_fa0 = (0xD2 - this->unk_B28) / 10.0f; + } else if (this->unk_B28 < 0x14) { + var_fa0 = this->unk_B28 / 20.0f; + this->unk_B0C = var_fa0; + } + + if (var_fa0 > 0.0f) { + func_800B0EB0(play, &this->meleeWeaponInfo[0].tip, &D_8085D364, &D_8085D370, &D_8085D37C, &D_8085D380, + (var_fa0 * 200.0f), 0, 8); + if (((play->roomCtx.curRoom.enablePosLights != 0)) || (MREG(93) != 0)) { + temp_fv1 = (Rand_ZeroOne() * 30.0f) + 225.0f; + Lights_PointSetColorAndRadius(&this->lightInfo, temp_fv1, temp_fv1 * 0.7f, 0, var_fa0 * 300.0f); + } + } +} + +void func_808445C4(PlayState* play, Player* this) { + this->shockTimer--; + this->unk_B66 += this->shockTimer; + if (this->unk_B66 > 20) { + Vec3f pos; + Vec3f* bodyPartsPos; + s32 scale; + s32 randIndex; + + this->unk_B66 -= 20; + scale = this->shockTimer * 2; + if (scale > 40) { + scale = 40; + } + + randIndex = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); + bodyPartsPos = randIndex + this->bodyPartsPos; + + pos.x = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; + pos.y = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; + pos.z = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; + EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1); + func_800B8F98(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); + } +} + +/** + * Rumbles the controller when close to a secret. + */ +void Player_DetectSecrets(PlayState* play, Player* this) { + f32 step = (SQ(200.0f) * 5.0f) - (this->closestSecretDistSq * 5.0f); + + if (step < 0.0f) { + step = 0.0f; + } + + this->secretRumbleCharge += step; + if (this->secretRumbleCharge > SQ(2000.0f)) { + this->secretRumbleCharge = 0.0f; + Player_RequestRumble(play, this, 120, 20, 10, SQ(0)); + } +} + +s8 D_8085D384[92] = { + /* 0 */ PLAYER_CSMODE_0, + /* 1 */ PLAYER_CSMODE_2, + /* 2 */ PLAYER_CSMODE_2, + /* 3 */ PLAYER_CSMODE_4, + /* 4 */ PLAYER_CSMODE_3, + /* 5 */ PLAYER_CSMODE_56, + /* 6 */ PLAYER_CSMODE_8, + /* 7 */ PLAYER_CSMODE_0, + /* 8 */ PLAYER_CSMODE_0, + /* 9 */ PLAYER_CSMODE_135, + /* 10 */ PLAYER_CSMODE_21, + /* 11 */ PLAYER_CSMODE_61, + /* 12 */ PLAYER_CSMODE_62, + /* 13 */ PLAYER_CSMODE_60, + /* 14 */ PLAYER_CSMODE_63, + /* 15 */ PLAYER_CSMODE_64, + /* 16 */ PLAYER_CSMODE_65, + /* 17 */ PLAYER_CSMODE_66, + /* 18 */ PLAYER_CSMODE_70, + /* 19 */ PLAYER_CSMODE_19, + /* 20 */ PLAYER_CSMODE_71, + /* 21 */ PLAYER_CSMODE_72, + /* 22 */ PLAYER_CSMODE_67, + /* 23 */ PLAYER_CSMODE_73, + /* 24 */ PLAYER_CSMODE_74, + /* 25 */ PLAYER_CSMODE_75, + /* 26 */ PLAYER_CSMODE_68, + /* 27 */ PLAYER_CSMODE_69, + /* 28 */ PLAYER_CSMODE_76, + /* 29 */ PLAYER_CSMODE_116, + /* 30 */ PLAYER_CSMODE_0, + /* 31 */ PLAYER_CSMODE_40, + /* 32 */ PLAYER_CSMODE_0, + /* 33 */ -PLAYER_CSMODE_52, // the only negative one + /* 34 */ PLAYER_CSMODE_42, + /* 35 */ PLAYER_CSMODE_43, + /* 36 */ PLAYER_CSMODE_57, + /* 37 */ PLAYER_CSMODE_81, + /* 38 */ PLAYER_CSMODE_41, + /* 39 */ PLAYER_CSMODE_53, + /* 40 */ PLAYER_CSMODE_54, + /* 41 */ PLAYER_CSMODE_44, + /* 42 */ PLAYER_CSMODE_55, + /* 43 */ PLAYER_CSMODE_45, + /* 44 */ PLAYER_CSMODE_46, + /* 45 */ PLAYER_CSMODE_47, + /* 46 */ PLAYER_CSMODE_48, + /* 47 */ PLAYER_CSMODE_49, + /* 48 */ PLAYER_CSMODE_50, + /* 49 */ PLAYER_CSMODE_51, + /* 50 */ PLAYER_CSMODE_77, + /* 51 */ PLAYER_CSMODE_78, + /* 52 */ PLAYER_CSMODE_79, + /* 53 */ PLAYER_CSMODE_80, + /* 54 */ PLAYER_CSMODE_81, + /* 55 */ PLAYER_CSMODE_82, + /* 56 */ PLAYER_CSMODE_83, + /* 57 */ PLAYER_CSMODE_84, + /* 58 */ PLAYER_CSMODE_85, + /* 59 */ PLAYER_CSMODE_86, + /* 60 */ PLAYER_CSMODE_87, + /* 61 */ PLAYER_CSMODE_88, + /* 62 */ PLAYER_CSMODE_89, + /* 63 */ PLAYER_CSMODE_90, + /* 64 */ PLAYER_CSMODE_91, + /* 65 */ PLAYER_CSMODE_92, + /* 66 */ PLAYER_CSMODE_94, + /* 67 */ PLAYER_CSMODE_95, + /* 68 */ PLAYER_CSMODE_100, + /* 69 */ PLAYER_CSMODE_101, + /* 70 */ PLAYER_CSMODE_98, + /* 71 */ PLAYER_CSMODE_99, + /* 72 */ PLAYER_CSMODE_102, + /* 73 */ PLAYER_CSMODE_103, + /* 74 */ PLAYER_CSMODE_104, + /* 75 */ PLAYER_CSMODE_112, + /* 76 */ PLAYER_CSMODE_113, + /* 77 */ PLAYER_CSMODE_117, + /* 78 */ PLAYER_CSMODE_104, + /* 79 */ PLAYER_CSMODE_104, + /* 80 */ PLAYER_CSMODE_105, + /* 81 */ PLAYER_CSMODE_106, + /* 82 */ PLAYER_CSMODE_107, + /* 83 */ PLAYER_CSMODE_108, + /* 84 */ PLAYER_CSMODE_109, + /* 85 */ PLAYER_CSMODE_110, + /* 86 */ PLAYER_CSMODE_118, + /* 87 */ PLAYER_CSMODE_119, + /* 88 */ PLAYER_CSMODE_120, + /* 89 */ PLAYER_CSMODE_114, + /* 90 */ PLAYER_CSMODE_111, + /* 91 */ PLAYER_CSMODE_122, +}; + +f32 D_8085D3E0[PLAYER_FORM_MAX] = { + 0.8f, // PLAYER_FORM_FIERCE_DEITY + 0.6f, // PLAYER_FORM_GORON + 0.8f, // PLAYER_FORM_ZORA + 1.5f, // PLAYER_FORM_DEKU + 1.0f, // PLAYER_FORM_HUMAN +}; + +void func_80844784(PlayState* play, Player* this) { + f32 var_fv0; + s16 var_a3; + f32 temp_ft4; + s32 temp_ft2; + f32 temp_fv1_2; + f32 sp58; + f32 sp54; + f32 sp50; + f32 sp4C; + f32 sp48; + f32 sp44; + f32 temp_fa0; + f32 temp_fa1; + s16 temp_v0; + f32 temp_fv0_2; + + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sPlayerCurrentFloorType == FLOOR_TYPE_5) && + (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)) { + var_a3 = this->currentYaw; + var_fv0 = this->linearVelocity; + temp_v0 = this->actor.world.rot.y - var_a3; + + if ((ABS_ALT(temp_v0) > 0x6000) && (this->actor.speed != 0.0f)) { + var_fv0 = 0.0f; + var_a3 += 0x8000; + } + + if ((Math_StepToF(&this->actor.speed, var_fv0, 0.35f) != 0) && (var_fv0 == 0.0f)) { + this->actor.world.rot.y = this->currentYaw; + } + + if (this->linearVelocity != 0.0f) { + temp_ft2 = (fabsf(this->linearVelocity) * 700.0f) - (fabsf(this->actor.speed) * 100.0f); + temp_ft2 = CLAMP(temp_ft2, 0, 0x546); + + Math_ScaledStepToS(&this->actor.world.rot.y, var_a3, temp_ft2); + } + if ((this->linearVelocity == 0.0f) && (this->actor.speed != 0.0f)) { + func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + this->actor.speed); + } + } else { + this->actor.speed = this->linearVelocity; + this->actor.world.rot.y = this->currentYaw; + } + + Actor_UpdateVelocityWithGravity(&this->actor); + D_80862B3C = 0.0f; + if ((gSaveContext.save.saveInfo.playerData.health != 0) && + ((this->pushedSpeed != 0.0f) || (this->windSpeed != 0.0f) || (play->envCtx.windSpeed >= 50.0f)) && + (!Player_InCsMode(play)) && + !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) && + !(this->stateFlags3 & PLAYER_STATE3_100) && (func_8084D4EC != this->actionFunc) && + (this->actor.id == ACTOR_PLAYER)) { + this->actor.velocity.x += this->pushedSpeed * Math_SinS(this->pushedYaw); + this->actor.velocity.z += this->pushedSpeed * Math_CosS(this->pushedYaw); + temp_fv1_2 = 10.0f - this->actor.velocity.y; + if (temp_fv1_2 > 0.0f) { + sp58 = D_8085D3E0[this->transformation]; + sp54 = this->windSpeed * sp58; + sp50 = Math_SinS(this->windAngleX) * sp54; + sp4C = Math_CosS(this->windAngleX) * sp54; + sp48 = Math_SinS(this->windAngleY) * sp4C; + sp44 = Math_CosS(this->windAngleY) * sp4C; + + if ((sp50 > 0.0f) && (this->transformation == PLAYER_FORM_DEKU) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + if (Player_SetAction(play, this, func_80856918, 1)) { + this->stateFlags3 |= PLAYER_STATE3_2000 | PLAYER_STATE3_1000000; + func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); + func_8019FD90(4, 2); + } + + this->unk_AE8 = 0x270F; + Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos); + } + + 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_fv0_2 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1) + SQ(temp_ft4)); + if (temp_fv0_2 != 0.0f) { + temp_fv0_2 = ((play->envCtx.windSpeed - 50.0f) * 0.1f * sp58) / temp_fv0_2; + + sp48 -= temp_fa0 * temp_fv0_2; + sp50 -= temp_fa1 * temp_fv0_2; + sp44 -= temp_ft4 * temp_fv0_2; + } + } + + if (temp_fv1_2 < sp50) { + temp_fv1_2 /= sp50; + + sp48 *= temp_fv1_2; + sp50 *= temp_fv1_2; + sp44 *= temp_fv1_2; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + D_80862B3C = (sp44 * Math_CosS(this->currentYaw)) + (Math_SinS(this->currentYaw) * sp48); + if (fabsf(D_80862B3C) > 4.0f) { + func_8083FBC4(play, this); + } + + func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + fabsf(D_80862B3C)); + } + + this->actor.velocity.x += sp48; + this->actor.velocity.z += sp44; + this->actor.velocity.y += sp50; + } + } + + Actor_UpdatePos(&this->actor); +} + +Color_RGBA8 D_8085D3F4 = { 100, 255, 255, 0 }; +Color_RGBA8 D_8085D3F8 = { 0, 100, 100, 0 }; + +void func_80844D80(PlayState* play, Player* this) { + Vec3f pos; + Vec3f spA0; + Vec3f velocity; + Vec3f accel; + Vec3f sp7C; + s32 i; + + Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, &this->meleeWeaponInfo[0].base, &sp7C); + Math_Vec3f_SumScaled(&this->meleeWeaponInfo[0].base, &sp7C, 0.3f, &spA0); + + for (i = 0; i < 2; i++) { + Math_Vec3f_SumScaled(&this->meleeWeaponInfo[0].base, &sp7C, Rand_ZeroOne(), &pos); + Math_Vec3f_AddRand(&pos, 15.0f, &pos); + Math_Vec3f_DistXYZAndStoreNormDiff(&spA0, &pos, 1.7f, &velocity); + Math_Vec3f_ScaleAndStore(&velocity, 0.01f, &accel); + EffectSsKirakira_SpawnDispersed(play, &pos, &velocity, &accel, &D_8085D3F4, &D_8085D3F8, + Rand_S16Offset(-20, -120), 15); + } +} + +f32 D_8085D3FC[] = { 0.005f, 0.05f }; + +f32 sWaterConveyorSpeeds[CONVEYOR_SPEED_MAX - 1] = { + 2.0f, // CONVEYOR_SPEED_SLOW + 4.0f, // CONVEYOR_SPEED_MEDIUM + 11.0f, // CONVEYOR_SPEED_FAST +}; +f32 sFloorConveyorSpeeds[CONVEYOR_SPEED_MAX - 1] = { + 0.5f, // CONVEYOR_SPEED_SLOW + 1.0f, // CONVEYOR_SPEED_MEDIUM + 3.0f, // CONVEYOR_SPEED_FAST +}; + +void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { + f32 temp_fv0; + f32 temp_fv1; + + sPlayerControlInput = input; + if (this->unk_D6A < 0) { + this->unk_D6A++; + if (this->unk_D6A == 0) { + this->unk_D6A = 1; + play_sound(NA_SE_OC_REVENGE); + } + } + + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.home.pos); + + temp_fv1 = fabsf(this->linearVelocity) * (fabsf(Math_SinS(this->unk_B6C) * 800.0f) + 100.0f); + + Math_StepToF(&this->unk_AC0, 0.0f, CLAMP_MIN(temp_fv1, 300.0f)); + + if (this->unk_D57 != 0) { + this->unk_D57--; + } + + if (this->unk_B5E != 0) { + this->unk_B5E--; + } + + if (this->unk_D6B != 0) { + this->unk_D6B--; + } + + if (this->invincibilityTimer < 0) { + this->invincibilityTimer++; + } else if (this->invincibilityTimer > 0) { + this->invincibilityTimer--; + } + + if (this->unk_B64 != 0) { + this->unk_B64--; + } + + if (this->blastMaskTimer != 0) { + this->blastMaskTimer--; + } + + if (gSaveContext.jinxTimer != 0) { + gSaveContext.jinxTimer--; + } + + func_80122C20(play, &this->unk_3D0); + if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && func_8082FBE8(this)) { + func_80844D80(play, this); + } + if (this->transformation == PLAYER_FORM_ZORA) { + s32 var_v0 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 1 : 0; + + Math_StepToF(&this->unk_B10[0], var_v0, D_8085D3FC[var_v0]); + } + func_80832888(this, play); + if (play->roomCtx.curRoom.enablePosLights != 0) { + Lights_PointSetColorAndRadius(&this->lightInfo, 255, 255, 255, 60); + } else { + this->lightInfo.params.point.radius = -1; + } + + if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) { + func_808442D8(play, this); + } else if (this->heldItemAction == PLAYER_IA_FISHING_ROD) { + if (this->unk_B28 < 0) { + this->unk_B28++; + } + } + + if (this->shockTimer != 0) { + func_808445C4(play, this); + } + if (this->isBurning) { + func_808341F4(play, this); + } + + if (this->stateFlags2 & PLAYER_STATE2_8000) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_StopHorizontalMovement(this); + Actor_MoveWithGravity(&this->actor); + } + func_80843178(play, this); + } else { + f32 temp_fa0; + f32 var_fv1_2; + s32 var_v1; + s32 pad; + + if (this->currentBoots != this->prevBoots) { + if (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_8082DC64(play, this); + if (this->ageProperties->unk_2C < this->actor.depthInWater) { + this->stateFlags2 |= PLAYER_STATE2_400; + } + } + } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) && + ((this->prevBoots == PLAYER_BOOTS_ZORA_UNDERWATER) || + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + func_8083B930(play, this); + this->stateFlags2 &= ~PLAYER_STATE2_400; + if (func_808508C8 == this->actionFunc) { + this->unk_AE8 = 20; + } + } + this->prevBoots = this->currentBoots; + } + if ((this->actor.parent == NULL) && (this->stateFlags1 & PLAYER_STATE1_800000)) { + this->actor.parent = this->rideActor; + func_80837BD0(play, this); + this->unk_AE8 = -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); + } + + if (this->unk_ADC == 0) { + this->unk_ADD = 0; + } else if (this->unk_ADC < 0) { + this->unk_ADC++; + } else { + this->unk_ADC--; + } + + if (!(this->stateFlags3 & PLAYER_STATE3_2000)) { + Math_ScaledStepToS(&this->unk_AAA, 0, 0x190); + } + + if ((this->transformation >= PLAYER_FORM_GORON) && (this->transformation <= PLAYER_FORM_DEKU)) { + func_800BBB74(&this->blinkInfo, 20, 80, 3); + } else { + func_800BBAC0(&this->blinkInfo, 20, 80, 6); + } + + this->actor.shape.face = ((play->gameplayFrames & 0x20) ? 0 : 3) + this->blinkInfo.eyeTexIndex; + + if (this->currentMask == PLAYER_MASK_BUNNY) { + Player_UpdateBunnyEars(this); + } + + if (func_800B7118(this)) { + func_808484F0(this); + } + + if ((play->unk_18844 == 0) && !(this->skelAnime.moveFlags & ANIM_FLAG_80)) { + if (!(this->stateFlags1 & PLAYER_STATE1_2) && (this->actor.parent == NULL)) { + func_80844784(play, this); + } + func_80843178(play, this); + } else { + sPlayerCurrentFloorType = FLOOR_TYPE_0; + this->floorProperty = FLOOR_PROPERTY_0; + if (this->stateFlags1 & PLAYER_STATE1_800000) { + this->actor.floorPoly = this->rideActor->floorPoly; + this->actor.floorBgId = this->rideActor->floorBgId; + } + sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; + this->pushedSpeed = 0.0f; + } + + func_8083562C(play, this, this->actor.floorPoly, this->actor.floorBgId); + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { + f32 conveyorSpeed; + s32 pad2; + + sPlayerConveyorSpeedIndex--; + if (!sPlayerIsOnFloorConveyor) { + conveyorSpeed = sWaterConveyorSpeeds[sPlayerConveyorSpeedIndex]; + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + conveyorSpeed /= 4.0f; + } + } else { + conveyorSpeed = sFloorConveyorSpeeds[sPlayerConveyorSpeedIndex]; + } + + Math_StepToF(&this->pushedSpeed, conveyorSpeed, conveyorSpeed * 0.1f); + Math_ScaledStepToS(&this->pushedYaw, D_80862B16, + ((this->stateFlags1 & PLAYER_STATE1_8000000) ? 400.0f : 800.0f) * conveyorSpeed); + } else if (this->pushedSpeed != 0.0f) { + Math_StepToF(&this->pushedSpeed, 0.0f, (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 2.0f); + } + if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && + !(this->stateFlags3 & PLAYER_STATE3_80) && (func_80854430 != this->actionFunc)) { + func_8083BB4C(play, this); + if (!Play_InCsMode(play)) { + if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_80000000) && + (gSaveContext.save.saveInfo.playerData.health == 0) && + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_DEATH])) { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } else if (this->stateFlags1 & + (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) { + func_8082DD2C(play, this); + func_80833AA0(this, play); + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (this->stateFlags1 & PLAYER_STATE1_8000000)) { + func_80831F34(play, this, + func_801242B4(this) + ? &gPlayerAnim_link_swimer_swim_down + : ((this->shockTimer != 0) ? &gPlayerAnim_link_normal_electric_shock_end + : &gPlayerAnim_link_derth_rebirth)); + } + } else { + if ((this->actor.parent == NULL) && + (func_8082DA90(play) || (this->unk_D6B != 0) || !func_80834600(this, play))) { + func_8083827C(this, play); + } else { + this->fallStartHeight = this->actor.world.pos.y; + } + + Player_DetectSecrets(play, this); + } + } + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (func_8084D820 == this->actionFunc) && + (this->unk_397 == 4)) { + this->actor.world.pos.y = this->actor.prevPos.y; + } + + if (play->csCtx.state != CS_STATE_IDLE) { + if ((this->csMode != PLAYER_CSMODE_5) && !(this->stateFlags1 & PLAYER_STATE1_800000)) { + if (!(this->stateFlags2 & PLAYER_STATE2_80) && (this->actor.id == ACTOR_PLAYER)) { + if ((play->csCtx.playerCue != NULL) && (D_8085D384[play->csCtx.playerCue->id] != 0)) { + func_800B7298(play, NULL, PLAYER_CSMODE_5); + Player_StopHorizontalMovement(this); + } else if (((u32)this->csMode == PLAYER_CSMODE_0) && + !(this->stateFlags2 & (PLAYER_STATE2_400 | PLAYER_STATE2_8000000)) && + (play->csCtx.state != CS_STATE_STOP)) { + func_800B7298(play, NULL, PLAYER_CSMODE_20); + Player_StopHorizontalMovement(this); + } + } + } + } + + if ((u32)this->csMode != PLAYER_CSMODE_0) { + if ((this->csMode != PLAYER_CSMODE_END) || + !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | + PLAYER_STATE1_200000 | PLAYER_STATE1_4000000))) { + if (func_8085B08C != this->actionFunc) { + this->unk_AA5 = PLAYER_UNKAA5_4; + if (this->csMode == PLAYER_CSMODE_5) { + func_808387A0(play, this); + func_8082DAD4(this); + } + } + } else if (func_8085B08C != this->actionFunc) { + func_8085AACC(play, this, 0); + } + } else { + this->prevCsMode = PLAYER_CSMODE_0; + } + + func_8083BF54(play, this); + 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)) && + (this->tatlTextId == 0)) { + this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); + } + + this->stateFlags1 &= ~(PLAYER_STATE1_10 | PLAYER_STATE1_1000 | PLAYER_STATE1_400000); + this->stateFlags2 &= ~(PLAYER_STATE2_1 | PLAYER_STATE2_4 | PLAYER_STATE2_8 | PLAYER_STATE2_20 | + PLAYER_STATE2_40 | PLAYER_STATE2_100 | PLAYER_STATE2_200 | PLAYER_STATE2_1000 | + PLAYER_STATE2_4000 | PLAYER_STATE2_10000 | PLAYER_STATE2_400000 | PLAYER_STATE2_4000000); + this->stateFlags3 &= ~(PLAYER_STATE3_10 | PLAYER_STATE3_40 | PLAYER_STATE3_100 | PLAYER_STATE3_800 | + PLAYER_STATE3_1000 | PLAYER_STATE3_100000 | PLAYER_STATE3_2000000 | + PLAYER_STATE3_4000000 | PLAYER_STATE3_8000000 | PLAYER_STATE3_10000000); + func_808425B4(this); + func_8082EB38(play, this); + + D_8085C3E4 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 1.0f; + D_8085C3E8 = 1.0f / D_8085C3E4; + + D_80862B48 = D_80862B4C = 0; + + var_v1 = Play_InCsMode(play); + D_80862B2C = this->currentMask; + if (!(this->stateFlags3 & PLAYER_STATE3_4)) { + this->actionFunc(this, play); + } + + if (!var_v1) { + Player_SetDoAction(play, this); + } + + Player_UpdateCamAndSeqModes(play, this); + + if (this->skelAnime.moveFlags & ANIM_FLAG_8) { + AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, + (this->skelAnime.moveFlags & ANIM_FLAG_4) ? 1.0f + : this->ageProperties->unk_08); + } + + func_80832578(this, play); + if (this->actor.flags & ACTOR_FLAG_TALK_REQUESTED) { + this->talkActorDistance = 0.0f; + } else { + this->talkActor = NULL; + this->exchangeItemId = PLAYER_IA_NONE; + this->talkActorDistance = FLT_MAX; + } + if (!(this->actor.flags & ACTOR_FLAG_20000000) && (this->unk_AA5 != PLAYER_UNKAA5_5)) { + this->unk_A90 = NULL; + this->unk_A94 = FLT_MAX; + } + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + this->interactRangeActor = NULL; + this->getItemDirection = 0x6000; + } + if (this->actor.parent == NULL) { + this->rideActor = NULL; + } + + this->tatlTextId = 0; + this->unk_B2B = -1; + this->closestSecretDistSq = FLT_MAX; + this->doorType = PLAYER_DOORTYPE_NONE; + this->unk_B75 = 0; + this->unk_A78 = NULL; + + Math_StepToF(&this->windSpeed, 0.0f, 0.5f); + if ((this->unk_B62 != 0) || + ((gSaveContext.magicState == MAGIC_STATE_IDLE) && (gSaveContext.save.saveInfo.playerData.magic != 0) && + (this->stateFlags1 & PLAYER_STATE1_10))) { + func_8082F1AC(play, this); + } + + temp_fv0 = this->actor.world.pos.y - this->actor.prevPos.y; + var_fv1_2 = + temp_fv0 + + ((this->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].y) * + 0.5f); + temp_fv0 += this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 10.0f; + + if (this->cylinder.info.toucher.dmgFlags == 0x80000) { + this->cylinder.dim.height = 80; + var_fv1_2 = ((temp_fv0 + var_fv1_2) * 0.5f) - 40.0f; + } else { + this->cylinder.dim.height = temp_fv0 - var_fv1_2; + + if (this->cylinder.dim.height < 0) { + temp_fa0 = temp_fv0; + temp_fv0 = var_fv1_2; + var_fv1_2 = temp_fa0; + this->cylinder.dim.height = -this->cylinder.dim.height; + } + } + + this->cylinder.dim.yShift = var_fv1_2 - this->actor.world.pos.y; + + if (this->unk_B62 != 0) { + this->shieldCylinder.base.acFlags = AC_NONE; + this->shieldCylinder.info.toucher.dmgFlags = 0x80000; + this->shieldCylinder.info.toucherFlags = TOUCH_ON; + this->shieldCylinder.info.bumperFlags = BUMP_NONE; + this->shieldCylinder.dim.height = 80; + this->shieldCylinder.dim.radius = 50; + this->shieldCylinder.dim.yShift = ((temp_fv0 + var_fv1_2) * 0.5f - 40.0f) - this->actor.world.pos.y; + + Collider_UpdateCylinder(&this->actor, &this->shieldCylinder); + CollisionCheck_SetAT(play, &play->colChkCtx, &this->shieldCylinder.base); + } else if (this->stateFlags1 & PLAYER_STATE1_400000) { + if ((this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU)) { + this->shieldCylinder.base.acFlags = AC_ON | AC_HARD | AC_TYPE_ENEMY; + this->shieldCylinder.info.toucher.dmgFlags = 0x100000; + this->shieldCylinder.info.toucherFlags = TOUCH_NONE; + this->shieldCylinder.info.bumperFlags = BUMP_ON; + + if (this->transformation == PLAYER_FORM_GORON) { + this->shieldCylinder.dim.height = 35; + } else { + this->shieldCylinder.dim.height = 30; + } + + if (this->transformation == PLAYER_FORM_GORON) { + this->shieldCylinder.dim.radius = 30; + } else { + this->shieldCylinder.dim.radius = 20; + } + + this->shieldCylinder.dim.yShift = 0; + Collider_UpdateCylinder(&this->actor, &this->shieldCylinder); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->shieldCylinder.base); + this->cylinder.dim.yShift = 0; + this->cylinder.dim.height = this->shieldCylinder.dim.height; + } else { + this->cylinder.dim.height = this->cylinder.dim.height * 0.8f; + } + } + + Collider_UpdateCylinder(&this->actor, &this->cylinder); + if (!(this->stateFlags2 & PLAYER_STATE2_4000)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | + PLAYER_STATE1_800000)) && + !(this->stateFlags3 & PLAYER_STATE3_10000000)) { + if ((func_808561B0 != this->actionFunc) && (func_80853D68 != this->actionFunc) && + (this->actor.draw != NULL)) { + if ((this->actor.id != ACTOR_PLAYER) && (this->csMode == PLAYER_CSMODE_110)) { + this->cylinder.dim.radius = 8; + } + CollisionCheck_SetOC(play, &play->colChkCtx, &this->cylinder.base); + } + } + if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) { + if ((func_808561B0 != this->actionFunc) && + ((func_80857BE8 != this->actionFunc) || (this->unk_AE7 != 1))) { + if (this->cylinder.base.atFlags != AT_NONE) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base); + } + CollisionCheck_SetAC(play, &play->colChkCtx, &this->cylinder.base); + } + } + } + + AnimationContext_SetNextQueue(play); + } + + func_801229FC(this); + Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos); + + if ((this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000)) || + (this != GET_PLAYER(play))) { + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + } else { + this->actor.colChkInfo.mass = sPlayerMass[this->transformation]; + } + + this->stateFlags3 &= ~(PLAYER_STATE3_4 | PLAYER_STATE3_400); + Collider_ResetCylinderAC(play, &this->cylinder.base); + Collider_ResetCylinderAC(play, &this->shieldCylinder.base); + Collider_ResetCylinderAT(play, &this->shieldCylinder.base); + Collider_ResetQuadAT(play, &this->meleeWeaponQuads[0].base); + Collider_ResetQuadAT(play, &this->meleeWeaponQuads[1].base); + Collider_ResetQuadAC(play, &this->shieldQuad.base); + + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) || + (this->actor.floorBgId != BGCHECK_SCENE)) { + this->unk_AC0 = 0.0f; + } + this->actor.shape.yOffset = this->unk_ABC + this->unk_AC0; +} + +Vec3f D_8085D41C = { 0.0f, 0.0f, -30.0f }; + +void Player_Update(Actor* thisx, PlayState* play) { + static Vec3f sDogSpawnPos; + Player* this = (Player*)thisx; + s32 dogParams; + s32 pad; + Input input; + s32 pad2; + + this->stateFlags3 &= ~PLAYER_STATE3_10; + + // This block is a leftover dog-following mechanic from OoT + if (gSaveContext.dogParams < 0) { + if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0) { + gSaveContext.dogParams = 0; + } else { + Actor* dog; + + gSaveContext.dogParams &= (u16)~0x8000; + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D41C, &sDogSpawnPos); + + dogParams = gSaveContext.dogParams; + + dog = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_DG, sDogSpawnPos.x, sDogSpawnPos.y, sDogSpawnPos.z, 0, + this->actor.shape.rot.y, 0, dogParams | 0x8000); + if (dog != NULL) { + dog->room = -1; + } + } + } + + if ((this->interactRangeActor != NULL) && (this->interactRangeActor->update == NULL)) { + this->interactRangeActor = NULL; + } + + if ((this->heldActor != NULL) && (this->heldActor->update == NULL)) { + func_8082DCA0(play, this); + } + + if ((play->actorCtx.unk268 != 0) && (this == GET_PLAYER(play))) { + input = play->actorCtx.unk_26C; + } else if ((this->csMode == PLAYER_CSMODE_5) || (this->stateFlags1 & (PLAYER_STATE1_20 | PLAYER_STATE1_20000000)) || + (this != GET_PLAYER(play)) || func_8082DA90(play) || + (gSaveContext.save.saveInfo.playerData.health == 0)) { + bzero(&input, sizeof(Input)); + this->fallStartHeight = this->actor.world.pos.y; + } else { + input = *CONTROLLER1(&play->state); + if (this->unk_B5E != 0) { + input.cur.button &= ~(BTN_CUP | BTN_B | BTN_A); + input.press.button &= ~(BTN_CUP | BTN_B | BTN_A); + } + } + + Player_UpdateCommon(this, play, &input); + play->actorCtx.unk268 = 0; + bzero(&play->actorCtx.unk_26C, sizeof(Input)); + + MREG(52) = this->actor.world.pos.x; + MREG(53) = this->actor.world.pos.y; + MREG(54) = this->actor.world.pos.z; + MREG(55) = this->actor.world.rot.y; +} + +void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, + OverrideLimbDrawFlex overrideLimbDraw) { + OPEN_DISPS(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x0C, cullDList); + gSPSegment(POLY_XLU_DISP++, 0x0C, cullDList); + + Player_DrawImpl(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, lod, + this->transformation, 0, this->actor.shape.face, overrideLimbDraw, Player_PostLimbDrawGameplay, + &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} + +void func_80846460(Player* this) { + Vec3f* pos; + Vec3f* bodyPartsPos; + s32 i; + + this->actor.focus.pos.x = this->actor.world.pos.x; + this->actor.focus.pos.z = this->actor.world.pos.z; + this->actor.focus.pos.y = this->actor.world.pos.y + 24.0f; + + pos = &this->actor.world.pos; + bodyPartsPos = this->bodyPartsPos; + for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + Math_Vec3f_Copy(bodyPartsPos, pos); + bodyPartsPos++; + } + + this->bodyPartsPos[PLAYER_BODYPART_HEAD].y = this->actor.world.pos.y + 24.0f; + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y = this->actor.world.pos.y + 60.0f; + Math_Vec3f_Copy(this->actor.shape.feetPos, pos); + Math_Vec3f_Copy(&this->actor.shape.feetPos[1], pos); +} + +struct_80124618 D_8085D428[] = { + { 0, { 0, 0, 0 } }, { 1, { 80, 170, 80 } }, { 3, { 100, 80, 100 } }, + { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D450[] = { + { 0, { 0, 0, 0 } }, { 1, { 80, 170, 80 } }, { 3, { 100, 80, 100 } }, + { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D478[] = { + { 0, { 0, 0, 0 } }, + { 8, { 0, 0, 0 } }, +}; +struct_80124618 D_8085D488[] = { + { 0, { 100, 100, 100 } }, { 1, { 100, 60, 100 } }, { 3, { 100, 140, 100 } }, + { 7, { 100, 80, 100 } }, { 9, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D4B0[] = { + { 0, { 100, 100, 100 } }, { 1, { 100, 70, 100 } }, { 3, { 100, 120, 100 } }, + { 6, { 100, 80, 100 } }, { 8, { 100, 100, 100 } }, { 9, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D4E0[] = { + { 0, { 0, 0, 0 } }, { 1, { 0, 0, 0 } }, { 3, { 100, 130, 100 } }, + { 5, { 130, 130, 130 } }, { 7, { 80, 90, 80 } }, { 9, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D510[] = { + { 0, { 0, 50, 0 } }, + { 1, { 0, 50, 0 } }, +}; +struct_80124618 D_8085D520[] = { + { 0, { 100, 120, 100 } }, + { 1, { 100, 120, 100 } }, +}; +struct_80124618 D_8085D530[] = { + { 0, { 160, 120, 160 } }, + { 1, { 160, 120, 160 } }, +}; +struct_80124618 D_8085D540[] = { + { 0, { 0, 0, 0 } }, + { 2, { 100, 100, 100 } }, +}; + +struct_80124618* D_8085D550[3] = { + D_8085D488, + D_8085D4B0, + D_8085D4E0, +}; +struct_80124618* D_8085D55C[3] = { + D_8085D428, + D_8085D450, + D_8085D478, +}; +struct_80124618* D_8085D568[3] = { + D_8085D510, + D_8085D520, + D_8085D530, +}; + +Gfx* D_8085D574[] = { + object_link_nuts_DL_009C48, + object_link_nuts_DL_009AB8, + object_link_nuts_DL_009DB8, +}; + +Color_RGB8 D_8085D580 = { 255, 255, 255 }; +Color_RGB8 D_8085D584 = { 80, 80, 200 }; + +void Player_Draw(Actor* thisx, PlayState* play) { + Player* this = THIS; + f32 one = 1.0f; + s32 spEC = false; + + Math_Vec3f_Copy(&this->unk_D6C, &this->bodyPartsPos[PLAYER_BODYPART_WAIST]); + if (this->stateFlags3 & (PLAYER_STATE3_100 | PLAYER_STATE3_40000)) { + struct_80124618** spE8 = D_8085D550; + struct_80124618** spE4; + f32 spE0; + Gfx** spDC; + s32 i; + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + func_8012C268(&play->state); + spEC = true; + if (this->stateFlags3 & PLAYER_STATE3_40000) { + Matrix_SetTranslateRotateYXZ(this->unk_AF0[0].x, this->unk_AF0[0].y, this->unk_AF0[0].z, &gZeroVec3s); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + spE8 = D_8085D568; + spE0 = 0.0f; + } else { + Matrix_Translate(0.0f, -this->unk_ABC, 0.0f, MTXMODE_APPLY); + spE0 = this->unk_AE8 - 6; + if (spE0 < 0.0f) { + spE8 = D_8085D55C; + spE0 = this->unk_B86[0]; + } + } + + spE4 = spE8; + spDC = D_8085D574; + + for (i = 0; i < 3; i++, spE4++, spDC++) { + Matrix_Push(); + func_80124618(*spE4, spE0, &this->unk_AF0[1]); + Matrix_Scale(this->unk_AF0[1].x, this->unk_AF0[1].y, this->unk_AF0[1].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++, *spDC); + + Matrix_Pop(); + } + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } + + if (!(this->stateFlags2 & PLAYER_STATE2_20000000) && (this->unk_ABC > -3900.0f)) { + OPEN_DISPS(play->state.gfxCtx); + + if (!spEC) { + func_8012C268(&play->state); + } + + func_8012C2DC(play->state.gfxCtx); + + func_800B8050(&this->actor, play, 0); + func_800B8118(&this->actor, play, 0); + func_80122868(play, this); + + if (this->stateFlags3 & PLAYER_STATE3_1000) { + Color_RGB8 spBC; + f32 spB8 = this->unk_ABC + 1.0f; + f32 spB4 = 1.0f - (this->unk_ABC * 0.5f); + + func_80846460(this); + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (1200.0f * this->actor.scale.y * spB8), + this->actor.world.pos.z, MTXMODE_NEW); + + if (this->unk_B86[0] != 0) { + Matrix_RotateYS(this->unk_B28, MTXMODE_APPLY); + Matrix_RotateXS(this->unk_B86[0], MTXMODE_APPLY); + Matrix_RotateYS(-this->unk_B28, MTXMODE_APPLY); + } + + Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); + Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); + + Matrix_Scale(this->actor.scale.x * spB4 * 1.15f, this->actor.scale.y * spB8 * 1.15f, + 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); + + gDPSetEnvColor(POLY_OPA_DISP++, spBC.r, spBC.g, spBC.b, 255); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gLinkGoronCurledDL); + + if (this->unk_B86[1] != 0) { + if (this->unk_B86[1] < 3) { + func_80124618(D_8085D540, this->unk_B86[1], this->unk_AF0); + Matrix_Scale(this->unk_AF0[0].x, this->unk_AF0[0].y, this->unk_AF0[0].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_link_goron_DL_00C540); + } + + func_80122BA4(play, &this->unk_3D0, 1, 255); + func_80122BA4(play, &this->unk_3D0, 2, 255); + + if (this->unk_B86[1] < 3) { + if (this->unk_AE7 >= 5) { + f32 var_fa1; + u8 sp9B; + + var_fa1 = (this->unk_AE7 - 4) * 0.02f; + + if (this->unk_B86[1] != 0) { + sp9B = (-this->unk_B86[1] * 0x55) + 0xFF; + } else { + sp9B = (200.0f * var_fa1); + } + + if (this->unk_B86[1] != 0) { + var_fa1 = 0.65f; + } else { + var_fa1 *= one; + } + + Matrix_Scale(1.0f, var_fa1, var_fa1, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_013138)); + gDPSetEnvColor(POLY_XLU_DISP++, 155, 0, 0, sp9B); + gSPDisplayList(POLY_XLU_DISP++, object_link_goron_DL_0127B0); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_014684)); + gSPDisplayList(POLY_XLU_DISP++, object_link_goron_DL_0134D0); + } + } + } else if ((this->transformation == PLAYER_FORM_GORON) && (this->stateFlags1 & PLAYER_STATE1_400000)) { + func_80846460(this); + SkelAnime_DrawFlexOpa(play, this->unk_2C8.skeleton, this->unk_2C8.jointTable, this->unk_2C8.dListCount, + NULL, NULL, NULL); + } else { + OverrideLimbDrawFlex sp84 = Player_OverrideLimbDrawGameplayDefault; + s32 lod = ((this->csMode != PLAYER_CSMODE_0) || (this->actor.projectedPos.z < 320.0f)) ? 0 : 1; + Vec3f sp74; + + //! FAKE + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {} + + if (this->stateFlags1 & PLAYER_STATE1_100000) { + SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->actor.focus.pos, &sp74); + if (sp74.z < -4.0f) { + sp84 = Player_OverrideLimbDrawGameplayFirstPerson; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_4000000) { + s16 temp_s0_2 = play->gameplayFrames * 600; + s16 sp70 = (play->gameplayFrames * 1000) & 0xFFFF; + + Matrix_Push(); + + this->actor.scale.y = -this->actor.scale.y; + Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, + this->actor.world.pos.y + (2.0f * this->actor.depthInWater) + + (this->unk_ABC * this->actor.scale.y), + this->actor.world.pos.z, &this->actor.shape.rot); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateXS(temp_s0_2, MTXMODE_APPLY); + Matrix_RotateYS(sp70, MTXMODE_APPLY); + Matrix_Scale(1.1f, 0.95f, 1.05f, MTXMODE_APPLY); + Matrix_RotateYS(-sp70, MTXMODE_APPLY); + Matrix_RotateXS(-temp_s0_2, MTXMODE_APPLY); + Player_DrawGameplay(play, this, lod, gCullFrontDList, sp84); + this->actor.scale.y = -this->actor.scale.y; + + Matrix_Pop(); + } + + gSPClearGeometryMode(POLY_OPA_DISP++, G_CULL_BOTH); + + gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BOTH); + + if ((this->transformation == PLAYER_FORM_ZORA) && (this->unk_B62 != 0) && + !(this->stateFlags3 & PLAYER_STATE3_8000)) { + Matrix_Push(); + Matrix_RotateXS(-0x4000, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -1800.0f, MTXMODE_APPLY); + Player_DrawZoraShield(play, this); + Matrix_Pop(); + } + + Player_DrawGameplay(play, this, lod, gCullBackDList, sp84); + } + + func_801229A0(play, this); + if (this->stateFlags2 & PLAYER_STATE2_4000) { + f32 temp_fa0 = this->unk_B48; + + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, -(s32)play->gameplayFrames & 0x7F, 0x20, 0x20, 1, 0, + ((s32)play->gameplayFrames * -2) & 0x7F, 0x20, 0x20)); + + Matrix_Scale(temp_fa0, temp_fa0, temp_fa0, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, 255); + + gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL); + } + + if (this->getItemDrawIdPlusOne > GID_NONE + 1) { + Player_DrawGetItem(play, this); + } + + func_80122D44(play, &this->unk_3D0); + + CLOSE_DISPS(play->state.gfxCtx); + } + + play->actorCtx.flags &= ~ACTORCTX_FLAG_3; +} + +void Player_Destroy(Actor* thisx, PlayState* play) { + Player* this = (Player*)thisx; + + Effect_Destroy(play, this->meleeWeaponEffectIndex[0]); + Effect_Destroy(play, this->meleeWeaponEffectIndex[1]); + Effect_Destroy(play, this->meleeWeaponEffectIndex[2]); + LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); + Collider_DestroyCylinder(play, &this->cylinder); + Collider_DestroyCylinder(play, &this->shieldCylinder); + Collider_DestroyQuad(play, &this->meleeWeaponQuads[0]); + Collider_DestroyQuad(play, &this->meleeWeaponQuads[1]); + Collider_DestroyQuad(play, &this->shieldQuad); + ZeldaArena_Free(this->giObjectSegment); + ZeldaArena_Free(this->maskObjectSegment); + Magic_Reset(play); + func_80831454(this); +} + +s32 func_80847190(PlayState* play, Player* this, s32 arg2) { + s32 pad; + s16 var_s0; + + if (!func_800B7128(this) && !func_8082EF20(this) && !arg2) { + var_s0 = sPlayerControlInput->rel.stick_y * 0xF0; + Math_SmoothStepToS(&this->actor.focus.rot.x, var_s0, 0xE, 0xFA0, 0x1E); + + var_s0 = sPlayerControlInput->rel.stick_x * -0x10; + var_s0 = CLAMP(var_s0, -0xBB8, 0xBB8); + this->actor.focus.rot.y += var_s0; + } else { + s16 temp3; + + temp3 = ((sPlayerControlInput->rel.stick_y >= 0) ? 1 : -1) * + (s32)((1.0f - Math_CosS(sPlayerControlInput->rel.stick_y * 0xC8)) * 1500.0f); + this->actor.focus.rot.x += temp3; + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + this->actor.focus.rot.x = CLAMP(this->actor.focus.rot.x, -0x1F40, 0xFA0); + } else { + this->actor.focus.rot.x = CLAMP(this->actor.focus.rot.x, -0x36B0, 0x36B0); + } + + var_s0 = this->actor.focus.rot.y - this->actor.shape.rot.y; + temp3 = ((sPlayerControlInput->rel.stick_x >= 0) ? 1 : -1) * + (s32)((1.0f - Math_CosS(sPlayerControlInput->rel.stick_x * 0xC8)) * -1500.0f); + var_s0 += temp3; + + this->actor.focus.rot.y = CLAMP(var_s0, -0x4AAA, 0x4AAA) + this->actor.shape.rot.y; + } + + this->unk_AA6 |= 2; + + return func_80832754(this, (play->unk_1887C != 0) || func_800B7128(this) || func_8082EF20(this)); +} + +void func_8084748C(Player* this, f32* speed, f32 speedTarget, s16 yawTarget) { + f32 incrStep = this->skelAnime.curFrame - 10.0f; + f32 maxSpeed = (R_RUN_SPEED_LIMIT / 100.0f) * 0.8f; + + if (*speed > maxSpeed) { + *speed = maxSpeed; + } + + if ((0.0f < incrStep) && (incrStep < 16.0f)) { + incrStep = fabsf(incrStep) * 0.5f; + } else { + speedTarget = 0.0f; + incrStep = 0.0f; + } + + Math_AsymStepToF(speed, speedTarget * 0.8f, incrStep, (fabsf(*speed) * 0.02f) + 0.05f); + Math_ScaledStepToS(&this->currentYaw, yawTarget, 1600); // 1 ESS turn, also one frame of first-person rotation +} + +void func_808475B4(Player* this) { + f32 sp4; + f32 temp_fa1; + f32 temp_fv0; + f32 var_ft4 = -5.0f; + f32 var_ft5 = this->ageProperties->unk_28; + f32 var_ft5_4; + + temp_fv0 = this->actor.depthInWater - var_ft5; + if (this->actor.velocity.y < 0.0f) { + var_ft5 += 1.0f; + } + + if (this->actor.depthInWater < var_ft5) { + temp_fv0 = CLAMP(temp_fv0, -0.4f, -0.1f); + sp4 = temp_fv0 - ((this->actor.velocity.y <= 0.0f) ? 0.0f : this->actor.velocity.y * 0.5f); + } else { + if (!(this->stateFlags1 & PLAYER_STATE1_80) && (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && + (this->actor.velocity.y >= -5.0f)) { + sp4 = -0.3f; + } else if ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.velocity.y < 0.0f)) { + var_ft4 = 0.0f; + sp4 = -this->actor.velocity.y; + } else { + var_ft4 = 2.0f; + var_ft5_4 = CLAMP(temp_fv0, 0.1f, 0.4f); + sp4 = ((this->actor.velocity.y >= 0.0f) ? 0.0f : this->actor.velocity.y * -0.3f) + var_ft5_4; + } + + if (this->actor.depthInWater > 100.0f) { + this->stateFlags2 |= PLAYER_STATE2_400; + } + } + + this->actor.velocity.y += sp4; + if (((this->actor.velocity.y - var_ft4) * sp4) > 0.0f) { + this->actor.velocity.y = var_ft4; + } + this->actor.gravity = 0.0f; +} + +void func_808477D0(PlayState* play, Player* this, Input* input, f32 arg3) { + f32 var_fv0; + + if ((input != NULL) && CHECK_BTN_ANY(input->press.button, BTN_B | BTN_A)) { + var_fv0 = 1.0f; + } else { + var_fv0 = 0.5f; + } + + var_fv0 = var_fv0 * arg3; + var_fv0 = CLAMP(var_fv0, 1.0f, 2.5f); + this->skelAnime.playSpeed = var_fv0; + + PlayerAnimation_Update(play, &this->skelAnime); +} + +s32 func_80847880(PlayState* play, Player* this) { + if (play->unk_1887C != 0) { + if (play->sceneId == SCENE_20SICHITAI) { + Player_SetAction(play, this, func_80854430, 0); + play->unk_1887C = 0; + this->csMode = PLAYER_CSMODE_0; + return true; + } + + func_8082DE50(play, this); + Player_SetAction(play, this, func_80854614, 0); + if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) { + func_80831990(play, this, ITEM_BOW); + } + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->csMode = PLAYER_CSMODE_0; + this->stateFlags1 |= PLAYER_STATE1_100000; + Player_StopHorizontalMovement(this); + func_80836D8C(this); + + return true; + } + return false; +} + +s32 func_80847994(PlayState* play, Player* this) { + if (this->stateFlags3 & PLAYER_STATE3_20) { + this->stateFlags3 &= ~PLAYER_STATE3_20; + this->itemAction = PLAYER_IA_OCARINA; + this->unk_AA5 = PLAYER_UNKAA5_5; + func_80838A90(this, play); + return true; + } + return false; +} + +void func_808479F4(PlayState* play, Player* this, f32 arg2) { + if (this->actor.wallBgId != BGCHECK_SCENE) { + DynaPolyActor* actor = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + + if (actor != NULL) { + func_800B72F8(actor, arg2, this->actor.world.rot.y); + } + } +} + +void func_80847A50(Player* this) { + Player_PlaySfx(this, ((this->unk_AE7 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) + + this->ageProperties->surfaceSfxIdOffset); +} + +Vec3f D_8085D588[] = { + { 30.0f, 0.0f, 0.0f }, + { -30.0f, 0.0f, 0.0f }, +}; +Vec3f D_8085D5A0[] = { + { 60.0f, 20.0f, 0.0f }, + { -60.0f, 20.0f, 0.0f }, +}; +Vec3f D_8085D5B8[] = { + { 60.0f, -20.0f, 0.0f }, + { -60.0f, -20.0f, 0.0f }, +}; +Vec3f D_8085D5D0 = { 0.0f, 0.0f, -30.0f }; + +// related to mounting/unmounting the horse +s32 func_80847A94(PlayState* play, Player* this, s32 arg2, f32* arg3) { + Actor* rideActor = this->rideActor; + f32 sp60 = rideActor->world.pos.y + 20.0f; + f32 sp5C = rideActor->world.pos.y - 20.0f; + Vec3f sp50; + Vec3f sp44; + CollisionPoly* sp40; + CollisionPoly* sp3C; + s32 sp38; + s32 sp34; + + *arg3 = func_80835CD8(play, this, &D_8085D588[arg2], &sp50, &sp3C, &sp34); + + if ((sp5C < *arg3) && (*arg3 < sp60)) { + if (!func_80835D58(play, this, &D_8085D5A0[arg2], &sp40, &sp38, &sp44)) { + if (!func_80835D58(play, this, &D_8085D5B8[arg2], &sp40, &sp38, &sp44)) { + this->actor.floorPoly = sp3C; + this->actor.floorBgId = sp38; + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, sp3C, sp34); + return true; + } + } + } + return false; +} + +s32 func_80847BF0(Player* this, PlayState* play) { + EnHorse* rideActor = (EnHorse*)this->rideActor; + s32 var_a2; + f32 sp34; + + if (this->unk_AE8 < 0) { + this->unk_AE8 = 0x63; + } else { + var_a2 = (this->mountSide < 0) ? 0 : 1; + + if (!func_80847A94(play, this, var_a2, &sp34)) { + var_a2 ^= 1; + if (!func_80847A94(play, this, var_a2, &sp34)) { + return false; + } + + this->mountSide = -this->mountSide; + } + + if (play->csCtx.state == CS_STATE_IDLE) { + if (!func_8082DA90(play)) { + if (EN_HORSE_CHECK_1(rideActor) || EN_HORSE_CHECK_4(rideActor)) { + this->stateFlags2 |= PLAYER_STATE2_400000; + + if (EN_HORSE_CHECK_1(rideActor) || + (EN_HORSE_CHECK_4(rideActor) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A))) { + rideActor->actor.child = NULL; + + func_8083172C(play, this, func_808505D0, 0); + this->unk_B48 = sp34 - rideActor->actor.world.pos.y; + + Player_AnimationPlayOnce(play, this, + (this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down + : &gPlayerAnim_link_uma_right_down); + + return true; + } + } + } + } + } + + return false; +} + +// Used in 2 horse-related functions +void func_80847E2C(Player* this, f32 arg1, f32 minFrame) { + f32 addend; + f32 dir; + + if ((this->unk_B48 != 0.0f) && (minFrame <= this->skelAnime.curFrame)) { + if (arg1 < fabsf(this->unk_B48)) { + dir = (this->unk_B48 >= 0.0f) ? 1 : -1; + addend = dir * arg1; + } else { + addend = this->unk_B48; + } + this->actor.world.pos.y += addend; + this->unk_B48 -= addend; + } +} + +s32 func_80847ED4(Player* this) { + return (this->interactRangeActor != NULL) && (this->interactRangeActor->id == ACTOR_EN_ZOG) && + CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A); +} + +void func_80847F1C(Player* this) { + s32 pad; + f32 yPos; + s16 yaw; + Actor* interactRangeActor = this->interactRangeActor; + + if (func_80847ED4(this)) { + yPos = this->actor.world.pos.y; + yaw = this->currentYaw - interactRangeActor->shape.rot.y; + Lib_Vec3f_TranslateAndRotateY(&interactRangeActor->world.pos, interactRangeActor->shape.rot.y, &D_8085D5D0, + &this->actor.world.pos); + this->actor.world.pos.y = yPos; + this->actor.shape.rot.y = interactRangeActor->shape.rot.y; + + interactRangeActor->speed = Math_CosS(ABS_ALT(yaw)) * this->linearVelocity * 0.5f; + if (interactRangeActor->speed < 0.0f) { + interactRangeActor->speed = 0.0f; + } + func_8083133C(this); + } +} + +AnimSfxEntry D_8085D5DC[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 0, NA_SE_PL_SWIM, STOP), +}; + +void func_80847FF8(Player* this, f32* arg1, f32 arg2, s16 arg3) { + func_8084748C(this, arg1, arg2, arg3); + Player_PlayAnimSfx(this, D_8085D5DC); + func_80847F1C(this); +} + +void func_80848048(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80851588, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); +} + +s32 func_80848094(PlayState* play, Player* this, f32* arg2, s16* arg3) { + PlayerAnimationHeader* anim; + s16 temp_v0 = this->currentYaw - *arg3; + s32 temp_v0_2; + + if (ABS_ALT(temp_v0) > 0x6000) { + anim = &gPlayerAnim_link_swimer_swim_wait; + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + this->currentYaw = *arg3; + } else { + *arg2 = 0.0f; + *arg3 = this->currentYaw; + } + } else { + temp_v0_2 = func_8083E514(this, arg2, arg3, play); + if (temp_v0_2 > 0) { + anim = &gPlayerAnim_link_swimer_swim; + } else if (temp_v0_2 < 0) { + anim = &gPlayerAnim_link_swimer_back_swim; + } else { + s16 diff = BINANG_SUB(this->actor.shape.rot.y, *arg3); + + if (diff > 0) { + anim = &gPlayerAnim_link_swimer_Rside_swim; + } else { + anim = &gPlayerAnim_link_swimer_Lside_swim; + } + } + } + + if (anim != this->skelAnime.animation) { + func_8082E634(play, this, anim); + return true; + } + return false; +} + +void func_808481CC(PlayState* play, Player* this, f32 arg2) { + f32 sp2C; + s16 sp2A; + + func_80832F78(this, &sp2C, &sp2A, 0.0f, play); + func_8084748C(this, &this->linearVelocity, sp2C / 2.0f, sp2A); + func_8084748C(this, &this->actor.velocity.y, arg2, this->currentYaw); +} + +void func_80848250(PlayState* play, Player* this) { + this->getItemDrawIdPlusOne = GID_NONE + 1; + this->stateFlags1 &= ~(PLAYER_STATE1_400 | PLAYER_STATE1_800); + this->getItemId = GI_NONE; + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); +} + +void func_80848294(PlayState* play, Player* this) { + func_80848250(play, this); + func_8082DC28(this); + func_80839E74(this, play); + this->currentYaw = this->actor.shape.rot.y; +} + +// Player_GetItem? +s32 func_808482E0(PlayState* play, Player* this) { + if (this->getItemId == GI_NONE) { + return true; + } + + if (this->unk_AE7 == 0) { + GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; + + this->unk_AE7 = 1; + Message_StartTextbox(play, giEntry->textId, &this->actor); + Item_Give(play, giEntry->itemId); + + if ((this->getItemId >= GI_MASK_DEKU) && (this->getItemId <= GI_MASK_KAFEIS_MASK)) { + Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); + } else if (((this->getItemId >= GI_RUPEE_GREEN) && (this->getItemId <= GI_RUPEE_10)) || + (this->getItemId == GI_RECOVERY_HEART)) { + play_sound(NA_SE_SY_GET_BOXITEM); + } else { + s32 seqId; + + if ((this->getItemId == GI_HEART_CONTAINER) || + ((this->getItemId == GI_HEART_PIECE) && EQ_MAX_QUEST_HEART_PIECE_COUNT)) { + seqId = NA_BGM_GET_HEART | 0x900; + } else { + s32 var_v1; + + if ((this->getItemId == GI_HEART_PIECE) || + ((this->getItemId >= GI_RUPEE_PURPLE) && (this->getItemId <= GI_RUPEE_HUGE))) { + var_v1 = NA_BGM_GET_SMALL_ITEM; + } else { + var_v1 = NA_BGM_GET_ITEM | 0x900; + } + seqId = var_v1; + } + + Audio_PlayFanfare(seqId); + } + } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + if (this->getItemId == GI_OCARINA) { + // zelda teaching song of time cs? + play->nextEntrance = ENTRANCE(CUTSCENE, 0); + gSaveContext.nextCutsceneIndex = 0xFFF2; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + func_8085B28C(play, NULL, PLAYER_CSMODE_WAIT); + } + this->getItemId = GI_NONE; + } + + return false; +} + +AnimSfxEntry D_8085D5E0[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 60, NA_SE_IT_MASTER_SWORD_SWING, STOP), +}; + +void func_808484CC(Player* this) { + Player_PlayAnimSfx(this, D_8085D5E0); +} + +void func_808484F0(Player* this) { + this->unk_B08 += this->unk_B0C; + this->unk_B0C -= this->unk_B08 * 5.0f; + this->unk_B0C *= 0.3f; + + if (fabsf(this->unk_B0C) < 0.00001f) { + this->unk_B0C = 0.0f; + if (fabsf(this->unk_B08) < 0.00001f) { + this->unk_B08 = 0.0f; + } + } +} + +s32 func_80848570(Player* this, PlayState* play) { + if (!func_8083A6C0(play, this)) { + if (func_808396B8(play, this)) { + PlayerMeleeWeaponAnimation meleeWeaponAnim = func_808335F4(this); + + func_80833864(play, this, meleeWeaponAnim); + if ((meleeWeaponAnim >= PLAYER_MWA_SPIN_ATTACK_1H) || + ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && func_8082FBE8(this))) { + this->stateFlags2 |= PLAYER_STATE2_20000; + func_808332A0(play, this, 0, meleeWeaponAnim < PLAYER_MWA_SPIN_ATTACK_1H); + } + } else { + return false; + } + } + return true; +} + +// elegy of emptiness +void func_80848640(PlayState* play, Player* this) { + EnTorch2* torch2; + Actor* effChange; + + torch2 = play->actorCtx.elegyShells[this->transformation]; + if (torch2 != NULL) { + Math_Vec3f_Copy(&torch2->actor.home.pos, &this->actor.world.pos); + torch2->actor.home.rot.y = this->actor.shape.rot.y; + torch2->state = 0; + torch2->framesUntilNextState = 20; + } else { + torch2 = (EnTorch2*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TORCH2, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, + this->transformation); + } + + if (torch2 != NULL) { + play->actorCtx.elegyShells[this->transformation] = torch2; + Play_SetupRespawnPoint(&play->state, this->transformation + 3, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B)); + } + + effChange = Actor_Spawn(&play->actorCtx, play, ACTOR_EFF_CHANGE, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, + (GET_PLAYER_FORM << 3) | this->transformation); + if (effChange != NULL) { + //! @bug: This function should only pass Player*: it uses *(this + 0x153), which is meant to be + //! player->currentMask, but in this case is garbage in the skelAnime + Player_PlaySfx((Player*)effChange, NA_SE_PL_TRANSFORM); + } +} + +s32 func_80848780(Player* this, PlayState* play) { + if (func_80830B88(play, this)) { + return true; + } + return false; +} + +s32 func_808487B8(Player* this, PlayState* play) { + if (func_80830B88(play, this) || func_80830DF0(this, play)) { + return true; + } + return false; +} + +s32 func_80848808(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284) || + ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) && + (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && + (this->heldItemAction != PLAYER_IA_STICK) && (play->unk_1887C == 0))))) { + func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + this->unk_ACC = 0; + this->unk_AA4 = 0; + D_80862B4C = D_80862B48; + return this->unk_AC4(this, play); + } + + if (func_8082ED94(this) != 0) { + func_80830D40(play, this); + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->unk_AA4 = 0; + } else { + func_80830D40(play, this); + } + return true; +} + +s32 func_8084894C(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->unk_284); + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { + func_80830CE8(play, this); + } else { + this->stateFlags1 |= PLAYER_STATE1_400000; + Player_SetModelsForHoldingShield(this); + if ((this->transformation == PLAYER_FORM_ZORA) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_8082F164(this, BTN_R | BTN_B); + } + } + return true; +} + +s32 func_80848A0C(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + PlayerAnimationHeader* anim; + f32 lastFrame; + + anim = func_80830A58(play, this); + lastFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->unk_284, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + } + + this->stateFlags1 |= PLAYER_STATE1_400000; + Player_SetModelsForHoldingShield(this); + return true; +} + +s32 func_80848AB0(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)) { + func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); + this->unk_AA4 = 0; + this->unk_AC4(this, play); + return false; + } + return true; +} + +s32 func_80848B6C(Player* this, PlayState* play) { + if (this->unk_B28 >= 0) { + this->unk_B28 = -this->unk_B28; + } + + if (!Player_IsHoldingHookshot(this) || func_80831124(play, this)) { + if (!func_80830B88(play, this) && !func_80831094(this, play)) { + return false; + } + } + return true; +} + +PlayerAnimationHeader* D_8085D5E4[] = { + &gPlayerAnim_link_hook_walk2ready, + &gPlayerAnim_link_bow_walk2ready, + &gPlayerAnim_pn_tamahakidf, +}; + +PlayerAnimationHeader* D_8085D5F0[] = { + &gPlayerAnim_link_hook_wait, + &gPlayerAnim_link_bow_bow_wait, + &gPlayerAnim_pn_tamahakidf, +}; + +u16 D_8085D5FC[] = { + NA_SE_IT_BOW_FLICK, + NA_SE_PL_DEKUNUTS_MISS_FIRE, + NA_SE_NONE, + NA_SE_NONE, +}; + +s32 func_80848BF4(Player* this, PlayState* play) { + s32 index; + s32 temp; + + if (Player_IsHoldingHookshot(this)) { + index = 0; + } else { + temp = (this->transformation != PLAYER_FORM_DEKU) ? 1 : 2; + index = temp; + } + + if (this->transformation != PLAYER_FORM_DEKU) { + Math_ScaledStepToS(&this->upperLimbRot.z, 0x4B0, 0x190); + this->unk_AA6 |= 0x100; + } + + 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]); + this->unk_ACE = -1; + } else if (PlayerAnimation_Update(play, &this->unk_284)) { + PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085D5F0[index]); + this->unk_ACE = 1; + } else if (this->unk_ACE == 1) { + this->unk_ACE = 2; + } + + if (this->unk_ACC >= 0xB) { + this->unk_ACC--; + } + + func_80831010(this, play); + if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) { + func_8082F43C(play, this, func_80848E4C); + if (this->unk_B28 >= 0) { + if (index != 0) { + if (!func_80831194(play, this)) { + Player_PlaySfx(this, D_8085D5FC[this->unk_B28 - 1]); + } + + if (this->transformation == PLAYER_FORM_DEKU) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->unk_284, &gPlayerAnim_pn_tamahaki, 2.0f / 3.0f); + } + } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80831194(play, this); + } + } + this->unk_ACC = 0xA; + Player_StopHorizontalMovement(this); + } else { + this->stateFlags3 |= PLAYER_STATE3_40; + } + + return 1; +} + +s32 func_80848E4C(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->unk_284); + + 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))) || + func_80830F9C(play))) { + + this->unk_B28 = ABS_ALT(this->unk_B28); + if (func_808306F8(this, play)) { + if (Player_IsHoldingHookshot(this)) { + this->unk_ACE = 1; + } else { + PlayerAnimation_PlayOnce(play, &this->unk_284, + (this->transformation == PLAYER_FORM_DEKU) + ? &gPlayerAnim_pn_tamahakidf + : &gPlayerAnim_link_bow_bow_shoot_next); + } + } + } else { + if (this->unk_ACC != 0) { + this->unk_ACC--; + } + + if ((func_8082FBE8(this)) || (this->unk_AA5 != PLAYER_UNKAA5_0) || (this->stateFlags1 & PLAYER_STATE1_100000)) { + if (this->unk_ACC == 0) { + this->unk_ACC++; + } + return true; + } + + if (Player_IsHoldingHookshot(this)) { + func_8082F43C(play, this, func_80848B6C); + } else { + func_8082F43C(play, this, func_80849054); + PlayerAnimation_PlayOnce(play, &this->unk_284, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf + : &gPlayerAnim_link_bow_bow_shoot_end); + } + this->unk_ACC = 0; + } + + return true; +} + +s32 func_80849054(Player* this, PlayState* play) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, func_80848B6C); + } + return true; +} + +s32 func_808490B4(Player* this, PlayState* play) { + Actor* heldActor = this->heldActor; + + if (heldActor == NULL) { + func_808309CC(play, this); + } + + if (func_80830B88(play, this)) { + return true; + } + + 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 ((heldActor->id == ACTOR_EN_NIW) && (this->actor.velocity.y <= 0.0f)) { + this->actor.terminalVelocity = -2.0f; + this->actor.gravity = -0.5f; + this->fallStartHeight = this->actor.world.pos.y; + } + return true; + } + return func_80848780(this, play); +} + +s32 func_808491B4(Player* this, PlayState* play) { + if (func_80830B88(play, this)) { + return true; + } + + if (this->stateFlags1 & PLAYER_STATE1_2000000) { + func_8082F43C(play, this, func_80849570); + } else if (func_80831094(this, play)) { + return true; + } + + return false; +} + +s32 func_8084923C(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, func_808492C4); + PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim); + } + if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) { + func_80831010(this, play); + } + return true; +} + +s32 func_808492C4(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->unk_284); + func_80831010(this, play); + if (D_80862B4C == 0) { + func_8082F43C(play, this, func_8084933C); + PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack); + } + return true; +} + +s32 func_8084933C(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, func_80849570); + this->unk_ACC = 0; + } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) { + Vec3f pos; + s16 untargetedRotY; + + func_80835BF8(&this->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND], this->actor.shape.rot.y, 0.0f, &pos); + pos.y = this->actor.world.pos.y + 50.0f; + + 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); + + if (this->boomerangActor != NULL) { + EnBoom* leftBoomerang = (EnBoom*)this->boomerangActor; + EnBoom* rightBoomerang; + + leftBoomerang->moveTo = this->targetedActor; + if (leftBoomerang->moveTo != NULL) { + leftBoomerang->unk_1CF = 0x10; + } + leftBoomerang->unk_1CC = leftBoomerang->unk_1CF + 0x24; + + func_80835BF8(&this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND], this->actor.shape.rot.y, 0.0f, &pos); + + 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); + + if (rightBoomerang != NULL) { + rightBoomerang->moveTo = this->targetedActor; + if (rightBoomerang->moveTo != NULL) { + rightBoomerang->unk_1CF = 0x10; + } + + rightBoomerang->unk_1CC = rightBoomerang->unk_1CF + 0x24; + leftBoomerang->actor.child = &rightBoomerang->actor; + rightBoomerang->actor.parent = &leftBoomerang->actor; + } + + this->stateFlags1 |= PLAYER_STATE1_2000000; + this->stateFlags3 &= ~PLAYER_STATE3_800000; + if (!func_80123420(this)) { + func_8083133C(this); + } + + this->unk_D57 = 20; + + Player_PlaySfx(this, NA_SE_IT_BOOMERANG_THROW); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } + } + + return true; +} + +s32 func_80849570(Player* this, PlayState* play) { + if (func_80830B88(play, this)) { + return true; + } + + if (this->stateFlags3 & PLAYER_STATE3_800000) { + func_8082F43C(play, this, func_80849620); + PlayerAnimation_PlayOnce(play, &this->unk_284, &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); + return true; + } + + return false; +} + +s32 func_80849620(Player* this, PlayState* play) { + if (!func_808491B4(this, play) && PlayerAnimation_Update(play, &this->unk_284)) { + if (this->stateFlags1 & PLAYER_STATE1_2000000) { + func_8082F43C(play, this, func_80849570); + this->unk_ACC = 0; + } else { + func_8082F43C(play, this, func_80848780); + } + } + return true; +} + +void func_808496AC(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 (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + Player_StopCutscene(this); + Player_SetAction(play, this, func_80849FE0, 0); + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + } + } else if (this->unk_AE8 == 30) { + if (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { + this->unk_AE8++; + } else { + Message_StartTextbox(play, 0xC03, NULL); + } + } +} + +void func_808497A0(Player* this, PlayState* play) { + this->stateFlags3 |= PLAYER_STATE3_10000000; + PlayerAnimation_Update(play, &this->skelAnime); + func_8083216C(this, play); + + if (R_PLAY_FILL_SCREEN_ON == 0) { + R_PLAY_FILL_SCREEN_ON = 20; + R_PLAY_FILL_SCREEN_ALPHA = 0; + R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA; + play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED); + } else if (R_PLAY_FILL_SCREEN_ON > 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ALPHA = 255; + if (this->unk_B86[0] == 0) { + this->unk_B86[0] = 1; + func_8082DE50(play, this); + } else { + R_PLAY_FILL_SCREEN_ON = -20; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + Player_SetEquipmentData(play, this); + this->prevBoots = this->currentBoots; + + if (this->unk_3CF != 0) { + Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_3C0); + this->actor.shape.rot.y = this->unk_3CC; + } else { + Math_Vec3f_Copy(&this->actor.world.pos, &gSaveContext.respawn[RESPAWN_MODE_DOWN].pos); + this->actor.shape.rot.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw; + } + + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + this->linearVelocity = 0.0f; + this->currentYaw = this->actor.shape.rot.y; + this->actor.velocity.y = 0.0f; + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + + if ((play->roomCtx.curRoom.num == this->unk_3CE) && (play->roomCtx.prevRoom.num < 0)) { + this->unk_AE8 = 5; + } else { + play->roomCtx.curRoom.num = -1; + play->roomCtx.prevRoom.num = -1; + play->roomCtx.curRoom.segment = NULL; + play->roomCtx.prevRoom.segment = NULL; + + func_8012EBF8(play, &play->roomCtx); + this->unk_AE8 = -1; + this->unk_AE7 = this->unk_3CE; + } + } + } + } else if (this->unk_AE8 < 0) { + if (Room_StartRoomTransition(play, &play->roomCtx, this->unk_AE7)) { + Map_InitRoomData(play, play->roomCtx.curRoom.num); + Minimap_SavePlayerRoomInitInfo(play); + this->unk_AE8 = 5; + } + } else if (this->unk_AE8 > 0) { + this->unk_AE8--; + } else { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ALPHA = 0; + R_PLAY_FILL_SCREEN_ON = 0; + func_808339B4(this, -40); + func_8085B384(this, play); + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND; + } + } +} + +void func_80849A9C(Player* this, PlayState* play) { + f32 sp44; + s16 sp42; + s32 temp_v0; + + if (this->unk_AE8 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + Player_AnimationPlayLoop(play, this, func_8082EF54(this)); + this->unk_AE8 = 0; + this->stateFlags3 &= ~PLAYER_STATE3_8; + } + func_8082FC60(this); + } else { + func_8083E958(play, this); + } + + func_80832F24(this); + if (func_80833058(play, this, D_8085CFE4, 1)) { + return; + } + + if (!func_8082FB68(this) && (!func_80123434(this) || (func_8084894C != this->unk_AC4))) { + func_8083B29C(this, play); + return; + } + + func_80832F78(this, &sp44, &sp42, 0.0f, play); + + temp_v0 = func_8083E404(this, sp44, sp42); + if (temp_v0 > 0) { + func_8083A844(this, play, sp42); + } else if (temp_v0 < 0) { + func_8083AF8C(this, sp42, play); + } else if (sp44 > 4.0f) { + func_8083B030(this, play); + } else { + u32 temp_v0_2; + + func_8083EA44(this, this->linearVelocity * 0.3f + 1.0f); + func_8083E8E0(this, sp44, sp42); + + temp_v0_2 = this->unk_B38; + if ((temp_v0_2 < 6) || ((temp_v0_2 - 0xE) < 6)) { + Math_StepToF(&this->linearVelocity, 0.0f, 1.5f); + } else { + s16 temp_v0_3 = sp42 - this->currentYaw; + s32 var_v1 = ABS_ALT(temp_v0_3); + + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.5f)) { + this->currentYaw = sp42; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp44 * 0.3f, 2.0f, 1.5f); + Math_ScaledStepToS(&this->currentYaw, sp42, var_v1 * 0.1f); + } + } + } +} + +void func_80849DD0(Player* this, PlayState* play) { + f32 sp3C; + s16 sp3A; + s32 temp_v0; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->stateFlags3 &= ~PLAYER_STATE3_8; + } + + func_80832F24(this); + if (func_80833058(play, this, D_8085CFEC, 1)) { + return; + } + + if (func_8082FB68(this)) { + func_8083B23C(this, play); + return; + } + if (!func_80123434(this)) { + func_8083172C(play, this, func_80849FE0, 1); + this->currentYaw = this->actor.shape.rot.y; + return; + } + if (func_8084894C == this->unk_AC4) { + func_8083B23C(this, play); + return; + } + + func_80832F78(this, &sp3C, &sp3A, 0.0f, play); + + temp_v0 = func_8083E514(this, &sp3C, &sp3A, play); + if (temp_v0 > 0) { + func_8083A844(this, play, sp3A); + } else if (temp_v0 < 0) { + func_8083AECC(this, sp3A, play); + } else if (sp3C > 4.9f) { + func_8083B030(this, play); + func_8082FC60(this); + } else if (sp3C != 0.0f) { + func_8083AF30(this, play); + } else { + s16 temp_v0_2 = sp3A - this->actor.shape.rot.y; + + if (ABS_ALT(temp_v0_2) > 0x320) { + func_8083B0E4(play, this, sp3A); + } + } +} + +void func_80849FE0(Player* this, PlayState* play) { + s32 temp_v0 = func_8082ED94(this); + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp3C; + s16 sp3A; + s16 temp_v1_2; + + func_8083C85C(this); + if (temp_v0 > 0) { + func_8082EEA4(this, temp_v0 - 1); + } + + 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) { + 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; + } else { + func_8082E794(this); + Player_ChooseIdleAnim(play, this); + } + this->stateFlags3 &= ~PLAYER_STATE3_8; + } + + func_80832F24(this); + if ((this->unk_AE8 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { + if (func_8082FB68(this)) { + func_8083B23C(this, play); + return; + } + if (func_80123434(this)) { + func_8083692C(this, play); + return; + } + func_80832F78(this, &sp3C, &sp3A, 0.018f, play); + if (sp3C != 0.0f) { + func_8083A844(this, play, sp3A); + return; + } + temp_v1_2 = sp3A - this->actor.shape.rot.y; + + if (ABS_ALT(temp_v1_2) > 0x320) { + func_8083B0E4(play, this, sp3A); + } else { + Math_ScaledStepToS(&this->actor.shape.rot.y, sp3A, 0x4B0); + this->currentYaw = this->actor.shape.rot.y; + if (func_8082ED20(this) == this->skelAnime.animation) { + func_8083C6E8(this, play); + } + } + } +} + +void func_8084A26C(Player* this, PlayState* play) { + f32 var_fv0; + s16 temp_v0_3; + f32 sp44; + s16 sp42; + s32 var_v0; + s32 temp_v0_2; + s32 var_v1; + f32 var_fv1; + + this->skelAnime.mode = 0; + PlayerAnimation_SetUpdateFunction(&this->skelAnime); + + this->skelAnime.animation = func_8082EFE4(this); + if (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk) { + var_fv0 = 24.0f; + var_fv1 = -(MREG(95) / 100.0f); + } else { + var_fv0 = 29.0f; + var_fv1 = MREG(95) / 100.0f; + } + + this->skelAnime.animLength = var_fv0; + this->skelAnime.endFrame = var_fv0 - 1.0f; + if (BINANG_SUB(this->currentYaw, this->actor.shape.rot.y) >= 0) { + var_v0 = 1; + } else { + var_v0 = -1; + } + + this->skelAnime.playSpeed = var_v0 * (this->linearVelocity * var_fv1); + + PlayerAnimation_Update(play, &this->skelAnime); + if (PlayerAnimation_OnFrame(&this->skelAnime, 0.0f) || PlayerAnimation_OnFrame(&this->skelAnime, var_fv0 / 2.0f)) { + Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity); + } + + if (func_80833058(play, this, D_8085CFF8, 1)) { + return; + } + + if (func_8082FB68(this)) { + func_8083B23C(this, play); + return; + } + if (!func_80123434(this)) { + func_8085B384(this, play); + return; + } + func_80832F78(this, &sp44, &sp42, 0.0f, play); + + temp_v0_2 = func_8083E514(this, &sp44, &sp42, play); + if (temp_v0_2 > 0) { + func_8083A844(this, play, sp42); + return; + } + if (temp_v0_2 < 0) { + func_8083AECC(this, sp42, play); + return; + } + if (sp44 > 4.9f) { + func_8083B030(this, play); + func_8082FC60(this); + return; + } + if ((sp44 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_8083692C(this, play); + return; + } + + temp_v0_3 = sp42 - this->currentYaw; + var_v1 = ABS_ALT(temp_v0_3); + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.5f)) { + this->currentYaw = sp42; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp44 * 0.4f, 1.5f, 1.5f); + Math_ScaledStepToS(&this->currentYaw, sp42, var_v1 * 0.1f); + } +} + +void func_8084A5C0(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s32 sp2C; + + func_8083EE60(this, play); + if (func_80833058(play, this, D_8085D004, 1)) { + return; + } + + if (func_8082FC24(this) == 0) { + func_8083A844(this, play, this->currentYaw); + return; + } + + func_80832F78(this, &sp34, &sp32, 0.0f, play); + + sp2C = func_8083E514(this, &sp34, &sp32, play); + if (sp2C >= 0) { + if (!func_8083F190(this, &sp34, &sp32, play)) { + if (sp2C != 0) { + func_8083A794(this, play); + } else if (sp34 > 4.9f) { + func_8083B030(this, play); + } else { + func_8083AF30(this, play); + } + } + } else { + s16 sp2A = sp32 - this->currentYaw; + + Math_AsymStepToF(&this->linearVelocity, sp34 * 1.5f, 1.5f, 2.0f); + Math_ScaledStepToS(&this->currentYaw, sp32, sp2A * 0.1f); + if ((sp34 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_8083692C(this, play); + } + } +} + +void func_8084A794(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp30; + s16 sp2E; + + func_80832F24(this); + + if (func_80833058(play, this, D_8085D004, 1)) { + return; + } + + func_80832F78(this, &sp30, &sp2E, 0.0f, play); + if (this->linearVelocity != 0.0f) { + return; + } + + this->currentYaw = this->actor.shape.rot.y; + if (func_8083E514(this, &sp30, &sp2E, play) > 0) { + func_8083A794(this, play); + } else if ((sp30 != 0.0f) || animFinished) { + func_8083F230(this, play); + } +} + +void func_8084A884(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + + if (func_80833058(play, this, D_8085D004, 1)) { + return; + } + + if (animFinished) { + func_8083692C(this, play); + } +} + +void func_8084A8E8(Player* this, PlayState* play) { + f32 sp3C; + s16 sp3A; + s32 var_v0; + + func_8083F27C(play, this); + if (func_80833058(play, this, D_8085D00C, 1)) { + return; + } + + if (!func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp3C, &sp3A, 0.0f, play); + if (func_80123434(this)) { + var_v0 = func_8083E514(this, &sp3C, &sp3A, play); + } else { + var_v0 = func_8083E404(this, sp3C, sp3A); + } + + if (var_v0 > 0) { + func_8083A794(this, play); + } else if (var_v0 < 0) { + if (func_80123434(this)) { + func_8083AECC(this, sp3A, play); + } else { + func_8083AF8C(this, sp3A, play); + } + } else if ((this->linearVelocity < 3.6f) && (sp3C < 4.0f)) { + if ((func_80123420(this) == 0) && (func_80123434(this))) { + func_8083AF30(this, play); + } else { + func_80836988(this, play); + } + } else { + s16 temp_v0; + s32 var_v1; + s32 pad; + + func_8083E8E0(this, sp3C, sp3A); + + temp_v0 = sp3A - this->currentYaw; + var_v1 = ABS_ALT(temp_v0); + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 3.0f)) { + this->currentYaw = sp3A; + } + } else { + sp3C = sp3C * 0.9f; + Math_AsymStepToF(&this->linearVelocity, sp3C, 2.0f, 3.0f); + Math_ScaledStepToS(&this->currentYaw, sp3A, var_v1 * 0.1f); + } + } +} + +void func_8084AB4C(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + + PlayerAnimation_Update(play, &this->skelAnime); + if (Player_IsHoldingTwoHandedWeapon(this)) { + 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); + } + + func_80832F78(this, &sp34, &sp32, 0.018f, play); + if ((this != GET_PLAYER(play)) && (this->targetedActor == NULL)) { + sp32 = this->actor.home.rot.y; + } + + if (func_80833058(play, this, D_8085D018, 1)) { + return; + } + + if (sp34 != 0.0f) { + this->actor.shape.rot.y = sp32; + func_8083A794(this, play); + } else if (Math_ScaledStepToS(&this->actor.shape.rot.y, sp32, this->unk_B4E)) { + func_80839E74(this, play); + } + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8084AC84(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (this->linearVelocity < 1.0f) { + this->skelAnime.animation = &gPlayerAnim_clink_normal_okarina_walk; + } else { + this->skelAnime.animation = &gPlayerAnim_clink_normal_okarina_walkB; + } + PlayerAnimation_Update(play, &this->skelAnime); + + if (!func_80847880(play, this) && + (!func_80833058(play, this, D_8085D01C, 1) || (func_8084AC84 == this->actionFunc))) { + f32 sp3C; + f32 temp_fv0; + f32 temp_fv1; + s16 sp32; + s16 sp30; + + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_80839E74(this, play); + return; + } + + this->linearVelocity = this->unk_B48; + func_80832F78(this, &sp3C, &sp32, 0.018f, play); + sp30 = sp32; + + if (!func_8083A4A4(this, &sp3C, &sp32, REG(43) / 100.0f)) { + func_8083CB04(this, sp3C, sp32, REG(19) / 100.0f, 1.5f, 0x3E8); + func_8083C8E8(this, play); + if ((this->linearVelocity == 0.0f) && (sp3C == 0.0f)) { + this->currentYaw = sp30; + this->actor.shape.rot.y = this->currentYaw; + } + } + + this->unk_B48 = this->linearVelocity; + temp_fv0 = this->skelAnime.curFrame + 5.0f; + temp_fv1 = this->skelAnime.animLength / 2.0f; + + // effectively an fmodf + temp_fv0 -= temp_fv1 * (s32)(temp_fv0 / temp_fv1); + this->linearVelocity *= Math_CosS(temp_fv0 * 1000.0f) * 0.4f; + } +} + +void func_8084AEEC(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + PlayerAnimation_Update(play, &this->skelAnime); + func_80832F24(this); + if (!func_80847880(play, this)) { + if (!func_80833058(play, this, D_8085D01C, 0) || (func_8084AEEC == this->actionFunc)) { + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_80839E74(this, play); + } + } + } +} + +void func_8084AF9C(Player* this, PlayState* play) { + f32 sp2C; // player speed? + s16 sp2A; + + this->stateFlags2 |= PLAYER_STATE2_20; + func_8083F57C(this, play); + if (func_80833058(play, this, D_8085D028, 1)) { + return; + } + + if (func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp2C, &sp2A, 0.018f, play); + if (this->currentMask == PLAYER_MASK_BUNNY) { + sp2C *= 1.5f; + } + + if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) { + func_8083CB58(this, sp2C, sp2A); + func_8083C8E8(this, play); + if ((this->linearVelocity == 0.0f) && (sp2C == 0.0f)) { + func_80839E3C(this, play); + } + } +} + +void func_8084B0EC(Player* this, PlayState* play) { + f32 sp2C; + s16 sp2A; + + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8083F57C(this, play); + if (func_80833058(play, this, D_8085D034, 1)) { + return; + } + + if (!func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp2C, &sp2A, 0.0f, play); + if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) { + if (((func_80123434(this) != 0) && (sp2C != 0) && (func_8083E514(this, &sp2C, &sp2A, play) <= 0)) || + (!func_80123434(this) && (func_8083E404(this, sp2C, sp2A) <= 0))) { + func_80836988(this, play); + } else { + func_8083CB58(this, sp2C, sp2A); + func_8083C8E8(this, play); + if ((this->linearVelocity == 0.0f) && (sp2C == 0.0f)) { + func_80836988(this, play); + } + } + } +} + +void func_8084B288(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp30; + s16 sp2E; + + if (func_80833058(play, this, D_8085D00C, 1)) { + return; + } + + if (!func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp30, &sp2E, 0.0f, play); + if ((this->skelAnime.morphWeight == 0.0f) && (this->skelAnime.curFrame > 5.0f)) { + func_80832F24(this); + if ((this->skelAnime.curFrame > 10.0f) && (func_8083E404(this, sp30, sp2E) < 0)) { + func_8083AF8C(this, sp2E, play); + } else if (animFinished) { + func_8083B090(this, play); + } + } +} + +void func_8084B3B8(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp30; + s16 sp2E; + + func_80832F24(this); + if (func_80833058(play, this, D_8085D044, 1)) { + return; + } + + func_80832F78(this, &sp30, &sp2E, 0.0f, play); + if (this->linearVelocity == 0.0f) { + this->currentYaw = this->actor.shape.rot.y; + if (func_8083E404(this, sp30, sp2E) > 0) { + func_8083A794(this, play); + } else if ((sp30 != 0.0f) || animFinished) { + func_80836988(this, play); + } + } +} + +void func_8084B4A8(Player* this, PlayState* play) { + if (this->skelAnime.animation == &gPlayerAnim_link_normal_backspace) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_31][this->modelAnimType]); + } + } else { + func_8082E67C(play, this, D_8085BE84[PLAYER_ANIMGROUP_32][this->modelAnimType]); + } + + if (DECR(this->unk_AE8) == 0) { + if (!func_80838A90(this, play)) { + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play); + } + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + } +} + +// Player_Action_Shielding +void func_8084B5C0(Player* this, PlayState* play) { + func_80832F24(this); + + if (this->transformation == PLAYER_FORM_GORON) { + SkelAnime_Update(&this->unk_2C8); + + if (!func_8083FE38(this, play)) { + if (!func_8083A274(this, play)) { + this->stateFlags1 &= ~PLAYER_STATE1_400000; + + if (this->itemAction <= PLAYER_IA_MINUS1) { + func_80123C58(this); + } + + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_21][this->modelAnimType], play); + func_80830B38(this); + } else { + this->stateFlags1 |= PLAYER_STATE1_400000; + } + } + + return; + } + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (!Player_IsGoronOrDeku(this)) { + Player_AnimationPlayLoop(play, this, D_8085BE84[PLAYER_ANIMGROUP_20][this->modelAnimType]); + } + + this->unk_AE8 = 1; + this->unk_AE7 = 0; + } + + if (!Player_IsGoronOrDeku(this)) { + this->stateFlags1 |= PLAYER_STATE1_400000; + func_8083216C(this, play); + this->stateFlags1 &= ~PLAYER_STATE1_400000; + if (this->transformation == PLAYER_FORM_ZORA) { + func_8082F164(this, BTN_R | BTN_B); + } + } + + if (this->unk_AE8 != 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 var_a1; + s16 temp_ft5; + s16 var_a2; + s16 var_a3; + + var_a1 = (yStick * Math_CosS(temp_a0)) + (Math_SinS(temp_a0) * xStick); + temp_ft5 = (xStick * Math_CosS(temp_a0)) - (Math_SinS(temp_a0) * yStick); + + var_a1 = CLAMP_MAX(var_a1, 0xDAC); + var_a2 = ABS_ALT(var_a1 - this->actor.focus.rot.x) * 0.25f; + var_a2 = CLAMP_MIN(var_a2, 0x64); + + var_a3 = ABS_ALT(temp_ft5 - this->upperLimbRot.y) * 0.25f; + var_a3 = CLAMP_MIN(var_a3, 0x32); + Math_ScaledStepToS(&this->actor.focus.rot.x, var_a1, var_a2); + + this->upperLimbRot.x = this->actor.focus.rot.x; + Math_ScaledStepToS(&this->upperLimbRot.y, temp_ft5, var_a3); + + if (this->unk_AE7 != 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; + } + } else if (!func_8083FE38(this, play)) { + if (func_8083A274(this, play) != 0) { + func_8083FD80(this, play); + } else { + this->stateFlags1 &= ~PLAYER_STATE1_400000; + func_8082DC38(this); + + if (Player_IsGoronOrDeku(this)) { + func_80836A5C(this, play); + PlayerAnimation_Change(play, &this->skelAnime, this->skelAnime.animation, 1.0f, + Animation_GetLastFrame(this->skelAnime.animation), 0.0f, 2, 0.0f); + } else { + if (this->itemAction <= PLAYER_IA_MINUS1) { + func_80123C58(this); + } + + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_21][this->modelAnimType], play); + } + + Player_PlaySfx(this, NA_SE_IT_SHIELD_REMOVE); + return; + } + } else { + return; + } + } + + this->stateFlags1 |= PLAYER_STATE1_400000; + Player_SetModelsForHoldingShield(this); + this->unk_AA6 |= 0xC1; +} + +void func_8084BAA4(Player* this, PlayState* play) { + func_80832F24(this); + if (this->unk_AE7 == 0) { + D_80862B04 = func_8083216C(this, play); + if ((func_8084894C == this->unk_AC4) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { + Player_SetAction(play, this, func_80849A9C, 1); + } + } else { + s32 temp_v0; + + this->stateFlags1 |= PLAYER_STATE1_400000; + 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; + + Player_SetAction(play, this, func_8084B5C0, 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); + } + } +} + +void func_8084BBF0(Player* this, PlayState* play) { + s32 temp_v0; + + func_80832F24(this); + temp_v0 = func_808331FC(play, this, &this->skelAnime, 16.0f); + if (temp_v0 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime) || (temp_v0 > 0)) { + func_80836988(this, play); + } + } +} + +void func_8084BC64(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)) { + s16 temp_v0 = this->unk_B76; + s16 temp_v1 = this->actor.shape.rot.y - temp_v0; + + this->actor.shape.rot.y = temp_v0; + this->currentYaw = temp_v0; + this->linearVelocity = this->unk_B78; + + if (ABS_ALT(temp_v1) > 0x4000) { + this->actor.shape.rot.y = temp_v0 + 0x8000; + } + + if (this->actor.velocity.y < 0.0f) { + this->actor.gravity = 0.0f; + this->actor.velocity.y = 0.0f; + } + } + + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + if (this->unk_AE8 != 0) { + this->unk_AE8--; + if (this->unk_AE8 == 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++; + } else { + Player_SetAction(play, this, func_8084BE40, 0); + this->stateFlags1 |= PLAYER_STATE1_4000000; + } + + Player_AnimationPlayOnce(play, this, + (this->currentYaw != this->actor.shape.rot.y) + ? &gPlayerAnim_link_normal_front_downB + : &gPlayerAnim_link_normal_back_downB); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE); + } + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND); + } +} + +void func_8084BE40(Player* this, PlayState* play) { + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + func_808345A8(this); + func_80832F24(this); + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity == 0.0f)) { + if (this->stateFlags1 & PLAYER_STATE1_20000000) { + this->unk_AE8++; + } else { + Player_SetAction(play, this, func_8084BF28, 0); + this->stateFlags1 |= PLAYER_STATE1_4000000; + } + + func_8082DB90(play, this, + (this->currentYaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_down_wake + : &gPlayerAnim_link_normal_back_down_wake); + this->currentYaw = this->actor.shape.rot.y; + } +} + +AnimSfxEntry D_8085D604[] = { + ANIMSFX(ANIMSFX_TYPE_8, 20, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, STOP), +}; + +void func_8084BF28(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + func_808345A8(this); + if (this->stateFlags1 & PLAYER_STATE1_20000000) { + PlayerAnimation_Update(play, &this->skelAnime); + } else { + s32 temp_v0 = func_808331FC(play, this, &this->skelAnime, 16.0f); + + if (temp_v0 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime) || (temp_v0 > 0)) { + func_80836988(this, play); + } + } + } + + Player_PlayAnimSfx(this, D_8085D604); +} + +AnimSfxEntry D_8085D60C[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 60, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 140, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 164, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 170, NA_SE_NONE, STOP), +}; + +void func_8084BFDC(Player* this, PlayState* play) { + if ((this->transformation != PLAYER_FORM_GORON) && (this->actor.depthInWater <= 0.0f)) { + if ((play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) || + (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + ((func_808340AC(sPlayerCurrentFloorType) >= 0) && + !SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) { + func_808344C0(play, this); + } + } + + func_80832F24(this); + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this == GET_PLAYER(play)) { + func_80840770(play, this); + } + } else if (this->skelAnime.animation == &gPlayerAnim_link_derth_rebirth) { + Player_PlayAnimSfx(this, D_8085D60C); + } else if ((this->skelAnime.animation == &gPlayerAnim_link_normal_electric_shock_end) && + PlayerAnimation_OnFrame(&this->skelAnime, 88.0f)) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND); + } +} + +s32 func_8084C124(PlayState* play, Player* this) { + if (func_80837730(play, this, 3.0f, 500)) { + Player_PlaySfx(this, NA_SE_EV_DIVE_INTO_WATER); + return true; + } + return false; +} + +void func_8084C16C(Player* this, PlayState* play) { + f32 sp44; + s16 sp42; + Actor* heldActor; + + if (func_80123420(this) != 0) { + this->actor.gravity = -1.2f; + } + + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + func_80832F78(this, &sp44, &sp42, 0.0f, play); + if (this->stateFlags1 & PLAYER_STATE1_800) { + heldActor = this->heldActor; + if (!func_808313A8(play, this, heldActor) && (heldActor->id == ACTOR_EN_NIW) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { + func_808409A8(play, this, this->linearVelocity + 2.0f, this->actor.velocity.y + 2.0f); + } + } + + PlayerAnimation_Update(play, &this->skelAnime); + if ((this->skelAnime.animation == &gPlayerAnim_link_normal_newroll_jump_20f) && + PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + Player_PlaySfx(this, NA_SE_PL_ROLL); + } + + if (this->transformation == PLAYER_FORM_DEKU) { + s16 prevYaw = this->currentYaw; + + func_808378FC(play, this); + func_8083CBC4(this, sp44 * 0.5f, sp42, 2.0f, 0.2f, 0.1f, 0x190); + + if (this->skelAnime.animation == &gPlayerAnim_pn_attack) { + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + + this->unk_B10[0] += -800.0f; + this->actor.shape.rot.y += BINANG_ADD((s16)this->unk_B10[0], BINANG_SUB(this->currentYaw, prevYaw)); + Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0]); + } + } else { + func_8083CBC4(this, sp44, sp42, 1.0f, 0.05f, 0.1f, 0xC8); + } + + func_8083216C(this, play); + if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->unk_AE7 == 2) || (this->unk_AE7 >= 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 ((D_80862B18 > 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; + } + } else { + if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (D_80862B18 > 280.0f)) { + this->unk_AE8 = -2; + func_80840980(this, NA_SE_VO_LI_FALL_L); + } + + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + !(this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_8000000)) && + (this->linearVelocity > 0.0f)) { + if ((this->transformation != PLAYER_FORM_GORON) && + ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0))) { + if ((this->wallHeight >= 150.0f) && (this->unk_AE3[this->unk_ADE] == 0)) { + if (func_8083D860(this, play)) { + func_8084C124(play, this); + } + } else if ((this->unk_B5C >= 2) && + ((this->wallHeight < (150.0f * this->ageProperties->unk_08)) && + (((this->actor.world.pos.y - this->actor.floorHeight) + this->wallHeight)) > + (70.0f * this->ageProperties->unk_08))) { + AnimationContext_DisableQueue(play); + if (this->stateFlags3 & PLAYER_STATE3_10000) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HOOKSHOT_HANG); + } else { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); + } + + this->actor.world.pos.y += this->wallHeight; + func_80837CEC(play, this, this->actor.wallPoly, this->wallDistance, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_38, this->modelAnimType)); + this->currentYaw += 0x8000; + this->actor.shape.rot.y = this->currentYaw; + this->stateFlags1 |= PLAYER_STATE1_2000; + + func_8084C124(play, this); + } + } + } + } + } + } else { + func_80837134(play, this); + func_8083216C(this, play); + } + + func_80838A90(this, play); +} + +// sPlayerRollingAnimSfx +AnimSfxEntry D_8085D61C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_SWORD_N, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 6, NA_SE_PL_WALK_GROUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 6, NA_SE_PL_ROLL, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 18, NA_SE_NONE, STOP), +}; + +// Player_Action_Rolling // Handles bonking too? +void func_8084C6EC(Player* this, PlayState* play) { + s32 animFinished; + + this->stateFlags2 |= PLAYER_STATE2_20; + this->stateFlags3 |= PLAYER_STATE3_8000000; + + animFinished = PlayerAnimation_Update(play, &this->skelAnime); + if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { + func_808339B4(this, -10); + } + + if (this->skelAnime.curFrame >= 8.0f) { + if (this->skelAnime.curFrame < 18.0f) { + Player_SetCylinderForAttack(this, DMG_NORMAL_ROLL, 1, 12); + } else { + Player_ResetCylinder(this); + } + } + + if (func_8083FE38(this, play)) { + return; + } + + if (this->unk_AE8 != 0) { + s32 temp_v0; + + Math_StepToF(&this->linearVelocity, 0.0f, 2.0f); + temp_v0 = func_808331FC(play, this, &this->skelAnime, 5.0f); + if (temp_v0 != 0) { + if ((temp_v0 > 0) || animFinished) { + func_80836A5C(this, play); + } + } + } else if (!func_80840A30(play, this, &this->linearVelocity, 6.0f)) { + if ((this->skelAnime.curFrame < 15.0f) || !func_80848570(this, play)) { + f32 sp3C; + s16 yaw; + + if (this->skelAnime.curFrame >= 20.0f) { + func_80836A5C(this, play); + return; + } + + func_80832F78(this, &sp3C, &yaw, 0.018f, play); + sp3C *= 1.5f; + if ((sp3C < 3.0f) || (this->unk_AE3[this->unk_ADE] != 0)) { + sp3C = 3.0f; + } + func_8083CB58(this, sp3C, this->actor.shape.rot.y); + + if (func_8083FBC4(play, this)) { + func_800B8F98(&this->actor, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) + ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG + : NA_SE_PL_ROLL_DUST - SFX_FLAG); + } + + Player_PlayAnimSfx(this, D_8085D61C); + } + } +} + +void func_8084C94C(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_run_jump_water_fall_wait); + } + + Math_StepToF(&this->linearVelocity, 0.0f, 0.05f); + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->fallDistance >= 400) { + this->actor.colChkInfo.damage = 0x10; + func_80833B18(play, this, 1, 4.0f, 5.0f, this->actor.shape.rot.y, 20); + } else { + func_80836B3C(play, this, 4.0f); + } + } +} + +void func_8084CA24(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); + } + + Math_SmoothStepToS(&this->unk_B86[1], 0, 6, 0x7D0, 0x190); + if (!func_80840A30(play, this, &this->linearVelocity, 0.0f)) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->unk_AAA > 0x36B0) { + this->actor.colChkInfo.damage = 0x10; + func_80833B18(play, this, 1, 4.0f, 5.0f, this->actor.shape.rot.y, 20); + } else { + func_80836B3C(play, this, 4.0f); + } + } else { + this->actor.gravity = -1.0f; + this->unk_AAA = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y); + func_8082F164(this, BTN_R); + } + } +} + +void func_8084CB58(Player* this, PlayState* play) { + AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation]; + f32 sp38; + s16 sp36; + + this->stateFlags2 |= PLAYER_STATE2_20; + + if (this->transformation == PLAYER_FORM_ZORA) { + this->actor.gravity = -0.8f; + } else { + this->actor.gravity = -1.2f; + } + + PlayerAnimation_Update(play, &this->skelAnime); + + if (!func_808401F4(play, this)) { + func_8083FCF0(play, this, 6.0f, attackInfoEntry->unk_C, attackInfoEntry->unk_D); + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + func_80832F78(this, &sp38, &sp36, 0.0f, play); + func_8083CBC4(this, sp38, this->currentYaw, 1.0f, 0.05f, 0.1f, 200); + } else if (func_80836F10(play, this) >= 0) { // Player didn't die because of this fall + this->meleeWeaponAnimation += 3; + func_80833864(play, this, this->meleeWeaponAnimation); + this->unk_ADD = 3; + this->meleeWeaponState = PLAYER_MELEE_WEAPON_STATE_0; + Player_AnimSfx_PlayFloorLand(this); + } + } +} + +void func_8084CCEC(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s32 temp_v0; + + this->stateFlags1 |= PLAYER_STATE1_1000; + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + func_8083133C(this); + this->stateFlags1 &= ~PLAYER_STATE1_20000; + Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); + this->unk_AE8 = -1; + } + + func_80832F24(this); + if (!func_8083FE38(this, play) && (this->unk_AE8 != 0)) { + func_80840F34(this); + if (this->unk_AE8 < 0) { + if (this->unk_B08 >= 0.1f) { + this->unk_ADD = 0; + this->unk_AE8 = 1; + } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_80840E5C(this, play); + } + } else if (!func_80840CD4(this, play)) { + func_80832F78(this, &sp34, &sp32, 0.0f, play); + temp_v0 = func_8083E7F8(this, &sp34, &sp32, play); + if (temp_v0 > 0) { + func_80840DEC(this, play); + } else if (temp_v0 < 0) { + func_80840E24(this, play); + } + } + } +} + +void func_8084CE84(Player* this, PlayState* play) { + s32 var_v1; + s32 temp_v0_2; + f32 temp_ft4; + f32 var_fa0; + f32 sp54; + s16 sp52; + s16 temp_v0; + f32 temp_fv1; + s32 pad; + s32 sp44; + + temp_v0 = this->currentYaw - this->actor.shape.rot.y; + var_v1 = ABS_ALT(temp_v0); + + temp_ft4 = fabsf(this->linearVelocity); + this->stateFlags1 |= PLAYER_STATE1_1000; + + var_fa0 = temp_ft4 * 1.5f; + var_fa0 = CLAMP_MIN(var_fa0, 1.5f); + + var_fa0 = ((var_v1 < 0x4000) ? -1.0f : 1.0f) * var_fa0; + + func_8083EA44(this, var_fa0); + + var_fa0 = CLAMP(temp_ft4 * 0.5f, 0.5f, 1.0f); + + PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)], 0.0f, + D_8085CF70[Player_IsHoldingTwoHandedWeapon(this)], this->unk_B38 * 0.7241379f, var_fa0, + this->blendTableBuffer); + if (!func_8083FE38(this, play) && !func_80840CD4(this, play)) { + func_80840F34(this); + func_80832F78(this, &sp54, &sp52, 0.0f, play); + + temp_v0_2 = func_8083E7F8(this, &sp54, &sp52, play); + if (temp_v0_2 < 0) { + func_80840E24(this, play); + return; + } + + if (temp_v0_2 == 0) { + sp54 = 0.0f; + sp52 = this->currentYaw; + } + + sp44 = ABS_ALT(BINANG_SUB(sp52, this->currentYaw)); + if (sp44 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + this->currentYaw = sp52; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp54 * 0.2f, 1.0f, 0.5f); + Math_ScaledStepToS(&this->currentYaw, sp52, sp44 * 0.1f); + if ((sp54 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_80840EC0(this, play); + } + } + } +} + +void func_8084D18C(Player* this, PlayState* play) { + f32 sp5C = fabsf(this->linearVelocity); + f32 var_fa0; + + this->stateFlags1 |= PLAYER_STATE1_1000; + + if (sp5C == 0.0f) { + sp5C = ABS_ALT(this->unk_B4C) * 0.0015f; + if (sp5C < 400.0f) { + sp5C = 0.0f; + } + + func_8083EA44(this, ((this->unk_B4C >= 0) ? 1 : -1) * sp5C); + } else { + var_fa0 = sp5C * 1.5f; + var_fa0 = CLAMP_MIN(var_fa0, 1.5f); + func_8083EA44(this, var_fa0); + } + + var_fa0 = CLAMP(sp5C * 0.5f, 0.5f, 1.0f); + + PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)], 0.0f, + D_8085CF78[Player_IsHoldingTwoHandedWeapon(this)], this->unk_B38 * 0.7241379f, var_fa0, + this->blendTableBuffer); + if (!func_8083FE38(this, play) && !func_80840CD4(this, play)) { + f32 sp54; + s16 sp52; + s32 temp_v0; + s16 temp_v0_2; + s32 var_v1; + + func_80840F34(this); + func_80832F78(this, &sp54, &sp52, 0.0f, play); + temp_v0 = func_8083E7F8(this, &sp54, &sp52, play); + if (temp_v0 > 0) { + func_80840DEC(this, play); + return; + } + + if (temp_v0 == 0) { + sp54 = 0.0f; + sp52 = this->currentYaw; + } + + var_v1 = ABS_ALT(BINANG_SUB(sp52, this->currentYaw)); + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + this->currentYaw = sp52; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp54 * 0.2f, 1.0f, 0.5f); + Math_ScaledStepToS(&this->currentYaw, sp52, var_v1 * 0.1f); + if ((sp54 == 0.0f) && (this->linearVelocity == 0.0f) && (sp5C == 0.0f)) { + func_80840EC0(this, play); + } + } + } +} + +void func_8084D4EC(Player* this, PlayState* play) { + s32 animFinished; + f32 frame; + s32 temp_v0; + + this->stateFlags2 |= PLAYER_STATE2_20; + animFinished = PlayerAnimation_Update(play, &this->skelAnime); + + if (this->skelAnime.animation == &gPlayerAnim_link_normal_250jump_start) { + this->linearVelocity = 1.0f; + if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { + f32 speed = this->wallHeight; + + speed = CLAMP_MAX(speed, this->ageProperties->unk_0C); + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + speed *= 0.085f; + } else { + speed *= 0.072f; + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + speed += 1.0f; + } + + func_80834D50(play, this, NULL, speed, NA_SE_VO_LI_AUTO_JUMP); + this->unk_AE8 = -1; + } + } else { + temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); + if (temp_v0 == 0) { + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000); + return; + } + if (animFinished || (temp_v0 > 0)) { + func_80839E74(this, play); + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000); + this->unk_ABC = 0.0f; + return; + } + + frame = 0.0f; + if (this->skelAnime.animation == &gPlayerAnim_link_swimer_swim_15step_up) { + if (PlayerAnimation_OnFrame(&this->skelAnime, 30.0f)) { + func_8083B32C(play, this, 10.0f); + } + frame = 50.0f; + } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_150step_up) { + frame = 30.0f; + } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) { + frame = 16.0f; + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) { + Player_AnimSfx_PlayFloorLand(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + } + + if ((this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) || (this->skelAnime.curFrame > 5.0f)) { + if (this->unk_AE8 == 0) { + Player_AnimSfx_PlayFloorJump(this); + this->unk_AE8 = 1; + } + Math_SmoothStepToF(&this->unk_ABC, 0.0f, 0.1f, 400.0f, 150.0f); + } + } +} + +void func_8084D770(Player* this, PlayState* play) { + s32 temp_v0; + + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + if (this->unk_D58 == func_80837BF8) { + this->stateFlags2 |= PLAYER_STATE2_1; + } + + PlayerAnimation_Update(play, &this->skelAnime); + func_8083249C(this); + + temp_v0 = func_8083216C(this, play); + if (((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) || + (temp_v0 == 0)) { + this->unk_D58(play, this); + } +} + +void func_8084D820(Player* this, PlayState* play) { + if (func_80838A90(this, play) == 0) { + 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) { + PlayerAnimation_Update(play, &this->skelAnime); + if (DECR(this->doorTimer) == 0) { + this->linearVelocity = 0.1f; + this->unk_AE8 = 1; + } + } else if (this->unk_AE7 == 0) { + f32 sp6C = 5.0f * D_8085C3E4; + s32 var_t0 = func_808411D4(play, this, &sp6C, -1); + + if (this->unk_397 == 4) { + if (R_PLAY_FILL_SCREEN_ON < 0) { + if (play->roomCtx.status != 1) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + + this->actor.world.pos.y += (this->doorDirection != 0) ? 3.0f : -3.0f; + this->actor.prevPos.y = this->actor.world.pos.y; + } + } else if (R_PLAY_FILL_SCREEN_ON == 0) { + CollisionPoly* sp64; + s32 sp60; + + if (func_80835DF8(play, this, &sp64, &sp60)) { + this->actor.floorPoly = sp64; + this->actor.floorBgId = sp60; + } + } + } + + if (var_t0 < 0x1E) { + this->unk_AE7 = 1; + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_3A0.x = this->unk_3AC.x; + this->unk_3A0.z = this->unk_3AC.z; + } + } else { + f32 sp5C = 5.0f; + s32 sp58 = 0x14; + s32 temp_v0_8; + + if (this->stateFlags1 & PLAYER_STATE1_1) { + sp5C = gSaveContext.entranceSpeed; + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { + this->unk_3A0.x = (Math_SinS(D_80862B16) * 400.0f) + this->actor.world.pos.x; + this->unk_3A0.z = (Math_CosS(D_80862B16) * 400.0f) + this->actor.world.pos.z; + } + } else { + if (this->unk_AE8 < 0) { + this->unk_AE8++; + sp5C = gSaveContext.entranceSpeed; + sp58 = -1; + } else if (this->unk_397 == 4) { + if (R_PLAY_FILL_SCREEN_ON == 0) { + R_PLAY_FILL_SCREEN_ON = 16; + R_PLAY_FILL_SCREEN_ALPHA = 0; + + R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA; + } else if (R_PLAY_FILL_SCREEN_ON >= 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + TransitionActorEntry* temp_v1_4; // sp50 + s32 roomNum; + + temp_v1_4 = &play->doorCtx.transitionActorList[this->doorNext]; + roomNum = temp_v1_4->sides[0].room; + R_PLAY_FILL_SCREEN_ALPHA = 255; + + if ((roomNum != play->roomCtx.curRoom.num) && (play->roomCtx.curRoom.num >= 0)) { + play->roomCtx.prevRoom = play->roomCtx.curRoom; + + play->roomCtx.curRoom.num = -1; + play->roomCtx.curRoom.segment = NULL; + func_8012EBF8(play, &play->roomCtx); + } else { + static Vec3f D_8085D62C = { 0.0f, 0.0f, 0.0f }; + static Vec3f D_8085D638 = { 0.0f, 0.0f, 0.0f }; + static Vec3f D_8085D644 = { 0.0f, 0.0f, 0.0f }; + + R_PLAY_FILL_SCREEN_ON = -16; + if (play->roomCtx.curRoom.num < 0) { + Room_StartRoomTransition(play, &play->roomCtx, temp_v1_4->sides[0].room); + play->roomCtx.prevRoom.num = -1; + play->roomCtx.prevRoom.segment = NULL; + } + + this->actor.world.pos.x = temp_v1_4->pos.x; + this->actor.world.pos.y = temp_v1_4->pos.y; + this->actor.world.pos.z = temp_v1_4->pos.z; + + this->actor.shape.rot.y = ((((temp_v1_4->rotY >> 7) & 0x1FF) / 180.0f) * 0x8000); + + D_8085D62C.x = (this->doorDirection != 0) ? -120.0f : 120.0f; + D_8085D62C.y = (this->doorDirection != 0) ? -75.0f : 75.0f; + D_8085D62C.z = -240.0f; + if (this->doorDirection != 0) { + Camera_ChangeDoorCam(play->cameraPtrs[0], &this->actor, -2, 0.0f, + temp_v1_4->pos.x + 0x32, temp_v1_4->pos.y + 0x5F, + temp_v1_4->pos.z - 0x32); + } else { + Camera_ChangeDoorCam(play->cameraPtrs[0], &this->actor, -2, 0.0f, + temp_v1_4->pos.x - 0x32, temp_v1_4->pos.y + 5, + temp_v1_4->pos.z - 0x32); + } + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D62C, + &this->actor.world.pos); + + D_8085D638.x = (this->doorDirection != 0) ? 130.0f : -130.0f; + D_8085D638.z = 160.0f; + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D638, &this->unk_3A0); + D_8085D644.z = 160.0f; + 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->actor.world.rot.y = this->currentYaw = this->actor.shape.rot.y; + } + } + + this->actor.world.pos.y += (this->doorDirection != 0) ? 3.0f : -3.0f; + this->actor.prevPos.y = this->actor.world.pos.y; + } + } + } + + 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->unk_397 == 4) { + Map_InitRoomData(play, play->roomCtx.curRoom.num); + Minimap_SavePlayerRoomInitInfo(play); + } + + R_PLAY_FILL_SCREEN_ON = 0; + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + Player_StopCutscene(this); + if (!(this->stateFlags3 & PLAYER_STATE3_20000)) { + func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data)); + } + + if (play->unk_1887C != 0) { + play->func_18780(this, play); + Player_SetAction(play, this, func_80854430, 0); + if (play->sceneId == 0x45) { + play->unk_1887C = 0; + } + } else if (!func_808391D8(this, play)) { + func_8083B2E4(this, play); + } + } + } + } + + if (this->stateFlags1 & PLAYER_STATE1_800) { + func_8083216C(this, play); + } +} + +// door stuff +void func_8084E034(Player* this, PlayState* play) { + EnDoor* doorActor = (EnDoor*)this->doorActor; + s32 sp38 = (doorActor != NULL) && (doorActor->doorType == ENDOOR_TYPE_7); + s32 animFinished; + CollisionPoly* poly; + s32 bgId; + + this->stateFlags2 |= PLAYER_STATE2_20; + + if (DECR(this->unk_AE7) == 0) { + func_80835DF8(play, this, &poly, &bgId); + } + + animFinished = PlayerAnimation_Update(play, &this->skelAnime); + func_8083216C(this, play); + + if (animFinished) { + if (this->unk_AE8 == 0) { + if (DECR(this->doorTimer) == 0) { + this->unk_AE8 = 1; + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } + } else { + Player_StopCutscene(this); + func_80839E74(this, play); + + if ((this->actor.category == ACTORCAT_PLAYER) && !sp38) { + if (play->roomCtx.prevRoom.num >= 0) { + func_8012EBF8(play, &play->roomCtx); + } + + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B)); + } + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) { + Player_StopCutscene(this); + play->func_18780(this, play); + } else if (sp38 && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) { + s16 doorRot = (this->doorDirection < 0) ? doorActor->knobDoor.dyna.actor.world.rot.x + : doorActor->knobDoor.dyna.actor.world.rot.z; + + if (doorRot != 0) { + func_808354A4(play, doorRot - 1, false); + } + } +} + +// grab/hold an actor (?) +void func_8084E25C(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + func_808313F0(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + Actor* interactRangeActor = this->interactRangeActor; + + if (!func_808313A8(play, this, interactRangeActor)) { + this->actor.child = interactRangeActor; + this->heldActor = interactRangeActor; + interactRangeActor->parent = &this->actor; + interactRangeActor->bgCheckFlags &= + ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_GROUND_LEAVE | BGCHECKFLAG_WALL | + BGCHECKFLAG_CEILING | BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH | BGCHECKFLAG_GROUND_STRICT); + this->leftHandWorld.rot.y = interactRangeActor->shape.rot.y - this->actor.shape.rot.y; + } + } else { + Math_ScaledStepToS(&this->leftHandWorld.rot.y, 0, 0xFA0); + } +} + +// grab/hold an actor (?) +void func_8084E334(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_silver_wait); + this->unk_AE8 = 1; + } else if (this->unk_AE8 == 0) { + if (PlayerAnimation_OnFrame(&this->skelAnime, 27.0f)) { + Actor* interactRangeActor = this->interactRangeActor; + + this->heldActor = interactRangeActor; + this->actor.child = interactRangeActor; + interactRangeActor->parent = &this->actor; + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 25.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L); + } + } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { + Player_SetAction(play, this, func_8084E434, 1); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_silver_throw); + } +} + +// throw held actor (?) +void func_8084E434(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) { + Actor* heldActor = this->heldActor; + + heldActor->world.rot.y = this->actor.shape.rot.y; + heldActor->speed = 10.0f; + heldActor->velocity.y = 20.0f; + func_808309CC(play, this); + Player_PlaySfx(this, NA_SE_PL_THROW); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } +} + +void func_8084E4E4(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) { + 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); + } + } +} + +// Player_Action_PutDownObject? +void func_8084E58C(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + Actor* heldActor = this->heldActor; + + if (!func_808313A8(play, this, heldActor)) { + heldActor->velocity.y = 0.0f; + heldActor->speed = 0.0f; + func_808309CC(play, this); + if (heldActor->id == ACTOR_EN_BOM_CHU) { + func_80831814(this, play, PLAYER_UNKAA5_0); + } + } + } +} + +// Player_Action_Throwing +void func_8084E65C(Player* this, PlayState* play) { + f32 sp34; + s16 yaw; + + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime) || + ((this->skelAnime.curFrame >= 8.0f) && func_80832F78(this, &sp34, &yaw, 0.018f, play))) { + func_80836988(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 3.0f)) { + func_808409A8(play, this, this->linearVelocity + 8.0f, 12.0f); + } +} + +void func_8084E724(Player* this, PlayState* play) { + u8 temp_v1; + u32 new_var; + + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_808475B4(this); + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); + } else { + func_80832F24(this); + } + + if (this->unk_AA5 == PLAYER_UNKAA5_3) { + if (func_800B7118(this) || func_8082ECCC(this)) { + func_8083216C(this, play); + } + } + + temp_v1 = this->unk_AA5; + new_var = temp_v1; + + if (((temp_v1 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || + ((temp_v1 != PLAYER_UNKAA5_2) && + (((((((((this->csMode != PLAYER_CSMODE_0) || (new_var == 0)) || (temp_v1 >= PLAYER_UNKAA5_5)) || + (func_8082FB68(this) != 0)) || + (this->targetedActor != NULL)) || + (func_8083868C(play, this) == 0)) || + ((this->unk_AA5 == PLAYER_UNKAA5_3) && + (((((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B)) || + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_R | BTN_A)) || + (func_80123434(this) != 0)) || + (!func_800B7128(this) && (func_8082EF20(this) == 0))))) || + ((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)))) { + func_80839ED0(this, play); + play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { + if (func_801240DC(this)) { + this->unk_AA6 |= 0x43; + } else { + this->actor.shape.rot.y = func_80847190(play, this, 0); + } + } + + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8084E980(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8083249C(this); + 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)) { + this->stateFlags2 &= ~PLAYER_STATE2_2000; + } + + 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; + + func_80837BD0(play, this); + this->unk_AE8 = 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)) { + func_808353DC(play, this); + } else { + func_8085B384(this, play); + } + } + + this->unk_B5E = 0xA; + return; + } + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + func_8084FE7C(this, play); + } else if (func_801242B4(this)) { + func_808508C8(this, play); + if (this->actor.depthInWater > 100.0f) { + this->actor.velocity.y = 0.0f; + this->actor.gravity = 0.0f; + } + } else if (!func_80123420(this) && PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->skelAnime.moveFlags != 0) { + func_8082E794(this); + if ((this->talkActor->category == ACTORCAT_NPC) && (this->heldItemAction != PLAYER_IA_FISHING_ROD)) { + func_8082DB90(play, this, &gPlayerAnim_link_normal_talk_free); + } else { + Player_AnimationPlayLoop(play, this, func_8082ED20(this)); + } + } else { + func_8082DB60(play, this, &gPlayerAnim_link_normal_talk_free_wait); + } + } + + if (this->targetedActor != NULL) { + this->currentYaw = func_8083C62C(this, false); + this->actor.shape.rot.y = this->currentYaw; + if (this->unk_AE7 != 0) { + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + this->unk_AE7--; + if (this->unk_AE7 != 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); + } + } + } + AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable, D_8085B9F0); + } 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, + Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f); + this->unk_AE7 = 2; + } + } + } +} + +void func_8084ED9C(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s32 temp_v0; + + this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); + func_8083DEE4(play, this); + + if (PlayerAnimation_Update(play, &this->skelAnime) && !func_8083E14C(play, this)) { + func_80832F78(this, &sp34, &sp32, 0.0f, play); + temp_v0 = func_8083E758(this, &sp34, &sp32); + if (temp_v0 > 0) { + func_8083E234(this, play); + } else if (temp_v0 < 0) { + func_8083E28C(this, play); + } + } +} + +AnimSfxEntry D_8085D650[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 3, NA_SE_PL_SLIP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 21, NA_SE_PL_SLIP, STOP), +}; + +void func_8084EE50(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)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); + } + + Player_PlayAnimSfx(this, D_8085D650); + func_8083DEE4(play, this); + + if (!func_8083E14C(play, this)) { + f32 sp34; + s16 sp32; + s32 temp_v0; + + func_80832F78(this, &sp34, &sp32, 0.0f, play); + temp_v0 = func_8083E758(this, &sp34, &sp32); + if (temp_v0 < 0) { + func_8083E28C(this, play); + } else if (temp_v0 == 0) { + func_8083DF38(this, &gPlayerAnim_link_normal_push_end, play); + } else { + this->stateFlags2 |= PLAYER_STATE2_10; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_10) { + func_808479F4(play, this, 2.0f); + this->linearVelocity = 2.0f; + } +} + +AnimSfxEntry D_8085D658[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 4, NA_SE_PL_SLIP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 24, NA_SE_PL_SLIP, STOP), +}; + +Vec3f D_8085D660 = { 0.0f, 268 * 0.1f, -60.0f }; + +void func_8084EF9C(Player* this, PlayState* play) { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_35][this->modelAnimType]; + + 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) { + if (PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); + } + + //! FAKE + if (1) {} + } else { + Player_PlayAnimSfx(this, D_8085D658); + } + + func_8083DEE4(play, this); + if (!func_8083E14C(play, this)) { + f32 sp78; + s16 sp76; + s32 temp_v0; + + func_80832F78(this, &sp78, &sp76, 0.0f, play); + + temp_v0 = func_8083E758(this, &sp78, &sp76); + if (temp_v0 > 0) { + func_8083E234(this, play); + } else if (temp_v0 == 0) { + func_8083DF38(this, D_8085BE84[PLAYER_ANIMGROUP_36][this->modelAnimType], play); + } else { + this->stateFlags2 |= PLAYER_STATE2_10; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_10) { + Vec3f sp64; + f32 yIntersect = func_80835D2C(play, this, &D_8085D660, &sp64) - this->actor.world.pos.y; + CollisionPoly* poly; + s32 bgId; + Vec3f sp4C; + Vec3f sp40; + + if (fabsf(yIntersect) < 268 * 0.1f) { + sp64.y -= 7.0f; + sp4C.x = this->actor.world.pos.x; + sp4C.z = this->actor.world.pos.z; + sp4C.y = sp64.y; + if (!BgCheck_EntityLineTest2(&play->colCtx, &sp4C, &sp64, &sp40, &poly, 1, 0, 0, 1, &bgId, &this->actor)) { + func_808479F4(play, this, -2.0f); + return; + } + } + this->stateFlags2 &= ~PLAYER_STATE2_10; + } +} + +void func_8084F1B8(Player* this, PlayState* play) { + f32 sp3C; + s16 sp3A; + + this->stateFlags2 |= PLAYER_STATE2_40; + + 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) { + f32 frame; + + if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { + frame = 11.0f; + } else { + frame = 1.0f; + } + + 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; + } else { + this->unk_AE7 = -1; + } + } + } + + Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x800); + if (this->unk_AE7 != 0) { + func_80832F78(this, &sp3C, &sp3A, 0.0f, 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], + play); + } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (this->actor.shape.feetFloorFlags != 0)) { + func_80833A64(this); + + if (this->unk_AE7 < 0) { + this->linearVelocity = -0.8f; + } else { + this->linearVelocity = 0.8f; + } + + func_80833AA0(this, play); + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000); + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } + } +} + +void func_8084F3DC(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->currentYaw = this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y + this->actor.shape.rot.y; + func_8082E820(this, 1); + this->actor.shape.rot.y = this->currentYaw; + func_80839E74(this, play); + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, this->skelAnime.endFrame - 6.0f)) { + Player_AnimSfx_PlayFloorLand(this); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, this->skelAnime.endFrame - 34.0f)) { + Player_PlaySfx(this, NA_SE_PL_CLIMB_CLIFF); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + func_8084C124(play, this); + } +} + +void func_8084F4E8(Player* this, PlayState* play) { + s32 yStick = sPlayerControlInput->rel.stick_y; + s32 xStick = sPlayerControlInput->rel.stick_x; + f32 var_fv0; + f32 var_fv1; + Vec3f sp7C; + s32 sp78; + Vec3f sp6C; + Vec3f sp60; + DynaPolyActor* dyna; + PlayerAnimationHeader* anim1; + PlayerAnimationHeader* anim2; + + this->fallStartHeight = this->actor.world.pos.y; + + this->stateFlags2 |= PLAYER_STATE2_40; + + if ((this->unk_AE7 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) { + var_fv0 = ABS_ALT(xStick) * 0.0325f; + yStick = 0; + } else { + var_fv0 = ABS_ALT(yStick) * 0.05f; + xStick = 0; + } + + if (var_fv0 < 1.0f) { + var_fv0 = 1.0f; + } else if (var_fv0 > 3.35f) { + var_fv0 = 3.35f; + } + + if (this->skelAnime.playSpeed >= 0.0f) { + var_fv1 = 1.0f; + } else { + var_fv1 = -1.0f; + } + + this->skelAnime.playSpeed = var_fv1 * var_fv0; + + if (this->unk_AE8 >= 0) { + if ((this->actor.wallPoly != NULL) && (this->actor.wallBgId != BGCHECK_SCENE)) { + dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + + if (dyna != NULL) { + Math_Vec3f_Diff(&dyna->actor.world.pos, &dyna->actor.prevPos, &sp7C); + Math_Vec3f_Sum(&this->actor.world.pos, &sp7C, &this->actor.world.pos); + } + } + + Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, 6.0f, this->ageProperties->unk_00 + 15.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); + func_8083DD1C(play, this, 268 * 0.1f, this->ageProperties->unk_3C, 50.0f, -20.0f); + } + + func_80831944(play, this); + + if ((this->unk_AE8 < 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; + } else if (yStick != 0) { + f32 yIntersect; + + sp78 = this->unk_AE7 + this->unk_AE8; + + if (yStick > 0) { + sp6C.x = 0.0f; + sp6C.y = this->ageProperties->unk_40; + sp6C.z = this->ageProperties->unk_3C + 10.0f; + + yIntersect = func_80835D2C(play, this, &sp6C, &sp60); + + if (this->actor.world.pos.y < yIntersect) { + if (this->unk_AE7 != 0) { + this->actor.world.pos.y = yIntersect; + this->stateFlags1 &= ~PLAYER_STATE1_200000; + func_80837CEC(play, this, this->actor.wallPoly, this->ageProperties->unk_3C, + &gPlayerAnim_link_normal_jump_climb_up_free); + this->currentYaw += 0x8000; + this->actor.shape.rot.y = this->currentYaw; + 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); + } + } 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) { + func_8083E2F4(this, play); + } else { + if (this->unk_AE8 != 0) { + this->skelAnime.prevTransl = this->ageProperties->unk_44; + } + + func_8083DCC4(this, this->ageProperties->unk_CC[this->unk_AE8], play); + this->unk_AE8 = 1; + } + } else { + sp78 ^= 1; + this->skelAnime.prevTransl = this->ageProperties->unk_62[sp78]; + anim1 = this->ageProperties->unk_B4[sp78]; + PlayerAnimation_Change(play, &this->skelAnime, anim1, -1.0f, Animation_GetLastFrame(anim1), 0.0f, 2, + 0.0f); + } + + this->unk_AE8 ^= 1; + } else if ((this->unk_AE7 != 0) && (xStick != 0)) { + anim2 = this->ageProperties->unk_C4[this->unk_AE8]; + + if (xStick > 0) { + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8]; + Player_AnimationPlayOnce(play, this, anim2); + } else { + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8 + 2]; + PlayerAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, 2, + 0.0f); + } + } else { + this->stateFlags2 |= PLAYER_STATE2_1000; + } + + return; + } + } + + if (this->unk_AE8 < 0) { + if (((this->unk_AE8 == -2) && + (PlayerAnimation_OnFrame(&this->skelAnime, 14.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 29.0f))) || + ((this->unk_AE8 == -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); + } + } else if (PlayerAnimation_OnFrame(&this->skelAnime, (this->skelAnime.playSpeed > 0.0f) ? 20.0f : 0.0f)) { + func_80847A50(this); + } +} + +f32 D_8085D66C[] = { 11.0f, 21.0f }; +f32 D_8085D674[] = { 40.0f, 50.0f }; + +AnimSfxEntry D_8085D67C[] = { + ANIMSFX(ANIMSFX_TYPE_SURFACE, 10, NA_SE_PL_WALK_LADDER, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_SURFACE, 20, NA_SE_PL_WALK_LADDER, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_SURFACE, 30, NA_SE_PL_WALK_LADDER, STOP), +}; + +void func_8084FC0C(Player* this, PlayState* play) { + s32 temp_v0; + + this->stateFlags2 |= PLAYER_STATE2_40; + + temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); + if (temp_v0 == 0) { + this->stateFlags1 &= ~PLAYER_STATE1_200000; + } else if ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime)) { + func_80839E74(this, play); + this->stateFlags1 &= ~PLAYER_STATE1_200000; + } else { + f32* var_v1 = D_8085D66C; + + if (this->unk_AE8 != 0) { + Player_PlayAnimSfx(this, D_8085D67C); + var_v1 = D_8085D674; + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, var_v1[0]) || + PlayerAnimation_OnFrame(&this->skelAnime, var_v1[1])) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + 20.0f; + pos.z = this->actor.world.pos.z; + if (BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos) != 0.0f) { + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, poly, bgId); + Player_AnimSfx_PlayFloorLand(this); + } + } + } +} + +void func_8084FD7C(PlayState* play, Player* this, Actor* actor) { + s16 var_a3; + + if (this->unk_B86[0] != 0) { + this->unk_B86[0]--; + return; + } + + this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y; + + var_a3 = ABS_ALT(this->upperLimbRot.y) - 0x4000; + if (var_a3 > 0) { + var_a3 = CLAMP_MAX(var_a3, 0x15E); + actor->shape.rot.y += var_a3 * ((this->upperLimbRot.y >= 0) ? 1 : -1); + actor->world.rot.y = actor->shape.rot.y; + } + + this->upperLimbRot.y += 0x2710; + this->unk_AA8 = -0x1388; +} + +s32 func_8084FE48(Player* this) { + return this->targetedActor == NULL && !func_8082FC24(this); +} + +PlayerAnimationHeader* D_8085D688[] = { + &gPlayerAnim_link_uma_anim_stop, &gPlayerAnim_link_uma_anim_stand, &gPlayerAnim_link_uma_anim_walk, + &gPlayerAnim_link_uma_anim_slowrun, &gPlayerAnim_link_uma_anim_fastrun, &gPlayerAnim_link_uma_anim_jump100, + &gPlayerAnim_link_uma_anim_jump200, +}; + +PlayerAnimationHeader* D_8085D6A4[] = { + NULL, + NULL, + &gPlayerAnim_link_uma_anim_walk_muti, + &gPlayerAnim_link_uma_anim_walk_muti, + &gPlayerAnim_link_uma_anim_walk_muti, + &gPlayerAnim_link_uma_anim_slowrun_muti, + &gPlayerAnim_link_uma_anim_fastrun_muti, + &gPlayerAnim_link_uma_anim_fastrun_muti, + &gPlayerAnim_link_uma_anim_fastrun_muti, + NULL, + NULL, +}; + +PlayerAnimationHeader* D_8085D6D0[] = { + &gPlayerAnim_link_uma_wait_3, + &gPlayerAnim_link_uma_wait_1, + &gPlayerAnim_link_uma_wait_2, +}; + +u8 D_8085D6DC[][2] = { + { 32, 58 }, + { 25, 42 }, +}; + +Vec3s D_8085D6E0 = { -0x45, 0x1BEA, -0x10A }; + +AnimSfxEntry D_8085D6E8[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 48, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 58, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 68, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 92, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 110, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 126, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 132, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 136, NA_SE_PL_CALM_PAT, STOP), +}; + +void func_8084FE7C(Player* this, PlayState* play) { + EnHorse* rideActor = (EnHorse*)this->rideActor; + + this->stateFlags2 |= PLAYER_STATE2_40; + + func_80847E2C(this, 1.0f, 10.0f); + if (this->unk_AE8 == 0) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->skelAnime.animation = &gPlayerAnim_link_uma_wait_1; + this->unk_AE8 = 0x63; + } else { + s32 var_v0 = (this->mountSide < 0) ? 0 : 1; + + if (PlayerAnimation_OnFrame(&this->skelAnime, D_8085D6DC[var_v0][0])) { + Actor_SetCameraHorseSetting(play, this); + Player_PlaySfx(this, NA_SE_PL_CLIMB_CLIFF); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, D_8085D6DC[var_v0][1])) { + Player_PlaySfx(this, NA_SE_PL_SIT_ON_HORSE); + } + } + } else { + if (rideActor->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80841A50(play, this); + } + + Actor_SetCameraHorseSetting(play, this); + + 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)))) { + s32 animIndex = rideActor->animIndex; + + if (animIndex < ENHORSE_ANIM_STOPPING) { + f32 temp_fv0 = Rand_ZeroOne(); + s32 index = 0; + + animIndex = ENHORSE_ANIM_WHINNY; + if (temp_fv0 < 0.1f) { + index = 2; + } else if (temp_fv0 < 0.2f) { + index = 1; + } + + Player_AnimationPlayOnce(play, this, D_8085D6D0[index]); + } else { + this->skelAnime.animation = D_8085D688[animIndex - 2]; + if (this->unk_AE8 >= 0) { + Animation_SetMorph(play, &this->skelAnime, 8.0f); + } + + if (animIndex < ENHORSE_ANIM_WALK) { + func_808309CC(play, this); + this->unk_AE7 = 0; + } + } + + this->unk_AE8 = animIndex; + } + + if (this->unk_AE8 == 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; + } else if (this->skelAnime.animation == &gPlayerAnim_link_uma_wait_1) { + Player_PlayAnimSfx(this, D_8085D6E8); + } + } else { + this->skelAnime.curFrame = rideActor->curFrame; + PlayerAnimation_AnimateFrame(play, &this->skelAnime); + } + + AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.morphTable, + this->skelAnime.jointTable); + + if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0)) { + this->unk_AA5 = PLAYER_UNKAA5_0; + this->unk_AE7 = 0; + } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) { + D_80862B04 = func_8083216C(this, play); + if (D_80862B04) { + this->unk_AE7 = 0; + } + } + + this->actor.world.pos.x = rideActor->actor.world.pos.x + rideActor->riderPos.x; + this->actor.world.pos.y = rideActor->actor.world.pos.y + rideActor->riderPos.y - 27.0f; + this->actor.world.pos.z = rideActor->actor.world.pos.z + rideActor->riderPos.z; + + this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; + + if (!D_80862B04) { + if (this->unk_AE7 != 0) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + rideActor->stateFlags &= ~ENHORSE_FLAG_8; + this->unk_AE7 = 0; + } + + if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) { + if (PlayerAnimation_OnFrame(&this->unk_284, 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); + } else { + if (PlayerAnimation_OnFrame(&this->unk_284, 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); + } + } else if (!CHECK_FLAG_ALL(this->actor.flags, 0x100)) { + PlayerAnimationHeader* anim = NULL; + + 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 (anim != NULL) { + PlayerAnimation_PlayOnce(play, &this->unk_284, anim); + this->unk_AE7 = 1; + } + } + } + + if (this->stateFlags1 & PLAYER_STATE1_100000) { + if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_A) || !func_8084FE48(this)) { + this->unk_AA5 = PLAYER_UNKAA5_0; + this->stateFlags1 &= ~PLAYER_STATE1_100000; + } else { + func_8084FD7C(play, this, &rideActor->actor); + } + } else if ((this->csMode != PLAYER_CSMODE_0) || + (!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 (func_800B7128(this)) { + this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y; + this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA); + this->actor.focus.rot.y = this->actor.shape.rot.y + this->upperLimbRot.y; + this->upperLimbRot.y += 0xFA0; + this->unk_AA6 |= 0x80; + } else { + func_8083C62C(this, false); + } + + this->unk_AA8 = 0; + } else if (func_8084FE48(this)) { + if (func_800B7128(this)) { + func_80831010(this, play); + } + + this->unk_B86[0] = 0xC; + } else if (func_800B7128(this)) { + func_8084FD7C(play, this, &rideActor->actor); + } + } + } + + if (this->csMode == PLAYER_CSMODE_END) { + this->csMode = PLAYER_CSMODE_0; + } +} + +AnimSfxEntry D_8085D708[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 0, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 10, NA_SE_PL_GET_OFF_HORSE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 25, NA_SE_PL_SLIPDOWN, STOP), +}; + +void func_808505D0(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + func_80847E2C(this, 1.0f, 10.0f); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Actor* rideActor = this->rideActor; + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0); + func_80839E74(this, play); + + this->stateFlags1 &= ~PLAYER_STATE1_800000; + this->actor.parent = NULL; + D_801BDA9C = false; + + if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) || (DREG(1) != 0)) { + gSaveContext.save.saveInfo.horseData.sceneId = play->sceneId; + gSaveContext.save.saveInfo.horseData.pos.x = rideActor->world.pos.x; + gSaveContext.save.saveInfo.horseData.pos.y = rideActor->world.pos.y; + gSaveContext.save.saveInfo.horseData.pos.z = rideActor->world.pos.z; + gSaveContext.save.saveInfo.horseData.yaw = rideActor->shape.rot.y; + } + } else { + if (this->mountSide < 0) { + D_8085D708[0].flags = ANIMSFX_FLAGS(ANIMSFX_TYPE_FLOOR_LAND, 40, CONTINUE); + } else { + D_8085D708[0].flags = ANIMSFX_FLAGS(ANIMSFX_TYPE_FLOOR_LAND, 29, CONTINUE); + } + + Player_PlayAnimSfx(this, D_8085D708); + } +} + +s32 func_80850734(PlayState* play, Player* this) { + if ((this->transformation == PLAYER_FORM_ZORA) && (this->windSpeed == 0.0f) && + (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { + func_8083B850(play, 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->unk_B86[0] = 0; + this->unk_B48 = this->linearVelocity; + this->actor.velocity.y = 0.0f; + Player_PlaySfx(this, NA_SE_PL_ZORA_SWIM_DASH); + return true; + } + return false; +} + +s32 func_80850854(PlayState* play, Player* this) { + if ((this->transformation == PLAYER_FORM_DEKU) && (this->remainingHopsCounter != 0) && + (gSaveContext.save.saveInfo.playerData.health != 0) && (D_80862AFC != 0.0f)) { + func_808373F8(play, this, 0); + return true; + } + return false; +} + +void func_808508C8(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8082E67C(play, this, &gPlayerAnim_link_swimer_swim_wait); + func_808475B4(this); + + if (this->unk_AE8 != 0) { + this->unk_AE8--; + } + + func_8082F164(this, BTN_R); + + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + this->unk_AE8 = 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))) { + sp34 = 0.0f; + sp32 = this->actor.shape.rot.y; + + if (this->unk_AA5 > PLAYER_UNKAA5_2) { + this->unk_AA5 = PLAYER_UNKAA5_0; + } + + if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType], play); + Player_AnimSfx_PlayFloorLand(this); + } + } else if ((func_80850854(play, this) == 0) && + (func_80832F78(this, &sp34, &sp32, 0.0f, play), (sp34 != 0.0f))) { + if ((ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, sp32)) > 0x6000) && + !Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + return; + } + + if (func_8082FC24(this) || func_80847ED4(this)) { + func_80848048(play, this); + } else { + func_8083B73C(play, this, sp32); + } + } + + func_8084748C(this, &this->linearVelocity, sp34, sp32); + func_80847F1C(this); + } +} + +void func_80850B18(Player* this, PlayState* play) { + if (!func_80838A90(this, play)) { + this->stateFlags2 |= PLAYER_STATE2_20; + func_808477D0(play, this, NULL, this->linearVelocity); + func_808475B4(this); + + if (DECR(this->unk_AE8) == 0) { + func_808353DC(play, this); + } + } +} + +void func_80850BA8(Player* this) { + this->linearVelocity = Math_CosS(this->unk_AAA) * this->unk_B48; + this->actor.velocity.y = -Math_SinS(this->unk_AAA) * this->unk_B48; +} + +void func_80850BF8(Player* this, f32 arg1) { + f32 temp_fv0; + s16 temp_ft0; + + Math_AsymStepToF(&this->unk_B48, arg1, 1.0f, (fabsf(this->unk_B48) * 0.01f) + 0.4f); + temp_fv0 = Math_CosS(sPlayerControlInput->rel.stick_x * 0x10E); + + temp_ft0 = (((sPlayerControlInput->rel.stick_x >= 0) ? 1 : -1) * (1.0f - temp_fv0) * -1100.0f); + temp_ft0 = CLAMP(temp_ft0, -0x1F40, 0x1F40); + + this->currentYaw += temp_ft0; +} + +void func_80850D20(PlayState* play, Player* this) { + func_8083F8A8(play, this, 12.0f, -1, 1.0f, 160, 20, true); +} + +void func_80850D68(Player* this, PlayState* play) { + f32 sp44; + s16 sp42; + s16 sp40; + s16 sp3E; + s16 sp3C; + s16 sp3A; + + this->stateFlags2 |= PLAYER_STATE2_20; + + func_808475B4(this); + func_8082F164(this, BTN_R); + + if (func_80833058(play, this, D_8085D048, false)) { + return; + } + + if (func_8083B3B4(play, this, sPlayerControlInput)) { + return; + } + + if (func_80840A30(play, this, &this->linearVelocity, 0.0f)) { + return; + } + + sp44 = 0.0f; + + if (this->unk_AE8 != 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 (this->unk_B86[0] != 0) { + this->stateFlags3 &= ~PLAYER_STATE3_8000; + func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait); + } else { + func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); + } + } else { + func_80832F78(this, &sp44, &sp40, 0.0f, play); + Math_ScaledStepToS(&this->currentYaw, sp40, 0x640); + + if (this->skelAnime.curFrame >= 13.0f) { + sp44 = 12.0f; + + if (PlayerAnimation_OnFrame(&this->skelAnime, 13.0f)) { + this->unk_B48 = 16.0f; + } + this->stateFlags3 |= PLAYER_STATE3_8000; + } else { + sp44 = 0.0f; + } + } + + Math_SmoothStepToS(&this->unk_B86[1], sPlayerControlInput->rel.stick_x * 0xC8, 0xA, 0x3E8, 0x64); + Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(40) + 1, IREG(41), IREG(42)); + } else if (this->unk_B86[0] == 0) { + PlayerAnimation_Update(play, &this->skelAnime); + + if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || + (this->currentBoots != PLAYER_BOOTS_ZORA_LAND) || (this->windSpeed > 9.0f)) { + this->stateFlags3 &= ~PLAYER_STATE3_8000; + func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait); + this->unk_B86[0] = 1; + } else { + sp44 = 9.0f; + func_800B8F98(&this->actor, NA_SE_PL_ZORA_SWIM_LV - SFX_FLAG); + } + + // Y + sp3E = sPlayerControlInput->rel.stick_y * 0xC8; + if (this->unk_B8C != 0) { + this->unk_B8C--; + sp3E = CLAMP_MAX(sp3E, (s16)(this->unk_B6C - 0xFA0)); + } + + if ((this->unk_AAA >= -0x1555) && (this->actor.depthInWater < (this->ageProperties->unk_24 + 10.0f))) { + sp3E = CLAMP_MIN(sp3E, 0x7D0); + } + Math_SmoothStepToS(&this->unk_AAA, sp3E, 4, 0xFA0, 0x190); + + // X + sp42 = sPlayerControlInput->rel.stick_x * 0x64; + if (Math_ScaledStepToS(&this->unk_B8A, sp42, 0x384) && (sp42 == 0)) { + Math_SmoothStepToS(&this->unk_B86[1], 0, 4, 0x5DC, 0x64); + Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(44) + 1, IREG(45), IREG(46)); + } else { + sp3C = this->unk_B86[1]; + sp3A = (this->unk_B8A < 0) ? -0x3A98 : 0x3A98; + this->unk_B86[1] += this->unk_B8A; + Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(47) + 1, IREG(48), IREG(49)); + + if ((ABS_ALT(this->unk_B8A) > 0xFA0) && ((((sp3C + this->unk_B8A) - sp3A) * (sp3C - sp3A)) <= 0)) { + Player_PlaySfx(this, NA_SE_PL_ZORA_SWIM_ROLL); + } + } + + if (D_80862B18 < 20.0f) { + func_80850D20(play, this); + } + } else { + Math_SmoothStepToS(&this->unk_B86[1], 0, 4, 0xFA0, 0x190); + if ((this->skelAnime.curFrame <= 5.0f) || !func_80850734(play, this)) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_808353DC(play, this); + } + } + + Player_ResetCylinder(this); + } + + if ((this->unk_B8C < 8) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + DynaPolyActor* dynaActor; + + if ((this->actor.floorBgId == BGCHECK_SCENE) || + ((dynaActor = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId)) == NULL) || + (dynaActor->actor.id != ACTOR_EN_TWIG)) { + this->unk_AAA += (s16)((-this->unk_B6C - this->unk_AAA) * 2); + this->unk_B8C = 0xF; + } + + func_80850D20(play, this); + Player_PlaySfx(this, NA_SE_PL_BODY_BOUND); + } + + func_80850BF8(this, sp44); + func_80850BA8(this); +} + +void func_808513EC(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s16 sp30; + s16 var_v0; + + 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)) { + func_808477D0(play, this, sPlayerControlInput, this->linearVelocity); + if (func_8082DA90(play)) { + sp34 = this->linearVelocity; + sp32 = this->actor.shape.rot.y; + } else { + func_80832F78(this, &sp34, &sp32, 0.0f, play); + } + sp30 = this->actor.shape.rot.y - sp32; + if (!func_80850734(play, this)) { + if (func_8082FC24(this) || func_80847ED4(this)) { + func_80848048(play, this); + } else { + if ((sp34 == 0.0f) || (ABS_ALT(sp30) > 0x6000) || + (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER)) { + func_808353DC(play, this); + } + } + func_80847FF8(this, &this->linearVelocity, sp34, sp32); + } + } +} + +void func_80851588(Player* this, PlayState* play) { + f32 sp2C; + s16 sp2A; + + func_808477D0(play, this, sPlayerControlInput, this->linearVelocity); + func_808475B4(this); + func_8082F164(this, BTN_R); + + if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput)) { + func_80832F78(this, &sp2C, &sp2A, 0.0f, play); + + if (sp2C == 0.0f) { + func_808353DC(play, this); + } else if (!func_8082FC24(this) && !func_80847ED4(this)) { + func_8083B73C(play, this, sp2A); + } else { + func_80848094(play, this, &sp2C, &sp2A); + } + + func_80847FF8(this, &this->linearVelocity, sp2C, sp2A); + } +} + +void func_808516B4(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + this->actor.gravity = 0.0f; + func_8083216C(this, play); + func_8082F164(this, BTN_R); + + if (func_80838A90(this, play)) { + return; + } + + if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) { + func_808353DC(play, this); + } else if (this->unk_AE7 == 0) { + f32 temp_fv0; + + if (this->unk_AE8 == 0) { + if (PlayerAnimation_Update(play, &this->skelAnime) || + ((this->skelAnime.curFrame >= 22.0f) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) { + func_8083B798(play, this); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 20.0f)) { + this->actor.velocity.y = -2.0f; + } + func_80832F24(this); + } else { + 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) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) { + func_808481CC(play, this, -2.0f); + } else { + this->unk_AE7++; + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); + } + } + + temp_fv0 = (this->actor.depthInWater - this->ageProperties->unk_30) * 0.04f; + if (temp_fv0 < this->actor.velocity.y) { + this->actor.velocity.y = temp_fv0; + } + } else if (this->unk_AE7 == 1) { + PlayerAnimation_Update(play, &this->skelAnime); + func_808475B4(this); + if (this->unk_AAA < 0x2710) { + this->unk_AE7++; + this->unk_AE8 = 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; + + if (this->stateFlags1 & PLAYER_STATE1_800) { + sPlayerControlInput = NULL; + } + + func_808477D0(play, this, sPlayerControlInput, fabsf(this->actor.velocity.y)); + Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320); + + var_fv1 = CLAMP_MAX(var_fv1, 8.0f); + func_808481CC(play, this, var_fv1); + } +} + +void func_808519FC(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8082F164(this, BTN_R); + if (((this->stateFlags1 & PLAYER_STATE1_400) || (this->skelAnime.curFrame <= 1.0f) || !func_80850734(play, this)) && + PlayerAnimation_Update(play, &this->skelAnime)) { + if (!(this->stateFlags1 & PLAYER_STATE1_400) || func_808482E0(play, this)) { + func_80848250(play, this); + func_808353DC(play, this); + func_8082DC64(play, this); + } + } else { + if ((this->stateFlags1 & PLAYER_STATE1_400) && PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) { + func_8082ECE0(this); + func_8082DC64(play, this); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 5.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK); + } + } + + func_808475B4(this); + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); +} + +void func_80851B58(Player* this, PlayState* play) { + func_808475B4(this); + Math_StepToF(&this->linearVelocity, 0.0f, 0.4f); + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity < 10.0f)) { + func_808353DC(play, this); + } +} + +void func_80851BD4(Player* this, PlayState* play) { + func_808475B4(this); + if (PlayerAnimation_Update(play, &this->skelAnime) && (this == GET_PLAYER(play))) { + func_80840770(play, this); + } + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); +} + +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)))); +} + +// Deku playing the pipes? The loops both overwrite unk_AF0[0].y,z and unk_AF0[1].x,y,z +void func_80851D30(PlayState* play, Player* this) { + f32* var_s0 = &this->unk_AF0[0].y; // TODO: what is going on around here in the struct? + Vec3f sp50; + + if (func_80851C40(play, this)) { + s32 i; + + if (this->skelAnime.mode != ANIMMODE_LOOP) { + func_8082DB60(play, this, D_8085D190[this->transformation]); + } + func_80124618(D_801C03A0, this->skelAnime.curFrame, &sp50); + + for (i = 0; i < 5; i++) { + *var_s0 = sp50.x; + var_s0++; + } + } else if (play->msgCtx.ocarinaMode == 1) { + if (play->msgCtx.unk12048 != 0xFF) { + var_s0[play->msgCtx.unk12048] = 1.2f; + func_8082DB90(play, this, D_8085D190[this->transformation]); + } else { + s32 i; + + for (i = 0; i < 5; i++) { + Math_StepToF(var_s0++, 1.0f, 0.04000001f); + } + } + } +} + +void func_80851EAC(Player* this) { + this->unk_B86[0] = -1; + this->unk_B86[1] = -1; + this->unk_B10[0] = 0.0f; +} + +struct_8085D714 D_8085D714[] = { + { 1, &gPlayerAnim_pg_gakkiplayA }, { 1, &gPlayerAnim_pg_gakkiplayL }, { 1, &gPlayerAnim_pg_gakkiplayD }, + { 0, &gPlayerAnim_pg_gakkiplayU }, { 0, &gPlayerAnim_pg_gakkiplayR }, +}; + +void func_80851EC8(PlayState* play, Player* this) { + struct_8085D714* temp3 = &D_8085D714[play->msgCtx.unk12048]; + f32* temp2 = &this->unk_B10[play->msgCtx.unk12048]; + s16* temp_a3 = &this->unk_B86[temp3->unk_0]; + + temp_a3[0] = play->msgCtx.unk12048; + temp2[0] = 3.0f; +} + +void func_80851F18(PlayState* play, Player* this) { + struct_8085D714* temp; + f32* temp_v0; + s32 i; + + i = this->unk_B86[0]; + if (i >= 0) { + temp = &D_8085D714[i]; + i = 0; + temp_v0 = &this->unk_B10[this->unk_B86[i]]; + + AnimationContext_SetLoadFrame(play, temp->unk_4, *temp_v0, this->skelAnime.limbCount, + this->skelAnime.morphTable); + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->skelAnime.morphTable, D_8085BA08); + } + i = this->unk_B86[1]; + if (i >= 0) { + temp = &D_8085D714[i]; + i = 1; + temp_v0 = &this->unk_B10[this->unk_B86[i]]; + + AnimationContext_SetLoadFrame(play, temp->unk_4, *temp_v0, this->skelAnime.limbCount, + ALIGN16((uintptr_t)this->blendTableBuffer)); + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + ALIGN16((uintptr_t)this->blendTableBuffer), D_8085BA20); + } + + temp_v0 = this->unk_B10; + for (i = 0; i < 5; i++) { + *temp_v0 += 1.0f; + if (*temp_v0 >= 9.0f) { + *temp_v0 = 8.0f; + if (this->unk_B86[0] == i) { + this->unk_B86[0] = -1; + } else if (this->unk_B86[1] == i) { + this->unk_B86[1] = -1; + } + } + temp_v0++; + } +} + +// Goron playing the drums? +void func_808521E0(PlayState* play, Player* this) { + if (func_80851C40(play, this)) { + if (this->skelAnime.animation != &gPlayerAnim_pg_gakkiplay) { + func_8082DB60(play, this, &gPlayerAnim_pg_gakkiplay); + } + + func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]); + } else if (play->msgCtx.ocarinaMode == 1) { + if (play->msgCtx.unk12048 != 0xFF) { + func_80851EC8(play, this); + } + + func_80851F18(play, this); + } +} + +// Zora playing the guitar? +void func_80852290(PlayState* play, Player* this) { + if (func_80851C40(play, this)) { + if (this->skelAnime.mode != ANIMMODE_LOOP) { + func_8082DB60(play, this, D_8085D190[this->transformation]); + } + + this->unk_B8A = 8; + } else { + f32 sp3C; + s16 var_a1_3; + s16 sp38; + + if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.unk12048 != 0xFF)) { + if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) { + this->unk_A90->flags |= ACTOR_FLAG_20000000; + this->unk_A94 = 0.0f; + } + + func_8082DB90(play, this, D_8085D190[this->transformation]); + this->unk_B8A = 8; + } + + sPlayerControlInput = play->state.input; + func_800FF3A0(&sp3C, &sp38, sPlayerControlInput); + + if (BINANG_ADD(sp38, 0x4000) < 0) { + sp38 -= 0x8000; + sp3C = -sp3C; + } + + if (sp38 < -0x1F40) { + sp38 = -0x1F40; + } else if (sp38 > 0x2EE0) { + sp38 = 0x2EE0; + } + + var_a1_3 = (sp3C * -100.0f); + var_a1_3 = CLAMP_MAX(var_a1_3, 0xFA0); + Math_SmoothStepToS(&this->upperLimbRot.x, var_a1_3, 4, 0x7D0, 0); + Math_SmoothStepToS(&this->upperLimbRot.y, sp38, 4, 0x7D0, 0); + this->headLimbRot.x = -this->upperLimbRot.x; + this->unk_AA6 |= 0xC8; + + var_a1_3 = ABS_ALT(this->upperLimbRot.x); + if (var_a1_3 < 0x7D0) { + this->actor.shape.face = 0; + } else if (var_a1_3 < 0xFA0) { + this->actor.shape.face = 13; + } else { + this->actor.shape.face = 8; + } + } + + if (DECR(this->unk_B8A) != 0) { + this->unk_B86[0] += (s16)(this->upperLimbRot.x * 2.5f); + this->unk_B86[1] += (s16)(this->upperLimbRot.y * 3.0f); + } else { + this->unk_B86[0] = 0; + this->unk_B86[1] = 0; + } +} + +void func_8085255C(PlayState* play, Player* this) { + if (this->transformation == PLAYER_FORM_DEKU) { + func_80851D30(play, this); + } else if (this->transformation == PLAYER_FORM_GORON) { + func_808521E0(play, this); + } else if (this->transformation == PLAYER_FORM_ZORA) { + func_80852290(play, this); + } +} + +void func_808525C4(PlayState* play, Player* this) { + if (this->unk_AE8++ >= 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) { + func_80851EAC(this); + func_8082DB60(play, this, &gPlayerAnim_pg_gakkiwait); + } else { + func_8082DB60(play, this, D_8085D190[this->transformation]); + } + + this->unk_B48 = 1.0f; + } +} + +void func_8085269C(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)))) { + 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) { + if (play->msgCtx.ocarinaMode == 4) { + play->interfaceCtx.unk_222 = 0; + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); + this->actor.flags &= ~ACTOR_FLAG_20000000; + + if ((this->talkActor != NULL) && (this->talkActor == this->unk_A90) && (this->unk_A94 >= 0.0f)) { + Player_TalkWithPlayer(play, this->talkActor); + } else if (this->tatlTextId < 0) { + this->talkActor = this->tatlActor; + this->tatlActor->textId = -this->tatlTextId; + Player_TalkWithPlayer(play, this->talkActor); + } else if (!func_80838A90(this, play)) { + func_80836A5C(this, play); + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); + } + } else { + s32 var_v1 = (play->msgCtx.ocarinaMode >= 0x1C) && (play->msgCtx.ocarinaMode < 0x27); + 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 (!func_8082DA90(play)) { + if (gSaveContext.save.saveInfo.playerData.deaths == 1) { + play->nextEntrance = ENTRANCE(CUTSCENE, 1); + } else { + play->nextEntrance = ENTRANCE(CUTSCENE, 0); + } + + gSaveContext.nextCutsceneIndex = 0xFFF7; + play->transitionTrigger = TRANS_TRIGGER_START; + } + } else { + Actor* actor; + + play->interfaceCtx.unk_222 = 0; + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); + this->actor.flags &= ~ACTOR_FLAG_20000000; + + actor = Actor_Spawn(&play->actorCtx, play, var_v1 ? ACTOR_EN_TEST7 : ACTOR_EN_TEST6, + this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, + 0, play->msgCtx.ocarinaMode); + if (actor != NULL) { + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + this->csMode = PLAYER_CSMODE_0; + func_8085B28C(play, NULL, PLAYER_CSMODE_19); + this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; + } else { + func_80836A5C(this, play); + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); + } + } + } else if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) { + play->interfaceCtx.unk_222 = 0; + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); + + this->actor.flags &= ~ACTOR_FLAG_20000000; + func_80831760(play, this, func_80855A7C, 0); + this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; + } else if (this->unk_AA5 == PLAYER_UNKAA5_4) { + f32 temp_fa0 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x; + f32 temp_fa1 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z; + f32 var_fv1; + + var_fv1 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1)); + if (var_fv1 != 0.0f) { + var_fv1 = (var_fv1 - 100.0f) / var_fv1; + var_fv1 = CLAMP_MIN(var_fv1, 0.0f); + } + + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = temp_fa0 * var_fv1; + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = temp_fa1 * var_fv1; + } else { + func_8085255C(play, this); + } + } + } +} + +void func_80852B28(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836A98(this, &gPlayerAnim_link_normal_light_bom_end, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 3.0f)) { + if (Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x, + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y, + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z, 0xFA0, this->actor.shape.rot.y, 0, + ARROW_TYPE_DEKU_NUT) != NULL) { + Inventory_ChangeAmmo(ITEM_NUT, -1); + this->unk_D57 = 4; + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } +} + +AnimSfxEntry D_8085D73C[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 87, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 87, NA_SE_VO_LI_CLIMB_END, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 69, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 123, NA_SE_NONE, STOP), +}; + +AnimSfxEntry D_8085D74C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 13, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 73, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 120, NA_SE_NONE, STOP), +}; + +void func_80852C04(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 (func_808482E0(play, this) && (this->unk_AE8 == 1)) { + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); + + if ((this->getItemDrawIdPlusOne == GID_REMAINS_ODOLWA + 1) || + (this->getItemDrawIdPlusOne == GID_REMAINS_GOHT + 1) || + (this->getItemDrawIdPlusOne == GID_REMAINS_GYORG + 1) || + (this->getItemDrawIdPlusOne == GID_REMAINS_TWINMOLD + 1)) { + Player_StopCutscene(this); + func_80848250(play, this); + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + func_8085B28C(play, NULL, PLAYER_CSMODE_93); + } else { + s32 var_a2 = ((this->talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) || + (this->stateFlags3 & PLAYER_STATE3_20); + + if (var_a2 || (gSaveContext.healthAccumulator == 0)) { + Player_StopCutscene(this); + if (var_a2) { + func_80848250(play, this); + this->exchangeItemId = PLAYER_IA_NONE; + if (!func_80847994(play, this)) { + Player_TalkWithPlayer(play, this->talkActor); + } + } else { + func_80848294(play, this); + } + } + } + } + } else { + func_8082E794(this); + + if ((this->getItemId == GI_STRAY_FAIRY) || (this->getItemId == GI_SKULL_TOKEN) || + (this->getItemId == GI_ICE_TRAP)) { + Player_StopCutscene(this); + this->stateFlags1 &= ~(PLAYER_STATE1_400 | PLAYER_STATE1_800); + if (this->getItemId == GI_STRAY_FAIRY) { + func_80839E74(this, play); + } else { + this->actor.colChkInfo.damage = 0; + func_80833B18(play, this, 3, 0.0f, 0.0f, 0, 20); + } + } else { + if (this->skelAnime.animation == &gPlayerAnim_link_normal_box_kick) { + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getB + : &gPlayerAnim_link_demo_get_itemB); + } else { + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA + : &gPlayerAnim_link_demo_get_itemA); + } + + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | + ANIM_FLAG_80); + Player_StopCutscene(this); + this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_GET]; + this->unk_AE8 = 2; + } + } + } else if (this->unk_AE8 == 0) { + if (this->transformation == PLAYER_FORM_HUMAN) { + Player_PlayAnimSfx(this, D_8085D73C); + } else if (this->transformation == PLAYER_FORM_DEKU) { + Player_PlayAnimSfx(this, D_8085D74C); + } + } 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); + } else if ((this->skelAnime.animation == &gPlayerAnim_pn_getA) && + PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) { + Player_AnimSfx_PlayFloorLand(this); + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, 21.0f)) { + func_8082ECE0(this); + } + } +} + +AnimSfxEntry D_8085D75C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 5, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 15, NA_SE_NONE, STOP), +}; + +void func_80852FD4(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; + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } + } else { + func_80839E74(this, play); + } + } else if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && + PlayerAnimation_OnFrame(&this->skelAnime, 158.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } else if (this->transformation != PLAYER_FORM_FIERCE_DEITY) { + Player_PlayAnimSfx(this, D_8085D75C); + } else { + func_808484CC(this); + } +} + +Vec3f D_8085D764 = { 0.0f, 24.0f, 19.0f }; +Vec3f D_8085D770 = { 0.0f, 0.0f, 2.0f }; +Vec3f D_8085D77C = { 0.0f, 0.0f, -0.2f }; + +Color_RGBA8 D_8085D788 = { 255, 255, 255, 255 }; +Color_RGBA8 D_8085D78C = { 255, 255, 255, 255 }; + +void func_808530E0(PlayState* play, Player* this) { + Vec3f pos; + Vec3f velocity; + Vec3f accel; + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D764, &pos); + Player_TranslateAndRotateY(this, &gZeroVec3f, &D_8085D770, &velocity); + Player_TranslateAndRotateY(this, &gZeroVec3f, &D_8085D77C, &accel); + func_800B0EB0(play, &pos, &velocity, &accel, &D_8085D788, &D_8085D78C, 40, 10, 10); +} + +u8 D_8085D790[] = { + 1, // PLAYER_IA_BOTTLE_POTION_RED + 1 | 2, // PLAYER_IA_BOTTLE_POTION_BLUE + 2, // PLAYER_IA_BOTTLE_POTION_GREEN + 4, // PLAYER_IA_BOTTLE_MILK + 4, // PLAYER_IA_BOTTLE_MILK_HALF + 1 | 2, // PLAYER_IA_BOTTLE_CHATEAU +}; + +void func_80853194(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->itemAction == PLAYER_IA_BOTTLE_POE) { + s32 health = Rand_S16Offset(-1, 3); + + if (health == 0) { + health = 3; + } + if ((health < 0) && (gSaveContext.save.saveInfo.playerData.health <= 0x10)) { + health = 3; + } + + if (health < 0) { + Health_ChangeBy(play, -0x10); + } else { + gSaveContext.healthAccumulator = health * 0x10; + } + } else { + s32 temp_v1 = D_8085D790[this->itemAction - PLAYER_IA_BOTTLE_POTION_RED]; + + if (temp_v1 & 1) { + gSaveContext.healthAccumulator = 0x140; + } + if (temp_v1 & 2) { + Magic_Add(play, MAGIC_FILL_TO_CAPACITY); + } + if (temp_v1 & 4) { + gSaveContext.healthAccumulator = 0x50; + } + + if (this->itemAction == PLAYER_IA_BOTTLE_CHATEAU) { + SET_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI); + } + + gSaveContext.jinxTimer = 0; + } + + func_8082DB60(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drink + : &gPlayerAnim_link_bottle_drink_demo_wait); + this->unk_AE8 = 1; + + //! FAKE + dummy_label_235515:; + } else if (this->unk_AE8 < 0) { + this->unk_AE8++; + if (this->unk_AE8 == 0) { + this->unk_AE8 = 3; + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } else if (this->unk_AE8 == -6) { + func_808530E0(play, this); + } + } else { + Player_StopCutscene(this); + func_80839E74(this, play); + } + } else if (this->unk_AE8 == 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; + } else { + func_8082E4A4(play, this, &gPlayerAnim_link_bottle_drink_demo_end); + this->unk_AE8 = 2; + } + + Player_UpdateBottleHeld(play, this, + (this->itemAction == PLAYER_IA_BOTTLE_MILK) ? ITEM_MILK_HALF : ITEM_BOTTLE, + PLAYER_IA_BOTTLE_EMPTY); + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DRINK - SFX_FLAG); + } else if ((this->unk_AE8 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK); + } +} + +struct_8085D798 D_8085D798[] = { + { ACTOR_EN_ELF, 2, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, + { ACTOR_EN_FISH, -1, ITEM_FISH, PLAYER_IA_BOTTLE_FISH, 0x62 }, + { ACTOR_EN_INSECT, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, + { ACTOR_EN_MUSHI2, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, + { ACTOR_EN_TEST5, 0, ITEM_SPRING_WATER, PLAYER_IA_BOTTLE_SPRING_WATER, 0x67 }, + { ACTOR_EN_TEST5, 1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, + { ACTOR_BG_GORON_OYU, -1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, + { ACTOR_EN_ZORAEGG, -1, ITEM_ZORA_EGG, PLAYER_IA_BOTTLE_ZORA_EGG, 0x69 }, + { ACTOR_EN_DNP, -1, ITEM_DEKU_PRINCESS, PLAYER_IA_BOTTLE_DEKU_PRINCESS, 0x5F }, + { ACTOR_EN_OT, -1, ITEM_SEAHORSE, PLAYER_IA_BOTTLE_SEAHORSE, 0x6E }, + { ACTOR_OBJ_KINOKO, -1, ITEM_MUSHROOM, PLAYER_IA_BOTTLE_SEAHORSE, 0x6B }, + { ACTOR_EN_POH, -1, ITEM_POE, PLAYER_IA_BOTTLE_POE, 0x65 }, + { ACTOR_EN_BIGPO, -1, ITEM_BIG_POE, PLAYER_IA_BOTTLE_BIG_POE, 0x66 }, + { ACTOR_EN_ELF, 6, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, +}; + +void func_808534C0(Player* this, PlayState* play) { + struct_8085D200* sp24 = &D_8085D200[this->unk_AE8]; + + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE7 != 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); + + Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); + this->unk_AE8 = 1; + } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + Actor* talkActor; + + this->unk_AE7 = 0; + Player_StopCutscene(this); + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + + talkActor = this->talkActor; + if ((talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) { + Player_TalkWithPlayer(play, talkActor); + } + } + } else { + func_80839E74(this, play); + } + } else { + if (this->unk_AE7 == 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)) { + Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER); + } + + if (func_8012364C(play, this, this->heldItemButton) == ITEM_BOTTLE) { + Actor* interactRangeActor = this->interactRangeActor; + + if (interactRangeActor != NULL) { + struct_8085D798* entry = D_8085D798; + s32 i; + + for (i = 0; i < ARRAY_COUNT(D_8085D798); i++) { + if (((interactRangeActor->id == entry->actorId) && + ((entry->actorParams < 0) || (interactRangeActor->params == entry->actorParams)))) { + break; + } + entry++; + } + + if (i < ARRAY_COUNT(D_8085D798)) { + this->unk_AE7 = i + 1; + this->unk_AE8 = 0; + this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; + interactRangeActor->parent = &this->actor; + Player_UpdateBottleHeld(play, this, entry->itemId, entry->itemAction); + func_8082DB90(play, this, sp24->unk_4); + } + } + } + } + } + + if (this->skelAnime.curFrame <= 7.0f) { + this->stateFlags3 |= PLAYER_STATE3_800; + } + } +} + +Vec3f D_8085D7EC = { 0.0f, 0.0f, 5.0f }; + +void func_80853754(Player* this, PlayState* play) { + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_StopCutscene(this); + func_80839E74(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 37.0f)) { + s32 sp2C = 8; + + Player_PlaySfx(this, NA_SE_EV_BOTTLE_CAP_OPEN); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); + if (this->itemAction == PLAYER_IA_BOTTLE_FAIRY) { + Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); + Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); + sp2C = 1; + } + + Player_SpawnFairy(play, this, &this->leftHandWorld.pos, &D_8085D7EC, sp2C); + } +} + +void func_80853850(Player* this, PlayState* play) { + static Vec3f D_8085D7F8 = { 10.0f, 268 * 0.1f, 30.0f }; + static s8 D_8085D804[PLAYER_FORM_MAX] = { + 0x2D, // PLAYER_FORM_FIERCE_DEITY + 0x4B, // PLAYER_FORM_GORON + 0x37, // PLAYER_FORM_ZORA + 0x23, // PLAYER_FORM_DEKU + 0x28, // PLAYER_FORM_HUMAN + }; + static struct_8085D80C D_8085D80C[] = { + { ACTOR_EN_FISH, 0 }, // PLAYER_BOTTLE_FISH + { ACTOR_OBJ_AQUA, 0 }, // PLAYER_BOTTLE_SPRING_WATER + { ACTOR_OBJ_AQUA, 1 }, // PLAYER_BOTTLE_HOT_SPRING_WATER + { ACTOR_EN_ZORAEGG, 0x11 }, // PLAYER_BOTTLE_ZORA_EGG + { ACTOR_EN_DNP, 1 }, // PLAYER_BOTTLE_DEKU_PRINCESS + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_GOLD_DUST + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_1C + { ACTOR_EN_OT, 0x8000 }, // PLAYER_BOTTLE_SEAHORSE + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_MUSHROOM + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_HYLIAN_LOACH + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_BUG + }; + static AnimSfxEntry D_8085D838[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 38, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 40, NA_SE_EV_BOTTLE_CAP_OPEN, STOP), + }; + + CollisionPoly* sp6C; + s32 sp68; + Vec3f sp5C; + f32 temp_fa0; + f32 temp_fv0; + f32 temp_fv1; + struct_8085D80C* sp4C; + + D_8085D7F8.z = D_8085D804[this->transformation]; + if (func_80835D58(play, this, &D_8085D7F8, &sp6C, &sp68, &sp5C)) { + temp_fv1 = this->actor.world.pos.x - sp5C.x; + temp_fa0 = this->actor.world.pos.z - sp5C.z; + temp_fv0 = sqrtf(SQ(temp_fv1) + SQ(temp_fa0)); + + if (temp_fv0 != 0.0f) { + temp_fv0 = 3.0f / temp_fv0; + + this->actor.world.pos.x = this->actor.world.pos.x + (temp_fv1 * temp_fv0); + this->actor.world.pos.z = this->actor.world.pos.z + (temp_fa0 * temp_fv0); + } + } + + func_80832F24(this); + func_8083249C(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_StopCutscene(this); + if (!func_80838A90(this, play)) { + func_80839E74(this, play); + } + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 76.0f)) { + sp4C = &D_8085D80C[GET_BOTTLE_FROM_IA(this->itemAction) - 1]; + + Actor_Spawn(&play->actorCtx, play, sp4C->actorId, + (Math_SinS(this->actor.shape.rot.y) * 5.0f) + this->leftHandWorld.pos.x, this->leftHandWorld.pos.y, + (Math_CosS(this->actor.shape.rot.y) * 5.0f) + this->leftHandWorld.pos.z, 0x4000, + this->actor.shape.rot.y, 0, sp4C->params); + Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); + } else { + Player_PlayAnimSfx(this, D_8085D838); + } +} + +AnimSfxEntry D_8085D840[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_PUT_OUT_ITEM, STOP), +}; + +void func_80853A5C(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + this->stateFlags3 |= PLAYER_STATE3_4000000; + + func_8083249C(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->exchangeItemId == PLAYER_IA_NONE) { + Actor* talkActor = this->talkActor; + + Player_StopCutscene(this); + this->getItemDrawIdPlusOne = GID_NONE + 1; + + if ((talkActor->textId != 0) && (talkActor->textId != 0xFFFF)) { + this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; + } + Player_TalkWithPlayer(play, talkActor); + } else { + GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->exchangeItemId] - 1]; + + if (Player_BottleFromIA(this, this->itemAction) <= PLAYER_BOTTLE_NONE) { + this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); + } + + if (this->unk_AE8 == 0) { + if ((this->actor.textId != 0) && (this->actor.textId != 0xFFFF)) { + Message_StartTextbox(play, this->actor.textId, &this->actor); + } + + this->unk_AE8 = 1; + } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + Player_StopCutscene(this); + this->getItemDrawIdPlusOne = GID_NONE + 1; + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + func_80839E74(this, play); + this->unk_B5E = 0xA; + } + } + } else if (this->unk_AE8 >= 0) { + if ((Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE) && + PlayerAnimation_OnFrame(&this->skelAnime, 36.0f)) { + Player_SetModels(this, PLAYER_MODELGROUP_BOTTLE); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 2.0f)) { + GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->itemAction] - 1]; + + func_80838830(this, giEntry->objectId); + } + Player_PlayAnimSfx(this, D_8085D840); + } + + if ((this->unk_AE7 == 0) && (this->targetedActor != NULL)) { + this->currentYaw = func_8083C62C(this, 0); + this->actor.shape.rot.y = this->currentYaw; + } +} + +void func_80853CC0(Player* this, PlayState* play) { + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_re_dead_attack_wait); + } + + if (play->sceneId != SCENE_SEA_BS) { + func_8082F164(this, BTN_R); + } + + if (func_8082DE88(this, 0, 0x64)) { + func_80836988(this, play); + this->stateFlags2 &= ~PLAYER_STATE2_80; + } +} + +void func_80853D68(Player* this, PlayState* play) { + CollisionPoly* floorPoly; + f32 var_fv0; + f32 temp_fv1; + f32 var_fa0; + s16 downwardSlopeYaw; + s16 var_v0; + Vec3f slopeNormal; + + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + PlayerAnimation_Update(play, &this->skelAnime); + func_8083FBC4(play, this); + func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + this->actor.speed); + + if (func_80838A90(this, play)) { + return; + } + + if ((this->transformation == PLAYER_FORM_GORON) && func_8083A114(this, play)) { + return; + } + + floorPoly = this->actor.floorPoly; + if (floorPoly == NULL) { + func_80833AA0(this, play); + return; + } + + Actor_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw); + var_v0 = downwardSlopeYaw; + if (this->unk_AE7 != 0) { + var_v0 = downwardSlopeYaw + 0x8000; + } + if (this->linearVelocity < 0.0f) { + downwardSlopeYaw += 0x8000; + } + + var_fv0 = (1.0f - slopeNormal.y) * 40.0f; + var_fv0 = CLAMP(var_fv0, 0.0f, 10.0f); + + temp_fv1 = var_fv0 * var_fv0 * 0.015f; + var_fa0 = slopeNormal.y * 0.01f; + if (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) != FLOOR_EFFECT_1) { + var_fv0 = 0.0f; + var_fa0 = slopeNormal.y * 10.0f; + } + temp_fv1 = CLAMP_MIN(temp_fv1, 1.0f); + + 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], + play); + } + + Math_SmoothStepToS(&this->currentYaw, downwardSlopeYaw, 0xA, 0xFA0, 0x320); + Math_ScaledStepToS(&this->actor.shape.rot.y, var_v0, 0x7D0); +} + +void func_80859CE0(PlayState* play, Player* this, s32 arg2); + +void func_80854010(Player* this, PlayState* play) { + if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) { + func_80859CE0(play, this, 0); + Player_SetAction(play, this, func_8085B08C, 0); + func_8085B08C(this, play); + } +} + +void func_808540A0(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80854010, 0); + this->unk_AE8 = 0x28; + Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10); +} + +void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction); + +void func_80854118(Player* this, PlayState* play) { + if (D_80862B18 < 150.0f) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 == 0) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + Player_AnimSfx_PlayFloorLand(this); + this->unk_AE8 = 1; + } + } else { + func_8085B384(this, play); + } + } + + Math_SmoothStepToF(&this->actor.velocity.y, 2.0f, 0.3f, 8.0f, 0.5f); + } + + if (play->csCtx.state != CS_STATE_IDLE) { + if (play->csCtx.playerCue != NULL) { + s32 pad; + f32 sp28 = this->actor.world.pos.y; + + Player_Cutscene_SetPosAndYawToStart(this, play->csCtx.playerCue); + this->actor.world.pos.y = sp28; + } + } +} + +void func_8085421C(Player* this, PlayState* play) { + if (this->skelAnime.animation == NULL) { + this->stateFlags2 |= PLAYER_STATE2_4000; + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if ((this->skelAnime.animation == &gPlayerAnim_link_derth_rebirth) && + PlayerAnimation_OnFrame(&this->skelAnime, 60.0f)) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } + } + + if ((this->unk_AE8++ >= 9) && !func_8082DA90(play)) { + if (this->unk_AE7 != 0) { + if (this->unk_AE7 < 0) { + func_80169FDC(&play->state); + } else { + func_80169EFC(&play->state); + } + if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + gSaveContext.respawnFlag = -5; + } + + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + play_sound(NA_SE_OC_ABYSS); + } else { + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } + + play->transitionTrigger = TRANS_TRIGGER_START; + } +} + +void func_8085437C(Player* this, PlayState* play) { + func_808365DC(this, play); +} + +void func_8085439C(Player* this, PlayState* play) { + this->actor.gravity = -1.0f; + PlayerAnimation_Update(play, &this->skelAnime); + + if (this->actor.velocity.y < 0.0f) { + func_80833AA0(this, play); + } else if (this->actor.velocity.y < 6.0f) { + Math_StepToF(&this->linearVelocity, 3.0f, 0.5f); + } +} + +void func_80854430(Player* this, PlayState* play) { + if (play->unk_1887C < 0) { + play->unk_1887C = 0; + func_80839ED0(this, play); + } else if (this->unk_AE7 == 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, func_80854430, 1); + this->unk_AE7 = 1; + } else { + play->unk_1887C = 0; + func_80847190(play, this, 0); + + if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { + this->stateFlags1 |= PLAYER_STATE1_100000; + func_8083868C(play, this); + } else { + this->stateFlags1 &= ~PLAYER_STATE1_100000; + if ((play->sceneId == SCENE_20SICHITAI) && + (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTO_BOX)) { + s32 requiredScopeTemp; + + play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; + } + } + } + } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_A)) { + play->unk_1887C = -1; + func_80854614(this, play); + Player_SetAction(play, this, func_80854430, 0); + this->unk_AE7 = 0; + } else { + play->unk_1887C = 10; + func_80854614(this, play); + } +} + +void func_80854614(Player* this, PlayState* play) { + this->unk_AA5 = PLAYER_UNKAA5_3; + func_8083868C(play, this); + PlayerAnimation_Update(play, &this->skelAnime); + func_8083216C(this, play); + this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y; + this->unk_AA6 |= 0x80; + + if (play->unk_1887C < 0) { + play->unk_1887C++; + if (play->unk_1887C == 0) { + func_80839ED0(this, play); + } + } +} + +void func_808546D0(Player* this, PlayState* play) { + if (this->unk_AE7 >= 0) { + if (this->unk_AE7 < 6) { + this->unk_AE7++; + } else { + this->unk_B48 = (this->unk_AE7 >> 1) * 22.0f; + if (func_8082DE88(this, 1, 0x64)) { + this->unk_AE7 = -1; + EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x); + Player_PlaySfx(this, NA_SE_PL_ICE_BROKEN); + } + + if (this->transformation == PLAYER_FORM_ZORA) { + func_80834104(play, this); + this->skelAnime.animation = NULL; + this->unk_AE8 = -0x28; + this->unk_AE7 = 1; + this->linearVelocity = 0.0f; + } else if (play->gameplayFrames % 4 == 0) { + Player_InflictDamage(play, -1); + } + } + + this->stateFlags2 |= PLAYER_STATE2_4000; + } else if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + func_808339B4(this, 20); + } +} + +void func_80854800(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) { + func_80836988(this, play); + } + } + + this->shockTimer = 40; + func_800B8F98(&this->actor, this->ageProperties->voiceSfxIdOffset + (NA_SE_VO_LI_TAKEN_AWAY - SFX_FLAG)); +} + +void func_808548B8(Player* this, PlayState* play) { + AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation]; + + if (this->skelAnime.curFrame < (this->skelAnime.endFrame - 6.0f)) { + this->stateFlags2 |= PLAYER_STATE2_20; + } + + if (func_808401F4(play, this)) { + return; + } + + if (this->linearVelocity >= 0.0f) { + func_8083FCF0(play, this, (this->transformation == PLAYER_FORM_GORON) ? 5.0f : 0.0f, attackInfoEntry->unk_C, + attackInfoEntry->unk_D); + } + + if ((this->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_LEFT) || + (this->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT)) { + this->unk_3D0.unk_00 = 3; + } + + //! @bug Lunge Storage: If this block is prevented from running at the end of an animation that produces a lunge, + //! the prepared lunge will be retained until next time execution passes through here, which usually means the next + //! sword slash. + if ((this->stateFlags2 & PLAYER_STATE2_40000000) && PlayerAnimation_OnFrame(&this->skelAnime, 0.0f)) { + this->linearVelocity = 15.0f; + this->stateFlags2 &= ~PLAYER_STATE2_40000000; + } + + if (this->linearVelocity > 12.0f) { + func_8083FBC4(play, this); + } + + Math_StepToF(&this->linearVelocity, 0.0f, 5.0f); + func_8083A548(this); + + if (PlayerAnimation_Update(play, &this->skelAnime) || + ((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; + + if (!func_80848570(this, play)) { + PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; + + func_8082DC38(this); + + if (anim == NULL) { + this->skelAnime.moveFlags &= ~8; + func_8085B384(this, play); + } else { + u8 moveFlags = this->skelAnime.moveFlags; + + if (this->transformation == PLAYER_FORM_ZORA) { + if (func_8083A580(this, play)) { + anim = this->unk_284.animation; + } + this->unk_ADC = 0; + } else if ((anim == &gPlayerAnim_link_fighter_Lpower_jump_kiru_end) && + (this->modelAnimType != PLAYER_ANIMTYPE_3)) { + anim = &gPlayerAnim_link_fighter_power_jump_kiru_end; + } + + this->skelAnime.moveFlags = 0; + Player_SetAction(play, this, func_80849FE0, 1); + func_8082EC9C(play, this, anim); + this->currentYaw = this->actor.shape.rot.y; + this->skelAnime.moveFlags = moveFlags; + } + this->stateFlags3 |= PLAYER_STATE3_8; + } + } else if (((this->transformation == PLAYER_FORM_ZORA) && + (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_PUNCH_KICK) && + (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; + } +} + +void func_80854C70(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->skelAnime); + func_80832F24(this); + + if (this->skelAnime.curFrame >= 6.0f) { + func_80836988(this, play); + } +} + +// Array colour interpolation +// arg0 is the interpolation parameter +// arg1,5,9 are out colours +// arg2,6,0xA are first values +// arg3,7,0xB are second values +// arg4,8,0xC are subtracted after interpolation +void func_80854CD0(f32 arg0, s16* arg1, u8* arg2, u8* arg3, u8* arg4, s16* arg5, u8* arg6, u8* arg7, u8* arg8, + s16* arg9, u8* argA, u8* argB, u8* argC) { + s32 i; + + for (i = 0; i < 3; i++) { + *arg1 = ((s32)((*arg2 - *arg3) * arg0) + *arg3) - *arg4; + *arg5 = ((s32)((*arg6 - *arg7) * arg0) + *arg7) - *arg8; + *arg9 = ((s32)((*argA - *argB) * arg0) + *argB) - *argC; + + arg1++; + arg2++; + arg3++; + arg4++; + arg5++; + arg6++; + arg7++; + arg8++; + arg9++; + argA++; + argB++; + argC++; + } +} + +// Black, probably in-function static +u8 D_8085D844[] = { 0, 0, 0 }; + +// arg1 is the colour interpolation parameter +void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) { + struct_8085D848_unk_00 sp70; + struct_8085D848_unk_00* var_t0; + struct_8085D848_unk_00* var_v1; + u8* var_t3; + u8* var_t4; + 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]; + + if (arg1 <= 1.0f) { + arg1 -= 0.0f; + + var_v1 = &arg2[0]; + var_t0 = &sp70; + var_t3 = D_8085D844; + var_t4 = new_var; + } else if (arg1 <= 2.0f) { + arg1 -= 1.0f; + var_v1 = &arg2[1]; + var_t0 = &arg2[0]; + var_t3 = D_8085D844; + var_t4 = D_8085D844; + + } else if (arg1 <= 3.0f) { + arg1 -= 2.0f; + var_v1 = &arg2[2]; + var_t0 = &arg2[1]; + var_t3 = D_8085D844; + var_t4 = D_8085D844; + + } else { + arg1 -= 3.0f; + var_v1 = &sp70; + var_t0 = &arg2[2]; + var_t3 = new_var; + var_t4 = D_8085D844; + } + + play->envCtx.lightSettings.fogNear = + ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.unk_C4.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); +} + +struct_8085D848 D_8085D848[] = { + { + { + { 650, { 0, 0, 0 }, { 10, 0, 30 } }, + { 300, { 200, 200, 255 }, { 0, 0, 0 } }, + { 600, { 0, 0, 0 }, { 0, 0, 200 } }, + }, + { + { { -40.0f, 20.0f, -10.0f }, { 120, 200, 255 }, 1000 }, + { { 0.0f, -10.0f, 0.0f }, { 255, 255, 255 }, 5000 }, + { { -10.0f, 4.0f, 3.0f }, { 200, 200, 255 }, 5000 }, + }, + }, + { + { + { 650, { 0, 0, 0 }, { 10, 0, 30 } }, + { 300, { 200, 200, 255 }, { 0, 0, 0 } }, + { 600, { 0, 0, 0 }, { 0, 0, 200 } }, + }, + { + { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 }, + { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 }, + { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 }, + }, + }, +}; + +// arg2 is the colour interpolation parameter +// arg3 both selects the light to use and scales the radius +// arg4 selects the env fog/colour info +void func_808550D0(PlayState* play, Player* this, f32 arg2, f32 arg3, s32 arg4) { + struct_8085D848* temp_a2 = &D_8085D848[arg4]; + struct_8085D848_unk_18* lightInit = temp_a2->light; + Vec3f pos; + + func_80854EFC(play, arg2, temp_a2->unk_00); + + if (arg3 > 2.0f) { + arg3 -= 2.0f; + lightInit += 2; + } else if (arg3 > 1.0f) { + arg3 -= 1.0f; + lightInit++; + } + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &lightInit->pos, &pos); + Lights_PointNoGlowSetInfo(&this->lightInfo, pos.x, pos.y, pos.z, lightInit->color[0], lightInit->color[1], + lightInit->color[2], lightInit->radius * arg3); +} + +AnimSfxEntry D_8085D8F0[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 2, NA_SE_PL_PUT_OUT_ITEM, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_IT_SET_TRANSFORM_MASK, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 11, NA_SE_PL_FREEZE_S, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_TRANSFORM_VOICE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 20, NA_SE_IT_TRANSFORM_MASK_BROKEN, STOP), +}; + +AnimSfxEntry D_8085D904[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 8, NA_SE_IT_SET_TRANSFORM_MASK, STOP), +}; + +void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->skelAnime.animation == &gPlayerAnim_cl_setmask)) { + 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->unk_AE7 >= 64) { + Math_StepToF(&this->unk_B10[2], 0.0f, 0.015f); + } else if (this->unk_AE7 >= 0xE) { + Math_StepToF(&this->unk_B10[2], 0.3f, 0.3f); + } + + if (this->unk_AE7 > 65) { + Math_StepToF(&this->unk_B10[3], 0.0f, 0.02f); + } else if (this->unk_AE7 >= 0x10) { + Math_StepToF(&this->unk_B10[3], -0.1f, 0.1f); + } + + if ((R_PLAY_FILL_SCREEN_ON == 0) && (this->skelAnime.animation == &gPlayerAnim_cl_setmask)) { + Player_PlayAnimSfx(this, D_8085D8F0); + } + } else { + if (this->unk_AE7 >= 20) { + Math_StepToS(&this->unk_AE8, 255, 20); + } + + if (R_PLAY_FILL_SCREEN_ON == 0) { + Player_PlayAnimSfx(this, D_8085D904); + if (this->unk_AE7 == 15) { + Player_PlaySfx(this, NA_SE_PL_FACE_CHANGE); + } + } + } +} + +u16 D_8085D908[] = { + WEEKEVENTREG_30_80, // PLAYER_FORM_FIERCE_DEITY + WEEKEVENTREG_30_20, // PLAYER_FORM_GORON + WEEKEVENTREG_30_40, // PLAYER_FORM_ZORA + WEEKEVENTREG_30_10, // PLAYER_FORM_DEKU +}; +struct_8085D910 D_8085D910[] = { + { 0x10, 0xA, 0x3B, 0x3F }, + { 9, 0x32, 0xA, 0xD }, +}; + +void func_808553F4(Player* this, PlayState* play) { + struct_8085D910* sp4C = D_8085D910; + s32 sp48 = false; + + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]); + sPlayerControlInput = play->state.input; + + Camera_ChangeMode(play->cameraPtrs[play->activeCamId], + (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; + + func_80855218(play, this, &sp4C); + + if (this->unk_AE7 == 0x14) { + Play_EnableMotionBlurPriority(100); + } + + if (R_PLAY_FILL_SCREEN_ON != 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ALPHA = 255; + this->actor.update = func_8012301C; + this->actor.draw = NULL; + this->unk_AE7 = 0; + Play_DisableMotionBlurPriority(); + SET_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm]); + } + } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || + ((this->unk_AE7 >= 5) && + (sp48 = ((this->transformation != PLAYER_FORM_HUMAN) || + CHECK_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm])) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)))) { + R_PLAY_FILL_SCREEN_ON = 45; + R_PLAY_FILL_SCREEN_R = 220; + R_PLAY_FILL_SCREEN_G = 220; + R_PLAY_FILL_SCREEN_B = 220; + R_PLAY_FILL_SCREEN_ALPHA = 0; + + if (sp48) { + if (CutsceneManager_GetCurrentCsId() == this->csId) { + func_800E0348(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId))); + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + AudioSfx_StopById(NA_SE_PL_TRANSFORM_VOICE); + AudioSfx_StopById(NA_SE_IT_TRANSFORM_MASK_BROKEN); + } else { + AudioSfx_StopById(NA_SE_PL_FACE_CHANGE); + } + } + + Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH); + } + + if (this->unk_AE7 >= sp4C->unk_0) { + if (this->unk_AE7 < 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) { + func_801000CC(NA_SE_EV_LIGHTNING_HARD); + } + + Math_StepToF(&this->unk_B10[4], 2.0f, 0.5f); + } else { + Math_StepToF(&this->unk_B10[4], 3.0f, 0.2f); + } + } + + if (this->unk_AE7 >= 0x10) { + if (this->unk_AE7 < 0x40) { + Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f); + } else if (this->unk_AE7 < 0x37) { + Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f); + } else { + Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f); + } + } + + func_808550D0(play, this, this->unk_B10[4], this->unk_B10[5], (this->transformation == PLAYER_FORM_HUMAN) ? 0 : 1); +} + +void func_80855818(Player* this, PlayState* play) { + Camera_ChangeMode(play->cameraPtrs[play->activeCamId], + (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; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ON = 0; + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + } + + if (this->unk_AE7++ < 4) { + if ((this->prevMask == PLAYER_MASK_NONE) && (this->unk_AE7 == 4)) { + PlayerAnimation_Change(play, &this->skelAnime, func_8082ED20(this), 1.0f, 0.0f, 20.0f, ANIMMODE_ONCE, + 20.0f); + } + } else { + s32 pad; + f32 dist; + s16 angle; + + func_800FF3A0(&dist, &angle, play->state.input); + if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->unk_AE7 > 10) && (dist != 0.0f))) { + if (R_PLAY_FILL_SCREEN_ON == 0) { + this->stateFlags1 &= ~PLAYER_STATE1_2; + this->prevMask = this->currentMask; + this->csId = play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]; + Player_StopCutscene(this); + play->envCtx.lightSettings = D_80862B50; + func_8085B384(this, play); + return; + } + } + + Math_StepToF(&this->unk_B10[5], 4.0f, 0.2f); + } + + func_808550D0(play, this, 0, this->unk_B10[5], (this->prevMask == PLAYER_MASK_NONE) ? 0 : 1); +} + +void func_80855A7C(Player* this, PlayState* play) { + if (this->unk_AE8++ > 90) { + play->msgCtx.ocarinaMode = 4; + func_8085B384(this, play); + } else if (this->unk_AE8 == 10) { + func_80848640(play, this); + } +} + +// Giant's Mask +void func_80855AF4(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + + func_80855218(play, this, NULL); + this->unk_AE7++; + + if (!(this->stateFlags1 & PLAYER_STATE1_100)) { + this->prevMask = this->currentMask; + gSaveContext.save.equippedMask = this->currentMask = PLAYER_MASK_GIANT; + Magic_Consume(play, 0, MAGIC_CONSUME_GIANTS_MASK); + this->currentBoots = PLAYER_BOOTS_GIANT; + this->prevBoots = PLAYER_BOOTS_GIANT; + func_80123140(play, this); + func_8085B384(this, play); + } +} + +void func_80855B9C(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + + PlayerAnimation_Update(play, &this->skelAnime); + + if (!(this->stateFlags1 & PLAYER_STATE1_100)) { + this->prevMask = this->currentMask; + + gSaveContext.save.equippedMask = this->currentMask = PLAYER_MASK_NONE; + + this->currentBoots = PLAYER_BOOTS_HYLIAN; + this->prevBoots = PLAYER_BOOTS_HYLIAN; + func_80123140(play, this); + func_8085B384(this, play); + } +} + +void func_80855C28(Player* this, PlayState* play) { + s16 sp3E; + s32 pad; + PlayerAnimationHeader* sp34; + s32 var_a0; + + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]); + sp3E = BINANG_SUB(this->actor.shape.rot.y, this->actor.world.rot.y); + + 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); + } + + this->actor.shape.rot.y += this->unk_AE8; + 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]; + + if (this->unk_ABC >= 0.0f) { + this->unk_ABC = 0.0f; + if ((var_a0 != 0) && (sp3E < 0)) { + if (BINANG_SUB(this->actor.shape.rot.y, this->actor.world.rot.y) >= 0) { + this->actor.shape.rot.y = this->actor.world.rot.y; + Player_StopCutscene(this); + if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) { + sp34 = D_8085D17C[this->transformation]; + func_80836A5C(this, play); + PlayerAnimation_Change(play, &this->skelAnime, sp34, -2.0f / 3.0f, Animation_GetLastFrame(sp34), + 0.0f, ANIMMODE_ONCE, -6.0f); + } else { + func_80839E74(this, play); + } + } + } + } else if (this->unk_AE7 == 0) { + Player_PlaySfx(this, NA_SE_PL_WARP_PLATE_OUT); + this->unk_AE7 = 1; + } +} + +void func_80855E08(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_hook_fly_wait); + } + + Math_Vec3f_Sum(&this->actor.world.pos, &this->actor.velocity, &this->actor.world.pos); + if (func_80831124(play, this)) { + f32 var_fv0; + + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + func_80843178(play, this); + + var_fv0 = this->actor.world.pos.y - this->actor.floorHeight; + var_fv0 = CLAMP_MAX(var_fv0, 20.0f); + + this->actor.world.pos.y = this->actor.world.pos.y - var_fv0; + this->actor.shape.rot.x = 0; + this->linearVelocity = 1.0f; + this->actor.velocity.y = 0.0f; + this->actor.world.rot.x = this->actor.shape.rot.x; + func_80833AA0(this, play); + this->stateFlags2 &= ~PLAYER_STATE2_400; + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND; + this->stateFlags3 |= PLAYER_STATE3_10000; + } else if ((this->skelAnime.animation != &gPlayerAnim_link_hook_fly_start) || (this->skelAnime.curFrame >= 4.0f)) { + this->actor.gravity = 0.0f; + Math_ScaledStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x, 0x800); + Player_RequestRumble(play, this, 100, 2, 100, SQ(0)); + } +} + +void func_80855F9C(PlayState* play, Player* this) { + f32 sp24; + s16 sp22; + + this->stateFlags2 |= PLAYER_STATE2_20; + func_80832F78(this, &sp24, &sp22, 0.018f, play); + Math_ScaledStepToS(&this->currentYaw, sp22, 0x258); +} + +s32 func_80856000(PlayState* play, Player* this) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + f32 sp28; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y - 20.0f; + pos.z = this->actor.world.pos.z; + return BgCheck_EntityCheckCeiling(&play->colCtx, &sp28, &pos, 30.0f, &poly, &bgId, &this->actor); +} + +void func_80856074(PlayState* play, Player* this) { + if (func_8083F8A8(play, this, 12.0f, 4, 0.0f, 10, 50, true)) { + EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 4, 8, 2, -1, 10, NULL); + } +} + +void func_80856110(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, s16 scale, s16 scaleStep, s16 life) { + static Vec3f D_8085D918 = { 0.0f, 0.5f, 0.0f }; // velocity + static Vec3f D_8085D924 = { 0.0f, 0.5f, 0.0f }; // accel + static Color_RGBA8 D_8085D930 = { 255, 255, 55, 255 }; // primColor + static Color_RGBA8 D_8085D934 = { 100, 50, 0, 0 }; // envColor + Vec3f pos; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + arg2; + pos.z = this->actor.world.pos.z; + + D_8085D918.y = arg3; + D_8085D924.y = arg4; + + func_800B0EB0(play, &pos, &D_8085D918, &D_8085D924, &D_8085D930, &D_8085D934, scale, scaleStep, life); +} + +// Deku Flower related +void func_808561B0(Player* this, PlayState* play) { + DynaPolyActor* dyna; + s32 aux = 0xAE; + f32 temp_fv0_2; + s32 sp38; + s32 var_v1; + + PlayerAnimation_Update(play, &this->skelAnime); + + if (func_80838A90(this, play)) { + return; + } + + if (this->unk_AE7 == 0) { + this->unk_ABC += this->unk_B48; + if (this->unk_ABC < -1000.0f) { + this->unk_ABC = -1000.0f; + this->unk_AE7 = 1; + this->unk_B48 = 0.0f; + } + func_80856074(play, this); + } else if (this->unk_AE7 == 1) { + this->unk_B48 += -22.0f; + if (this->unk_B48 < -170.0f) { + this->unk_B48 = -170.0f; + } + this->unk_ABC += this->unk_B48; + if (this->unk_ABC < -3900.0f) { + this->unk_ABC = -3900.0f; + this->unk_AE7 = 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; + } else { + temp_fv0_2 = Math_SinS((1000.0f + this->unk_ABC) * (-30.0f)) * 0.004f; + this->actor.scale.y = 0.01f + temp_fv0_2; + this->actor.scale.z = this->actor.scale.x = 0.01f - (this->unk_B48 * -0.000015f); + + this->actor.shape.rot.y += (s16)(this->unk_B48 * 130.0f); + if (this->actor.floorBgId != BGCHECK_SCENE) { + dyna = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId); + + if (dyna != NULL) { + Math_Vec3f_StepToXZ(&this->actor.world.pos, &dyna->actor.world.pos, 1.0f); + } + } + } + + func_80856074(play, this); + } else if (this->unk_AE7 == 2) { + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { + if (func_80856000(play, this)) { + this->unk_AE8 = 0; + } else { + this->unk_AE7 = 3; + if (this->unk_AE8 >= 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) { + func_80856110(play, this, 20.0f, 3.8f, -0.1f, 140, 23, 15); + } + } + func_80855F9C(play, this); + } else { + this->unk_ABC += this->unk_B48; + + temp_fv0_2 = this->unk_ABC; + if (temp_fv0_2 >= 0.0f) { + f32 speed; + + sp38 = (this->unk_AE8 >= 10); + var_v1 = -1; + speed = this->unk_B48 * this->actor.scale.y; + if (this->actor.floorBgId != BGCHECK_SCENE) { + dyna = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId); + var_v1 = 0; + if ((dyna != NULL) && (dyna->actor.id == ACTOR_OBJ_ETCETERA) && (dyna->actor.params & 0x100)) { + var_v1 = 1; + speed *= aux / 100.0f; + } + } + + Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos); + this->unk_ABC = 0.0f; + this->actor.world.pos.y += temp_fv0_2 * this->actor.scale.y; + func_80834DB8(this, &gPlayerAnim_pn_kakku, speed, play); + Player_SetAction(play, this, func_80856918, 1); + this->boomerangActor = NULL; + + this->stateFlags3 |= PLAYER_STATE3_200; + if (sp38 != 0) { + this->stateFlags3 |= PLAYER_STATE3_2000; + } + if (var_v1 < 0) { + this->stateFlags3 |= PLAYER_STATE3_40000; + } + + this->unk_AE7 = var_v1; + this->unk_AE8 = 9999; + Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20); + } else if (this->unk_ABC < 0.0f) { + func_80856074(play, this); + } + } + + if (this->unk_ABC < -1500.0f) { + this->stateFlags3 |= PLAYER_STATE3_100; + if (this->unk_B86[0] < 8) { + this->unk_B86[0]++; + if (this->unk_B86[0] == 8) { + func_8082E1F0(this, NA_SE_PL_DEKUNUTS_BUD); + } + } + } +} + +void func_808566C0(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex, f32 arg3, f32 arg4, f32 arg5, + s32 life) { + Color_RGBA8 primColor = { 255, 200, 200, 0 }; + Color_RGBA8 envColor = { 255, 255, 0, 0 }; + static Vec3f D_8085D940 = { 0.0f, 0.3f, 0.0f }; + static Vec3f D_8085D94C = { 0.0f, -0.025f, 0.0f }; + Vec3f pos; + s32 scale; + f32 sp34; + Vec3f* temp_v0; + + if (Rand_ZeroOne() < 0.5f) { + sp34 = -1.0f; + } else { + sp34 = 1.0f; + } + + D_8085D940.x = (Rand_ZeroFloat(arg4) + arg3) * sp34; + D_8085D94C.x = arg5 * sp34; + if (Rand_ZeroOne() < 0.5f) { + sp34 = -1.0f; + } else { + sp34 = 1.0f; + } + + temp_v0 = &this->bodyPartsPos[bodyPartIndex]; + D_8085D940.z = (Rand_ZeroFloat(arg4) + arg3) * sp34; + D_8085D94C.z = arg5 * sp34; + pos.x = temp_v0->x; + pos.y = Rand_ZeroFloat(15.0f) + temp_v0->y; + pos.z = temp_v0->z; + if (Rand_ZeroOne() < 0.5f) { + scale = 2000; + } else { + scale = -150; + } + + EffectSsKirakira_SpawnDispersed(play, &pos, &D_8085D940, &D_8085D94C, &primColor, &envColor, scale, life); +} + +void func_8085687C(Player* this) { +} + +s32 func_80856888(f32* arg0, f32 arg1, f32 arg2) { + if (arg2 != 0.0f) { + if (arg1 < *arg0) { + arg2 = -arg2; + } + + *arg0 += arg2; + if (((*arg0 - arg1) * arg2) >= 0.0f) { + *arg0 = arg1; + return true; + } + } else if (arg1 == *arg0) { + return true; + } + + return false; +} + +f32 D_8085D958[] = { 600.0f, 960.0f }; +Vec3f D_8085D960 = { -30.0f, 50.0f, 0.0f }; +Vec3f D_8085D96C = { 30.0f, 50.0f, 0.0f }; + +// Flying as Deku? +void func_80856918(Player* this, PlayState* play) { + if ((this->boomerangActor != NULL) && (this->boomerangActor->update == NULL)) { + this->boomerangActor = NULL; + } + + if (func_80838A90(this, play)) { + return; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80837134(play, this); + return; + } + + if ((this->actor.velocity.y > 0.0f) && (this->stateFlags3 & PLAYER_STATE3_200)) { + this->actor.terminalVelocity = -20.0f; + this->actor.gravity = -5.5f; + Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20); + func_80856110(play, this, 0.0f, 0.0f, -1.0f, 500, 0, 8); + + if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) { + func_80833AA0(this, play); + } + } else if (!(this->stateFlags3 & PLAYER_STATE3_2000)) { + func_80833AA0(this, play); + } else if (this->stateFlags3 & PLAYER_STATE3_200) { + if (this->actor.velocity.y < 0.0f) { + if (this->unk_AE7 < 0) { + func_80833AA0(this, play); + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if (this->skelAnime.curFrame > 6.0f) { + this->actor.velocity.y = 6.0f; + this->stateFlags3 &= ~PLAYER_STATE3_200; + this->stateFlags3 |= PLAYER_STATE3_1000000; + func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); + func_8019FD90(4, 2); + } + } + } + + this->actor.terminalVelocity = -10.0f; + this->actor.gravity = -0.5f; + Player_ResetCylinder(this); + } else if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } else { + s16 temp_a0; + f32 temp_fv1; + s16 sp76; + s16 var_v1; + s16 var_a1; + f32 sp6C; + f32 sp68; + s16 sp66; + s16 temp_ft0; + s32 temp; + s16 var_v1_4; + + this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); + if (this->linearVelocity != 0.0f) { + var_a1 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); + + temp_a0 = this->actor.shape.rot.y - var_a1; + if (ABS_ALT(temp_a0) > 0x4000) { + this->linearVelocity = -this->linearVelocity; + var_a1 = var_a1 + 0x8000; + } + this->currentYaw = var_a1; + } + + if (this->windSpeed != 0.0f) { + Math_SmoothStepToS(&this->unk_B8C, this->windAngleX, 3, 0x1F40, 0x190); + } + + func_8085687C(this); + + if (this->unk_AE8 != 0) { + this->unk_AE8--; + } + + temp_fv1 = D_8085D958[this->unk_AE7] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0); + PlayerAnimation_Update(play, &this->skelAnime); + + if ((this->unk_AE8 != 0) && (temp_fv1 > 300.0f)) { + sp76 = 0x1770; + if (this->skelAnime.animation != &gPlayerAnim_pn_kakku) { + func_8082E5EC(play, this, &gPlayerAnim_pn_kakkufinish); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { + s32 i; + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D960, + &this->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND]); + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D96C, + &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND]); + + for (i = 0; i < 13; i++) { + func_808566C0(play, this, PLAYER_BODYPART_LEFT_HAND, 0.6f, 1.0f, 0.8f, 17); + 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)) { + sp76 = 0; + func_808355D8(play, this, &gPlayerAnim_pn_rakkafinish); + } else { + sp76 = 0x1770 - (s32)((300.0f - temp_fv1) * 10.0f); + + if (this->skelAnime.animation != &gPlayerAnim_pn_batabata) { + func_8082E55C(play, this, &gPlayerAnim_pn_batabata); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) { + Player_PlaySfx(this, NA_SE_PL_DEKUNUTS_STRUGGLE); + } + } + + Math_AsymStepToS(&this->unk_B86[1], sp76, 0x190, 0x190); + + this->unk_B8A += this->unk_B86[1]; + temp = ABS_ALT(this->unk_B86[1]); + if (temp > 0xFA0) { + this->unk_B66 += (u8)(ABS_ALT(this->unk_B86[1]) * 0.01f); + } + + if (this->unk_B66 > 200) { + this->unk_B66 -= 200; + func_808566C0(play, this, PLAYER_BODYPART_LEFT_HAND, 0.0f, 1.0f, 0.0f, 32); + func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.0f, 1.0f, 0.0f, 32); + } + + func_8019FCB8(&this->actor.projectedPos, 0x1851, 2.0f * (this->unk_B86[1] * (1.0f / 6000.0f))); + if ((this->boomerangActor == NULL) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + if (AMMO(ITEM_NUT) == 0) { + play_sound(NA_SE_SY_ERROR); + } else { + this->boomerangActor = + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x, + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y, + this->bodyPartsPos[PLAYER_BODYPART_WAIST].z, -1, 0, 0, ARROW_TYPE_DEKU_NUT); + if (this->boomerangActor != NULL) { + this->boomerangActor->velocity.x = this->actor.velocity.x * 1.5f; + this->boomerangActor->velocity.z = this->actor.velocity.z * 1.5f; + Inventory_ChangeAmmo(ITEM_NUT, -1); + Actor_PlaySfx(this->boomerangActor, NA_SE_PL_DEKUNUTS_DROP_BOMB); + } + } + } + + if (this->actor.velocity.y < 0.0f) { + if (sp76 != 0) { + this->actor.terminalVelocity = -0.38f; + this->actor.gravity = -0.2f; + } else { + this->actor.terminalVelocity = (this->unk_B86[1] * 0.0033f) + -20.0f; + this->actor.gravity = (this->unk_B86[1] * 0.00004f) + (REG(68) / 100.0f); + } + } + + this->fallStartHeight = this->actor.world.pos.y; + func_80832F78(this, &sp6C, &sp66, 0.0f, play); + if (sp6C == 0.0f) { + sp68 = 0.1f; + } else { + s16 temp_v0_6 = this->currentYaw - sp66; + + if (ABS_ALT(temp_v0_6) > 0x4000) { + sp6C = -sp6C; + sp66 += 0x8000; + } + sp68 = 0.25f; + } + + Math_SmoothStepToS(&this->unk_B8C, sp6C * 600.0f, 8, 0xFA0, 0x64); + Math_ScaledStepToS(&this->currentYaw, sp66, 0xFA); + + temp_ft0 = BINANG_SUB(sp66, this->currentYaw) * -2.0f; + temp_ft0 = CLAMP(temp_ft0, -0x1F40, 0x1F40); + Math_SmoothStepToS(&this->unk_B8E, temp_ft0, 0x14, 0x320, 0x14); + sp6C = (sp6C * (this->unk_B86[1] * 0.0004f)) * fabsf(Math_SinS(this->unk_B8C)); + func_80856888(&this->linearVelocity, sp6C, sp68); + + sp6C = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)); + if (sp6C > 8.0f) { + sp6C = 8.0f / sp6C; + this->linearVelocity *= sp6C; + this->actor.velocity.y *= sp6C; + } + } + + func_808378FC(play, this); +} + +// Deku spinning related +void func_808573A4(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; + + PlayerAnimation_Update(play, &this->skelAnime); + Player_SetCylinderForAttack(this, DMG_DEKU_SPIN, 1, 30); + + if (!func_80838A90(this, play)) { + s16 prevYaw = this->currentYaw; + f32 sp40; + s16 sp3E; + + func_80832F78(this, &sp40, &sp3E, 0.018f, play); + sp40 *= 1.0f - (0.9f * ((11100.0f - this->unk_B10[0]) / 11100.0f)); + if (!func_8083A4A4(this, &sp40, &sp3E, REG(43) / 100.0f)) { + func_8083CB58(this, sp40, sp3E); + } + + this->unk_B10[0] += -800.0f; + this->actor.shape.rot.y += BINANG_ADD((s16)this->unk_B10[0], BINANG_SUB(this->currentYaw, prevYaw)); + + if (Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0])) { + this->actor.shape.rot.y = this->currentYaw; + func_8083B2E4(this, play); + } else if (this->skelAnime.animation == &gPlayerAnim_pn_attack) { + this->stateFlags3 |= PLAYER_STATE3_100000; + + if (this->unk_B10[1] < 0.0f) { + func_8082E438(play, this, func_8082ED20(this)); + } + } + + func_808566C0(play, this, PLAYER_BODYPART_WAIST, 1.0f, 0.5f, 0.0f, 32); + + if (this->unk_B10[0] > 9500.0f) { + func_8083F8A8(play, this, 2.0f, 1, 2.5f, 10, 18, true); + } + + func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos, 2.0f, + this->currentYaw, this->actor.floorPoly, this->actor.floorBgId); + func_800B8F98(&this->actor, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG)); + } +} + +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; + } + this->unk_AE7 = 1; + this->unk_B48 = 1.0f; +} + +void func_808576BC(PlayState* play, Player* this) { + s32 var_v0 = ((this->actor.velocity.z * Math_CosS(this->currentYaw)) + + (this->actor.velocity.x * Math_SinS(this->currentYaw))) * + 800.0f; + + var_v0 -= this->unk_AE8; + var_v0 = ABS_ALT(var_v0); + + if (var_v0 <= 0x7D0) { + return; + } + + if (var_v0 > 0x1770) { + func_800B8F98(&this->actor, NA_SE_PL_GORON_SLIP - SFX_FLAG); + } + + if (func_8083F8A8(play, this, 12.0f, -1 - (var_v0 >> 0xC), (var_v0 >> 0xA) + 1.0f, (var_v0 >> 7) + 160, 20, true)) { + Player_PlaySfx(this, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) + ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG + : NA_SE_PL_ROLL_DUST - SFX_FLAG); + } +} + +void func_808577E0(Player* this) { + f32 temp_fa1 = ABS_ALT(this->unk_AE8) * 0.00004f; + + if (this->unk_ABC < temp_fa1) { + this->unk_B48 += 0.08f; + } else { + this->unk_B48 += -0.07f; + } + + this->unk_B48 = CLAMP(this->unk_B48, -0.2f, 0.14f); + if (fabsf(this->unk_B48) < 0.12f) { + if (Math_StepUntilF(&this->unk_ABC, temp_fa1, this->unk_B48)) { + this->unk_B48 = 0.0f; + } + } else { + this->unk_ABC += this->unk_B48; + this->unk_ABC = CLAMP(this->unk_ABC, -0.7f, 0.3f); + } +} + +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))) { + Player_SetAction(play, this, func_80849FE0, 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, + ANIMMODE_ONCE, 0.0f); + Player_PlaySfx(this, NA_SE_PL_BALL_TO_GORON); + return true; + } + + return false; +} + +s32 func_80857A44(PlayState* play, Player* this) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + + this->actor.shape.shadowDraw = ActorShadow_DrawCircle; + this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_800; + this->unk_AE7 = 4; + this->actor.shape.shadowScale = 30.0f; + this->unk_AE8 = this->linearVelocity * 500.0f; + this->unk_B08 = this->linearVelocity; + this->unk_B0C = 0.0f; + this->actor.home.rot.y = this->currentYaw; + + return true; + } + + return false; +} + +void func_80857AEC(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { + this->unk_B0C += this->unk_B08 * 0.05f; + + if (this->unk_B86[1] == 0) { + if (this->unk_AE7 == 1) { + this->unk_AE7 = 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->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; + } + } + + Player_AnimSfx_PlayFloorLand(this); + } +} + +// Goron rolling related +void func_80857BE8(Player* this, PlayState* play) { + if (func_80833058(play, this, D_8085D050, 0)) { + return; + } + + if ((this->unk_AE7 == 0) && !func_80857A44(play, this)) { + return; + } + + this->stateFlags3 |= PLAYER_STATE3_1000; + func_808577E0(this); + + if (!func_80857950(play, this)) { + f32 spE4 = 0.0f; + s16 spE2 = this->currentYaw; + u16 spE0; + s32 spDC; + s32 spD8; + + if (func_80840A30(play, this, &this->unk_B08, (this->doorType == PLAYER_DOORTYPE_STAIRCASE) ? 0.0f : 12.0f)) { + if (func_80857BE8 != this->actionFunc) { + return; + } + + this->linearVelocity *= 0.1f; + func_80834CD0(this, 10.0f, 0); + if (this->unk_B86[1] != 0) { + this->unk_B86[1] = 0; + this->unk_AE7 = 3; + } + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_B08 >= 12.0f)) { + s16 temp_v0 = this->currentYaw - BINANG_ADD(this->actor.wallYaw, 0x8000); + s16 temp_v2; + s32 var_a2 = ABS_ALT(temp_v0); + + this->unk_B0C += this->unk_B08 * 0.05f; + temp_v2 = ((temp_v0 >= 0) ? 1 : -1) * ((var_a2 + 0x100) & ~0x1FF); + this->currentYaw += BINANG_SUB(0x8000, (s16)(temp_v2 * 2)); + this->actor.home.rot.y = this->currentYaw; + this->actor.shape.rot.y = this->currentYaw; + + this->unk_B8C = 4; + Player_PlaySfx(this, NA_SE_IT_GORON_ROLLING_REFLECTION); + } + + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + + if (this->unk_B8E != 0) { + this->unk_B8E--; + } else { + func_80832F78(this, &spE4, &spE2, 0.0f, play); + spE4 *= 2.6f; + } + + if (this->unk_B8C != 0) { + this->unk_B8C--; + spE2 = this->currentYaw; + } + + if (this->unk_B86[1] != 0) { + spE4 = 18.0f; + Math_StepToC(&this->unk_AE7, 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)))) { + if (Math_StepToS(&this->unk_B86[1], 0, 1) != 0) { + this->stateFlags3 &= ~PLAYER_STATE3_80000; + Magic_Reset(play); + Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED); + } + this->unk_AE7 = 4; + } else if (this->unk_B86[1] < 7) { + if (!(this->stateFlags3 & PLAYER_STATE3_80000)) { + this->unk_3D0.unk_00 = 2; + } + this->unk_B86[1]++; + } + } + + spDC = spE4 * 900.0f; + + 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->unk_B8A == 0) { + this->unk_AE7 = 4; + } else { + this->unk_B8A--; + this->unk_ABC = 0.0f; + this->unk_B48 = 0.14f; + } + } else if ((this->unk_B86[1] == 0) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) && + (Inventory_GetBtnBItem(play) < ITEM_FD)) { + func_80857640(this, 14.0f, 0x1F40); + } else { + f32 spCC; + s16 spCA; + s16 spC8; + s32 var_a0; + s32 spC0; + f32 spBC; + f32 spB8; + f32 spB4; + f32 spB0; + f32 spAC; + f32 spA8; + f32 spA4; + f32 spA0; + Vec3f slopeNormal; + s16 downwardSlopeYaw; + s16 sp90 = this->currentYaw; + s16 sp8E = this->currentYaw - this->actor.home.rot.y; + f32 sp88 = Math_CosS(sp8E); + + if (this->unk_B86[1] == 0) { + this->unk_B0C = 0.0f; + if (this->unk_AE7 >= 0x36) { + Magic_Consume(play, 2, MAGIC_CONSUME_GORON_ZORA); + this->unk_B08 = 18.0f; + this->unk_B86[1] = 1; + this->stateFlags3 |= PLAYER_STATE3_80000; + func_8082E1F0(this, NA_SE_PL_GORON_BALL_CHARGE_DASH); + } + } else { + this->unk_B0C = CLAMP(this->unk_B0C, 0.0f, 0.9f); + } + + spBC = (1.0f - this->unk_B0C) * this->unk_B08 * sp88; + if ((spBC < 0.0f) || ((spE4 == 0.0f) && (ABS_ALT(sp8E) > 0xFA0))) { + spBC = 0.0f; + } + + Math_StepToF(&this->unk_B0C, 0.0f, fabsf(sp88) * 20.0f); + var_a0 = spBC * 500.0f; + var_a0 = CLAMP_MIN(var_a0, 0); + + spC0 = (s32)(spE4 * 400.0f) - var_a0; + spC0 = CLAMP_MIN(spC0, 0); + + spDC = CLAMP_MIN(spDC, var_a0); + + spAC = spBC * Math_SinS(this->actor.home.rot.y); + spA8 = spBC * Math_CosS(this->actor.home.rot.y); + spB4 = this->unk_B08 * Math_SinS(this->currentYaw); + spB0 = this->unk_B08 * Math_CosS(this->currentYaw); + + spA4 = spB4 - spAC; + spA0 = spB0 - spA8; + this->linearVelocity = spBC; + this->currentYaw = this->actor.home.rot.y; + spCC = spE4; + spCA = spE2; + + if (func_8083A4A4(this, &spCC, &spCA, (this->unk_AE7 >= 5) ? 0.0f : 1.0f)) { + if (this->unk_B86[1] == 0) { + this->unk_AE7 = 4; + } + + if (this->unk_AE7 == 4) { + spDC = -0xFA0; + } + } else { + static Vec3f D_8085D978 = { -30.0f, 60.0f, 0.0f }; + static Vec3f D_8085D984 = { 30.0f, 60.0f, 0.0f }; + f32 sp84 = (((this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_ICE - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG) || + (sPlayerCurrentFloorType == FLOOR_TYPE_5)) && + (spC0 >= 0x7D0)) + ? 0.08f + : this->unk_AE8 * 0.0003f; + f32 sp80 = (Math_SinS(this->unk_B6C) * 8.0f) + 0.6f; + s16 var_a3; + s16 sp7C; + Vec3f sp70; + f32 sp6C; + f32 var_fa1; + + 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++; + func_800B8F98(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG); + } else { + this->unk_AE7 = 4; + } + } + + if (spE4 != spCC) { + this->currentYaw = spE2; + } + + sp84 = CLAMP_MIN(sp84, 0.0f); + sp80 = CLAMP_MIN(sp80, 0.0f); + + Math_AsymStepToF(&this->linearVelocity, spE4, sp84, sp80); + spC8 = (s16)(fabsf(this->actor.speed) * 20.0f) + 300; + spC8 = CLAMP_MIN(spC8, 100); + + sp7C = (s32)(BINANG_SUB(spE2, this->currentYaw) * -0.5f); + this->unk_B0C += (f32)(SQ(sp7C)) * 8e-9f; + Math_ScaledStepToS(&this->currentYaw, spE2, spC8); + sp6C = func_80835D2C(play, this, &D_8085D978, &sp70); + + var_fa1 = func_80835D2C(play, this, &D_8085D984, &sp70) - sp6C; + if (fabsf(var_fa1) > 100.0f) { + var_fa1 = 0.0f; + } + + var_a3 = Math_Atan2S_XY(60.0f, var_fa1); + if (ABS_ALT(var_a3) > 0x2AAA) { + var_a3 = 0; + } + + Math_ScaledStepToS(&this->actor.shape.rot.z, var_a3 + sp7C, spC8); + } + + spBC = this->linearVelocity; + this->actor.home.rot.y = this->currentYaw; + this->currentYaw = sp90; + Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw); + + spB8 = sqrtf(SQ(spA4) + SQ(spA0)); + if (this->unk_B86[1] != 0) { + if ((ABS_ALT(sp8E) + ABS_ALT(this->unk_B6C)) > 15000) { + this->unk_B86[1] = 0; + this->unk_AE7 = 4; + this->unk_B8E = 0x14; + this->unk_AE8 = 0; + this->stateFlags3 &= ~PLAYER_STATE3_80000; + Magic_Reset(play); + } + } else { + f32 temp_ft4_2 = (0.6f * slopeNormal.x) + spA4; + f32 temp_ft5 = (0.6f * slopeNormal.z) + spA0; + f32 temp_fv0_3 = sqrtf(SQ(temp_ft4_2) + SQ(temp_ft5)); + + if ((temp_fv0_3 < spB8) || (temp_fv0_3 < 6.0f)) { + spA4 = temp_ft4_2; + spA0 = temp_ft5; + spB8 = temp_fv0_3; + } + } + + if (spB8 != 0.0f) { + f32 pad; + f32 sp54 = spB8 - 0.3f; + + sp54 = CLAMP_MIN(sp54, 0.0f); + + spB8 = sp54 / spB8; + + spA4 *= spB8; + spA0 *= spB8; + + if (sp54 != 0.0f) { + this->unk_B28 = Math_Atan2S_XY(spA0, spA4); + } + + if (this->unk_AE8 == 0) { + s32 temp_v0_10 = this->unk_B86[0]; + s32 temp_ft3_2 = sp54 * 800.0f; + + this->unk_B86[0] += (s16)temp_ft3_2; + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (temp_ft3_2 != 0) && + (((temp_v0_10 + temp_ft3_2) * temp_v0_10) <= 0)) { + spE0 = Player_GetFloorSfx(this, NA_SE_PL_GORON_ROLL); + func_8019F780(&this->actor.projectedPos, spE0, sp54); + } + } + } + + spAC = Math_SinS(this->actor.home.rot.y) * spBC; + spA8 = Math_CosS(this->actor.home.rot.y) * spBC; + + spB4 = spAC + spA4; + spB0 = spA8 + spA0; + + this->unk_B08 = sqrtf(SQ(spB4) + SQ(spB0)); + this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f); + + this->currentYaw = Math_Atan2S_XY(spB0, spB4); + } + + func_808576BC(play, this); + + if (ABS_ALT(this->unk_AE8) > 0xFA0) { + this->stateFlags2 |= PLAYER_STATE2_8; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->linearVelocity = this->unk_B08 * Math_CosS(this->unk_B6C); + this->actor.velocity.y = this->unk_B08 * Math_SinS(this->unk_B6C); + } + + if ((this->unk_B86[1] != 0) || + SurfaceType_HasMaterialProperty(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId, + MATERIAL_PROPERTY_SOFT_IMPRINT)) { + func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos, + 15.0f, this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId); + } else { + func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); + } + } else { + Math_ScaledStepToS(&this->actor.shape.rot.z, 0, 0x190); + + this->unk_B86[0] = 0; + if (this->unk_B86[1] != 0) { + this->actor.gravity = -1.0f; + Math_ScaledStepToS(&this->actor.home.rot.y, spE2, 0x190); + + this->unk_B08 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)) * + ((this->linearVelocity >= 0.0f) ? 1.0f : -1.0f); + 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->actor.velocity.y > 0.0f) { + if ((this->actor.velocity.y + this->actor.gravity) < 0.0f) { + this->actor.velocity.y = -this->actor.gravity; + } + } else { + this->unk_B8A = 0xA; + if (this->actor.velocity.y > -1.0f) { + this->actor.gravity = -0.2f; + } else { + this->unk_3D0.unk_00 = 1; + this->actor.gravity = -10.0f; + } + } + } + this->unk_B08 = this->linearVelocity; + } + + func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); + } + + Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x7D0); + + Math_AsymStepToS(&this->unk_AE8, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0); + + if (this->unk_AE8 != 0) { + spD8 = this->actor.shape.rot.x; + this->actor.shape.rot.x += this->unk_AE8; + + Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->unk_AE8)); + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) { + spE0 = + Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL); + func_8019F780(&this->actor.projectedPos, spE0, this->unk_B08); + } + } + + if (this->unk_AE7 == 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) { + Player_SetCylinderForAttack(this, DMG_GORON_SPIKES, 1, 25); + } else { + Player_SetCylinderForAttack(this, DMG_NORMAL_ROLL, 1, 25); + } + } +} + +void func_80858C84(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082E784(this); + func_8082E438(play, this, anim); + Player_StopHorizontalMovement(this); +} + +void func_80858CC8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082E784(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -8.0f); + Player_StopHorizontalMovement(this); +} + +void func_80858D48(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082E784(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f); + Player_StopHorizontalMovement(this); +} + +void func_80858DB4(PlayState* play, Player* this, void* anim) { + Player_StopHorizontalMovement(this); +} + +void func_80858DDC(PlayState* play, Player* this, void* anim) { + func_80858C84(play, this, anim); +} + +void func_80858DFC(PlayState* play, Player* this, void* anim) { + func_8082E784(this); + func_8082E5A8(play, this, anim); + Player_StopHorizontalMovement(this); +} + +void func_80858E40(PlayState* play, Player* this, void* anim) { + func_80858CC8(play, this, anim); +} + +void func_80858E60(PlayState* play, Player* this, void* anim) { + func_80858D48(play, this, anim); +} + +void func_80858E80(PlayState* play, Player* this, void* anim) { + func_8082EA60(play, this, anim); +} + +void func_80858EA0(PlayState* play, Player* this, void* anim) { + func_8082EA10(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void func_80858EC0(PlayState* play, Player* this, void* anim) { + Player_AnimationPlayOnceReverse(play, this, anim); + func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void func_80858EFC(PlayState* play, Player* this, void* anim) { + func_8082EB18(play, this, anim); +} + +void func_80858F1C(PlayState* play, Player* this, void* anim) { + func_8082EAC8(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void func_80858F3C(PlayState* play, Player* this, void* anim) { + Player_AnimationPlayOnce(play, this, anim); +} + +void func_80858F5C(PlayState* play, Player* this, void* anim) { + Player_AnimationPlayLoop(play, this, anim); +} + +void func_80858F7C(PlayState* play, Player* this, void* anim) { + func_8082DB90(play, this, anim); +} + +void func_80858F9C(PlayState* play, Player* this, void* anim) { + func_8082DB60(play, this, anim); +} + +void func_80858FBC(PlayState* play, Player* this, void* anim) { + PlayerAnimation_Update(play, &this->skelAnime); +} + +void func_80858FE8(Player* this) { + if (this->skelAnime.animation == &gPlayerAnim_lost_horse_wait) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG); + Player_PlaySfx(this, NA_SE_VO_LK_DRAGGED_DAMAGE - SFX_FLAG); + } +} + +void (*D_8085D990[])(PlayState*, Player*, void*) = { + /* 0 */ NULL, + /* 1 */ func_80858DB4, + /* 2 */ func_80858DDC, + /* 3 */ func_80858E40, + /* 4 */ func_80858E60, + /* 5 */ func_80858E80, + /* 6 */ func_80858EA0, + /* 7 */ func_80858EFC, + /* 8 */ func_80858F1C, + /* 9 */ func_80858F3C, + /* 10 */ func_80858F5C, + /* 11 */ func_80858FBC, + /* 12 */ func_80859028, + /* 13 */ func_808591BC, + /* 14 */ func_80858DFC, + /* 15 */ func_80858F7C, + /* 16 */ func_80858F9C, + /* 17 */ func_80859168, + /* 18 */ func_80859210, + /* 19 */ func_80858EC0, +}; + +AnimSfxEntry D_8085D9E0[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 34, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 45, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 51, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 64, NA_SE_PL_CALM_HIT, STOP), +}; +AnimSfxEntry D_8085D9F0[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 7, NA_SE_VO_LI_DEMO_DAMAGE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 18, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 18, NA_SE_VO_LI_FREEZE, STOP), +}; +AnimSfxEntry D_8085D9FC[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 14, NA_SE_PL_LAND_GROUND, STOP), +}; +AnimSfxEntry D_8085DA00[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 6, NA_SE_PL_GET_UP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_VO_LK_WAKE_UP, STOP), +}; +AnimSfxEntry D_8085DA08[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 26, NA_SE_PL_LAND_GROUND, STOP), +}; +AnimSfxEntry D_8085DA0C[] = { + ANIMSFX(ANIMSFX_TYPE_8, 16, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 36, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA14[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 55, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 55, NA_SE_VO_LK_CATCH_DEMO, STOP), +}; +AnimSfxEntry D_8085DA1C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_VO_LK_USING_UP_ENERGY, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 16, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 16, NA_SE_VO_LI_DAMAGE_S, STOP), +}; +AnimSfxEntry D_8085DA28[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 28, NA_SE_PL_LAND_GROUND, STOP), +}; +AnimSfxEntry D_8085DA2C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 1, NA_SE_VO_LK_USING_UP_ENERGY, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 42, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 44, NA_SE_VO_LI_FALL_L, STOP), +}; +AnimSfxEntry D_8085DA38[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 1, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_DAMAGE_S, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 39, NA_SE_PL_LAND_GROUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 49, NA_SE_NONE, STOP), +}; + +// gPlayerAnim_cl_nigeru +AnimSfxEntry D_8085DA48[] = { + ANIMSFX(ANIMSFX_TYPE_6, 1, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 5, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA50[] = { + ANIMSFX(ANIMSFX_TYPE_6, 10, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 13, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 16, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 19, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 22, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 22, NA_SE_PL_SLIP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 55, NA_SE_VO_LI_DAMAGE_S, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 62, NA_SE_NONE, STOP), +}; + +AnimSfxEntry D_8085DA70[] = { + ANIMSFX(ANIMSFX_TYPE_6, 42, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 48, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA78[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 2, NA_SE_PL_BOUND, STOP), +}; +AnimSfxEntry D_8085DA7C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 5, NA_SE_VO_LI_FREEZE, STOP), +}; +AnimSfxEntry D_8085DA80[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_FALL_L, STOP), +}; +AnimSfxEntry D_8085DA84[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_HANG, STOP), +}; +AnimSfxEntry D_8085DA88[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 26, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA8C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 4, NA_SE_VO_LI_SURPRISE, STOP), +}; +AnimSfxEntry D_8085DA90[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_PL_SIT_ON_HORSE, STOP), +}; + +void func_80859028(PlayState* play, Player* this, void* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80858D48(play, this, anim); + this->unk_AE8 = 1; + } + + if (this->skelAnime.animation == &gPlayerAnim_okiagaru_tatu) { + Player_PlayAnimSfx(this, D_8085DA08); + } else if (this->skelAnime.animation == &gPlayerAnim_lost_horse) { + Player_PlayAnimSfx(this, D_8085DA14); + } else if (this->skelAnime.animation == &gPlayerAnim_sirimochi) { + Player_PlayAnimSfx(this, D_8085DA38); + } else if (this->skelAnime.animation == &gPlayerAnim_alink_somukeru) { + Player_PlayAnimSfx(this, D_8085DA7C); + } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa) { + Player_PlayAnimSfx(this, D_8085DA84); + } else if (this->skelAnime.animation == &gPlayerAnim_cl_umanoru) { + Player_PlayAnimSfx(this, D_8085DA90); + } else { + func_80858FE8(this); + } +} + +void func_80859168(PlayState* play, Player* this, void* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + func_8082DB60(play, this, anim); + } +} + +void func_808591BC(PlayState* play, Player* this, void* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082EB18(play, this, anim); + this->unk_AE8 = 1; + } +} + +void func_80859210(PlayState* play, Player* this, void* arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + Player_PlayAnimSfx(this, arg2); +} + +void func_80859248(Player* this) { + if ((this->unk_398 == NULL) || (this->unk_398->update == NULL)) { + this->unk_398 = NULL; + } + this->targetedActor = this->unk_398; + if (this->unk_398 != NULL) { + this->actor.shape.rot.y = func_8083C62C(this, 0); + } +} + +void func_8085929C(PlayState* play, Player* this, UNK_TYPE arg2) { + this->stateFlags1 |= PLAYER_STATE1_8000000; + this->stateFlags2 |= PLAYER_STATE2_400; + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim); + this->linearVelocity = 0.0f; +} + +void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { + this->actor.gravity = 0.0f; + + if (this->unk_AE7 == 0) { + if ((this->transformation == PLAYER_FORM_DEKU) || func_8083B3B4(play, this, NULL)) { + this->unk_AE7 = 1; + } else { + func_808477D0(play, this, NULL, fabsf(this->actor.velocity.y)); + Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320); + func_8084748C(this, &this->actor.velocity.y, 4.0f, this->currentYaw); + } + } else { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE7 == 1) { + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); + } else { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim_wait); + } + } + func_808475B4(this); + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); + } +} + +void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80859248(this); + + if (func_801242B4(this)) { + func_80859300(play, this, 0); + } else { + PlayerAnimation_Update(play, &this->skelAnime); + 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); + } + } +} + +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_8085929C(play, this, 0); + } else { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]; + + if ((this->unk_396 == 6) || (this->unk_396 == 0x2E)) { + Player_AnimationPlayOnce(play, this, anim); + } else { + func_8082E784(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), + ANIMMODE_LOOP, -4.0f); + } + Player_StopHorizontalMovement(this); + } +} + +void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2) { + if (func_80847880(play, this)) { + return; + } + + if ((this->csMode == PLAYER_CSMODE_20) && (play->csCtx.state == CS_STATE_IDLE)) { + func_800B7298(play, NULL, PLAYER_CSMODE_END); + } else if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_80859300(play, this, 0); + this->actor.velocity.y = 0.0f; + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { + func_8083216C(this, play); + } + } +} + +void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->actor.id == ACTOR_EN_TEST3) { + func_80838830(this, OBJECT_GI_MSSA); + this->stateFlags1 |= PLAYER_STATE1_400; + } + + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA : &gPlayerAnim_link_demo_get_itemA); +} + +void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { + this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; + func_80151BB4(play, 0x1B); + Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); + } +} + +void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2) { + f32 linearVelocity; + s16 yaw; + + this->stateFlags1 &= ~PLAYER_STATE1_2000000; + + yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_3A0); + linearVelocity = this->linearVelocity; + this->actor.world.rot.y = yaw; + this->actor.shape.rot.y = yaw; + this->currentYaw = yaw; + if (linearVelocity <= 0.0f) { + this->linearVelocity = 0.1f; + } else if (linearVelocity > 2.5f) { + this->linearVelocity = 2.5f; + } + + if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) { + R_PLAY_FILL_SCREEN_ON = 45; + R_PLAY_FILL_SCREEN_R = 255; + R_PLAY_FILL_SCREEN_G = 255; + R_PLAY_FILL_SCREEN_B = 255; + R_PLAY_FILL_SCREEN_ALPHA = 0; + play_sound(NA_SE_SY_WHITE_OUT_T); + } +} + +void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2) { + f32 sp24; + + if (R_PLAY_FILL_SCREEN_ON > 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ON = -64; + R_PLAY_FILL_SCREEN_ALPHA = 255; + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + this->actor.update = func_8012301C; + this->actor.draw = NULL; + this->unk_AE7 = 0; + } + } else if (R_PLAY_FILL_SCREEN_ON < 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ON = 0; + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + } else { + sp24 = 2.5f; + func_808411D4(play, this, &sp24, 0xA); + this->unk_AE8++; + if (this->unk_AE8 >= 0x15) { + this->csMode = PLAYER_CSMODE_10; + } + } +} + +void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2) { + this->linearVelocity = 2.5f; + func_80835BF8(&this->actor.world.pos, this->actor.shape.rot.y, 180.0f, &this->unk_3A0); +} + +void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2) { + f32 sp1C = 2.5f; + + func_808411D4(play, this, &sp1C, 0xA); +} + +void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2) { + func_8083B23C(this, play); +} + +void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80859248(this); + if (this->unk_AE8 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, func_8082EF54(this)); + this->unk_AE8 = 0; + } + func_8082FC60(this); + } else { + func_8083E958(play, this); + } +} + +void func_80859AD0(PlayState* play, Player* this, UNK_PTR arg2) { + func_80840F90(play, this, arg2, 0.0f, 0, 0); +} + +void func_80859AF8(PlayState* play, Player* this, UNK_PTR arg2) { + this->actor.shape.face = 0xF; + func_80840F90(play, this, arg2, 0.0f, 0, 0); +} + +void func_80859B28(PlayState* play, Player* this, UNK_PTR arg2) { + func_80840F90(play, this, arg2, 0.0f, 0, 1); +} + +void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80858CC8(play, this, &gPlayerAnim_link_normal_okarina_start); + this->itemAction = PLAYER_IA_OCARINA; + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); +} + +void Player_Cutscene_Translate(PlayState* play, Player* this, CsCmdActorCue* playerAction) { + f32 startX = playerAction->startPos.x; + f32 startY = playerAction->startPos.y; + f32 startZ = playerAction->startPos.z; + f32 diffX = playerAction->endPos.x - startX; + f32 diffY = playerAction->endPos.y - startY; + f32 diffZ = playerAction->endPos.z - startZ; + f32 progress = (((f32)(play->csCtx.curFrame - playerAction->startFrame)) / + ((f32)(playerAction->endFrame - playerAction->startFrame))); + + this->actor.world.pos.x = (diffX * progress) + startX; + this->actor.world.pos.y = (diffY * progress) + startY; + this->actor.world.pos.z = (diffZ * progress) + startZ; +} + +void func_80859C60(PlayState* play, Player* this, void* arg2) { + if (arg2 != NULL) { + Player_Cutscene_Translate(play, this, arg2); + } + + PlayerAnimation_Update(play, &this->skelAnime); +} + +void func_80859CA0(PlayState* play, Player* this, s32 arg2) { + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + Player_StopHorizontalMovement(this); +} + +void func_80859CE0(PlayState* play, Player* this, s32 arg2) { + this->actor.draw = Player_Draw; +} + +void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80841358(play, this, false); + func_8082DB90(play, this, &gPlayerAnim_link_demo_return_to_past); +} + +void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); +} + +struct_8085DA94 D_8085DA94[PLAYER_CSMODE_MAX] = { + /* PLAYER_CSMODE_0 */ { 0, { NULL } }, + /* PLAYER_CSMODE_1 */ { -1, { func_808594D0 } }, + /* PLAYER_CSMODE_2 */ { 0, { NULL } }, + /* PLAYER_CSMODE_3 */ { 0, { NULL } }, + /* PLAYER_CSMODE_4 */ { 3, { &gPlayerAnim_link_demo_bikkuri } }, + /* PLAYER_CSMODE_5 */ { 0, { NULL } }, + /* PLAYER_CSMODE_END */ { 0, { NULL } }, + /* PLAYER_CSMODE_WAIT */ { -1, { func_808594D0 } }, + /* PLAYER_CSMODE_8 */ { 2, { &gPlayerAnim_link_demo_furimuki } }, + /* PLAYER_CSMODE_9 */ { -1, { func_8085978C } }, + /* PLAYER_CSMODE_10 */ { 3, { &gPlayerAnim_link_demo_warp } }, + /* PLAYER_CSMODE_11 */ { 5, { &gPlayerAnim_clink_demo_standup } }, + /* PLAYER_CSMODE_12 */ { 7, { &gPlayerAnim_clink_demo_standup_wait } }, + /* PLAYER_CSMODE_13 */ { 2, { &gPlayerAnim_link_demo_baru_op3 } }, + /* PLAYER_CSMODE_14 */ { 0, { NULL } }, + /* PLAYER_CSMODE_15 */ { 3, { &gPlayerAnim_link_demo_jibunmiru } }, + /* PLAYER_CSMODE_16 */ { -1, { func_80859B54 } }, + /* PLAYER_CSMODE_17 */ { 2, { &gPlayerAnim_link_normal_okarina_end } }, + /* PLAYER_CSMODE_18 */ { 16, { &gPlayerAnim_link_normal_hang_up_down } }, + /* PLAYER_CSMODE_19 */ { -1, { func_80859CA0 } }, + /* PLAYER_CSMODE_20 */ { -1, { func_808594D0 } }, + /* PLAYER_CSMODE_21 */ { 3, { &gPlayerAnim_clink_demo_mimawasi } }, + /* PLAYER_CSMODE_22 */ { 6, { &gPlayerAnim_om_get_mae } }, + /* PLAYER_CSMODE_23 */ { 3, { &gPlayerAnim_link_demo_look_hand } }, + /* PLAYER_CSMODE_24 */ { 3, { &gPlayerAnim_link_normal_wait_typeB_20f } }, + /* PLAYER_CSMODE_25 */ { -1, { func_80859CFC } }, + /* PLAYER_CSMODE_26 */ { -1, { func_8085A66C } }, + /* PLAYER_CSMODE_27 */ { 3, { &gPlayerAnim_link_demo_zeldamiru } }, + /* PLAYER_CSMODE_28 */ { 3, { &gPlayerAnim_link_demo_kenmiru1 } }, + /* PLAYER_CSMODE_29 */ { 3, { &gPlayerAnim_link_demo_kenmiru2 } }, + /* PLAYER_CSMODE_30 */ { 3, { &gPlayerAnim_link_demo_kenmiru2_modori } }, + /* PLAYER_CSMODE_31 */ { 6, { &gameplay_keep_Linkanim_00D310 } }, + /* PLAYER_CSMODE_32 */ { -1, { func_80859FCC } }, + /* PLAYER_CSMODE_33 */ { 3, { &gPlayerAnim_demo_rakka } }, + /* PLAYER_CSMODE_34 */ { 4, { &gPlayerAnim_demo_pikupiku } }, + /* PLAYER_CSMODE_35 */ { 3, { &gameplay_keep_Linkanim_00D2B8 } }, + /* PLAYER_CSMODE_36 */ { -1, { func_8085A120 } }, + /* PLAYER_CSMODE_37 */ { -1, { func_8085A19C } }, + /* PLAYER_CSMODE_38 */ { 6, { &gameplay_keep_Linkanim_00D278 } }, + /* PLAYER_CSMODE_39 */ { 6, { &gameplay_keep_Linkanim_00D288 } }, + /* PLAYER_CSMODE_40 */ { 5, { &gPlayerAnim_rakuba } }, + /* PLAYER_CSMODE_41 */ { 5, { &gPlayerAnim_bajyo_furikaeru } }, + /* PLAYER_CSMODE_42 */ { 5, { &gPlayerAnim_okiagaru } }, + /* PLAYER_CSMODE_43 */ { 5, { &gPlayerAnim_okiagaru_tatu } }, + /* PLAYER_CSMODE_44 */ { 7, { &gPlayerAnim_bajyo_walk } }, + /* PLAYER_CSMODE_45 */ { 5, { &gPlayerAnim_rakka } }, + /* PLAYER_CSMODE_46 */ { 5, { &gPlayerAnim_sirimochi } }, + /* PLAYER_CSMODE_47 */ { 5, { &gPlayerAnim_spotlight } }, + /* PLAYER_CSMODE_48 */ { 3, { &gPlayerAnim_al_hensin } }, + /* PLAYER_CSMODE_49 */ { 5, { &gPlayerAnim_dl_jibunmiru } }, + /* PLAYER_CSMODE_50 */ { 5, { &gPlayerAnim_vs_yousei } }, + /* PLAYER_CSMODE_51 */ { 5, { &gPlayerAnim_urusai } }, + /* PLAYER_CSMODE_52 */ { 5, { &gPlayerAnim_okarinatori } }, + /* PLAYER_CSMODE_53 */ { 5, { &gPlayerAnim_lost_horse } }, + /* PLAYER_CSMODE_54 */ { 4, { &gPlayerAnim_lost_horse_wait } }, + /* PLAYER_CSMODE_55 */ { 5, { &gPlayerAnim_lost_horse2 } }, + /* PLAYER_CSMODE_56 */ { 14, { &gPlayerAnim_okarinatori } }, + /* PLAYER_CSMODE_57 */ { 5, { &gPlayerAnim_cl_tobikakaru } }, + /* PLAYER_CSMODE_58 */ { -1, { func_8085978C } }, + /* PLAYER_CSMODE_59 */ { 5, { &gameplay_keep_Linkanim_00D0A0 } }, + /* PLAYER_CSMODE_60 */ { 2, { &gPlayerAnim_cl_furafura } }, + /* PLAYER_CSMODE_61 */ { 7, { &gPlayerAnim_cl_nigeru } }, + /* PLAYER_CSMODE_62 */ { 5, { &gPlayerAnim_cl_ononoki } }, + /* PLAYER_CSMODE_63 */ { 3, { &gPlayerAnim_al_gaku } }, + /* PLAYER_CSMODE_64 */ { 3, { &gPlayerAnim_al_fuwafuwa } }, + /* PLAYER_CSMODE_65 */ { 3, { &gPlayerAnim_al_fuwafuwa_modori } }, + /* PLAYER_CSMODE_66 */ { 3, { &gPlayerAnim_al_elf_tobidasi } }, + /* PLAYER_CSMODE_67 */ { -1, { func_8085968C } }, + /* PLAYER_CSMODE_68 */ { -1, { func_8085A24C } }, + /* PLAYER_CSMODE_69 */ { -1, { func_8085A330 } }, + /* PLAYER_CSMODE_70 */ { 7, { &gPlayerAnim_cl_tewofuru } }, + /* PLAYER_CSMODE_71 */ { 5, { &gPlayerAnim_cl_jibun_miru } }, + /* PLAYER_CSMODE_72 */ { 5, { &gPlayerAnim_cl_hoo } }, + /* PLAYER_CSMODE_73 */ { 3, { &gPlayerAnim_al_yareyare } }, + /* PLAYER_CSMODE_74 */ { 3, { &gPlayerAnim_al_yes } }, + /* PLAYER_CSMODE_75 */ { 3, { &gPlayerAnim_al_no } }, + /* PLAYER_CSMODE_76 */ { 3, { &gPlayerAnim_al_unun } }, + /* PLAYER_CSMODE_77 */ { 7, { &gPlayerAnim_dl_yusaburu } }, + /* PLAYER_CSMODE_78 */ { 5, { &gPlayerAnim_dl_kokeru } }, + /* PLAYER_CSMODE_79 */ { 3, { &gPlayerAnim_alink_powerup } }, + /* PLAYER_CSMODE_80 */ { 4, { &gPlayerAnim_alink_rakkatyu } }, + /* PLAYER_CSMODE_81 */ { 3, { &gPlayerAnim_alink_kyoro } }, + /* PLAYER_CSMODE_82 */ { 4, { &gPlayerAnim_alink_yurayura } }, + /* PLAYER_CSMODE_83 */ { 3, { &gPlayerAnim_alink_somukeru } }, + /* PLAYER_CSMODE_84 */ { 5, { &gPlayerAnim_alink_fukitobu } }, + /* PLAYER_CSMODE_85 */ { 3, { &gameplay_keep_Linkanim_00CFC8 } }, + /* PLAYER_CSMODE_86 */ { 4, { &gPlayerAnim_alink_tereru } }, + /* PLAYER_CSMODE_87 */ { 5, { &gameplay_keep_Linkanim_00D1D0 } }, + /* PLAYER_CSMODE_88 */ { 3, { &gPlayerAnim_alink_kaitenmiss } }, + /* PLAYER_CSMODE_89 */ { 4, { &gameplay_keep_Linkanim_00CFC0 } }, + /* PLAYER_CSMODE_90 */ { 4, { &gameplay_keep_Linkanim_00CFB8 } }, + /* PLAYER_CSMODE_91 */ { 4, { &gameplay_keep_Linkanim_00D050 } }, + /* PLAYER_CSMODE_92 */ { 4, { &gameplay_keep_Linkanim_00D048 } }, + /* PLAYER_CSMODE_93 */ { -1, { func_8085A8C4 } }, + /* PLAYER_CSMODE_94 */ { 3, { &gPlayerAnim_alink_ozigi } }, + /* PLAYER_CSMODE_95 */ { 3, { &gPlayerAnim_alink_ozigi_modori } }, + /* PLAYER_CSMODE_96 */ { 9, { &gPlayerAnim_link_normal_back_downA } }, + /* PLAYER_CSMODE_97 */ { -1, { func_8085A530 } }, + /* PLAYER_CSMODE_98 */ { 15, { &gPlayerAnim_cl_maskoff } }, + /* PLAYER_CSMODE_99 */ { 7, { &gPlayerAnim_cl_kubisime } }, + /* PLAYER_CSMODE_100 */ { 3, { &gPlayerAnim_alink_ee } }, + /* PLAYER_CSMODE_101 */ { 3, { &gameplay_keep_Linkanim_00CFF0 } }, + /* PLAYER_CSMODE_102 */ { -1, { func_8085A768 } }, + /* PLAYER_CSMODE_103 */ { -1, { func_8085AA60 } }, + /* PLAYER_CSMODE_104 */ { 5, { &gPlayerAnim_cl_dakisime } }, + /* PLAYER_CSMODE_105 */ { 5, { &gPlayerAnim_kf_omen } }, + /* PLAYER_CSMODE_106 */ { 5, { &gPlayerAnim_kf_dakiau } }, + /* PLAYER_CSMODE_107 */ { 5, { &gPlayerAnim_kf_hanare } }, + /* PLAYER_CSMODE_108 */ { 5, { &gPlayerAnim_kf_miseau } }, + /* PLAYER_CSMODE_109 */ { 5, { &gPlayerAnim_kf_awase } }, + /* PLAYER_CSMODE_110 */ { 7, { &gPlayerAnim_kf_tetunagu_loop } }, + /* PLAYER_CSMODE_111 */ { 3, { &gPlayerAnim_link_keirei } }, + /* PLAYER_CSMODE_112 */ { 5, { &gPlayerAnim_cl_umanoru } }, + /* PLAYER_CSMODE_113 */ { 5, { &gPlayerAnim_cl_wakare } }, + /* PLAYER_CSMODE_114 */ { 4, { &gPlayerAnim_alink_dance_loop } }, + /* PLAYER_CSMODE_115 */ { 2, { &gPlayerAnim_link_demo_goma_furimuki } }, + /* PLAYER_CSMODE_116 */ { 7, { &gPlayerAnim_link_uma_anim_fastrun } }, + /* PLAYER_CSMODE_117 */ { 5, { &gPlayerAnim_cl_umamiage } }, + /* PLAYER_CSMODE_118 */ { 7, { &gPlayerAnim_demo_suwari1 } }, + /* PLAYER_CSMODE_119 */ { 7, { &gPlayerAnim_demo_suwari2 } }, + /* PLAYER_CSMODE_120 */ { 7, { &gPlayerAnim_demo_suwari3 } }, + /* PLAYER_CSMODE_121 */ { -1, { func_80859990 } }, + /* PLAYER_CSMODE_122 */ { 0, { NULL } }, + /* PLAYER_CSMODE_123 */ { -1, { func_80859A10 } }, + /* PLAYER_CSMODE_124 */ { 7, { &gPlayerAnim_clink_demo_get1 } }, + /* PLAYER_CSMODE_125 */ { 5, { &gPlayerAnim_clink_demo_get2 } }, + /* PLAYER_CSMODE_126 */ { 5, { &gPlayerAnim_clink_demo_get3 } }, + /* PLAYER_CSMODE_127 */ { 3, { &gPlayerAnim_link_demo_gurad } }, + /* PLAYER_CSMODE_128 */ { 4, { &gPlayerAnim_link_demo_sita_wait } }, + /* PLAYER_CSMODE_129 */ { 3, { &gPlayerAnim_L_1kyoro } }, + /* PLAYER_CSMODE_130 */ { 3, { &gPlayerAnim_L_2kyoro } }, + /* PLAYER_CSMODE_131 */ { 3, { &gPlayerAnim_L_sagaru } }, + /* PLAYER_CSMODE_132 */ { 3, { &gPlayerAnim_L_bouzen } }, + /* PLAYER_CSMODE_133 */ { 3, { &gPlayerAnim_L_kamaeru } }, + /* PLAYER_CSMODE_134 */ { 3, { &gPlayerAnim_L_hajikareru } }, + /* PLAYER_CSMODE_135 */ { 3, { &gPlayerAnim_L_ken_miru } }, + /* PLAYER_CSMODE_136 */ { 3, { &gPlayerAnim_L_mukinaoru } }, + /* PLAYER_CSMODE_137 */ { 3, { &gPlayerAnim_link_demo_return_to_past } }, + /* PLAYER_CSMODE_138 */ { 3, { &gPlayerAnim_link_last_hit_motion1 } }, + /* PLAYER_CSMODE_139 */ { 3, { &gPlayerAnim_link_last_hit_motion2 } }, +}; + +struct_8085DA94 D_8085DEF4[PLAYER_CSMODE_MAX] = { + /* PLAYER_CSMODE_0 */ { 0, { NULL } }, + /* PLAYER_CSMODE_1 */ { -1, { func_80859414 } }, + /* PLAYER_CSMODE_2 */ { -1, { func_80859AD0 } }, + /* PLAYER_CSMODE_3 */ { -1, { func_80859B28 } }, + /* PLAYER_CSMODE_4 */ { 11, { NULL } }, + /* PLAYER_CSMODE_5 */ { -1, { func_8085ADA0 } }, + /* PLAYER_CSMODE_END */ { -1, { func_8085AACC } }, + /* PLAYER_CSMODE_WAIT */ { -1, { func_808595B8 } }, + /* PLAYER_CSMODE_8 */ { 18, { D_8085DA70 } }, + /* PLAYER_CSMODE_9 */ { -1, { func_80859890 } }, + /* PLAYER_CSMODE_10 */ { -1, { func_80859C60 } }, + /* PLAYER_CSMODE_11 */ { 18, { D_8085D9E0 } }, + /* PLAYER_CSMODE_12 */ { 11, { NULL } }, + /* PLAYER_CSMODE_13 */ { 11, { NULL } }, + /* PLAYER_CSMODE_14 */ { 0, { NULL } }, + /* PLAYER_CSMODE_15 */ { 11, { NULL } }, + /* PLAYER_CSMODE_16 */ { 17, { &gPlayerAnim_link_normal_okarina_swing } }, + /* PLAYER_CSMODE_17 */ { 11, { NULL } }, + /* PLAYER_CSMODE_18 */ { 11, { NULL } }, + /* PLAYER_CSMODE_19 */ { -1, { func_8085A710 } }, + /* PLAYER_CSMODE_20 */ { -1, { func_808595B8 } }, + /* PLAYER_CSMODE_21 */ { 12, { &gPlayerAnim_clink_demo_mimawasi_wait } }, + /* PLAYER_CSMODE_22 */ { -1, { func_80859D70 } }, + /* PLAYER_CSMODE_23 */ { 12, { &gPlayerAnim_link_demo_look_hand_wait } }, + /* PLAYER_CSMODE_24 */ { 11, { NULL } }, + /* PLAYER_CSMODE_25 */ { 11, { NULL } }, + /* PLAYER_CSMODE_26 */ { -1, { func_8085A6C0 } }, + /* PLAYER_CSMODE_27 */ { 12, { &gPlayerAnim_link_demo_zeldamiru_wait } }, + /* PLAYER_CSMODE_28 */ { 12, { &gPlayerAnim_link_demo_kenmiru1_wait } }, + /* PLAYER_CSMODE_29 */ { 12, { &gPlayerAnim_link_demo_kenmiru2_wait } }, + /* PLAYER_CSMODE_30 */ { 12, { &gPlayerAnim_demo_link_nwait } }, + /* PLAYER_CSMODE_31 */ { 12, { &gameplay_keep_Linkanim_00D318 } }, + /* PLAYER_CSMODE_32 */ { -1, { func_80859FF4 } }, + /* PLAYER_CSMODE_33 */ { -1, { Player_Cutscene_TranslateReverse } }, + /* PLAYER_CSMODE_34 */ { 11, { NULL } }, + /* PLAYER_CSMODE_35 */ { 12, { &gameplay_keep_Linkanim_00D2C0 } }, + /* PLAYER_CSMODE_36 */ { -1, { func_8085A144 } }, + /* PLAYER_CSMODE_37 */ { -1, { func_8085A1D4 } }, + /* PLAYER_CSMODE_38 */ { 12, { &gameplay_keep_Linkanim_00D280 } }, + /* PLAYER_CSMODE_39 */ { 12, { &gameplay_keep_Linkanim_00D290 } }, + /* PLAYER_CSMODE_40 */ { 18, { D_8085D9F0 } }, + /* PLAYER_CSMODE_41 */ { 11, { NULL } }, + /* PLAYER_CSMODE_42 */ { 18, { D_8085DA00 } }, + /* PLAYER_CSMODE_43 */ { 13, { &gPlayerAnim_okiagaru_wait } }, + /* PLAYER_CSMODE_44 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_45 */ { 18, { D_8085DA2C } }, + /* PLAYER_CSMODE_46 */ { 12, { &gPlayerAnim_sirimochi_wait } }, + /* PLAYER_CSMODE_47 */ { 12, { &gPlayerAnim_spotlight_wait } }, + /* PLAYER_CSMODE_48 */ { 12, { &gPlayerAnim_al_hensin_loop } }, + /* PLAYER_CSMODE_49 */ { 12, { &gPlayerAnim_dl_jibunmiru_wait } }, + /* PLAYER_CSMODE_50 */ { 18, { D_8085DA50 } }, + /* PLAYER_CSMODE_51 */ { 11, { NULL } }, + /* PLAYER_CSMODE_52 */ { 18, { D_8085D9FC } }, + /* PLAYER_CSMODE_53 */ { 12, { &gPlayerAnim_lost_horse_wait } }, + /* PLAYER_CSMODE_54 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_55 */ { 18, { D_8085DA1C } }, + /* PLAYER_CSMODE_56 */ { 11, { NULL } }, + /* PLAYER_CSMODE_57 */ { 18, { D_8085DA0C } }, + /* PLAYER_CSMODE_58 */ { -1, { func_808599DC } }, + /* PLAYER_CSMODE_59 */ { 11, { NULL } }, + /* PLAYER_CSMODE_60 */ { 18, { D_8085DA28 } }, + /* PLAYER_CSMODE_61 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_62 */ { 11, { NULL } }, + /* PLAYER_CSMODE_63 */ { 11, { NULL } }, + /* PLAYER_CSMODE_64 */ { 12, { &gPlayerAnim_al_fuwafuwa_loop } }, + /* PLAYER_CSMODE_65 */ { -1, { func_8085A40C } }, + /* PLAYER_CSMODE_66 */ { 11, { NULL } }, + /* PLAYER_CSMODE_67 */ { -1, { func_80859708 } }, + /* PLAYER_CSMODE_68 */ { -1, { func_8085A2AC } }, + /* PLAYER_CSMODE_69 */ { 11, { NULL } }, + /* PLAYER_CSMODE_70 */ { 11, { NULL } }, + /* PLAYER_CSMODE_71 */ { -1, { func_8085A40C } }, + /* PLAYER_CSMODE_72 */ { 11, { NULL } }, + /* PLAYER_CSMODE_73 */ { 11, { NULL } }, + /* PLAYER_CSMODE_74 */ { 11, { NULL } }, + /* PLAYER_CSMODE_75 */ { 11, { NULL } }, + /* PLAYER_CSMODE_76 */ { 11, { NULL } }, + /* PLAYER_CSMODE_77 */ { 11, { NULL } }, + /* PLAYER_CSMODE_78 */ { 18, { D_8085DA78 } }, + /* PLAYER_CSMODE_79 */ { 12, { &gPlayerAnim_alink_powerup_loop } }, + /* PLAYER_CSMODE_80 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_81 */ { 12, { &gPlayerAnim_alink_kyoro_loop } }, + /* PLAYER_CSMODE_82 */ { 11, { NULL } }, + /* PLAYER_CSMODE_83 */ { 12, { &gPlayerAnim_alink_somukeru_loop } }, + /* PLAYER_CSMODE_84 */ { 18, { D_8085DA80 } }, + /* PLAYER_CSMODE_85 */ { 12, { &gameplay_keep_Linkanim_00CFD0 } }, + /* PLAYER_CSMODE_86 */ { 11, { NULL } }, + /* PLAYER_CSMODE_87 */ { 11, { NULL } }, + /* PLAYER_CSMODE_88 */ { 11, { NULL } }, + /* PLAYER_CSMODE_89 */ { 11, { NULL } }, + /* PLAYER_CSMODE_90 */ { 11, { NULL } }, + /* PLAYER_CSMODE_91 */ { 11, { NULL } }, + /* PLAYER_CSMODE_92 */ { 11, { NULL } }, + /* PLAYER_CSMODE_93 */ { -1, { func_8085A940 } }, + /* PLAYER_CSMODE_94 */ { 12, { &gPlayerAnim_alink_ozigi_loop } }, + /* PLAYER_CSMODE_95 */ { 11, { NULL } }, + /* PLAYER_CSMODE_96 */ { -1, { func_8085A4A4 } }, + /* PLAYER_CSMODE_97 */ { -1, { func_8085A5DC } }, + /* PLAYER_CSMODE_98 */ { -1, { func_8085AA84 } }, + /* PLAYER_CSMODE_99 */ { 11, { NULL } }, + /* PLAYER_CSMODE_100 */ { 12, { &gPlayerAnim_alink_ee_loop } }, + /* PLAYER_CSMODE_101 */ { 12, { &gameplay_keep_Linkanim_00CFF8 } }, + /* PLAYER_CSMODE_102 */ { -1, { func_8085A7C0 } }, + /* PLAYER_CSMODE_103 */ { 11, { NULL } }, + /* PLAYER_CSMODE_104 */ { 13, { &gPlayerAnim_cl_dakisime_loop } }, + /* PLAYER_CSMODE_105 */ { 13, { &gPlayerAnim_kf_omen_loop } }, + /* PLAYER_CSMODE_106 */ { 13, { &gPlayerAnim_kf_dakiau_loop } }, + /* PLAYER_CSMODE_107 */ { 13, { &gPlayerAnim_kf_hanare_loop } }, + /* PLAYER_CSMODE_108 */ { 11, { NULL } }, + /* PLAYER_CSMODE_109 */ { 11, { NULL } }, + /* PLAYER_CSMODE_110 */ { 11, { NULL } }, + /* PLAYER_CSMODE_111 */ { 12, { &gPlayerAnim_link_kei_wait } }, + /* PLAYER_CSMODE_112 */ { 13, { &gPlayerAnim_cl_umanoru_loop } }, + /* PLAYER_CSMODE_113 */ { 13, { &gPlayerAnim_cl_wakare_loop } }, + /* PLAYER_CSMODE_114 */ { 11, { NULL } }, + /* PLAYER_CSMODE_115 */ { -1, { func_8085AA10 } }, + /* PLAYER_CSMODE_116 */ { 11, { NULL } }, + /* PLAYER_CSMODE_117 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_118 */ { 11, { NULL } }, + /* PLAYER_CSMODE_119 */ { 11, { NULL } }, + /* PLAYER_CSMODE_120 */ { 11, { NULL } }, + /* PLAYER_CSMODE_121 */ { -1, { func_808599DC } }, + /* PLAYER_CSMODE_122 */ { -1, { func_80859AF8 } }, + /* PLAYER_CSMODE_123 */ { -1, { func_80859A44 } }, + /* PLAYER_CSMODE_124 */ { 11, { NULL } }, + /* PLAYER_CSMODE_125 */ { 11, { NULL } }, + /* PLAYER_CSMODE_126 */ { 11, { NULL } }, + /* PLAYER_CSMODE_127 */ { 12, { &gPlayerAnim_link_demo_gurad_wait } }, + /* PLAYER_CSMODE_128 */ { 11, { NULL } }, + /* PLAYER_CSMODE_129 */ { 12, { &gPlayerAnim_L_kw } }, + /* PLAYER_CSMODE_130 */ { 11, { NULL } }, + /* PLAYER_CSMODE_131 */ { 11, { NULL } }, + /* PLAYER_CSMODE_132 */ { 11, { NULL } }, + /* PLAYER_CSMODE_133 */ { 11, { NULL } }, + /* PLAYER_CSMODE_134 */ { -1, { func_80859D44 } }, + /* PLAYER_CSMODE_135 */ { 11, { NULL } }, + /* PLAYER_CSMODE_136 */ { 12, { &gPlayerAnim_L_kennasi_w } }, + /* PLAYER_CSMODE_137 */ { -1, { func_80859EBC } }, + /* PLAYER_CSMODE_138 */ { -1, { func_80859F4C } }, + /* PLAYER_CSMODE_139 */ { -1, { func_80859F4C } }, +}; + +PlayerAnimationHeader* D_8085E354[PLAYER_FORM_MAX] = { + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_GORON + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_ZORA + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_DEKU + &gPlayerAnim_om_get, // PLAYER_FORM_HUMAN +}; + +struct_8085E368 D_8085E368[PLAYER_FORM_MAX] = { + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_FIERCE_DEITY + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_GORON + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_ZORA + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_DEKU + { { -200, 500, 0 }, { 600, 400, 600 } }, // PLAYER_FORM_HUMAN +}; + +Color_RGBA8 D_8085E3A4 = { 255, 255, 255, 0 }; +Color_RGBA8 D_8085E3A8 = { 0, 128, 128, 0 }; + +void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) { + struct_8085E368* posInfo; + Vec3f effectPos; + Vec3f randPos; + + func_808591BC(play, this, D_8085E354[this->transformation]); + + if (this->rightHandType != 0xFF) { + this->rightHandType = 0xFF; + } else { + posInfo = &D_8085E368[this->transformation]; + randPos.x = randPlusMinusPoint5Scaled(posInfo->range.x) + posInfo->base.x; + randPos.y = randPlusMinusPoint5Scaled(posInfo->range.y) + posInfo->base.y; + randPos.z = randPlusMinusPoint5Scaled(posInfo->range.z) + posInfo->base.z; + SkinMatrix_Vec3fMtxFMultXYZ(&this->shieldMf, &randPos, &effectPos); + EffectSsKirakira_SpawnDispersed(play, &effectPos, &gZeroVec3f, &gZeroVec3f, &D_8085E3A4, &D_8085E3A8, 600, -10); + } +} + +void func_80859EBC(PlayState* play, Player* this, s32 arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8085AACC(play, this, arg2); + } else if (this->unk_AE8 == 0) { + Item_Give(play, ITEM_SWORD_RAZOR); + func_80841358(play, this, false); + } else { + func_808484CC(this); + } +} + +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8083FCF0(play, this, 0.0f, 99.0f, this->skelAnime.endFrame - 8.0f); + } + if (this->heldItemAction != PLAYER_IA_SWORD_GILDED) { + func_80841358(play, this, true); + } +} + +void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->transformation != PLAYER_FORM_DEKU) { + gSaveContext.save.playerForm = PLAYER_FORM_DEKU; + } +} + +void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + if (gSaveContext.save.playerForm != this->transformation) { + this->actor.update = func_8012301C; + this->actor.draw = NULL; + } +} + +void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg) { + CsCmdActorCue* playerAction = arg; + f32 xEnd = playerAction->endPos.x; + f32 yEnd = playerAction->endPos.y; + f32 zEnd = playerAction->endPos.z; + f32 xDiff; + f32 yDiff; + f32 zDiff; + f32 progress; + + xDiff = playerAction->startPos.x - xEnd; + yDiff = playerAction->startPos.y - yEnd; + zDiff = playerAction->startPos.z - zEnd; + + progress = ((f32)(playerAction->endFrame - play->csCtx.curFrame)) / + ((f32)(playerAction->endFrame - playerAction->startFrame)); + + this->actor.world.pos.x = (xDiff * progress) + xEnd; + this->actor.world.pos.y = (yDiff * progress) + yEnd; + this->actor.world.pos.z = (zDiff * progress) + zEnd; + PlayerAnimation_Update(play, &this->skelAnime); +} + +void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->transformation != PLAYER_FORM_FIERCE_DEITY) { + gSaveContext.save.playerForm = PLAYER_FORM_FIERCE_DEITY; + } +} + +void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + if (gSaveContext.save.playerForm != this->transformation) { + this->actor.update = func_8012301C; + this->actor.draw = NULL; + } +} + +void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2) { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_demo_rakka); + this->unk_AAA = -0x8000; +} + +void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + this->actor.gravity = 0.0f; + Math_StepToF(&this->actor.velocity.y, -this->actor.terminalVelocity, -((f32)REG(68) / 100.0f)); +} + +void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2) { + func_8082DB90(play, this, D_8085D17C[this->transformation]); + this->itemAction = PLAYER_IA_OCARINA; + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); +} + +void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2) { + if ((PlayerAnimation_Update(play, &this->skelAnime)) && + (this->skelAnime.animation == D_8085D17C[this->transformation])) { + func_808525C4(play, this); + return; + } + if (this->unk_AE8 != 0) { + func_8085255C(play, this); + } +} + +void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2) { + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); +} + +void func_8085A364(PlayState* play, Player* this, void* arg2) { + Player_Cutscene_Translate(play, this, arg2); + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082EB18(play, this, &gPlayerAnim_cl_umamiage_loop); + } + + if (this->skelAnime.animation == &gPlayerAnim_cl_nigeru) { + Player_PlayAnimSfx(this, D_8085DA48); + } else if (this->skelAnime.animation == &gPlayerAnim_alink_rakkatyu) { + func_800B8F98(&this->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); + } else { + func_80858FE8(this); + } +} + +void func_8085A40C(PlayState* play, Player* this, void* arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80859CA0(play, this, arg2); + } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa_modori) { + Player_PlayAnimSfx(this, D_8085DA88); + } else if (this->skelAnime.animation == &gPlayerAnim_cl_jibun_miru) { + Player_PlayAnimSfx(this, D_8085DA8C); + } +} + +void func_8085A4A4(PlayState* play, Player* this, void* arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB); + this->unk_AE8 = 1; + } + if (this->unk_AE8 != 0) { + func_80832F24(this); + } +} + +void func_8085A530(PlayState* play, Player* this, void* arg2) { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_give_other, 1.0f, + (play->sceneId == SCENE_ALLEY) ? IREG(56) : 0.0f, + Animation_GetLastFrame(&gPlayerAnim_link_normal_give_other), ANIMMODE_ONCE, -8.0f); +} + +void func_8085A5DC(PlayState* play, Player* this, void* arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8++ >= 0x15) { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, + -16.0f); + } + } +} + +void func_8085A66C(PlayState* play, Player* this, void* arg2) { + if (func_801242B4(this)) { + func_8085929C(play, this, 0); + } else { + func_80858E40(play, this, &gPlayerAnim_link_demo_kousan); + } +} + +void func_8085A6C0(PlayState* play, Player* this, void* anim) { + if (func_801242B4(this)) { + func_80859300(play, this, 0); + } else { + func_80858FBC(play, this, anim); + } +} + +void func_8085A710(PlayState* play, Player* this, void* anim) { + func_80858FBC(play, this, anim); + if (func_8083D23C(this, play)) { + play->csCtx.state = CS_STATE_STOP; + CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); + } +} + +void func_8085A768(PlayState* play, Player* this, void* arg2) { + func_80838830(this, OBJECT_GI_RESERVE_C_01); + func_80858E40(play, this, &gPlayerAnim_link_normal_give_other); + this->stateFlags2 &= ~PLAYER_STATE2_1000000; +} + +void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 == 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; + } else { + this->getItemDrawIdPlusOne = GID_PENDANT_OF_MEMORIES + 1; + } + } else if (this->unk_AE8 < 0) { + if (Actor_HasParent(&this->actor, play)) { + this->actor.parent = NULL; + this->unk_AE8 = 1; + } else { + Actor_OfferGetItem(&this->actor, play, GI_PENDANT_OF_MEMORIES, 9999.9f, 9999.9f); + } + } + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + SET_WEEKEVENTREG(WEEKEVENTREG_50_80); + } +} + +void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2) { + if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) { + R_PLAY_FILL_SCREEN_ON = 45; + R_PLAY_FILL_SCREEN_R = 255; + R_PLAY_FILL_SCREEN_G = 255; + R_PLAY_FILL_SCREEN_B = 255; + R_PLAY_FILL_SCREEN_ALPHA = 0; + play_sound(NA_SE_SY_WHITE_OUT_T); + } +} + +void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2) { + if (R_PLAY_FILL_SCREEN_ON > 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ON = -64; + R_PLAY_FILL_SCREEN_ALPHA = 255; + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + this->actor.update = func_8012301C; + this->actor.draw = NULL; + this->unk_AE7 = 0; + } + } else if (R_PLAY_FILL_SCREEN_ON < 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ON = 0; + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + } else { + PlayerAnimation_Update(play, &this->skelAnime); + } +} + +void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR)) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + } +} + +void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80848640(play, this); +} + +void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->stateFlags2 |= PLAYER_STATE2_1000000; + } +} + +void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2) { + if (func_801242B4(this)) { + func_808353DC(play, this); + func_8082DC64(play, this); + } else { + func_80839ED0(this, play); + if (!func_808391D8(this, play)) { + func_8083D23C(this, play); + } + } + + this->csMode = PLAYER_CSMODE_0; + this->unk_AA5 = PLAYER_UNKAA5_0; +} + +void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction) { + this->actor.world.pos.x = playerAction->startPos.x; + this->actor.world.pos.y = playerAction->startPos.y; + this->actor.world.pos.z = playerAction->startPos.z; + + this->currentYaw = this->actor.shape.rot.y = playerAction->rot.y; +} + +void Player_Cutscene_8085ABA8(Player* this, CsCmdActorCue* playerAction) { + f32 xDiff = playerAction->startPos.x - (s32)this->actor.world.pos.x; + f32 yDiff = playerAction->startPos.y - (s32)this->actor.world.pos.y; + f32 zDiff = playerAction->startPos.z - (s32)this->actor.world.pos.z; + f32 dist; + s16 temp_v0; + + temp_v0 = (s16)playerAction->rot.y - this->actor.shape.rot.y; + dist = sqrtf(SQ(xDiff) + SQ(yDiff) + SQ(zDiff)); + if (this->linearVelocity == 0.0f) { + if ((dist > 50.0f) || (ABS_ALT(temp_v0) > 0x4000)) { + Player_Cutscene_SetPosAndYawToStart(this, playerAction); + } + } + + this->skelAnime.moveFlags = 0; + func_8082E784(this); +} + +void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, struct_8085DA94* arg3) { + if (arg3->type > 0) { + D_8085D990[arg3->type](play, this, arg3->anim); + } else if (arg3->type < 0) { + arg3->func(play, this, cue); + } + + if ((D_80862B6C & 4) && !(this->skelAnime.moveFlags & ANIM_FLAG_4)) { + this->skelAnime.morphTable[PLAYER_LIMB_ROOT - 1].y /= this->ageProperties->unk_08; + D_80862B6C = 0; + } +} + +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); + } +} + +void func_8085ADA0(PlayState* play, Player* this, s32 arg2) { + CsCmdActorCue* cue = (this->actor.id == ACTOR_EN_TEST3) + ? play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_506)] + : play->csCtx.playerCue; + s32 var_a0 = false; + s32 pad; + s32 csMode; + + if ((play->csCtx.state == CS_STATE_IDLE) || (play->csCtx.state == CS_STATE_STOP) || + (play->csCtx.state == CS_STATE_RUN_UNSTOPPABLE)) { + if ((D_8085D384[this->unk_396] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) { + this->unk_AA5 = PLAYER_UNKAA5_5; + + if (func_80838A90(this, play)) { + this->csMode = PLAYER_CSMODE_0; + } + return; + } else { + var_a0 = true; + + if (D_8085D384[this->unk_396] != PLAYER_CSMODE_16) { + this->csMode = PLAYER_CSMODE_END; + func_800B7298(play, NULL, PLAYER_CSMODE_END); + this->unk_396 = 0; + Player_StopHorizontalMovement(this); + return; + } + } + } + + if (!var_a0 && (cue == NULL)) { + this->actor.flags &= ~ACTOR_FLAG_40; + return; + } + + if (!var_a0 && (this->unk_396 != cue->id)) { + csMode = D_8085D384[cue->id]; + + if ((csMode >= PLAYER_CSMODE_0) && (gDisablePlayerCsModeStartPos == 0)) { + if ((csMode == PLAYER_CSMODE_2) || (csMode == PLAYER_CSMODE_3)) { + Player_Cutscene_8085ABA8(this, cue); + } else { + Player_Cutscene_SetPosAndYawToStart(this, cue); + } + } + + if (csMode == PLAYER_CSMODE_108) { + this->stateFlags3 |= PLAYER_STATE3_20000000; + } else if (csMode == PLAYER_CSMODE_110) { + this->stateFlags3 &= ~PLAYER_STATE3_20000000; + } + + D_80862B6C = this->skelAnime.moveFlags; + + func_8082E794(this); + func_8085AD5C(play, this, ABS_ALT(csMode)); + func_8085AC9C(play, this, cue, &D_8085DA94[ABS_ALT(csMode)]); + + this->unk_AE8 = 0; + this->unk_AE7 = 0; + this->unk_396 = cue->id; + } + + csMode = D_8085D384[this->unk_396]; + func_8085AC9C(play, this, cue, &D_8085DEF4[ABS_ALT(csMode)]); + + if ((u16)cue->rot.x != 0) { + Math_SmoothStepToS(&this->actor.focus.rot.x, (u16)cue->rot.x, 4, 0x2710, 0); + func_80832754(this, false); + } +} + +void func_8085B08C(Player* this, PlayState* play) { + if (this->csMode != this->prevCsMode) { + D_80862B6C = this->skelAnime.moveFlags; + func_8082E794(this); + + this->prevCsMode = this->csMode; + func_8085AD5C(play, this, this->csMode); + func_8085AC9C(play, this, NULL, &D_8085DA94[this->csMode]); + } + + func_8085AC9C(play, this, NULL, &D_8085DEF4[this->csMode]); +} + +s32 Player_StartFishing(PlayState* play) { + Player* player = GET_PLAYER(play); + + func_8082DE50(play, player); + func_80831990(play, player, ITEM_FISHING_ROD); + return 1; +} + +// Player_GrabPlayerImpl? Player_GrabPlayerNoChecks? +void func_8085B170(PlayState* play, Player* this) { + func_8082DE50(play, this); + Player_SetAction(play, this, func_80853CC0, 0); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_re_dead_attack); + this->stateFlags2 |= PLAYER_STATE2_80; + func_8082DAD4(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HELD); +} + +s32 Player_GrabPlayer(PlayState* play, Player* player) { + if (!Player_InBlockingCsMode(play, player) && (player->invincibilityTimer >= 0) && !func_801240DC(player)) { + if (!(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | + PLAYER_STATE1_200000 | PLAYER_STATE1_800000))) { + if (!(player->stateFlags2 & PLAYER_STATE2_80) && !(player->stateFlags3 & PLAYER_STATE3_80)) { + func_8085B170(play, player); + return true; + } + } + } + + return false; +} + +s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { + Player* player = GET_PLAYER(play); + + if (this != NULL) { + if (csMode == PLAYER_CSMODE_0) { + return func_8084E034 == this->actionFunc; + } + + if ((this->actor.id == ACTOR_EN_TEST3) && (csMode < 0)) { + func_8083B0E4(play, this, this->actor.home.rot.y); + return false; + } + + if (this->actor.id == ACTOR_EN_TEST3) { + player = this; + } + } + + if ((player->actor.id == ACTOR_EN_TEST3) || !Player_InBlockingCsMode(play, player)) { + func_8082DE50(play, player); + Player_SetAction(play, player, func_8085B08C, 0); + player->csMode = csMode; + player->unk_398 = &this->actor; + func_8082DAD4(player); + + return true; + } + + return false; +} + +void func_8085B384(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849FE0, 1); + func_8082E438(play, this, func_8082ED20(this)); + this->currentYaw = this->actor.shape.rot.y; +} + +/** + * Returns true if Player's health reaches zero + */ +s32 Player_InflictDamage(PlayState* play, s32 damage) { + Player* player = GET_PLAYER(play); + + if ((player->stateFlags2 & PLAYER_STATE2_80) || !Player_InBlockingCsMode(play, player)) { + if (func_808339D4(play, player, damage) == 0) { + player->stateFlags2 &= ~PLAYER_STATE2_80; + return true; + } + } + + return false; +} + +// Start talking with the given actor +void Player_TalkWithPlayer(PlayState* play, Actor* actor) { + s32 pad; + Player* player = GET_PLAYER(play); + + 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)) { + actor->flags |= ACTOR_FLAG_TALK_REQUESTED; + } + + player->talkActor = actor; + player->exchangeItemId = PLAYER_IA_NONE; + player->targetedActor = actor; + + if (actor->textId == 0xFFFF) { + func_800B7298(play, actor, PLAYER_CSMODE_1); + actor->flags |= ACTOR_FLAG_TALK_REQUESTED; + func_8082DE14(play, player); + } else { + if (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) { + player->actor.textId = 0; + } else { + player->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; + player->actor.textId = actor->textId; + } + + if (player->stateFlags1 & PLAYER_STATE1_800000) { + s32 sp24 = player->unk_AE8; + + func_8082DE14(play, player); + func_80837B60(play, player); + player->unk_AE8 = sp24; + } else { + if (func_801242B4(player)) { + func_80832558(play, player, func_80837B60); + func_8082E634(play, player, &gPlayerAnim_link_swimer_swim_wait); + } else if ((actor->category != ACTORCAT_NPC) || (player->heldItemAction == PLAYER_IA_FISHING_ROD)) { + func_80837B60(play, player); + + if (!func_80123420(player)) { + if ((actor != player->tatlActor) && (actor->xzDistToPlayer < (actor->colChkInfo.cylRadius + 40))) { + func_8082DB90(play, player, &gPlayerAnim_link_normal_backspace); + } else { + Player_AnimationPlayLoop(play, player, func_8082ED20(player)); + } + } + } else { + func_80832558(play, player, func_80837B60); + func_8082DB90(play, player, + (actor->xzDistToPlayer < (actor->colChkInfo.cylRadius + 40)) + ? &gPlayerAnim_link_normal_backspace + : &gPlayerAnim_link_normal_talk_free); + } + + if (player->skelAnime.animation == &gPlayerAnim_link_normal_backspace) { + func_8082E920(play, player, ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE); + } + func_8082DAD4(player); + } + + player->stateFlags1 |= PLAYER_STATE1_40 | PLAYER_STATE1_20000000; + } + + if ((player->tatlActor == player->talkActor) && ((player->talkActor->textId & 0xFF00) != 0x200)) { + player->tatlActor->flags |= ACTOR_FLAG_TALK_REQUESTED; + } +} + +void func_8085B74C(PlayState* play) { + Player* player = GET_PLAYER(play); + f32 temp_fv1; + f32 linearVelocity = player->linearVelocity; + + if (linearVelocity < 0.0f) { + linearVelocity = -linearVelocity; + player->actor.world.rot.y += 0x8000; + } + + temp_fv1 = R_RUN_SPEED_LIMIT / 100.0f; + + if (temp_fv1 < linearVelocity) { + gSaveContext.entranceSpeed = temp_fv1; + } else { + gSaveContext.entranceSpeed = linearVelocity; + } + + func_80835324(play, player, 400.0f, + (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) ? D_80862B16 : player->actor.world.rot.y); + player->stateFlags1 |= (PLAYER_STATE1_1 | PLAYER_STATE1_20000000); +} + +void func_8085B820(PlayState* play, s16 arg1) { + Player* player = GET_PLAYER(play); + + player->actor.focus.rot.y = arg1; + func_80836D8C(player); +} + +PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId) { + PlayerItemAction itemAction = Player_ItemToItemAction(player, itemId); + + if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) && + (itemAction == GET_IA_FROM_MASK(player->currentMask))) { + itemAction = PLAYER_IA_NONE; + } + + if ((itemAction <= PLAYER_IA_NONE) || (itemAction >= PLAYER_IA_MAX)) { + return PLAYER_IA_MINUS1; + } + + player->itemAction = PLAYER_IA_NONE; + player->actionFunc = NULL; + func_80831760(play, player, func_80853A5C, 0); + player->csId = CS_ID_GLOBAL_TALK; + player->itemAction = itemAction; + Player_AnimationPlayOnce(play, player, &gPlayerAnim_link_normal_give_other); + player->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); + player->getItemDrawIdPlusOne = GID_NONE + 1; + player->exchangeItemId = itemAction; + + return itemAction; +} + +s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode) { + Player* player = GET_PLAYER(play); + + if (!(player->actor.flags & ACTOR_FLAG_TALK_REQUESTED)) { + return false; + } + + PlayerAnimation_Change(play, &player->skelAnime, (talkAnim == NULL) ? func_8082ED20(player) : talkAnim, 2.0f / 3.0f, + 0.0f, Animation_GetLastFrame(talkAnim), animMode, -6.0f); + return true; +} diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c index 8d7647bfe..46397dc19 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c @@ -58,7 +58,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rType = initParams->type; } else { switch (initParams->type) { - case 0: + case EFFSSGSPLASH_TYPE_0: this->rgPrimColorR = 255; this->rgPrimColorG = 255; this->rgPrimColorB = 255; @@ -67,9 +67,9 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rgEnvColorG = 255; this->rgEnvColorB = 255; this->rgEnvColorA = 200; - this->rType = 0; + this->rType = EFFSSGSPLASH_TYPE_0; break; - case 1: + case EFFSSGSPLASH_TYPE_1: this->rgPrimColorR = 255; this->rgPrimColorG = 255; this->rgPrimColorB = 255; @@ -78,9 +78,9 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rgEnvColorG = 255; this->rgEnvColorB = 255; this->rgEnvColorA = 255; - this->rType = 1; + this->rType = EFFSSGSPLASH_TYPE_1; break; - case 2: + case EFFSSGSPLASH_TYPE_2: this->rgPrimColorR = 255; this->rgPrimColorG = 255; this->rgPrimColorB = 255; @@ -89,7 +89,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rgEnvColorG = 255; this->rgEnvColorB = 255; this->rgEnvColorA = 200; - this->rType = 2; + this->rType = EFFSSGSPLASH_TYPE_2; break; } } @@ -100,7 +100,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { s16 texIndex; switch (this->rType) { - case 0: + case EFFSSGSPLASH_TYPE_0: texIndex = this->rgTexIndex / 100; if (texIndex > 7) { texIndex = 7; @@ -108,7 +108,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { EffectSs_DrawGEffect(play, this, waterSplashTextures[texIndex]); break; - case 1: + case EFFSSGSPLASH_TYPE_1: texIndex = this->rgTexIndex / 100; if (texIndex > 7) { texIndex = 7; @@ -116,7 +116,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { EffectSs_DrawGEffect(play, this, waterSplashTextures[texIndex]); break; - case 2: + case EFFSSGSPLASH_TYPE_2: texIndex = this->rgTexIndex / 100; if (texIndex > 7) { texIndex = 7; @@ -129,7 +129,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { void EffectSsGSplash_Update(PlayState* play, u32 index, EffectSs* this) { Vec3f newSplashPos; - if ((this->rType == 1) && (this->life == 5)) { + if ((this->rType == EFFSSGSPLASH_TYPE_1) && (this->life == 5)) { newSplashPos = this->pos; newSplashPos.y += ((this->rgScale * 20) * 0.002f); EffectSsGSplash_Spawn(play, &newSplashPos, 0, 0, 2, this->rgScale / 2); diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h index 9d3fbcd13..363db3e5a 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h +++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h @@ -3,6 +3,12 @@ #include "global.h" +typedef enum EffSsGSplashType { + /* 0 */ EFFSSGSPLASH_TYPE_0, + /* 1 */ EFFSSGSPLASH_TYPE_1, + /* 2 */ EFFSSGSPLASH_TYPE_2 +} EffSsGSplashType; + typedef struct { /* 0x00 */ Vec3f pos; /* 0x0C */ u8 type; diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py index e7b0f4d81..37ba8b45e 100755 --- a/tools/disasm/disasm.py +++ b/tools/disasm/disasm.py @@ -186,9 +186,9 @@ def proper_name(symbol, in_data=False, is_symbol=True): # bg_ikana_mirror symbol with large addend folded into %lo elif symbol == 0x80B80248: return variables_ast[0x80B801A8][0] + f" + 0x{0x80B80248 - 0x80B801A8:X}" - # player symbol with very large addend folded into %lo, since we don't know the real symbol just use the first data symbol for now + # player symbol with very large addend folded into %lo elif symbol == 0x8084D2FC: - return variables_ast[0x8085B9F0][0] + f" - 0x{0x8085B9F0 - 0x8084D2FC:X}" + return variables_ast[0x8085D0FA][0] + f" - 0x{0x8085D0FA - 0x8084D2FC:X}" # OS_K0_TO_PHYSICAL on rspS2DEX text and data symbols elif symbol == 0x001ABAB0 or symbol == 0x001E3BB0: return variables_ast[symbol + 0x80000000][0] + " - 0x80000000" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 6d9916fd7..0559d0a82 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4245,14 +4245,14 @@ 0x80828788:("KaleidoScope_UpdateOpening",), 0x8082895C:("KaleidoScope_Update",), 0x8082DA90:("func_8082DA90",), - 0x8082DABC:("func_8082DABC",), + 0x8082DABC:("Player_StopHorizontalMovement",), 0x8082DAD4:("func_8082DAD4",), 0x8082DAFC:("func_8082DAFC",), - 0x8082DB18:("func_8082DB18",), - 0x8082DB3C:("func_8082DB3C",), + 0x8082DB18:("Player_AnimationPlayOnce",), + 0x8082DB3C:("Player_AnimationPlayLoop",), 0x8082DB60:("func_8082DB60",), 0x8082DB90:("func_8082DB90",), - 0x8082DBC0:("func_8082DBC0",), + 0x8082DBC0:("Player_AnimationPlayOnceReverse",), 0x8082DC28:("func_8082DC28",), 0x8082DC38:("func_8082DC38",), 0x8082DC64:("func_8082DC64",), @@ -4262,18 +4262,18 @@ 0x8082DE50:("func_8082DE50",), 0x8082DE88:("func_8082DE88",), 0x8082DF2C:("func_8082DF2C",), - 0x8082DF48:("func_8082DF48",), - 0x8082DF8C:("func_8082DF8C",), + 0x8082DF48:("Player_RequestRumble",), + 0x8082DF8C:("Player_AnimSfx_PlayVoice",), 0x8082E00C:("func_8082E00C",), - 0x8082E078:("func_8082E078",), - 0x8082E094:("func_8082E094",), - 0x8082E0CC:("func_8082E0CC",), - 0x8082E0F4:("func_8082E0F4",), - 0x8082E12C:("func_8082E12C",), - 0x8082E188:("func_8082E188",), - 0x8082E1BC:("func_8082E1BC",), + 0x8082E078:("Player_GetFloorSfx",), + 0x8082E094:("Player_AnimSfx_PlayFloor",), + 0x8082E0CC:("Player_GetFloorSfxByAge",), + 0x8082E0F4:("Player_AnimSfx_PlayFloorByAge",), + 0x8082E12C:("Player_AnimSfx_PlayFloorWalk",), + 0x8082E188:("Player_AnimSfx_PlayFloorJump",), + 0x8082E1BC:("Player_AnimSfx_PlayFloorLand",), 0x8082E1F0:("func_8082E1F0",), - 0x8082E224:("func_8082E224",), + 0x8082E224:("Player_PlayAnimSfx",), 0x8082E438:("func_8082E438",), 0x8082E4A4:("func_8082E4A4",), 0x8082E514:("func_8082E514",), @@ -4309,22 +4309,22 @@ 0x8082EF9C:("func_8082EF9C",), 0x8082EFE4:("func_8082EFE4",), 0x8082F02C:("func_8082F02C",), - 0x8082F09C:("func_8082F09C",), - 0x8082F0E4:("func_8082F0E4",), + 0x8082F09C:("Player_ResetCylinder",), + 0x8082F0E4:("Player_SetCylinderForAttack",), 0x8082F164:("func_8082F164",), 0x8082F1AC:("func_8082F1AC",), 0x8082F43C:("func_8082F43C",), 0x8082F470:("func_8082F470",), - 0x8082F524:("func_8082F524",), + 0x8082F524:("Player_ItemToItemAction",), 0x8082F594:("func_8082F594",), 0x8082F5A4:("func_8082F5A4",), 0x8082F5C0:("func_8082F5C0",), 0x8082F5FC:("func_8082F5FC",), - 0x8082F62C:("func_8082F62C",), + 0x8082F62C:("Player_SpawnExplosive",), 0x8082F7F4:("func_8082F7F4",), 0x8082F8A0:("func_8082F8A0",), 0x8082F8BC:("func_8082F8BC",), - 0x8082F938:("func_8082F938",), + 0x8082F938:("Player_OverrideBlureColors",), 0x8082FA5C:("func_8082FA5C",), 0x8082FB68:("func_8082FB68",), 0x8082FBE8:("func_8082FBE8",), @@ -4359,7 +4359,7 @@ 0x808313A8:("func_808313A8",), 0x808313F0:("func_808313F0",), 0x80831454:("func_80831454",), - 0x80831494:("func_80831494",), + 0x80831494:("Player_SetAction",), 0x8083172C:("func_8083172C",), 0x80831760:("func_80831760",), 0x808317C4:("func_808317C4",), @@ -4420,16 +4420,16 @@ 0x808354A4:("func_808354A4",), 0x808355D8:("func_808355D8",), 0x8083562C:("func_8083562C",), - 0x80835BC8:("func_80835BC8",), + 0x80835BC8:("Player_TranslateAndRotateY",), 0x80835BF8:("func_80835BF8",), - 0x80835C64:("func_80835C64",), + 0x80835C64:("Player_SpawnFairy",), 0x80835CD8:("func_80835CD8",), 0x80835D2C:("func_80835D2C",), 0x80835D58:("func_80835D58",), 0x80835DF8:("func_80835DF8",), - 0x80835EAC:("func_80835EAC",), - 0x8083604C:("func_8083604C",), - 0x80836258:("func_80836258",), + 0x80835EAC:("Player_Door_Staircase",), + 0x8083604C:("Player_Door_Sliding",), + 0x80836258:("Player_Door_Knob",), 0x808365DC:("func_808365DC",), 0x80836888:("func_80836888",), 0x8083692C:("func_8083692C",), @@ -4442,7 +4442,7 @@ 0x80836C70:("func_80836C70",), 0x80836D8C:("func_80836D8C",), 0x80836DC0:("func_80836DC0",), - 0x80836EA0:("func_80836EA0",), + 0x80836EA0:("Player_RequestQuake",), 0x80836F10:("func_80836F10",), 0x808370D4:("func_808370D4",), 0x80837134:("func_80837134",), @@ -4464,7 +4464,7 @@ 0x808381F8:("func_808381F8",), 0x8083827C:("func_8083827C",), 0x8083868C:("func_8083868C",), - 0x80838760:("func_80838760",), + 0x80838760:("Player_StopCutscene",), 0x808387A0:("func_808387A0",), 0x80838830:("func_80838830",), 0x808388B8:("func_808388B8",), @@ -4500,11 +4500,11 @@ 0x8083A844:("func_8083A844",), 0x8083A878:("func_8083A878",), 0x8083A98C:("func_8083A98C",), - 0x8083AD04:("func_8083AD04",), - 0x8083AD8C:("func_8083AD8C",), - 0x8083ADB8:("func_8083ADB8",), + 0x8083AD04:("Player_InitMode_Telescope",), + 0x8083AD8C:("Player_InitMode_B",), + 0x8083ADB8:("Player_InitMode_D",), 0x8083ADF0:("func_8083ADF0",), - 0x8083AE38:("func_8083AE38",), + 0x8083AE38:("Player_InitMode_F",), 0x8083AECC:("func_8083AECC",), 0x8083AF30:("func_8083AF30",), 0x8083AF8C:("func_8083AF8C",), @@ -4557,7 +4557,7 @@ 0x8083E958:("func_8083E958",), 0x8083E9C4:("func_8083E9C4",), 0x8083EA44:("func_8083EA44",), - 0x8083EBD0:("func_8083EBD0",), + 0x8083EBD0:("Player_ChooseIdleAnim",), 0x8083EE60:("func_8083EE60",), 0x8083F144:("func_8083F144",), 0x8083F190:("func_8083F190",), @@ -4571,7 +4571,7 @@ 0x8083FCF0:("func_8083FCF0",), 0x8083FD80:("func_8083FD80",), 0x8083FE38:("func_8083FE38",), - 0x8083FE90:("func_8083FE90",), + 0x8083FE90:("Player_RequestQuakeAndRumble",), 0x8083FEF4:("func_8083FEF4",), 0x8083FF30:("func_8083FF30",), 0x8083FFEC:("func_8083FFEC",), @@ -4590,33 +4590,33 @@ 0x80840F34:("func_80840F34",), 0x80840F90:("func_80840F90",), 0x808411D4:("func_808411D4",), - 0x808412A0:("func_808412A0",), - 0x808412BC:("func_808412BC",), + 0x808412A0:("Player_InitMode_0",), + 0x808412BC:("Player_InitMode_2",), 0x80841358:("func_80841358",), - 0x80841408:("func_80841408",), - 0x808414E0:("func_808414E0",), - 0x80841528:("func_80841528",), - 0x808415A0:("func_808415A0",), - 0x808415E4:("func_808415E4",), - 0x80841624:("func_80841624",), + 0x80841408:("Player_InitMode_1",), + 0x808414E0:("Player_InitMode_3",), + 0x80841528:("Player_InitMode_4",), + 0x808415A0:("Player_InitMode_7",), + 0x808415E4:("Player_InitMode_5",), + 0x80841624:("Player_InitMode_6",), 0x80841744:("func_80841744",), - 0x8084182C:("func_8084182C",), + 0x8084182C:("Player_InitCommon",), 0x80841A50:("func_80841A50",), 0x80841AC4:("Player_Init",), 0x80842510:("func_80842510",), 0x808425B4:("func_808425B4",), - 0x808426F0:("func_808426F0",), + 0x808426F0:("Player_SetDoAction",), 0x808430E0:("func_808430E0",), 0x80843178:("func_80843178",), - 0x80843EC0:("func_80843EC0",), + 0x80843EC0:("Player_UpdateCamAndSeqModes",), 0x808442D8:("func_808442D8",), 0x808445C4:("func_808445C4",), - 0x808446F4:("func_808446F4",), + 0x808446F4:("Player_DetectSecrets",), 0x80844784:("func_80844784",), 0x80844D80:("func_80844D80",), - 0x80844EF8:("func_80844EF8",), + 0x80844EF8:("Player_UpdateCommon",), 0x808460B8:("Player_Update",), - 0x808463C0:("func_808463C0",), + 0x808463C0:("Player_DrawGameplay",), 0x80846460:("func_80846460",), 0x80846528:("Player_Draw",), 0x808470D4:("Player_Destroy",), @@ -4834,7 +4834,7 @@ 0x80859AF8:("func_80859AF8",), 0x80859B28:("func_80859B28",), 0x80859B54:("func_80859B54",), - 0x80859BA8:("func_80859BA8",), + 0x80859BA8:("Player_Cutscene_Translate",), 0x80859C60:("func_80859C60",), 0x80859CA0:("func_80859CA0",), 0x80859CE0:("func_80859CE0",), @@ -4845,7 +4845,7 @@ 0x80859F4C:("func_80859F4C",), 0x80859FCC:("func_80859FCC",), 0x80859FF4:("func_80859FF4",), - 0x8085A04C:("func_8085A04C",), + 0x8085A04C:("Player_Cutscene_TranslateReverse",), 0x8085A120:("func_8085A120",), 0x8085A144:("func_8085A144",), 0x8085A19C:("func_8085A19C",), @@ -4869,19 +4869,19 @@ 0x8085AA60:("func_8085AA60",), 0x8085AA84:("func_8085AA84",), 0x8085AACC:("func_8085AACC",), - 0x8085AB58:("func_8085AB58",), - 0x8085ABA8:("func_8085ABA8",), + 0x8085AB58:("Player_Cutscene_SetPosAndYawToStart",), + 0x8085ABA8:("Player_Cutscene_8085ABA8",), 0x8085AC9C:("func_8085AC9C",), 0x8085AD5C:("func_8085AD5C",), 0x8085ADA0:("func_8085ADA0",), 0x8085B08C:("func_8085B08C",), - 0x8085B134:("func_8085B134",), + 0x8085B134:("Player_StartFishing",), 0x8085B170:("func_8085B170",), - 0x8085B1F0:("func_8085B1F0",), + 0x8085B1F0:("Player_GrabPlayer",), 0x8085B28C:("func_8085B28C",), 0x8085B384:("func_8085B384",), - 0x8085B3E0:("func_8085B3E0",), - 0x8085B460:("func_8085B460",), + 0x8085B3E0:("Player_InflictDamage",), + 0x8085B460:("Player_TalkWithPlayer",), 0x8085B74C:("func_8085B74C",), 0x8085B820:("func_8085B820",), 0x8085B854:("func_8085B854",), @@ -8591,24 +8591,24 @@ 0x8099BE48:("EnCrow_OverrideLimbDraw",), 0x8099BF20:("EnCrow_PostLimbDraw",), 0x8099BFA4:("EnCrow_Draw",), - 0x8099C290:("func_8099C290",), - 0x8099C328:("func_8099C328",), - 0x8099C41C:("func_8099C41C",), + 0x8099C290:("EnCow_RotatePoint",), + 0x8099C328:("EnCow_SetColliderPos",), + 0x8099C41C:("EnCow_SetTailPos",), 0x8099C498:("EnCow_Init",), 0x8099C834:("EnCow_Destroy",), - 0x8099C880:("func_8099C880",), - 0x8099CAA8:("func_8099CAA8",), - 0x8099CB20:("func_8099CB20",), - 0x8099CB68:("func_8099CB68",), - 0x8099CBCC:("func_8099CBCC",), - 0x8099CC68:("func_8099CC68",), - 0x8099CCF8:("func_8099CCF8",), - 0x8099CDA0:("func_8099CDA0",), - 0x8099CFAC:("func_8099CFAC",), + 0x8099C880:("EnCow_UpdateAnimation",), + 0x8099CAA8:("EnCow_TalkEnd",), + 0x8099CB20:("EnCow_GiveMilkEnd",), + 0x8099CB68:("EnCow_GiveMilkWait",), + 0x8099CBCC:("EnCow_GiveMilk",), + 0x8099CC68:("EnCow_CheckForEmptyBottle",), + 0x8099CCF8:("EnCow_Talk",), + 0x8099CDA0:("EnCow_Idle",), + 0x8099CFAC:("EnCow_DoTail",), 0x8099D144:("EnCow_Update",), - 0x8099D3C0:("func_8099D3C0",), - 0x8099D4AC:("func_8099D4AC",), - 0x8099D4FC:("func_8099D4FC",), + 0x8099D3C0:("EnCow_UpdateTail",), + 0x8099D4AC:("EnCow_OverrideLimbDraw",), + 0x8099D4FC:("EnCow_PostLimbDraw",), 0x8099D53C:("EnCow_Draw",), 0x8099D59C:("func_8099D59C",), 0x8099D780:("OceffWipe4_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f40abb468..be8c6e08f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4941,52 +4941,9 @@ 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1), 0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1), 0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1), - 0x8085BA38:("D_8085BA38","UNK_TYPE1","",0x1), - 0x8085BE84:("D_8085BE84","UNK_TYPE1","",0x1), - 0x8085BE9C:("D_8085BE9C","UNK_TYPE1","",0x1), - 0x8085BEB4:("D_8085BEB4","UNK_TYPE1","",0x1), - 0x8085BECC:("D_8085BECC","UNK_TYPE1","",0x1), - 0x8085BEE4:("D_8085BEE4","UNK_TYPE1","",0x1), - 0x8085BEFC:("D_8085BEFC","UNK_TYPE1","",0x1), - 0x8085BF14:("D_8085BF14","UNK_TYPE1","",0x1), - 0x8085BF44:("D_8085BF44","UNK_TYPE1","",0x1), - 0x8085BF5C:("D_8085BF5C","UNK_TYPE1","",0x1), - 0x8085BF74:("D_8085BF74","UNK_TYPE1","",0x1), - 0x8085BF8C:("D_8085BF8C","UNK_TYPE1","",0x1), - 0x8085BFA4:("D_8085BFA4","UNK_TYPE1","",0x1), - 0x8085BFBC:("D_8085BFBC","UNK_TYPE1","",0x1), - 0x8085BFD4:("D_8085BFD4","UNK_TYPE1","",0x1), - 0x8085BFEC:("D_8085BFEC","UNK_TYPE1","",0x1), - 0x8085C004:("D_8085C004","UNK_TYPE1","",0x1), - 0x8085C01C:("D_8085C01C","UNK_TYPE1","",0x1), - 0x8085C034:("D_8085C034","UNK_TYPE1","",0x1), - 0x8085C04C:("D_8085C04C","UNK_TYPE1","",0x1), - 0x8085C064:("D_8085C064","UNK_TYPE1","",0x1), - 0x8085C07C:("D_8085C07C","UNK_TYPE1","",0x1), - 0x8085C094:("D_8085C094","UNK_TYPE1","",0x1), - 0x8085C0C4:("D_8085C0C4","UNK_TYPE1","",0x1), - 0x8085C0DC:("D_8085C0DC","UNK_TYPE1","",0x1), - 0x8085C0F4:("D_8085C0F4","UNK_TYPE1","",0x1), - 0x8085C10C:("D_8085C10C","UNK_TYPE1","",0x1), - 0x8085C124:("D_8085C124","UNK_TYPE1","",0x1), - 0x8085C13C:("D_8085C13C","UNK_TYPE1","",0x1), - 0x8085C154:("D_8085C154","UNK_TYPE1","",0x1), - 0x8085C16C:("D_8085C16C","UNK_TYPE1","",0x1), - 0x8085C184:("D_8085C184","UNK_TYPE1","",0x1), - 0x8085C19C:("D_8085C19C","UNK_TYPE1","",0x1), - 0x8085C1B4:("D_8085C1B4","UNK_TYPE1","",0x1), - 0x8085C1CC:("D_8085C1CC","UNK_TYPE1","",0x1), - 0x8085C1E4:("D_8085C1E4","UNK_TYPE1","",0x1), - 0x8085C1FC:("D_8085C1FC","UNK_TYPE1","",0x1), - 0x8085C214:("D_8085C214","UNK_TYPE1","",0x1), - 0x8085C22C:("D_8085C22C","UNK_TYPE1","",0x1), - 0x8085C244:("D_8085C244","UNK_TYPE1","",0x1), - 0x8085C25C:("D_8085C25C","UNK_TYPE1","",0x1), - 0x8085C274:("D_8085C274","UNK_TYPE1","",0x1), - 0x8085C28C:("D_8085C28C","UNK_TYPE1","",0x1), - 0x8085C2A4:("D_8085C2A4","UNK_TYPE4","",0x4), - 0x8085C2A8:("D_8085C2A8","UNK_TYPE4","",0x4), - 0x8085C2AC:("D_8085C2AC","UNK_TYPE4","",0x4), + 0x8085BA38:("sPlayerAgeProperties","UNK_TYPE1","",0x1), + 0x8085BE84:("D_8085BE84","LinkAnimationHeader*","[264]",0x420), + 0x8085C2A4:("D_8085C2A4","struct_8085C2A4","[6]",0x48), 0x8085C2EC:("D_8085C2EC","UNK_TYPE1","",0x1), 0x8085C318:("D_8085C318","UNK_TYPE1","",0x1), 0x8085C344:("D_8085C344","UNK_TYPE1","",0x1), @@ -4994,9 +4951,8 @@ 0x8085C3E4:("D_8085C3E4","f32","",0x4), 0x8085C3E8:("D_8085C3E8","f32","",0x4), 0x8085C3EC:("D_8085C3EC","UNK_TYPE2","",0x2), - 0x8085C3F4:("D_8085C3F4","UNK_TYPE1","",0x1), - 0x8085C84C:("D_8085C84C","UNK_TYPE4","",0x4), - 0x8085C850:("D_8085C850","UNK_TYPE4","",0x4), + 0x8085C3F4:("sGetItemTable","GetItemEntry","[0xB9]",0x456), + 0x8085C84C:("sPlayerIdleAnimations","UNK_TYPE4","",0x78), 0x8085C8C4:("D_8085C8C4","UNK_TYPE1","",0x1), 0x8085C8C8:("D_8085C8C8","UNK_TYPE1","",0x1), 0x8085C8CC:("D_8085C8CC","UNK_TYPE1","",0x1), @@ -5007,19 +4963,17 @@ 0x8085C90C:("D_8085C90C","UNK_TYPE1","",0x1), 0x8085C91C:("D_8085C91C","UNK_TYPE1","",0x1), 0x8085C924:("D_8085C924","UNK_TYPE1","",0x1), - 0x8085C928:("D_8085C928","UNK_TYPE1","",0x1), - 0x8085C938:("D_8085C938","UNK_TYPE1","",0x1), + 0x8085C928:("D_8085C928","UNK_TYPE1","",0x14), + 0x8085C93C:("D_8085C93C","UNK_TYPE1","",0x1), 0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1), 0x8085C98C:("D_8085C98C","UNK_TYPE1","",0x1), - 0x8085C99C:("D_8085C99C","UNK_TYPE1","",0x1), + 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1), 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4), 0x8085CB3C:("D_8085CB3C","UNK_PTR","",0x4), 0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1), - 0x8085CD00:("D_8085CD00","UNK_TYPE1","",0x1), - 0x8085CD24:("D_8085CD24","UNK_TYPE1","",0x1), - 0x8085CD30:("D_8085CD30","UNK_TYPE1","",0x1), - 0x8085CE30:("D_8085CE30","UNK_TYPE1","",0x1), - 0x8085CE60:("D_8085CE60","UNK_TYPE1","",0x1), + 0x8085CD00:("D_8085CD00","s8","[36]",0x24), + 0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1), + 0x8085CD30:("sMeleeAttackAnimInfo","UNK_TYPE1","",0x220), 0x8085CF50:("D_8085CF50","UNK_TYPE1","",0x1), 0x8085CF58:("D_8085CF58","UNK_TYPE1","",0x1), 0x8085CF60:("D_8085CF60","UNK_TYPE1","",0x1), @@ -5028,10 +4982,10 @@ 0x8085CF78:("D_8085CF78","UNK_TYPE1","",0x1), 0x8085CF80:("D_8085CF80","UNK_TYPE1","",0x1), 0x8085CF84:("D_8085CF84","UNK_TYPE1","",0x1), - 0x8085CF88:("D_8085CF88","UNK_TYPE1","",0x1), - 0x8085CFA8:("D_8085CFA8","UNK_TYPE2","",0x2), - 0x8085CFAE:("D_8085CFAE","UNK_TYPE1","",0x1), - 0x8085CFB8:("D_8085CFB8","UNK_TYPE1","",0x1), + 0x8085CF88:("D_8085CF88","BlureColors","[2]",0x20), + 0x8085CFA8:("D_8085CFA8","u16","[4]",0x8), + 0x8085CFB0:("D_8085CFB0","UNK_TYPE1","",0x1), + 0x8085CFB8:("sMagicArrowCosts","u8","[4]",0x4), 0x8085CFBC:("D_8085CFBC","UNK_TYPE1","",0x1), 0x8085CFC4:("D_8085CFC4","UNK_TYPE1","",0x1), 0x8085CFCC:("D_8085CFCC","UNK_TYPE1","",0x1), @@ -5051,47 +5005,42 @@ 0x8085D050:("D_8085D050","UNK_TYPE1","",0x1), 0x8085D054:("D_8085D054","UNK_PTR","",0x4), 0x8085D090:("D_8085D090","UNK_TYPE1","",0x1), - 0x8085D094:("D_8085D094","UNK_TYPE1","",0x1), - 0x8085D097:("D_8085D097","UNK_TYPE1","",0x1), + 0x8085D094:("D_8085D094","UNK_TYPE1","",0x6), 0x8085D09C:("D_8085D09C","UNK_TYPE4","",0x4), 0x8085D0D4:("D_8085D0D4","UNK_TYPE1","",0x1), 0x8085D0E4:("D_8085D0E4","UNK_TYPE1","",0x1), 0x8085D0F4:("D_8085D0F4","UNK_TYPE4","",0x4), - 0x8085D0F8:("D_8085D0F8","UNK_TYPE1","",0x1), + 0x8085D0F8:("sReturnEntranceGroupData","s16","[1]",0x2), + 0x8085D0FA:("sReturnEntranceGroupIndices","u8","[1]",0x1), 0x8085D100:("D_8085D100","UNK_TYPE1","",0x1), - 0x8085D10C:("D_8085D10C","f32","",0x4), - 0x8085D114:("D_8085D114","f32","",0x4), + 0x8085D10C:("D_8085D10C","Vec3f","",0xC), 0x8085D118:("D_8085D118","UNK_TYPE1","",0x1), 0x8085D124:("D_8085D124","UNK_TYPE1","",0x1), - 0x8085D130:("D_8085D130","UNK_TYPE1","",0x1), - 0x8085D134:("D_8085D134","f32","",0x4), - 0x8085D13C:("D_8085D13C","UNK_TYPE1","",0x1), + 0x8085D130:("D_8085D130","Vec3f","",0xC), + 0x8085D13C:("sFallImpactInfos","UNK_TYPE1","",0x1), 0x8085D148:("D_8085D148","UNK_TYPE1","",0x1), 0x8085D154:("D_8085D154","UNK_TYPE1","",0x1), 0x8085D160:("D_8085D160","UNK_TYPE1","",0x1), - 0x8085D174:("D_8085D174","UNK_TYPE1","",0x1), + 0x8085D174:("sPlayerMass","u8","[5]",0x5), 0x8085D17C:("D_8085D17C","UNK_TYPE1","",0x1), 0x8085D190:("D_8085D190","UNK_TYPE1","",0x1), 0x8085D1A4:("D_8085D1A4","UNK_TYPE1","",0x1), 0x8085D1F8:("D_8085D1F8","UNK_TYPE1","",0x1), 0x8085D200:("D_8085D200","UNK_TYPE4","",0x4), 0x8085D218:("D_8085D218","UNK_TYPE1","",0x1), - 0x8085D224:("D_8085D224","UNK_TYPE1","",0x1), - 0x8085D23C:("D_8085D23C","UNK_TYPE1","",0x1), - 0x8085D252:("D_8085D252","UNK_TYPE1","",0x1), + 0x8085D224:("D_8085D224","UNK_TYPE1","",0x30), + 0x8085D254:("D_8085D254","u16","[4]",0x8), 0x8085D25C:("D_8085D25C","UNK_TYPE1","",0x1), 0x8085D264:("D_8085D264","UNK_TYPE1","",0x1), 0x8085D26C:("D_8085D26C","UNK_TYPE1","",0x1), 0x8085D270:("D_8085D270","UNK_TYPE1","",0x1), - 0x8085D27C:("D_8085D27C","f32","",0x4), - 0x8085D284:("D_8085D284","f32","",0x4), - 0x8085D288:("D_8085D288","UNK_TYPE1","",0x1), - 0x8085D28C:("D_8085D28C","f32","",0x4), + 0x8085D27C:("D_8085D27C","Vec3f","",0xC), + 0x8085D288:("D_8085D288","Vec3f","",0xC), 0x8085D294:("D_8085D294","UNK_TYPE1","",0x1), 0x8085D2A4:("D_8085D2A4","UNK_TYPE1","",0x1), 0x8085D2B0:("D_8085D2B0","UNK_TYPE1","",0x1), 0x8085D2B4:("D_8085D2B4","UNK_TYPE1","",0x1), - 0x8085D2C0:("D_8085D2C0","ActorInitVar","",0x4), + 0x8085D2C0:("sInitChain","ActorInitVar","",0x4), 0x8085D2C4:("D_8085D2C4","UNK_TYPE4","",0x4), 0x8085D2CC:("D_8085D2CC","UNK_PTR","",0x4), 0x8085D30C:("D_8085D30C","EffectBlureInit2","",0x24), @@ -5101,9 +5050,7 @@ 0x8085D340:("D_8085D340","UNK_TYPE1","",0x1), 0x8085D34C:("D_8085D34C","UNK_TYPE1","",0x1), 0x8085D354:("D_8085D354","UNK_TYPE1","",0x1), - 0x8085D358:("D_8085D358","UNK_TYPE1","",0x1), - 0x8085D35C:("D_8085D35C","f32","",0x4), - 0x8085D360:("D_8085D360","f32","",0x4), + 0x8085D358:("D_8085D358","Vec3f","",0xC), 0x8085D364:("D_8085D364","UNK_TYPE1","",0x1), 0x8085D370:("D_8085D370","UNK_TYPE1","",0x1), 0x8085D37C:("D_8085D37C","UNK_TYPE1","",0x1), @@ -5113,8 +5060,8 @@ 0x8085D3F4:("D_8085D3F4","UNK_TYPE1","",0x1), 0x8085D3F8:("D_8085D3F8","UNK_TYPE1","",0x1), 0x8085D3FC:("D_8085D3FC","UNK_TYPE4","",0x4), - 0x8085D404:("D_8085D404","UNK_TYPE1","",0x1), - 0x8085D410:("D_8085D410","UNK_TYPE1","",0x1), + 0x8085D404:("sWaterConveyorSpeeds","UNK_TYPE1","",0x1), + 0x8085D410:("sFloorConveyorSpeeds","UNK_TYPE1","",0x1), 0x8085D41C:("D_8085D41C","UNK_TYPE1","",0x1), 0x8085D428:("D_8085D428","UNK_TYPE1","",0x1), 0x8085D450:("D_8085D450","UNK_TYPE1","",0x1), @@ -5132,32 +5079,28 @@ 0x8085D574:("D_8085D574","UNK_TYPE4","",0x4), 0x8085D580:("D_8085D580","UNK_TYPE1","",0x1), 0x8085D584:("D_8085D584","UNK_TYPE1","",0x1), - 0x8085D588:("D_8085D588","UNK_TYPE1","",0x1), - 0x8085D5A0:("D_8085D5A0","UNK_TYPE1","",0x1), - 0x8085D5B8:("D_8085D5B8","UNK_TYPE1","",0x1), + 0x8085D588:("D_8085D588","Vec3f","[2]",0x18), + 0x8085D5A0:("D_8085D5A0","Vec3f","[2]",0x18), + 0x8085D5B8:("D_8085D5B8","Vec3f","[2]",0x18), 0x8085D5D0:("D_8085D5D0","UNK_TYPE1","",0x1), 0x8085D5DC:("D_8085D5DC","UNK_TYPE1","",0x1), 0x8085D5E0:("D_8085D5E0","UNK_TYPE1","",0x1), 0x8085D5E4:("D_8085D5E4","UNK_TYPE1","",0x1), - 0x8085D5F0:("D_8085D5F0","UNK_TYPE1","",0x1), - 0x8085D5FA:("D_8085D5FA","UNK_TYPE1","",0x1), - 0x8085D604:("D_8085D604","UNK_TYPE1","",0x1), - 0x8085D60C:("D_8085D60C","UNK_TYPE1","",0x1), - 0x8085D61C:("D_8085D61C","UNK_TYPE1","",0x1), - 0x8085D62C:("D_8085D62C","f32","",0x4), - 0x8085D630:("D_8085D630","f32","",0x4), - 0x8085D634:("D_8085D634","f32","",0x4), - 0x8085D638:("D_8085D638","f32","",0x4), - 0x8085D640:("D_8085D640","f32","",0x4), - 0x8085D644:("D_8085D644","UNK_TYPE1","",0x1), - 0x8085D64C:("D_8085D64C","f32","",0x4), + 0x8085D5F0:("D_8085D5F0","UNK_TYPE1","",0xC), + 0x8085D5FC:("D_8085D5FC","UNK_TYPE1","",0x1), + 0x8085D604:("D_8085D604","UNK_TYPE1","",0x8), + 0x8085D60C:("D_8085D60C","UNK_TYPE1","",0x10), + 0x8085D61C:("D_8085D61C","UNK_TYPE1","",0x10), + 0x8085D62C:("D_8085D62C","Vec3f","",0xC), + 0x8085D638:("D_8085D638","Vec3f","",0xC), + 0x8085D644:("D_8085D644","Vec3f","",0xC), 0x8085D650:("D_8085D650","UNK_TYPE1","",0x1), 0x8085D658:("D_8085D658","UNK_TYPE1","",0x1), 0x8085D660:("D_8085D660","UNK_TYPE1","",0x1), 0x8085D66C:("D_8085D66C","UNK_TYPE4","",0x4), 0x8085D674:("D_8085D674","UNK_TYPE4","",0x4), - 0x8085D67C:("D_8085D67C","UNK_TYPE1","",0x1), - 0x8085D680:("D_8085D680","UNK_TYPE1","",0x1), + 0x8085D67C:("D_8085D67C","UNK_TYPE1","",0xC), + 0x8085D688:("D_8085D688","UNK_TYPE1","",0x1), 0x8085D6A4:("D_8085D6A4","UNK_TYPE1","",0x1), 0x8085D6D0:("D_8085D6D0","UNK_PTR","",0x4), 0x8085D6DC:("D_8085D6DC","UNK_TYPE1","",0x1), @@ -5168,18 +5111,16 @@ 0x8085D73C:("D_8085D73C","UNK_TYPE1","",0x1), 0x8085D74C:("D_8085D74C","UNK_TYPE1","",0x1), 0x8085D75C:("D_8085D75C","UNK_TYPE1","",0x1), - 0x8085D764:("D_8085D764","UNK_TYPE1","",0x1), - 0x8085D76D:("D_8085D76D","UNK_TYPE1","",0x1), + 0x8085D764:("D_8085D764","Vec3f","",0xC), 0x8085D770:("D_8085D770","UNK_TYPE1","",0x1), 0x8085D77C:("D_8085D77C","UNK_TYPE1","",0x1), 0x8085D788:("D_8085D788","UNK_TYPE1","",0x1), - 0x8085D78C:("D_8085D78C","UNK_TYPE1","",0x1), - 0x8085D797:("D_8085D797","UNK_TYPE1","",0x1), + 0x8085D78C:("D_8085D78C","Color_RGBA8","",0x4), + 0x8085D790:("D_8085D790","u8","[6]",0x6), 0x8085D798:("D_8085D798","UNK_TYPE2","",0x2), - 0x8085D7EC:("D_8085D7EC","UNK_TYPE1","",0x1), - 0x8085D7F8:("D_8085D7F8","UNK_TYPE1","",0x1), - 0x8085D800:("D_8085D800","f32","",0x4), - 0x8085D804:("D_8085D804","UNK_TYPE1","",0x1), + 0x8085D7EC:("D_8085D7EC","Vec3f","",0xC), + 0x8085D7F8:("D_8085D7F8","Vec3f","",0xC), + 0x8085D804:("D_8085D804","s8","[5]",0x5), 0x8085D80C:("D_8085D80C","UNK_TYPE1","",0x1), 0x8085D838:("D_8085D838","UNK_TYPE1","",0x1), 0x8085D840:("D_8085D840","UNK_TYPE1","",0x1), @@ -5189,18 +5130,14 @@ 0x8085D904:("D_8085D904","UNK_TYPE1","",0x1), 0x8085D908:("D_8085D908","UNK_TYPE1","",0x1), 0x8085D910:("D_8085D910","UNK_TYPE1","",0x1), - 0x8085D918:("D_8085D918","UNK_TYPE1","",0x1), - 0x8085D91C:("D_8085D91C","f32","",0x4), - 0x8085D924:("D_8085D924","UNK_TYPE1","",0x1), - 0x8085D928:("D_8085D928","f32","",0x4), + 0x8085D918:("D_8085D918","Vec3f","",0xC), + 0x8085D924:("D_8085D924","Vec3f","",0xC), 0x8085D930:("D_8085D930","UNK_TYPE1","",0x1), 0x8085D934:("D_8085D934","UNK_TYPE1","",0x1), 0x8085D938:("D_8085D938","UNK_TYPE4","",0x4), 0x8085D93C:("D_8085D93C","UNK_TYPE4","",0x4), - 0x8085D940:("D_8085D940","f32","",0x4), - 0x8085D948:("D_8085D948","f32","",0x4), - 0x8085D94C:("D_8085D94C","f32","",0x4), - 0x8085D954:("D_8085D954","f32","",0x4), + 0x8085D940:("D_8085D940","Vec3f","",0xC), + 0x8085D94C:("D_8085D94C","Vec3f","",0xC), 0x8085D958:("D_8085D958","UNK_TYPE1","",0x1), 0x8085D960:("D_8085D960","UNK_TYPE1","",0x1), 0x8085D96C:("D_8085D96C","UNK_TYPE1","",0x1), @@ -5444,20 +5381,18 @@ 0x8085E6EC:("D_8085E6EC","f32","",0x4), 0x8085E6F0:("D_8085E6F0","f32","",0x4), 0x8085E6F4:("D_8085E6F4","f32","",0x4), - 0x80862AF0:("D_80862AF0","UNK_TYPE1","",0x1), - 0x80862AF4:("D_80862AF4","f32","",0x4), - 0x80862AF8:("D_80862AF8","f32","",0x4), + 0x80862AF0:("sDogSpawnPos","Vec3f","",0xC), 0x80862AFC:("D_80862AFC","f32","",0x4), 0x80862B00:("D_80862B00","UNK_TYPE1","",0x1), 0x80862B02:("D_80862B02","UNK_TYPE1","",0x1), 0x80862B04:("D_80862B04","UNK_TYPE1","",0x1), - 0x80862B08:("D_80862B08","UNK_TYPE1","",0x1), - 0x80862B0C:("D_80862B0C","UNK_TYPE1","",0x1), - 0x80862B10:("D_80862B10","UNK_TYPE1","",0x1), - 0x80862B14:("D_80862B14","UNK_TYPE1","",0x1), + 0x80862B08:("sPlayerCurrentFloorType","UNK_TYPE1","",0x1), + 0x80862B0C:("sPlayerCurrentWallFlags","UNK_TYPE1","",0x1), + 0x80862B10:("sPlayerConveyorSpeedIndex","UNK_TYPE1","",0x1), + 0x80862B14:("sPlayerIsOnFloorConveyor","UNK_TYPE1","",0x1), 0x80862B16:("D_80862B16","UNK_TYPE1","",0x1), 0x80862B18:("D_80862B18","f32","",0x4), - 0x80862B1C:("D_80862B1C","UNK_TYPE1","",0x1), + 0x80862B1C:("sPlayerPrevFloorProperty","UNK_TYPE1","",0x1), 0x80862B20:("D_80862B20","UNK_TYPE1","",0x1), 0x80862B24:("D_80862B24","UNK_TYPE1","",0x1), 0x80862B28:("D_80862B28","UNK_TYPE1","",0x1), @@ -5465,7 +5400,7 @@ 0x80862B30:("D_80862B30","UNK_TYPE1","",0x1), 0x80862B3C:("D_80862B3C","f32","",0x4), 0x80862B40:("D_80862B40","UNK_TYPE1","",0x1), - 0x80862B44:("D_80862B44","UNK_TYPE1","",0x1), + 0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1), 0x80862B48:("D_80862B48","UNK_TYPE1","",0x1), 0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1), 0x80862B50:("D_80862B50","UNK_TYPE1","",0x1), diff --git a/tools/gitable.py b/tools/gitable.py new file mode 100755 index 000000000..dad39638f --- /dev/null +++ b/tools/gitable.py @@ -0,0 +1,1171 @@ +#!/usr/bin/env python3 +import argparse +from cgitb import text +import dataclasses +import os +import struct +import sys +import typing + +GETITEMENTRY_FORMAT = ">BBbBH" +GETITEMENTRY_LENGTH = struct.calcsize(GETITEMENTRY_FORMAT) + +# MM US: 0x2E964 + +itemId_names = { + 0x00: "ITEM_OCARINA", + 0x01: "ITEM_BOW", + 0x02: "ITEM_ARROW_FIRE", + 0x03: "ITEM_ARROW_ICE", + 0x04: "ITEM_ARROW_LIGHT", + 0x05: "ITEM_OCARINA_FAIRY", + 0x06: "ITEM_BOMB", + 0x07: "ITEM_BOMBCHU", + 0x08: "ITEM_STICK", + 0x09: "ITEM_NUT", + 0x0A: "ITEM_MAGIC_BEANS", + 0x0B: "ITEM_SLINGSHOT", + 0x0C: "ITEM_POWDER_KEG", + 0x0D: "ITEM_PICTO_BOX", + 0x0E: "ITEM_LENS", + 0x0F: "ITEM_HOOKSHOT", + 0x10: "ITEM_SWORD_GREAT_FAIRY", + 0x11: "ITEM_LONGSHOT", + 0x12: "ITEM_BOTTLE", + 0x13: "ITEM_POTION_RED", + 0x14: "ITEM_POTION_GREEN", + 0x15: "ITEM_POTION_BLUE", + 0x16: "ITEM_FAIRY", + 0x17: "ITEM_DEKU_PRINCESS", + 0x18: "ITEM_MILK_BOTTLE", + 0x19: "ITEM_MILK_HALF", + 0x1A: "ITEM_FISH", + 0x1B: "ITEM_BUG", + 0x1C: "ITEM_BLUE_FIRE", + 0x1D: "ITEM_POE", + 0x1E: "ITEM_BIG_POE", + 0x1F: "ITEM_SPRING_WATER", + 0x20: "ITEM_HOT_SPRING_WATER", + 0x21: "ITEM_ZORA_EGG", + 0x22: "ITEM_GOLD_DUST", + 0x23: "ITEM_MUSHROOM", + 0x24: "ITEM_SEAHORSE", + 0x25: "ITEM_CHATEAU", + 0x26: "ITEM_HYLIAN_LOACH", + 0x27: "ITEM_OBABA_DRINK", + 0x28: "ITEM_MOON_TEAR", + 0x29: "ITEM_DEED_LAND", + 0x2A: "ITEM_DEED_SWAMP", + 0x2B: "ITEM_DEED_MOUNTAIN", + 0x2C: "ITEM_DEED_OCEAN", + 0x2D: "ITEM_ROOM_KEY", + 0x2E: "ITEM_LETTER_MAMA", + 0x2F: "ITEM_LETTER_TO_KAFEI", + 0x30: "ITEM_PENDANT_OF_MEMORIES", + 0x31: "ITEM_TINGLE_MAP", + 0x32: "ITEM_MASK_DEKU", + 0x33: "ITEM_MASK_GORON", + 0x34: "ITEM_MASK_ZORA", + 0x35: "ITEM_MASK_FIERCE_DEITY", + 0x36: "ITEM_MASK_TRUTH", + 0x37: "ITEM_MASK_KAFEIS_MASK", + 0x38: "ITEM_MASK_ALL_NIGHT", + 0x39: "ITEM_MASK_BUNNY", + 0x3A: "ITEM_MASK_KEATON", + 0x3B: "ITEM_MASK_GARO", + 0x3C: "ITEM_MASK_ROMANI", + 0x3D: "ITEM_MASK_CIRCUS_LEADER", + 0x3E: "ITEM_MASK_POSTMAN", + 0x3F: "ITEM_MASK_COUPLE", + 0x40: "ITEM_MASK_GREAT_FAIRY", + 0x41: "ITEM_MASK_GIBDO", + 0x42: "ITEM_MASK_DON_GERO", + 0x43: "ITEM_MASK_KAMARO", + 0x44: "ITEM_MASK_CAPTAIN", + 0x45: "ITEM_MASK_STONE", + 0x46: "ITEM_MASK_BREMEN", + 0x47: "ITEM_MASK_BLAST", + 0x48: "ITEM_MASK_SCENTS", + 0x49: "ITEM_MASK_GIANT", + 0x4A: "ITEM_BOW_ARROW_FIRE", + 0x4B: "ITEM_BOW_ARROW_ICE", + 0x4C: "ITEM_BOW_ARROW_LIGHT", + 0x4D: "ITEM_SWORD_KOKIRI", + 0x4E: "ITEM_SWORD_RAZOR", + 0x4F: "ITEM_SWORD_GILDED", + 0x50: "ITEM_SWORD_DEITY", + 0x51: "ITEM_SHIELD_HERO", + 0x52: "ITEM_SHIELD_MIRROR", + 0x53: "ITEM_QUIVER_30", + 0x54: "ITEM_QUIVER_40", + 0x55: "ITEM_QUIVER_50", + 0x56: "ITEM_BOMB_BAG_20", + 0x57: "ITEM_BOMB_BAG_30", + 0x58: "ITEM_BOMB_BAG_40", + 0x59: "ITEM_WALLET_DEFAULT", + 0x5A: "ITEM_WALLET_ADULT", + 0x5B: "ITEM_WALLET_GIANT", + 0x5C: "ITEM_FISHING_POLE", + 0x5D: "ITEM_REMAINS_ODOLWA", + 0x5E: "ITEM_REMAINS_GOHT", + 0x5F: "ITEM_REMAINS_GYORG", + 0x60: "ITEM_REMAINS_TWINMOLD", + 0x61: "ITEM_SONG_SONATA", + 0x62: "ITEM_SONG_LULLABY", + 0x63: "ITEM_SONG_NOVA", + 0x64: "ITEM_SONG_ELEGY", + 0x65: "ITEM_SONG_OATH", + 0x66: "ITEM_SONG_SARIA", + 0x67: "ITEM_SONG_TIME", + 0x68: "ITEM_SONG_HEALING", + 0x69: "ITEM_SONG_EPONA", + 0x6A: "ITEM_SONG_SOARING", + 0x6B: "ITEM_SONG_STORMS", + 0x6C: "ITEM_SONG_SUN", + 0x6D: "ITEM_BOMBERS_NOTEBOOK", + 0x6E: "ITEM_SKULL_TOKEN", + 0x6F: "ITEM_HEART_CONTAINER", + 0x70: "ITEM_HEART_PIECE", + 0x73: "ITEM_SONG_LULLABY_INTRO" , + 0x74: "ITEM_KEY_BOSS", + 0x75: "ITEM_COMPASS", + 0x76: "ITEM_DUNGEON_MAP", + 0x77: "ITEM_STRAY_FAIRIES", + 0x78: "ITEM_KEY_SMALL", + 0x79: "ITEM_MAGIC_SMALL", + 0x7A: "ITEM_MAGIC_LARGE", + 0x7B: "ITEM_HEART_PIECE_2", + 0x7C: "ITEM_INVALID_1", + 0x7D: "ITEM_INVALID_2", + 0x7E: "ITEM_INVALID_3", + 0x7F: "ITEM_INVALID_4", + 0x80: "ITEM_INVALID_5", + 0x81: "ITEM_INVALID_6", + 0x82: "ITEM_INVALID_7", + 0x83: "ITEM_RECOVERY_HEART", + 0x84: "ITEM_RUPEE_GREEN", + 0x85: "ITEM_RUPEE_BLUE", + 0x86: "ITEM_RUPEE_10", + 0x87: "ITEM_RUPEE_RED", + 0x88: "ITEM_RUPEE_PURPLE", + 0x89: "ITEM_RUPEE_SILVER", + 0x8A: "ITEM_RUPEE_HUGE", + 0x8B: "ITEM_STICKS_5", + 0x8C: "ITEM_STICKS_10", + 0x8D: "ITEM_NUTS_5", + 0x8E: "ITEM_NUTS_10", + 0x8F: "ITEM_BOMBS_5", + 0x90: "ITEM_BOMBS_10", + 0x91: "ITEM_BOMBS_20", + 0x92: "ITEM_BOMBS_30", + 0x93: "ITEM_ARROWS_10", + 0x94: "ITEM_ARROWS_30", + 0x95: "ITEM_ARROWS_40", + 0x96: "ITEM_ARROWS_50", + 0x97: "ITEM_BOMBCHUS_20", + 0x98: "ITEM_BOMBCHUS_10", + 0x99: "ITEM_BOMBCHUS_1", + 0x9A: "ITEM_BOMBCHUS_5", + 0x9B: "ITEM_STICK_UPGRADE_20", + 0x9C: "ITEM_STICK_UPGRADE_30", + 0x9D: "ITEM_NUT_UPGRADE_30", + 0x9E: "ITEM_NUT_UPGRADE_40", + 0x9F: "ITEM_CHATEAU_2", + 0xA0: "ITEM_MILK", + 0xA1: "ITEM_GOLD_DUST_2", + 0xA2: "ITEM_HYLIAN_LOACH_2", + 0xA3: "ITEM_SEAHORSE_CAUGHT", + 0xF0: "ITEM_F0" , + 0xF1: "ITEM_F1", + 0xF2: "ITEM_F2", + 0xFC: "ITEM_FC" , + 0xFD: "ITEM_FD", + 0xFE: "ITEM_FE", + 0xFF: "ITEM_NONE", +} + +getItemId_names = { + 0x00: "GI_NONE", + 0x01: "GI_RUPEE_GREEN", + 0x02: "GI_RUPEE_BLUE", + 0x03: "GI_RUPEE_10", + 0x04: "GI_RUPEE_RED", + 0x05: "GI_RUPEE_PURPLE", + 0x06: "GI_RUPEE_SILVER", + 0x07: "GI_RUPEE_HUGE", + 0x08: "GI_WALLET_ADULT", + 0x09: "GI_WALLET_GIANT", + 0x0A: "GI_RECOVERY_HEART", + 0x0C: "GI_HEART_PIECE", + 0x0D: "GI_HEART_CONTAINER", + 0x0E: "GI_MAGIC_SMALL", + 0x0F: "GI_MAGIC_LARGE", + 0x11: "GI_STRAY_FAIRY", + 0x14: "GI_BOMBS_1", + 0x15: "GI_BOMBS_5", + 0x16: "GI_BOMBS_10", + 0x17: "GI_BOMBS_20", + 0x18: "GI_BOMBS_30", + 0x19: "GI_STICKS_1", + 0x1A: "GI_BOMBCHUS_10", + 0x1B: "GI_BOMB_BAG_20", + 0x1C: "GI_BOMB_BAG_30", + 0x1D: "GI_BOMB_BAG_40", + 0x1E: "GI_ARROWS_10", + 0x1F: "GI_ARROWS_30", + 0x20: "GI_ARROWS_40", + 0x21: "GI_ARROWS_50", + 0x22: "GI_QUIVER_30", + 0x23: "GI_QUIVER_40", + 0x24: "GI_QUIVER_50", + 0x25: "GI_ARROW_FIRE", + 0x26: "GI_ARROW_ICE", + 0x27: "GI_ARROW_LIGHT", + 0x28: "GI_NUTS_1", + 0x29: "GI_NUTS_5", + 0x2A: "GI_NUTS_10", + 0x2E: "GI_BOMBCHUS_20", + 0x32: "GI_SHIELD_HERO", + 0x33: "GI_SHIELD_MIRROR", + 0x34: "GI_POWDER_KEG", + 0x35: "GI_MAGIC_BEANS", + 0x36: "GI_BOMBCHUS_1", + 0x37: "GI_SWORD_KOKIRI", + 0x38: "GI_SWORD_RAZOR", + 0x39: "GI_SWORD_GILDED", + 0x3A: "GI_BOMBCHUS_5", + 0x3B: "GI_SWORD_GREAT_FAIRY", + 0x3C: "GI_KEY_SMALL", + 0x3D: "GI_KEY_BOSS", + 0x3E: "GI_MAP", + 0x3F: "GI_COMPASS", + 0x40: "GI_40", + 0x41: "GI_HOOKSHOT", + 0x42: "GI_LENS", + 0x43: "GI_PICTO_BOX", + 0x4C: "GI_OCARINA", + 0x50: "GI_BOMBERS_NOTEBOOK", + 0x52: "GI_SKULL_TOKEN", + 0x55: "GI_REMAINS_ODOLWA", + 0x56: "GI_REMAINS_GOHT", + 0x57: "GI_REMAINS_GYORG", + 0x58: "GI_REMAINS_TWINMOLD", + 0x59: "GI_POTION_RED_BOTTLE", + 0x5A: "GI_BOTTLE", + 0x5B: "GI_POTION_RED", + 0x5C: "GI_POTION_GREEN", + 0x5D: "GI_POTION_BLUE", + 0x5E: "GI_FAIRY", + 0x5F: "GI_DEKU_PRINCESS", + 0x60: "GI_MILK_BOTTLE", + 0x61: "GI_MILK_HALF", + 0x62: "GI_FISH", + 0x63: "GI_BUG", + 0x64: "GI_BLUE_FIRE", + 0x65: "GI_POE", + 0x66: "GI_BIG_POE", + 0x67: "GI_SPRING_WATER", + 0x68: "GI_HOT_SPRING_WATER", + 0x69: "GI_ZORA_EGG", + 0x6A: "GI_GOLD_DUST", + 0x6B: "GI_MUSHROOM", + 0x6C: "GI_6C", + 0x6D: "GI_6D", + 0x6E: "GI_SEAHORSE", + 0x6F: "GI_CHATEAU_BOTTLE", + 0x70: "GI_70", + 0x75: "GI_75", + 0x76: "GI_ICE_TRAP", + 0x78: "GI_MASK_DEKU", + 0x79: "GI_MASK_GORON", + 0x7A: "GI_MASK_ZORA", + 0x7B: "GI_MASK_FIERCE_DEITY", + 0x7C: "GI_MASK_CAPTAIN", + 0x7D: "GI_MASK_GIANT", + 0x7E: "GI_MASK_ALL_NIGHT", + 0x7F: "GI_MASK_BUNNY", + 0x80: "GI_MASK_KEATON", + 0x81: "GI_MASK_GARO", + 0x82: "GI_MASK_ROMANI", + 0x83: "GI_MASK_CIRCUS_LEADER", + 0x84: "GI_MASK_POSTMAN", + 0x85: "GI_MASK_COUPLE", + 0x86: "GI_MASK_GREAT_FAIRY", + 0x87: "GI_MASK_GIBDO", + 0x88: "GI_MASK_DON_GERO", + 0x89: "GI_MASK_KAMARO", + 0x8A: "GI_MASK_TRUTH", + 0x8B: "GI_MASK_STONE", + 0x8C: "GI_MASK_BREMEN", + 0x8D: "GI_MASK_BLAST", + 0x8E: "GI_MASK_SCENTS", + 0x8F: "GI_MASK_KAFEIS_MASK", + 0x91: "GI_CHATEAU", + 0x92: "GI_MILK", + 0x93: "GI_GOLD_DUST_2", + 0x94: "GI_HYLIAN_LOACH", + 0x95: "GI_SEAHORSE_CAUGHT", + 0x96: "GI_MOON_TEAR", + 0x97: "GI_DEED_LAND", + 0x98: "GI_DEED_SWAMP", + 0x99: "GI_DEED_MOUNTAIN", + 0x9A: "GI_DEED_OCEAN", + 0x9B: "GI_SWORD_GREAT_FAIRY_STOLEN", + 0x9C: "GI_SWORD_KOKIRI_STOLEN", + 0x9D: "GI_SWORD_RAZOR_STOLEN", + 0x9E: "GI_SWORD_GILDED_STOLEN", + 0x9F: "GI_SHIELD_HERO_STOLEN", + 0xA0: "GI_ROOM_KEY", + 0xA1: "GI_LETTER_TO_MAMA", + 0xA2: "GI_A2", + 0xA3: "GI_A3", + 0xA4: "GI_A4", + 0xA5: "GI_A5", + 0xA6: "GI_A6", + 0xA7: "GI_A7", + 0xA8: "GI_A8", + 0xA9: "GI_BOTTLE_STOLEN", + 0xAA: "GI_LETTER_TO_KAFEI", + 0xAB: "GI_PENDANT_OF_MEMORIES", + 0xB4: "GI_TINGLE_MAP_CLOCK_TOWN", + 0xB5: "GI_TINGLE_MAP_WOODFALL", + 0xB6: "GI_TINGLE_MAP_SNOWHEAD", + 0xB7: "GI_TINGLE_MAP_ROMANI_RANCH", + 0xB8: "GI_TINGLE_MAP_GREAT_BAY", + 0xB9: "GI_TINGLE_MAP_STONE_TOWER", + 0xBA: "GI_MAX" # I pity the fool +} + +getItemDrawId_names = { + 0x00: "GID_BOTTLE", + 0x01: "GID_KEY_SMALL", + 0x02: "GID_MASK_KAMARO", + 0x03: "GID_MASK_COUPLE", + 0x04: "GID_04", + 0x05: "GID_05", + 0x06: "GID_06", + 0x07: "GID_07", + 0x08: "GID_RECOVERY_HEART", + 0x09: "GID_KEY_BOSS", + 0x0A: "GID_COMPASS", + 0x0B: "GID_BOMBERS_NOTEBOOK", + 0x0C: "GID_MASK_STONE", + 0x0D: "GID_MASK_KAFEIS_MASK", + 0x0E: "GID_MASK_CIRCUS_LEADER", + 0x0F: "GID_MASK_BREMEN", + 0x10: "GID_MASK_ALL_NIGHT", + 0x11: "GID_NUTS", + 0x12: "GID_HEART_CONTAINER", + 0x13: "GID_HEART_PIECE", + 0x14: "GID_QUIVER_30", + 0x15: "GID_QUIVER_40", + 0x16: "GID_QUIVER_50", + 0x17: "GID_BOMB_BAG_20", + 0x18: "GID_BOMB_BAG_30", + 0x19: "GID_BOMB_BAG_40", + 0x1A: "GID_STICK", + 0x1B: "GID_DUNGEON_MAP", + 0x1C: "GID_MAGIC_SMALL", + 0x1D: "GID_MAGIC_LARGE", + 0x1E: "GID_BOMB", + 0x1F: "GID_STONE_OF_AGONY", + 0x20: "GID_WALLET_ADULT", + 0x21: "GID_WALLET_GIANT", + 0x22: "GID_MASK_DON_GERO", + 0x23: "GID_ARROWS_SMALL", + 0x24: "GID_ARROWS_MEDIUM", + 0x25: "GID_ARROWS_LARGE", + 0x26: "GID_BOMBCHU", + 0x27: "GID_SHIELD_HERO", + 0x28: "GID_HOOKSHOT", + 0x29: "GID_29", + 0x2A: "GID_OCARINA", + 0x2B: "GID_MILK", + 0x2C: "GID_MASK_KEATON", + 0x2D: "GID_TINGLE_MAP", + 0x2E: "GID_BOW", + 0x2F: "GID_LENS", + 0x30: "GID_POTION_GREEN", + 0x31: "GID_POTION_RED", + 0x32: "GID_POTION_BLUE", + 0x33: "GID_SHIELD_MIRROR", + 0x34: "GID_MAGIC_BEANS", + 0x35: "GID_FISH", + 0x36: "GID_LETTER_MAMA", + 0x37: "GID_37", + 0x38: "GID_SWORD_BGS", + 0x39: "GID_MASK_SUN", + 0x3A: "GID_MASK_BLAST", + 0x3B: "GID_FAIRY", + 0x3C: "GID_MASK_SCENTS", + 0x3D: "GID_MASK_CAPTAIN", + 0x3E: "GID_MASK_BUNNY", + 0x3F: "GID_MASK_TRUTH", + 0x40: "GID_DEED_SWAMP", + 0x41: "GID_DEED_MOUNTAIN", + 0x42: "GID_RUPEE_HUGE", + 0x43: "GID_DEED_OCEAN", + 0x44: "GID_MASK_GORON", + 0x45: "GID_MASK_ZORA", + 0x46: "GID_46", + 0x47: "GID_ARROW_FIRE", + 0x48: "GID_ARROW_ICE", + 0x49: "GID_ARROW_LIGHT", + 0x4A: "GID_SKULL_TOKEN", + 0x4B: "GID_BUG", + 0x4C: "GID_4C", + 0x4D: "GID_POE", + 0x4E: "GID_FAIRY_2", + 0x4F: "GID_RUPEE_GREEN", + 0x50: "GID_RUPEE_BLUE", + 0x51: "GID_RUPEE_RED", + 0x52: "GID_BIG_POE", + 0x53: "GID_RUPEE_PURPLE", + 0x54: "GID_RUPEE_SILVER", + 0x55: "GID_SWORD_KOKIRI", + 0x56: "GID_SKULL_TOKEN_2", + 0x57: "GID_57", + 0x58: "GID_ZORA_EGG", + 0x59: "GID_MOON_TEAR", + 0x5A: "GID_DEED_LAND", + 0x5B: "GID_MASK_DEKU", + 0x5C: "GID_REMAINS_ODOLWA", + 0x5D: "GID_POWDER_KEG", + 0x5E: "GID_GOLD_DUST", + 0x5F: "GID_SEAHORSE", + 0x60: "GID_60", + 0x61: "GID_HYLIAN_LOACH", + 0x62: "GID_SEAHORSE_CAUGHT", + 0x63: "GID_REMAINS_GOHT", + 0x64: "GID_REMAINS_GYORG", + 0x65: "GID_REMAINS_TWINMOLD", + 0x66: "GID_SWORD_RAZOR", + 0x67: "GID_SWORD_GILDED", + 0x68: "GID_SWORD_GREAT_FAIRY", + 0x69: "GID_MASK_GARO", + 0x6A: "GID_MASK_GREAT_FAIRY", + 0x6B: "GID_MASK_GIBDO", + 0x6C: "GID_ROOM_KEY", + 0x6D: "GID_LETTER_TO_KAFEI", + 0x6E: "GID_PENDANT_OF_MEMORIES", + 0x6F: "GID_MUSHROOM", + 0x70: "GID_MASK_ROMANI", + 0x71: "GID_MASK_POSTMAN", + 0x72: "GID_MASK_GIANT", + 0x73: "GID_CHATEAU", + 0x74: "GID_PICTO_BOX", + 0x75: "GID_MASK_FIERCE_DEITY", + 0x76: "GID_MAX", + -1: "GID_NONE", +} + +objectId_names = { + 0x000: "OBJECT_UNSET_0", + 0x001: "GAMEPLAY_KEEP", + 0x002: "GAMEPLAY_FIELD_KEEP", + 0x003: "GAMEPLAY_DANGEON_KEEP", + 0x004: "OBJECT_NB", + 0x005: "OBJECT_OKUTA", + 0x006: "OBJECT_CROW", + 0x007: "OBJECT_AH", + 0x008: "OBJECT_DY_OBJ", + 0x009: "OBJECT_WALLMASTER", + 0x00A: "OBJECT_DODONGO", + 0x00B: "OBJECT_FIREFLY", + 0x00C: "OBJECT_BOX", + 0x00D: "OBJECT_AL", + 0x00E: "OBJECT_BUBBLE", + 0x00F: "OBJECT_NIW", + 0x010: "OBJECT_LINK_BOY", + 0x011: "OBJECT_LINK_CHILD", + 0x012: "OBJECT_TITE", + 0x013: "OBJECT_TAB", + 0x014: "OBJECT_PH", + 0x015: "OBJECT_AND", + 0x016: "OBJECT_MSMO", + 0x017: "OBJECT_DINOFOS", + 0x018: "OBJECT_DRS", + 0x019: "OBJECT_ZL1", + 0x01A: "OBJECT_AN4", + 0x01B: "OBJECT_UNSET_1B", + 0x01C: "OBJECT_TEST3", + 0x01D: "OBJECT_FAMOS", + 0x01E: "OBJECT_UNSET_1E", + 0x01F: "OBJECT_UNSET_1F", + 0x020: "OBJECT_ST", + 0x021: "OBJECT_UNSET_21", + 0x022: "OBJECT_THIEFBIRD", + 0x023: "OBJECT_UNSET_23", + 0x024: "OBJECT_UNSET_24", + 0x025: "OBJECT_UNSET_25", + 0x026: "OBJECT_UNSET_26", + 0x027: "OBJECT_UNSET_27", + 0x028: "OBJECT_UNSET_28", + 0x029: "OBJECT_UNSET_29", + 0x02A: "OBJECT_BOMBF", + 0x02B: "OBJECT_UNSET_2B", + 0x02C: "OBJECT_UNSET_2C", + 0x02D: "OBJECT_UNSET_2D", + 0x02E: "OBJECT_UNSET_2E", + 0x02F: "OBJECT_UNSET_2F", + 0x030: "OBJECT_AM", + 0x031: "OBJECT_DEKUBABA", + 0x032: "OBJECT_UNSET_32", + 0x033: "OBJECT_UNSET_33", + 0x034: "OBJECT_UNSET_34", + 0x035: "OBJECT_UNSET_35", + 0x036: "OBJECT_UNSET_36", + 0x037: "OBJECT_UNSET_37", + 0x038: "OBJECT_UNSET_38", + 0x039: "OBJECT_UNSET_39", + 0x03A: "OBJECT_UNSET_3A", + 0x03B: "OBJECT_UNSET_3B", + 0x03C: "OBJECT_UNSET_3C", + 0x03D: "OBJECT_UNSET_3D", + 0x03E: "OBJECT_WARP1", + 0x03F: "OBJECT_B_HEART", + 0x040: "OBJECT_DEKUNUTS", + 0x041: "OBJECT_UNSET_41", + 0x042: "OBJECT_UNSET_42", + 0x043: "OBJECT_UNSET_43", + 0x044: "OBJECT_UNSET_44", + 0x045: "OBJECT_UNSET_45", + 0x046: "OBJECT_UNSET_46", + 0x047: "OBJECT_UNSET_47", + 0x048: "OBJECT_UNSET_48", + 0x049: "OBJECT_UNSET_49", + 0x04A: "OBJECT_UNSET_4A", + 0x04B: "OBJECT_UNSET_4B", + 0x04C: "OBJECT_UNSET_4C", + 0x04D: "OBJECT_UNSET_4D", + 0x04E: "OBJECT_UNSET_4E", + 0x04F: "OBJECT_UNSET_4F", + 0x050: "OBJECT_UNSET_50", + 0x051: "OBJECT_BB", + 0x052: "OBJECT_DEATH", + 0x053: "OBJECT_UNSET_53", + 0x054: "OBJECT_UNSET_54", + 0x055: "OBJECT_UNSET_55", + 0x056: "OBJECT_UNSET_56", + 0x057: "OBJECT_UNSET_57", + 0x058: "OBJECT_UNSET_58", + 0x059: "OBJECT_UNSET_59", + 0x05A: "OBJECT_UNSET_5A", + 0x05B: "OBJECT_UNSET_5B", + 0x05C: "OBJECT_F40_OBJ", + 0x05D: "OBJECT_PO_COMPOSER", + 0x05E: "OBJECT_UNSET_5E", + 0x05F: "OBJECT_HATA", + 0x060: "OBJECT_UNSET_60", + 0x061: "OBJECT_WOOD02", + 0x062: "OBJECT_UNSET_62", + 0x063: "OBJECT_UNSET_63", + 0x064: "OBJECT_TRAP", + 0x065: "OBJECT_UNSET_65", + 0x066: "OBJECT_UNSET_66", + 0x067: "OBJECT_UNSET_67", + 0x068: "OBJECT_UNSET_68", + 0x069: "OBJECT_UNSET_69", + 0x06A: "OBJECT_VM", + 0x06B: "OBJECT_UNSET_6B", + 0x06C: "OBJECT_UNSET_6C", + 0x06D: "OBJECT_UNSET_6D", + 0x06E: "OBJECT_UNSET_6E", + 0x06F: "OBJECT_UNSET_6F", + 0x070: "OBJECT_EFC_STAR_FIELD", + 0x071: "OBJECT_UNSET_71", + 0x072: "OBJECT_UNSET_72", + 0x073: "OBJECT_UNSET_73", + 0x074: "OBJECT_UNSET_74", + 0x075: "OBJECT_RD", + 0x076: "OBJECT_YUKIMURA_OBJ", + 0x077: "OBJECT_HEAVY_OBJECT", + 0x078: "OBJECT_UNSET_78", + 0x079: "OBJECT_UNSET_79", + 0x07A: "OBJECT_UNSET_7A", + 0x07B: "OBJECT_UNSET_7B", + 0x07C: "OBJECT_UNSET_7C", + 0x07D: "OBJECT_HORSE_LINK_CHILD", + 0x07E: "OBJECT_UNSET_7E", + 0x07F: "OBJECT_UNSET_7F", + 0x080: "OBJECT_SYOKUDAI", + 0x081: "OBJECT_UNSET_81", + 0x082: "OBJECT_UNSET_82", + 0x083: "OBJECT_UNSET_83", + 0x084: "OBJECT_EFC_TW", + 0x085: "OBJECT_UNSET_85", + 0x086: "OBJECT_GI_KEY", + 0x087: "OBJECT_MIR_RAY", + 0x088: "OBJECT_CTOWER_ROT", + 0x089: "OBJECT_UNSET_89", + 0x08A: "OBJECT_BDOOR", + 0x08B: "OBJECT_UNSET_8B", + 0x08C: "OBJECT_UNSET_8C", + 0x08D: "OBJECT_UNSET_8D", + 0x08E: "OBJECT_SB", + 0x08F: "OBJECT_GI_MELODY", + 0x090: "OBJECT_GI_HEART", + 0x091: "OBJECT_GI_COMPASS", + 0x092: "OBJECT_GI_BOSSKEY", + 0x093: "OBJECT_UNSET_93", + 0x094: "OBJECT_GI_NUTS", + 0x095: "OBJECT_UNSET_95", + 0x096: "OBJECT_GI_HEARTS", + 0x097: "OBJECT_GI_ARROWCASE", + 0x098: "OBJECT_GI_BOMBPOUCH", + 0x099: "OBJECT_IN", + 0x09A: "OBJECT_UNSET_9A", + 0x09B: "OBJECT_UNSET_9B", + 0x09C: "OBJECT_UNSET_9C", + 0x09D: "OBJECT_OS_ANIME", + 0x09E: "OBJECT_GI_BOTTLE", + 0x09F: "OBJECT_GI_STICK", + 0x0A0: "OBJECT_GI_MAP", + 0x0A1: "OBJECT_OF1D_MAP", + 0x0A2: "OBJECT_RU2", + 0x0A3: "OBJECT_UNSET_A3", + 0x0A4: "OBJECT_GI_MAGICPOT", + 0x0A5: "OBJECT_GI_BOMB_1", + 0x0A6: "OBJECT_UNSET_A6", + 0x0A7: "OBJECT_MA2", + 0x0A8: "OBJECT_GI_PURSE", + 0x0A9: "OBJECT_UNSET_A9", + 0x0AA: "OBJECT_UNSET_AA", + 0x0AB: "OBJECT_RR", + 0x0AC: "OBJECT_UNSET_AC", + 0x0AD: "OBJECT_UNSET_AD", + 0x0AE: "OBJECT_UNSET_AE", + 0x0AF: "OBJECT_GI_ARROW", + 0x0B0: "OBJECT_GI_BOMB_2", + 0x0B1: "OBJECT_UNSET_B1", + 0x0B2: "OBJECT_UNSET_B2", + 0x0B3: "OBJECT_GI_SHIELD_2", + 0x0B4: "OBJECT_GI_HOOKSHOT", + 0x0B5: "OBJECT_GI_OCARINA", + 0x0B6: "OBJECT_GI_MILK", + 0x0B7: "OBJECT_MA1", + 0x0B8: "OBJECT_UNSET_B8", + 0x0B9: "OBJECT_UNSET_B9", + 0x0BA: "OBJECT_UNSET_BA", + 0x0BB: "OBJECT_NY", + 0x0BC: "OBJECT_FR", + 0x0BD: "OBJECT_UNSET_BD", + 0x0BE: "OBJECT_UNSET_BE", + 0x0BF: "OBJECT_GI_BOW", + 0x0C0: "OBJECT_GI_GLASSES", + 0x0C1: "OBJECT_GI_LIQUID", + 0x0C2: "OBJECT_ANI", + 0x0C3: "OBJECT_GI_SHIELD_3", + 0x0C4: "OBJECT_UNSET_C4", + 0x0C5: "OBJECT_UNSET_C5", + 0x0C6: "OBJECT_GI_BEAN", + 0x0C7: "OBJECT_GI_FISH", + 0x0C8: "OBJECT_UNSET_C8", + 0x0C9: "OBJECT_UNSET_C9", + 0x0CA: "OBJECT_UNSET_CA", + 0x0CB: "OBJECT_GI_LONGSWORD", + 0x0CC: "OBJECT_UNSET_CC", + 0x0CD: "OBJECT_UNSET_CD", + 0x0CE: "OBJECT_UNSET_CE", + 0x0CF: "OBJECT_UNSET_CF", + 0x0D0: "OBJECT_ZO", + 0x0D1: "OBJECT_UNSET_D1", + 0x0D2: "OBJECT_UMAJUMP", + 0x0D3: "OBJECT_UNSET_D3", + 0x0D4: "OBJECT_UNSET_D4", + 0x0D5: "OBJECT_MASTERGOLON", + 0x0D6: "OBJECT_MASTERZOORA", + 0x0D7: "OBJECT_AOB", + 0x0D8: "OBJECT_IK", + 0x0D9: "OBJECT_AHG", + 0x0DA: "OBJECT_CNE", + 0x0DB: "OBJECT_UNSET_DB", + 0x0DC: "OBJECT_UNSET_DC", + 0x0DD: "OBJECT_AN3", + 0x0DE: "OBJECT_BJI", + 0x0DF: "OBJECT_BBA", + 0x0E0: "OBJECT_AN2", + 0x0E1: "OBJECT_UNSET_E1", + 0x0E2: "OBJECT_AN1", + 0x0E3: "OBJECT_BOJ", + 0x0E4: "OBJECT_FZ", + 0x0E5: "OBJECT_BOB", + 0x0E6: "OBJECT_GE1", + 0x0E7: "OBJECT_YABUSAME_POINT", + 0x0E8: "OBJECT_UNSET_E8", + 0x0E9: "OBJECT_UNSET_E9", + 0x0EA: "OBJECT_UNSET_EA", + 0x0EB: "OBJECT_UNSET_EB", + 0x0EC: "OBJECT_D_HSBLOCK", + 0x0ED: "OBJECT_D_LIFT", + 0x0EE: "OBJECT_MAMENOKI", + 0x0EF: "OBJECT_GOROIWA", + 0x0F0: "OBJECT_TORYO", + 0x0F1: "OBJECT_DAIKU", + 0x0F2: "OBJECT_NWC", + 0x0F3: "OBJECT_GM", + 0x0F4: "OBJECT_MS", + 0x0F5: "OBJECT_HS", + 0x0F6: "OBJECT_UNSET_F6", + 0x0F7: "OBJECT_LIGHTSWITCH", + 0x0F8: "OBJECT_KUSA", + 0x0F9: "OBJECT_TSUBO", + 0x0FA: "OBJECT_UNSET_FA", + 0x0FB: "OBJECT_UNSET_FB", + 0x0FC: "OBJECT_KANBAN", + 0x0FD: "OBJECT_OWL", + 0x0FE: "OBJECT_MK", + 0x0FF: "OBJECT_FU", + 0x100: "OBJECT_GI_KI_TAN_MASK", + 0x101: "OBJECT_UNSET_101", + 0x102: "OBJECT_GI_MASK18", + 0x103: "OBJECT_GI_RABIT_MASK", + 0x104: "OBJECT_GI_TRUTH_MASK", + 0x105: "OBJECT_UNSET_105", + 0x106: "OBJECT_STREAM", + 0x107: "OBJECT_MM", + 0x108: "OBJECT_UNSET_108", + 0x109: "OBJECT_UNSET_109", + 0x10A: "OBJECT_UNSET_10A", + 0x10B: "OBJECT_UNSET_10B", + 0x10C: "OBJECT_UNSET_10C", + 0x10D: "OBJECT_UNSET_10D", + 0x10E: "OBJECT_UNSET_10E", + 0x10F: "OBJECT_JS", + 0x110: "OBJECT_CS", + 0x111: "OBJECT_UNSET_111", + 0x112: "OBJECT_UNSET_112", + 0x113: "OBJECT_GI_SOLDOUT", + 0x114: "OBJECT_UNSET_114", + 0x115: "OBJECT_MAG", + 0x116: "OBJECT_UNSET_116", + 0x117: "OBJECT_UNSET_117", + 0x118: "OBJECT_UNSET_118", + 0x119: "OBJECT_GI_GOLONMASK", + 0x11A: "OBJECT_GI_ZORAMASK", + 0x11B: "OBJECT_UNSET_11B", + 0x11C: "OBJECT_UNSET_11C", + 0x11D: "OBJECT_KA", + 0x11E: "OBJECT_UNSET_11E", + 0x11F: "OBJECT_ZG", + 0x120: "OBJECT_UNSET_120", + 0x121: "OBJECT_GI_M_ARROW", + 0x122: "OBJECT_DS2", + 0x123: "OBJECT_UNSET_123", + 0x124: "OBJECT_FISH", + 0x125: "OBJECT_GI_SUTARU", + 0x126: "OBJECT_UNSET_126", + 0x127: "OBJECT_SSH", + 0x128: "OBJECT_BIGSLIME", + 0x129: "OBJECT_BG", + 0x12A: "OBJECT_BOMBIWA", + 0x12B: "OBJECT_HINTNUTS", + 0x12C: "OBJECT_RS", + 0x12D: "OBJECT_UNSET_12D", + 0x12E: "OBJECT_GLA", + 0x12F: "OBJECT_UNSET_12F", + 0x130: "OBJECT_GELDB", + 0x131: "OBJECT_UNSET_131", + 0x132: "OBJECT_DOG", + 0x133: "OBJECT_KIBAKO2", + 0x134: "OBJECT_DNS", + 0x135: "OBJECT_DNK", + 0x136: "OBJECT_UNSET_136", + 0x137: "OBJECT_GI_INSECT", + 0x138: "OBJECT_UNSET_138", + 0x139: "OBJECT_GI_GHOST", + 0x13A: "OBJECT_GI_SOUL", + 0x13B: "OBJECT_UNSET_13B", + 0x13C: "OBJECT_UNSET_13C", + 0x13D: "OBJECT_UNSET_13D", + 0x13E: "OBJECT_UNSET_13E", + 0x13F: "OBJECT_GI_RUPY", + 0x140: "OBJECT_MU", + 0x141: "OBJECT_WF", + 0x142: "OBJECT_SKB", + 0x143: "OBJECT_GS", + 0x144: "OBJECT_PS", + 0x145: "OBJECT_OMOYA_OBJ", + 0x146: "OBJECT_COW", + 0x147: "OBJECT_UNSET_147", + 0x148: "OBJECT_GI_SWORD_1", + 0x149: "OBJECT_UNSET_149", + 0x14A: "OBJECT_UNSET_14A", + 0x14B: "OBJECT_ZL4", + 0x14C: "OBJECT_LINK_GORON", + 0x14D: "OBJECT_LINK_ZORA", + 0x14E: "OBJECT_GRASSHOPPER", + 0x14F: "OBJECT_BOYO", + 0x150: "OBJECT_UNSET_150", + 0x151: "OBJECT_UNSET_151", + 0x152: "OBJECT_UNSET_152", + 0x153: "OBJECT_FWALL", + 0x154: "OBJECT_LINK_NUTS", + 0x155: "OBJECT_JSO", + 0x156: "OBJECT_KNIGHT", + 0x157: "OBJECT_ICICLE", + 0x158: "OBJECT_SPDWEB", + 0x159: "OBJECT_UNSET_159", + 0x15A: "OBJECT_BOSS01", + 0x15B: "OBJECT_BOSS02", + 0x15C: "OBJECT_BOSS03", + 0x15D: "OBJECT_BOSS04", + 0x15E: "OBJECT_BOSS05", + 0x15F: "OBJECT_BOSS06", + 0x160: "OBJECT_BOSS07", + 0x161: "OBJECT_RAF", + 0x162: "OBJECT_FUNEN", + 0x163: "OBJECT_RAILLIFT", + 0x164: "OBJECT_NUMA_OBJ", + 0x165: "OBJECT_FLOWERPOT", + 0x166: "OBJECT_SPINYROLL", + 0x167: "OBJECT_ICE_BLOCK", + 0x168: "OBJECT_UNSET_168", + 0x169: "OBJECT_KEIKOKU_DEMO", + 0x16A: "OBJECT_SLIME", + 0x16B: "OBJECT_PR", + 0x16C: "OBJECT_F52_OBJ", + 0x16D: "OBJECT_F53_OBJ", + 0x16E: "OBJECT_UNSET_16E", + 0x16F: "OBJECT_KIBAKO", + 0x170: "OBJECT_SEK", + 0x171: "OBJECT_GMO", + 0x172: "OBJECT_BAT", + 0x173: "OBJECT_SEKIHIL", + 0x174: "OBJECT_SEKIHIG", + 0x175: "OBJECT_SEKIHIN", + 0x176: "OBJECT_SEKIHIZ", + 0x177: "OBJECT_UNSET_177", + 0x178: "OBJECT_WIZ", + 0x179: "OBJECT_LADDER", + 0x17A: "OBJECT_MKK", + 0x17B: "OBJECT_UNSET_17B", + 0x17C: "OBJECT_UNSET_17C", + 0x17D: "OBJECT_UNSET_17D", + 0x17E: "OBJECT_KEIKOKU_OBJ", + 0x17F: "OBJECT_SICHITAI_OBJ", + 0x180: "OBJECT_DEKUCITY_ANA_OBJ", + 0x181: "OBJECT_RAT", + 0x182: "OBJECT_WATER_EFFECT", + 0x183: "OBJECT_UNSET_183", + 0x184: "OBJECT_DBLUE_OBJECT", + 0x185: "OBJECT_BAL", + 0x186: "OBJECT_WARP_UZU", + 0x187: "OBJECT_DRIFTICE", + 0x188: "OBJECT_FALL", + 0x189: "OBJECT_HANAREYAMA_OBJ", + 0x18A: "OBJECT_CRACE_OBJECT", + 0x18B: "OBJECT_DNQ", + 0x18C: "OBJECT_OBJ_TOKEIDAI", + 0x18D: "OBJECT_EG", + 0x18E: "OBJECT_TRU", + 0x18F: "OBJECT_TRT", + 0x190: "OBJECT_HAKUGIN_OBJ", + 0x191: "OBJECT_HORSE_GAME_CHECK", + 0x192: "OBJECT_STK", + 0x193: "OBJECT_UNSET_193", + 0x194: "OBJECT_UNSET_194", + 0x195: "OBJECT_MNK", + 0x196: "OBJECT_GI_BOTTLE_RED", + 0x197: "OBJECT_TOKEI_TOBIRA", + 0x198: "OBJECT_AZ", + 0x199: "OBJECT_TWIG", + 0x19A: "OBJECT_DEKUCITY_OBJ", + 0x19B: "OBJECT_PO_FUSEN", + 0x19C: "OBJECT_RACETSUBO", + 0x19D: "OBJECT_HA", + 0x19E: "OBJECT_BIGOKUTA", + 0x19F: "OBJECT_OPEN_OBJ", + 0x1A0: "OBJECT_FU_KAITEN", + 0x1A1: "OBJECT_FU_MATO", + 0x1A2: "OBJECT_MTORIDE", + 0x1A3: "OBJECT_OSN", + 0x1A4: "OBJECT_TOKEI_STEP", + 0x1A5: "OBJECT_LOTUS", + 0x1A6: "OBJECT_TL", + 0x1A7: "OBJECT_DKJAIL_OBJ", + 0x1A8: "OBJECT_VISIBLOCK", + 0x1A9: "OBJECT_TSN", + 0x1AA: "OBJECT_DS2N", + 0x1AB: "OBJECT_FSN", + 0x1AC: "OBJECT_SHN", + 0x1AD: "OBJECT_BIGICICLE", + 0x1AE: "OBJECT_GI_BOTTLE_15", + 0x1AF: "OBJECT_TK", + 0x1B0: "OBJECT_MARKET_OBJ", + 0x1B1: "OBJECT_GI_RESERVE00", + 0x1B2: "OBJECT_GI_RESERVE01", + 0x1B3: "OBJECT_LIGHTBLOCK", + 0x1B4: "OBJECT_TAKARAYA_OBJECTS", + 0x1B5: "OBJECT_WDHAND", + 0x1B6: "OBJECT_SDN", + 0x1B7: "OBJECT_SNOWWD", + 0x1B8: "OBJECT_GIANT", + 0x1B9: "OBJECT_COMB", + 0x1BA: "OBJECT_HANA", + 0x1BB: "OBJECT_BOSS_HAKUGIN", + 0x1BC: "OBJECT_MEGANEANA_OBJ", + 0x1BD: "OBJECT_GI_NUTSMASK", + 0x1BE: "OBJECT_STK2", + 0x1BF: "OBJECT_SPOT11_OBJ", + 0x1C0: "OBJECT_DANPEI_OBJECT", + 0x1C1: "OBJECT_DHOUSE", + 0x1C2: "OBJECT_HAKAISI", + 0x1C3: "OBJECT_PO", + 0x1C4: "OBJECT_SNOWMAN", + 0x1C5: "OBJECT_PO_SISTERS", + 0x1C6: "OBJECT_PP", + 0x1C7: "OBJECT_GORONSWITCH", + 0x1C8: "OBJECT_DELF", + 0x1C9: "OBJECT_BOTIHASIRA", + 0x1CA: "OBJECT_GI_BIGBOMB", + 0x1CB: "OBJECT_PST", + 0x1CC: "OBJECT_BSMASK", + 0x1CD: "OBJECT_SPIDERTENT", + 0x1CE: "OBJECT_ZORAEGG", + 0x1CF: "OBJECT_KBT", + 0x1D0: "OBJECT_GG", + 0x1D1: "OBJECT_MARUTA", + 0x1D2: "OBJECT_GHAKA", + 0x1D3: "OBJECT_OYU", + 0x1D4: "OBJECT_DNP", + 0x1D5: "OBJECT_DAI", + 0x1D6: "OBJECT_KGY", + 0x1D7: "OBJECT_FB", + 0x1D8: "OBJECT_TAISOU", + 0x1D9: "OBJECT_MASK_BU_SAN", + 0x1DA: "OBJECT_MASK_KI_TAN", + 0x1DB: "OBJECT_MASK_RABIT", + 0x1DC: "OBJECT_MASK_SKJ", + 0x1DD: "OBJECT_MASK_BAKURETU", + 0x1DE: "OBJECT_MASK_TRUTH", + 0x1DF: "OBJECT_GK", + 0x1E0: "OBJECT_HAKA_OBJ", + 0x1E1: "OBJECT_MASK_GORON", + 0x1E2: "OBJECT_MASK_ZORA", + 0x1E3: "OBJECT_MASK_NUTS", + 0x1E4: "OBJECT_MASK_BOY", + 0x1E5: "OBJECT_DNT", + 0x1E6: "OBJECT_YUKIYAMA", + 0x1E7: "OBJECT_ICEFLOE", + 0x1E8: "OBJECT_GI_GOLD_DUST", + 0x1E9: "OBJECT_GI_BOTTLE_16", + 0x1EA: "OBJECT_GI_BOTTLE_22", + 0x1EB: "OBJECT_BEE", + 0x1EC: "OBJECT_OT", + 0x1ED: "OBJECT_UTUBO", + 0x1EE: "OBJECT_DORA", + 0x1EF: "OBJECT_GI_LOACH", + 0x1F0: "OBJECT_GI_SEAHORSE", + 0x1F1: "OBJECT_BIGPO", + 0x1F2: "OBJECT_HARIKO", + 0x1F3: "OBJECT_DNO", + 0x1F4: "OBJECT_SINKAI_KABE", + 0x1F5: "OBJECT_KIN2_OBJ", + 0x1F6: "OBJECT_ISHI", + 0x1F7: "OBJECT_HAKUGIN_DEMO", + 0x1F8: "OBJECT_JG", + 0x1F9: "OBJECT_GI_SWORD_2", + 0x1FA: "OBJECT_GI_SWORD_3", + 0x1FB: "OBJECT_GI_SWORD_4", + 0x1FC: "OBJECT_UM", + 0x1FD: "OBJECT_MASK_GIBUDO", + 0x1FE: "OBJECT_MASK_JSON", + 0x1FF: "OBJECT_MASK_KERFAY", + 0x200: "OBJECT_MASK_BIGELF", + 0x201: "OBJECT_RB", + 0x202: "OBJECT_MBAR_OBJ", + 0x203: "OBJECT_IKANA_OBJ", + 0x204: "OBJECT_KZ", + 0x205: "OBJECT_TOKEI_TURRET", + 0x206: "OBJECT_ZOG", + 0x207: "OBJECT_ROTLIFT", + 0x208: "OBJECT_POSTHOUSE_OBJ", + 0x209: "OBJECT_GI_MASK09", + 0x20A: "OBJECT_GI_MASK14", + 0x20B: "OBJECT_GI_MASK15", + 0x20C: "OBJECT_INIBS_OBJECT", + 0x20D: "OBJECT_TREE", + 0x20E: "OBJECT_KAIZOKU_OBJ", + 0x20F: "OBJECT_GI_RESERVE_B_00", + 0x210: "OBJECT_GI_RESERVE_C_00", + 0x211: "OBJECT_ZOB", + 0x212: "OBJECT_MILKBAR", + 0x213: "OBJECT_DMASK", + 0x214: "OBJECT_MASK_KYOJIN", + 0x215: "OBJECT_GI_RESERVE_C_01", + 0x216: "OBJECT_ZOD", + 0x217: "OBJECT_KUMO30", + 0x218: "OBJECT_OBJ_YASI", + 0x219: "OBJECT_MASK_ROMERNY", + 0x21A: "OBJECT_TANRON1", + 0x21B: "OBJECT_TANRON2", + 0x21C: "OBJECT_TANRON3", + 0x21D: "OBJECT_GI_MAGICMUSHROOM", + 0x21E: "OBJECT_OBJ_CHAN", + 0x21F: "OBJECT_GI_MASK10", + 0x220: "OBJECT_ZOS", + 0x221: "OBJECT_MASK_POSTHAT", + 0x222: "OBJECT_F40_SWITCH", + 0x223: "OBJECT_LODMOON", + 0x224: "OBJECT_TRO", + 0x225: "OBJECT_GI_MASK12", + 0x226: "OBJECT_GI_MASK23", + 0x227: "OBJECT_GI_BOTTLE_21", + 0x228: "OBJECT_GI_CAMERA", + 0x229: "OBJECT_KAMEJIMA", + 0x22A: "OBJECT_HARFGIBUD", + 0x22B: "OBJECT_ZOV", + 0x22C: "OBJECT_HGDOOR", + 0x22D: "OBJECT_UNSET_22D", + 0x22E: "OBJECT_UNSET_22E", + 0x22F: "OBJECT_UNSET_22F", + 0x230: "OBJECT_DOR01", + 0x231: "OBJECT_DOR02", + 0x232: "OBJECT_DOR03", + 0x233: "OBJECT_DOR04", + 0x234: "OBJECT_LAST_OBJ", + 0x235: "OBJECT_REDEAD_OBJ", + 0x236: "OBJECT_IKNINSIDE_OBJ", + 0x237: "OBJECT_IKNV_OBJ", + 0x238: "OBJECT_PAMERA", + 0x239: "OBJECT_HSSTUMP", + 0x23A: "OBJECT_ZM", + 0x23B: "OBJECT_BIG_FWALL", + 0x23C: "OBJECT_SECOM_OBJ", + 0x23D: "OBJECT_HUNSUI", + 0x23E: "OBJECT_UCH", + 0x23F: "OBJECT_TANRON4", + 0x240: "OBJECT_TANRON5", + 0x241: "OBJECT_DT", + 0x242: "OBJECT_GI_MASK03", + 0x243: "OBJECT_CHA", + 0x244: "OBJECT_OBJ_DINNER", + 0x245: "OBJECT_GI_RESERVE_B_01", + 0x246: "OBJECT_LASTDAY", + 0x247: "OBJECT_BAI", + 0x248: "OBJECT_IN2", + 0x249: "OBJECT_IKN_DEMO", + 0x24A: "OBJECT_YB", + 0x24B: "OBJECT_RZ", + 0x24C: "OBJECT_MASK_ZACHO", + 0x24D: "OBJECT_GI_FIELDMAP", + 0x24E: "OBJECT_MASK_STONE", + 0x24F: "OBJECT_BJT", + 0x250: "OBJECT_TARU", + 0x251: "OBJECT_MOONSTON", + 0x252: "OBJECT_MASK_BREE", + 0x253: "OBJECT_GI_SCHEDULE", + 0x254: "OBJECT_GI_STONEMASK", + 0x255: "OBJECT_ZORABAND", + 0x256: "OBJECT_KEPN_KOYA", + 0x257: "OBJECT_OBJ_USIYANE", + 0x258: "OBJECT_GI_MASK05", + 0x259: "OBJECT_GI_MASK11", + 0x25A: "OBJECT_GI_MASK20", + 0x25B: "OBJECT_NNH", + 0x25C: "OBJECT_MASK_GERO", + 0x25D: "OBJECT_MASK_YOFUKASI", + 0x25E: "OBJECT_MASK_MEOTO", + 0x25F: "OBJECT_MASK_DANCER", + 0x260: "OBJECT_KZSAKU", + 0x261: "OBJECT_OBJ_MILK_BIN", + 0x262: "OBJECT_RANDOM_OBJ", + 0x263: "OBJECT_KUJIYA", + 0x264: "OBJECT_KITAN", + 0x265: "OBJECT_GI_MASK06", + 0x266: "OBJECT_GI_MASK16", + 0x267: "OBJECT_ASTR_OBJ", + 0x268: "OBJECT_BSB", + 0x269: "OBJECT_FALL2", + 0x26A: "OBJECT_STH", + 0x26B: "OBJECT_GI_MSSA", + 0x26C: "OBJECT_SMTOWER", + 0x26D: "OBJECT_GI_MASK21", + 0x26E: "OBJECT_YADO_OBJ", + 0x26F: "OBJECT_SYOTEN", + 0x270: "OBJECT_MOONEND", + 0x271: "OBJECT_OB", + 0x272: "OBJECT_GI_BOTTLE_04", + 0x273: "OBJECT_OBJ_DANPEILIFT", + 0x274: "OBJECT_WDOR01", + 0x275: "OBJECT_WDOR02", + 0x276: "OBJECT_WDOR03", + 0x277: "OBJECT_STK3", + 0x278: "OBJECT_KINSTA1_OBJ", + 0x279: "OBJECT_KINSTA2_OBJ", + 0x27A: "OBJECT_BH", + 0x27B: "OBJECT_WDOR04", + 0x27C: "OBJECT_WDOR05", + 0x27D: "OBJECT_GI_MASK17", + 0x27E: "OBJECT_GI_MASK22", + 0x27F: "OBJECT_LBFSHOT", + 0x280: "OBJECT_FUSEN", + 0x281: "OBJECT_ENDING_OBJ", + 0x282: "OBJECT_GI_MASK13", + 0x283: "OBJECT_ID_MAX", +} + +@dataclasses.dataclass +class GetItemEntry: + getItemId: int + itemId: int + field: int + gi: int + textId: int + objectId: int + + def __str__(self) -> str: + itemId_name = itemId_names.get(self.itemId, f"NOT FOUND: 0x{self.itemId:X}") + gid = abs(self.gi) - 1 + getitemDrawId_name = getItemDrawId_names.get(gid, f"NOT FOUND: 0x{abs(self.gi) - 1:X}") + + if self.gi == 0: + chest_anim = 0 + else: + chest_anim = "CHEST_ANIM_SHORT" if self.gi < 0 else "CHEST_ANIM_LONG" + + objectId_name = objectId_names.get(self.objectId, f"NOT FOUND: 0x{abs(self.objectId):X}") + + ret = f"/* 0x{self.getItemId:02X} */ GET_ITEM({itemId_name}, {objectId_name}, {getitemDrawId_name}, 0x{self.textId:X}, 0x{self.field:X}, {chest_anim})" + + return ret + +def main() -> None: + description = "Extract and print the GetItem table" + epilog = "" + + parser = argparse.ArgumentParser(description=description, epilog=epilog, formatter_class=argparse.RawTextHelpFormatter) + parser.add_argument("file", help="binary file to read") + parser.add_argument("offset", help="offset at which to start reading") + parser.add_argument("count", help="number of entries to extract") + parser.add_argument("-g", help="look further back for glitched items from Get Item Manipulation", action="store_true") + + args = parser.parse_args() + + start = int(args.offset, 0) + count = int(args.count, 0) + glitched = args.g + pos_start = 0 + + with open(args.file, "rb") as f: + if glitched: + start -= GETITEMENTRY_LENGTH * count + pos_start -= count + count *= 2 + + f.seek(start, os.SEEK_SET) + data = f.read(GETITEMENTRY_LENGTH * count) + unpacked_data = struct.iter_unpack(GETITEMENTRY_FORMAT, data) + get_item_entries: typing.List[GetItemEntry] = [] + + for i,entry in enumerate(unpacked_data): + get_item_entries.append(GetItemEntry(pos_start + i+1, *entry)) + + for entry in get_item_entries: + print(f"{entry},") + + + +if __name__ == "__main__": + main() diff --git a/tools/namefixer.py b/tools/namefixer.py index a03cc06cf..54edb5644 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -222,6 +222,7 @@ wordReplace = { "SkelAnime_InitLink": "SkelAnime_InitPlayer", "LinkAnimation_SetUpdateFunction": "PlayerAnimation_SetUpdateFunction", "LinkAnimation_Update": "PlayerAnimation_Update", + "LinkAnimation_AnimateFrame": "PlayerAnimation_AnimateFrame", "SkelAnime_SetTransition": "Animation_SetMorph", "LinkAnimation_Change": "PlayerAnimation_Change", "LinkAnimation_PlayOnce": "PlayerAnimation_PlayOnce", @@ -903,6 +904,7 @@ wordReplace = { "player->swordInfo": "player->meleeWeaponInfo", "player->itemActionParam": "player->heldItemAction", "player->heldItemActionParam": "player->itemAction", + "player->unk_A86": "player->currentActorCsIndex", "player->unk_A9C": "player->secretRumbleCharge", "player->unk_AA0": "player->closestSecretDistSq", "player->unk_AAC": "player->headLimbRot", @@ -911,6 +913,8 @@ wordReplace = { "player->getItemDrawId": "player->getItemDrawIdPlusOne", "player->unk_B68": "player->fallStartHeight", "player->unk_B6A": "player->fallDistance", + "player->unk_B80": "player->pushedSpeed", + "player->unk_B84": "player->pushedYaw", "player->targetActor": "player->talkActor", "player->targetActorDistance": "player->talkActorDistance", "player->unk_730": "player->targetedActor", @@ -991,6 +995,7 @@ wordReplace = { "play->sceneLoadFlag": "play->transitionTrigger", "play->unk_18B4A": "play->transitionMode", "play->unk_1887F": "play->transitionType", + "play->roomCtx.currRoom": "play->roomCtx.curRoom", "gSaveContext.nextTransition": "gSaveContext.nextTransitionType", "gSaveContext.unk_3F48": "gSaveContext.cutsceneTransitionControl", "gSaveContext.fadeDuration": "gSaveContext.transFadeDuration", diff --git a/undefined_syms.txt b/undefined_syms.txt index 2187673fc..7ef51ef24 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1103,18 +1103,6 @@ D_06002188 = 0x06002188; D_06000B70 = 0x06000B70; D_06000D60 = 0x06000D60; -// ovl_player_actor - -D_06008860 = 0x06008860; -D_0600BDD8 = 0x0600BDD8; -D_0600C540 = 0x0600C540; -D_060127B0 = 0x060127B0; -D_06013138 = 0x06013138; -D_060134D0 = 0x060134D0; -D_06014684 = 0x06014684; -D_060177B8 = 0x060177B8; -D_060178D0 = 0x060178D0; - // segment 0x07 From 92bdfe68c212d50ac6569fdb871b93be6230b3ad Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 29 May 2023 09:08:29 +1000 Subject: [PATCH 26/51] z_rcp.c setupDL docs/cleanup (#1253) * SetupDL enum * name functions * namefixer * cleanup * small cleanup * PR Review * don't need address of array * PR Suggestion --- docs/tutorial/advanced_control_flow.md | 2 +- docs/tutorial/documenting.md | 2 +- docs/tutorial/draw_functions.md | 8 +- include/gfx.h | 209 +- src/code/z_actor.c | 24 +- src/code/z_cheap_proc.c | 4 +- src/code/z_debug_display.c | 6 +- src/code/z_draw.c | 70 +- src/code/z_eff_blure.c | 8 +- src/code/z_eff_footmark.c | 2 +- src/code/z_eff_shield_particle.c | 2 +- src/code/z_eff_spark.c | 2 +- src/code/z_eff_tire_mark.c | 2 +- src/code/z_effect_soft_sprite_old_init.c | 2 +- src/code/z_en_item00.c | 8 +- src/code/z_fireobj.c | 2 +- src/code/z_lifemeter.c | 8 +- src/code/z_lights.c | 2 +- src/code/z_parameter.c | 30 +- src/code/z_player_lib.c | 2 +- src/code/z_prenmi.c | 2 +- src/code/z_rcp.c | 2017 +++++++++-------- src/code/z_room.c | 12 +- src/code/z_sub_s.c | 2 +- src/code/z_vr_box_draw.c | 2 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 2 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 4 +- .../actors/ovl_Arrow_Ice/z_arrow_ice.c | 4 +- .../actors/ovl_Arrow_Light/z_arrow_light.c | 4 +- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 +- .../ovl_Bg_Botihasira/z_bg_botihasira.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 6 +- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 4 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 4 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 8 +- .../z_bg_dblue_waterfall.c | 4 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 2 +- .../actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c | 2 +- .../actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c | 2 +- .../actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c | 2 +- .../actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c | 4 +- .../z_bg_hakugin_elvpole.c | 2 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 2 +- .../ovl_Bg_Ikana_Block/z_bg_ikana_block.c | 2 +- .../ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c | 5 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.c | 2 +- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c | 14 +- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c | 4 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 2 +- .../ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 2 +- .../actors/ovl_Bg_Open_Spot/z_bg_open_spot.c | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 2 +- .../ovl_Bg_Spout_Fire/z_bg_spout_fire.c | 2 +- .../actors/ovl_Bg_Tobira01/z_bg_tobira01.c | 2 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 6 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 12 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 4 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 4 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 6 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 5 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.c | 6 +- .../actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 4 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 2 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 4 +- .../actors/ovl_Dm_Char00/z_dm_char00.c | 2 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 6 +- .../actors/ovl_Dm_Char02/z_dm_char02.c | 2 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 2 +- .../actors/ovl_Dm_Char04/z_dm_char04.c | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 8 +- .../actors/ovl_Dm_Char06/z_dm_char06.c | 2 +- .../actors/ovl_Dm_Char07/z_dm_char07.c | 4 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 6 +- .../actors/ovl_Dm_Char09/z_dm_char09.c | 4 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 2 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 2 +- src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 4 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 8 +- .../actors/ovl_Eff_Change/z_eff_change.c | 2 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 5 +- .../z_eff_kamejima_wave.c | 2 +- .../actors/ovl_Eff_Zoraband/z_eff_zoraband.c | 2 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 2 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 4 +- src/overlays/actors/ovl_En_And/z_en_and.c | 2 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 2 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 4 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 6 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 6 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 4 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 4 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 4 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 2 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +- 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 | 4 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 6 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 12 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 16 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 4 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../actors/ovl_En_Bombal/z_en_bombal.c | 6 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 6 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 2 +- .../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 | 6 +- .../actors/ovl_En_Bubble/z_en_bubble.c | 2 +- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 4 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 7 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 27 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 4 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 8 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 2 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 6 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 4 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 2 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 4 +- src/overlays/actors/ovl_En_Dnb/z_en_dnb.c | 8 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 4 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 4 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 2 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 4 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 2 +- 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 | 4 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 2 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 2 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 2 +- .../actors/ovl_En_Egblock/z_en_egblock.c | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 6 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 2 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 2 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 2 +- .../actors/ovl_En_Encount2/z_en_encount2.c | 8 +- .../ovl_En_Ending_Hero/z_en_ending_hero.c | 5 +- .../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 | 5 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 4 +- .../actors/ovl_En_Estone/z_en_estone.c | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 16 +- src/overlays/actors/ovl_En_Fall2/z_en_fall2.c | 4 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 5 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 8 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 2 +- src/overlays/actors/ovl_En_Fish/z_en_fish.c | 2 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 6 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 24 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 4 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 6 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 4 +- .../actors/ovl_En_Fu_Kago/z_en_fu_kago.c | 4 +- .../actors/ovl_En_Fu_Mato/z_en_fu_mato.c | 6 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 4 +- .../actors/ovl_En_Gamelupy/z_en_gamelupy.c | 2 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 4 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 2 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 2 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 6 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 12 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 6 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 6 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 14 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 2 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 4 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 4 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 6 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 8 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 4 +- src/overlays/actors/ovl_En_Hata/z_en_hata.c | 2 +- .../actors/ovl_En_Heishi/z_en_heishi.c | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 4 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 4 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 2 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 26 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 2 +- .../z_en_horse_link_child.c | 2 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 2 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 4 +- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +- .../actors/ovl_En_Insect/z_en_insect.c | 2 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 6 +- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 2 +- .../actors/ovl_En_Jc_Mato/z_en_jc_mato.c | 4 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 2 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 4 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 2 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 4 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 4 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 4 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 2 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 4 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 2 +- src/overlays/actors/ovl_En_Light/z_en_light.c | 2 +- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 2 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 2 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 2 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 6 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 14 +- .../actors/ovl_En_Maruta/z_en_maruta.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 4 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 6 +- src/overlays/actors/ovl_En_Mm/z_en_mm.c | 4 +- src/overlays/actors/ovl_En_Mm2/z_en_mm2.c | 2 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 2 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 2 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 2 +- src/overlays/actors/ovl_En_Muto/z_en_muto.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 5 +- .../actors/ovl_En_Nimotsu/z_en_nimotsu.c | 6 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 5 +- src/overlays/actors/ovl_En_Nnh/z_en_nnh.c | 2 +- .../actors/ovl_En_Nutsball/z_en_nutsball.c | 4 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 4 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 4 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 8 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 8 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 6 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 4 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 2 +- src/overlays/actors/ovl_En_Paper/z_en_paper.c | 2 +- src/overlays/actors/ovl_En_Part/z_en_part.c | 2 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 2 +- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 4 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 10 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 6 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 4 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 2 +- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 2 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 4 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 6 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 4 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 4 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 4 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 2 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 8 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- 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 | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 8 +- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c | 2 +- .../actors/ovl_En_Scopecoin/z_en_scopecoin.c | 2 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- src/overlays/actors/ovl_En_Sda/z_en_sda.c | 2 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 4 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 6 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 4 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 12 +- 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 | 2 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.c | 2 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 6 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../actors/ovl_En_Stream/z_en_stream.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 9 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 2 +- .../z_en_syateki_dekunuts.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 +- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 4 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 2 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 4 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 2 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 6 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 2 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 6 +- src/overlays/actors/ovl_En_Test/z_en_test.c | 4 +- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 2 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 10 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 2 +- src/overlays/actors/ovl_En_Tg/z_en_tg.c | 5 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 4 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 3 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 2 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 6 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 2 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 14 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 4 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 4 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 4 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 2 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 24 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 12 +- .../actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c | 4 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 16 +- .../actors/ovl_En_Wood02/z_en_wood02.c | 6 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 6 +- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 4 +- 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 | 6 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 9 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 2 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 8 +- src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c | 2 +- src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c | 2 +- src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c | 3 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 4 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 2 +- src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c | 15 +- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 10 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 11 +- .../actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 2 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 2 +- .../actors/ovl_Obj_Dinner/z_obj_dinner.c | 3 +- src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c | 3 +- .../actors/ovl_Obj_Entotu/z_obj_entotu.c | 4 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 4 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 2 +- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 2 +- .../actors/ovl_Obj_Funen/z_obj_funen.c | 2 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 6 +- .../actors/ovl_Obj_Grass/z_obj_grass.c | 4 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 4 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.c | 4 +- .../actors/ovl_Obj_Hariko/z_obj_hariko.c | 4 +- .../actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c | 3 +- .../actors/ovl_Obj_Hsblock/z_obj_hsblock.c | 2 +- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c | 11 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 2 +- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 2 +- .../ovl_Obj_Jgame_Light/z_obj_jgame_light.c | 6 +- .../ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c | 2 +- .../actors/ovl_Obj_Kinoko/z_obj_kinoko.c | 2 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 2 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 6 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 4 +- .../ovl_Obj_Moon_Stone/z_obj_moon_stone.c | 6 +- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c | 2 +- .../actors/ovl_Obj_Purify/z_obj_purify.c | 8 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 4 +- .../actors/ovl_Obj_Shutter/z_obj_shutter.c | 2 +- .../ovl_Obj_Skateblock/z_obj_skateblock.c | 2 +- .../actors/ovl_Obj_Smork/z_obj_smork.c | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 2 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 2 +- .../ovl_Obj_Spinyroll/z_obj_spinyroll.c | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 12 +- .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 6 +- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 4 +- .../ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 12 +- .../actors/ovl_Obj_Toudai/z_obj_toudai.c | 4 +- src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 2 +- .../ovl_Obj_Vspinyroll/z_obj_vspinyroll.c | 2 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 4 +- .../ovl_Object_Kankyo/z_object_kankyo.c | 8 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- .../actors/ovl_Oceff_Storm/z_oceff_storm.c | 4 +- .../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 | 2 +- .../z_eff_en_ice_block.c | 2 +- .../ovl_Effect_Ss_Blast/z_eff_ss_blast.c | 2 +- .../ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c | 4 +- .../ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c | 2 +- .../ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c | 2 +- .../ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c | 2 +- .../ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c | 2 +- .../ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c | 2 +- .../z_eff_ss_dt_bubble.c | 2 +- .../ovl_Effect_Ss_Dust/z_eff_ss_dust.c | 2 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c | 2 +- .../ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c | 2 +- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.c | 2 +- .../z_eff_ss_fhg_flash.c | 4 +- .../z_eff_ss_fire_tail.c | 2 +- .../z_eff_ss_g_ripple.c | 2 +- .../ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c | 2 +- .../ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c | 4 +- .../ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c | 2 +- .../z_eff_ss_ice_piece.c | 2 +- .../z_eff_ss_ice_smoke.c | 2 +- .../ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c | 2 +- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 4 +- .../z_eff_ss_kirakira.c | 2 +- .../z_eff_ss_lightning.c | 2 +- .../effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c | 4 +- .../ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c | 2 +- .../z_eff_ss_solder_srch_ball.c | 6 +- .../ovl_Effect_Ss_Stick/z_eff_ss_stick.c | 2 +- .../ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c | 2 +- .../gamestates/ovl_daytelop/z_daytelop.c | 5 +- src/overlays/gamestates/ovl_select/z_select.c | 4 +- src/overlays/gamestates/ovl_title/z_title.c | 4 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 2 +- .../ovl_kaleido_scope/z_kaleido_item.c | 6 +- .../ovl_kaleido_scope/z_kaleido_map.c | 20 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 2 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 4 +- tools/disasm/functions.txt | 130 +- tools/disasm/variables.txt | 2 +- tools/namefixer.py | 65 + tools/sizes/code_functions.csv | 130 +- 459 files changed, 2502 insertions(+), 1979 deletions(-) diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md index 43e9e6d46..aa4ba3621 100644 --- a/docs/tutorial/advanced_control_flow.md +++ b/docs/tutorial/advanced_control_flow.md @@ -136,7 +136,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) { void EnMs_Draw(Actor* thisx, PlayState* play) { EnMs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md index 71f3347e3..11d8b3546 100644 --- a/docs/tutorial/documenting.md +++ b/docs/tutorial/documenting.md @@ -244,7 +244,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80C106B0[this->unk_2AC]); diff --git a/docs/tutorial/draw_functions.md b/docs/tutorial/draw_functions.md index ccc738219..43fe8579c 100644 --- a/docs/tutorial/draw_functions.md +++ b/docs/tutorial/draw_functions.md @@ -29,7 +29,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { temp_a0 = play->state.gfxCtx; sp30 = temp_a0; - func_8012C28C(temp_a0); + Gfx_SetupDL25_Opa(temp_a0); temp_v1 = sp30->polyOpa.p; sp30->polyOpa.p = temp_v1 + 8; temp_v1->words.w0 = 0xDB060020; @@ -105,7 +105,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80C106B0[this->unk_2AC]); @@ -217,7 +217,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { sp34 = (s16) (s32) (f32) thisx->shape.rot.z; temp_a0 = play->state.gfxCtx; temp_s0 = temp_a0; - func_8012C28C(temp_a0); + Gfx_SetupDL25_Opa(temp_a0); temp_v0 = temp_s0->polyOpa.p; temp_s0->polyOpa.p = temp_v0 + 8; temp_v0->words.w0 = 0xDA380003; @@ -309,7 +309,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, D_06000680); diff --git a/include/gfx.h b/include/gfx.h index e08df2013..dfbd78d74 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -8,6 +8,83 @@ struct GameState; +typedef enum SetupDL { + /* 0x00 */ SETUPDL_0, + /* 0x01 */ SETUPDL_1, + /* 0x02 */ SETUPDL_2, + /* 0x03 */ SETUPDL_3, + /* 0x04 */ SETUPDL_4, + /* 0x05 */ SETUPDL_5, + /* 0x06 */ SETUPDL_6, + /* 0x07 */ SETUPDL_7, + /* 0x08 */ SETUPDL_8, + /* 0x09 */ SETUPDL_9, + /* 0x0A */ SETUPDL_10, + /* 0x0B */ SETUPDL_11, + /* 0x0C */ SETUPDL_12, + /* 0x0D */ SETUPDL_13, + /* 0x0E */ SETUPDL_14, + /* 0x0F */ SETUPDL_15, + /* 0x10 */ SETUPDL_16, + /* 0x11 */ SETUPDL_17, + /* 0x12 */ SETUPDL_18, + /* 0x13 */ SETUPDL_19, + /* 0x14 */ SETUPDL_20, + /* 0x15 */ SETUPDL_21, + /* 0x16 */ SETUPDL_22, + /* 0x17 */ SETUPDL_23, + /* 0x18 */ SETUPDL_24, + /* 0x19 */ SETUPDL_25, + /* 0x1A */ SETUPDL_26, + /* 0x1B */ SETUPDL_27, + /* 0x1C */ SETUPDL_28, + /* 0x1D */ SETUPDL_29, + /* 0x1E */ SETUPDL_30, + /* 0x1F */ SETUPDL_31, + /* 0x20 */ SETUPDL_32, + /* 0x21 */ SETUPDL_33, + /* 0x22 */ SETUPDL_34, + /* 0x23 */ SETUPDL_35, + /* 0x24 */ SETUPDL_36, + /* 0x25 */ SETUPDL_37, + /* 0x26 */ SETUPDL_38, + /* 0x27 */ SETUPDL_39, + /* 0x28 */ SETUPDL_40, + /* 0x29 */ SETUPDL_41, + /* 0x2A */ SETUPDL_42, + /* 0x2B */ SETUPDL_43, + /* 0x2C */ SETUPDL_44, + /* 0x2D */ SETUPDL_45, + /* 0x2E */ SETUPDL_46, + /* 0x2F */ SETUPDL_47, + /* 0x30 */ SETUPDL_48, + /* 0x31 */ SETUPDL_49, + /* 0x32 */ SETUPDL_50, + /* 0x33 */ SETUPDL_51, + /* 0x34 */ SETUPDL_52, + /* 0x35 */ SETUPDL_53, + /* 0x36 */ SETUPDL_54, + /* 0x37 */ SETUPDL_55, + /* 0x38 */ SETUPDL_56, + /* 0x39 */ SETUPDL_57, + /* 0x3A */ SETUPDL_58, + /* 0x3B */ SETUPDL_59, + /* 0x3C */ SETUPDL_60, + /* 0x3D */ SETUPDL_61, + /* 0x3E */ SETUPDL_62, + /* 0x3F */ SETUPDL_63, + /* 0x40 */ SETUPDL_64, + /* 0x41 */ SETUPDL_65, + /* 0x42 */ SETUPDL_66, + /* 0x43 */ SETUPDL_67, + /* 0x44 */ SETUPDL_68, + /* 0x45 */ SETUPDL_69, + /* 0x46 */ SETUPDL_70, + /* 0x47 */ SETUPDL_71, + /* 0x48 */ SETUPDL_72, + /* 0x49 */ SETUPDL_MAX +} SetupDL; + typedef struct { /* 0x000 */ Gfx taskStart[9]; /* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl @@ -78,72 +155,72 @@ typedef struct GraphicsContext { Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i); -Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i); -void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i); -Gfx* func_8012BFC4(Gfx* gfx); -Gfx* func_8012BFEC(Gfx* gfx); -Gfx* func_8012C014(Gfx* gfx); -void func_8012C058(GraphicsContext* gfxCtx); -void func_8012C080(GraphicsContext* gfxCtx); -void func_8012C0A8(GraphicsContext* gfxCtx); -void func_8012C0D0(GraphicsContext* gfxCtx); -void func_8012C0F8(GraphicsContext* gfxCtx); -void func_8012C120(GraphicsContext* gfxCtx); -void func_8012C148(GraphicsContext* gfxCtx); -void func_8012C170(GraphicsContext* gfxCtx); -Gfx* func_8012C198(Gfx* gfx); -void func_8012C1C0(GraphicsContext* gfxCtx); -Gfx* func_8012C1EC(Gfx* gfx); -void func_8012C214(GraphicsContext* gfxCtx); -void func_8012C240(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDLImpl(Gfx* gfx, u32 i); +Gfx* Gfx_SetupDL(Gfx* gfx, u32 i); +void Gfx_SetupDLAtPtr(Gfx** gfxp, u32 i); +Gfx* Gfx_SetupDL57(Gfx* gfx); +Gfx* Gfx_SetupDL57_b(Gfx* gfx); +Gfx* Gfx_SetupDL52_NoCD(Gfx* gfx); +void Gfx_SetupDL58_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL57_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL50_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL51_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL52_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL53_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL54_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL55_Xlu(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL26(Gfx* gfx); +void Gfx_SetupDL26_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL23(Gfx* gfx); +void Gfx_SetupDL23_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL25_Xlu2(GraphicsContext* gfxCtx); void func_8012C268(struct GameState* gameState); -void func_8012C28C(GraphicsContext* gfxCtx); -Gfx* func_8012C2B4(Gfx* gfx); -void func_8012C2DC(GraphicsContext* gfxCtx); -Gfx* func_8012C304(Gfx* gfx); -void func_8012C32C(GraphicsContext* gfxCtx); -void func_8012C354(GraphicsContext* gfxCtx); -void func_8012C37C(GraphicsContext* gfxCtx); -Gfx* func_8012C3A4(Gfx* gfx); -Gfx* func_8012C3CC(Gfx* gfx); -void func_8012C3F4(GraphicsContext* gfxCtx); -void func_8012C420(GraphicsContext* gfxCtx); -void func_8012C448(GraphicsContext* gfxCtx); -void func_8012C470(GraphicsContext* gfxCtx); -Gfx* func_8012C498(Gfx* gfx); -void func_8012C4C0(GraphicsContext* gfxCtx); -void func_8012C4E8(GraphicsContext* gfxCtx); -void func_8012C510(GraphicsContext* gfxCtx); -void func_8012C538(GraphicsContext* gfxCtx); -void func_8012C560(GraphicsContext* gfxCtx); -void func_8012C588(GraphicsContext* gfxCtx); -void func_8012C5B0(GraphicsContext* gfxCtx); -void func_8012C5D8(GraphicsContext* gfxCtx); -Gfx* func_8012C600(Gfx* gfx); -void func_8012C628(GraphicsContext* gfxCtx); -void func_8012C654(GraphicsContext* gfxCtx); -void func_8012C680(Gfx** gfxp); -void func_8012C6AC(GraphicsContext* gfxCtx); -void func_8012C6D4(GraphicsContext* gfxCtx); -void func_8012C6FC(GraphicsContext* gfxCtx); -Gfx* func_8012C724(Gfx* gfx); -Gfx* func_8012C74C(Gfx* gfx); -Gfx* func_8012C774(Gfx* gfx); -Gfx* func_8012C7B8(Gfx* gfx); -Gfx* func_8012C7FC(Gfx* gfx); -Gfx* func_8012C840(Gfx* gfx); -Gfx* func_8012C868(Gfx* gfx); -void func_8012C8AC(GraphicsContext* gfxCtx); -void func_8012C8D4(GraphicsContext* gfxCtx); -void func_8012C8FC(GraphicsContext* gfxCtx); -void func_8012C924(GraphicsContext* gfxCtx); -void func_8012C94C(GraphicsContext* gfxCtx); -void func_8012C974(GraphicsContext* gfxCtx); -void func_8012C9BC(GraphicsContext* gfxCtx); -void func_8012C9E4(GraphicsContext* gfxCtx); -void func_8012CA0C(Gfx** gfxp); -void func_8012CA38(GraphicsContext* gfxCtx); +void Gfx_SetupDL25_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL71(Gfx* gfx); +void Gfx_SetupDL25_Xlu(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL72(Gfx* gfx); +void Gfx_SetupDL31_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL32_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL33_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL64(Gfx* gfx); +Gfx* Gfx_SetupDL34(Gfx* gfx); +void Gfx_SetupDL34_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL35_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL44_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL36_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL28(Gfx* gfx); +void Gfx_SetupDL28_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL43_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL45_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL46_Overlay(GraphicsContext* gfxCtx); +void Gfx_SetupDL38_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL4_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL37_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL2_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL39(Gfx* gfx); +void Gfx_SetupDL39_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL39_Overlay(GraphicsContext* gfxCtx); +void Gfx_SetupDL39_Ptr(Gfx** gfxp); +void Gfx_SetupDL40_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL41_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL47_Xlu(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL66(Gfx* gfx); +Gfx* Gfx_SetupDL67(Gfx* gfx); +Gfx* Gfx_SetupDL68_NoCD(Gfx* gfx); +Gfx* Gfx_SetupDL69_NoCD(Gfx* gfx); +Gfx* Gfx_SetupDL65_NoCD(Gfx* gfx); +Gfx* Gfx_SetupDL70(Gfx* gfx); +Gfx* Gfx_SetupDL20_NoCD(Gfx* gfx); +void Gfx_SetupDL42_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL42_Overlay(GraphicsContext* gfxCtx); +void Gfx_SetupDL48_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL49_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL27_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL60_XluNoCD(GraphicsContext* gfxCtx); +void Gfx_SetupDL61_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL56_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL56_Ptr(Gfx** gfxp); +void Gfx_SetupDL59_Opa(GraphicsContext* gfxCtx); Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); void func_8012CB04(Gfx** gfxp, u32 x, u32 y); Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y); @@ -156,7 +233,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); void func_8012D40C(f32* param_1, f32* param_2, s16* param_3); -extern Gfx sSetupDL[73 * 6]; +extern Gfx gSetupDLs[SETUPDL_MAX][6]; extern Gfx gEmptyDL[]; #define WORK_DISP __gfxCtx->work.p diff --git a/src/code/z_actor.c b/src/code/z_actor.c index ffa77e9bf..e86a341fd 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -76,7 +76,7 @@ void ActorShadow_Draw(Actor* actor, Lights* lights, PlayState* play, Gfx* dlist, OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); @@ -218,7 +218,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); actor->shape.feetFloorFlags = 0; spB8 = 2; @@ -360,7 +360,7 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); func_800C0094(actor->floorPoly, actor->world.pos.x, actor->floorHeight, actor->world.pos.z, &sp94); temp_f22 = (f32)actor->shape.shadowAlpha * (1.0f - (spEC * (1.0f / 30.0f))); @@ -522,7 +522,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z); if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) { - OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39); + 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]; @@ -564,7 +564,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { TatlColor* color = &sTatlColorList[actor->category]; - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x07); + 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, @@ -869,7 +869,7 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) { spB4 = spB8 + (height * 4); - OVERLAY_DISP = func_8012C014(OVERLAY_DISP); + OVERLAY_DISP = Gfx_SetupDL52_NoCD(OVERLAY_DISP); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->alpha); @@ -3769,7 +3769,7 @@ void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha); adjustedPos.x = pos->x; @@ -4373,26 +4373,30 @@ Gfx* func_800BD9A0(GraphicsContext* gfxCtx) { void func_800BD9E0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, alpha); gSPSegment(POLY_OPA_DISP++, 0x0C, gEmptyDL); POLY_OPA_DISP = SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, overrideLimbDraw, postLimbDraw, actor, POLY_OPA_DISP); + CLOSE_DISPS(play->state.gfxCtx); } void func_800BDAA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, alpha); gSPSegment(POLY_XLU_DISP++, 0x0C, func_800BD9A0(play->state.gfxCtx)); POLY_XLU_DISP = SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, overrideLimbDraw, postLimbDraw, actor, POLY_XLU_DISP); + CLOSE_DISPS(play->state.gfxCtx); } @@ -4654,7 +4658,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); switch (type) { case ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX: diff --git a/src/code/z_cheap_proc.c b/src/code/z_cheap_proc.c index 2b4f67cae..82303a172 100644 --- a/src/code/z_cheap_proc.c +++ b/src/code/z_cheap_proc.c @@ -10,7 +10,7 @@ void Gfx_DrawDListOpa(PlayState* play, Gfx* dlist) { dl = POLY_OPA_DISP; - gSPDisplayList(&dl[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dl[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&dl[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&dl[2], dlist); @@ -29,7 +29,7 @@ void Gfx_DrawDListXlu(PlayState* play, Gfx* dlist) { dl = POLY_XLU_DISP; - gSPDisplayList(&dl[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dl[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&dl[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&dl[2], dlist); diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c index d9f20d72b..9dd4d86b2 100644 --- a/src/code/z_debug_display.c +++ b/src/code/z_debug_display.c @@ -67,7 +67,7 @@ void DebugDisplay_DrawObjects(PlayState* play) { void DebugDisplay_DrawSpriteI8(DebugDispObject* dispObj, void* texture, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C6FC(play->state.gfxCtx); + Gfx_SetupDL47_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, dispObj->color.r, dispObj->color.g, dispObj->color.b, dispObj->color.a); Matrix_Translate(dispObj->pos.x, dispObj->pos.y, dispObj->pos.z, MTXMODE_NEW); @@ -90,7 +90,7 @@ Lights1 sDebugDisplayLight1 = gdSPDefLights1(128, 128, 128, 255, 255, 255, 73, 7 void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* dList, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C588(play->state.gfxCtx); + Gfx_SetupDL4_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, dispObj->color.r, dispObj->color.g, dispObj->color.b, dispObj->color.a); @@ -113,7 +113,7 @@ void DebugDisplay_DrawPath(PlayState* play, Path* path) { OPEN_DISPS(play->state.gfxCtx); - func_8012C560(play->state.gfxCtx); + Gfx_SetupDL38_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, DebugDisplay_PathDisplayList(play->state.gfxCtx, path)); diff --git a/src/code/z_draw.c b/src/code/z_draw.c index a2686be8e..ace56a965 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -386,7 +386,7 @@ void GetItem_DrawBombchu(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C214(play->state.gfxCtx); + Gfx_SetupDL23_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++, sDrawItemTable[drawId].drawResources[0]); @@ -399,12 +399,12 @@ void GetItem_DrawPoes(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -430,12 +430,12 @@ void GetItem_DrawFairyBottle(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -459,12 +459,12 @@ void GetItem_DrawSkullToken(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 5), @@ -480,12 +480,12 @@ void GetItem_DrawCompass(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 5); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_5); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -498,7 +498,7 @@ void GetItem_DrawPotion(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, -play->state.frames, play->state.frames, 32, 32, 1, @@ -509,7 +509,7 @@ void GetItem_DrawPotion(PlayState* play, s16 drawId) { gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[2]); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[3]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[4]); @@ -523,7 +523,7 @@ void GetItem_DrawGoronSword(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 1, play->state.frames * 0, 32, @@ -539,7 +539,7 @@ void GetItem_DrawDekuNuts(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 6, play->state.frames * 6, 32, @@ -555,7 +555,7 @@ void GetItem_DrawRecoveryHeart(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 3), @@ -571,7 +571,7 @@ void GetItem_DrawFish(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, play->state.frames * 1, 32, @@ -590,7 +590,7 @@ void GetItem_DrawOpa0(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); @@ -606,12 +606,12 @@ void GetItem_DrawOpa0Xlu1(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -627,7 +627,7 @@ void GetItem_DrawOpa01(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); @@ -644,7 +644,7 @@ void GetItem_DrawXlu01(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[0]); @@ -659,12 +659,12 @@ void GetItem_DrawSeahorse(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -685,8 +685,8 @@ void GetItem_DrawFairyContainer(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiFairyBottleTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -710,8 +710,8 @@ void GetItem_DrawMoonsTear(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -730,12 +730,12 @@ void GetItem_DrawMagicArrow(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -749,7 +749,7 @@ void GetItem_DrawUpgrades(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[1]); @@ -765,13 +765,13 @@ void GetItem_DrawRupee(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[1]); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]); @@ -786,13 +786,13 @@ void GetItem_DrawSmallRupee(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); Matrix_Scale(0.7f, 0.7f, 0.7f, MTXMODE_APPLY); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[1]); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]); @@ -806,7 +806,7 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDrawItemTable[drawId].drawResources[1]); @@ -831,7 +831,7 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 520431401..f25273279 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -374,7 +374,7 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3 void EffectBlure_SetupSmooth(EffectBlure* this, GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); CLOSE_DISPS(gfxCtx); } @@ -693,7 +693,7 @@ void EffectBlure_DrawSmooth(EffectBlure* this2, GraphicsContext* gfxCtx) { void EffectBlure_SetupSimple(GraphicsContext* gfxCtx, EffectBlure* this, Vtx* vtx) { OPEN_DISPS(gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); CLOSE_DISPS(gfxCtx); } @@ -702,7 +702,7 @@ void EffectBlure_SetupSimpleAlt(GraphicsContext* gfxCtx, EffectBlure* this, Vtx* OPEN_DISPS(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE); gDPSetTextureLUT(POLY_XLU_DISP++, G_TT_NONE); @@ -926,7 +926,7 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) { if (this->numElements != 0) { if (this->flags == 0) { - func_8012C560(gfxCtx); + Gfx_SetupDL38_Xlu(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); vtx = GRAPH_ALLOC(gfxCtx, 32 * sizeof(Vtx)); diff --git a/src/code/z_eff_footmark.c b/src/code/z_eff_footmark.c index bcf6ff824..806cc45e0 100644 --- a/src/code/z_eff_footmark.c +++ b/src/code/z_eff_footmark.c @@ -105,7 +105,7 @@ void EffFootmark_Draw(PlayState* play) { s32 i; GraphicsContext* gfxCtx = play->state.gfxCtx; - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gSPDisplayList(gfxCtx->polyXlu.p++, gEffFootprintMaterialDL); diff --git a/src/code/z_eff_shield_particle.c b/src/code/z_eff_shield_particle.c index 90833947b..e15874a78 100644 --- a/src/code/z_eff_shield_particle.c +++ b/src/code/z_eff_shield_particle.c @@ -149,7 +149,7 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); if (this != NULL) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/code/z_eff_spark.c b/src/code/z_eff_spark.c index fdd25a6b4..77b40e3ed 100644 --- a/src/code/z_eff_spark.c +++ b/src/code/z_eff_spark.c @@ -148,7 +148,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) { if (this != NULL) { gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c index d7754c5a7..d14d6926c 100644 --- a/src/code/z_eff_tire_mark.c +++ b/src/code/z_eff_tire_mark.c @@ -231,7 +231,7 @@ void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx) { if (vtx != NULL) { gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP++, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP++, SETUPDL_44); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_ZB_CLD_SURF2); gDPLoadTextureBlock(POLY_OPA_DISP++, gameplay_keep_Tex_014570, G_IM_FMT_I, G_IM_SIZ_8b, 64, 32, 0, diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c index 0b08f4dd0..17852c4c1 100644 --- a/src/code/z_effect_soft_sprite_old_init.c +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -58,7 +58,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(texture)); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rgPrimColorR, this->rgPrimColorG, this->rgPrimColorB, this->rgPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rgEnvColorR, this->rgEnvColorG, this->rgEnvColorB, this->rgEnvColorA); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 44e8703a2..7b9e2ca34 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -783,7 +783,7 @@ void EnItem00_DrawRupee(EnItem00* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); if (this->actor.params <= ITEM00_RUPEE_RED) { @@ -834,7 +834,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { } } - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sItemDropTextures[texIndex])); @@ -851,7 +851,7 @@ void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) { if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(20.0f, 20.0f, 20.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); @@ -868,7 +868,7 @@ void EnItem00_DrawHeartPiece(EnItem00* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index 114e62cc7..5e93e1187 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -142,7 +142,7 @@ void FireObj_Draw(PlayState* play, FireObj* fire) { Vec3s vec; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->timer * -20) % 512U, 32, 128)); diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index d6f2edf2a..c6c1501ba 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -340,13 +340,13 @@ void LifeMeter_Draw(PlayState* play) { if ((ddCount < 0) || (i > ddCount)) { if (curCombineModeSet != 1) { curCombineModeSet = 1; - func_8012C654(gfxCtx); + Gfx_SetupDL39_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); } } else if (curCombineModeSet != 3) { curCombineModeSet = 3; - func_8012C654(gfxCtx); + Gfx_SetupDL39_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); } @@ -366,7 +366,7 @@ void LifeMeter_Draw(PlayState* play) { if ((ddCount < 0) || (ddCount < i)) { if (curCombineModeSet != 2) { curCombineModeSet = 2; - func_8012C8D4(gfxCtx); + Gfx_SetupDL42_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); @@ -374,7 +374,7 @@ void LifeMeter_Draw(PlayState* play) { } else { if (curCombineModeSet != 4) { curCombineModeSet = 4; - func_8012C8D4(gfxCtx); + Gfx_SetupDL42_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 6a31c7e94..860d04ae9 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -414,7 +414,7 @@ void Lights_DrawGlow(PlayState* play) { if (light != NULL) { OPEN_DISPS(play->state.gfxCtx); - dl = func_8012C7FC(POLY_XLU_DISP); + dl = Gfx_SetupDL65_NoCD(POLY_XLU_DISP); gDPSetDither(dl++, G_CD_NOISE); diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index fe4ca5ef8..1c03f5cb1 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -3850,7 +3850,7 @@ void Magic_DrawMeter(PlayState* play) { magicBarY = 34; // one row of hearts } - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255); @@ -4287,7 +4287,7 @@ void Interface_DrawAButton(PlayState* play) { aAlpha = 100; } - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); Interface_SetPerspectiveView(play, 25 + R_A_BTN_Y_OFFSET, 70 + R_A_BTN_Y_OFFSET, 192, 237); @@ -4362,7 +4362,7 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) { (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_MASK))) { // Inventory Equip Effects gSPSegment(OVERLAY_DISP++, 0x08, pauseCtx->iconItemSegment); - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4525,7 +4525,7 @@ void Interface_DrawClock(PlayState* play) { if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); /** * Draw Clock's Hour Lines @@ -4556,7 +4556,7 @@ void Interface_DrawClock(PlayState* play) { if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } else { /** @@ -4667,7 +4667,7 @@ void Interface_DrawClock(PlayState* play) { timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4864,7 +4864,7 @@ void Interface_DrawClock(PlayState* play) { sp1E6 = 255; } - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); /** * Draws Final-Hours Clock's Frame @@ -5499,7 +5499,7 @@ void Interface_DrawPerfectLetters(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, @@ -6136,7 +6136,7 @@ void Interface_DrawMinigameIcons(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { // Carrots rendering if the action corresponds to riding a horse @@ -6311,7 +6311,7 @@ void Interface_Draw(PlayState* play) { // Draw Grandma's Story if (interfaceCtx->storyDmaStatus == STORY_DMA_DONE) { gSPSegment(OVERLAY_DISP++, 0x07, interfaceCtx->storySegment); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -6336,7 +6336,7 @@ void Interface_Draw(PlayState* play) { LifeMeter_Draw(play); - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); // Draw Rupee Icon gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].r, @@ -6521,7 +6521,7 @@ void Interface_Draw(PlayState* play) { Actor_DrawZTarget(&play->actorCtx.targetContext, play); } - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); Interface_DrawItemButtons(play); @@ -6553,7 +6553,7 @@ void Interface_Draw(PlayState* play) { interfaceCtx->actionVtx[40 + 2].v.tc[1] = interfaceCtx->actionVtx[40 + 3].v.tc[1] = 32 << 5; - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); @@ -6588,7 +6588,7 @@ void Interface_Draw(PlayState* play) { // Draw pictograph focus icons if (sPictoState == PICTO_BOX_STATE_LENS) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); @@ -6656,7 +6656,7 @@ void Interface_Draw(PlayState* play) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 200, 200, 250); gDPFillRectangle(OVERLAY_DISP++, 70, 22, 251, 151); - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetRenderMode(OVERLAY_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 5509fd4a1..f7ccd5230 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1855,7 +1855,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis OPEN_DISPS(play->state.gfxCtx); - OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 7); + OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_7); SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &sp58, &sp54); diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c index e0381153a..94d235a37 100644 --- a/src/code/z_prenmi.c +++ b/src/code/z_prenmi.c @@ -22,7 +22,7 @@ void PreNMI_Draw(PreNMIState* this) { OPEN_DISPS(gfxCtx); - func_8012C470(gfxCtx); + Gfx_SetupDL36_Opa(gfxCtx); gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 255, 1) << 16) | GPACK_RGBA5551(255, 255, 255, 1)); gDPFillRectangle(POLY_OPA_DISP++, 0, this->timer + 100, SCREEN_WIDTH - 1, this->timer + 100); diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index ab972159c..299639e98 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1,758 +1,834 @@ #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -Gfx sSetupDL[438] = { - /* 0x00 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0, 0, 0, - COMBINED), - gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x01 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x02 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x03 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x04 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x05 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x06 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_TEX_EDGE2), - gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x07 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x08 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x09 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x10 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x11 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x12 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x13 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x14 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x15 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x16 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x17 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x18 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x19 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_LINE | G_RM_AA_ZB_XLU_LINE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x20 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | - G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x21 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, - ENVIRONMENT, COMBINED, TEXEL0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | - G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x22 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x23 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_DECAL | G_RM_AA_ZB_XLU_DECAL2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x24 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x25 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x26 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x27 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x28 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0, COMBINED, 0, - 0, 0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_FRONT | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x29 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x30 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x31 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x32 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x33 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x34 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x35 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x36 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x37 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x38 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | 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_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x39 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), - gsSPLoadGeometryMode(G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, - ENVIRONMENT, COMBINED, TEXEL0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, - TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, - TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), - gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL | - GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x40 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x41 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x42 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x43 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x44 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x45 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x46 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x47 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x48 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), +Gfx gSetupDLs[SETUPDL_MAX][6] = { + { + /* SETUPDL_0 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0, + 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_1 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_2 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_3 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_4 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_5 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_6 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_TEX_EDGE2), + gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_7 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_8 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_9 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_10 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_11 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_12 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_13 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_14 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_15 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_16 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_17 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_18 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_19 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_20 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_21 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_22 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_23 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_24 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_25 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_26 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_27 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_28 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_29 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_30 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_LINE | G_RM_AA_ZB_XLU_LINE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_31 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_32 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | + G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_33 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, + ENVIRONMENT, COMBINED, TEXEL0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | + G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_34 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_35 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_DECAL | G_RM_AA_ZB_XLU_DECAL2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_36 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_37 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_38 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_39 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_40 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0, + COMBINED, 0, 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_FRONT | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_41 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_42 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_43 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_44 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_45 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_46 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_47 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_48 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_49 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_50 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_51 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_52 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_53 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, + ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_54 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, + ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_55 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, + ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_56 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | 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_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_57 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPLoadGeometryMode(G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_58 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, + 0), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_59 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, + ENVIRONMENT, COMBINED, TEXEL0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | + G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_60 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_61 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), + gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_62 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_63 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_64 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_65 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_66 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_67 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_68 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_69 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_70 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_71 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_72 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, }; Gfx sFillSetupDL[] = { @@ -814,297 +890,470 @@ Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) { return Gfx_SetFog(gfx, r, g, b, a, n, f); } -Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i) { - gSPDisplayList(gfx++, &sSetupDL[6 * i]); +Gfx* Gfx_SetupDLImpl(Gfx* gfx, u32 i) { + s32 dListIndex = i * ARRAY_COUNT(gSetupDLs[i]); + + // Equivalent to gSPDisplayList(gfx++, gSetupDLs[i]) + gSPDisplayList(gfx++, &((Gfx*)gSetupDLs)[dListIndex]); return gfx; } -Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i) { - return Gfx_CallSetupDLImpl(gfx, i); +Gfx* Gfx_SetupDL(Gfx* gfx, u32 i) { + return Gfx_SetupDLImpl(gfx, i); } -void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i) { - *gfxp = Gfx_CallSetupDL(*gfxp, i); +void Gfx_SetupDLAtPtr(Gfx** gfxp, u32 i) { + *gfxp = Gfx_SetupDL(*gfxp, i); } -Gfx* func_8012BFC4(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x39]); +Gfx* Gfx_SetupDL57(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_57]); return gfx; } -Gfx* func_8012BFEC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x39]); +Gfx* Gfx_SetupDL57_b(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_57]); return gfx; } -Gfx* func_8012C014(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x34]); +Gfx* Gfx_SetupDL52_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_52]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -void func_8012C058(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x3A]); +void Gfx_SetupDL58_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_58]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C080(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x39]); +void Gfx_SetupDL57_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_57]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C0A8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x32]); +void Gfx_SetupDL50_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_50]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C0D0(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x33]); +void Gfx_SetupDL51_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_51]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C0F8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x34]); +void Gfx_SetupDL52_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_52]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C120(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x35]); +void Gfx_SetupDL53_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_53]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C148(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x36]); +void Gfx_SetupDL54_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_54]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C170(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x37]); +void Gfx_SetupDL55_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_55]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C198(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x1A]); +Gfx* Gfx_SetupDL26(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_26]); return gfx; } -void func_8012C1C0(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C198(gfxCtx->polyOpa.p); +void Gfx_SetupDL26_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL26(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C1EC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x17]); +Gfx* Gfx_SetupDL23(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_23]); return gfx; } -void func_8012C214(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C1EC(gfxCtx->polyOpa.p); +void Gfx_SetupDL23_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL23(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C240(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]); +void Gfx_SetupDL25_Xlu2(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_25]); + + CLOSE_DISPS(gfxCtx); } void func_8012C268(GameState* gameState) { - func_8012C28C(gameState->gfxCtx); + Gfx_SetupDL25_Opa(gameState->gfxCtx); } -void func_8012C28C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x19]); +void Gfx_SetupDL25_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_25]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C2B4(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x47]); +Gfx* Gfx_SetupDL71(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_71]); return gfx; } -void func_8012C2DC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]); +void Gfx_SetupDL25_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_25]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C304(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x48]); +Gfx* Gfx_SetupDL72(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_72]); return gfx; } -void func_8012C32C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x1F]); +void Gfx_SetupDL31_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_31]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C354(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x20]); +void Gfx_SetupDL32_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_32]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C37C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x21]); +void Gfx_SetupDL33_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_33]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C3A4(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x40]); +Gfx* Gfx_SetupDL64(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_64]); return gfx; } -Gfx* func_8012C3CC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x22]); +Gfx* Gfx_SetupDL34(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_34]); return gfx; } -void func_8012C3F4(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C3CC(gfxCtx->polyOpa.p); +void Gfx_SetupDL34_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL34(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C420(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x23]); +void Gfx_SetupDL35_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_35]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C448(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x2C]); +void Gfx_SetupDL44_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_44]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C470(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x24]); +void Gfx_SetupDL36_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_36]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C498(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x1C]); +Gfx* Gfx_SetupDL28(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_28]); return gfx; } -void func_8012C4C0(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x1C]); +void Gfx_SetupDL28_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_28]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C4E8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2B]); +void Gfx_SetupDL43_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_43]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C510(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2D]); +void Gfx_SetupDL45_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_45]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C538(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->overlay.p++, &sSetupDL[6 * 0x2E]); +void Gfx_SetupDL46_Overlay(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(OVERLAY_DISP++, gSetupDLs[SETUPDL_46]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C560(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x26]); +void Gfx_SetupDL38_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_38]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C588(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x4]); +void Gfx_SetupDL4_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_4]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C5B0(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x25]); +void Gfx_SetupDL37_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_37]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C5D8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2]); +void Gfx_SetupDL2_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_2]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C600(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x27]); +Gfx* Gfx_SetupDL39(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_39]); return gfx; } -void func_8012C628(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C600(gfxCtx->polyOpa.p); +void Gfx_SetupDL39_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL39(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C654(GraphicsContext* gfxCtx) { - gfxCtx->overlay.p = func_8012C600(gfxCtx->overlay.p); +void Gfx_SetupDL39_Overlay(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + OVERLAY_DISP = Gfx_SetupDL39(OVERLAY_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C680(Gfx** gfxp) { +void Gfx_SetupDL39_Ptr(Gfx** gfxp) { Gfx* gfx = *gfxp; - gSPDisplayList(gfx++, &sSetupDL[6 * 0x27]); + + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_39]); *gfxp = gfx; } -void func_8012C6AC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x28]); +void Gfx_SetupDL40_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_40]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C6D4(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x29]); +void Gfx_SetupDL41_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_41]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C6FC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x2F]); +void Gfx_SetupDL47_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_47]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C724(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x42]); +Gfx* Gfx_SetupDL66(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_66]); return gfx; } -Gfx* func_8012C74C(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x43]); +Gfx* Gfx_SetupDL67(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_67]); return gfx; } -Gfx* func_8012C774(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x44]); +Gfx* Gfx_SetupDL68_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_68]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -Gfx* func_8012C7B8(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x45]); +Gfx* Gfx_SetupDL69_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_69]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -Gfx* func_8012C7FC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x41]); +Gfx* Gfx_SetupDL65_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_65]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -Gfx* func_8012C840(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x46]); +Gfx* Gfx_SetupDL70(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_70]); return gfx; } -Gfx* func_8012C868(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x14]); +Gfx* Gfx_SetupDL20_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_20]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -void func_8012C8AC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2A]); +void Gfx_SetupDL42_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_42]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C8D4(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->overlay.p++, &sSetupDL[6 * 0x2A]); +void Gfx_SetupDL42_Overlay(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(OVERLAY_DISP++, gSetupDLs[SETUPDL_42]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C8FC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x30]); +void Gfx_SetupDL48_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_48]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C924(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x31]); +void Gfx_SetupDL49_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_49]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C94C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x1B]); +void Gfx_SetupDL27_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_27]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C974(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x3C]); - gDPSetColorDither(gfxCtx->polyXlu.p++, G_CD_DISABLE); +void Gfx_SetupDL60_XluNoCD(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_60]); + gDPSetColorDither(POLY_XLU_DISP++, G_CD_DISABLE); + + CLOSE_DISPS(gfxCtx); } -void func_8012C9BC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x3D]); +void Gfx_SetupDL61_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_61]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C9E4(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x38]); +void Gfx_SetupDL56_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_56]); + + CLOSE_DISPS(gfxCtx); } -void func_8012CA0C(Gfx** gfxp) { +void Gfx_SetupDL56_Ptr(Gfx** gfxp) { Gfx* gfx = *gfxp; - gSPDisplayList(gfx++, &sSetupDL[6 * 0x38]); + + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_56]); *gfxp = gfx; } -void func_8012CA38(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x3B]); +void Gfx_SetupDL59_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_59]); + + CLOSE_DISPS(gfxCtx); } Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height) { diff --git a/src/code/z_room.c b/src/code/z_room.c index 9fb21dfa2..89cf47935 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -25,7 +25,7 @@ void Room_DrawNormal(PlayState* play, Room* room, u32 flags) { if (flags & ROOM_DRAW_XLU) { func_800BCC68(&sZeroVec, play); gSPSegment(POLY_XLU_DISP++, 0x03, room->segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } @@ -95,7 +95,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { if (play->roomCtx.unk74 != NULL) { gSPSegment(POLY_XLU_DISP++, 0x06, play->roomCtx.unk74); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } @@ -317,7 +317,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) { gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); if (drawOpa) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, entry->opa); } @@ -347,7 +347,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) { if (drawXlu) { gSPSegment(POLY_XLU_DISP++, 0x03, room->segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, entry->xlu); } @@ -416,7 +416,7 @@ void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) { gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); if (drawOpa) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, dListsEntry->opa); } @@ -445,7 +445,7 @@ void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) { if (drawXlu) { gSPSegment(POLY_XLU_DISP++, 0x03, room->segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, dListsEntry->xlu); } diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index d19253df5..09897fbb9 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -994,7 +994,7 @@ void SubS_DrawShadowTex(Actor* actor, GameState* gameState, u8* tex) { OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 100); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); Matrix_Translate(actor->world.pos.x, 0.0f, actor->world.pos.z, MTXMODE_NEW); diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c index 489f596e5..656f6cad3 100644 --- a/src/code/z_vr_box_draw.c +++ b/src/code/z_vr_box_draw.c @@ -23,7 +23,7 @@ void Skybox_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 void Skybox_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z) { OPEN_DISPS(gfxCtx); - func_8012C6AC(gfxCtx); + Gfx_SetupDL40_Opa(gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->paletteStaticSegment); gSPTexture(POLY_OPA_DISP++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON); diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index 49525c864..e06d51313 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -315,7 +315,7 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) { Matrix_MultVec3f(&D_808C1C4C, &sp50); } func_80126440(play, &this->collider, &this->weaponInfo, &sp5C, &sp50); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_80122868(play, player); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 c356a5f17..7af684201 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -256,7 +256,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) { Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); if (this->screenFillIntensity > 0.0f) { - POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (s32)(this->screenFillIntensity * 40.0f) & 0xFF, 0, 0, (s32)(150.0f * this->screenFillIntensity) & 0xFF); @@ -266,7 +266,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, D_0E000000.fillRect); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 200, 0, this->alpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128); 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 62c97ccde..83c37fa6c 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -204,7 +204,7 @@ void ArrowIce_Draw(Actor* thisx, PlayState* play) { // Draw blue effect over the screen when arrow hits if (this->blueingEffectMagnitude > 0.0f) { - POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(this->blueingEffectMagnitude * 10.0f) & 0xFF, (s32)(50.0f * this->blueingEffectMagnitude) & 0xFF, (s32)(150.0f * this->blueingEffectMagnitude) & 0xFF); @@ -214,7 +214,7 @@ void ArrowIce_Draw(Actor* thisx, PlayState* play) { } // Draw ice on the arrow - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 170, 255, 255, (s32)(this->alpha * 0.5f) & 0xFF); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 128); Matrix_RotateZYX(0x4000, 0, 0, MTXMODE_APPLY); 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 360afa4ac..b650533da 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -196,7 +196,7 @@ void ArrowLight_Draw(Actor* thisx, PlayState* play) { Matrix_RotateZS(transform->shape.rot.z, MTXMODE_APPLY); Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); if (this->screenFillIntensity > 0.0f) { - POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (s32)(this->screenFillIntensity * 30.0f) & 0xFF, (s32)(40.0f * this->screenFillIntensity) & 0xFF, 0, (s32)(150.0f * this->screenFillIntensity) & 0xFF); @@ -205,7 +205,7 @@ void ArrowLight_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, D_0E000000.fillRect); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 170, this->alpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 128); 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 59348962a..18e2eb5d0 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 @@ -203,7 +203,7 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); opa = POLY_OPA_DISP; - gSPDisplayList(&opa[0], &sSetupDL[25 * 6]); + gSPDisplayList(&opa[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&opa[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&opa[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&opa[3], object_astr_obj_DL_002380); @@ -215,7 +215,7 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); xlu = POLY_XLU_DISP; - gSPDisplayList(&xlu[0], &sSetupDL[25 * 6]); + gSPDisplayList(&xlu[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&xlu[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&xlu[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&xlu[3], object_astr_obj_DL_0022E0); diff --git a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c index a5168eb24..f1394a32e 100644 --- a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c +++ b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c @@ -95,7 +95,7 @@ void BgBotihasira_Update(Actor* thisx, PlayState* play2) { void BgBotihasira_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_botihasira_DL_000638); 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 be9413567..ef35a34ed 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -354,7 +354,7 @@ void func_808B7B54(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -422,14 +422,14 @@ void BgBreakwall_Draw(Actor* thisx, PlayState* play) { } if (temp_s2->unk_04 != NULL) { - func_8012C28C(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++, temp_s2->unk_04); } if (temp_s2->unk_08 != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, temp_s2->unk_08); diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c index adf9b3c96..22998a34e 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c @@ -191,10 +191,10 @@ void BgCtowerGear_Draw(Actor* thisx, PlayState* play) { void BgCtowerGear_DrawOrgan(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gClockTowerOrganDL); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gClockTowerOrganPipesDL); CLOSE_DISPS(play->state.gfxCtx); 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 2a59a9b8f..79ed63188 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 @@ -663,7 +663,7 @@ void BgDblueBalance_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetEnvColor(gfx++, 0, 0, 0, this->unk_183); gSPDisplayList(gfx++, gGreatBayTempleObjectSeesawSplashDL); @@ -705,7 +705,7 @@ void func_80B83758(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0, ptr = &this->unk_188[0]; i < ARRAY_COUNT(this->unk_188); i++, ptr++) { if (ptr->unk_0E != 0) { 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 570369f07..de7e7eb32 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 @@ -752,7 +752,7 @@ void func_80A2B308(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, this->opaDList); @@ -778,7 +778,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { } if ((this->opaDList != NULL) || (this->unk_160 == 6)) { - gfx2 = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + gfx2 = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&gfx2[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -797,7 +797,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { } if (this->xluDList != NULL) { - gfx = func_8012C2B4(POLY_XLU_DISP); + gfx = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&gfx[1], this->xluDList); @@ -820,7 +820,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_APPLY); Matrix_RotateXS(this->dyna.actor.shape.rot.x, MTXMODE_APPLY); Matrix_RotateZS(this->dyna.actor.shape.rot.z, MTXMODE_APPLY); - gfx = func_8012C2B4(POLY_XLU_DISP); + gfx = Gfx_SetupDL71(POLY_XLU_DISP); for (i = 0; i < ARRAY_COUNT(this->unk_1D8[0]); i++) { for (j = 0; j < ARRAY_COUNT(this->unk_1D8); j++) { 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 db2c79e39..d0d0f0c3c 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 @@ -590,7 +590,7 @@ void BgDblueWaterfall_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -609,7 +609,7 @@ void BgDblueWaterfall_Draw(Actor* thisx, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x9B, 255, 255, 255, this->unk_19F); gSPDisplayList(POLY_XLU_DISP++, gGreatBayTempleObjectIceStalactiteDL); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x9B, 255, 255, 255, 255); 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 e9f8916d0..70bc5931f 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 @@ -200,7 +200,7 @@ void BgDkjailIvy_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0xFF, 255, 255, 255, this->alpha); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c index 40b8c78a7..e15c87f42 100644 --- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c +++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c @@ -205,7 +205,7 @@ void BgFireWall_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sFlameTextures[this->texIndex])); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x01, 255, 255, 0, 150); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 255); diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c index bec649b57..7b63081c0 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c +++ b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c @@ -77,7 +77,7 @@ void BgFuKaiten_Update(Actor* thisx, PlayState* play) { void BgFuKaiten_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_fu_kaiten_DL_0005D0); diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c index 7f485be1d..9da3cc5f6 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c +++ b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c @@ -87,7 +87,7 @@ void BgFuMizu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_fu_kaiten_DL_002FC0); diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c index 7d0ed6a1a..fd46e16e5 100644 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c +++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c @@ -183,10 +183,12 @@ void BgGoronOyu_Update(Actor* thisx, PlayState* play) { void BgGoronOyu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_oyu_Matanimheader_000968)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000158); gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000080); + CLOSE_DISPS(play->state.gfxCtx); } 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 7cd94bd86..10f045617 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 @@ -126,7 +126,7 @@ void BgHakuginElvpole_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, object_hakugin_obj_DL_00ACB8); CLOSE_DISPS(play->state.gfxCtx); 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 c784c1318..7bddd548f 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 @@ -1012,7 +1012,7 @@ void func_80A9D61C(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); 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); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c index 401d3543e..93d605320 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c @@ -375,7 +375,7 @@ void func_80B7F564(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_DrawStep(play, this->unk_15C, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c index 5fc28c5a5..02ba3b1f4 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c @@ -380,8 +380,9 @@ void BgIkanaMirror_Draw(Actor* thisx, PlayState* play) { BgIkanaMirror* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(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++, gStoneTowerTempleMirrorDL); 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 36f8e94fc..07968e801 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c @@ -150,7 +150,7 @@ void BgIkninside_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, object_ikninside_obj_DL_00CC78); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c index 2c24a5580..84bdc4169 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c @@ -172,8 +172,8 @@ void BgIknvDoukutu_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_00DDD8); @@ -205,9 +205,9 @@ void func_80BD7538(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 1, 2); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(255.0f * sp54)); gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_00DDD8); @@ -226,7 +226,7 @@ void func_80BD7768(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_010D98); @@ -243,7 +243,7 @@ void func_80BD7820(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_012700); @@ -261,7 +261,7 @@ void func_80BD78C4(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, (s32)(140.0f * sp30)); diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c index cca6b17ee..de6be9266 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c @@ -211,8 +211,10 @@ void BgIknvObj_Draw(Actor* thisx, PlayState* play) { BgIknvObj* this = THIS; OPEN_DISPS(play->state.gfxCtx); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->displayListPtr); + CLOSE_DISPS(play->state.gfxCtx); } 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 502b29086..3129d9411 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -384,7 +384,7 @@ void BgIngate_Update(Actor* thisx, PlayState* play) { void BgIngate_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gSichitaiBoat); 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 282a43925..ff0227f70 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 @@ -94,7 +94,7 @@ void BgKeikokuSaku_Update(Actor* thisx, PlayState* play) { void BgKeikokuSaku_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_001640); 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 208babf77..63e7b5974 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -143,7 +143,7 @@ void BgLadder_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; } - gSPDisplayList(&gfx[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha); gSPMatrix(&gfx[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&gfx[3], sLadderDLists[this->dyna.actor.params]); 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 3a11a2fdf..2e924efd3 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 @@ -383,7 +383,7 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gWoodenFlowerStalkDL); diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c index 275b1b565..ffb260bf3 100644 --- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c +++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c @@ -66,7 +66,7 @@ void BgOpenSpot_Draw(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, this->texScrolls); OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER); gSPDisplayList(POLY_XLU_DISP++, gSpotlightLeftDL); 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 0ebae5c1e..fa80cbf90 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -496,7 +496,7 @@ void BgSpdweb_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); if (thisx->params == BGSPDWEB_FF_1) { gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c index fdf56d87c..9349b8188 100644 --- a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c +++ b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c @@ -189,7 +189,7 @@ void BgSpoutFire_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - gfx = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + gfx = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); POLY_XLU_DISP = gfx; gSPSegment(&gfx[0], 0x08, sFlameTextures[this->flameTexIndex]); gDPSetPrimColor(&gfx[1], 0, 1, 255, 255, 0, 150); diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index 2eb95f6bb..920842b0b 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -98,7 +98,7 @@ void BgTobira01_Update(Actor* thisx, PlayState* play) { void BgTobira01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gGoronDoorDL); 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 eae9fe0b3..76889e41e 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -1349,7 +1349,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actor.params == 0) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldRedSkinTex)); @@ -1521,8 +1521,8 @@ void Boss02_DrawEffects(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) { if (effect->type == TWINMOLD_EFFECT_SAND) { 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 c8ceed19b..a9096048a 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2263,7 +2263,7 @@ void Boss03_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (!this->unk_2D5) { if ((this->unk_25E % 2) != 0) { @@ -2394,8 +2394,8 @@ void Boss03_DrawEffects(PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); for (i = 0; i < GYORG_EFFECT_COUNT; i++, eff++) { if (eff->type == GYORG_EFFECT_BUBBLE) { @@ -2426,7 +2426,7 @@ void Boss03_DrawEffects(PlayState* play) { if ((eff->type == GYORG_EFFECT_DROPLET) || (eff->type == GYORG_EFFECT_SPLASH)) { if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gSPDisplayList(POLY_XLU_DISP++, object_water_effect_DL_004260); @@ -2460,7 +2460,7 @@ void Boss03_DrawEffects(PlayState* play) { for (i = 0; i < GYORG_EFFECT_COUNT; i++, eff++) { if (eff->type == GYORG_EFFECT_WET_SPOT) { if (!flag) { - func_8012C448(gfxCtx); + Gfx_SetupDL44_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0); @@ -2597,7 +2597,7 @@ void Boss03_SeaweedDraw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x0D, mtx); 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 80fc52a22..bf250ca18 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -818,7 +818,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_200 & 1) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099); @@ -832,7 +832,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); if (this->actionFunc != func_809EC568) { - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150); gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL); 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 3d8beb79d..aa6291aae 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -516,8 +516,8 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); temp_v0 = gSaveContext.save.time; if (temp_v0 > CLOCK_TIME(12, 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 cb34f8ff8..cba240947 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -258,7 +258,7 @@ s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* t OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255); @@ -284,7 +284,7 @@ void func_808CDFF8(Actor* thisx, PlayState* play) { OPEN_DISPS(gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 25); + 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); @@ -299,7 +299,7 @@ void func_808CE078(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255); 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 629f49398..1ee2b1c9d 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -506,7 +506,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) { if (!(play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER)) { OPEN_DISPS(play->state.gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); @@ -598,7 +598,8 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(gfxCtx); - func_8012C2DC(gfxCtx); + + Gfx_SetupDL25_Xlu(gfxCtx); for (i = 0; i < play->envCtx.unk_F2[3]; i++) { worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x; 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 111ce284f..2d0aa27cd 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -487,7 +487,7 @@ void func_80C173B4(Actor* thisx, PlayState* play) { mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_144.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); func_8018450C(play, &this->unk_144, mtx, (void*)func_80C170F8, 0, &this->actor); } @@ -514,7 +514,7 @@ void DemoSyoten_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->unk_3E4 & 4) { Matrix_RotateZS(-this->actor.shape.rot.z, MTXMODE_APPLY); @@ -553,7 +553,7 @@ void func_80C17690(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY); if (this->unk_3E4 & 8) { 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 b2b8e0077..56bc60a4d 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 @@ -168,10 +168,12 @@ void DemoTreLgt_Draw(Actor* thisx, PlayState* play) { DemoTreLgt* this = THIS; OPEN_DISPS(gfxCtx); + if (this->action == DEMO_TRE_LGT_ACTION_ANIMATE) { - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 200, 255, 0, 0); SkelCurve_Draw(&this->actor, play, &this->skelCurve, DemoTreLgt_OverrideLimbDraw, NULL, 1, &this->actor); } + CLOSE_DISPS(gfxCtx); } 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 12815a044..721d1de60 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -245,7 +245,7 @@ void DmAh_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1DE28[this->unk_284])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1DE20[0])); 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 43ca006f2..a7e3e4993 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -152,7 +152,7 @@ void DmAl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmAl_OverrideLimbDraw, DmAl_PostLimbDraw, DmAl_TransformLimbDraw, &this->actor); 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 2d474d111..2d8175bda 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -356,7 +356,7 @@ void func_80C1D0B0(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1D2F4[this->unk_2B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1D2E8[0])); 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 9e5ffed89..c6d93945b 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -195,9 +195,11 @@ void DmBal_Draw(Actor* thisx, PlayState* play) { DmBal* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmBal_OverrideLimbDraw, DmBal_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index 8657a9dc9..fe4a83a91 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -922,7 +922,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C94C(play->state.gfxCtx); + Gfx_SetupDL27_Xlu(play->state.gfxCtx); do { phi_a0 = (this->unk_262 * 50) & 511; 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 7b700f4eb..767d4c827 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -423,7 +423,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if ((u8)this->unk_348 == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gDPPipeSync(POLY_OPA_DISP++); @@ -435,7 +435,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gWoodfallSceneryDynamicPoisonWaterDL); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); gDPPipeSync(POLY_XLU_DISP++); @@ -482,7 +482,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPPipeSync(POLY_XLU_DISP++); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)this->unk_348); diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index ec1e12a8f..f49820f03 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -185,7 +185,7 @@ void DmChar02_Draw(Actor* thisx, PlayState* play) { } if (shouldDraw) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmChar02_OverrideLimbDraw, DmChar02_PostLimbDraw, DmChar02_TransformLimbDraw, &this->actor); 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 21b9f94df..aa3a8b0e6 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -165,7 +165,7 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) { if (!this->unk_18E) { if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id != 1)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmChar03_OverrideLimbDraw, DmChar03_PostLimbDraw, DmChar03_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c index ac479344d..3375b522d 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c @@ -136,7 +136,7 @@ void DmChar04_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C94C(play->state.gfxCtx); + Gfx_SetupDL27_Xlu(play->state.gfxCtx); alpha = (this->timer * 50) & 0x1FF; if (alpha > 255) { alpha = 511 - alpha; 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 6b85df5d3..e3dcec911 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -611,7 +611,7 @@ void func_80AAD998(Actor* thisx, PlayState* play) { (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id != 1)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, this->unk_19C, this->unk_1A0, this->unk_1A4, this->unk_1A8, this->unk_1AC, this->unk_1B0); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, @@ -630,7 +630,7 @@ void func_80AADA90(Actor* thisx, PlayState* play) { if (this->unk_18E == 0) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id != 1)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, DmChar05_PostLimbDraw, &this->actor); } @@ -645,7 +645,7 @@ void func_80AADB4C(Actor* thisx, PlayState* play) { if (this->unk_18E == 0) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id != 1)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } @@ -663,7 +663,7 @@ void func_80AADC00(Actor* thisx, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559); if ((play->csCtx.actorCues[cueChannel]->id != 1) && (play->csCtx.actorCues[cueChannel]->id != 4)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, DmChar05_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c index 747b2e0c9..591249c77 100644 --- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c +++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c @@ -78,7 +78,7 @@ void DmChar06_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 1, 2); gDPPipeSync(POLY_XLU_DISP++); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); diff --git a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c index 844be223e..c5c06958e 100644 --- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c +++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c @@ -75,7 +75,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); switch (this->dyna.actor.params) { case DMCHAR07_STAGE: @@ -112,7 +112,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { break; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); switch (this->dyna.actor.params) { case DMCHAR07_STAGE: 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 35611375b..9bd85db3a 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -1093,7 +1093,8 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) { DmChar08* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex])); @@ -1113,11 +1114,12 @@ void DmChar08_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++, gTurtleAsleepDL); } else if (this->unk_1FF == 1) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 2, 2); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gTurtleAsleepDL); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 93fa0e94c..0f53193d1 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -218,8 +218,8 @@ void DmChar09_Draw(Actor* thisx, PlayState* play) { DmChar09* this = THIS; if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar09_OverrideLimbDraw, NULL, &this->actor); } 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 2cdddbf19..9f8cd237f 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -356,7 +356,7 @@ void func_80C25000(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C25244[this->unk_2B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C25238[0])); 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 c42ad3c2b..0eb622b49 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -96,7 +96,7 @@ void DmNb_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { void DmNb_Draw(Actor* thisx, PlayState* play) { DmNb* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, DmNb_TransformLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c index dc6d8bcef..83f635777 100644 --- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c +++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c @@ -108,7 +108,7 @@ void DmSa_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->alpha < 0xFF) { gSPSegment(POLY_OPA_DISP++, 0x0C, func_80A2EB58(play->state.gfxCtx, this->alpha)); 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 9a9e14dbc..66f70d9c6 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -2033,10 +2033,10 @@ void DmStk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); this->alpha = this->alpha; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->alpha < 255) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 1, 2); gDPPipeSync(POLY_XLU_DISP++); 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 4d2b4a54a..e875d8ab8 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -289,7 +289,7 @@ void DmZl_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTextureIndex])); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmZl_OverrideLimbDraw, DmZl_PostLimbDraw, &this->actor); 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 eac8b10ab..e7eba8fa2 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -689,7 +689,7 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_164 == 7) { Matrix_Translate(0.0f, 64.96f, 0.0f, MTXMODE_APPLY); 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 0b4b59f1c..64899a807 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -931,7 +931,7 @@ void func_808BACCC(DoorWarp1* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0xFF, 200, 255, 255, (u8)this->unk_1B8); gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, (u8)this->unk_1B8); @@ -969,7 +969,7 @@ void func_808BAE9C(DoorWarp1* this, PlayState* play) { sp84 = 1.0f - ((2.0f - this->unk_1A4) / 1.7f); this->unk_1AC += sp84 * 15.0f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255.0f * sp84, 255, 255, (u8)this->unk_1B4); gDPSetEnvColor(POLY_XLU_DISP++, 0, 255.0f * sp84, 255, 255); @@ -1059,7 +1059,7 @@ void func_808BB4F4(DoorWarp1* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, sp64[sp60].r, sp64[sp60].g, sp64[sp60].b, 255); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); @@ -1076,7 +1076,7 @@ void func_808BB4F4(DoorWarp1* this, PlayState* play2) { Matrix_RotateYS(this->dyna.actor.world.rot.y, MTXMODE_APPLY); Matrix_Scale(1.0f, 0.0f, 1.0f, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, sp64[sp60].r, sp64[sp60].g, sp64[sp60].b, 255); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->unk_203); 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 65fb8da2f..bc95d4312 100644 --- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c +++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c @@ -133,7 +133,7 @@ void EffChange_Draw(Actor* thisx, PlayState* play) { mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index 02dad6c0c..0cf8d76d1 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -268,7 +268,8 @@ void func_80919768(Actor* thisx, PlayState* play2) { sp92 = Math_Vec3f_Yaw(&activeCamEye, &thisx->world.pos); OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); + + Gfx_SetupDL25_Opa(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); @@ -318,7 +319,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); 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 03123fedc..d45d669a7 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 @@ -159,7 +159,7 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(6.0f, 5.0f, 5.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); AnimatedMat_Draw(play, D_80BCF1C4); diff --git a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c index 2b1c01c59..3a57149a7 100644 --- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c +++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c @@ -79,7 +79,7 @@ void EffZoraband_Draw(Actor* thisx, PlayState* play2) { if (this->alpha != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_zoraband_Matanimheader_000F38)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 d9fbeb6f0..61f493b83 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -619,7 +619,7 @@ void EnAh_Draw(Actor* thisx, PlayState* play) { if (this->unk_1DC != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BD3F14[this->unk_2FA])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80BD3F0C[this->unk_2FC])); 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 41dba0aab..839022d2c 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -1705,7 +1705,7 @@ void EnAkindonuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx void EnAkindonuts_Draw(Actor* thisx, PlayState* play) { EnAkindonuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnAkindonuts_OverrideLimbDraw, EnAkindonuts_PostLimbDraw, EnAkindonuts_TransformLimbDraw, &this->actor); 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 87b83e670..0bbb53686 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -907,7 +907,7 @@ void EnAl_Draw(Actor* thisx, PlayState* play) { if (this->unk_35C != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(0.0f, 0.0f, 850.0f, MTXMODE_APPLY); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnAl_OverrideLimbDraw, EnAl_PostLimbDraw, 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 261b47bd4..b6d32f6ec 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -564,13 +564,15 @@ void EnAm_Draw(Actor* thisx, PlayState* play) { EnAm* this = THIS; OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 0, 0, 0, this->textureBlend); POLY_OPA_DISP = &gfx[2]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnAm_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); + CLOSE_DISPS(play->state.gfxCtx); } 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 c1f229751..d3c9adcec 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.c +++ b/src/overlays/actors/ovl_En_And/z_en_and.c @@ -179,7 +179,7 @@ void EnAnd_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[0])); 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 d978d8380..90d31b601 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -345,7 +345,7 @@ void EnAni_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Matrix_Translate(0.0f, 0.0f, -1000.0f, MTXMODE_APPLY); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); 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 45a413c26..64adaa49b 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 @@ -1215,7 +1215,7 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); @@ -1226,7 +1226,7 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) { EnAob01_TransformLimbDraw, &this->actor); if (this->actor.draw != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos = this->actor.world.pos; scale.x = 0.5f; scale.y = 0.5f; diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index aff4a9de6..e4a83a6d0 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -642,7 +642,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { s32 phi_v0; if (ARROW_IS_ARROW(this->actor.params)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawLod(play, this->arrow.skelAnime.skeleton, this->arrow.skelAnime.jointTable, NULL, NULL, &this->actor, this->actor.projectedPos.z < 160.0f ? 0 : 1); } else if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { @@ -699,7 +699,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C240(play->state.gfxCtx); + Gfx_SetupDL25_Xlu2(play->state.gfxCtx); gSPClearGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING); @@ -735,7 +735,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { } else if (this->actor.velocity.y != 0.0f) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 bb3e2f23a..5eb0d0351 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 @@ -446,7 +446,7 @@ s32 EnAttackNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve void EnAttackNiw_Draw(Actor* thisx, PlayState* play) { EnAttackNiw* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnAttackNiw_OverrideLimbDraw, NULL, &this->actor); } 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 1c2cdf533..96a4fed1c 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1784,7 +1784,9 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { EnAz* this = THIS; OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); + CLOSE_DISPS(play->state.gfxCtx); if (this->unk_374 & 2) { @@ -1806,7 +1808,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); Matrix_RotateXS(this->unk_39E, MTXMODE_APPLY); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->unk_374 & 2) { s32 i; Vec3f sp98; 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 5296260f9..e303fe1c5 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -810,7 +810,7 @@ void EnBaba_Draw(Actor* thisx, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_VISIBLE) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBbaEyeTex)); @@ -821,7 +821,7 @@ void EnBaba_Draw(Actor* thisx, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_DRAW_SHADOW) { if ((this->animIndex == BOMB_SHOP_LADY_ANIM_KNOCKED_OVER) || (this->animIndex == BOMB_SHOP_LADY_ANIM_LYING_DOWN)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos.x = this->actor.world.pos.x + 20.0f; pos.y = this->actor.world.pos.y; pos.z = this->actor.world.pos.z + 20.0f; 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 14f4112eb..df47a5f67 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -419,7 +419,7 @@ void EnBaguo_DrawBody(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gfx = POLY_OPA_DISP; @@ -496,7 +496,7 @@ void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); 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 5479d6c1e..7ff5da288 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -281,7 +281,7 @@ s32 EnBaisen_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f void EnBaisen_Draw(Actor* thisx, PlayState* play) { EnBaisen* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnBaisen_OverrideLimbDraw, NULL, &this->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 138b7287b..549a2c4bd 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -530,7 +530,7 @@ void EnBat_Draw(Actor* thisx, PlayState* play) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&gfx[2], gBadBatSetupDL); gSPDisplayList(&gfx[3], gBadBatBodyDL); 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 071515919..048fbfc95 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -682,14 +682,14 @@ void EnBb_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_OPA_DISP = &gfx[1]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnBb_OverrideLimbDraw, EnBb_PostLimbDraw, &this->actor); if (this->flameScaleX > 0.0f) { currentMatrixState = Matrix_GetCurrent(); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000), MTXMODE_APPLY); Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY); 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 b751a50d5..2653fb685 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 @@ -318,7 +318,7 @@ void EnBba01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 255, 255, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 55, 55, 255, 0)); gDPPipeSync(POLY_OPA_DISP++); 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 a1e2798df..11dace3a5 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -718,13 +718,13 @@ void EnBbfall_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_OPA_DISP = &gfx[1]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnBbfall_OverrideLimbDraw, EnBbfall_PostLimbDraw, &this->actor); if (this->flameOpacity > 0) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000), MTXMODE_APPLY); Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY); 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 f93d18bf5..c03cc005d 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -284,7 +284,7 @@ void EnBee_Update(Actor* thisx, PlayState* play) { void EnBee_Draw(Actor* thisx, PlayState* play) { EnBee* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); } 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 da6bc06a3..cdd7abee3 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -114,7 +114,7 @@ void EnBh_Update(Actor* thisx, PlayState* play) { void EnBh_Draw(Actor* thisx, PlayState* play) { EnBh* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateZS(this->unk1E2, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, NULL, &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 f331666d3..887fb68d5 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -660,7 +660,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { if ((this->actionFunc != EnBigokuta_PlayDeathEffects) || (this->timer != 0)) { Scene_SetRenderModeXlu(play, 0, 1); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, 255); POLY_OPA_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, @@ -668,7 +668,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { } else { Scene_SetRenderModeXlu(play, 1, 2); gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->picto.actor.scale.y * 7727.273f)); POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, 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 915bf85ba..a77733d31 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -790,7 +790,7 @@ void func_80A292A8(EnBigpamet* this, PlayState* play) { if (this->unk_2A2 > 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); @@ -834,7 +834,7 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80A29754[this->unk_29C]); @@ -874,7 +874,7 @@ void EnBigpamet_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s void func_80A2966C(Actor* thisx, PlayState* play) { EnBigpamet* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount, EnBigpamet_OverrideLimbDraw1, EnBigpamet_PostLimbDraw1, &this->actor); func_80A292A8(this, play); 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 f6061d096..06bcd3b84 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -1291,7 +1291,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) { if ((this->mainColor.a == 255) || (this->mainColor.a == 0)) { // fully visible OR fully transparent dispHead = POLY_OPA_DISP; - gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]); + gSPDisplayList(dispHead, gSetupDLs[SETUPDL_25]); gSPSegment(&dispHead[1], 0x0C, &D_801AEFA0); // empty display list for no transparency gSPSegment(&dispHead[2], 0x08, Gfx_EnvColor(play->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b, @@ -1301,7 +1301,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) { } else { dispHead = POLY_XLU_DISP; - gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]); + gSPDisplayList(dispHead, gSetupDLs[SETUPDL_25]); gSPSegment(&dispHead[1], 0x0C, &D_801AEF88); // transparency display list gSPSegment(&dispHead[2], 0x08, Gfx_EnvColor(play->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b, @@ -1330,7 +1330,7 @@ void EnBigpo_DrawScoopSoul(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (play->gameplayFrames * -15) % 512, 0x20, @@ -1382,7 +1382,7 @@ void EnBigpo_DrawLantern(Actor* thisx, PlayState* play) { dispHead = POLY_XLU_DISP; } - gSPDisplayList(&dispHead[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dispHead[0], gSetupDLs[SETUPDL_25]); gSPSegment(&dispHead[1], 0x0A, Gfx_EnvColor(play->state.gfxCtx, 160, 0, 255, this->mainColor.a)); @@ -1418,7 +1418,7 @@ void EnBigpo_DrawCircleFlames(Actor* thisx, PlayState* play) { mtfxPtr = Matrix_GetCurrent(); OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_NEW); if (this->actionFunc == EnBigpo_SpawnCutsceneStage6) { Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); @@ -1458,7 +1458,7 @@ void EnBigpo_RevealedFire(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (play->gameplayFrames * -20) % 512, 0x20, 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 3992cd02a..75e6fa38e 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -2884,7 +2884,8 @@ void EnBigslime_SetSysMatrix(Vec3f* pos, PlayState* play, Gfx* shadowDList, f32 zx = 1.0f - (yDistMinY * (1.0f / 1550.0f)); OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); sysMatrix->xx = zx; sysMatrix->yy = 1.0f; sysMatrix->zz = zx; @@ -2907,6 +2908,7 @@ void EnBigslime_SetSysMatrix(Vec3f* pos, PlayState* play, Gfx* shadowDList, f32 gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, (u8)(alpha * zx)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, shadowDList); + CLOSE_DISPS(play->state.gfxCtx); } @@ -2936,12 +2938,13 @@ void EnBigslime_DrawMinislime(EnBigslime* this, PlayState* play2) { } OPEN_DISPS(play->state.gfxCtx); + for (i = 0; i < MINISLIME_NUM_SPAWN; i++) { minislime = this->minislime[indices[i]]; lights = LightContext_NewLights(&play->lightCtx, play->state.gfxCtx); Lights_BindAll(lights, play->lightCtx.listHead, &minislime->actor.world.pos, play); Lights_Draw(lights, play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&minislime->actor, play, 0); Matrix_SetTranslateRotateYXZ(minislime->actor.world.pos.x, minislime->actor.world.pos.y, minislime->actor.world.pos.z, &minislime->actor.shape.rot); @@ -2963,6 +2966,7 @@ void EnBigslime_DrawMinislime(EnBigslime* this, PlayState* play2) { minislime->actor.scale.y * 400.0f, minislime->actor.shape.rot.y, minislime->actor.shape.shadowAlpha * (175.0f / 255.0f)); } + CLOSE_DISPS(play->state.gfxCtx); } @@ -2980,8 +2984,9 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { MtxF* billboardMtxF; s32 i; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); + OPEN_DISPS(play->state.gfxCtx); // Draw Bigslime @@ -3018,6 +3023,7 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gBigslimeBubbleDL); } } + CLOSE_DISPS(play->state.gfxCtx); EnBigslime_SetSysMatrix(&this->actor.world.pos, play, gBigslimeShadowDL, this->vtxScaleX, this->vtxScaleZ, @@ -3070,7 +3076,7 @@ void EnBigslime_DrawGekko(Actor* thisx, PlayState* play) { EnBigslime* this = THIS; s32 pad; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actionFunc == EnBigslime_DamageGekko) { func_800AE434(play, &gekkoDamageColor, this->damageSpinTimer, 20); } else if ((this->actionFunc == EnBigslime_CutsceneDefeat) || (this->actionFunc == EnBigslime_GekkoDespawn)) { @@ -3123,7 +3129,7 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); // Draw Shockwave if (this->shockwaveAlpha > 0) { 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 43e87a90a..745e3b3e7 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 @@ -434,9 +434,11 @@ void EnBji01_Draw(Actor* thisx, PlayState* play) { EnBji01* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnBji01_OverrideLimbDraw, EnBji01_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } 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 5ebfca40f..6aa9f9e35 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -456,7 +456,7 @@ void EnBjt_Draw(Actor* thisx, PlayState* play) { EnBjt* this = THIS; if (this->scheduleResult != TOILET_HAND_SCH_NONE) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 cb9c6e3ec..b388421b7 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -616,7 +616,7 @@ void EnBom_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->actor.params == BOMB_TYPE_BODY) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Collider_UpdateSpheres(0, &this->collider2); 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 ae45b0cc5..8d104842a 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 @@ -678,8 +678,8 @@ void EnBomBowlMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_809C6214[this->unk_2F0])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_809C6220[this->unk_2F4])); 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 8d2461649..4355759c7 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 @@ -542,7 +542,7 @@ void EnBomChu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); if (this->timer >= 40) { 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 b67ca6820..ef30692e6 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -249,15 +249,15 @@ void EnBombal_DrawEffects(EnBombal* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { if (sPtr->isEnabled != 0) { Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW); Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(&gSun1Tex)); 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 64f900f32..86cad7219 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -519,8 +519,8 @@ void EnBombers_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C0482C[this->unk_2B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C04838[this->unk_2BE])); 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 b47a9630f..81e8723e0 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -425,12 +425,12 @@ s32 func_80C056D4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s } void EnBombers2_Draw(Actor* thisx, PlayState* play) { - EnBombers2* this = THIS; + OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C05920)); gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(sSetPrimColorDlPtr)); 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 2493d819b..cc9ac1e2c 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -473,7 +473,7 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (ENBOMBF_GET(&this->actor) <= ENBOMBF_0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (ENBOMBF_GET(&this->actor) != ENBOMBF_0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 aad6d9bc3..8260386df 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -1098,8 +1098,8 @@ void EnBomjima_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C00B3C[this->unk_2E0])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C00B48[this->unk_2E4])); 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 7cc78d9cf..3c0f0da54 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -912,8 +912,8 @@ void EnBomjimb_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C03274[this->unk_2C2])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C03280[this->unk_2C8])); 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 eacaa3dce..e18751369 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -336,7 +336,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) { EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &sp4C, &sp40); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateYS(this->unk_1CD * 0x2EE0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 302547c26..a32f2f410 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -143,7 +143,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { Matrix_Scale(temp_f26, temp_f26, temp_f26, MTXMODE_APPLY); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); @@ -704,12 +704,12 @@ void EnBox_Draw(Actor* thisx, PlayState* play) { gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, EnBox_SetRenderMode1(play->state.gfxCtx)); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnBox_PostLimbDraw, &this->dyna.actor, POLY_OPA_DISP); } else if (this->alpha != 0) { gDPPipeSync(POLY_XLU_DISP++); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); if ((this->type == ENBOX_TYPE_BIG_INVISIBLE) || (this->type == ENBOX_TYPE_SMALL_INVISIBLE)) { gSPSegment(POLY_XLU_DISP++, 0x08, EnBox_SetRenderMode3(play->state.gfxCtx)); 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 1c0c2cfc4..92d56eec5 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -405,7 +405,7 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->actionFunc != EnBubble_Disappear) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Math_SmoothStepToF(&this->modelRotSpeed, 16.0f, 0.2f, 1000.0f, 0.0f); Math_SmoothStepToF(&this->modelEllipticity, 0.08f, 0.2f, 1000.0f, 0.0f); Matrix_ReplaceRotation(&play->billboardMtxF); diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index 4055399e2..ce859ad53 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -139,7 +139,7 @@ void func_8091C178(EnButte* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C240(play->state.gfxCtx); + Gfx_SetupDL25_Xlu2(play->state.gfxCtx); sp48 = Math_SinS(D_8091D3A0) * 250.0f; sp48 = CLAMP(sp48, 0, 255); @@ -446,7 +446,7 @@ void EnButte_Draw(Actor* thisx, PlayState* play) { EnButte* this = THIS; if (this->unk_250 != 0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); } 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 21278af9f..7666f8e12 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 @@ -807,8 +807,9 @@ void EnClearTag_DrawEffects(Actor* thisx, PlayState* play) { EnClearTagEffect* firstEffect = this->effect; OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); // Draw all Debris effects. for (i = 0; i < ARRAY_COUNT(this->effect); i++, effect++) { @@ -981,7 +982,7 @@ void EnClearTag_DrawEffects(Actor* thisx, PlayState* play) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 200); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 200); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sWaterSplashTextures[effect->actionTimer])); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BACK); isMaterialApplied++; 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 7fc741ebe..8d841fdd2 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 @@ -310,7 +310,7 @@ void EnCne01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x0A, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0)); 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 def6dd27a..703585dd4 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 @@ -234,45 +234,56 @@ void func_80AFE414(Actor* thisx, PlayState* play) { EnColMan* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gHeartPieceInteriorDL); + CLOSE_DISPS(play->state.gfxCtx); } void func_80AFE4AC(Actor* thisx, PlayState* play) { EnColMan* this = THIS; - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); + CLOSE_DISPS(play->state.gfxCtx); } void func_80AFE584(Actor* thisx, PlayState* play) { - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + 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); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30); + CLOSE_DISPS(play->state.gfxCtx); } void func_80AFE650(Actor* thisx, PlayState* play) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropBombTex)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); + CLOSE_DISPS(play->state.gfxCtx); } 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 beed3fb26..677c029cb 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -421,7 +421,7 @@ void EnCow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnCow_Draw(Actor* thisx, PlayState* play) { EnCow* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnCow_OverrideLimbDraw, EnCow_PostLimbDraw, &this->actor); } @@ -429,7 +429,7 @@ void EnCow_Draw(Actor* thisx, PlayState* play) { void EnCow_DrawTail(Actor* thisx, PlayState* play) { EnCow* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 3238069cc..f524e6d5e 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -574,7 +574,7 @@ void EnCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot void EnCrow_Draw(Actor* thisx, PlayState* play) { EnCrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnCrow_OverrideLimbDraw, EnCrow_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 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 7b3f97ded..25013327a 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -62,7 +62,7 @@ void func_80B3E168(EnDaiEffect* effect, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < EN_DAI_EFFECT_COUNT; i++, effect++) { if (effect->isEnabled == true) { @@ -649,7 +649,7 @@ void func_80B3F78C(EnDai* this, PlayState* play) { this->unk_1CE &= ~0x40; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -683,7 +683,7 @@ void func_80B3F920(EnDai* this, PlayState* play) { this->unk_1CE |= 0x40; if (this->unk_1CD == 0xFF) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -701,7 +701,7 @@ void func_80B3F920(EnDai* this, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); 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 b988155c7..558824ad8 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -324,7 +324,7 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); switch (this->unk_278) { case 0: 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 d8a8a78e8..be45cfac6 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -466,7 +466,7 @@ void EnDaiku2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (limbIndex == 14) { Matrix_Scale(this->unk_260, this->unk_260, this->unk_260, MTXMODE_APPLY); @@ -486,7 +486,7 @@ void EnDaiku2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnDaiku2_PostLimbDraw, &this->actor); @@ -544,7 +544,7 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_BOMBIWA); if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) { 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 e969abffa..186494268 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -1319,7 +1319,7 @@ void EnDekubaba_DrawShadow(EnDekubaba* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255); @@ -1347,7 +1347,7 @@ void EnDekubaba_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Math_Vec3f_Copy(&this->bodyPartsPos[0], &this->actor.world.pos); if (this->actionFunc != EnDekubaba_DeadStickDrop) { 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 986953d0f..5b5857c94 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 @@ -188,7 +188,7 @@ s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V void EnDemoheishi_Draw(Actor* thisx, PlayState* play) { EnDemoheishi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnDemoheishi_OverrideLimbDraw, NULL, &this->actor); } 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 8a6ae63e8..0c84f91bc 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -1379,7 +1379,7 @@ void EnDg_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); 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 8446ff413..5b268f1f8 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -1475,7 +1475,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->unk_288 == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPSegment(POLY_OPA_DISP++, 0x08, D_8089E33C[this->unk_289]); @@ -1486,7 +1486,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, func_8089DC4C, func_8089DC84, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPSegment(POLY_XLU_DISP++, 0x08, D_8089E33C[this->unk_289]); diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c index 8edd1b580..2a5198d1f 100644 --- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c +++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c @@ -156,7 +156,7 @@ void func_80A50510(EnDnb* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++) { Matrix_Push(); @@ -180,7 +180,7 @@ void func_80A5063C(EnDnb* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++) { Matrix_Push(); @@ -263,12 +263,12 @@ s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 256; i++, arg0++) { if (arg0->isEnabled == 1) { if (!isGfxSetup) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); isGfxSetup = true; 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 7d59ebeec..216ca0031 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -334,7 +334,7 @@ void func_80A51CB8(EnDnk* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A5245C[this->unk_2A0])); gDPPipeSync(POLY_OPA_DISP++); @@ -402,7 +402,7 @@ void func_80A51DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto } void func_80A51FC0(EnDnk* this, PlayState* play) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, func_80A51D78, func_80A51DA4, &this->actor); } 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 a9128b1bd..b7eb08743 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -1032,7 +1032,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (phi_v0 == true) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (limbIndex == 13) { Matrix_Scale(this->unk_454, this->unk_454, this->unk_454, MTXMODE_APPLY); Matrix_RotateXS(this->unk_45C, MTXMODE_APPLY); @@ -1058,7 +1058,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(0.15f, 0.15f, 1.0f, MTXMODE_APPLY); Matrix_Translate(0.0f, -3200.0f, 0.0f, MTXMODE_APPLY); - gfxXlu = func_8012C2B4(POLY_XLU_DISP); + gfxXlu = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(gfxXlu, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(&gfxXlu[1], 0x08, 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 fd1557e3f..0b3c5ac85 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -542,7 +542,7 @@ void EnDnp_Draw(Actor* thisx, PlayState* play) { if (this->unk_322 & 0x100) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); 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 c328b02d6..667f1eafb 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -469,7 +469,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { void EnDnq_Draw(Actor* thisx, PlayState* play) { EnDnq* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->picto.actor); } 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 1f754f1d5..f481f3d6b 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -377,7 +377,7 @@ s32 func_8092D068(EnDns* this) { void func_8092D108(EnDns* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_SetTranslateRotateYXZ(this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, &this->actor.home.rot); @@ -640,7 +640,7 @@ void EnDns_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); gDPPipeSync(POLY_OPA_DISP++); 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 c2fd7acf1..3f149049a 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -1103,7 +1103,7 @@ void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnDodongo_Draw(Actor* thisx, PlayState* play) { EnDodongo* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDodongo_OverrideLimbDraw, EnDodongo_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 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 47a7bcd34..be946b872 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -661,7 +661,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) { if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); } SkelAnime_DrawOpa(play, this->knobDoor.skelAnime.skeleton, this->knobDoor.skelAnime.jointTable, EnDoor_OverrideLimbDraw, NULL, &this->knobDoor.dyna.actor); 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 84902f540..d48bfd359 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 @@ -240,7 +240,7 @@ void EnDoorEtc_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(-2900.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateZS(this->angle, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 9efb11474..f03b2702e 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -835,8 +835,8 @@ void EnDragon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r void EnDragon_Draw(Actor* thisx, PlayState* play) { EnDragon* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnDragon_OverrideLimbDraw, EnDragon_PostLimbDraw, &this->actor); } 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 7e232d5bd..d5dc8d250 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -120,7 +120,7 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot void EnDrs_Draw(Actor* thisx, PlayState* play) { EnDrs* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnDrs_PostLimbDraw, &this->actor); } 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 67dff9c41..6c6b40318 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -121,7 +121,7 @@ void EnDs2n_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->blinkState])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->blinkState])); 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 b25e4eb47..50e9303d7 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 @@ -114,7 +114,7 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, play->state.frames * 2, 0, 0x20, 0x40, 1, play->state.frames, play->state.frames * -8, 0x10, 0x10)); diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 509e4fa9a..6f67950ab 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -110,7 +110,7 @@ void EnEgblock_Draw(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnEgblock* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->inactive != true) { OPEN_DISPS(play->state.gfxCtx); @@ -193,7 +193,7 @@ void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isActive) { 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 0f9b4c766..2d03fccf2 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1452,7 +1452,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->action != EYEGORE_ACTION_DEAD) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gEyegoreEyeLaserTexAnim)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, @@ -1477,7 +1477,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gEyegoreLaserDL); } if (((this->action == EYEGORE_ACTION_LASER) && (this->laserState >= EYEGORE_LASER_FIRE)) || this->chargingLaser) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); if (!this->chargingLaser) { s32 i; @@ -1600,7 +1600,7 @@ void EnEgol_DrawEffects(EnEgol* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isActive) { Matrix_Push(); 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 615d59196..503ce584e 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1588,7 +1588,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C94C(play->state.gfxCtx); + Gfx_SetupDL27_Xlu(play->state.gfxCtx); envAlpha = (this->timer * 50) & 0x1FF; envAlpha = (envAlpha >= 0x100) ? 511 - envAlpha : envAlpha; 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 12026b8b9..e2a5f69e3 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -151,7 +151,7 @@ void EnElfbub_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(0.0f, 0.0f, 1.0f, MTXMODE_APPLY); Matrix_ReplaceRotation(&play->billboardMtxF); 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 871665cc6..e19e8d522 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -626,7 +626,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); switch (this->area) { case STRAY_FAIRY_AREA_WOODFALL: AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyWoodfallTexAnim)); 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 7450e3427..ad2f48c7f 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -270,14 +270,15 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(gfxCtx); + sPtr = this->effects; - func_8012C28C(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { if (sPtr->isEnabled) { Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW); Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); gDPPipeSync(POLY_XLU_DISP++); @@ -289,5 +290,6 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL); } } + CLOSE_DISPS(gfxCtx); } 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 2996ccc23..6121cce9d 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 @@ -87,8 +87,9 @@ void EnEndingHero_Draw(Actor* thisx, PlayState* play) { s32 index = 0; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->unk242])); 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 0cc20358a..604bcd583 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 @@ -69,8 +69,8 @@ void EnEndingHero2_Update(Actor* thisx, PlayState* play) { void EnEndingHero2_Draw(Actor* thisx, PlayState* play) { EnEndingHero2* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 aba7c4488..e95d8a6a7 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 @@ -69,8 +69,8 @@ void EnEndingHero3_Update(Actor* thisx, PlayState* play) { void EnEndingHero3_Draw(Actor* thisx, PlayState* play) { EnEndingHero3* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 39e920b9e..39fd515b1 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 @@ -69,8 +69,8 @@ void EnEndingHero4_Update(Actor* thisx, PlayState* play) { void EnEndingHero4_Draw(Actor* thisx, PlayState* play) { EnEndingHero4* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 ddf866f94..03eb40786 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 @@ -85,8 +85,9 @@ void EnEndingHero5_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnEndingHero5_Draw(Actor* thisx, PlayState* play) { EnEndingHero5* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); switch (this->unk25C) { 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 5324518de..6a7e96b81 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 @@ -133,8 +133,8 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { if (this->isIdle == 1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + 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.status[this->objectIndex].segment); diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 4081bd8e7..85d0527fa 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -266,7 +266,7 @@ void EnEstone_DrawEffects(EnEstone* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isActive) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); 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 a43d39c7c..d21b30b60 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -736,7 +736,7 @@ void EnFall_Moon_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); Matrix_MultVec3f(sFocusOffset, &this->actor.focus.pos); @@ -754,7 +754,7 @@ void EnFall_OpenMouthMoon_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); primColor = (this->eyeGlowIntensity * 200.0f) + 40.0f; @@ -772,7 +772,7 @@ void EnFall_LodMoon_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 20, 25, 30, 0, 0x3E7, 0x3200); @@ -826,7 +826,7 @@ void EnFall_Fireball_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); this->fireballYTexScroll1 += (s32)(4.0f + (this->fireballIntensity * 12.0f)); this->fireballYTexScroll2 += (s32)(2.0f + (this->fireballIntensity * 6.0f)); @@ -864,7 +864,7 @@ void EnFall_RisingDebris_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gMoonDebrisMaterialDL); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); @@ -894,7 +894,7 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play) { AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gMoonFireRingTexAnim)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE); @@ -914,13 +914,13 @@ void EnFall_MoonsTear_Draw(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gFallingMoonsTearTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gFallingMoonsTearDL); Matrix_Scale(3.0f, 3.0f, 6.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gFallingMoonsTearFireDL); diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c index 28a6cc74c..bdf742ec3 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c @@ -153,13 +153,13 @@ void EnFall2_Draw(Actor* thisx, PlayState* play) { Mtx* mtx; if (!(this->alphaLevel <= 0.0f)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840)); mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); func_8018450C(play, &this->skeletonInfo, mtx, NULL, NULL, &this->actor); } 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 097822dd1..d23e6b9ee 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -829,9 +829,10 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) { EnFamosRock* rock; OPEN_DISPS(play->state.gfxCtx); + dispOpa = POLY_OPA_DISP; - gSPDisplayList(&dispOpa[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dispOpa[0], gSetupDLs[SETUPDL_25]); gDPSetPrimColor(&dispOpa[1], 0, 0x80, 255, 255, 255, 255); @@ -858,7 +859,7 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) { void EnFamos_Draw(Actor* thisx, PlayState* play) { EnFamos* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actionFunc != EnFamos_DeathFade) { AnimatedMat_Draw(play, sEmblemAnimatedMats[this->animatedMaterialIndex]); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnFamos_OverrideLimbDraw, 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 868c43533..925dc93df 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -403,7 +403,8 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, envColor[this->actor.params].r, envColor[this->actor.params].g, envColor[this->actor.params].b, envColor[this->actor.params].a); @@ -411,6 +412,7 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(object_fr_Tex_0059A0)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnFg_OverrideLimbDraw, EnFg_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } @@ -456,12 +458,12 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { s16 firstDone = false; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 10; i++, dustEffect++) { if (dustEffect->type) { if (!firstDone) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); firstDone = true; 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 434ee1b86..b26592ac0 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -828,7 +828,7 @@ void EnFirefly_Draw(Actor* thisx, PlayState* play) { gfx = POLY_OPA_DISP; } - gSPDisplayList(gfx, &sSetupDL[6 * 25]); + gSPDisplayList(gfx, gSetupDLs[SETUPDL_25]); if (this->currentType == KEESE_FIRE) { gDPSetEnvColor(&gfx[1], 0, 0, 0, 0); diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c index b70ce1ae7..0331ec347 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c @@ -948,7 +948,7 @@ void EnFish_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, colour->r, colour->g, colour->b, 255); 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 b7952c1bc..ac3a4246b 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -1078,8 +1078,8 @@ void EnFish2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro void EnFish2_Draw(Actor* thisx, PlayState* play) { EnFish2* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnFish2_OverrideLimbDraw, EnFish2_PostLimbDraw, &this->actor); func_80B2B180(this, play); @@ -1157,7 +1157,7 @@ void func_80B2B180(EnFish2* this, PlayState* play) { OPEN_DISPS(gfxCtx); ptr = &this->unk_3F8[0]; - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++, ptr++) { if (ptr->unk_00) { 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 d9645885e..ef15c27a9 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1252,7 +1252,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 30; i < EFFECT_COUNT; i++) { if (effect->type == FS_EFF_RAIN_DROP) { if (flag == 0) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gDPSetCombineMode(POLY_XLU_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 30); flag++; @@ -1271,7 +1271,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { effect++; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); effect = firstEffect + 30; flag = 0; @@ -1708,7 +1708,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) { EnFishing_UpdateSinkingLure(play); if (sLurePos.y < WATER_SURFACE_Y(play)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentMaterialDL); @@ -1725,7 +1725,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) { } } } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentMaterialDL); @@ -1757,7 +1757,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Push(); if (D_8090CD54 != 0) { @@ -1800,7 +1800,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) Matrix_RotateZF(M_PI / 2, MTXMODE_APPLY); Matrix_RotateYF(M_PI / 2, MTXMODE_APPLY); - func_8012C28C(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++, gFishingLureFloatDL); @@ -1821,7 +1821,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) EnFishing_DrawLureHook(play, &hookPos[1], &sLureHookRefPos[1], 1); } - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gDPSetCombineMode(POLY_XLU_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 55); @@ -1893,7 +1893,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) } Matrix_Pop(); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx); } @@ -1988,7 +1988,7 @@ void EnFishing_DrawRod(PlayState* play) { } } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gFishingRodSetupDL); @@ -4225,7 +4225,7 @@ void EnFishing_LoachPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve void EnFishing_DrawFish(Actor* thisx, PlayState* play) { EnFishing* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYF(BINANG_TO_RAD_ALT(this->unk_15A + this->actor.shape.rot.y), MTXMODE_APPLY); @@ -5618,8 +5618,8 @@ void EnFishing_DrawOwner(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->actor.projectedPos.z < 1500.0f) && (fabsf(this->actor.projectedPos.x) < (100.0f + this->actor.projectedPos.z))) { 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 ffd456af4..3cf6385e0 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -1188,7 +1188,7 @@ void EnFloormas_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->collider.base.colType == COLTYPE_HARD) { func_800AE2A0(play, &D_808D3958, this->unk_190 % 40, 40); } @@ -1213,7 +1213,7 @@ void func_808D3754(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->collider.base.colType == COLTYPE_HARD) { func_800AE5E4(play, &D_808D3958, this->unk_190 % 40, 40); } 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 8130f3cc9..636cd892e 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -1470,7 +1470,7 @@ void EnFsn_DrawCursor(EnFsn* this, PlayState* play, f32 x, f32 y, f32 z, u8 draw OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1527,7 +1527,7 @@ void EnFsn_DrawStickDirectionPrompts(EnFsn* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1622,7 +1622,7 @@ void EnFsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, 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 97f996ff1..3866c4fb1 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -1385,7 +1385,7 @@ void EnFu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 0, 50, 160, 0)); @@ -1449,7 +1449,7 @@ void func_80964950(PlayState* play, EnFuUnkStruct* ptr, s32 len) { OPEN_DISPS(play->state.gfxCtx); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < len; i++, ptr++) { if (ptr->unk_36 == 1) { diff --git a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c index e976e01dc..576e307b2 100644 --- a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c +++ b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c @@ -364,7 +364,7 @@ void func_80AD0340(EnFuKago* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(D_80AD061C); i++, ptr++) { Matrix_Push(); @@ -390,7 +390,7 @@ void EnFuKago_Draw(Actor* thisx, PlayState* play) { if (this->unk_33A == 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_fu_mato_DL_0006A0); diff --git a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c index c42278805..52e947dbd 100644 --- a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c +++ b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c @@ -406,7 +406,7 @@ void func_80ACF1F4(EnFuMato* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < 2; i++) { Matrix_Push(); @@ -449,7 +449,7 @@ void func_80ACF3F4(EnFuMato* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(D_80ACF63C); i++, ptr++) { Matrix_Push(); @@ -471,7 +471,7 @@ void EnFuMato_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); 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 fe4e6636b..150f3c8c1 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -846,7 +846,7 @@ void EnFz_Draw(Actor* thisx, PlayState* play) { if (this->unk_BD7 != 0) { func_800B8118(&this->actor, play, 0); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, play->state.frames % 128, 0x20, 0x20, 1, 0, @@ -993,7 +993,7 @@ void func_80934464(EnFz* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_PATTERN); diff --git a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c index 9f45748df..b9936c53c 100644 --- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c +++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c @@ -181,7 +181,7 @@ void EnGamelupy_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeTextures[this->rupeeIndex])); 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 9c2d7fe37..8d3cf44a5 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -1007,7 +1007,7 @@ void EnGb2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->unk_28A == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); @@ -1016,7 +1016,7 @@ void EnGb2_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGb2_OverrideLimbDraw, EnGb2_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, this->unk_28A); 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 6cfbb4718..99a2808f5 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -457,7 +457,7 @@ void EnGe1_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGe1_OverrideLimbDraw, EnGe1_PostLimbDraw, &this->picto.actor); 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 922472f9a..15c151789 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -767,7 +767,7 @@ void EnGe2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex])); func_800B8050(&this->picto.actor, play, 0); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, 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 4b5e8e311..0362fb4e3 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -951,7 +951,7 @@ void EnGeg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (limbIndex == 17) { if (!(this->unk_230 & 0x40)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -1045,7 +1045,7 @@ void func_80BB3BE0(EnGeg* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BB4088[this->unk_23E])); gDPPipeSync(POLY_OPA_DISP++); @@ -1062,7 +1062,7 @@ void func_80BB3CB4(EnGeg* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); 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 81d1c6bb6..e9e37ddb4 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -527,7 +527,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -551,7 +551,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -604,7 +604,7 @@ void func_80B3610C(EnGgStruct* ptr, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -791,7 +791,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2])); @@ -799,7 +799,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGg_OverrideLimbDraw, EnGg_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_308 == 1)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2])); @@ -807,7 +807,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGg_OverrideLimbDraw, EnGg_PostLimbDraw, &this->actor, POLY_XLU_DISP); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx); } 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 fdd099fff..76e3d69da 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -479,7 +479,7 @@ void EnGg2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_2F0 == 1)) { gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B3C0AC[this->unk_2EA])); 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 07c01b288..cc15fcbce 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -509,7 +509,7 @@ void EnGiant_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->alpha >= 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sFaceTextures[this->faceIndex])); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); Scene_SetRenderModeXlu(play, 0, 1); @@ -517,10 +517,10 @@ void EnGiant_Draw(Actor* thisx, PlayState* play) { this->skelAnime.dListCount, NULL, EnGiant_PostLimbDrawOpa, thisx); } else if (this->alpha > 0) { if (this->alpha >= 129) { - func_8012C2B4(POLY_XLU_DISP++); + Gfx_SetupDL71(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 2, 2); } else { - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 1, 2); } gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sFaceTextures[this->faceIndex])); 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 fba0c1118..a76d89e7b 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 @@ -668,7 +668,7 @@ void EnGinkoMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 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 40cf72a98..c561035aa 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -1233,7 +1233,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { Matrix_RotateXS(-0x4000, MTXMODE_APPLY); @@ -1242,7 +1242,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, object_gk_DL_006688); gSPDisplayList(POLY_OPA_DISP++, object_gk_DL_006680); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos = this->actor.world.pos; scale.x = 0.2f; @@ -1258,7 +1258,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { EnGk_TransformLimbDraw, &this->actor); if (ENGK_GET_F(&this->actor) != ENGK_F_2) { - func_8012C2DC(play->state.gfxCtx); + 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)) { pos.x = this->actor.world.pos.x - 15.0f; 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 573b911c4..4c4aa474b 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -1832,7 +1832,7 @@ void EnGm_Draw(Actor* thisx, PlayState* play) { if ((this->unk_258 != 0) && (this->unk_262 >= 0)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80951E30[this->unk_3CE])); 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 edf1cb104..67cbf327a 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -243,7 +243,7 @@ void func_80A11144(EnGoStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 32; i++, ptr++) { @@ -320,12 +320,12 @@ void func_80A115B4(EnGoStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 32; i++, ptr++) { if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) { if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); flag = true; } @@ -456,7 +456,7 @@ void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 ar OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < 16; i++, ptr++) { if (ptr->unk_00 == arg4) { @@ -1072,7 +1072,7 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + 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); Matrix_Scale(arg2 * 0.7f, arg2 * 0.8f, arg2, MTXMODE_APPLY); @@ -1952,7 +1952,7 @@ void func_80A15B80(EnGo* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); @@ -2070,7 +2070,7 @@ void func_80A15FEC(Actor* thisx, PlayState* play) { if (!(this->unk_390 & 0x300)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A1670C[this->unk_3BE])); 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 c947d3334..148b2d116 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -1575,7 +1575,7 @@ void func_80942B1C(EnGoroiwa* this, PlayState* play) { if ((ptr->unk_28 != 0) && (ptr->unk_2C > 0)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); 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 2bd6fec69..c4ff0959c 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -1007,7 +1007,7 @@ void EnGrasshopper_Draw(Actor* thisx, PlayState* play) { u8* shadowTex = GRAPH_ALLOC(play->state.gfxCtx, SUBS_SHADOW_TEX_SIZE); u8* shadowTexIter; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnGrasshopper_PostLimbDraw, &this->actor); if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && @@ -1134,7 +1134,7 @@ void EnGrasshopper_DrawEffects(EnGrasshopper* this, PlayState* play) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C9BC(play->state.gfxCtx); + Gfx_SetupDL61_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sLightningTextures[effect->lightningIndex])); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 200, 255, 255, 255); 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 b9f6acb68..30a6709a2 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -1070,7 +1070,7 @@ void EnGs_Draw(Actor* thisx, PlayState* play) { frames = play->gameplayFrames; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Push(); if (this->unk_19A & 1) { @@ -1092,7 +1092,7 @@ void EnGs_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); if (this->unk_19A & 2) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(0.05f, -0.05f, 1.0f, MTXMODE_APPLY); 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 f5925f524..d27dd5a59 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 @@ -370,7 +370,7 @@ void EnGuardNuts_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); 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 a6f5f98b3..78a2aa4d1 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -385,11 +385,13 @@ void EnGuruguru_Draw(Actor* thisx, PlayState* play) { EnGuruguru* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->texIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->texIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGuruguru_OverrideLimbDraw, NULL, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index a88c8bb38..bcc5882a2 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -342,19 +342,23 @@ void EnHakurock_Update(Actor* thisx, PlayState* play) { void func_80B228F4(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 185, 24, 255); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30); + CLOSE_DISPS(play->state.gfxCtx); } void EnHakurock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(-100.0f, 0.0f, 0.0f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteMaterialDL); gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteModelDL); + CLOSE_DISPS(play->state.gfxCtx); } 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 c54703ef9..ce60a0187 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -141,9 +141,9 @@ void func_80B22FA8(EnHanabiStruct* arg0, PlayState* play2) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); 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 4a01b663e..e5b806b90 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c @@ -94,7 +94,7 @@ s32 EnHata_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnHata_Draw(Actor* thisx, PlayState* play) { EnHata* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHata_OverrideLimbDraw, NULL, &this->dyna.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 5fa9f5ea2..a335e39d2 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -186,7 +186,7 @@ s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f void EnHeishi_Draw(Actor* thisx, PlayState* play) { EnHeishi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHeishi_OverrideLimbDraw, NULL, &this->actor); } 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 34e1d1e15..0992aa9d9 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -448,11 +448,13 @@ void EnHg_Draw(Actor* thisx, PlayState* play) { EnHg* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHg_OverrideLimbDraw, EnHg_PostLimbDraw, &this->actor); Matrix_Put(&this->mf); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherGibdoEyebrowsDL); + CLOSE_DISPS(play->state.gfxCtx); } 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 bbef58b1a..37d5a61f9 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -416,12 +416,14 @@ void EnHgo_Draw(Actor* thisx, PlayState* play) { EnHgo* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHgo_OverrideLimbDraw, &EnHgo_PostLimbDraw, &this->actor); Matrix_Put(&this->mf); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherHumanEyebrowsDL); + CLOSE_DISPS(play->state.gfxCtx); } 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 29a7c6a8e..630ae405f 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 @@ -435,6 +435,6 @@ void EnHiddenNuts_Update(Actor* thisx, PlayState* play) { void EnHiddenNuts_Draw(Actor* thisx, PlayState* play) { EnHiddenNuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); } 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 09a110dbf..7c01fa788 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 @@ -905,7 +905,7 @@ void EnHintSkb_Draw(Actor* thisx, PlayState* play) { EnHintSkb* this = THIS; this->limbCount = 0; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHintSkb_OverrideLimbDraw, EnHintSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index 096b92fdd..9b196c2fc 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -319,30 +319,32 @@ void EnHoll_Update(Actor* thisx, PlayState* play) { void EnHoll_Draw(Actor* thisx, PlayState* play) { EnHoll* this = THIS; - Gfx* dl; - u32 dlIndex; + Gfx* dList; + u32 setupDListIndex; if (this->alpha != 0) { OPEN_DISPS(play->state.gfxCtx); + if (this->alpha == 255) { - dl = POLY_OPA_DISP; - dlIndex = 37; + dList = POLY_OPA_DISP; + setupDListIndex = SETUPDL_37; } else { - dl = POLY_XLU_DISP; - dlIndex = 0; + dList = POLY_XLU_DISP; + setupDListIndex = SETUPDL_0; } - dl = Gfx_CallSetupDL(dl, dlIndex); + dList = Gfx_SetupDL(dList, setupDListIndex); if (this->playerSide == EN_HOLL_BEHIND) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } - gSPMatrix(dl++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(dl++, 0, 0, 0, 0, 0, this->alpha); - gSPDisplayList(dl++, gEnHollCentralPlaneDL); + gSPMatrix(dList++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(dList++, 0, 0, 0, 0, 0, this->alpha); + gSPDisplayList(dList++, gEnHollCentralPlaneDL); if (this->alpha == 255) { - POLY_OPA_DISP = dl; + POLY_OPA_DISP = dList; } else { - POLY_XLU_DISP = dl; + POLY_XLU_DISP = dList; } + CLOSE_DISPS(play->state.gfxCtx); } } 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 2e68c75d6..2f2be8c64 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -4671,7 +4671,7 @@ void EnHorse_Draw(Actor* thisx, PlayState* play) { EnHorse* this = THIS; if (!(this->stateFlags & ENHORSE_INACTIVE) && (this->actor.update != func_8087D540)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); this->stateFlags |= ENHORSE_DRAW; if (!(this->unk_1EC & 1)) { if (this->stateFlags & ENHORSE_JUMPING) { 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 8c77bb2a0..10d4a6826 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 @@ -593,7 +593,7 @@ s32 EnHorseLinkChild_OverrideSkinDraw(Actor* thisx, PlayState* play, s32 limbInd void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play) { EnHorseLinkChild* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_80138258(&this->actor, play, &this->skin, EnHorseLinkChild_PostSkinDraw, EnHorseLinkChild_OverrideSkinDraw, true); } 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 4d535292f..5c06e292a 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -356,7 +356,7 @@ void EnHs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnHs_Draw(Actor* thisx, PlayState* play) { EnHs* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHs_OverrideLimbDraw, EnHs_PostLimbDraw, &this->actor); } 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 a0960a60f..86d6309b6 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -1036,7 +1036,7 @@ void EnIg_Draw(Actor* thisx, PlayState* play) { EnIg* this = THIS; if (this->scheduleResult != 0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); 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 fc7fafdcf..8cff778fd 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -1077,10 +1077,10 @@ void EnIk_Draw(Actor* thisx, PlayState* play) { func_800B8050(&this->actor, play, 0); func_800B8118(&this->actor, play, 0); gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_XLU_DISP = &gfx[1]; gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gfxArmorType = sIronKnuckleArmorType[this->actor.params]; gSPSegment(&gfx[1], 0x08, gfxArmorType[0]); gSPSegment(&gfx[2], 0x09, gfxArmorType[1]); 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 71c512418..0e103de63 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -1615,9 +1615,11 @@ void EnIn_Draw(Actor* thisx, PlayState* play) { EnIn* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnIn_OverrideLimbDraw, EnIn_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } 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 866f1d1b8..6a51e9486 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c @@ -506,7 +506,7 @@ void EnInsect_Update(Actor* thisx, PlayState* play) { void EnInsect_Draw(Actor* thisx, PlayState* play) { EnInsect* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); D_8091BD60 = 0; } 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 22ef1282a..202ed6637 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -710,7 +710,7 @@ void func_8095F210(EnIshi* this, PlayState* play) { if (this->actor.projectedPos.z < 1300.0f) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); sp28 = (1300.0f - this->actor.projectedPos.z) * 2.55f; @@ -730,7 +730,7 @@ void func_8095F36C(EnIshi* this, PlayState* play) { if ((this->actor.projectedPos.z <= 2150.0f) || ((this->unk_197 & 1) && (this->actor.projectedPos.z < 2250.0f))) { this->actor.shape.shadowAlpha = 160; - func_8012C28C(play->state.gfxCtx); + 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); @@ -741,7 +741,7 @@ void func_8095F36C(EnIshi* this, PlayState* play) { this->actor.shape.shadowAlpha = sp20 * 0.627451f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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); 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 1c65efed8..fcbd26b2f 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -594,7 +594,7 @@ void EnJa_Draw(Actor* thisx, PlayState* play) { if (this->unk_1D8.unk_00 != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, D_80BC37AC[phi_t2].r, D_80BC37AC[phi_t2].g, D_80BC37AC[phi_t2].b, 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 05855bb20..314e94d1b 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 @@ -150,9 +150,11 @@ void EnJcMato_Draw(Actor* thisx, PlayState* play) { EnJcMato* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gKoumeTargetDL); Matrix_MultVec3f(&sOffset, &this->pos); + CLOSE_DISPS(play->state.gfxCtx); } 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 2985409dc..25fe13064 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 @@ -636,7 +636,7 @@ void EnJgameTsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C150A4[this->unk_21C])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C150A4[this->unk_21C])); 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 2134ded5b..abf5e9eb4 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -1058,7 +1058,7 @@ void func_8096A9F4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto void EnJs_Draw(Actor* thisx, PlayState* play) { EnJs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, func_8096A9F4, &this->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 e90b14f82..07e4990bf 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -2134,8 +2134,8 @@ void EnKaizoku_Draw(Actor* thisx, PlayState* play) { f32 drawDmgEffAlpha; EnKaizoku* this = THIS; - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); 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 2cec5d9b8..7d54f3ed3 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -1153,7 +1153,7 @@ void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r void EnKakasi_Draw(Actor* thisx, PlayState* play) { EnKakasi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, EnKakasi_PostLimbDraw, &this->picto.actor); } 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 9777c7433..d9d5ef7d8 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -805,7 +805,7 @@ void EnKame_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]); @@ -840,7 +840,7 @@ s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void func_80AD8D64(Actor* thisx, PlayState* play) { EnKame* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor); } 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 c4ef32e31..804854f53 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -923,8 +923,8 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, object_kanban_DL_000C30); 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 0c0078fd3..66aa6d5c7 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -634,7 +634,7 @@ void EnKarebaba_DrawShadow(EnKarebaba* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255); @@ -658,7 +658,7 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Math_Vec3f_Copy(this->bodyPartsPos, &this->actor.world.pos); if (this->actionFunc == EnKarebaba_DeadItemDrop) { 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 b3b8ca295..cfd27fbb0 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -557,7 +557,7 @@ void EnKbt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gfx = POLY_OPA_DISP; 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 24147b0d1..ea7faef57 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 @@ -775,7 +775,7 @@ void EnKendoJs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnKendoJs_Draw(Actor* thisx, PlayState* play) { EnKendoJs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnKendoJs_OverrideLimbDraw, EnKendoJs_PostLimbDraw, &this->actor); } 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 f30f55a33..dd26ba172 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -1134,7 +1134,7 @@ void func_80B43074(EnKgy* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); Matrix_Push(); Matrix_Translate(-800.0f, 3100.0f, 8400.0f, MTXMODE_APPLY); @@ -1166,7 +1166,7 @@ void func_80B43074(EnKgy* this, PlayState* play) { void EnKgy_Draw(Actor* thisx, PlayState* play) { EnKgy* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_29C & 1) { func_80B43074(this, play); } 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 f3005ca05..77c7e1dc9 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -359,7 +359,7 @@ void EnKujiya_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gLotteryShopCylinderDL); 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 2af87ea90..147ca2401 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -715,7 +715,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); alpha = (1300.0f - this->actor.projectedPos.z) * 2.55f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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, alpha); 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 8e2d194a6..f400d157f 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -1323,7 +1323,7 @@ void func_80A5E6F0(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(D_80A5F1C0.unk_0480); i++) { EnKusa2UnkBssSubStruct2* s = &D_80A5F1C0.unk_0480[i]; @@ -1343,7 +1343,7 @@ void func_80A5E6F0(Actor* thisx, PlayState* play) { void func_80A5E80C(PlayState* play, s32 arg1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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, arg1); 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 0bd619a9c..02f77693d 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 @@ -1009,7 +1009,7 @@ void EnLiftNuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnLiftNuts_Draw(Actor* thisx, PlayState* play) { EnLiftNuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnLiftNuts_OverrideLimbDraw, EnLiftNuts_PostLimbDraw, thisx); } 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 830484996..0908649dc 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -168,7 +168,7 @@ void EnLight_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->actor.params >= 0) { gSPSegment( 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 7cd1c3369..cc333b2ae 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 @@ -389,7 +389,7 @@ void EnLookNuts_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); 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 1b9cb743a..463c5b327 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 @@ -487,7 +487,7 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 1242de4ba..7fb2a13a3 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -1069,7 +1069,7 @@ void EnMa4_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, gRomaniWoodenBoxDL); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->mouthTexIndex])); 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 6d0b027eb..89ee4aada 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 @@ -1462,7 +1462,7 @@ void EnMaYto_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++, gCremiaWoodenBoxDL); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyesTextures[this->eyeTexIndex])); 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 edf0e41f2..8eacc7962 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 @@ -536,7 +536,8 @@ void EnMaYts_Draw(Actor* thisx, PlayState* play) { EnMaYts* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->mouthTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex])); @@ -550,7 +551,8 @@ void EnMaYts_Draw(Actor* thisx, PlayState* play) { // Alternative draw function void EnMaYts_DrawSleeping(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gRomaniSleepingDL); 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 15aa42bda..0cce91c73 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -554,7 +554,7 @@ void EnMag_DrawImageRGBA32(Gfx** gfxp, s16 centerX, s16 centerY, TexturePtr sour s32 pad; s32 i; - func_8012CA0C(&gfx); + Gfx_SetupDL56_Ptr(&gfx); curTexture = source; rectLeft = centerX - (width / 2); @@ -709,7 +709,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { // 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); - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); // Mask appearing effects gDPPipeSync(gfx++); @@ -736,7 +736,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { } } - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); if (this->majorasMaskAlpha != 0) { gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, @@ -774,7 +774,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { } if (this->subtitleAlpha != 0) { - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); gDPSetAlphaCompare(gfx++, G_AC_NONE); gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -792,7 +792,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { SUBTITLE_TEX_LEFT, SUBTITLE_TEX_TOP); } - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); gDPSetAlphaCompare(gfx++, G_AC_NONE); gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -808,7 +808,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { EnMag_DrawTextureI8(&gfx, gTitleScreenMajorasMaskSubtitleTex, SUBTITLE_TEX_WIDTH, SUBTITLE_TEX_HEIGHT, SUBTITLE_TEX_LEFT, SUBTITLE_TEX_TOP); - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); gDPSetAlphaCompare(gfx++, G_AC_NONE); gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -833,7 +833,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { THE_LEGEND_OF_TEX_LEFT, THE_LEGEND_OF_TEX_TOP); } - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); if (this->copyrightAlpha != 0) { gDPSetAlphaCompare(gfx++, G_AC_NONE); 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 7d79bcd75..659ef4cb3 100644 --- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c +++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c @@ -700,7 +700,7 @@ void EnMaruta_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_210 == 0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 7ac16e1b0..e7941a4d5 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -628,12 +628,14 @@ void EnMinifrog_Draw(Actor* thisx, PlayState* play) { Color_RGBA8* envColor; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); envColor = &sEnMinifrogColor[this->frogIndex]; gSPSegment(POLY_OPA_DISP++, 0x08, D_808A4D74[0]); gSPSegment(POLY_OPA_DISP++, 0x09, D_808A4D74[0]); gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, envColor->a); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMinifrog_OverrideLimbDraw, EnMinifrog_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } 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 20f32028e..92a3ff91e 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -480,7 +480,7 @@ void EnMk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnMk_Draw(Actor* thisx, PlayState* play) { EnMk* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMk_OverrideLimbDraw, EnMk_PostLimbDraw, &this->actor); } 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 4f1ddc660..9b4722fba 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -524,7 +524,7 @@ void EnMkk_Draw(Actor* thisx, PlayState* play) { if (this->alpha == 255) { primColors = &D_80A4F7C4[this->primColorSelect]; gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetPrimColor(&gfx[1], 0, 0xFF, primColors->r, primColors->g, primColors->b, primColors->a); gSPSegment(&gfx[2], 0x08, D_801AEFA0); gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -532,7 +532,7 @@ void EnMkk_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = &gfx[5]; } gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha); gSPDisplayList(&gfx[2], dLists->unk0); Matrix_ReplaceRotation(&play->billboardMtxF); @@ -576,7 +576,7 @@ void func_80A4F4C8(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha); gSPDisplayList(&gfx[2], dLists->unk0); Matrix_ReplaceRotation(&play->billboardMtxF); diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index 67a0a1e77..a0a308ef9 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -211,7 +211,8 @@ void EnMm_Draw(Actor* thisx, PlayState* play) { EnMm* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_190 != 0) { s16 rotY = this->actor.world.rot.y - this->actor.shape.rot.y; @@ -221,5 +222,6 @@ void EnMm_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++, gameplay_keep_DL_055628); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c index 48a379304..5c6adcd8a 100644 --- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c +++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c @@ -82,7 +82,7 @@ void EnMm2_Update(Actor* thisx, PlayState* play) { void EnMm2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sEnMm2DL); 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 366bddef3..abf5503a4 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -561,7 +561,7 @@ void EnMm3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A704FC[this->unk_1DC])); gSPSegment(POLY_OPA_DISP++, 0x0C, sEnMm3DL); 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 3cbf7e2ad..732fc9b3b 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -181,7 +181,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) { void EnMs_Draw(Actor* thisx, PlayState* play) { EnMs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index 4bf4db0e0..ebea9196b 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -1236,6 +1236,6 @@ void EnMushi2_Draw(Actor* thisx, PlayState* play) { EnMushi2* this = THIS; func_80A687A0(this); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); } 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 7c9d1e9b2..441c27cdc 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -300,7 +300,7 @@ s32 EnMuto_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnMuto_Draw(Actor* thisx, PlayState* play) { EnMuto* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMuto_OverrideLimbDraw, NULL, &this->actor); } 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 c5a8b2498..4edadf412 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -789,7 +789,7 @@ void EnNb_Draw(Actor* thisx, PlayState* play) { EnNb* this = THIS; if (this->scheduleResult != EN_NB_SCH_NONE) { - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnNb_OverrideLimbDraw, EnNb_PostLimbDraw, EnNb_TransformLimbDraw, &this->actor); 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 960767b11..66098a9d5 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 @@ -729,11 +729,14 @@ s32 EnNeoReeba_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnNeoReeba_Draw(Actor* thisx, PlayState* play) { EnNeoReeba* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x01, 255, 255, 255, 255); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnNeoReeba_OverrideLimbDraw, NULL, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); if (this->stunTimer > 0) { diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c index 807bbd849..41f872488 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c @@ -104,10 +104,11 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play) { Vec3f scale; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, &gBombShopBagDL); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); position.x = this->actor.world.pos.x + 7.0f; position.y = this->actor.world.pos.y; @@ -118,5 +119,6 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play) { scale.z = 0.2f; func_800BC620(&position, &scale, 255, play); + CLOSE_DISPS(play->state.gfxCtx); } 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 bded43eda..9f364c2c6 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -938,7 +938,7 @@ s32 EnNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnNiw_Draw(Actor* thisx, PlayState* play) { EnNiw* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, EnNiw_OverrideLimbDraw, NULL, &this->actor); EnNiw_DrawFeathers(this, play); @@ -1002,7 +1002,8 @@ void EnNiw_DrawFeathers(EnNiw* this, PlayState* play) { s16 i; OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->feathers); i++, feather++) { if (feather->isEnabled == true) { 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 0187e1c88..3b2659d1e 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -107,7 +107,7 @@ void EnNnh_Draw(Actor* thisx, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; s32 pad; - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gfxCtx->polyOpa.p++, gButlerSonMainBodyDL); } diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index 9c6fe4a9d..bf3216fd5 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -173,10 +173,12 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) { EnNutsball* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZS(this->actor.home.rot.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++, gameplay_keep_DL_058BA0); + CLOSE_DISPS(play->state.gfxCtx); } 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 b11e8c408..afd6eea3e 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -487,7 +487,7 @@ void EnNwc_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); dispHead = POLY_OPA_DISP; @@ -519,7 +519,7 @@ s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnNwc_DrawAdultBody(Actor* thisx, PlayState* play) { EnNwc* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->niwSkeleton.skeleton, this->niwSkeleton.jointTable, this->niwSkeleton.dListCount, EnNwc_OverrideLimbDraw, NULL, &this->actor); } 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 3f10f6771..7a40b38f5 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -512,7 +512,7 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_PrimColor(play->state.gfxCtx, 0x80, 255, 255, 255, 255)); @@ -542,7 +542,7 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { MTXMODE_APPLY); } - gfx = func_8012C868(POLY_XLU_DISP); + gfx = Gfx_SetupDL20_NoCD(POLY_XLU_DISP); gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); if (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 6cc29578a..0631922be 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -1037,7 +1037,7 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->alpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if ((this->animIndex == OSN_ANIM_CHOKE) || (this->animIndex == OSN_ANIM_DESPAIR) || (this->animIndex == OSN_ANIM_HAND_OUT_2) || (play->msgCtx.currentTextId == 0x1FCA)) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeOpenTex)); @@ -1056,7 +1056,7 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnOsn_OverrideLimbDraw, EnOsn_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeClosedHappyTex)); gSPSegment(POLY_XLU_DISP++, 0x09, Lib_SegmentedToVirtual(sSmileTex)); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->alpha); 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 2444acca5..c2e813273 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -1575,7 +1575,7 @@ void EnOssan_DrawCursor(PlayState* play, EnOssan* this, f32 x, f32 y, f32 z, u8 OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1637,7 +1637,7 @@ void EnOssan_DrawStickDirectionPrompts(PlayState* play, EnOssan* this) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1720,7 +1720,7 @@ void EnOssan_CuriosityShopMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnOssan_CuriosityShopMan_OverrideLimbDraw, EnOssan_CuriosityShopMan_PostLimbDraw, @@ -1738,7 +1738,7 @@ void EnOssan_PartTimer_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnOssan_PartTimer_OverrideLimbDraw, EnOssan_PartTimer_PostLimbDraw, &this->actor); 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 aefebdfc4..1e1a36d74 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -1032,8 +1032,8 @@ void EnOt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 25); - POLY_XLU_DISP = func_8012C2B4(POLY_XLU_DISP); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); + POLY_XLU_DISP = Gfx_SetupDL71(POLY_XLU_DISP); CLOSE_DISPS(play->state.gfxCtx); @@ -1045,7 +1045,7 @@ void EnOt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - gfx = func_8012C7FC(POLY_XLU_DISP); + gfx = Gfx_SetupDL65_NoCD(POLY_XLU_DISP); gDPSetDither(&gfx[0], G_CD_NOISE); gDPSetCombineLERP(&gfx[1], 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, @@ -1140,7 +1140,7 @@ void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2) { OPEN_DISPS(play->state.gfxCtx); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < arg2; i++, arg1++) { if (arg1->unk_00) { 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 f71d227f6..4ff55d7a0 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -1151,7 +1151,7 @@ void EnOwl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex])); @@ -1172,7 +1172,7 @@ void func_8095D074(Actor* thisx, PlayState* play) { if (this->unk_3DC >= 0x20) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); @@ -1180,7 +1180,7 @@ void func_8095D074(Actor* thisx, PlayState* play) { } else { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_XLU_SURF2); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)(this->unk_3DC * 8)); 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 b4e7c29e3..b78c9a314 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -556,12 +556,14 @@ void EnPamera_Draw(Actor* thisx, PlayState* play) { EnPamera* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80BDA604[this->unk_312])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(D_80BDA610[this->unk_314])); gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(D_80BDA5FC[this->unk_310])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPamera_OverrideLimbDraw, EnPamera_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } 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 850442bad..0caeb9305 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -1424,7 +1424,7 @@ void EnPametfrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s void EnPametfrog_Draw(Actor* thisx, PlayState* play) { EnPametfrog* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateYS(this->spinYaw, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnPametfrog_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.c b/src/overlays/actors/ovl_En_Paper/z_en_paper.c index 7659b524b..b2b3b5669 100644 --- a/src/overlays/actors/ovl_En_Paper/z_en_paper.c +++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.c @@ -213,7 +213,7 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, SHADE, 0, 0, 0, SHADE, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED); diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.c b/src/overlays/actors/ovl_En_Part/z_en_part.c index 2a12b9af8..ac073358f 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.c +++ b/src/overlays/actors/ovl_En_Part/z_en_part.c @@ -125,7 +125,7 @@ void EnPart_Draw(Actor* thisx, PlayState* play) { if (this->actor.params > ENPART_TYPE_0) { Matrix_RotateZF(this->zRot, MTXMODE_APPLY); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); if (this->actor.params == ENPART_TYPE_15) { gSPSegment(POLY_OPA_DISP++, 0x0C, gEmptyDL); 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 d45cacbae..045da7fa1 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -926,7 +926,7 @@ void EnPeehat_Draw(Actor* thisx, PlayState* play) { Vec3f sp40; s32 i; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPeehat_OverrideLimbDraw, (this->actor.params == 0) ? EnPeehat_PostLimbDraw : NULL, &this->actor); 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 f00d64fca..99e301250 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -2181,7 +2181,7 @@ void EnPm_Draw(Actor* thisx, PlayState* play) { s32 pad; if (this->unk_258 != 0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); 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 beffe3bb8..652c19dc7 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 @@ -316,7 +316,7 @@ void EnPoFusen_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { void EnPoFusen_Draw(Actor* thisx, PlayState* play) { EnPoFusen* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->anime.skeleton, this->anime.jointTable, this->anime.dListCount, EnPoFusen_OverrideLimbDraw, EnPoFusen_PostLimbDraw, EnPoFusen_TransformLimbDraw, &this->actor); 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 3516364ba..56d0f5326 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 @@ -1205,8 +1205,8 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); EnPoSisters_UpdateColors(this); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->color.a == 255) || (this->color.a == 0)) { gDPSetEnvColor(POLY_OPA_DISP++, this->color.r, this->color.g, this->color.b, this->color.a); 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 c8da2f1ee..4669b1916 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -926,7 +926,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { if ((this->unk_197 == 255) || (this->unk_197 == 0)) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], this->unk_194, this->unk_195, this->unk_196, this->unk_197); gSPSegment(&gfx[2], 0x08, D_801AEFA0); @@ -937,7 +937,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { } else { gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->unk_197); gSPSegment(&gfx[2], 0x08, D_801AEF88); @@ -945,7 +945,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, &gfx[3]); gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); } gDPPipeSync(&gfx[0]); @@ -986,7 +986,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { if (this->actionFunc == func_80B2DD2C) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], this->unk_198, this->unk_199, this->unk_19A, 255); func_80B2C910(&sp7C, play); @@ -998,7 +998,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { POLY_OPA_DISP = &gfx[4]; } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment( POLY_XLU_DISP++, 0x08, 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 5d1d6935e..ef15618c9 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -1573,8 +1573,8 @@ void EnPp_Draw(Actor* thisx, PlayState* play) { f32 scale; f32 alpha; - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPp_OverrideLimbDraw, EnPp_PostLimbDraw, &this->actor); @@ -1611,7 +1611,7 @@ void EnPp_Draw(Actor* thisx, PlayState* play) { if ((this->action != EN_PP_ACTION_MASK_DETACH) && (this->action < EN_PP_ACTION_DEAD)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255); Math_Vec3f_Copy(&pos, &this->actor.world.pos); 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 ab47e693f..30fd0ee15 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -595,8 +595,8 @@ void EnPr_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->unk_2D2 == 0) { gDPPipeSync(POLY_OPA_DISP++); 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 1c76d5985..7fe6e3d26 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -741,7 +741,7 @@ void EnPr2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_1F4 == 255) { gDPPipeSync(POLY_OPA_DISP++); 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 e34ffe1f6..d71de14f7 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -506,7 +506,7 @@ void EnPrz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_1EC == 255) { gDPPipeSync(POLY_OPA_DISP++); 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 cef354c70..34ce6bafb 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -436,7 +436,7 @@ void EnPst_Draw(Actor* thisx, PlayState* play) { EnPst* this = THIS; if (this->scheduleResult != POSTBOX_SCH_NONE) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPst_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index a8e222bec..80986adf4 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -725,7 +725,7 @@ void EnRacedog_DrawSelectionArrow(EnRacedog* this, PlayState* play) { if (shouldDrawSelectionArrow) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); EnRacedog_UpdateSelectionArrow(this); Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, &rotation); @@ -766,7 +766,7 @@ void EnRacedog_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); 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 6a3f1af5a..0c344e75f 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -873,8 +873,8 @@ void EnRaf_TransformLimbDraw(PlayState* play2, s32 limbIndex, Actor* thisx) { void EnRaf_Draw(Actor* thisx, PlayState* play) { EnRaf* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, EnRaf_TransformLimbDraw, &this->dyna.actor); @@ -948,7 +948,7 @@ void EnRaf_DrawEffects(EnRaf* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); 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 10d654cc7..a280e9bfa 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 @@ -1143,7 +1143,7 @@ void EnRailSkb_Draw(Actor* thisx, PlayState* play) { EnRailSkb* this = THIS; this->limbCount = 0; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnRailSkb_OverrideLimbDraw, EnRailSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { 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 853dbfd61..893062fbd 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -1076,7 +1076,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { this->limbIndex = 0; if (this->actor.shape.shadowAlpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); @@ -1085,7 +1085,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnRailgibud_OverrideLimbDraw, EnRailgibud_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); 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 8badfe741..e145291f6 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -961,8 +961,8 @@ void EnRat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot void EnRat_Draw(Actor* thisx, PlayState* play) { EnRat* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C974(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL60_XluNoCD(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnRat_OverrideLimbDraw, EnRat_PostLimbDraw, &this->actor); 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 b8e8e4139..01b9cdd6d 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -1338,7 +1338,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { this->limbIndex = 0; if (this->alpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->alpha); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); @@ -1349,7 +1349,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { func_800BC620(&pos, &sScale, 255, play); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); 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 64313c4be..3632efa2a 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -205,7 +205,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->eyeTexIndex]); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, 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 0acd6fbf9..a3a026f2b 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -164,12 +164,12 @@ void func_80BF3920(EnRgStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 32; i++, ptr++) { if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) { if (!phi_fp) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); phi_fp = true; } @@ -804,7 +804,7 @@ void EnRg_Update(Actor* thisx, PlayState* play) { void func_80BF547C(EnRg* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); @@ -856,7 +856,7 @@ void EnRg_Draw(Actor* thisx, PlayState* play) { if (!(this->unk_310 & 0x10)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BF59F8[this->unk_31E])); 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 85086d228..cb16e5f39 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -885,7 +885,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x0C, mtx); gSPSegment(POLY_OPA_DISP++, 0x08, 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 4f6dd1dc1..0d9ada5e0 100644 --- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c +++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c @@ -86,9 +86,11 @@ void EnRsn_Draw(Actor* thisx, PlayState* play) { EnRsn* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBombShopkeeperEyeTex)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnRsn_OverrideLimbDraw, EnRsn_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } 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 527d41b99..b67ca2141 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -320,7 +320,7 @@ void EnRu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); 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 e270f1515..d95337728 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -668,7 +668,7 @@ void EnRuppecrow_Update(Actor* thisx, PlayState* play) { void EnRuppecrow_Draw(Actor* thisx, PlayState* play) { EnRuppecrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 a223fe900..e7eaaed99 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -686,7 +686,7 @@ void EnRz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) { AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(&object_rz_Matanimheader_00D768), 0); 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 14904e5b7..27c3279e6 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 @@ -1435,9 +1435,10 @@ void EnSGoro_DrawUnrolled(EnSGoro* this, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x8, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gDPPipeSync(POLY_OPA_DISP++); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, @@ -1449,7 +1450,8 @@ void EnSGoro_DrawUnrolled(EnSGoro* this, PlayState* play) { void EnSGoro_DrawRolledUp(EnSGoro* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c index be449e0a3..c135f63da 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c @@ -181,7 +181,7 @@ void EnScRuppe_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeInfo[this->ruppeIndex].tex)); diff --git a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c index d2a9d525e..4ef4fdd46 100644 --- a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c +++ b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c @@ -90,7 +90,7 @@ void EnScopecoin_Draw(Actor* thisx, PlayState* play) { EnScopecoin* this = THIS; GraphicsContext* gfxCtx = play->state.gfxCtx; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); OPEN_DISPS(gfxCtx); diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index 321c790d1..525696ead 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -354,7 +354,7 @@ void EnScopecrow_Update(Actor* thisx, PlayState* play) { void EnScopecrow_Draw(Actor* thisx, PlayState* play) { EnScopecrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } 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 07e2646a0..46add654a 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -823,7 +823,7 @@ void EnScopenuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) void EnScopenuts_Draw(Actor* thisx, PlayState* play) { EnScopenuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnScopenuts_OverrideLimbDraw, EnScopenuts_PostLimbDraw, EnScopenuts_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index 8835d92da..3390f4f0c 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -323,7 +323,7 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, 0, 0, 0, (BREG(52) + 50)); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); 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 538f7d304..1e1f19d70 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -177,12 +177,12 @@ void EnSekihi_Draw(Actor* thisx, PlayState* play) { if (this->xluDList != NULL) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, this->xluDList); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->opaDList); CLOSE_DISPS(play->state.gfxCtx); 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 871bb85a8..5dcdeaa8e 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -1138,7 +1138,7 @@ void EnSellnuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) void EnSellnuts_Draw(Actor* thisx, PlayState* play) { EnSellnuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSellnuts_OverrideLimbDraw, EnSellnuts_PostLimbDraw, EnSellnuts_TransformLimbDraw, &this->actor); 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 bdd5b787f..643509515 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -436,7 +436,7 @@ void EnShn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { void EnShn_Draw(Actor* thisx, PlayState* play) { EnShn* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnShn_OverrideLimbDraw, EnShn_PostLimbDraw, EnShn_TransformLimbDraw, &this->actor); 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 735111a2b..cf829bda0 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -1131,7 +1131,7 @@ void EnSkb_Draw(Actor* thisx, PlayState* play) { EnSkb* this = THIS; this->limbCount = 0; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSkb_OverrideLimbDraw, EnSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { 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 3aab4b3ce..8d7a0e071 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -1168,8 +1168,8 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); if (this->iceBlockTimer != ICE_BLOCK_UNUSED) { gSPSegment(POLY_XLU_DISP++, 10, D_801AEFA0); @@ -1229,7 +1229,7 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { if ((this->actor.params != EN_SLIME_TYPE_BLUE) && (this->actor.scale.x > 0.0f)) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (2000.0f * this->actor.scale.y), this->actor.world.pos.z, MTXMODE_NEW); 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 baf3ccdfa..5a65c1094 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -1182,7 +1182,7 @@ void EnSnowman_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnSnowman_Draw(Actor* thisx, PlayState* play) { EnSnowman* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnSnowman_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), @@ -1192,7 +1192,7 @@ void EnSnowman_Draw(Actor* thisx, PlayState* play) { void EnSnowman_DrawSnowPile(Actor* thisx, PlayState* play) { EnSnowman* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->snowPileSkelAnime.skeleton, this->snowPileSkelAnime.jointTable, this->snowPileSkelAnime.dListCount, NULL, NULL, &this->actor); } 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 a23600fb9..8d8991fba 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -1501,7 +1501,7 @@ void EnSob1_DrawCursor(PlayState* play, EnSob1* this, f32 x, f32 y, f32 z, u8 dr OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1563,7 +1563,7 @@ void EnSob1_DrawStickDirectionPrompt(PlayState* play, EnSob1* this) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1647,7 +1647,7 @@ void EnSob1_ZoraShopkeeper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x0C, EnSob1_EndDList(play->state.gfxCtx)); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sZoraShopkeeperEyeTextures[this->eyeTexIndex])); @@ -1672,7 +1672,7 @@ void EnSob1_GoronShopkeeper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sGoronShopkeeperEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); @@ -1695,7 +1695,7 @@ void EnSob1_BombShopkeeper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBombShopkeeperEyeTex)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSob1_BombShopkeeper_OverrideLimbDraw, EnSob1_BombShopkeeper_PostLimbDraw, &this->actor); @@ -1707,7 +1707,7 @@ void EnSob1_BombShopkeeper_Draw(Actor* thisx, PlayState* play) { EnSob1_DrawCursor(play, this, this->cursorPos.x, this->cursorPos.y, this->cursorPos.z, this->drawCursor); EnSob1_DrawStickDirectionPrompt(play, this); frames = play->gameplayFrames; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 60846fda8..358a8eeec 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -926,7 +926,7 @@ void EnSsh_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80976178[this->blinkState])); 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 994a455a6..e8b67451c 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -246,7 +246,7 @@ void func_808A54B0(EnSt* this, PlayState* play) { gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->unk_2C0].segment); - func_8012C2DC(play->state.gfxCtx); + 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); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); Matrix_Scale(0.06f, 0.12f, 0.06f, MTXMODE_APPLY); @@ -924,11 +924,11 @@ void func_808A7478(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (func_808A6A3C(this)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSt_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSt_OverrideLimbDraw, NULL, &this->actor, POLY_OPA_DISP); } 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 215845341..3908e863f 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -758,7 +758,7 @@ void EnSth_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, sShirtColors[1].r, sShirtColors[1].g, sShirtColors[1].b, 255)); 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 ba6d72cb6..723f7634f 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -114,7 +114,7 @@ void EnSth2_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, sEnvColors[1].r, sEnvColors[1].g, sEnvColors[1].b, 255)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 90, 110, 130, 255)); 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 1692e1461..b89976faf 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 @@ -483,7 +483,7 @@ void EnStoneheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec Gfx* gfx; if ((limbIndex == SOLDIER_LIMB_LEFT_HAND) && (this->bottleDisplay != EN_STONE_BOTTLE_NONE)) { - gfx = func_8012C2B4(*gfxp); + gfx = Gfx_SetupDL71(*gfxp); sLeftHandPos.x = 320.0f; sLeftHandPos.y = 210.0f; @@ -520,13 +520,13 @@ void EnStoneheishi_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnStoneheishi_OverrideLimbDraw, EnStoneheishi_PostLimbDraw, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, 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 dd82ef682..d90752d9b 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 @@ -579,7 +579,7 @@ void EnStopheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 void EnStopheishi_Draw(Actor* thisx, PlayState* play) { EnStopheishi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnStopheishi_OverrideLimbDraw, EnStopheishi_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c index 912a700f8..3bc1f55fd 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c @@ -136,7 +136,8 @@ void EnStream_Draw(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gfx = POLY_XLU_DISP; gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); multipliedFrames = frames * 20; @@ -145,5 +146,6 @@ void EnStream_Draw(Actor* thisx, PlayState* play) { -multipliedFrames, 64, 64)); gSPDisplayList(&gfx[2], gWaterVortexDL); POLY_XLU_DISP = &gfx[3]; + CLOSE_DISPS(play->state.gfxCtx); } 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 196b29263..877a400d5 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -1543,9 +1543,12 @@ void EnSuttari_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MtxFToYXZRot(curState, &bombBag->shape.rot, false); } } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gBombShopBagDL); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1568,7 +1571,7 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) { if (this->flags1 & 0x80) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 255, 255, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 55, 55, 255, 0)); gDPPipeSync(POLY_OPA_DISP++); @@ -1576,7 +1579,7 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) { this->skelAnime.dListCount, EnSuttari_OverrideLimbDraw, EnSuttari_PostLimbDraw, EnSuttari_TransformLimbDraw, &this->actor); if (this->flags1 & 0x80) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos = this->actor.world.pos; scale.x = 0.2f; scale.y = 0.2f; 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 11e84301b..3f32564bb 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -1296,7 +1296,7 @@ void EnSw_Draw(Actor* thisx, PlayState* play) { if (ENSW_GET_3(&this->actor)) { func_800B8050(&this->actor, play, MTXMODE_NEW); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateXS(-0x3C72, MTXMODE_APPLY); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSw_OverrideLimbDraw, NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index abc773637..ae4716172 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -320,7 +320,7 @@ void EnSyatekiCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnSyatekiCrow_Draw(Actor* thisx, PlayState* play) { EnSyatekiCrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSyatekiCrow_OverrideLimbDraw, EnSyatekiCrow_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index 20abd71e4..6fefd906a 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -476,7 +476,7 @@ void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(flowerPos.x, flowerPos.y, flowerPos.z, MTXMODE_NEW); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 01c8e96a5..2a1ea5357 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 @@ -1502,7 +1502,7 @@ void EnSyatekiMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 401bc34ff..324307d8a 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -489,7 +489,7 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2A6 == 1) { gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); } else { @@ -498,7 +498,7 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSyatekiOkuta_OverrideLimbDraw, NULL, &this->actor); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->actionFunc == func_80A365EC) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z + 20.0f, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index 8a3a65ed2..f582063b7 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -505,7 +505,7 @@ void EnSyatekiWf_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSyatekiWf_OverrideLimbDraw, EnSyatekiWf_PostLimbDraw, &this->actor); 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 dfa1e0bb7..1f97e5c57 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -617,7 +617,7 @@ void EnTab_Draw(Actor* thisx, PlayState* play) { if (this->unk_1D8 != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BE1B24[this->unk_31E])); 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 11d984fe7..d64053b5a 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 @@ -1190,7 +1190,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) { this->limbIndex = 0; if (this->actor.shape.shadowAlpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); @@ -1199,7 +1199,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnTalkGibud_OverrideLimbDraw, EnTalkGibud_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); 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 fec6a2d3b..4c2d3eaaf 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -369,7 +369,7 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < this->actor.params; i++, ptr++) { if (ptr->unk_24 == 1) { 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 2d1c29970..dd4f389a3 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -592,7 +592,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gWartBubbleMaterialDL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 150); @@ -637,7 +637,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) { } } - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150); gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL); @@ -654,7 +654,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) { tanron2 = tanron2->next; } - func_8012C974(play->state.gfxCtx); + Gfx_SetupDL60_XluNoCD(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255); 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 c3d62e166..483edd145 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -452,7 +452,7 @@ void EnTanron3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if ((this->fogTimer % 2) != 0) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099); } 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 24d036bee..18e24c5e7 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -483,7 +483,7 @@ void EnTanron5_Draw(Actor* thisx, PlayState* play) { if ((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, this->unk_148); @@ -506,14 +506,14 @@ void func_80BE5C10(Actor* thisx, PlayState* play) { if (((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) && phi_v0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_1A0 == 0) { texture = gDropArrows1Tex; } else { texture = gDropMagicLargeTex; } - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(texture)); diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.c b/src/overlays/actors/ovl_En_Test/z_en_test.c index d98790c6f..1372d8791 100644 --- a/src/overlays/actors/ovl_En_Test/z_en_test.c +++ b/src/overlays/actors/ovl_En_Test/z_en_test.c @@ -133,7 +133,7 @@ void func_80863048(PlayState* play, EnTestStruct* arg1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); @@ -267,7 +267,7 @@ void EnTest_Draw(Actor* thisx, PlayState* play) { mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_8018450C(play, &this->skeletonInfo, mtx, EnTest_OverrideKeyframeDraw, NULL, thisx); func_80863048(play, this->unk_20C); } 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 fd1710264..8e5a39bf8 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -125,7 +125,7 @@ void EnTest2_Draw(Actor* thisx, PlayState* play) { if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (dList != NULL) { 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 70ab37232..b56112421 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -240,7 +240,7 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW); Matrix_Scale(ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, MTXMODE_APPLY); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00])); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -255,7 +255,7 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 210, 210, 230, 128); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); @@ -282,7 +282,7 @@ void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { OPEN_DISPS(play->state.gfxCtx); if (gfxHead != NULL) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetTileSize(gfx++, 1, sp70->h.x1 & 0xFFFF, sp70->h.y1 & 0xFFFF, (sp70->h.x1 + 60) & 0xFFFF, (sp70->h.y1 + 60) & 0xFFFF); @@ -307,7 +307,7 @@ void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 220, 220, 230, 192); gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 0); @@ -1295,7 +1295,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 128, 128, 128, this->unk_282 >> 1); gDPSetEnvColor(POLY_XLU_DISP++, 230, 230, 180, this->unk_282); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZS(this->unk_278 + (i << 2), MTXMODE_APPLY); 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 9c672ed51..fa378ec68 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -330,7 +330,7 @@ void func_80AF14FC(PlayState* play2, EnTest7Struct2* arg1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C1C0(play->state.gfxCtx); + Gfx_SetupDL26_Opa(play->state.gfxCtx); Matrix_Push(); 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 ed048288e..0672bd4bf 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -190,7 +190,8 @@ void EnTg_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 0, 50, 160, 0)); @@ -260,7 +261,7 @@ void EnTg_DrawHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects) { OPEN_DISPS(play->state.gfxCtx); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < numEffects; i++, effect++) { if (effect->isEnabled == true) { 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 a26095bc7..2bef1cda2 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -1128,7 +1128,7 @@ void func_80C13354(EnThiefbird* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gSPDisplayList(&gfx[1], gTakkuriFeatherMaterialDL); gfx = &gfx[2]; @@ -1154,7 +1154,7 @@ void func_80C13354(EnThiefbird* this, PlayState* play2) { void EnThiefbird_Draw(Actor* thisx, PlayState* play) { EnThiefbird* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnThiefbird_OverrideLimbDraw, EnThiefbird_PostLimbDraw, &this->actor); if (this->actor.colorFilterTimer > 0) { 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 3d5c7a741..cfae13191 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -1161,9 +1161,10 @@ void EnTite_Draw(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); if (this->actor.params == ENTITE_MINUS_2) { gSPSegment(&gfx[1], 0x08, D_80896B24[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 01fa7c7cd..fb5f72c76 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -1382,7 +1382,7 @@ void EnTk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 25); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AEFA90[this->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 6c0733979..6eff18d29 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -728,7 +728,7 @@ void EnToto_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->blinkInfo.eyeTexIndex])); Scene_SetRenderModeXlu(play, 0, 1); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, 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 e4a4a4ab8..42be7784c 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -1571,7 +1571,7 @@ void EnTrt_DrawCursor(PlayState* play, EnTrt* this, f32 x, f32 y, f32 z, u8 draw OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1632,7 +1632,7 @@ void EnTrt_DrawStickDirectionPrompt(PlayState* play, EnTrt* this) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1793,7 +1793,7 @@ void EnTrt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, 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 67f52e064..951724668 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -941,7 +941,7 @@ void func_80AD56E8(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8])); 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 2ba130869..a3c267846 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -179,7 +179,7 @@ void func_80A85788(EnTruUnkStruct* arg0, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { f32 alpha; @@ -239,7 +239,7 @@ void func_80A85BCC(EnTruUnkStruct* arg0, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { f32 alpha; @@ -295,7 +295,7 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { f32 alpha; @@ -305,7 +305,7 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) { } if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, gKoumeDustMaterialDL); flag = true; } @@ -494,7 +494,7 @@ s32 func_80A86B0C(EnTru* this, PlayState* play) { s32 func_80A86BAC(EnTru* this, PlayState* play) { if (this->unk_34E & 0x400) { Matrix_Push(); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -524,7 +524,7 @@ s32 func_80A86BAC(EnTru* this, PlayState* play) { if (this->unk_34E & 0x800) { Matrix_Push(); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -1265,7 +1265,7 @@ void EnTru_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); 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 09ec80172..2c8e4ed8a 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 @@ -527,7 +527,7 @@ void EnTruMt_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro } if (limbIndex == KOUME_LIMB_BROOM) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -583,7 +583,7 @@ void EnTruMt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex])); 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 22ce0600c..894c07002 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -627,7 +627,7 @@ void EnTsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AE11C8[this->unk_22E])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AE11C8[this->unk_22E])); 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 29778ec71..2f68391b1 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -514,7 +514,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_OPA_DISP = &gfx[1]; @@ -524,7 +524,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) { if (this->unk_210 == 2) { gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 60]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_60]); gDPSetColorDither(&gfx[1], G_CD_DISABLE); Matrix_Translate(this->unk_234.x, this->unk_234.y + 10.0f, this->unk_234.z, MTXMODE_NEW); 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 a4b3f7cc6..f4f89d79e 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -668,7 +668,7 @@ void EnWallmas_DrawShadow(EnWallmas* this, PlayState* play) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 44]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_44]); gDPSetPrimColor(&gfx[1], 0, 0, 0, 0, 0, 255); func_800C0094(this->actor.floorPoly, this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, &mf); @@ -742,7 +742,7 @@ void EnWallmas_Draw(Actor* thisx, PlayState* play) { EnWallmas* this = THIS; if (this->actionFunc != EnWallmas_WaitToDrop) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnWallmas_OverrideLimbDraw, EnWallmas_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, 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 6d5522e8a..a61e7e8df 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 @@ -262,7 +262,7 @@ void EnWarptag_Update(Actor* thisx, PlayState* play) { void EnWarpTag_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWarpTagRainbowTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 159b7444e..b14f82424 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 @@ -289,12 +289,12 @@ void EnWaterEffect_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) { if ((ptr->unk_00 == 1) || (ptr->unk_00 == 2)) { if (!phi_s4) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gSPDisplayList(POLY_XLU_DISP++, object_water_effect_DL_004260); @@ -326,7 +326,7 @@ void EnWaterEffect_Draw(Actor* thisx, PlayState* play2) { for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) { if (ptr->unk_00 == 3) { if (!phi_s4) { - func_8012C448(gfxCtx); + Gfx_SetupDL44_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0); @@ -524,8 +524,8 @@ void func_80A5A184(Actor* thisx, PlayState* play2) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_144); i++, ptr++) { if (ptr->unk_00 == 4) { @@ -623,7 +623,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 165, 235, 255, 128); @@ -634,7 +634,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { if ((this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) || (this->actor.params == ENWATEREFFECT_TYPE_GYORG_PRIMARY_SPRAY)) { if (this->unk_E2C > 1.0f) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000DE0)); Matrix_Scale(this->unk_DC8[1].y, this->unk_DC8[1].z, this->unk_DC8[1].y, MTXMODE_APPLY); @@ -646,7 +646,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { Matrix_Pop(); if (this->unk_E30 > 1.0f) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E0C)); Matrix_Scale(this->unk_DC8[2].y, this->unk_DC8[2].z, this->unk_DC8[2].y, MTXMODE_APPLY); @@ -661,7 +661,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { } if ((this->unk_E34 > 1.0f) && (this->actor.params != ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E40)); Matrix_Scale(this->unk_DC8[3].y, this->unk_DC8[3].z, this->unk_DC8[3].y, MTXMODE_APPLY); @@ -674,7 +674,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { if ((this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) || (this->actor.params == ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E58)); Matrix_Scale(this->unk_DC8[4].y, this->unk_DC8[4].z, this->unk_DC8[4].y, MTXMODE_APPLY); @@ -684,12 +684,12 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { } if (this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) { if (ptr->unk_00 == 3) { if (!phi_s4) { - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0); 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 ed3ec36f9..b05bc4869 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -1575,7 +1575,7 @@ void EnWf_Draw(Actor* thisx, PlayState* play) { if (this->actionFunc != func_80990F50) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actor.params == 0) { gSPSegment(POLY_OPA_DISP++, 0x08, sNormalEyeTextures[this->eyeIndex]); 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 209218163..b64af5a88 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1451,8 +1451,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->action == EN_WIZ_ACTION_BURST_INTO_FLAMES) || (this->alpha != 255)) { Scene_SetRenderModeXlu(play, 1, 2); @@ -1502,8 +1502,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { } for (i = 0; i < platformCount; i++) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->ghostPos[i].x != 0.0f) && (this->ghostPos[i].z != 0.0f)) { Matrix_Translate(this->ghostPos[i].x, this->ghostPos[i].y + 10.0f, this->ghostPos[i].z, MTXMODE_NEW); @@ -1529,8 +1529,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); } - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); // Draw the light emanating from the Wizrobe's platform if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) { diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c index 4a3689005..02955f0d0 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c @@ -96,8 +96,8 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) { s32 pad; EnWizBrock* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); 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 bad93b685..4a7f6cd20 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 @@ -658,8 +658,8 @@ void EnWizFire_DrawIcePool(EnWizFire* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if ((this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->action == EN_WIZ_FIRE_ACTION_POOL)) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, MTXMODE_NEW); Matrix_Scale(this->poolScale, this->poolScale, this->poolScale, MTXMODE_APPLY); @@ -691,8 +691,8 @@ void EnWizFire_DrawFirePoolAndFlame(EnWizFire* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); if ((this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->action == EN_WIZ_FIRE_ACTION_POOL)) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Push(); Matrix_Translate(this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, MTXMODE_NEW); @@ -754,8 +754,8 @@ void EnWizFire_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Push(); for (i = ARRAY_COUNT(this->magicProjectilePos) - 1; i >= this->lowestUsedIndex; i--) { @@ -875,8 +875,8 @@ void EnWizFire_DrawEffects(EnWizFire* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); materialFlag = false; for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index 3c0357999..874e0a63e 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -486,10 +486,10 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) { red = green = blue = 255; } - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); if ((thisx->params == WOOD_LEAF_GREEN) || (thisx->params == WOOD_LEAF_YELLOW)) { - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, red, green, blue, 127); @@ -501,7 +501,7 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, D_808C4D70[this->drawType & 0xF]); } else { - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, D_808C4D54[this->drawType & 0xF]); 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 c5224f8e8..4bf82f55a 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -458,10 +458,10 @@ void EnYb_Draw(Actor* thisx, PlayState* play) { if (this->alpha != 0) { if (this->alpha < 255) { if (this->alpha > 128) { - func_8012C2B4(POLY_XLU_DISP++); + Gfx_SetupDL71(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 2, 2); } else { - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 1, 2); } gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); @@ -473,7 +473,7 @@ void EnYb_Draw(Actor* thisx, PlayState* play) { this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawXlu, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 0, 1); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawOpa, &this->actor); 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 7a160e368..a732f0124 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -347,7 +347,8 @@ void EnZo_Draw(Actor* thisx, PlayState* play) { TexturePtr eyeTextures[] = { gZoraEyeOpenTex, gZoraEyeHalfTex, gZoraEyeClosedTex }; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); @@ -370,5 +371,6 @@ void EnZo_Draw(Actor* thisx, PlayState* play) { } SubS_DrawShadowTex(&this->actor, &play->state, shadowTex); + CLOSE_DISPS(play->state.gfxCtx); } 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 998c2b186..cdf6b1766 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -759,7 +759,7 @@ void EnZob_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2F4 & 0x20) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->unk_312, 1000); 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 826664a9a..57c85a664 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -628,7 +628,7 @@ void EnZod_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->stateFlags & TIJO_STATE_2) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->fogNear, 1000); 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 ccbb1f752..979187532 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -1049,11 +1049,11 @@ void EnZog_Draw(Actor* thisx, PlayState* play) { if (this->unk_30A & 8) { if (this->unk_322 > 128) { gfx = POLY_XLU_DISP++; - func_8012C2B4(gfx); + Gfx_SetupDL71(gfx); Scene_SetRenderModeXlu(play, 2, 2); } else { gfx = POLY_XLU_DISP++; - func_8012C304(gfx); + Gfx_SetupDL72(gfx); Scene_SetRenderModeXlu(play, 1, 2); } @@ -1068,7 +1068,7 @@ void EnZog_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, func_80B95598, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 0, 1); gfx = POLY_OPA_DISP; 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 21201346a..0bfc986dc 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -697,8 +697,9 @@ void func_80B32F04(Actor* thisx, PlayState* play) { this->actor.scale.z * (((sp7C + 1.0f) * 0.1f) + 9.0f), MTXMODE_APPLY); OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_XLU_DISP; - gfx = func_8012C868(gfx); + gfx = Gfx_SetupDL20_NoCD(gfx); gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); @@ -725,13 +726,13 @@ void func_80B331C8(Actor* thisx, PlayState* play) { Matrix_Scale(this->unk_1E0, this->unk_1E0, this->unk_1E0, MTXMODE_APPLY); if (this->unk_1ED >= 254) { - func_8012C28C(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); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gSPDisplayList(POLY_OPA_DISP++, object_zoraegg_DL_005250); } else { - func_8012C304(POLY_XLU_DISP++); + 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); @@ -862,7 +863,7 @@ void func_80B33818(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B33950[this->unk_1F2])); 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 039c2a3e6..bd8ff3435 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -738,7 +738,7 @@ void EnZos_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2B6 & 0x40) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->unk_2BC, 1000); 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 f382cdf80..2e9fe8b3f 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -1398,7 +1398,7 @@ void EnZot_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->unk_2EC])); 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 c6dca4bd7..fdf50a820 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -563,7 +563,7 @@ void EnZov_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); phi_a1 = 0; curFrame = this->skelAnime.curFrame; phi_v1 = this->unk_2EC; 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 446470dbe..3e9ef53f4 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -182,7 +182,7 @@ void func_80BDC830(EnZowStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); u8 flag = false; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { if (ptr->unk_00 == 1) { @@ -213,7 +213,7 @@ void func_80BDC9DC(EnZowStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); u8 flag = false; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { if (ptr->unk_00 == 3) { @@ -244,7 +244,7 @@ void func_80BDCB84(EnZowStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); u8 flag = false; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { if (ptr->unk_00 == 2) { @@ -629,7 +629,7 @@ void EnZow_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->unk_2CE >= 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp54[this->unk_2C4])); diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c index 4880a326e..61b172ea7 100644 --- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c +++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c @@ -609,7 +609,7 @@ void MirRay_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(1.0f, 1.0f, this->reflectIntensity, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c index 8f6fcbfe9..ae8c81f26 100644 --- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c +++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c @@ -361,7 +361,7 @@ void MirRay3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(1.0f, 1.0f, this->unk_214, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c index c32fb582d..ca4efd4bb 100644 --- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c +++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c @@ -274,7 +274,8 @@ void ObjAqua_Draw(Actor* thisx, PlayState* play) { s32 actionFuncTemp = this->actionFunc == func_80ACBDFC; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); framesTemp = ((play->gameplayFrames & 0x7FFFFFFF) * -0xA) & 0x1FF; if (actionFuncTemp) { framesTemp >>= 1; 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 93adab401..bc1d543cc 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -350,7 +350,7 @@ void func_809A5960(ObjArmos* this, PlayState* play) { (Math_CosS(this->dyna.actor.shape.rot.y) * -9.0f) + this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); Matrix_Scale(0.014f, 0.014f, 0.014f, MTXMODE_APPLY); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); @@ -366,7 +366,7 @@ void func_809A5A3C(ObjArmos* this, PlayState* play) { if (this->dyna.actor.floorPoly != NULL) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); 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 7cc5dfb17..003b94932 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -939,7 +939,7 @@ void func_80938E00(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); diff --git a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c index fb7f1466c..0a50c85c5 100644 --- a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c +++ b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c @@ -220,13 +220,16 @@ void func_80A359B4(Actor* thisx, PlayState* play) { Matrix_RotateXS(thisx->world.rot.x, MTXMODE_APPLY); Matrix_RotateYS(-thisx->world.rot.y, MTXMODE_APPLY); Matrix_Translate(0.0f, -2600.0f, 0.0f, MTXMODE_APPLY); + OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_f52_obj_DL_000698); gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_0008D0); gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_000960); gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_0007A8); + CLOSE_DISPS(play->state.gfxCtx); } @@ -234,20 +237,26 @@ void func_80A35B18(Actor* thisx, PlayState* play) { Matrix_Translate(thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, MTXMODE_NEW); Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY); Matrix_RotateYS(thisx->shape.rot.y, MTXMODE_APPLY); + OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_f52_obj_DL_000570); + CLOSE_DISPS(play->state.gfxCtx); } void func_80A35BD4(Actor* thisx, PlayState* play) { Matrix_Translate(thisx->world.pos.x, thisx->world.pos.y - 4.0f, thisx->world.pos.z, MTXMODE_NEW); Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY); + OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_f52_obj_DL_000840); + CLOSE_DISPS(play->state.gfxCtx); } 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 84b2abc63..66ef9c691 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -465,7 +465,7 @@ void func_8093A418(Actor* thisx, PlayState* play) { sp28 = (2300.0f - this->actor.projectedPos.z) * 2.55f; this->actor.shape.shadowAlpha = sp28 * (32.0f / 51); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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, (s32)sp28); @@ -489,20 +489,20 @@ void func_8093A608(Actor* thisx, PlayState* play) { if (this->actionFunc == func_80939EF4) { if ((this->actor.projectedPos.z <= 2200.0f) || ((this->unk_203 & 1) && (this->actor.projectedPos.z < 2300.0f))) { - func_8012C28C(play->state.gfxCtx); + 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, 0x9B, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, object_bombiwa_DL_004560); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_004688); } else if (this->actor.projectedPos.z < 2300.0f) { sp38 = (2300.0f - this->actor.projectedPos.z) * 2.55f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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); @@ -510,7 +510,7 @@ void func_8093A608(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_004560); } } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) { ptr = &this->unk_190[i]; 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 facd8de41..660d9016d 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -374,14 +374,15 @@ void ObjChan_Draw(Actor* thisx, PlayState* play) { Gfx* xlu; OPEN_DISPS(play->state.gfxCtx); + Matrix_RotateYS(this->rotation, MTXMODE_APPLY); - opa = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + opa = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&opa[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&opa[1], object_obj_chan_DL_000AF0); POLY_OPA_DISP = &opa[2]; - xlu = func_8012C2B4(POLY_XLU_DISP); + xlu = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&xlu[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&xlu[1], object_obj_chan_DL_000A10); POLY_XLU_DISP = &xlu[2]; @@ -401,10 +402,12 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) { Gfx* dl; OPEN_DISPS(play->state.gfxCtx); - dl = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + + dl = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&dl[1], object_obj_chan_DL_002358); POLY_OPA_DISP = &dl[2]; + CLOSE_DISPS(play->state.gfxCtx); if (this->stateFlags & OBJCHAN_STATE_ON_FIRE) { @@ -425,7 +428,7 @@ void ObjChan_DrawFire(ObjChan* this, PlayState* play) { sObjChanFlameSize[OBJCHAN_SUBTYPE(&this->actor)].y * this->flameSize, 1.0f, MTXMODE_APPLY); Matrix_Translate(0.0f, sObjChanFlameYOffset[OBJCHAN_SUBTYPE(&this->actor)], 0.0f, MTXMODE_APPLY); - dl = func_8012C2B4(POLY_XLU_DISP); + dl = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPSegment(&dl[1], 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, -sp4C * 20, 32, 128)); gDPSetPrimColor(&dl[2], 128, 128, 255, 255, 0, 255); diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c index 79007175d..4d2bee782 100644 --- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c +++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c @@ -199,7 +199,7 @@ void ObjChikuwa_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2A0 < this->unk_29C) { for (i = 0; i < this->unk_29C; i++) { 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 412bade05..1f3f7f902 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -556,7 +556,7 @@ void ObjComb_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (118.0f * this->actor.scale.y), this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); 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 0dba9a21f..c4e61efa3 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -505,7 +505,7 @@ void func_80B13C08(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_dhouse_DL_004928); diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c index 5a9ef2d05..ee8c84877 100644 --- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c +++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c @@ -45,7 +45,8 @@ void ObjDinner_Update(Actor* thisx, PlayState* play) { void ObjDinner_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_obj_dinner_DL_0011E0); diff --git a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c index f3c271c69..8a11c507b 100644 --- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c +++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c @@ -321,7 +321,8 @@ void ObjDora_Draw(Actor* thisx, PlayState* play) { f32 gongForceX; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actionFunc == ObjDora_MoveGong) { gongForceX = this->gongForce.x; diff --git a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c index 723dfcf3e..0bd55b296 100644 --- a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c +++ b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c @@ -104,7 +104,7 @@ void func_80A34A44(ObjEntotu* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_f53_obj_DL_000158); @@ -136,7 +136,7 @@ void func_80A34B28(ObjEntotu* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20)); 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 ac9184923..22a448e54 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -341,7 +341,7 @@ void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->dList); CLOSE_DISPS(play->state.gfxCtx); @@ -355,6 +355,6 @@ void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play) { void ObjEtcetera_DrawAnimated(Actor* thisx, PlayState* play) { ObjEtcetera* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->dyna.actor); } 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 f9f86501d..4804b8b87 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -384,7 +384,7 @@ void ObjFireshield_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 220, 0, this->unk_1A6); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0); 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 cc818c883..844f52506 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -668,7 +668,7 @@ void ObjFlowerpot_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_flowerpot_DL_0012E0); 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 c3d4d1398..409cbd837 100644 --- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c +++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c @@ -34,7 +34,7 @@ void ObjFunen_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - 0x8000), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); 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 73aa848a2..85e628359 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -184,11 +184,13 @@ void ObjGhaka_Update(Actor* thisx, PlayState* play) { void ObjGhaka_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_ghaka_DL_001A20); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_ghaka_DL_001980); + CLOSE_DISPS(play->state.gfxCtx); } 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 b1924c63b..6431a558b 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -439,7 +439,7 @@ void func_809AA54C(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, gObjGrass_D_809AA9F0); @@ -484,7 +484,7 @@ void func_809AA798(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gObjGrass_D_809AAA68); 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 8b851285a..40db98b1f 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -349,7 +349,7 @@ void ObjHakaisi_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_194 == 0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -429,7 +429,7 @@ void func_80B1544C(Actor* thisx, PlayState* play) { void func_80B154A0(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (OBJHAKAISI_GET_FF(thisx) == 4) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 aef42693b..f9d1f0252 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c @@ -267,7 +267,7 @@ void ObjHamishi_Draw(Actor* thisx, PlayState* play) { if ((thisx->projectedPos.z <= 2150.0f) || ((this->unk_1A2 & 1) && (thisx->projectedPos.z < 2250.0f))) { thisx->shape.shadowAlpha = 160; - func_8012C28C(play->state.gfxCtx); + 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); @@ -277,7 +277,7 @@ void ObjHamishi_Draw(Actor* thisx, PlayState* play) { f32 sp20 = (2250.0f - thisx->projectedPos.z) * 2.55f; thisx->shape.shadowAlpha = sp20 * 0.627451f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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); diff --git a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c index a2007ad9b..b390644c7 100644 --- a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c +++ b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c @@ -90,7 +90,8 @@ void ObjHariko_Draw(Actor* thisx, PlayState* play) { ObjHariko* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Push(); Matrix_RotateXS(this->headRotation.x, MTXMODE_APPLY); @@ -101,5 +102,6 @@ void ObjHariko_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, gHarikoFaceDL); Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c index 7b0351e78..d69c8d0fd 100644 --- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c +++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c @@ -199,7 +199,8 @@ void ObjHgdoor_Update(Actor* thisx, PlayState* play) { void ObjHgdoor_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); if (OBJHGDOOR_IS_RIGHT_DOOR(thisx)) { 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 26d89f00d..40e8b9323 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c @@ -145,7 +145,7 @@ void ObjHsblock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, 255); gSPDisplayList(POLY_OPA_DISP++, sDisplayLists[OBJHSBLOCK_GET_3(thisx)]); 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 692fa8448..b04dff8a0 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -639,21 +639,21 @@ void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play) { if ((this->actionFunc == func_80A54C04) || (this->actionFunc == func_80A54CEC)) { if (this->actor.projectedPos.z <= 4300.0f) { - func_8012C28C(play->state.gfxCtx); + 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, 0xFF, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, object_bombiwa_DL_002F60); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_003110); } else if (this->actor.projectedPos.z < 4500.0f) { sp38 = (4500.0f - this->actor.projectedPos.z) * 1.275f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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); @@ -665,7 +665,7 @@ void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play) { EnHugebombiwaStruct* ptr; Gfx* gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) { ptr = &this->unk_190[i]; @@ -697,9 +697,10 @@ void func_80A55B34(Actor* thisx, PlayState* play) { } OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) { ptr = &this->unk_190[i]; 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 0ef50dc98..10937f985 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 @@ -347,7 +347,7 @@ void ObjIcePoly_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index a1e0d64bc..a7d2714db 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -1527,7 +1527,7 @@ void func_80A26BF8(ObjIceblock* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); sp70.z = 0; for (i = 0; i < ARRAY_COUNT(this->unk_1B4); i++) { diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c index af05f0ba3..2aae58bad 100644 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c +++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c @@ -172,11 +172,11 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, &gObjectSyokudaiTypeSwitchCausesFlameDL); if (this->alpha > 0) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->alpha > 255) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, 255); } else { @@ -192,7 +192,7 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) { if (this->flameScaleProportion != 0.0f) { f32 scale; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); scale = (this->flameScaleProportion * 27.0f) / 10000.0f; gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (this->flameScroll * -20) & 0x1FF, diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c index 26191e397..df518ff43 100644 --- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c +++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c @@ -499,7 +499,7 @@ void ObjKendoKanban_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->boardFragments == OBJKENDOKANBAN_PART_FULL) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 b52a66d84..5bf35d48d 100644 --- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c +++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c @@ -73,7 +73,7 @@ void ObjKinoko_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gfx = POLY_XLU_DISP; gDPSetPrimColor(&gfx[0], 0, 0, 169, 63, 186, (u8)thisx->speed); 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 31e6905ec..ee8536caa 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -122,7 +122,7 @@ void ObjKzsaku_Update(Actor* thisx, PlayState* play) { void ObjKzsaku_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_kzsaku_DL_000040); 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 c54378a74..1062d18f8 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -193,18 +193,20 @@ void ObjLightblock_Draw(Actor* thisx, PlayState* play) { ObjLightblock* this = THIS; OPEN_DISPS(play->state.gfxCtx); + if (this->alpha < 255) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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); } else { - func_8012C28C(play->state.gfxCtx); + 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); } + CLOSE_DISPS(play->state.gfxCtx); } 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 34479a72a..408668ecb 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -370,7 +370,7 @@ void ObjLightSwitch_DrawOpa(ObjLightswitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, (u8)(this->colorR >> 6), (u8)(this->colorG >> 6), ((void)0, (u8)(this->colorB >> 6)), (u8)(this->colorAlpha >> 6)); gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0); @@ -406,7 +406,7 @@ void ObjLightSwitch_DrawXlu(ObjLightswitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, (u8)(this->colorR >> 6), (u8)(this->colorG >> 6), ((void)0, (u8)(this->colorB >> 6)), (u8)(this->colorAlpha >> 6)); gSPSegment(POLY_XLU_DISP++, 0x09, D_801AEF88); 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 e1ee3cee5..dab7489ee 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 @@ -146,13 +146,15 @@ void ObjMoonStone_Draw(Actor* thisx, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gGiMoonsTearItemDL); Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gGiMoonsTearGlowDL); + CLOSE_DISPS(play->state.gfxCtx); } 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 c3e180f50..736d80d10 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -591,7 +591,7 @@ void ObjOshihiki_Draw(Actor* thisx, PlayState* play) { } this->stateFlags &= ~PUSHBLOCK_MOVE_UNDER; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_DrawStep(play, this->texture, this->textureStep); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 dbd0dfe31..649343554 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -255,12 +255,12 @@ void func_80A851C8(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(animMat)); } if (opaDList != NULL) { - func_8012C28C(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++, opaDList); } if (xluDList != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, xluDList); } @@ -285,7 +285,8 @@ void func_80A85304(Actor* thisx, PlayState* play) { } OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(sp6C); i++) { index = sp6C[i]; AnimatedMat_Draw(play, Lib_SegmentedToVirtual(info->animMat[index])); @@ -293,5 +294,6 @@ void func_80A85304(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, info->xluDLists[index]); }; + CLOSE_DISPS(play->state.gfxCtx); } 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 0b5021ccb..e06dbc30b 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -364,7 +364,7 @@ void func_809A3F0C(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sp28->r, sp28->g, sp28->b, 255); 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 3c8a7ecc0..d224125dd 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -259,12 +259,14 @@ void ObjRaillift_Draw(Actor* thisx, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScrollEnvColor(play->state.gfxCtx, 0, play->gameplayFrames, 0, 32, 32, 1, 0, 0, 32, 32, 0, 0, 0, 160)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, object_raillift_DL_004BF0); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c index 6f93935b2..bd567ca2d 100644 --- a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c +++ b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c @@ -85,7 +85,7 @@ void ObjShutter_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, gBankShutterDL); diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c index fa04972ef..28ce8cda8 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -684,7 +684,7 @@ void ObjSkateblock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_DrawStep(play, D_80A22A18, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c index dd02f6c1b..a34050cc2 100644 --- a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c +++ b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c @@ -115,7 +115,7 @@ void func_80A3D9C4(ObjSmork* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20)); 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 c94d67860..cd9eed10b 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -818,7 +818,7 @@ void func_80B04D34(Actor* thisx, PlayState* play) { if ((ptr->unk_28 != NULL) && (ptr->unk_2C > 0)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); 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 907df33fc..fb34d736a 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -812,7 +812,7 @@ void ObjSpidertent_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(gfx++, 0, 0xFF, this->unk_3C2, this->unk_3C3, this->unk_3C4, temp_f18); gSPDisplayList(gfx++, D_80B31350[params].unk_00); diff --git a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c index 4541baa2a..4ff089a72 100644 --- a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c +++ b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c @@ -659,7 +659,7 @@ void ObjSpinyroll_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); temp_f26 = Math_CosS(this->dyna.actor.shape.rot.y) * 120.0f; temp_f28 = Math_SinS(this->dyna.actor.shape.rot.y) * -120.0f; 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 2c03f8689..70d6c2619 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -968,12 +968,14 @@ void ObjSwitch_DrawFloorSwitch(ObjSwitch* this, PlayState* play) { Gfx* opa; OPEN_DISPS(play->state.gfxCtx); + opa = POLY_OPA_DISP; - gSPDisplayList(opa++, &sSetupDL[6 * 25]); + gSPDisplayList(opa++, gSetupDLs[SETUPDL_25]); gSPMatrix(opa++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(opa++, 0, 0x80, this->color.r, this->color.g, this->color.b, 255); gSPDisplayList(opa++, gFloorSwitch1DL); POLY_OPA_DISP = opa; + CLOSE_DISPS(play->state.gfxCtx); } else { Gfx_DrawDListOpa(play, sFloorSwitchDL[OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor)]); @@ -990,7 +992,7 @@ void ObjSwitch_DrawVisibleEyeSwitch(ObjSwitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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); gSPSegment(POLY_OPA_DISP++, 0x08, sEyeSwitchTextures[subType][this->eyeTexIndex]); gSPDisplayList(POLY_OPA_DISP++, sEyeSwitchDL[subType]); @@ -1004,7 +1006,7 @@ void ObjSwitch_DrawInvisibleEyeSwitch(ObjSwitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, sEyeSwitchTextures[subType][this->eyeTexIndex]); gSPDisplayList(POLY_XLU_DISP++, sEyeSwitchDL[subType]); @@ -1027,8 +1029,8 @@ void ObjSwitch_DrawCrystalSwitch(ObjSwitch* this, PlayState* play) { func_800B8118(&this->dyna.actor, play, 0); AnimatedMat_DrawStep(play, sCrystalSwitchAnimatedMat, this->crystalAnimTimer); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(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++, gCrystalSwitchBaseDL); 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 902caa42b..1b1ca74a0 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -293,7 +293,8 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { f32 flameScale; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, sDLists[OBJ_SYOKUDAI_GET_TYPE(thisx)]); if (this->snuffTimer != OBJ_SYOKUDAI_SNUFF_OUT) { @@ -307,7 +308,7 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { flameScale = (f32)this->snuffTimer / OBJ_SYOKUDAI_SNUFF_DEFAULT; } flameScale *= 0.0027f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (this->flameTexScroll * -OBJ_SYOKUDAI_SNUFF_DEFAULT) & 0x1FF, 0x20, 0x80)); @@ -320,5 +321,6 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index d5aeffd8f..b7f7ece6e 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -279,8 +279,9 @@ void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 0x19]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0; i < ARRAY_COUNT(this->panels); i++) { panel = &this->panels[i]; @@ -289,5 +290,6 @@ void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play) { gSPDisplayList(gfx++, gClocktowerPanelDL); } POLY_OPA_DISP = gfx; + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c index 3dc8b3297..21fe5f572 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c @@ -72,7 +72,7 @@ void ObjTokeiTurret_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(gfx++, gClockTownTurretPlatformTopDL); POLY_OPA_DISP = gfx; 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 3b933157b..690823bf8 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -791,13 +791,13 @@ void ObjTokeidai_Draw(Actor* thisx, PlayState* play) { if (this->opaDList != NULL) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->opaDList); } if (this->xluDList != NULL) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, this->xluDList); } @@ -809,7 +809,7 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(0.0f, this->yTranslation, 0.0f, MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, -1791.0f, MTXMODE_APPLY); Matrix_RotateXS(-this->xRotation, MTXMODE_APPLY); @@ -862,12 +862,12 @@ void ObjTokeidai_Counterweight_Draw(Actor* thisx, PlayState* play) { // Draws the counterweight gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->opaDList); // Draws the spotlight gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 255, 255, 235, 180, (s32)(this->spotlightIntensity * 2.55f)); gSPDisplayList(POLY_XLU_DISP++, this->xluDList); @@ -887,7 +887,7 @@ void ObjTokeidai_ExteriorGear_Draw(Actor* thisx, PlayState* play) { Matrix_Translate(0.0f, 0.0f, 1791.0f, MTXMODE_APPLY); Matrix_RotateZS(this->minuteRingOrExteriorGearRotation, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gClockTowerExteriorGearDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c index 07561b8cd..b2b5e0314 100644 --- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c +++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c @@ -36,7 +36,7 @@ void func_80A33B00(ObjToudai* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_f53_obj_DL_0024E8); @@ -67,7 +67,7 @@ void func_80A33BB4(ObjToudai* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x80, 1, 0, sp56, 0x20, 0x20)); diff --git a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c index 996bc3810..4c30a763e 100644 --- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c +++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c @@ -185,7 +185,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(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++, object_tree_DL_000680); 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 a924c9e06..23282c965 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -1997,7 +1997,7 @@ void func_80B7BEA4(Vec3f* cartBedPos, s16 arg1, Vec3f* arg2, u8 alpha, PlayState OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha); gSPMatrix(POLY_OPA_DISP++, sp100, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gSquareShadowDL); diff --git a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c index 257e9eb79..793838c8b 100644 --- a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c +++ b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c @@ -435,7 +435,7 @@ void func_80A3D2C0(Actor* thisx, PlayState* play) { sp3C.y = this->dyna.actor.shape.rot.y; sp3C.z = this->dyna.actor.shape.rot.z + 0x4000; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 60.0f, this->dyna.actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(sp3C.y, MTXMODE_APPLY); 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 075ad18db..ca72d1854 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -168,7 +168,8 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) { Gfx_DrawDListOpa(play, sOwlStatueDLs[this->modelIndex]); if (this->dyna.actor.home.rot.x != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 34.0f, this->dyna.actor.world.pos.z, MTXMODE_NEW); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); @@ -186,6 +187,7 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateZF(BINANG_TO_RAD_ALT2(~((play->gameplayFrames * 1200) & 0xFFFF)), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); + CLOSE_DISPS(play->state.gfxCtx); } } 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 db78f579b..b8a7b3b16 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -550,7 +550,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255); gSPClearGeometryMode(POLY_XLU_DISP++, G_LIGHTING); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2); gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG); @@ -632,7 +632,7 @@ void func_808DD970(Actor* thisx, PlayState* play2) { gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust5Tex)); gSPClearGeometryMode(POLY_XLU_DISP++, G_LIGHTING); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2); gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG); @@ -666,7 +666,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { if (end) { gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 25); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); } for (i = 0; i < end; i++) { @@ -699,7 +699,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { if (player->actor.floorHeight < play->view.eye.y) { for (i = 0; i < end; i++) { if (!phi_s5) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 100); 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 731fe6b77..99bcf4191 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -160,7 +160,7 @@ void OceffSpot_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, &sSunSongEffectCylinderMaterialDL); diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c index 96d76f807..d3486bb0c 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c @@ -178,7 +178,7 @@ void OceffStorm_Draw2(Actor* thisx, PlayState* play) { gDPPipeSync(POLY_XLU_DISP++); - POLY_XLU_DISP = func_8012C3A4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL64(POLY_XLU_DISP); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE); gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE); @@ -201,7 +201,7 @@ void OceffStorm_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 200, 255); gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 0, 128); 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 42bf6c703..c73e67a1d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c +++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c @@ -99,7 +99,7 @@ void OceffWipe_Draw(Actor* thisx, PlayState* play) { vtxPtr[i * 2 + 1].v.cn[3] = alphaTable[sAlphaIndices[i] & 0xF]; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); 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 3d8004c5c..7de628750 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c +++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c @@ -89,7 +89,7 @@ void OceffWipe2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); 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 52031ce00..f7156878c 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c +++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c @@ -90,7 +90,7 @@ void OceffWipe3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); Matrix_ReplaceRotation(&play->billboardMtxF); 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 3554bc78a..d82c117e9 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c +++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c @@ -88,7 +88,7 @@ void OceffWipe4_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); 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 f869b95ac..3dcb06d5d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -107,7 +107,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, MTXMODE_NEW); 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 87dbe2752..244870f9d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c +++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c @@ -86,7 +86,7 @@ void OceffWipe6_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); 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 f269a89a5..fb8011c60 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c +++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c @@ -88,7 +88,7 @@ void OceffWipe7_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, 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 5147f8732..9f5257b32 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -12190,7 +12190,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { func_8012C268(&play->state); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); func_800B8118(&this->actor, play, 0); 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 ef88015b7..e63d414d9 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 @@ -65,7 +65,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) { gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjId].segment); // object: OBJECT_ICE_BLOCK - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c index 2d80b4161..b1472e55d 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c +++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c @@ -68,7 +68,7 @@ void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this) { radius = this->rScale * 0.0025f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); Play_GetFloorSurface(play, &mf, &this->pos); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c index b17a43fbe..c9565b968 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c @@ -92,7 +92,7 @@ void EffectSsBomb2_DrawFade(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); @@ -135,7 +135,7 @@ void EffectSsBomb2_DrawLayered(PlayState* play, u32 index, EffectSs* this) { mtx2 = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult); if (mtx2 != NULL) { - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c index 681aac01d..41c9f0692 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c @@ -59,7 +59,7 @@ void EffectSsBubble_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 150, 150, 150, 0); gSPSegment(POLY_OPA_DISP++, 0x08, this->gfx); 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 d8394b159..87e50fb5f 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 @@ -83,7 +83,7 @@ void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 50, this->rAlpha); diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c index 543363ade..556903ca1 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c @@ -82,7 +82,7 @@ void EffectSsDeadDb_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c index 9f124d39e..c9fa170df 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c @@ -109,7 +109,7 @@ void EffectSsDeadDd_Draw(PlayState* play, u32 index, EffectSs* this) { mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult); if (mtx != NULL) { - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rAlpha); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rAlpha); gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c index 6243b4302..b40513e21 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c @@ -59,7 +59,7 @@ void EffectSsDeadDs_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(play->state.gfxCtx); scale = this->rScale * 0.01f; - func_8012C974(play->state.gfxCtx); + Gfx_SetupDL60_XluNoCD(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, this->rAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); pos = this->pos; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c index b6e3b747f..8a4c80980 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c @@ -97,7 +97,7 @@ void EffectSsDtBubble_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, (this->rPrimColorA * this->life) / this->rLifespan); gDPSetEnvColor(POLY_OPA_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c index 10e8fbeed..22580fd81 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c @@ -107,7 +107,7 @@ void EffectSsDust_Draw(PlayState* play, u32 index, EffectSs* this) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPPipeSync(POLY_XLU_DISP++); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[this->rTexIndex])); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gDPPipeSync(POLY_XLU_DISP++); if (this->rDrawFlags & DUST_DRAWFLAG1) { diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c index 9d78d4d71..0e79c5df7 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c @@ -88,7 +88,7 @@ void EffectSsEnFire_Draw(PlayState* play, u32 index, EffectSs* this) { redGreen = 0; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, redGreen * 12.7f, 0, 0, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0x0, 0x80, redGreen * 12.7f, redGreen * 12.7f, 0, 255); gSPSegment( diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c index 21a0f1019..14d5d5c6e 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c @@ -112,7 +112,7 @@ void EffectSsEnIce_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateXS(this->rPitch, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800BCC68(&this->pos, play); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, gameplayFrames & 0xFF, 0x20, 0x10, 1, 0, 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 03522f5af..91b699f5f 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 @@ -72,7 +72,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index cd7c6d5bd..f2038c768 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -62,11 +62,11 @@ void EffectSsFhgFlash_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); if (this->rParams != FHGFLASH_SHOCK_NO_ACTOR) { - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); Matrix_RotateXS(this->rXZRot, MTXMODE_APPLY); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_DECAL2); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_SURF2); } diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c index 1742b03fd..57ac1af69 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c @@ -121,7 +121,7 @@ void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Scale(1.0f, temp1, 1.0f / temp1, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); gSPSegment( diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c index 24aadc0ec..597379229 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c @@ -93,7 +93,7 @@ void EffectSsGRipple_DrawRipple(PlayState* play2, EffectSs* this, TexturePtr tex if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c index ccc2951c6..e80c02a11 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c @@ -97,7 +97,7 @@ void EffectSsGSpk_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sSparkTextures[this->rTexIndex])); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); gSPDisplayList(POLY_XLU_DISP++, this->gfx); 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 e1a9371cd..15444ad47 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 @@ -72,7 +72,7 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->gfx); CLOSE_DISPS(gfxCtx); @@ -88,7 +88,7 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) { gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, this->gfx); CLOSE_DISPS(gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c index 36eb650f7..b290c05e4 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c @@ -134,7 +134,7 @@ void EffectSsHitmark_Draw(PlayState* play, u32 index, EffectSs* this) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); tex = sTextures[(this->rType * 8) + (this->rTexIndex)]; gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(tex)); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); gSPDisplayList(POLY_XLU_DISP++, this->gfx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c index 9efadc99e..29a35cf34 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c @@ -65,7 +65,7 @@ void EffectSsIcePiece_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateYS(this->rYaw, MTXMODE_APPLY); Matrix_RotateXS(this->rPitch, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)(s32)alpha); func_800BCC68(&this->pos, play); gSPSegment( diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c index e1c2bc72d..ffd8c300a 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c @@ -52,7 +52,7 @@ void EffectSsIceSmoke_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 235, 235, this->rAlpha); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, this->rScrollX * this->life, this->rScrollY * this->life, 0x20, diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c index 17d7edc1e..8c4fc5877 100644 --- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c @@ -55,7 +55,7 @@ void EffectSsKFire_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(xzScale, yScale, xzScale, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, play->state.frames * this->rScroll, 0x20, 0x80)); 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 e424c0b44..1104a28a3 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 @@ -107,7 +107,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (colorIndex >= 0) { gDPSetPrimColor(POLY_XLU_DISP++, 0, D_8097EAD8[colorIndex].lod, D_8097EAD8[colorIndex].color.r, D_8097EAD8[colorIndex].color.g, D_8097EAD8[colorIndex].color.b, 255); @@ -115,7 +115,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { gSPDisplayList(POLY_XLU_DISP++, this->gfx); } else { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (colorIndex >= 0) { gDPSetPrimColor(POLY_OPA_DISP++, 0, D_8097EAD8[colorIndex].lod, D_8097EAD8[colorIndex].color.r, D_8097EAD8[colorIndex].color.g, D_8097EAD8[colorIndex].color.b, 255); diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c index 540d9e505..4e395141b 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c @@ -108,7 +108,7 @@ void EffectSsKirakira_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, (((s8)((55.0f / this->rLifespan) * this->life) + 200))); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); 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 9037b20f4..61eb3aebd 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 @@ -119,7 +119,7 @@ void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, sLightningTextures[texIndex]); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c index 3402eb2b7..f79e59340 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c @@ -135,7 +135,7 @@ void EffectSsSbn_DrawSliding(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_XLU_DECAL2); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->rAlpha); @@ -175,7 +175,7 @@ void EffectSsSbn_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_XLU_DECAL2); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->rAlpha); diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c index a9a190948..312ed5f2f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c @@ -70,7 +70,7 @@ void EffectSsSibuki_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_OPA_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); gSPSegment(POLY_OPA_DISP++, 0x08, this->gfx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c index cd0ea0fad..773984c80 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c +++ b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c @@ -46,14 +46,14 @@ void EffectSsSolderSrchBall_Draw(PlayState* play, u32 index, EffectSs* this) { GraphicsContext* gfxCtx = play->state.gfxCtx; f32 scale = this->rgScale / 100.0f; - func_8012C28C(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); gDPPipeSync(POLY_XLU_DISP++); 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 4f1aa5d91..c1615e2bf 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 @@ -50,7 +50,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Scale(0.01f, 0.0025f, 0.01f, MTXMODE_APPLY); Matrix_RotateZYX(0, this->rYaw, 0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c index 6e6b48156..f9735d396 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c @@ -65,7 +65,7 @@ void EffectSsStone1_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(drawParams->texture)); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, drawParams->primColor.r, drawParams->primColor.g, drawParams->primColor.b, 255); diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 845baa3cb..108ccedcd 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -129,7 +129,8 @@ void DayTelop_Draw(DayTelopState* this) { GraphicsContext* gfxCtx = this->state.gfxCtx; OPEN_DISPS(gfxCtx); - func_8012C628(this->state.gfxCtx); + + Gfx_SetupDL39_Opa(this->state.gfxCtx); if (gSaveContext.save.day >= 9) { // Draw a white screen @@ -139,7 +140,7 @@ void DayTelop_Draw(DayTelopState* this) { gDPFillRectangle(POLY_OPA_DISP++, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); } - func_8012C628(this->state.gfxCtx); + Gfx_SetupDL39_Opa(this->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 08bf65262..88d9ccdc4 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -987,7 +987,7 @@ void MapSelect_DrawMenu(MapSelectState* this) { OPEN_DISPS(gfxCtx); - func_8012C4C0(gfxCtx); + Gfx_SetupDL28_Opa(gfxCtx); printer = alloca(sizeof(GfxPrint)); GfxPrint_Init(printer); @@ -1009,7 +1009,7 @@ void MapSelect_DrawLoadingScreen(MapSelectState* this) { OPEN_DISPS(gfxCtx); - func_8012C4C0(gfxCtx); + Gfx_SetupDL28_Opa(gfxCtx); GfxPrint_Init(&printer); GfxPrint_Open(&printer, POLY_OPA_DISP); diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 59b1bed02..8e270b836 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -81,7 +81,7 @@ void ConsoleLogo_Draw(GameState* thisx) { gSPSetLights1(POLY_OPA_DISP++, sTitleLights); ConsoleLogo_RenderView(this, 0.0f, 150.0f, 300.0f); - func_8012C28C(this->state.gfxCtx); + Gfx_SetupDL25_Opa(this->state.gfxCtx); Matrix_Translate(-53.0f, -5.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); Matrix_RotateZYX(0, sTitleRotation, 0, MTXMODE_APPLY); @@ -89,7 +89,7 @@ void ConsoleLogo_Draw(GameState* thisx) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, gNintendo64LogoNDL); - func_8012C628(this->state.gfxCtx); + Gfx_SetupDL39_Opa(this->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index d5d0368dd..1eb46728f 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -345,7 +345,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index cfcaf20ea..c8d963bda 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -252,7 +252,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); // Draw a white box around the items that are equipped on the C buttons // Loop over c-buttons (i) and vtx offset (j) @@ -319,7 +319,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { if ((pauseCtx->state == PAUSE_STATE_MAIN) && ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM)) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) && !IS_PAUSE_STATE_GAMEOVER) { - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); // Loop over slots (i) and ammoIndex (j) @@ -332,7 +332,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { j++; } } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } } 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 af12f2d5d..6539f1b9e 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 @@ -191,7 +191,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { sStrayFairyIconAlphaScaleTimer = 15; } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, @@ -230,7 +230,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0); KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); @@ -254,7 +254,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { sStrayFairyIconRectS[sStrayFairyIconIndex], 0, 1 << 10, 1 << 10); KaleidoScope_DrawDungeonStrayFairyCount(play); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } } } else if (CHECK_DUNGEON_ITEM(i, gSaveContext.dungeonIndex)) { @@ -277,7 +277,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) && !IS_PAUSE_STATE_GAMEOVER) { - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -294,7 +294,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } } @@ -558,7 +558,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Each loaded chunk must have `size <= TMEM_SIZE / 2` // because the texture is color-indexed, so the TLUT uses the other half of TMEM. - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); gDPLoadTLUT_pal256(POLY_OPA_DISP++, gWorldMapImageTLUT); @@ -579,7 +579,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { 0, 1 << 10, 1 << 10); } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } else { // Draw the world map angled @@ -638,7 +638,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); @@ -670,7 +670,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gDPFillRectangle(POLY_OPA_DISP++, 50, 62, 270, 190); } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); if (!IS_PAUSE_STATE_OWLWARP) { // Browsing the world map regions on the pause menu @@ -809,7 +809,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Draw Player's face at the current region if (n != REGION_MAX) { KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 950e10788..67a8e0d36 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -198,7 +198,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); // Draw a white box around the items that are equipped on the C buttons // Loop over c-buttons (i) and vtx offset (j) 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 ba9076b05..a882cf3e7 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 @@ -448,7 +448,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play); - func_8012C8AC(gfxCtx); + Gfx_SetupDL42_Opa(gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); func_801091F0(play); } else { @@ -543,7 +543,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play); - func_8012C8AC(gfxCtx); + Gfx_SetupDL42_Opa(gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0559d0a82..d4cb99aed 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2314,72 +2314,72 @@ 0x8012BC50:("Gfx_SetFog",), 0x8012BD8C:("Gfx_SetFogWithSync",), 0x8012BF08:("Gfx_SetFog2",), - 0x8012BF3C:("Gfx_CallSetupDLImpl",), - 0x8012BF78:("Gfx_CallSetupDL",), - 0x8012BF98:("Gfx_CallSetupDLAtPtr",), - 0x8012BFC4:("func_8012BFC4",), - 0x8012BFEC:("func_8012BFEC",), - 0x8012C014:("func_8012C014",), - 0x8012C058:("func_8012C058",), - 0x8012C080:("func_8012C080",), - 0x8012C0A8:("func_8012C0A8",), - 0x8012C0D0:("func_8012C0D0",), - 0x8012C0F8:("func_8012C0F8",), - 0x8012C120:("func_8012C120",), - 0x8012C148:("func_8012C148",), - 0x8012C170:("func_8012C170",), - 0x8012C198:("func_8012C198",), - 0x8012C1C0:("func_8012C1C0",), - 0x8012C1EC:("func_8012C1EC",), - 0x8012C214:("func_8012C214",), - 0x8012C240:("func_8012C240",), + 0x8012BF3C:("Gfx_SetupDLImpl",), + 0x8012BF78:("Gfx_SetupDL",), + 0x8012BF98:("Gfx_SetupDLAtPtr",), + 0x8012BFC4:("Gfx_SetupDL57",), + 0x8012BFEC:("Gfx_SetupDL57_b",), + 0x8012C014:("Gfx_SetupDL52_NoCD",), + 0x8012C058:("Gfx_SetupDL58_Opa",), + 0x8012C080:("Gfx_SetupDL57_Opa",), + 0x8012C0A8:("Gfx_SetupDL50_Opa",), + 0x8012C0D0:("Gfx_SetupDL51_Opa",), + 0x8012C0F8:("Gfx_SetupDL52_Xlu",), + 0x8012C120:("Gfx_SetupDL53_Opa",), + 0x8012C148:("Gfx_SetupDL54_Opa",), + 0x8012C170:("Gfx_SetupDL55_Xlu",), + 0x8012C198:("Gfx_SetupDL26",), + 0x8012C1C0:("Gfx_SetupDL26_Opa",), + 0x8012C1EC:("Gfx_SetupDL23",), + 0x8012C214:("Gfx_SetupDL23_Opa",), + 0x8012C240:("Gfx_SetupDL25_Xlu2",), 0x8012C268:("func_8012C268",), - 0x8012C28C:("func_8012C28C",), - 0x8012C2B4:("func_8012C2B4",), - 0x8012C2DC:("func_8012C2DC",), - 0x8012C304:("func_8012C304",), - 0x8012C32C:("func_8012C32C",), - 0x8012C354:("func_8012C354",), - 0x8012C37C:("func_8012C37C",), - 0x8012C3A4:("func_8012C3A4",), - 0x8012C3CC:("func_8012C3CC",), - 0x8012C3F4:("func_8012C3F4",), - 0x8012C420:("func_8012C420",), - 0x8012C448:("func_8012C448",), - 0x8012C470:("func_8012C470",), - 0x8012C498:("func_8012C498",), - 0x8012C4C0:("func_8012C4C0",), - 0x8012C4E8:("func_8012C4E8",), - 0x8012C510:("func_8012C510",), - 0x8012C538:("func_8012C538",), - 0x8012C560:("func_8012C560",), - 0x8012C588:("func_8012C588",), - 0x8012C5B0:("func_8012C5B0",), - 0x8012C5D8:("func_8012C5D8",), - 0x8012C600:("func_8012C600",), - 0x8012C628:("func_8012C628",), - 0x8012C654:("func_8012C654",), - 0x8012C680:("func_8012C680",), - 0x8012C6AC:("func_8012C6AC",), - 0x8012C6D4:("func_8012C6D4",), - 0x8012C6FC:("func_8012C6FC",), - 0x8012C724:("func_8012C724",), - 0x8012C74C:("func_8012C74C",), - 0x8012C774:("func_8012C774",), - 0x8012C7B8:("func_8012C7B8",), - 0x8012C7FC:("func_8012C7FC",), - 0x8012C840:("func_8012C840",), - 0x8012C868:("func_8012C868",), - 0x8012C8AC:("func_8012C8AC",), - 0x8012C8D4:("func_8012C8D4",), - 0x8012C8FC:("func_8012C8FC",), - 0x8012C924:("func_8012C924",), - 0x8012C94C:("func_8012C94C",), - 0x8012C974:("func_8012C974",), - 0x8012C9BC:("func_8012C9BC",), - 0x8012C9E4:("func_8012C9E4",), - 0x8012CA0C:("func_8012CA0C",), - 0x8012CA38:("func_8012CA38",), + 0x8012C28C:("Gfx_SetupDL25_Opa",), + 0x8012C2B4:("Gfx_SetupDL71",), + 0x8012C2DC:("Gfx_SetupDL25_Xlu",), + 0x8012C304:("Gfx_SetupDL72",), + 0x8012C32C:("Gfx_SetupDL31_Opa",), + 0x8012C354:("Gfx_SetupDL32_Opa",), + 0x8012C37C:("Gfx_SetupDL33_Opa",), + 0x8012C3A4:("Gfx_SetupDL64",), + 0x8012C3CC:("Gfx_SetupDL34",), + 0x8012C3F4:("Gfx_SetupDL34_Opa",), + 0x8012C420:("Gfx_SetupDL35_Opa",), + 0x8012C448:("Gfx_SetupDL44_Xlu",), + 0x8012C470:("Gfx_SetupDL36_Opa",), + 0x8012C498:("Gfx_SetupDL28",), + 0x8012C4C0:("Gfx_SetupDL28_Opa",), + 0x8012C4E8:("Gfx_SetupDL43_Opa",), + 0x8012C510:("Gfx_SetupDL45_Opa",), + 0x8012C538:("Gfx_SetupDL46_Overlay",), + 0x8012C560:("Gfx_SetupDL38_Xlu",), + 0x8012C588:("Gfx_SetupDL4_Xlu",), + 0x8012C5B0:("Gfx_SetupDL37_Opa",), + 0x8012C5D8:("Gfx_SetupDL2_Opa",), + 0x8012C600:("Gfx_SetupDL39",), + 0x8012C628:("Gfx_SetupDL39_Opa",), + 0x8012C654:("Gfx_SetupDL39_Overlay",), + 0x8012C680:("Gfx_SetupDL39_Ptr",), + 0x8012C6AC:("Gfx_SetupDL40_Opa",), + 0x8012C6D4:("Gfx_SetupDL41_Opa",), + 0x8012C6FC:("Gfx_SetupDL47_Xlu",), + 0x8012C724:("Gfx_SetupDL66",), + 0x8012C74C:("Gfx_SetupDL67",), + 0x8012C774:("Gfx_SetupDL68_NoCD",), + 0x8012C7B8:("Gfx_SetupDL69_NoCD",), + 0x8012C7FC:("Gfx_SetupDL65_NoCD",), + 0x8012C840:("Gfx_SetupDL70",), + 0x8012C868:("Gfx_SetupDL20_NoCD",), + 0x8012C8AC:("Gfx_SetupDL42_Opa",), + 0x8012C8D4:("Gfx_SetupDL42_Overlay",), + 0x8012C8FC:("Gfx_SetupDL48_Opa",), + 0x8012C924:("Gfx_SetupDL49_Xlu",), + 0x8012C94C:("Gfx_SetupDL27_Xlu",), + 0x8012C974:("Gfx_SetupDL60_XluNoCD",), + 0x8012C9BC:("Gfx_SetupDL61_Xlu",), + 0x8012C9E4:("Gfx_SetupDL56_Opa",), + 0x8012CA0C:("Gfx_SetupDL56_Ptr",), + 0x8012CA38:("Gfx_SetupDL59_Opa",), 0x8012CA60:("Gfx_BranchTexScroll",), 0x8012CB04:("func_8012CB04",), 0x8012CB28:("func_8012CB28",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index be8c6e08f..d09486c56 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1319,7 +1319,7 @@ 0x801C0EE4:("D_801C0EE4","s16","",0x2), 0x801C0EE8:("D_801C0EE8","s16","",0x2), 0x801C0EEC:("D_801C0EEC","s16","",0x2), - 0x801C0EF0:("sSetupDL","Gfx","[438]",0xdb0), + 0x801C0EF0:("gSetupDLs","Gfx","[438]",0xdb0), 0x801C1CA0:("sFillSetupDL","Gfx","[12]",0x60), 0x801C1D00:("gEmptyDL","Gfx","[1]",0x8), 0x801C1D10:("sZeroVec","Vec3f","",0xc), diff --git a/tools/namefixer.py b/tools/namefixer.py index 54edb5644..b1a0b9072 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -765,6 +765,70 @@ wordReplace = { "Padmgr_Stop": "PadMgr_HandlePreNMI", "func_80175E68": "PadMgr_GetInputNoLock", + "Gfx_CallSetupDL": "Gfx_SetupDL", + "func_8012BFC4": "Gfx_SetupDL57", + "func_8012BFEC": "Gfx_SetupDL57_b", + "func_8012C014": "Gfx_SetupDL52_NoCD", + "func_8012C058": "Gfx_SetupDL58_Opa", + "func_8012C080": "Gfx_SetupDL57_Opa", + "func_8012C0A8": "Gfx_SetupDL50_Opa", + "func_8012C0D0": "Gfx_SetupDL51_Opa", + "func_8012C0F8": "Gfx_SetupDL52_Xlu", + "func_8012C120": "Gfx_SetupDL53_Opa", + "func_8012C148": "Gfx_SetupDL54_Opa", + "func_8012C170": "Gfx_SetupDL55_Xlu", + "func_8012C198": "Gfx_SetupDL26", + "func_8012C1C0": "Gfx_SetupDL26_Opa", + "func_8012C1EC": "Gfx_SetupDL23", + "func_8012C214": "Gfx_SetupDL23_Opa", + "func_8012C240": "Gfx_SetupDL25_Xlu2", + "func_8012C28C": "Gfx_SetupDL25_Opa", + "func_8012C2B4": "Gfx_SetupDL71", + "func_8012C2DC": "Gfx_SetupDL25_Xlu", + "func_8012C304": "Gfx_SetupDL72", + "func_8012C32C": "Gfx_SetupDL31_Opa", + "func_8012C354": "Gfx_SetupDL32_Opa", + "func_8012C37C": "Gfx_SetupDL33_Opa", + "func_8012C3A4": "Gfx_SetupDL64", + "func_8012C3CC": "Gfx_SetupDL34", + "func_8012C3F4": "Gfx_SetupDL34_Opa", + "func_8012C420": "Gfx_SetupDL35_Opa", + "func_8012C448": "Gfx_SetupDL44_Xlu", + "func_8012C470": "Gfx_SetupDL36_Opa", + "func_8012C498": "Gfx_SetupDL28", + "func_8012C4C0": "Gfx_SetupDL28_Opa", + "func_8012C4E8": "Gfx_SetupDL43_Opa", + "func_8012C510": "Gfx_SetupDL45_Opa", + "func_8012C538": "Gfx_SetupDL46_Overlay", + "func_8012C560": "Gfx_SetupDL38_Xlu", + "func_8012C588": "Gfx_SetupDL4_Xlu", + "func_8012C5B0": "Gfx_SetupDL37_Opa", + "func_8012C5D8": "Gfx_SetupDL2_Opa", + "func_8012C600": "Gfx_SetupDL39", + "func_8012C628": "Gfx_SetupDL39_Opa", + "func_8012C654": "Gfx_SetupDL39_Overlay", + "func_8012C680": "Gfx_SetupDL39_Ptr", + "func_8012C6AC": "Gfx_SetupDL40_Opa", + "func_8012C6D4": "Gfx_SetupDL41_Opa", + "func_8012C6FC": "Gfx_SetupDL47_Xlu", + "func_8012C724": "Gfx_SetupDL66", + "func_8012C74C": "Gfx_SetupDL67", + "func_8012C774": "Gfx_SetupDL68_NoCD", + "func_8012C7B8": "Gfx_SetupDL69_NoCD", + "func_8012C7FC": "Gfx_SetupDL65_NoCD", + "func_8012C840": "Gfx_SetupDL70", + "func_8012C868": "Gfx_SetupDL20_NoCD", + "func_8012C8AC": "Gfx_SetupDL42_Opa", + "func_8012C8D4": "Gfx_SetupDL42_Overlay", + "func_8012C8FC": "Gfx_SetupDL48_Opa", + "func_8012C924": "Gfx_SetupDL49_Xlu", + "func_8012C94C": "Gfx_SetupDL27_Xlu", + "func_8012C974": "Gfx_SetupDL60_XluNoCD", + "func_8012C9BC": "Gfx_SetupDL61_Xlu", + "func_8012C9E4": "Gfx_SetupDL56_Opa", + "func_8012CA0C": "Gfx_SetupDL56_Ptr", + "func_8012CA38": "Gfx_SetupDL59_Opa", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", @@ -1005,6 +1069,7 @@ wordReplace = { "D_801D15BC": "gZeroVec3s", "D_801D1DE0": "gIdentityMtx", "D_801D1E20": "gIdentityMtxF", + "sSetupDL": "gSetupDLs", # Macros "CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index ba751f02a..03469f7bf 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1828,72 +1828,72 @@ asm/non_matchings/code/z_quake/Quake_GetNumActiveQuakes.s,Quake_GetNumActiveQuak asm/non_matchings/code/z_rcp/Gfx_SetFog.s,Gfx_SetFog,0x8012BC50,0x4F asm/non_matchings/code/z_rcp/Gfx_SetFogWithSync.s,Gfx_SetFogWithSync,0x8012BD8C,0x5F asm/non_matchings/code/z_rcp/Gfx_SetFog2.s,Gfx_SetFog2,0x8012BF08,0xD -asm/non_matchings/code/z_rcp/Gfx_CallSetupDLImpl.s,Gfx_CallSetupDLImpl,0x8012BF3C,0xF -asm/non_matchings/code/z_rcp/Gfx_CallSetupDL.s,Gfx_CallSetupDL,0x8012BF78,0x8 -asm/non_matchings/code/z_rcp/Gfx_CallSetupDLAtPtr.s,Gfx_CallSetupDLAtPtr,0x8012BF98,0xB -asm/non_matchings/code/z_rcp/func_8012BFC4.s,func_8012BFC4,0x8012BFC4,0xA -asm/non_matchings/code/z_rcp/func_8012BFEC.s,func_8012BFEC,0x8012BFEC,0xA -asm/non_matchings/code/z_rcp/func_8012C014.s,func_8012C014,0x8012C014,0x11 -asm/non_matchings/code/z_rcp/func_8012C058.s,func_8012C058,0x8012C058,0xA -asm/non_matchings/code/z_rcp/func_8012C080.s,func_8012C080,0x8012C080,0xA -asm/non_matchings/code/z_rcp/func_8012C0A8.s,func_8012C0A8,0x8012C0A8,0xA -asm/non_matchings/code/z_rcp/func_8012C0D0.s,func_8012C0D0,0x8012C0D0,0xA -asm/non_matchings/code/z_rcp/func_8012C0F8.s,func_8012C0F8,0x8012C0F8,0xA -asm/non_matchings/code/z_rcp/func_8012C120.s,func_8012C120,0x8012C120,0xA -asm/non_matchings/code/z_rcp/func_8012C148.s,func_8012C148,0x8012C148,0xA -asm/non_matchings/code/z_rcp/func_8012C170.s,func_8012C170,0x8012C170,0xA -asm/non_matchings/code/z_rcp/func_8012C198.s,func_8012C198,0x8012C198,0xA -asm/non_matchings/code/z_rcp/func_8012C1C0.s,func_8012C1C0,0x8012C1C0,0xB -asm/non_matchings/code/z_rcp/func_8012C1EC.s,func_8012C1EC,0x8012C1EC,0xA -asm/non_matchings/code/z_rcp/func_8012C214.s,func_8012C214,0x8012C214,0xB -asm/non_matchings/code/z_rcp/func_8012C240.s,func_8012C240,0x8012C240,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDLImpl.s,Gfx_SetupDLImpl,0x8012BF3C,0xF +asm/non_matchings/code/z_rcp/Gfx_SetupDL.s,Gfx_SetupDL,0x8012BF78,0x8 +asm/non_matchings/code/z_rcp/Gfx_SetupDLAtPtr.s,Gfx_SetupDLAtPtr,0x8012BF98,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL57.s,Gfx_SetupDL57,0x8012BFC4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL57_b.s,Gfx_SetupDL57_b,0x8012BFEC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL52_NoCD.s,Gfx_SetupDL52_NoCD,0x8012C014,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL58_Opa.s,Gfx_SetupDL58_Opa,0x8012C058,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL57_Opa.s,Gfx_SetupDL57_Opa,0x8012C080,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL50_Opa.s,Gfx_SetupDL50_Opa,0x8012C0A8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL51_Opa.s,Gfx_SetupDL51_Opa,0x8012C0D0,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL52_Xlu.s,Gfx_SetupDL52_Xlu,0x8012C0F8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL53_Opa.s,Gfx_SetupDL53_Opa,0x8012C120,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL54_Opa.s,Gfx_SetupDL54_Opa,0x8012C148,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL55_Xlu.s,Gfx_SetupDL55_Xlu,0x8012C170,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL26.s,Gfx_SetupDL26,0x8012C198,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL26_Opa.s,Gfx_SetupDL26_Opa,0x8012C1C0,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL23.s,Gfx_SetupDL23,0x8012C1EC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL23_Opa.s,Gfx_SetupDL23_Opa,0x8012C214,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Xlu2.s,Gfx_SetupDL25_Xlu2,0x8012C240,0xA asm/non_matchings/code/z_rcp/func_8012C268.s,func_8012C268,0x8012C268,0x9 -asm/non_matchings/code/z_rcp/func_8012C28C.s,func_8012C28C,0x8012C28C,0xA -asm/non_matchings/code/z_rcp/func_8012C2B4.s,func_8012C2B4,0x8012C2B4,0xA -asm/non_matchings/code/z_rcp/func_8012C2DC.s,func_8012C2DC,0x8012C2DC,0xA -asm/non_matchings/code/z_rcp/func_8012C304.s,func_8012C304,0x8012C304,0xA -asm/non_matchings/code/z_rcp/func_8012C32C.s,func_8012C32C,0x8012C32C,0xA -asm/non_matchings/code/z_rcp/func_8012C354.s,func_8012C354,0x8012C354,0xA -asm/non_matchings/code/z_rcp/func_8012C37C.s,func_8012C37C,0x8012C37C,0xA -asm/non_matchings/code/z_rcp/func_8012C3A4.s,func_8012C3A4,0x8012C3A4,0xA -asm/non_matchings/code/z_rcp/func_8012C3CC.s,func_8012C3CC,0x8012C3CC,0xA -asm/non_matchings/code/z_rcp/func_8012C3F4.s,func_8012C3F4,0x8012C3F4,0xB -asm/non_matchings/code/z_rcp/func_8012C420.s,func_8012C420,0x8012C420,0xA -asm/non_matchings/code/z_rcp/func_8012C448.s,func_8012C448,0x8012C448,0xA -asm/non_matchings/code/z_rcp/func_8012C470.s,func_8012C470,0x8012C470,0xA -asm/non_matchings/code/z_rcp/func_8012C498.s,func_8012C498,0x8012C498,0xA -asm/non_matchings/code/z_rcp/func_8012C4C0.s,func_8012C4C0,0x8012C4C0,0xA -asm/non_matchings/code/z_rcp/func_8012C4E8.s,func_8012C4E8,0x8012C4E8,0xA -asm/non_matchings/code/z_rcp/func_8012C510.s,func_8012C510,0x8012C510,0xA -asm/non_matchings/code/z_rcp/func_8012C538.s,func_8012C538,0x8012C538,0xA -asm/non_matchings/code/z_rcp/func_8012C560.s,func_8012C560,0x8012C560,0xA -asm/non_matchings/code/z_rcp/func_8012C588.s,func_8012C588,0x8012C588,0xA -asm/non_matchings/code/z_rcp/func_8012C5B0.s,func_8012C5B0,0x8012C5B0,0xA -asm/non_matchings/code/z_rcp/func_8012C5D8.s,func_8012C5D8,0x8012C5D8,0xA -asm/non_matchings/code/z_rcp/func_8012C600.s,func_8012C600,0x8012C600,0xA -asm/non_matchings/code/z_rcp/func_8012C628.s,func_8012C628,0x8012C628,0xB -asm/non_matchings/code/z_rcp/func_8012C654.s,func_8012C654,0x8012C654,0xB -asm/non_matchings/code/z_rcp/func_8012C680.s,func_8012C680,0x8012C680,0xB -asm/non_matchings/code/z_rcp/func_8012C6AC.s,func_8012C6AC,0x8012C6AC,0xA -asm/non_matchings/code/z_rcp/func_8012C6D4.s,func_8012C6D4,0x8012C6D4,0xA -asm/non_matchings/code/z_rcp/func_8012C6FC.s,func_8012C6FC,0x8012C6FC,0xA -asm/non_matchings/code/z_rcp/func_8012C724.s,func_8012C724,0x8012C724,0xA -asm/non_matchings/code/z_rcp/func_8012C74C.s,func_8012C74C,0x8012C74C,0xA -asm/non_matchings/code/z_rcp/func_8012C774.s,func_8012C774,0x8012C774,0x11 -asm/non_matchings/code/z_rcp/func_8012C7B8.s,func_8012C7B8,0x8012C7B8,0x11 -asm/non_matchings/code/z_rcp/func_8012C7FC.s,func_8012C7FC,0x8012C7FC,0x11 -asm/non_matchings/code/z_rcp/func_8012C840.s,func_8012C840,0x8012C840,0xA -asm/non_matchings/code/z_rcp/func_8012C868.s,func_8012C868,0x8012C868,0x11 -asm/non_matchings/code/z_rcp/func_8012C8AC.s,func_8012C8AC,0x8012C8AC,0xA -asm/non_matchings/code/z_rcp/func_8012C8D4.s,func_8012C8D4,0x8012C8D4,0xA -asm/non_matchings/code/z_rcp/func_8012C8FC.s,func_8012C8FC,0x8012C8FC,0xA -asm/non_matchings/code/z_rcp/func_8012C924.s,func_8012C924,0x8012C924,0xA -asm/non_matchings/code/z_rcp/func_8012C94C.s,func_8012C94C,0x8012C94C,0xA -asm/non_matchings/code/z_rcp/func_8012C974.s,func_8012C974,0x8012C974,0x12 -asm/non_matchings/code/z_rcp/func_8012C9BC.s,func_8012C9BC,0x8012C9BC,0xA -asm/non_matchings/code/z_rcp/func_8012C9E4.s,func_8012C9E4,0x8012C9E4,0xA -asm/non_matchings/code/z_rcp/func_8012CA0C.s,func_8012CA0C,0x8012CA0C,0xB -asm/non_matchings/code/z_rcp/func_8012CA38.s,func_8012CA38,0x8012CA38,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Opa.s,Gfx_SetupDL25_Opa,0x8012C28C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL71.s,Gfx_SetupDL71,0x8012C2B4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Xlu.s,Gfx_SetupDL25_Xlu,0x8012C2DC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL72.s,Gfx_SetupDL72,0x8012C304,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL31_Opa.s,Gfx_SetupDL31_Opa,0x8012C32C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL32_Opa.s,Gfx_SetupDL32_Opa,0x8012C354,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL33_Opa.s,Gfx_SetupDL33_Opa,0x8012C37C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL64.s,Gfx_SetupDL64,0x8012C3A4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL34.s,Gfx_SetupDL34,0x8012C3CC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL34_Opa.s,Gfx_SetupDL34_Opa,0x8012C3F4,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL35_Opa.s,Gfx_SetupDL35_Opa,0x8012C420,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL44_Xlu.s,Gfx_SetupDL44_Xlu,0x8012C448,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL36_Opa.s,Gfx_SetupDL36_Opa,0x8012C470,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL28.s,Gfx_SetupDL28,0x8012C498,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL28_Opa.s,Gfx_SetupDL28_Opa,0x8012C4C0,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL43_Opa.s,Gfx_SetupDL43_Opa,0x8012C4E8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL45_Opa.s,Gfx_SetupDL45_Opa,0x8012C510,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL46_Overlay.s,Gfx_SetupDL46_Overlay,0x8012C538,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL38_Xlu.s,Gfx_SetupDL38_Xlu,0x8012C560,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL4_Xlu.s,Gfx_SetupDL4_Xlu,0x8012C588,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL37_Opa.s,Gfx_SetupDL37_Opa,0x8012C5B0,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL2_Opa.s,Gfx_SetupDL2_Opa,0x8012C5D8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL39.s,Gfx_SetupDL39,0x8012C600,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Opa.s,Gfx_SetupDL39_Opa,0x8012C628,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Overlay.s,Gfx_SetupDL39_Overlay,0x8012C654,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Ptr.s,Gfx_SetupDL39_Ptr,0x8012C680,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL40_Opa.s,Gfx_SetupDL40_Opa,0x8012C6AC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL41_Opa.s,Gfx_SetupDL41_Opa,0x8012C6D4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL47_Xlu.s,Gfx_SetupDL47_Xlu,0x8012C6FC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL66.s,Gfx_SetupDL66,0x8012C724,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL67.s,Gfx_SetupDL67,0x8012C74C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL68_NoCD.s,Gfx_SetupDL68_NoCD,0x8012C774,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL69_NoCD.s,Gfx_SetupDL69_NoCD,0x8012C7B8,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL65_NoCD.s,Gfx_SetupDL65_NoCD,0x8012C7FC,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL70.s,Gfx_SetupDL70,0x8012C840,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL20_NoCD.s,Gfx_SetupDL20_NoCD,0x8012C868,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL42_Opa.s,Gfx_SetupDL42_Opa,0x8012C8AC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL42_Overlay.s,Gfx_SetupDL42_Overlay,0x8012C8D4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL48_Opa.s,Gfx_SetupDL48_Opa,0x8012C8FC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL49_Xlu.s,Gfx_SetupDL49_Xlu,0x8012C924,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL27_Xlu.s,Gfx_SetupDL27_Xlu,0x8012C94C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL60_XluNoCD.s,Gfx_SetupDL60_XluNoCD,0x8012C974,0x12 +asm/non_matchings/code/z_rcp/Gfx_SetupDL61_Xlu.s,Gfx_SetupDL61_Xlu,0x8012C9BC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL56_Opa.s,Gfx_SetupDL56_Opa,0x8012C9E4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL56_Ptr.s,Gfx_SetupDL56_Ptr,0x8012CA0C,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL59_Opa.s,Gfx_SetupDL59_Opa,0x8012CA38,0xA asm/non_matchings/code/z_rcp/Gfx_BranchTexScroll.s,Gfx_BranchTexScroll,0x8012CA60,0x29 asm/non_matchings/code/z_rcp/func_8012CB04.s,func_8012CB04,0x8012CB04,0x9 asm/non_matchings/code/z_rcp/func_8012CB28.s,func_8012CB28,0x8012CB28,0x9 From 1ec875f6dccf7efd9d637cd27a1a500f35eed43e Mon Sep 17 00:00:00 2001 From: StickyThwomp <89738536+StickyThwomp@users.noreply.github.com> Date: Sun, 28 May 2023 21:17:43 -0500 Subject: [PATCH 27/51] ItemBHeart (Heart Container) OK and Documented (#1236) * ItemBHeart (Heart Container) OK and Documented * Add missing spawn params. * z_item_b_heart updates from review. * Rename ItemBHeart_UpdateRotationAndScale to ItemBHeart_UpdateModel * Address comments from review. * Rename unitScale to baseScale. * Fixed function names after master merge. --- spec | 3 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 10 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 6 +- .../actors/ovl_Item_B_Heart/z_item_b_heart.c | 101 ++++++++++++++++-- .../actors/ovl_Item_B_Heart/z_item_b_heart.h | 14 ++- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 2 +- 7 files changed, 117 insertions(+), 21 deletions(-) diff --git a/spec b/spec index 003c76dd4..4d327dc20 100644 --- a/spec +++ b/spec @@ -995,8 +995,7 @@ beginseg name "ovl_Item_B_Heart" compress include "build/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.o" - include "build/data/ovl_Item_B_Heart/ovl_Item_B_Heart.data.o" - include "build/data/ovl_Item_B_Heart/ovl_Item_B_Heart.reloc.o" + include "build/src/overlays/actors/ovl_Item_B_Heart/ovl_Item_B_Heart_reloc.o" endseg beginseg 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 76889e41e..7220b5d06 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -553,7 +553,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (this->actor.params == TWINMOLD_RED)) { sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f, 0.0f, 0, 0, 0, 1); - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0); + 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; @@ -1971,7 +1971,7 @@ void func_809DD934(Boss02* this, PlayState* play) { temp_a0_5->scale.z *= phi_f0_2; if (temp_a0_5->id == ACTOR_ITEM_B_HEART) { - ((ItemBHeart*)temp_a0_5)->unk_168 *= phi_f0_2; + ((ItemBHeart*)temp_a0_5)->baseScale *= phi_f0_2; } } temp_a0_5 = temp_a0_5->next; @@ -2210,10 +2210,12 @@ void func_809DEAC4(Boss02* this, PlayState* play) { this->unk_1D7E = 0; if (!sIsInGiantMode) { - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, + BHEART_PARAM_NORMAL); phi_f0 = 60.0f; } else { - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0, 35); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0, + BHEART_PARAM_SMALL); phi_f0 = 3155.0f; } sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 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 a9096048a..ddd9d4830 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -51,6 +51,7 @@ #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" +#include "overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_water_effect/object_water_effect.h" @@ -451,7 +452,8 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0, 0, ENDOORWARP1_FF_1); - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, + BHEART_PARAM_NORMAL); Actor_Kill(&this->actor); return; } @@ -1610,7 +1612,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0, 0, ENDOORWARP1_FF_1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, this->actor.focus.pos.x, PLATFORM_HEIGHT, - this->actor.focus.pos.z, 0, 0, 0, 0); + this->actor.focus.pos.z, 0, 0, 0, BHEART_PARAM_NORMAL); this->csTimer = 0; Actor_SetScale(&this->actor, 0.0f); AudioSfx_StopByPos(&this->actor.projectedPos); diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c index c41f45579..661d24636 100644 --- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c +++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c @@ -1,3 +1,9 @@ +/* + * File: z_item_b_heart.c + * Overlay: ovl_Item_B_Heart + * Description: Heart Container + */ + #include "z_item_b_heart.h" #include "objects/object_gi_hearts/object_gi_hearts.h" @@ -10,7 +16,8 @@ void ItemBHeart_Destroy(Actor* thisx, PlayState* play); void ItemBHeart_Update(Actor* thisx, PlayState* play); void ItemBHeart_Draw(Actor* thisx, PlayState* play); -/* +void ItemBHeart_UpdateModel(ItemBHeart* this, PlayState* play); + const ActorInit Item_B_Heart_InitVars = { ACTOR_ITEM_B_HEART, ACTORCAT_BOSS, @@ -20,16 +27,94 @@ const ActorInit Item_B_Heart_InitVars = { (ActorFunc)ItemBHeart_Init, (ActorFunc)ItemBHeart_Destroy, (ActorFunc)ItemBHeart_Update, - (ActorFunc)ItemBHeart_Draw + (ActorFunc)ItemBHeart_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Init.s") +static InitChainEntry sInitChain[] = { + ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Destroy.s") +void ItemBHeart_Init(Actor* thisx, PlayState* play) { + ItemBHeart* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Update.s") + if (Flags_GetCollectible(play, 0x1F)) { + Actor_Kill(&this->actor); + return; + } + Actor_ProcessInitChain(&this->actor, sInitChain); + ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.8f); + if (this->actor.params == BHEART_PARAM_SMALL) { + this->baseScale = BHEART_SCALE_SMALL; + } else { + this->baseScale = BHEART_SCALE_NORMAL; + } + this->actor.world.pos.y += 20.0f * this->baseScale; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/func_808BCF54.s") +void ItemBHeart_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Draw.s") +/** + * Adjusts size and handles collection (if of proper baseScale) + */ +void ItemBHeart_Update(Actor* thisx, PlayState* play) { + ItemBHeart* this = THIS; + + ItemBHeart_UpdateModel(this, play); + + if (!(this->baseScale < BHEART_SCALE_MIN_COLLECTIBLE)) { + if (Actor_HasParent(&this->actor, play)) { + Flags_SetCollectible(play, 0x1F); + Actor_Kill(&this->actor); + return; + } + Actor_OfferGetItem(&this->actor, play, GI_HEART_CONTAINER, 30.0f, 80.0f); + } +} + +/** + * Rotate continuously while approaching 40% of object's unit scale. + */ +void ItemBHeart_UpdateModel(ItemBHeart* this, PlayState* play) { + this->actor.shape.rot.y += 0x400; + Math_ApproachF(&this->variableScale, 0.4f, 0.1f, 0.01f); + Actor_SetScale(&this->actor, this->variableScale * this->baseScale); +} + +/** + * Draw translucently when in front of a boss warp portal + */ +void ItemBHeart_Draw(Actor* thisx, PlayState* play) { + ItemBHeart* this = THIS; + Actor* actorIt; + u8 drawTranslucent = false; + + OPEN_DISPS(play->state.gfxCtx); + + actorIt = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; + + while (actorIt != NULL) { + if ((actorIt->id == ACTOR_DOOR_WARP1) && (actorIt->projectedPos.z > this->actor.projectedPos.z)) { + drawTranslucent = true; + break; + } + actorIt = actorIt->next; + } + + if (drawTranslucent || (this->actor.world.rot.y != 0)) { + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, &gGiHeartBorderDL); + gSPDisplayList(POLY_XLU_DISP++, &gGiHeartContainerDL); + } else { + 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++, &gGiHeartBorderDL); + gSPDisplayList(POLY_OPA_DISP++, &gGiHeartContainerDL); + } + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h index 4e3126e25..7a071a8ec 100644 --- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h +++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h @@ -3,12 +3,20 @@ #include "global.h" -struct ItemBHeart; +typedef enum { + /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale. + /* 35 */ BHEART_PARAM_SMALL = 35, // Spawn Parameter for Small Scale. +} ItemBHeartParams; + +#define BHEART_SCALE_SMALL (0.1f) // Scale value for Small Mode +#define BHEART_SCALE_NORMAL (1.0f) // Scale value for Normal Mode +#define BHEART_SCALE_MIN_COLLECTIBLE (0.5f) // baseScale <50% will disable collection typedef struct ItemBHeart { /* 0x000 */ Actor actor; - /* 0x144 */ UNK_TYPE1 unk_144[0x24]; - /* 0x168 */ f32 unk_168; + /* 0x144 */ UNK_TYPE1 unk_144[0x20]; + /* 0x164 */ f32 variableScale; + /* 0x168 */ f32 baseScale; } ItemBHeart; // size = 0x16C #endif // Z_ITEM_B_HEART_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d4cb99aed..127fb34bf 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6033,7 +6033,7 @@ 0x808BCDF0:("ItemBHeart_Init",), 0x808BCEA8:("ItemBHeart_Destroy",), 0x808BCEB8:("ItemBHeart_Update",), - 0x808BCF54:("func_808BCF54",), + 0x808BCF54:("ItemBHeart_UpdateModel",), 0x808BCFC4:("ItemBHeart_Draw",), 0x808BD1E0:("EnDekunuts_Init",), 0x808BD31C:("EnDekunuts_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d09486c56..f3f90ba25 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -6470,7 +6470,7 @@ 0x808BCD44:("D_808BCD44","f32","",0x4), 0x808BCDE0:("sNumLitTorchesInGroup","UNK_TYPE1","",0x1), 0x808BD160:("Item_B_Heart_InitVars","UNK_TYPE1","",0x1), - 0x808BD180:("D_808BD180","UNK_TYPE1","",0x1), + 0x808BD180:("sInitChain","UNK_TYPE1","",0x1), 0x808BD190:("D_808BD190","f32","",0x4), 0x808BEF10:("En_Dekunuts_InitVars","UNK_TYPE1","",0x1), 0x808BEF30:("D_808BEF30","UNK_TYPE1","",0x1), From fc475a97565ade34d57f80970c6b5cebcc2892a7 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 28 May 2023 20:04:07 -0700 Subject: [PATCH 28/51] Docs Cleanup (#1153) * sysheap * Gorons * Update goron comment * functions.h * Update src/boot_O2/system_heap.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * add header * Fix header guards * Update data * Add malloc and free to header --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_oF1d_map.xml | 18 ++++---- include/functions.h | 4 -- include/system_heap.h | 11 +++++ include/system_malloc.h | 6 +-- spec | 2 +- .../{boot_800862E0.c => system_heap.c} | 41 +++++++++++-------- src/boot_O2/system_malloc.c | 2 +- src/code/main.c | 3 +- tools/disasm/files.txt | 4 +- tools/disasm/functions.txt | 18 ++++---- tools/sizes/boot_functions.csv | 18 ++++---- 11 files changed, 71 insertions(+), 56 deletions(-) create mode 100644 include/system_heap.h rename src/boot_O2/{boot_800862E0.c => system_heap.c} (66%) diff --git a/assets/xml/objects/object_oF1d_map.xml b/assets/xml/objects/object_oF1d_map.xml index 0f331cbce..a241eac13 100644 --- a/assets/xml/objects/object_oF1d_map.xml +++ b/assets/xml/objects/object_oF1d_map.xml @@ -47,16 +47,16 @@ - - + + - - - - - - - + + + + + + + diff --git a/include/functions.h b/include/functions.h index bcc79f9e5..0f99fb24b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -128,10 +128,6 @@ void MtxConv_L2F(MtxF* mtx, Mtx* mf); void __assert(const char* file, u32 lineNum); // void func_800862B4(void); -void* SystemArena_MallocMin1(u32 size); -void SystemArena_FreeNullCheck(void* ptr); -void SystemArena_RunInits(void); -void SystemArena_Init(void* start, size_t size); s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3); f32 func_80086760(f32 x); // void func_80086794(void); diff --git a/include/system_heap.h b/include/system_heap.h new file mode 100644 index 000000000..e0864cca6 --- /dev/null +++ b/include/system_heap.h @@ -0,0 +1,11 @@ +#ifndef SYSTEM_HEAP_H +#define SYSTEM_HEAP_H + +#include "libc/stddef.h" +#include "PR/ultratypes.h" + +void* SystemHeap_Malloc(size_t size); +void SystemHeap_Free(void* ptr); +void SystemHeap_Init(void* start, size_t size); + +#endif diff --git a/include/system_malloc.h b/include/system_malloc.h index e92eaf89f..cf91899ef 100644 --- a/include/system_malloc.h +++ b/include/system_malloc.h @@ -1,5 +1,5 @@ -#ifndef SYSTEM_MALLOC -#define SYSTEM_MALLOC +#ifndef SYSTEM_MALLOC_H +#define SYSTEM_MALLOC_H #include "PR/ultratypes.h" #include "os_malloc.h" @@ -11,7 +11,7 @@ void SystemArena_Free(void* ptr); void* SystemArena_Calloc(u32 elements, size_t size); void SystemArena_GetSizes(size_t* maxFreeBlock, size_t* bytesFree, size_t* bytesAllocated); u32 SystemArena_CheckArena(void); -void SystemArena_InitArena(void* start, size_t size); +void SystemArena_Init(void* start, size_t size); void SystemArena_Cleanup(void); u8 SystemArena_IsInitialized(void); diff --git a/spec b/spec index 4d327dc20..9bfbc750c 100644 --- a/spec +++ b/spec @@ -36,7 +36,7 @@ beginseg 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/boot_800862E0.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/asm/boot/fp.text.o" diff --git a/src/boot_O2/boot_800862E0.c b/src/boot_O2/system_heap.c similarity index 66% rename from src/boot_O2/boot_800862E0.c rename to src/boot_O2/system_heap.c index 5774af9da..66e53dc12 100644 --- a/src/boot_O2/boot_800862E0.c +++ b/src/boot_O2/system_heap.c @@ -1,3 +1,10 @@ +/** + * @file system_heap.c + * + * @note: + * Only SystemHeap_Init() is used, and is essentially just a wrapper for SystemArena_Init(). + * + */ #include "global.h" #include "system_malloc.h" @@ -6,20 +13,20 @@ typedef void (*BlockFunc1)(void*, u32); typedef void (*BlockFunc8)(void*, u32, u32, u32, u32, u32, u32, u32, u32); typedef struct InitFunc { - uintptr_t nextOffset; - void (*func)(void); -} InitFunc; + /* 0x0 */ uintptr_t nextOffset; + /* 0x4 */ void (*func)(void); +} InitFunc; // size = 0x8 void* sInitFuncs = NULL; -char sNew[] = { 0x00, 0x00, 0x00, 0x00 }; +char sNew[] = ""; -char D_80097508[] = { +UNK_TYPE1 D_80097508[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, }; -void* SystemArena_MallocMin1(size_t size) { +void* SystemHeap_Malloc(size_t size) { if (size == 0) { size = 1; } @@ -27,13 +34,13 @@ void* SystemArena_MallocMin1(size_t size) { return __osMalloc(&gSystemArena, size); } -void SystemArena_FreeNullCheck(void* ptr) { +void SystemHeap_Free(void* ptr) { if (ptr != NULL) { __osFree(&gSystemArena, ptr); } } -void SystemArena_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc blockFunc) { +void SystemHeap_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc blockFunc) { uintptr_t pos = blk; for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) { @@ -41,7 +48,7 @@ void SystemArena_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc } } -void SystemArena_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc) { +void SystemHeap_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc) { uintptr_t pos = blk; for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) { @@ -49,9 +56,9 @@ void SystemArena_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc } } -void* SystemArena_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc8 blockFunc) { +void* SystemHeap_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc8 blockFunc) { if (blk == NULL) { - blk = SystemArena_MallocMin1(nBlk * blkSize); + blk = SystemHeap_Malloc(nBlk * blkSize); } if (blk != NULL && blockFunc != NULL) { @@ -65,7 +72,7 @@ void* SystemArena_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFun return blk; } -void SystemArena_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc, s32 shouldFree) { +void SystemHeap_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc, s32 shouldFree) { uintptr_t pos; uintptr_t start; size_t maskedBlkSize; @@ -86,11 +93,11 @@ void SystemArena_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, Bl } if (shouldFree) { - SystemArena_FreeNullCheck(blk); + SystemHeap_Free(blk); } } -void SystemArena_RunInits(void) { +void SystemHeap_RunInits(void) { InitFunc* initFunc = (InitFunc*)&sInitFuncs; u32 nextOffset = initFunc->nextOffset; InitFunc* prev = NULL; @@ -110,7 +117,7 @@ void SystemArena_RunInits(void) { sInitFuncs = prev; } -void SystemArena_Init(void* start, size_t size) { - SystemArena_InitArena(start, size); - SystemArena_RunInits(); +void SystemHeap_Init(void* start, size_t size) { + SystemArena_Init(start, size); + SystemHeap_RunInits(); } diff --git a/src/boot_O2/system_malloc.c b/src/boot_O2/system_malloc.c index 56608166c..cea017b38 100644 --- a/src/boot_O2/system_malloc.c +++ b/src/boot_O2/system_malloc.c @@ -38,7 +38,7 @@ u32 SystemArena_CheckArena(void) { return __osCheckArena(&gSystemArena); } -void SystemArena_InitArena(void* start, size_t size) { +void SystemArena_Init(void* start, size_t size) { __osMallocInit(&gSystemArena, start, size); } diff --git a/src/code/main.c b/src/code/main.c index 6eadd591a..186240489 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -8,6 +8,7 @@ #include "buffers.h" #include "stack.h" #include "stackcheck.h" +#include "system_heap.h" extern OSMesgQueue sSiIntMsgQ; extern OSMesg sSiIntMsgBuf[1]; @@ -44,7 +45,7 @@ void Main(void* arg) { sysHeap = gSystemHeap; fb = 0x80780000; startHeapSize = fb - sysHeap; - SystemArena_Init(sysHeap, startHeapSize); + SystemHeap_Init(sysHeap, startHeapSize); Regs_Init(); diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 88fab2cab..df205189f 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -57,7 +57,7 @@ 0x80085570 : "gfxprint", 0x80086110 : "mtxuty-cvt", 0x80086280 : "assert", - 0x800862E0 : "", + 0x800862E0 : "system_heap", 0x80086620 : "padsetup", 0x80086760 : "boot_80086760", 0x80086C70 : "fp", @@ -256,7 +256,7 @@ 0x80096C30 : "loadfragment2", 0x80096C40 : "stackcheck", 0x80096C50 : "gfxprint", - 0x80097500 : "boot_800862E0", + 0x80097500 : "system_heap", 0x80097520 : "fp", 0x80097530 : "rand", 0x80097540 : "osViModeNtscHpf1", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 127fb34bf..0422c71e2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -157,14 +157,14 @@ 0x80086258:("MtxConv_L2F",), 0x80086280:("__assert",), 0x800862B4:("func_800862B4",), - 0x800862E0:("SystemArena_MallocMin1",), - 0x80086310:("SystemArena_FreeNullCheck",), - 0x8008633C:("SystemArena_RunBlockFunc",), - 0x800863AC:("SystemArena_RunBlockFunc1",), - 0x8008641C:("SystemArena_RunBlockFunc8",), - 0x800864EC:("SystemArena_RunBlockFunc1Reverse",), - 0x80086588:("SystemArena_RunInits",), - 0x800865F8:("SystemArena_Init",), + 0x800862E0:("SystemHeap_Malloc",), + 0x80086310:("SystemHeap_Free",), + 0x8008633C:("SystemHeap_RunBlockFunc",), + 0x800863AC:("SystemHeap_RunBlockFunc1",), + 0x8008641C:("SystemHeap_RunBlockFunc8",), + 0x800864EC:("SystemHeap_RunBlockFunc1Reverse",), + 0x80086588:("SystemHeap_RunInits",), + 0x800865F8:("SystemHeap_Init",), 0x80086620:("PadSetup_Init",), 0x80086760:("func_80086760",), 0x80086794:("func_80086794",), @@ -206,7 +206,7 @@ 0x80086E78:("SystemArena_Calloc",), 0x80086ECC:("SystemArena_GetSizes",), 0x80086F04:("SystemArena_CheckArena",), - 0x80086F28:("SystemArena_InitArena",), + 0x80086F28:("SystemArena_Init",), 0x80086F58:("SystemArena_Cleanup",), 0x80086F7C:("SystemArena_IsInitialized",), 0x80086FA0:("Rand_Next",), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index bbcf6d5de..744376bcc 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -154,14 +154,14 @@ 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/boot_800862E0/SystemArena_MallocMin1.s,SystemArena_MallocMin1,0x800862E0,0xC -asm/non_matchings/boot/boot_800862E0/SystemArena_FreeNullCheck.s,SystemArena_FreeNullCheck,0x80086310,0xB -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc.s,SystemArena_RunBlockFunc,0x8008633C,0x1C -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc1.s,SystemArena_RunBlockFunc1,0x800863AC,0x1C -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc8.s,SystemArena_RunBlockFunc8,0x8008641C,0x34 -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc1Reverse.s,SystemArena_RunBlockFunc1Reverse,0x800864EC,0x27 -asm/non_matchings/boot/boot_800862E0/SystemArena_RunInits.s,SystemArena_RunInits,0x80086588,0x1C -asm/non_matchings/boot/boot_800862E0/SystemArena_Init.s,SystemArena_Init,0x800865F8,0xA +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 +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1.s,SystemHeap_RunBlockFunc1,0x800863AC,0x1C +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc8.s,SystemHeap_RunBlockFunc8,0x8008641C,0x34 +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1Reverse.s,SystemHeap_RunBlockFunc1Reverse,0x800864EC,0x27 +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/func_80086760.s,func_80086760,0x80086760,0xD asm/non_matchings/boot/boot_80086760/func_80086794.s,func_80086794,0x80086794,0x8 @@ -203,7 +203,7 @@ asm/non_matchings/boot/system_malloc/SystemArena_Free.s,SystemArena_Free,0x80086 asm/non_matchings/boot/system_malloc/SystemArena_Calloc.s,SystemArena_Calloc,0x80086E78,0x15 asm/non_matchings/boot/system_malloc/SystemArena_GetSizes.s,SystemArena_GetSizes,0x80086ECC,0xE asm/non_matchings/boot/system_malloc/SystemArena_CheckArena.s,SystemArena_CheckArena,0x80086F04,0x9 -asm/non_matchings/boot/system_malloc/SystemArena_InitArena.s,SystemArena_InitArena,0x80086F28,0xC +asm/non_matchings/boot/system_malloc/SystemArena_Init.s,SystemArena_Init,0x80086F28,0xC asm/non_matchings/boot/system_malloc/SystemArena_Cleanup.s,SystemArena_Cleanup,0x80086F58,0x9 asm/non_matchings/boot/system_malloc/SystemArena_IsInitialized.s,SystemArena_IsInitialized,0x80086F7C,0x9 asm/non_matchings/boot/rand/Rand_Next.s,Rand_Next,0x80086FA0,0xC From aa0a968791eb62ab02f2ce0b9e073362ebdd7243 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 30 May 2023 02:04:21 +1000 Subject: [PATCH 29/51] Kaleido OK & icon_item_vtx_static (Documented) (#1243) * Begin Kaleido * WIP * DW macros for gbi * More Progress * Match KaleidoScope_GrayOutTextureRGBA32 * DrawGameOver wip * Add some function names * A few more matching, some docs * More docs, data wip * Import Kaleido Data * Data cleanup * Some progress * Match TitleCard_Draw Again (Thanks Roman) * Match KaleidoScope_DrawDebugEditor * KaleidoScope_UpdateDebugEditor WIP * Some cleanup * z_kaleido_debug.c OK * Cleanup * match func_8081B6EC * more wip, data cleanup * match func_80825A50 * match KaleidoScope_InitVertices * cursor progress * name func * item headers * match KaleidoScope_DrawItemSelect * KaleidoScope_UpdateItemEquip WIP * match kaleido item * doc kaleido item * z_kaleido_prompt ok * kaleido mask setup * small cleanup * kaleido mask OK * mask cleanup * small fix * quest page setup * doc save prompt * sync with prompt docs * KaleidoScope_Update WIP * More progress on KaleidoScope_Update * kaleido update cleanup * KaleidoScope_Update OK * Slightly cleaner match in KaleidoScope_Update * match KaleidoScope_DrawPages and KaleidoScope_DrawGameOver, organize data * more cleanup * match KaleidoScope_Draw and KaleidoScope_SetView * match KaleidoScope_UpdateNamePanel * match another 2 funcs, segment docs * another KaleidoScope_UpdateNamePanel ? * swap update name panel names * another match, only 2 large/similar vtx function in kaleido nes * more setup for drawInfoPanel * match KaleidoScope_DrawDungeonStrayFairyCount, 8 funcs left * document KaleidoScope_DrawDungeonStrayFairyCount * KaleidoScope_DrawInfoPanel1 WIP * match KaleidoScope_DrawInfoPanel2 * gameover pause states * name two pause states * match KaleidoScope_UpdateDungeonCursor and KaleidoScope_UpdateWorldMapCursor * match KaleidoScope_DrawDungeonMap * KaleidoScope_DrawWorldMap WIP * cleanup map * some cursor/texture docs * more cursor docs * KaleidoScope_UpdateQuestCursor wip * match KaleidoScope_UpdateQuestCursor * quest cleanup * KaleidoScope_DrawQuestStatus WIP, broke gakufu * match KaleidoScope_DrawInfoPanel1, Kaleido NES OK * pause substates * more cleanup * map progress * very small improvements to KaleidoScope_DrawWorldMap * match KaleidoScope_DrawWorldMap * cleanup KaleidoScope_DrawWorldMap * rematch EnGakufu_ProcessNotes, thanks anon58 * gameover and misc docs * more docs * small cleanup of maps * owl warp and other docs * symmetry in pause state * some docs and cleanup * docs * more docs from OoT WIP * fix * quest page docs * more enums * more cleanup and enums * another round of docs * doc cursor indices * map docs * some docs * cleanup for-loops * cleanup * else if * small docs * icon_item_field_static * dungeon static * eol * icon item jpn static * vtx static * jpn static comments * import parameter texture functions * mask cleanup * sync with PRs * some docs * more docs * fix bss * some docs * sync with PR * quest docs * fix quest vtx * sync with PR * sync with PR * fix typo * small cleanup * vtx madness * more vtx * add quad docs * cleanup vtx * cleanup * cleanup * revert gbi changes * cleanup * more cleanup * another cleanup * remove empty comment * some PR review * more naming suggestions * namefixer * L button to Z button --------- Co-authored-by: Derek Hensley --- assets/xml/interface/icon_item_vtx_static.xml | 12 + include/variables.h | 2 +- include/z64.h | 18 +- spec | 6 +- src/code/z_actor.c | 30 +- src/code/z_kaleido_scope_call.c | 4 +- src/code/z_kaleido_setup.c | 2 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 16 +- .../ovl_kaleido_scope/z_kaleido_item.c | 12 +- .../ovl_kaleido_scope/z_kaleido_map.c | 26 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 12 +- .../ovl_kaleido_scope/z_kaleido_scope.h | 62 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1338 +++++++++++++++-- tools/disasm/functions.txt | 20 +- tools/disasm/variables.txt | 60 +- undefined_syms.txt | 14 - 16 files changed, 1413 insertions(+), 221 deletions(-) create mode 100644 assets/xml/interface/icon_item_vtx_static.xml diff --git a/assets/xml/interface/icon_item_vtx_static.xml b/assets/xml/interface/icon_item_vtx_static.xml new file mode 100644 index 000000000..37ccb0063 --- /dev/null +++ b/assets/xml/interface/icon_item_vtx_static.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/include/variables.h b/include/variables.h index 4e3559077..e7dc43da0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -600,7 +600,7 @@ extern UNK_PTR D_801C5CB0; // extern UNK_TYPE2 D_801C6A8C; // extern UNK_TYPE2 D_801C6A90; // extern UNK_TYPE2 D_801C6A94; -extern u8 D_801C6A98[5][5]; +extern u8 gPageSwitchNextButtonStatus[6][5]; // extern UNK_TYPE1 D_801C6AB8; // extern UNK_TYPE1 D_801C6B28; // extern UNK_TYPE1 D_801CED40; diff --git a/include/z64.h b/include/z64.h index 05aad655e..12738f9a7 100644 --- a/include/z64.h +++ b/include/z64.h @@ -200,7 +200,7 @@ typedef struct { /* 0x204 */ u16 pageIndex; /* 0x206 */ u16 switchPageTimer; /* 0x208 */ u16 savePromptState; - /* 0x20C */ f32 unk_20C; + /* 0x20C */ f32 unk_20C; // set to 936.0f, unused remnant from OoT /* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen /* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen /* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen @@ -216,7 +216,7 @@ typedef struct { /* 0x24C */ s16 cursorYIndex[5]; /* 0x256 */ s16 unk_256; // Uses DungeonItem enum /* 0x258 */ s16 cursorSpecialPos; - /* 0x25A */ s16 pageSwitchTimer; + /* 0x25A */ s16 pageSwitchInputTimer; // Used to introduce a delay before switching page when arriving on the "scroll left/right" positions while holding stick left/right. /* 0x25C */ u16 namedItem; /* 0x25E */ u16 cursorItem[5]; /* 0x268 */ u16 cursorSlot[5]; @@ -227,15 +227,15 @@ typedef struct { /* 0x27A */ s16 equipAnimY; /* 0x27C */ s16 equipAnimAlpha; /* 0x27E */ s16 infoPanelOffsetY; - /* 0x280 */ u16 unk_280; + /* 0x280 */ u16 nameDisplayTimer; /* 0x282 */ u16 nameColorSet; /* 0x284 */ s16 cursorColorSet; - /* 0x286 */ s16 unk_286; - /* 0x288 */ f32 unk_288; - /* 0x28C */ f32 unk_28C; - /* 0x290 */ f32 unk_290; - /* 0x294 */ f32 unk_294; - /* 0x298 */ f32 unk_298; + /* 0x286 */ s16 cursorSpinPhase; + /* 0x288 */ f32 cursorX; + /* 0x28C */ f32 cursorY; + /* 0x290 */ f32 cursorWidth; + /* 0x294 */ f32 cursorHeight; + /* 0x298 */ f32 cursorShrinkRate; /* 0x29C */ s16 promptChoice; // save/continue choice: 0 = yes; 4 = no /* 0x29E */ s16 promptAlpha; /* 0x2A0 */ s16 ocarinaSongIndex; diff --git a/spec b/spec index 9bfbc750c..a4e38cc6f 100644 --- a/spec +++ b/spec @@ -325,7 +325,8 @@ beginseg name "icon_item_vtx_static" compress romalign 0x1000 - include "build/baserom/icon_item_vtx_static.o" + include "build/assets/interface/icon_item_vtx_static/icon_item_vtx_static.o" + number 11 endseg beginseg @@ -692,8 +693,7 @@ beginseg include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.o" include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.o" include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.o" - include "build/data/ovl_kaleido_scope/ovl_kaleido_scope.bss.o" - include "build/data/ovl_kaleido_scope/ovl_kaleido_scope.reloc.o" + include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/ovl_kaleido_scope_reloc.o" endseg beginseg diff --git a/src/code/z_actor.c b/src/code/z_actor.c index e86a341fd..3d98c8f46 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -849,17 +849,12 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) { if (titleCtx->alpha != 0) { s32 width = titleCtx->width; s32 height = titleCtx->height; - s32 unk1; - s32 spC0; - s32 sp38; - s32 spB8; - s32 spB4; - s32 temp; - - temp = width * 2; - spC0 = (titleCtx->x * 4) - temp; - spB8 = (titleCtx->y * 4) - (height * 2); - sp38 = width * 2; + s32 doubleWidth = width * 2; + s32 titleX = (titleCtx->x * 4) - doubleWidth; + s32 doubleHeight = height * 2; + s32 titleY = (titleCtx->y * 4) - doubleHeight; + s32 titleSecondY; + s32 textureLanguageOffset; OPEN_DISPS(gameState->gfxCtx); @@ -867,29 +862,30 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) { height = TMEM_SIZE / width; } - spB4 = spB8 + (height * 4); + titleSecondY = titleY + (height * 4); OVERLAY_DISP = Gfx_SetupDL52_NoCD(OVERLAY_DISP); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->alpha); - gDPLoadTextureBlock(OVERLAY_DISP++, (s32*)titleCtx->texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, + gDPLoadTextureBlock(OVERLAY_DISP++, titleCtx->texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 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(OVERLAY_DISP++, spC0, spB8, ((sp38 * 2) + spC0) - 4, spB8 + (height * 4) - 1, + gSPTextureRectangle(OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); height = titleCtx->height - height; + // If texture is bigger than 0x1000, display the rest if (height > 0) { - gDPLoadTextureBlock(OVERLAY_DISP++, (s32)titleCtx->texture + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, width, + gDPLoadTextureBlock(OVERLAY_DISP++, (uintptr_t)titleCtx->texture + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 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(OVERLAY_DISP++, spC0, spB4, ((sp38 * 2) + spC0) - 4, spB4 + (height * 4) - 1, - G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gSPTextureRectangle(OVERLAY_DISP++, titleX, titleSecondY, ((doubleWidth * 2) + titleX) - 4, + titleSecondY + (height * 4) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } CLOSE_DISPS(gameState->gfxCtx); diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index 59fde2f2d..d0f757125 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -40,13 +40,13 @@ void KaleidoScopeCall_Update(PlayState* play) { if (ShrinkWindow_Letterbox_GetSize() == 0) { R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING; pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; } } else if (pauseCtx->state == PAUSE_STATE_GAMEOVER_0) { R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING; pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; } else if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_1) || (pauseCtx->state == PAUSE_STATE_OWLWARP_1)) { diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 148aad84e..130fa88db 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -145,7 +145,7 @@ void KaleidoSetup_Init(PlayState* play) { pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; - pauseCtx->pageSwitchTimer = 0; + pauseCtx->pageSwitchInputTimer = 0; pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE; pauseCtx->cursorItem[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 75c031c0a..1b8511b50 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -13,7 +13,7 @@ extern TexturePtr D_08061000; // gBombersNotebookIconTex extern TexturePtr D_08062000; // gSongNoteIconTex s16 sQuestRemainsColorTimerInit[] = { 120, 60, 2, 80 }; -s16 sQuestHpColorTimerInit[] = { 20, 4, 20, 10 }; +s16 sQuestHpColorTimerInits[] = { 20, 4, 20, 10 }; s16 sQuestSongPlayedOcarinaButtonsNum = 0; u8 sQuestSongPlayedOcarinaButtons[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; s16 sQuestSongPlayedOcarinaButtonsAlpha[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -313,7 +313,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { sQuestHpPrimGreen = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1]; sQuestHpPrimBlue = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2]; sQuestHpPrimAlpha = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3]; - sQuestHpColorTimer = sQuestHpColorTimerInit[sQuestHpPrimColorTargetIndex]; + sQuestHpColorTimer = sQuestHpColorTimerInits[sQuestHpPrimColorTargetIndex]; if (++sQuestHpPrimColorTargetIndex > 3) { sQuestHpPrimColorTargetIndex = 0; } @@ -618,7 +618,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; nextCursorPoint = sCursorPointLinks[oldCursorPoint].left; if (nextCursorPoint == CURSOR_TO_LEFT) { @@ -641,7 +641,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; nextCursorPoint = sCursorPointLinks[oldCursorPoint].right; if (nextCursorPoint == CURSOR_TO_RIGHT) { @@ -666,7 +666,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { nextCursorPoint = sCursorPointLinks[oldCursorPoint].down; while (nextCursorPoint > CURSOR_NONE) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) { break; } @@ -679,7 +679,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { } nextCursorPoint = sCursorPointLinks[oldCursorPoint].up; while (nextCursorPoint > CURSOR_NONE) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) { break; } @@ -907,7 +907,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_BOMBERS_NOTEBOOK; if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { @@ -925,7 +925,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_REMAINS_GOHT; if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index c8d963bda..f46db573c 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -382,7 +382,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { while (moveCursorResult == PAUSE_CURSOR_RESULT_NONE) { if (pauseCtx->stickAdjX < -30) { // move cursor left - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_ITEM] != 0) { pauseCtx->cursorXIndex[PAUSE_ITEM]--; pauseCtx->cursorPoint[PAUSE_ITEM]--; @@ -413,7 +413,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } } else if (pauseCtx->stickAdjX > 30) { // move cursor right - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_ITEM] <= 4) { pauseCtx->cursorXIndex[PAUSE_ITEM]++; pauseCtx->cursorPoint[PAUSE_ITEM]++; @@ -451,7 +451,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { if (pauseCtx->stickAdjX > 30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorYIndex = 0; cursorXIndex = 0; cursorPoint = 0; // top row, left column (SLOT_OCARINA) @@ -489,7 +489,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } } else { // PAUSE_CURSOR_PAGE_RIGHT if (pauseCtx->stickAdjX < -30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorXIndex = 5; cursorPoint = 5; // top row, right columne (SLOT_TRADE_DEED) cursorYIndex = 0; @@ -541,7 +541,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_ITEM] != 0) { pauseCtx->cursorYIndex[PAUSE_ITEM]--; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorPoint[PAUSE_ITEM] -= 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; } else { @@ -553,7 +553,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_ITEM] < 3) { pauseCtx->cursorYIndex[PAUSE_ITEM]++; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorPoint[PAUSE_ITEM] += 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; } else { 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 6539f1b9e..a4df2c889 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 @@ -152,7 +152,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { // QUAD_MAP_PAGE_DUNGEON_BOSS_KEY, // QUAD_MAP_PAGE_DUNGEON_COMPASS, // QUAD_MAP_PAGE_DUNGEON_MAP - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 16, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[QUAD_MAP_PAGE_DUNGEON_TITLE * 4], 4 * 4, 0); // Dungeon Title gDPPipeSync(POLY_OPA_DISP++); @@ -317,9 +317,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE; oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MAP]; if (pauseCtx->stickAdjX > 30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorXIndex[PAUSE_MAP] = 0; pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256; pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256; @@ -345,9 +345,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } } } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorXIndex[PAUSE_MAP] = 1; pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_MAP; if (!CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.dungeonIndex)) { @@ -390,7 +390,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { gBitFlags[i]) || func_801090B0(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; break; } } @@ -411,7 +411,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { gBitFlags[i]) || func_801090B0(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; break; } } @@ -854,7 +854,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { if (pauseCtx->cursorSpecialPos == 0) { if (pauseCtx->stickAdjX > 30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; while (true) { @@ -869,7 +869,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { } } } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; while (true) { @@ -898,7 +898,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { if (pauseCtx->stickAdjX > 30) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = -1; pauseCtx->cursorSpecialPos = 0; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++; @@ -923,7 +923,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { } else if (pauseCtx->stickAdjX < -30) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 11; pauseCtx->cursorSpecialPos = 0; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--; @@ -958,7 +958,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; if (pauseCtx->stickAdjX > 30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; do { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++; @@ -967,7 +967,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { } } while (!pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]); } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; do { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 67a8e0d36..228f0d16a 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -309,7 +309,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { while (moveCursorResult == PAUSE_CURSOR_RESULT_NONE) { if (pauseCtx->stickAdjX < -30) { // move cursor left - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_MASK] != 0) { pauseCtx->cursorXIndex[PAUSE_MASK]--; pauseCtx->cursorPoint[PAUSE_MASK]--; @@ -339,7 +339,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } } else if (pauseCtx->stickAdjX > 30) { // move cursor right - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_MASK] <= 4) { pauseCtx->cursorXIndex[PAUSE_MASK]++; pauseCtx->cursorPoint[PAUSE_MASK]++; @@ -380,7 +380,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { if (pauseCtx->stickAdjX > 30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorYIndex = 0; cursorXIndex = 0; cursorPoint = 0; // top row, left column (SLOT_MASK_POSTMAN) @@ -421,7 +421,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { //! FAKE: if (1) {} if (pauseCtx->stickAdjX < -30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorXIndex = 5; cursorPoint = 5; // top row, right column (SLOT_MASK_DEKU) cursorYIndex = 0; @@ -473,7 +473,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // move cursor up moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_MASK] != 0) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorYIndex[PAUSE_MASK]--; pauseCtx->cursorPoint[PAUSE_MASK] -= 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; @@ -485,7 +485,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // move cursor down moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_MASK] < 3) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorYIndex[PAUSE_MASK]++; pauseCtx->cursorPoint[PAUSE_MASK] += 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h index a9aeed70f..c82a40e67 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h @@ -76,9 +76,9 @@ typedef enum { } PauseMainState; typedef enum { - /* 0x00 */ PAUSE_SAVEPROMPT_STATE_0, + /* 0x00 */ PAUSE_SAVEPROMPT_STATE_APPEARING, /* 0x01 */ PAUSE_SAVEPROMPT_STATE_1, - /* 0x02 */ PAUSE_SAVEPROMPT_STATE_2, + /* 0x02 */ PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU, /* 0x03 */ PAUSE_SAVEPROMPT_STATE_3, /* 0x04 */ PAUSE_SAVEPROMPT_STATE_4, /* 0x05 */ PAUSE_SAVEPROMPT_STATE_5, @@ -303,9 +303,35 @@ typedef enum { /* 66 */ QUAD_MAP_PAGE_WORLD_MAX } WorldMapPageQuad; +// === INFO PANEL === // + +/** + * infoPanelVtx + * + * infoPanelVtx[0] name panel left texture + * infoPanelVtx[4] name panel right texture + * infoPanelVtx[8] Z Button icon + * infoPanelVtx[12] R Button icon + * infoPanelVtx[16] A button icon (or name segment) + * infoPanelVtx[20] pause-to-decide texture + * infoPanelVtx[24] (unused) oot remnant of Gold Skulltula Icon Texture + */ + #define PAUSE_NAME_COLOR_SET_WHITE 0 #define PAUSE_NAME_COLOR_SET_GREY 1 +// === CURSOR === // + +/** + * cursorVtx + * + * cursorVtx[0] cursor circle + * cursorVtx[4] (unused) oot remnant of top-right corner of cursor + * cursorVtx[8] (unused) oot remnant of bottom-left corner of cursor + * cursorVtx[12] (unused) oot remnant of bottom-right corner of cursor + * cursorVtx[16] equipping item icon (while moving) + */ + #define PAUSE_CURSOR_COLOR_SET_WHITE 0 #define PAUSE_CURSOR_COLOR_SET_YELLOW 2 #define PAUSE_CURSOR_COLOR_SET_BLUE 4 @@ -326,6 +352,36 @@ typedef enum { /* 5 */ PAUSE_QUAD_CURSOR_MAX } PauseCursorQuad; +// === PROMPT === // + +/** + * promptPageVtx (unused in MM, inferred from OoT) + * + * // PAGE_BG_QUADS + * promptPageVtx[0] prompt page background texture: row 0, column 0 + * promptPageVtx[4] prompt page background texture: row 1, column 0 + * promptPageVtx[8] prompt page background texture: row 2, column 0 + * promptPageVtx[12] prompt page background texture: row 3, column 0 + * promptPageVtx[16] prompt page background texture: row 4, column 0 + * promptPageVtx[20] prompt page background texture: row 0, column 1 + * promptPageVtx[24] prompt page background texture: row 1, column 1 + * promptPageVtx[28] prompt page background texture: row 2, column 1 + * promptPageVtx[32] prompt page background texture: row 3, column 1 + * promptPageVtx[36] prompt page background texture: row 4, column 1 + * promptPageVtx[40] prompt page background texture: row 0, column 2 + * promptPageVtx[44] prompt page background texture: row 1, column 2 + * promptPageVtx[48] prompt page background texture: row 2, column 2 + * promptPageVtx[52] prompt page background texture: row 3, column 2 + * promptPageVtx[56] prompt page background texture: row 4, column 2 + * + * // QUAD_PROMPT_MAX + * promptPageVtx[60] message + * promptPageVtx[64] cursor left + * promptPageVtx[68] cursor right + * promptPageVtx[72] choice (yes) + * promptPageVtx[76] choice (no) + */ + #define PAUSE_PROMPT_YES 0 #define PAUSE_PROMPT_NO 4 @@ -342,7 +398,7 @@ typedef enum { void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos); void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point); void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ); -void func_80821A04(PlayState* play); +void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play); // Map void KaleidoScope_DrawDungeonMap(PlayState* play); 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 a882cf3e7..9d210a728 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 @@ -1,7 +1,7 @@ /* * File: z_kaleido_scope_NES.c * Overlay: ovl_kaleido_scope - * Description: + * Description: Pause Menu */ #include "z_kaleido_scope.h" @@ -9,18 +9,13 @@ #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" #include "interface/icon_item_jpn_static/icon_item_jpn_static.h" #include "z64view.h" +#include "overlays/gamestates/ovl_opening/z_opening.h" +#include "interface/icon_item_gameover_static/icon_item_gameover_static.h" +#include "interface/icon_item_jpn_static/icon_item_jpn_static.h" +#include "interface/icon_item_vtx_static/icon_item_vtx_static.h" -extern UNK_TYPE D_02001360; -extern UNK_TYPE D_020044A0; -extern UNK_TYPE D_02004AA0; -extern UNK_TYPE D_0200B998; -extern UNK_TYPE D_08062000; -extern UNK_TYPE D_08064340; -extern UNK_TYPE D_0B000000; -extern UNK_TYPE D_0C000000; -extern UNK_TYPE D_0C006C00; - -extern u8 sUnpausedButtonStatus[5]; +// iconItemSegment +extern TexturePtr D_08064340; // gPauseMenuCursorTex // Page Textures (Background of Page): // Broken up into multiple textures. @@ -242,29 +237,68 @@ s16 sPauseCursorRightX = 0; s16 D_8082B920 = 10; -u8 D_8082B924[] = { - 0x00, 0x14, 0x00, 0x04, 0x00, 0x14, 0x00, 0x0A, 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, - 0x07, 0x07, 0x03, 0x0F, 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00, +s16 sPauseZRCursorColorTimerInits[] = { 20, 4, 20, 10 }; + +// Unused remnant of OoT +u8 gAreaGsFlags[] = { + 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x07, 0x07, 0x03, 0x0F, + 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00, }; // TODO: Also applies to owl warps s16 sGameOverRectPosY = 66; -void func_80821900(void* segment, u32 texIndex) { +void Kaleido_LoadMapNameStatic(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); } -void func_8082192C(void* segment, u32 texIndex) { +void Kaleido_LoadMapNameStaticLarge(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); } -void func_80821958(void* segment, u32 texIndex) { +void Kaleido_LoadItemNameStatic(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_MoveCursorToSpecialPos.s") +void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos) { + PauseContext* pauseCtx = &play->pauseCtx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s") + pauseCtx->cursorSlot[pauseCtx->pageIndex] = 0; + pauseCtx->cursorSpecialPos = cursorSpecialPos; + pauseCtx->pageSwitchInputTimer = 0; + + play_sound(NA_SE_SY_DECIDE); + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED; + + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); +} + +void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + + pauseCtx->nameDisplayTimer = 0; + pauseCtx->cursorSpecialPos = 0; + + play_sound(NA_SE_SY_CURSOR); + + pauseCtx->cursorShrinkRate = 4.0f; + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; + + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); +} void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point) { OPEN_DISPS(gfxCtx); @@ -277,10 +311,90 @@ void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, CLOSE_DISPS(gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s") +#define SWITCH_PAGE_LEFT 0 +#define SWITCH_PAGE_RIGHT 2 -void KaleidoScope_HandlePageToggles(PlayState* play, Input* input); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_HandlePageToggles.s") +void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 direction) { + pauseCtx->cursorSlot[pauseCtx->pageIndex] = 0; + pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE; + pauseCtx->switchPageTimer = 0; + + if (direction == SWITCH_PAGE_LEFT) { + pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1; + play_sound(NA_SE_SY_WIN_SCROLL_LEFT); + pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; + } else { // SWITCH_PAGE_RIGHT + pauseCtx->nextPageMode = pauseCtx->pageIndex * 2; + play_sound(NA_SE_SY_WIN_SCROLL_RIGHT); + pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT; + } + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED; + + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); +} + +/** + * Process inputs to decide whether to switch pages + */ +void KaleidoScope_HandlePageToggles(PlayState* play, Input* input) { + PauseContext* pauseCtx = &play->pauseCtx; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + //! FAKE + if (1) {} + + if ((pauseCtx->debugEditor != DEBUG_EDITOR_NONE) || pauseCtx->itemDescriptionOn) { + return; + } + + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT) || CHECK_BTN_ALL(input->press.button, BTN_R)) { + // Switch the page to the right regardless of where the cursor is + if (interfaceCtx->unk_212 == 6) { + func_8011552C(play, 0x15); + } + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT); + return; + } + + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT) || CHECK_BTN_ALL(input->press.button, BTN_Z)) { + // Switch the page to the left regardless of where the cursor is + if (interfaceCtx->unk_212 == 6) { + func_8011552C(play, 0x15); + } + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT); + return; + } + + if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + if (pauseCtx->stickAdjX < -30) { + pauseCtx->pageSwitchInputTimer++; + // Switch the page to the left after a certain number of frames with held input or after a second press + if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) { + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT); + } + } else { + // stickAdjX is no longer held, so that the next input to the left will immediately switch pages + pauseCtx->pageSwitchInputTimer = -1; + } + } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { + if (pauseCtx->stickAdjX > 30) { + pauseCtx->pageSwitchInputTimer++; + // Switch the page to the right after a certain number of frames with held input or after a second press + if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) { + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT); + } + } else { + // stickAdjY is no longer held, so that the next input to the right will immediately switch pages + pauseCtx->pageSwitchInputTimer = -1; + } + } +} // Draw 15 (PAGE_BG_QUADS) quads with IA8 80x32 textures Gfx* KaleidoScope_DrawPageSections(Gfx* gfx, Vtx* vertices, TexturePtr* textures) { @@ -633,19 +747,413 @@ TexturePtr D_8082B9A8[] = { gPauseToMasksENGTex, gPauseToSelectItemENGTex, }; +void KaleidoScope_DrawInfoPanel(PlayState* play) { + static s16 sPauseZRCursorColorTargets[][4] = { + { 180, 210, 255, 220 }, + { 100, 100, 150, 220 }, + }; + static s16 sPauseZRCursorColorTimer = 20; + static s16 sPauseZRCursorColorIndex = 0; + static s16 sPauseZRCursorRed; + static s16 sPauseZRCursorGreen; + static s16 sPauseZRCursorBlue; + static s16 sPauseZRCursorAlpha; + PauseContext* pauseCtx = &play->pauseCtx; + s16 stepR; + s16 stepG; + s16 stepB; + s16 stepA; + s16 y; + s16 i; + s16 j; -s16 D_8082B9B8[][4] = { - { 180, 210, 255, 220 }, - { 100, 100, 150, 220 }, -}; + OPEN_DISPS(play->state.gfxCtx); -s16 D_8082B9C8 = 20; -s16 D_8082B9CC = 0; + stepR = + ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer; + stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) / + sPauseZRCursorColorTimer; + stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) / + sPauseZRCursorColorTimer; + stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) / + sPauseZRCursorColorTimer; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80823350.s") + if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) { + sPauseZRCursorRed -= stepR; + } else { + sPauseZRCursorRed += stepR; + } -void KaleidoScope_UpdateNamePanel(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateNamePanel.s") + if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) { + sPauseZRCursorGreen -= stepG; + } else { + sPauseZRCursorGreen += stepG; + } + + if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) { + sPauseZRCursorBlue -= stepB; + } else { + sPauseZRCursorBlue += stepB; + } + + if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) { + sPauseZRCursorAlpha -= stepA; + } else { + sPauseZRCursorAlpha += stepA; + } + + sPauseZRCursorColorTimer--; + if (sPauseZRCursorColorTimer == 0) { + sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]; + sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]; + sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]; + sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]; + sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits[0]; + sPauseZRCursorColorIndex ^= 1; + } + + y = pauseCtx->infoPanelOffsetY - 76; + for (j = 0, i = 0; i < 7; i++, j += 4) { + pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72; + + pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y; + + pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24; + + pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] = + pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag = + pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0; + + pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] = + pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0; + + pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] = + pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] = + pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] = + pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] = + pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] = + pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200; + + pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] = + pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha; + } + + pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72; + + pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72; + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX + 3; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 26; + } + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX + 3; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 26; + } + + pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] = + pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] = + pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); + + gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL); + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && + (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha); + } + + gSPDisplayList(POLY_OPA_DISP++, gZButtonIconDL); + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && + (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha); + } + + gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL); + + if (pauseCtx->cursorSpecialPos != 0) { + j = (pauseCtx->cursorSpecialPos * 4) - 32; + pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0]; + pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1]; + } + + y = pauseCtx->infoPanelOffsetY - 80; + pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y; + + pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16; + + pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0); + + if (pauseCtx->itemDescriptionOn || + ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && + (pauseCtx->nameDisplayTimer < 40) && + (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) || + ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && + (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) && + (pauseCtx->cursorSpecialPos == 0))) { + if (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) || + ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && + (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { + + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 128; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5); + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); + + if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + } + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0); + } + } else if ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK)) { + pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = y; + + pauseCtx->infoPanelVtx[22].v.ob[1] = pauseCtx->infoPanelVtx[23].v.ob[1] = + pauseCtx->infoPanelVtx[20].v.ob[1] - 16; + + pauseCtx->infoPanelVtx[22].v.tc[1] = pauseCtx->infoPanelVtx[23].v.tc[1] = 16 * (1 << 5); + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0); + + if (pauseCtx->state == PAUSE_STATE_SAVEPROMPT) { + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -33; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 0x10; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 0x30; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 48 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + //! @bug: Incorrect dimensions. Should be 64x16 + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToDecideENGTex, G_IM_FMT_IA, 48, 16, 4); + + } else if (pauseCtx->cursorSpecialPos != 0) { + if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 128; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 200, 0, 255); + + if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + POLY_OPA_DISP = + Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B998[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0); + } else { + POLY_OPA_DISP = + Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B9A8[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0); + } + } + } else if ((!pauseCtx->pageIndex || (pauseCtx->pageIndex == PAUSE_MASK)) && + (pauseCtx->namedItem != PAUSE_ITEM_NONE)) { + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -49; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 48; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 47; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 64; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 48 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 64 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gCButtonIconsDL); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToEquipENGTex, G_IM_FMT_IA, 64, 16, 4); + } else if ((pauseCtx->pageIndex == PAUSE_MAP) && sInDungeonScene) { + // No code in this case + } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && + (pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) { + if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + // The cursor is on the bombers notebook + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -58; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 0x14; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 0x60; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 96 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToViewNotebookENGTex, G_IM_FMT_IA, 96, 16, 4); + } + } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE)) { + // The cursor is on a learned song + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -55; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 20; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 96; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 96 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToPlayMelodyENGTex, G_IM_FMT_IA, 96, 16, 4); + } + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +u8 sUnpausedButtonStatus[5]; +f32 sCursorCirclesX[4]; +f32 sCursorCirclesY[4]; + +void KaleidoScope_UpdateNamePanel(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + u16 namedItem; + + if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) || + ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) { + + pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex]; + namedItem = pauseCtx->namedItem; + + osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1); + + if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { + Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, namedItem); + } else { + Kaleido_LoadItemNameStatic(pauseCtx->nameSegment, namedItem); + } + pauseCtx->nameDisplayTimer = 0; + } + } else if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_WHITE) { + if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) || + ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) || + (pauseCtx->pageIndex == PAUSE_ITEM) || (pauseCtx->pageIndex == PAUSE_MASK)) { + + pauseCtx->nameDisplayTimer++; + if (pauseCtx->nameDisplayTimer > 70) { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } +} void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; @@ -690,21 +1198,275 @@ void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -s16 D_8082B9D0[][4] = { - { 180, 210, 255, 220 }, - { 100, 100, 150, 220 }, -}; +void KaleidoScope_DrawOwlWarpInfoPanel(PlayState* play) { + static s16 sPauseZRCursorColorTargets[][4] = { + { 180, 210, 255, 220 }, + { 100, 100, 150, 220 }, + }; + static s16 sPauseZRCursorColorTimer = 20; + static s16 sPauseZRCursorColorIndex = 0; + static s16 sPauseZRCursorRed; + static s16 sPauseZRCursorGreen; + static s16 sPauseZRCursorBlue; + static s16 sPauseZRCursorAlpha; + PauseContext* pauseCtx = &play->pauseCtx; + s16 stepR; + s16 stepG; + s16 stepB; + s16 stepA; + s16 y; + s16 i; + s16 j; -s16 D_8082B9E0 = 20; -s16 D_8082B9E4 = 0; + OPEN_DISPS(play->state.gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824B90.s") + stepR = + ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer; + stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) / + sPauseZRCursorColorTimer; + stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) / + sPauseZRCursorColorTimer; + stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) / + sPauseZRCursorColorTimer; -void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateOwlWarpNamePanel.s") + if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) { + sPauseZRCursorRed -= stepR; + } else { + sPauseZRCursorRed += stepR; + } -void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateSwitchPage.s") + if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) { + sPauseZRCursorGreen -= stepG; + } else { + sPauseZRCursorGreen += stepG; + } + + if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) { + sPauseZRCursorBlue -= stepB; + } else { + sPauseZRCursorBlue += stepB; + } + + if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) { + sPauseZRCursorAlpha -= stepA; + } else { + sPauseZRCursorAlpha += stepA; + } + + sPauseZRCursorColorTimer--; + if (sPauseZRCursorColorTimer == 0) { + sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]; + sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]; + sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]; + sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]; + sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits[0]; + sPauseZRCursorColorIndex ^= 1; + } + + y = pauseCtx->infoPanelOffsetY - 76; + for (j = 0, i = 0; i < 7; i++, j += 4) { + pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72; + + pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y; + + pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24; + + pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] = + pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag = + pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0; + + pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] = + pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0; + + pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] = + pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] = + pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] = + pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] = + pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] = + pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200; + + pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] = + pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha; + } + + pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72; + + pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72; + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX + 3; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 26; + } + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX + 3; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 26; + } + + pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] = + pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] = + pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); + + gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL); + + if (pauseCtx->cursorSpecialPos != 0) { + j = (pauseCtx->cursorSpecialPos * 4) - 32; + pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0]; + pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1]; + } + + y = pauseCtx->infoPanelOffsetY - 80; + pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y; + + pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16; + + pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0); + + if ((pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && + (pauseCtx->nameDisplayTimer < 40)) { + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 128; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5); + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); + + if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + } + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + u16 texIndex; + + if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) || + ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) { + + pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex]; + texIndex = pauseCtx->namedItem; + + osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1); + + if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { + Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, texIndex); + } else { + Kaleido_LoadItemNameStatic(pauseCtx->nameSegment, texIndex); + } + pauseCtx->nameDisplayTimer = 0; + } + } else if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_WHITE) { + if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) || + (pauseCtx->pageIndex == PAUSE_ITEM)) { + + pauseCtx->nameDisplayTimer++; + if (pauseCtx->nameDisplayTimer > 70) { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } +} + +void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) { + PauseContext* pauseCtx = &play->pauseCtx; + + //! FAKE + if (1) { + pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * 2.0f; + pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * 2.0f; + + if (pauseCtx->switchPageTimer < 32) { + sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4); + sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4); + } else { + sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4); + sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4); + } + + pauseCtx->switchPageTimer += 8; + + if (pauseCtx->switchPageTimer == 64) { + pauseCtx->switchPageTimer = 0; + pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode]; + pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; + + KaleidoScope_HandlePageToggles(play, input); + } + } +} void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ) { Vec3f eye; @@ -773,7 +1535,7 @@ s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = { 44, // mapPageVtx[196] world map owl warp Ikana Canyon 54, // mapPageVtx[200] world map owl warp Stone Tower }; -s16 sVtxPageSaveQuadsX[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsX[VTX_PAGE_SAVE_QUADS] = { -76, // promptPageVtx[60] QUAD_PROMPT_MESSAGE -58, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -793,7 +1555,7 @@ s16 sVtxPageMapDungeonQuadsWidth[VTX_PAGE_MAP_DUNGEON_QUADS] = { 24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED }; s16 sVtxPageQuestQuadsWidth[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; -s16 sVtxPageSaveQuadsWidth[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsWidth[VTX_PAGE_SAVE_QUADS] = { 152, // promptPageVtx[60] QUAD_PROMPT_MESSAGE 48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -852,7 +1614,7 @@ s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = { -1, // mapPageVtx[196] world map owl warp Ikana Canyon 24, // mapPageVtx[200] world map owl warp Stone Tower }; -s16 sVtxPageSaveQuadsY[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsY[VTX_PAGE_SAVE_QUADS] = { 36, // promptPageVtx[60] QUAD_PROMPT_MESSAGE 10, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -872,7 +1634,7 @@ s16 sVtxPageMapDungeonQuadsHeight[] = { 24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED }; s16 sVtxPageQuestQuadsHeight[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; -s16 sVtxPageSaveQuadsHeight[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsHeight[VTX_PAGE_SAVE_QUADS] = { 16, // promptPageVtx[60] QUAD_PROMPT_MESSAGE 48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -886,7 +1648,7 @@ s16* sVtxPageQuadsX[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsX, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsX, // VTX_PAGE_QUEST sVtxPageMapWorldQuadsX, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsX, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsX, // VTX_PAGE_PROMPT }; s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = { @@ -895,7 +1657,7 @@ s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsWidth, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsWidth, // VTX_PAGE_QUEST gVtxPageMapWorldQuadsWidth, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsWidth, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsWidth, // VTX_PAGE_PROMPT }; s16* sVtxPageQuadsY[VTX_PAGE_MAX] = { @@ -904,7 +1666,7 @@ s16* sVtxPageQuadsY[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsY, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsY, // VTX_PAGE_QUEST sVtxPageMapWorldQuadsY, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsY, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsY, // VTX_PAGE_PROMPT }; s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = { @@ -913,7 +1675,7 @@ s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsHeight, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsHeight, // VTX_PAGE_QUEST gVtxPageMapWorldQuadsHeight, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsHeight, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsHeight, // VTX_PAGE_PROMPT }; s16 sVtxPageGameOverSaveQuadsY[VTX_PAGE_SAVE_QUADS] = { @@ -1547,60 +2309,435 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) { } } -f32 D_8082BCB4[] = { - -62.0f, -36.0f, -10.0f, 16.0f, 42.0f, 68.0f, +f32 sItemMaskCursorsX[] = { + -62.0f, // Column 1 + -36.0f, // Column 2 + -10.0f, // Column 3 + 16.0f, // Column 4 + 42.0f, // Column 5 + 68.0f, // Column 6 }; -f32 D_8082BCCC[] = { - 31.0f, - 5.0f, - -21.0f, - -47.0f, +f32 sItemMaskCursorsY[] = { + 31.0f, // Row 1 + 5.0f, // Row 2 + -21.0f, // Row 3 + -47.0f, // Row 4 }; -f32 D_8082BCDC[] = { - -49.0f, -35.0f, -3.0f, 4.0f, 12.0f, 8.0f, 7.0f, 40.0f, 47.0f, 49.0f, 55.0f, +f32 sWorldMapCursorsX[REGION_MAX] = { + -49.0f, // REGION_GREAT_BAY + -35.0f, // REGION_ZORA_HALL + -3.0f, // REGION_ROMANI_RANCH + 4.0f, // REGION_DEKU_PALACE + 12.0f, // REGION_WOODFALL + 8.0f, // REGION_CLOCK_TOWN + 7.0f, // REGION_SNOWHEAD + 40.0f, // REGION_IKANA_GRAVEYARD + 47.0f, // REGION_IKANA_CANYON + 49.0f, // REGION_GORON_VILLAGE + 55.0f, // REGION_STONE_TOWER }; -f32 D_8082BD08[] = { - -15.0f, -36.0f, -23.0f, -49.0f, -29.0f, -8.0f, 25.0f, 2.0f, -9.0f, 28.0f, 7.0f, +f32 sWorldMapCursorsY[REGION_MAX] = { + -15.0f, // REGION_GREAT_BAY + -36.0f, // REGION_ZORA_HALL + -23.0f, // REGION_ROMANI_RANCH + -49.0f, // REGION_DEKU_PALACE + -29.0f, // REGION_WOODFALL + -8.0f, // REGION_CLOCK_TOWN + 25.0f, // REGION_SNOWHEAD + 2.0f, // REGION_IKANA_GRAVEYARD + -9.0f, // REGION_IKANA_CANYON + 28.0f, // REGION_GORON_VILLAGE + 7.0f, // REGION_STONE_TOWER }; -f32 D_8082BD34[] = { - -50.0f, -38.0f, 6.0f, 11.0f, 8.0f, 0.0f, 12.0f, 31.0f, 48.0f, 56.0f, +f32 sOwlWarpWorldMapCursorsX[OWL_WARP_MAX - 1] = { + -50.0f, // OWL_WARP_GREAT_BAY_COAST + -38.0f, // OWL_WARP_ZORA_CAPE + 6.0f, // OWL_WARP_SNOWHEAD + 11.0f, // OWL_WARP_MOUNTAIN_VILLAGE + 8.0f, // OWL_WARP_CLOCK_TOWN + 0.0f, // OWL_WARP_MILK_ROAD + 12.0f, // OWL_WARP_WOODFALL + 31.0f, // OWL_WARP_SOUTHERN_SWAMP + 48.0f, // OWL_WARP_IKANA_CANYON + 56.0f, // OWL_WARP_STONE_TOWER }; -f32 D_8082BD5C[] = { - -14.0f, -39.0f, 23.0f, 11.0f, -8.0f, -15.0f, -31.0f, -30.0f, -10.0f, 11.0f, +f32 sOwlWarpWorldMapCursorsY[OWL_WARP_MAX - 1] = { + -14.0f, // OWL_WARP_GREAT_BAY_COAST + -39.0f, // OWL_WARP_ZORA_CAPE + 23.0f, // OWL_WARP_SNOWHEAD + 11.0f, // OWL_WARP_MOUNTAIN_VILLAGE + -8.0f, // OWL_WARP_CLOCK_TOWN + -15.0f, // OWL_WARP_MILK_ROAD + -31.0f, // OWL_WARP_WOODFALL + -30.0f, // OWL_WARP_SOUTHERN_SWAMP + -10.0f, // OWL_WARP_IKANA_CANYON + 11.0f, // OWL_WARP_STONE_TOWER }; -f32 D_8082BD84[] = { - -72.0f, -47.0f, -26.0f, -50.0f, -48.0f, -48.0f, -48.0f, -48.0f, -48.0f, +f32 sDungeonMapCursorsX[] = { + -72.0f, // DUNGEON_BOSS_KEY + -47.0f, // DUNGEON_COMPASS + -26.0f, // DUNGEON_MAP + -50.0f, // DUNGEON_STRAY_FAIRIES + -48.0f, // DUNGEON_FLOOR_INDEX_4 (top floor) + -48.0f, // DUNGEON_FLOOR_INDEX_3 + -48.0f, // DUNGEON_FLOOR_INDEX_2 + -48.0f, // DUNGEON_FLOOR_INDEX_1 + -48.0f, // DUNGEON_FLOOR_INDEX_0 (bottom floor) }; -f32 D_8082BDA8[] = { - -47.0f, -47.0f, -47.0f, -30.0f, 33.0f, 22.0f, 11.0f, -2.0f, -13.0f, +f32 sDungeonMapCursorsY[] = { + -47.0f, // DUNGEON_BOSS_KEY + -47.0f, // DUNGEON_COMPASS + -47.0f, // DUNGEON_MAP + -30.0f, // DUNGEON_STRAY_FAIRIES + 33.0f, // DUNGEON_FLOOR_INDEX_4 (top floor) + 22.0f, // DUNGEON_FLOOR_INDEX_3 + 11.0f, // DUNGEON_FLOOR_INDEX_2 + -2.0f, // DUNGEON_FLOOR_INDEX_1 + -13.0f, // DUNGEON_FLOOR_INDEX_0 (bottom floor) }; -f32 D_8082BDCC[] = { - 52.0f, 80.0f, 24.0f, 52.0f, 81.0f, 24.0f, -78.0f, -61.0f, -44.0f, -24.0f, -6.0f, -3.0f, - -78.0f, -61.0f, -44.0f, -24.0f, -6.0f, -3.0f, -68.0f, 22.0f, 83.0f, -67.0f, -21.0f, +f32 sQuestStatusCursorsX[] = { + 52.0f, // QUEST_REMAINS_ODOLWA + 80.0f, // QUEST_REMAINS_GOHT + 24.0f, // QUEST_REMAINS_GYORG + 52.0f, // QUEST_REMAINS_TWINMOLD + 81.0f, // QUEST_SHIELD + 24.0f, // QUEST_SWORD + -78.0f, // QUEST_SONG_SONATA + -61.0f, // QUEST_SONG_LULLABY + -44.0f, // QUEST_SONG_BOSSA_NOVA + -24.0f, // QUEST_SONG_ELEGY + -6.0f, // QUEST_SONG_OATH + -3.0f, // QUEST_SONG_SARIA + -78.0f, // QUEST_SONG_TIME + -61.0f, // QUEST_SONG_HEALING + -44.0f, // QUEST_SONG_EPONA + -24.0f, // QUEST_SONG_SOARING + -6.0f, // QUEST_SONG_STORMS + -3.0f, // QUEST_SONG_SUN + -68.0f, // QUEST_BOMBERS_NOTEBOOK + 22.0f, // QUEST_QUIVER + 83.0f, // QUEST_BOMB_BAG + -67.0f, // QUEST_SKULL_TOKEN + -21.0f, // QUEST_HEART_PIECE }; -f32 D_8082BE28[] = { - 33.0f, 18.0f, 18.0f, 0.0f, -23.0f, -23.0f, -29.0f, -29.0f, -29.0f, -29.0f, -29.0f, -29.0f, - -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, 27.0f, -53.0f, -53.0f, 14.0f, 26.0f, +f32 sQuestStatusCursorsY[] = { + 33.0f, // QUEST_REMAINS_ODOLWA + 18.0f, // QUEST_REMAINS_GOHT + 18.0f, // QUEST_REMAINS_GYORG + 0.0f, // QUEST_REMAINS_TWINMOLD + -23.0f, // QUEST_SHIELD + -23.0f, // QUEST_SWORD + -29.0f, // QUEST_SONG_SONATA + -29.0f, // QUEST_SONG_LULLABY + -29.0f, // QUEST_SONG_BOSSA_NOVA + -29.0f, // QUEST_SONG_ELEGY + -29.0f, // QUEST_SONG_OATH + -29.0f, // QUEST_SONG_SARIA + -11.0f, // QUEST_SONG_TIME + -11.0f, // QUEST_SONG_HEALING + -11.0f, // QUEST_SONG_EPONA + -11.0f, // QUEST_SONG_SOARING + -11.0f, // QUEST_SONG_STORMS + -11.0f, // QUEST_SONG_SUN + 27.0f, // QUEST_BOMBERS_NOTEBOOK + -53.0f, // QUEST_QUIVER + -53.0f, // QUEST_BOMB_BAG + 14.0f, // QUEST_SKULL_TOKEN + 26.0f, // QUEST_HEART_PIECE }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808274DC.s") +void KaleidoScope_UpdateCursorSize(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + s16 index; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827A8C.s") + pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->cursorVtx[2].v.ob[0] = -8; + pauseCtx->cursorVtx[1].v.ob[0] = pauseCtx->cursorVtx[3].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + 16; -s16 D_8082BE84 = 0; + pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->cursorVtx[1].v.ob[1] = 8; + pauseCtx->cursorVtx[2].v.ob[1] = pauseCtx->cursorVtx[3].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - 16; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827E08.s") + if (pauseCtx->cursorSpecialPos == 0) { + switch (pauseCtx->pageIndex) { + case PAUSE_ITEM: + pauseCtx->cursorX = sItemMaskCursorsX[pauseCtx->cursorXIndex[PAUSE_ITEM]]; + pauseCtx->cursorY = sItemMaskCursorsY[pauseCtx->cursorYIndex[PAUSE_ITEM]]; + pauseCtx->cursorWidth = 15.0f; + pauseCtx->cursorHeight = 15.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_Draw.s") + case PAUSE_MAP: + if (!sInDungeonScene) { + if (IS_PAUSE_STATE_OWLWARP) { + pauseCtx->cursorX = sOwlWarpWorldMapCursorsX[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + pauseCtx->cursorY = sOwlWarpWorldMapCursorsY[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + } else { + pauseCtx->cursorX = sWorldMapCursorsX[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + pauseCtx->cursorY = sWorldMapCursorsY[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + } + if (!IS_PAUSE_STATE_OWLWARP) { + pauseCtx->cursorHeight = 10.0f; + pauseCtx->cursorWidth = 10.0f; + } else { + pauseCtx->cursorHeight = 15.0f; + pauseCtx->cursorWidth = 15.0f; + } + } else { + pauseCtx->cursorX = sDungeonMapCursorsX[pauseCtx->cursorPoint[PAUSE_MAP]]; + pauseCtx->cursorY = sDungeonMapCursorsY[pauseCtx->cursorPoint[PAUSE_MAP]]; + if (pauseCtx->cursorSlot[pauseCtx->pageIndex] >= DUNGEON_FLOOR_INDEX_4) { + // Floors + pauseCtx->cursorWidth = 18.0f; + pauseCtx->cursorHeight = 12.0f; + } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == DUNGEON_STRAY_FAIRIES) { + // Stray Fairies + pauseCtx->cursorHeight = 12.0f; + pauseCtx->cursorWidth = 40.0f; + } else { + // Map, Compass, Boss Key + pauseCtx->cursorHeight = 15.0f; + pauseCtx->cursorWidth = 15.0f; + } + } + break; + + case PAUSE_QUEST: + if (!R_PAUSE_DBG_QUEST_CURSOR_ON) { + pauseCtx->cursorX = sQuestStatusCursorsX[pauseCtx->cursorPoint[PAUSE_QUEST]]; + pauseCtx->cursorY = sQuestStatusCursorsY[pauseCtx->cursorPoint[PAUSE_QUEST]]; + } else { + pauseCtx->cursorX = R_PAUSE_DBG_QUEST_CURSOR_X; + pauseCtx->cursorY = R_PAUSE_DBG_QUEST_CURSOR_Y; + } + pauseCtx->cursorHeight = 17.0f; + pauseCtx->cursorWidth = 17.0f; + if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == QUEST_17) { + pauseCtx->cursorHeight = 25.0f; + pauseCtx->cursorWidth = 25.0f; + } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] <= QUEST_SWORD) { + pauseCtx->cursorHeight = 18.0f; + pauseCtx->cursorWidth = 18.0f; + } else if ((pauseCtx->cursorSlot[pauseCtx->pageIndex] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[pauseCtx->pageIndex] <= QUEST_SONG_SUN)) { + pauseCtx->cursorHeight = 12.0f; + pauseCtx->cursorWidth = 12.0f; + } + break; + + case PAUSE_MASK: + pauseCtx->cursorX = sItemMaskCursorsX[pauseCtx->cursorXIndex[PAUSE_MASK]]; + pauseCtx->cursorY = sItemMaskCursorsY[pauseCtx->cursorYIndex[PAUSE_MASK]]; + pauseCtx->cursorWidth = 15.0f; + pauseCtx->cursorHeight = 15.0f; + break; + + default: + break; + } + + pauseCtx->cursorSpinPhase += 0x300; + } else { + if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + pauseCtx->cursorX = -93.0f; + } else { // PAUSE_CURSOR_PAGE_RIGHT + pauseCtx->cursorX = 101.0f; + } + pauseCtx->cursorSpinPhase += 0x300; + pauseCtx->cursorHeight = 16.0f; + pauseCtx->cursorWidth = 16.0f; + pauseCtx->cursorY = -4.0f; + } + + if (pauseCtx->cursorWidth < pauseCtx->cursorShrinkRate) { + pauseCtx->cursorWidth = 0; + } else { + pauseCtx->cursorWidth -= pauseCtx->cursorShrinkRate; + } + + if (pauseCtx->cursorHeight < pauseCtx->cursorShrinkRate) { + pauseCtx->cursorHeight = 0.0f; + } else { + pauseCtx->cursorHeight -= pauseCtx->cursorShrinkRate; + } + + if (pauseCtx->cursorShrinkRate != 0.0f) { + pauseCtx->cursorShrinkRate -= 1.0f; + } + + sCursorCirclesX[0] = Math_SinS(pauseCtx->cursorSpinPhase) * pauseCtx->cursorWidth; + sCursorCirclesX[1] = Math_SinS(pauseCtx->cursorSpinPhase + 0x4000) * pauseCtx->cursorWidth; + sCursorCirclesX[2] = Math_SinS(pauseCtx->cursorSpinPhase + 0x8000) * pauseCtx->cursorWidth; + sCursorCirclesX[3] = Math_SinS(pauseCtx->cursorSpinPhase + 0xC000) * pauseCtx->cursorWidth; + sCursorCirclesY[0] = Math_CosS(pauseCtx->cursorSpinPhase) * pauseCtx->cursorHeight; + sCursorCirclesY[1] = Math_CosS(pauseCtx->cursorSpinPhase + 0x4000) * pauseCtx->cursorHeight; + sCursorCirclesY[2] = Math_CosS(pauseCtx->cursorSpinPhase + 0x8000) * pauseCtx->cursorHeight; + sCursorCirclesY[3] = Math_CosS(pauseCtx->cursorSpinPhase + 0xC000) * pauseCtx->cursorHeight; +} + +void KaleidoScope_DrawCursor(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + s16 i; + + OPEN_DISPS(play->state.gfxCtx); + + if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) || + ((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)))) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimR, sCursorPrimG, sCursorPrimB, 255); + gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvR, sCursorEnvG, sCursorEnvB, 255); + + Matrix_Translate(pauseCtx->cursorX, pauseCtx->cursorY, -50.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + for (i = 0; i < 4; i++) { + Matrix_Push(); + Matrix_Translate(sCursorCirclesX[i], sCursorCirclesY[i], -50.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPPipeSync(POLY_OPA_DISP++); + gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08064340, 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); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->cursorVtx[0], 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +void KaleidoScope_DrawGameOver(PlayState* play) { + static s16 sGameOverUlt = 0; + GraphicsContext* gfxCtx = play->state.gfxCtx; + + OPEN_DISPS(gfxCtx); + + Gfx_SetupDL39_Opa(gfxCtx); + + gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2); + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, + COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 80, sGameOverPrimR, sGameOverPrimG, sGameOverPrimB, sGameOverPrimAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, sGameOverEnvR, sGameOverEnvG, sGameOverEnvB, 255); + + sGameOverUlt -= 2; + + gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP1Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 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); + + gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverMaskTex, 256, 1, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, 5, G_TX_NOLOD, G_TX_NOLOD); + + gDPSetTileSize(POLY_OPA_DISP++, 1, 0, sGameOverUlt & 0x7F, 252, (sGameOverUlt & 0x7F) + 124); + + gSPTextureRectangle(POLY_OPA_DISP++, 0x100, sGameOverRectPosY << 2, 0x200, (sGameOverRectPosY + 32) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP2Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 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(POLY_OPA_DISP++, 0x200, sGameOverRectPosY << 2, 0x300, (sGameOverRectPosY + 32) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP3Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 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(POLY_OPA_DISP++, 0x300, sGameOverRectPosY << 2, 0x400, (sGameOverRectPosY + 32) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + CLOSE_DISPS(gfxCtx); +} + +void KaleidoScope_Draw(PlayState* play) { + s32 pad; + PauseContext* pauseCtx = &play->pauseCtx; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + OPEN_DISPS(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment); + gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment); + gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment); + gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); + gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment); + gSPSegment(POLY_OPA_DISP++, 0x0B, pauseCtx->iconItemVtxSegment); + + if (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) { + KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); + Gfx_SetupDL42_Opa(play->state.gfxCtx); + + if (!IS_PAUSE_STATE_OWLWARP) { + // Draw Default or Game Over Menus + KaleidoScope_SetVertices(play, play->state.gfxCtx); + KaleidoScope_DrawPages(play, play->state.gfxCtx); + + Gfx_SetupDL42_Opa(play->state.gfxCtx); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f); + + if (!IS_PAUSE_STATE_GAMEOVER) { + KaleidoScope_DrawInfoPanel(play); + } + + KaleidoScope_UpdateCursorSize(play); + + if (pauseCtx->state == PAUSE_STATE_MAIN) { + KaleidoScope_DrawCursor(play); + } + + if ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_3) && (pauseCtx->state <= PAUSE_STATE_GAMEOVER_10) && + (play->gameOverCtx.state != GAMEOVER_INACTIVE)) { + KaleidoScope_DrawGameOver(play); + } + } else { + // Draw Owl Warp Menu + KaleidoScope_SetVertices(play, play->state.gfxCtx); + KaleidoScope_DrawPages(play, play->state.gfxCtx); + KaleidoScope_DrawOwlWarpMapPage(play); + + Gfx_SetupDL42_Opa(play->state.gfxCtx); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f); + KaleidoScope_DrawOwlWarpInfoPanel(play); + KaleidoScope_UpdateCursorSize(play); + + if (pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) { + KaleidoScope_DrawCursor(play); + } + } + } + + if ((pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY_INIT) || (pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY)) { + KaleidoScope_DrawInventoryEditor(play); + } + + CLOSE_DISPS(play->state.gfxCtx); +} void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) { u32 rgb; @@ -1641,10 +2778,10 @@ void KaleidoScope_UpdateOpening(PlayState* play) { Interface_UpdateButtonsAlt(play, 1); if (pauseCtx->cursorSpecialPos == 0) { - gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex][0]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = D_801C6A98[pauseCtx->pageIndex][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_B] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][0]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; } else { gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; @@ -1723,7 +2860,7 @@ void KaleidoScope_Update(PlayState* play) { size0 = SEGMENT_ROM_SIZE(icon_item_static_old); CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); - gSegments[0x08] = PHYSICAL_TO_VIRTUAL(pauseCtx->iconItemSegment); + gSegments[0x08] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); for (itemId = 0; itemId <= ITEM_BOW_ARROW_FIRE; itemId++) { if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][(s32)itemId]) { @@ -1760,7 +2897,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); func_8011552C(play, DO_ACTION_INFO); if (((void)0, gSaveContext.worldMapArea) < 0x16) { - func_8082192C(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea)); + Kaleido_LoadMapNameStaticLarge(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea)); } pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00); @@ -1903,7 +3040,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_SAVEPROMPT: switch (pauseCtx->savePromptState) { - case PAUSE_SAVEPROMPT_STATE_0: + case PAUSE_SAVEPROMPT_STATE_APPEARING: pauseCtx->roll -= 78.5f; sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4); sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4); @@ -1917,7 +3054,7 @@ void KaleidoScope_Update(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_CUP)) { if (pauseCtx->promptChoice != PAUSE_PROMPT_YES) { func_8011552C(play, DO_ACTION_NONE); - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; } else { play_sound(NA_SE_SY_PIECE_OF_HEART); Play_SaveCycleSceneFlags(&play->state); @@ -1941,7 +3078,7 @@ void KaleidoScope_Update(PlayState* play) { func_801A3AEC(0); } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { func_8011552C(play, DO_ACTION_NONE); - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; D_8082B90C = pauseCtx->roll; } break; @@ -1987,26 +3124,31 @@ void KaleidoScope_Update(PlayState* play) { } break; - case PAUSE_SAVEPROMPT_STATE_2: + case PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU: pauseCtx->roll += 78.5f; sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4); sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4); + if (pauseCtx->roll >= -314.0f) { pauseCtx->state = PAUSE_STATE_MAIN; - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING; pauseCtx->roll = -314.0f; pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll = 0.0f; func_8011552C(play, DO_ACTION_INFO); - gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex + 1][0]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex + 1][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex + 1][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = D_801C6A98[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_B] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][0]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) || (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT)) { KaleidoScope_MoveCursorToSpecialPos(play, pauseCtx->cursorSpecialPos); } else { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); } } break; @@ -2304,7 +3446,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); func_8011552C(play, DO_ACTION_WARP); worldMapCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; - func_80821900(pauseCtx->nameSegment, worldMapCursorPoint); + Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, worldMapCursorPoint); pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00); DmaMgr_SendRequest0(pauseCtx->iconItemVtxSegment, SEGMENT_ROM_START(icon_item_vtx_static), diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0422c71e2..a28ff6132 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4218,28 +4218,28 @@ 0x808204AC:("KaleidoScope_UpdateMaskCursor",), 0x80820FA4:("KaleidoScope_UpdateMaskEquip",), 0x80821730:("KaleidoScope_UpdatePrompt",), - 0x80821900:("func_80821900",), - 0x8082192C:("func_8082192C",), - 0x80821958:("func_80821958",), + 0x80821900:("Kaleido_LoadMapNameStatic",), + 0x8082192C:("Kaleido_LoadMapNameStaticLarge",), + 0x80821958:("Kaleido_LoadItemNameStatic",), 0x80821984:("KaleidoScope_MoveCursorToSpecialPos",), - 0x80821A04:("func_80821A04",), + 0x80821A04:("KaleidoScope_MoveCursorFromSpecialPos",), 0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",), - 0x80821CC4:("func_80821CC4",), + 0x80821CC4:("KaleidoScope_SwitchPage",), 0x80821D84:("KaleidoScope_HandlePageToggles",), 0x80821F30:("KaleidoScope_DrawPageSections",), 0x808221DC:("KaleidoScope_DrawPages",), - 0x80823350:("func_80823350",), + 0x80823350:("KaleidoScope_DrawInfoPanel",), 0x80824738:("KaleidoScope_UpdateNamePanel",), 0x808248D0:("KaleidoScope_DrawOwlWarpMapPage",), - 0x80824B90:("func_80824B90",), + 0x80824B90:("KaleidoScope_DrawOwlWarpInfoPanel",), 0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",), 0x8082585C:("KaleidoScope_UpdateSwitchPage",), 0x808259D4:("KaleidoScope_SetView",), 0x80825A50:("KaleidoScope_SetPageVertices",), 0x80825E28:("KaleidoScope_SetVertices",), - 0x808274DC:("func_808274DC",), - 0x80827A8C:("func_80827A8C",), - 0x80827E08:("func_80827E08",), + 0x808274DC:("KaleidoScope_UpdateCursorSize",), + 0x80827A8C:("KaleidoScope_DrawCursor",), + 0x80827E08:("KaleidoScope_DrawGameOver",), 0x808283D8:("KaleidoScope_Draw",), 0x808286D8:("KaleidoScope_GrayOutTextureRGBA32",), 0x80828788:("KaleidoScope_UpdateOpening",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f3f90ba25..f58d54a87 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1967,7 +1967,7 @@ 0x801C6A8C:("D_801C6A8C","UNK_TYPE2","",0x2), 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2), 0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2), - 0x801C6A98:("D_801C6A98","UNK_TYPE1","",0x1), + 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1), 0x801C6AB8:("D_801C6AB8","UNK_TYPE1","",0x1), 0x801C6B28:("D_801C6B28","UNK_TYPE1","",0x1), 0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1), @@ -4638,7 +4638,7 @@ 0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10), 0x80816014:("sHoursLeftTextures","TexturePtr","[3]",0xC), 0x8082AED0:("sQuestRemainsColorTimerInit","UNK_TYPE1","",0x1), - 0x8082AED8:("sQuestHpColorTimerInit","UNK_TYPE1","",0x1), + 0x8082AED8:("sQuestHpColorTimerInits","UNK_TYPE1","",0x1), 0x8082AEE0:("sQuestSongPlayedOcarinaButtonsNum","UNK_TYPE2","",0x2), 0x8082AEE4:("sQuestSongPlayedOcarinaButtons","UNK_TYPE1","",0x1), 0x8082AEF0:("sQuestSongPlayedOcarinaButtonsAlpha","UNK_TYPE2","",0x2), @@ -4744,7 +4744,7 @@ 0x8082B918:("sPauseCursorLeftX","UNK_TYPE2","",0x2), 0x8082B91C:("sPauseCursorRightX","UNK_TYPE2","",0x2), 0x8082B920:("D_8082B920","UNK_TYPE2","",0x2), - 0x8082B924:("D_8082B924","UNK_TYPE2","",0x2), + 0x8082B924:("sPauseZRCursorColorTimerInits","UNK_TYPE2","",0x2), 0x8082B944:("sGameOverRectPosY","UNK_TYPE2","",0x2), 0x8082B948:("sCursorPrimColorTarget","UNK_TYPE2","",0x2), 0x8082B96C:("sCursorEnvColorTarget","UNK_TYPE2","",0x2), @@ -4752,12 +4752,12 @@ 0x8082B994:("sCursorColorTargetIndex","UNK_TYPE2","",0x2), 0x8082B998:("D_8082B998","UNK_TYPE1","",0x1), 0x8082B9A8:("D_8082B9A8","UNK_TYPE1","",0x1), - 0x8082B9B8:("D_8082B9B8","UNK_TYPE1","",0x1), - 0x8082B9C8:("D_8082B9C8","UNK_TYPE2","",0x2), - 0x8082B9CC:("D_8082B9CC","UNK_TYPE2","",0x2), - 0x8082B9D0:("D_8082B9D0","UNK_TYPE1","",0x1), - 0x8082B9E0:("D_8082B9E0","UNK_TYPE2","",0x2), - 0x8082B9E4:("D_8082B9E4","UNK_TYPE2","",0x2), + 0x8082B9B8:("sPauseZRCursorColorTargets","UNK_TYPE1","",0x1), + 0x8082B9C8:("sPauseZRCursorColorTimer","UNK_TYPE2","",0x2), + 0x8082B9CC:("sPauseZRCursorColorIndex","UNK_TYPE2","",0x2), + 0x8082B9D0:("sPauseZRCursorColorTargets","UNK_TYPE1","",0x1), + 0x8082B9E0:("sPauseZRCursorColorTimer","UNK_TYPE2","",0x2), + 0x8082B9E4:("sPauseZRCursorColorIndex","UNK_TYPE2","",0x2), 0x8082B9E8:("sVtxPageMaskQuadsX","UNK_TYPE1","",0x1), 0x8082B9EC:("sVtxPageItemQuadsX","UNK_TYPE1","",0x1), 0x8082B9F0:("sVtxPageMapDungeonQuadsX","UNK_TYPE1","",0x1), @@ -4789,17 +4789,17 @@ 0x8082BBC4:("sQuestVtxRectTop","UNK_TYPE2","",0x2), 0x8082BC14:("sQuestVtxWidths","UNK_TYPE2","",0x2), 0x8082BC64:("sQuestVtxHeights","UNK_TYPE2","",0x2), - 0x8082BCB4:("D_8082BCB4","UNK_TYPE1","",0x1), - 0x8082BCCC:("D_8082BCCC","UNK_TYPE1","",0x1), - 0x8082BCDC:("D_8082BCDC","UNK_TYPE1","",0x1), - 0x8082BD08:("D_8082BD08","UNK_TYPE1","",0x1), - 0x8082BD34:("D_8082BD34","UNK_TYPE1","",0x1), - 0x8082BD5C:("D_8082BD5C","UNK_TYPE1","",0x1), - 0x8082BD84:("D_8082BD84","UNK_TYPE1","",0x1), - 0x8082BDA8:("D_8082BDA8","UNK_TYPE1","",0x1), - 0x8082BDCC:("D_8082BDCC","UNK_TYPE1","",0x1), - 0x8082BE28:("D_8082BE28","UNK_TYPE1","",0x1), - 0x8082BE84:("D_8082BE84","UNK_TYPE2","",0x2), + 0x8082BCB4:("sItemMaskCursorsX","UNK_TYPE1","",0x1), + 0x8082BCCC:("sItemMaskCursorsY","UNK_TYPE1","",0x1), + 0x8082BCDC:("sWorldMapCursorsX","UNK_TYPE1","",0x1), + 0x8082BD08:("sWorldMapCursorsY","UNK_TYPE1","",0x1), + 0x8082BD34:("sOwlWarpWorldMapCursorsX","UNK_TYPE1","",0x1), + 0x8082BD5C:("sOwlWarpWorldMapCursorsY","UNK_TYPE1","",0x1), + 0x8082BD84:("sDungeonMapCursorsX","UNK_TYPE1","",0x1), + 0x8082BDA8:("sDungeonMapCursorsY","UNK_TYPE1","",0x1), + 0x8082BDCC:("sQuestStatusCursorsX","UNK_TYPE1","",0x1), + 0x8082BE28:("sQuestStatusCursorsY","UNK_TYPE1","",0x1), + 0x8082BE84:("sGameOverUlt","UNK_TYPE2","",0x2), 0x8082BE88:("sCursorPointsToOcarinaModes","UNK_TYPE1","",0x1), 0x8082BE9C:("sUnpausedHudVisibility","UNK_TYPE2","",0x2), 0x8082BEA0:("sNextMainState","UNK_TYPE2","",0x2), @@ -4921,23 +4921,23 @@ 0x8082C0E4:("jtbl_8082C0E4","UNK_PTR","",0x4), 0x8082C148:("jtbl_8082C148","UNK_PTR","",0x4), 0x8082C18C:("jtbl_8082C18C","UNK_PTR","",0x4), - 0x8082DA50:("D_8082DA50","UNK_TYPE1","",0x1), - 0x8082DA52:("D_8082DA52","UNK_TYPE1","",0x1), - 0x8082DA54:("D_8082DA54","UNK_TYPE1","",0x1), - 0x8082DA56:("D_8082DA56","UNK_TYPE1","",0x1), + 0x8082DA50:("sPauseZRCursorRed","UNK_TYPE1","",0x1), + 0x8082DA52:("sPauseZRCursorGreen","UNK_TYPE1","",0x1), + 0x8082DA54:("sPauseZRCursorBlue","UNK_TYPE1","",0x1), + 0x8082DA56:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1), 0x8082DA58:("sUnpausedButtonStatus","UNK_TYPE1","",0x1), - 0x8082DA60:("D_8082DA60","f32","",0x4), + 0x8082DA60:("sCursorCirclesX","f32","",0x4), 0x8082DA64:("D_8082DA64","f32","",0x4), 0x8082DA68:("D_8082DA68","f32","",0x4), 0x8082DA6C:("D_8082DA6C","f32","",0x4), - 0x8082DA70:("D_8082DA70","f32","",0x4), + 0x8082DA70:("sCursorCirclesY","f32","",0x4), 0x8082DA74:("D_8082DA74","f32","",0x4), 0x8082DA78:("D_8082DA78","f32","",0x4), 0x8082DA7C:("D_8082DA7C","f32","",0x4), - 0x8082DA80:("D_8082DA80","UNK_TYPE1","",0x1), - 0x8082DA82:("D_8082DA82","UNK_TYPE1","",0x1), - 0x8082DA84:("D_8082DA84","UNK_TYPE1","",0x1), - 0x8082DA86:("D_8082DA86","UNK_TYPE1","",0x1), + 0x8082DA80:("sPauseZRCursorRed","UNK_TYPE1","",0x1), + 0x8082DA82:("sPauseZRCursorGreen","UNK_TYPE1","",0x1), + 0x8082DA84:("sPauseZRCursorBlue","UNK_TYPE1","",0x1), + 0x8082DA86:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1), 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1), 0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1), 0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1), diff --git a/undefined_syms.txt b/undefined_syms.txt index 7ef51ef24..aad4bba7b 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1159,20 +1159,6 @@ D_0B000188 = 0x0B000188; // segment 0x0C D_0C000000 = 0x0C000000; -D_0C000800 = 0x0C000800; -D_0C001000 = 0x0C001000; -D_0C001800 = 0x0C001800; -D_0C001980 = 0x0C001980; -D_0C006C00 = 0x0C006C00; -D_0C006E00 = 0x0C006E00; -D_0C014668 = 0x0C014668; - -// segment 0x0D - -D_0D002000 = 0x0D002000; -D_0D002200 = 0x0D002200; -D_0D002400 = 0x0D002400; -D_0D003700 = 0x0D003700; // segment 0x0E From 65d72a54cf712292f0bb97af8eeaa10c2eeb2e8c Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 29 May 2023 17:40:10 -0400 Subject: [PATCH 30/51] z_syscfb.c, z_vimode.c, code_80140CE0 split and OK (#1159) * z_vimode * Fixups * WIP * matching * sys_cfb OK * some documentation * vimode docs, name all syscfb vars * quick fixes * suggested changes, more things I missed * merge suggestions * code_80140CE0 -> z_viscvg * format * update symbols * more suggestions * fix include order * sNotebookViMode comment, bss fix --------- Co-authored-by: Kelebek1 Co-authored-by: louist103 --- include/functions.h | 42 +- include/macros.h | 6 +- include/regs.h | 7 + include/ultra64/viint.h | 37 ++ include/variables.h | 44 +- include/z64.h | 27 +- spec | 4 +- src/code/code_80140CE0.c | 7 - src/code/game.c | 12 +- src/code/graph.c | 29 +- src/code/sys_cfb.c | 125 +++++- src/code/z_actor.c | 2 +- src/code/z_demo.c | 1 - src/code/z_fbdemo_circle.c | 4 +- src/code/z_kankyo.c | 2 +- src/code/z_lights.c | 11 +- src/code/z_parameter.c | 10 +- src/code/z_play.c | 30 +- src/code/z_rcp.c | 14 +- src/code/z_view.c | 4 +- src/code/z_vimode.c | 376 +++++++++++++++++- src/code/z_viscvg.c | 90 +++++ src/code/z_viszbuf.c | 8 +- src/libultra/io/osViModeMpalLan1.c | 39 +- src/libultra/io/osViModeNtscHpf1.c | 39 +- src/libultra/io/osViModeNtscLan1.c | 39 +- src/libultra/io/osViModePalLan1.c | 39 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 1 + .../actors/ovl_player_actor/z_player.c | 1 + .../fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c | 6 +- tools/disasm/functions.txt | 40 +- tools/disasm/variables.txt | 44 +- tools/sizes/code_functions.csv | 24 +- undefined_syms.txt | 4 +- 34 files changed, 896 insertions(+), 272 deletions(-) create mode 100644 include/ultra64/viint.h delete mode 100644 src/code/code_80140CE0.c create mode 100644 src/code/z_viscvg.c diff --git a/include/functions.h b/include/functions.h index 0f99fb24b..8330903e1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1090,7 +1090,7 @@ 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); -// void func_800F50D4(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); @@ -1724,22 +1724,23 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a); void SkinMatrix_MulYRotation(MtxF* mf, s16 a); void SkinMatrix_SetZRotation(MtxF* mf, s16 a); -void func_80140260(OSViMode* vimode); -// void func_8014026C(OSViMode* param_1, UNK_TYPE1 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6, s32 param_7, s32 param_8, UNK_TYPE4 param_9, s32 param_10, s16 param_11, u32 param_12, UNK_TYPE4 param_13); -// void func_80140730(void); -// void func_80140810(void); -void func_80140898(void* arg0); -void func_80140900(void* arg0); -// void func_8014090C(void); -// void func_80140970(void); -void func_80140CE0(void* arg0); -void func_80140D04(void* arg0); -void func_80140D10(void* arg0, Gfx** gfx, u32 arg2); +void ViMode_LogPrint(OSViMode* vimode); +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust); +void ViMode_Save(ViMode* viMode); +void ViMode_Load(ViMode* viMode); +void ViMode_Init(ViMode* viMode); +void ViMode_Destroy(ViMode* viMode); +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures); +void ViMode_Update(ViMode* viMode, Input* input); +void VisCvg_Init(struct_801F8010* this); +void VisCvg_Destroy(struct_801F8010* this); +void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp); void func_80140E80(Struct_80140E80* arg0); void func_80140EA0(Struct_80140E80* arg0); // void func_80140EAC(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_80141008(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, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); -void func_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, s32 width, s32 height, s32 arg5); +void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height, s32 arg5); // void func_801411B4(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, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); // void func_80141200(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_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); @@ -2048,15 +2049,14 @@ void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ); void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ); -void func_80178750(void); -void func_80178818(void); -void func_80178978(void); -// void func_801789D4(void); -void* SysCfb_GetFbPtr(s32 index); +void SysCfb_SetLoResMode(void); +void SysCfb_SetHiResMode(void); +void SysCfb_Init(void); +void* SysCfb_GetFramebuffer(s32 index); void* SysCfb_GetZBuffer(void); -// UNK_TYPE4 func_80178A24(void); -// void func_80178A34(void); -s32 func_80178A94(s32 param_1, s32 param_2); +void* SysCfb_GetWorkBuffer(void); +u16 SysCfb_GetZBufferPixel(s32 x, s32 y); +s32 SysCfb_GetZBufferInt(s32 x, s32 y); void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size); void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value); diff --git a/include/macros.h b/include/macros.h index f2bcb07dd..25ccb3d37 100644 --- a/include/macros.h +++ b/include/macros.h @@ -7,9 +7,11 @@ #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +#define SCREEN_WIDTH_HIRES 640 +#define SCREEN_HEIGHT_HIRES 480 -#define SCREEN_WIDTH_HIGH_RES 576 -#define SCREEN_HEIGHT_HIGH_RES 454 +#define HIRES_BUFFER_WIDTH 576 +#define HIRES_BUFFER_HEIGHT 454 #define PROJECTED_TO_SCREEN_X(projectedPos, invW) ((projectedPos).x * (invW) * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2)) #define PROJECTED_TO_SCREEN_Y(projectedPos, invW) ((projectedPos).y * (invW) * (-SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2)) diff --git a/include/regs.h b/include/regs.h index 112a00239..bc8bacb1b 100644 --- a/include/regs.h +++ b/include/regs.h @@ -65,6 +65,13 @@ extern RegEditor* gRegEditor; #define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT #define R_ROOM_IMAGE_NODRAW_FLAGS SREG(25) #define R_UPDATE_RATE SREG(30) +#define R_VI_MODE_EDIT_STATE SREG(48) +#define R_VI_MODE_EDIT_WIDTH SREG(49) +#define R_VI_MODE_EDIT_HEIGHT SREG(50) +#define R_VI_MODE_EDIT_ULY_ADJ SREG(51) +#define R_VI_MODE_EDIT_LRY_ADJ SREG(52) +#define R_VI_MODE_EDIT_ULX_ADJ SREG(53) +#define R_VI_MODE_EDIT_LRX_ADJ SREG(54) #define R_FB_FILTER_TYPE SREG(80) #define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) #define R_FB_FILTER_A SREG(84) diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h new file mode 100644 index 000000000..4fea2259a --- /dev/null +++ b/include/ultra64/viint.h @@ -0,0 +1,37 @@ +#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) \ + (hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20)) +#define WIDTH(v) v +#define VSYNC(v) v +#define HSYNC(duration, leap) (duration | (leap << 16)) +#define LEAP(upper, lower) ((upper << 16) | lower) +#define START(start, end) ((start << 16) | end) + +#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/variables.h b/include/variables.h index e7dc43da0..dfb0ab791 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2393,7 +2393,7 @@ extern UNK_TYPE1 D_801F7FF0; extern struct_801F8010 D_801F8010; extern VisZbuf sVisZbuf; extern VisMono sMonoColors; -extern UNK_TYPE1 D_801F8048; +extern ViMode D_801F8048; extern FaultAddrConvClient sGraphFaultAddrConvClient; extern FaultClient sGraphFaultClient; extern GfxMasterList* gGfxMasterDL; @@ -2422,30 +2422,30 @@ extern volatile OSTime sRSPOtherTotalTime; // extern UNK_TYPE1 D_801FBB18; extern volatile OSTime gRDPTotalTime; // extern UNK_TYPE1 D_801FBB28; -extern OSViMode D_801FBB30; -extern u32* gFramebuffers[2]; -extern OSViMode* D_801FBB88; +extern OSViMode sNotebookViMode; +extern void* gFramebuffers[2]; +extern OSViMode* gActiveViMode; extern u16* gZBufferPtr; -extern void* D_801FBB90; +extern void* gWorkBuffer; extern u64* gGfxSPTaskOutputBufferPtr; -extern size_t gGfxSPTaskOutputBufferSize; -// extern UNK_TYPE1 D_801FBB9C; -// extern UNK_TYPE1 D_801FBBA0; -extern u16 (*gZBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u16 (*gWorkBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBuffer)[0x3000]; extern void* gGfxSPTaskOutputBufferEnd; -// extern UNK_TYPE1 D_801FBBB4; -// extern UNK_TYPE1 D_801FBBB8; -// extern UNK_TYPE1 D_801FBBBC; -// extern UNK_TYPE1 D_801FBBC0; -extern u64 (*gGfxSPTaskOutputBuffer2)[0x3000]; -extern void* gGfxSPTaskOutputBufferEnd2; -extern UNK_TYPE2 D_801FBBCC; -extern UNK_TYPE2 D_801FBBCE; -// extern UNK_TYPE1 D_801FBBD0; -// extern UNK_TYPE1 D_801FBBD2; -extern u8 D_801FBBD4; +extern void* sCfbLoRes1; +extern void* sCfbLoRes0; +extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndLoRes; +extern void* sCfbHiRes1; +extern void* sCfbHiRes0; +extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndHiRes; +extern s16 gCfbWidth; +extern s16 gCfbHeight; +extern s16 gCfbLeftAdjust; +extern s16 gCfbUpperAdjust; +extern u8 gSysCfbHiResEnabled; extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64.h b/include/z64.h index 12738f9a7..bbcb860e5 100644 --- a/include/z64.h +++ b/include/z64.h @@ -612,7 +612,7 @@ typedef struct { typedef struct { /* 0x0 */ u32 type; /* 0x4 */ u32 setScissor; - /* 0x8 */ Color_RGBA8 color; + /* 0x8 */ Color_RGBA8_u32 color; /* 0xC */ Color_RGBA8 envColor; } struct_801F8010; // size = 0x10 @@ -676,4 +676,29 @@ enum fram_mode { FRAM_MODE_STATUS }; +typedef enum { + /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, + /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, + /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments + /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode +} ViModeEditState; + +typedef struct { + /* 0x00 */ OSViMode customViMode; + /* 0x50 */ s32 viHeight; + /* 0x54 */ s32 viWidth; + /* 0x58 */ s32 rightAdjust; + /* 0x5C */ s32 leftAdjust; + /* 0x60 */ s32 lowerAdjust; + /* 0x64 */ s32 upperAdjust; + /* 0x68 */ s32 editState; + /* 0x6C */ s32 tvType; + /* 0x70 */ u32 loRes; + /* 0x74 */ u32 antialiasOff; + /* 0x78 */ u32 modeN; + /* 0x7C */ u32 fb16Bit; + /* 0x80 */ u32 viFeatures; + /* 0x84 */ u32 unk_84; +} ViMode; // size = 0x88 + #endif diff --git a/spec b/spec index a4e38cc6f..5fe02e11f 100644 --- a/spec +++ b/spec @@ -523,8 +523,7 @@ beginseg include "build/src/code/z_rumble.o" include "build/src/code/z_view.o" include "build/src/code/z_vimode.o" - include "build/src/code/code_80140CE0.o" - include "build/data/code/code_80140CE0.data.o" + include "build/src/code/z_viscvg.o" include "build/src/code/code_80140E80.o" include "build/src/code/z_vismono.o" include "build/src/code/z_viszbuf.o" @@ -574,7 +573,6 @@ beginseg include "build/data/code/speed_meter.bss.o" include "build/src/code/su_mtx.o" include "build/src/code/sys_cfb.o" - include "build/data/code/sys_cfb.bss.o" include "build/src/code/sys_cmpdma.o" include "build/src/code/sys_initial_check.o" include "build/src/code/sys_math.o" diff --git a/src/code/code_80140CE0.c b/src/code/code_80140CE0.c deleted file mode 100644 index f3d487fab..000000000 --- a/src/code/code_80140CE0.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D10.s") diff --git a/src/code/game.c b/src/code/game.c index bc8b9e39f..c98241177 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -31,7 +31,7 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1); D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2); D_801F8010.color.a = R_FB_FILTER_A; - func_80140D10(&D_801F8010, &dlist, zbuffer); + VisCvg_Draw(&D_801F8010, &dlist); } else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) { sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6); sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0); @@ -194,7 +194,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g gameState->main = NULL; gameState->destroy = NULL; gameState->running = 1; - gfxCtx->viMode = D_801FBB88; + gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; @@ -210,10 +210,10 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g init(gameState); - func_80140CE0(&D_801F8010); + VisCvg_Init(&D_801F8010); VisZbuf_Init(&sVisZbuf); VisMono_Init(&sMonoColors); - func_80140898(&D_801F8048); + ViMode_Init(&D_801F8048); func_801773A0(&D_801F7FF0); Rumble_Init(); @@ -232,10 +232,10 @@ void GameState_Destroy(GameState* gameState) { Rumble_Destroy(); func_801773C4(&D_801F7FF0); - func_80140D04(&D_801F8010); + VisCvg_Destroy(&D_801F8010); VisZbuf_Destroy(&sVisZbuf); VisMono_Destroy(&sMonoColors); - func_80140900(&D_801F8048); + ViMode_Destroy(&D_801F8048); THA_Destroy(&gameState->heap); GameAlloc_Cleanup(&gameState->alloc); } diff --git a/src/code/graph.c b/src/code/graph.c index 558f7d563..bf9067b69 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -16,12 +16,12 @@ OSTime sGraphTaskStartTime; void Graph_FaultClient(void) { FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1"); - osViSwapBuffer(SysCfb_GetFbPtr(0)); - osViSetMode(D_801FBB88); + osViSwapBuffer(SysCfb_GetFramebuffer(0)); + osViSetMode(gActiveViMode); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); Fault_WaitForInput(); - osViSwapBuffer(SysCfb_GetFbPtr(1)); - osViSetMode(D_801FBB88); + osViSwapBuffer(SysCfb_GetFramebuffer(1)); + osViSetMode(gActiveViMode); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); } @@ -50,7 +50,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { gfxCtx->workBuffer = pool->workBuffer; gfxCtx->debugBuffer = pool->debugBuffer; - gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); gSegments[0x0F] = gfxCtx->curFrameBuffer; gfxCtx->zbuffer = SysCfb_GetZBuffer(); @@ -179,7 +179,7 @@ retry: task->dramStack = (u64*)gGfxSPTaskStack; task->dramStackSize = sizeof(gGfxSPTaskStack); task->outputBuff = gGfxSPTaskOutputBufferPtr; - task->outputBuffSize = gGfxSPTaskOutputBufferSize; + task->outputBuffSize = gGfxSPTaskOutputBufferEnd; task->dataPtr = (u64*)gGfxMasterDL; task->dataSize = 0; task->yieldDataPtr = (u64*)gGfxSPTaskYieldBuffer; @@ -340,18 +340,19 @@ void Graph_ThreadEntry(void* arg) { u32 size; s32 pad[2]; - gZBuffer = SystemArena_Malloc(sizeof(*gZBuffer) + sizeof(*gWorkBuffer) + 64 - 1); - gZBuffer = (void*)ALIGN64((u32)gZBuffer); + gZBufferLoRes = SystemArena_Malloc(sizeof(*gZBufferLoRes) + sizeof(*gWorkBufferLoRes) + 64 - 1); + gZBufferLoRes = (void*)ALIGN64((u32)gZBufferLoRes); - gWorkBuffer = (void*)((u8*)gZBuffer + sizeof(*gZBuffer)); + gWorkBufferLoRes = (void*)((u8*)gZBufferLoRes + sizeof(*gZBufferLoRes)); - gGfxSPTaskOutputBuffer2 = gGfxSPTaskOutputBuffer = SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBuffer)); + gGfxSPTaskOutputBufferHiRes = gGfxSPTaskOutputBufferLoRes = + SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBufferLoRes)); - gGfxSPTaskOutputBufferEnd = (u8*)gGfxSPTaskOutputBuffer + sizeof(*gGfxSPTaskOutputBuffer); - gGfxSPTaskOutputBufferEnd2 = (u8*)gGfxSPTaskOutputBuffer2 + sizeof(*gGfxSPTaskOutputBuffer2); + gGfxSPTaskOutputBufferEndLoRes = (u8*)gGfxSPTaskOutputBufferLoRes + sizeof(*gGfxSPTaskOutputBufferLoRes); + gGfxSPTaskOutputBufferEndHiRes = (u8*)gGfxSPTaskOutputBufferHiRes + sizeof(*gGfxSPTaskOutputBufferHiRes); - func_80178978(); - Fault_SetFB(D_801FBB90, SCREEN_WIDTH, SCREEN_HEIGHT); + SysCfb_Init(); + Fault_SetFB(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT); Graph_Init(&gfxCtx); while (nextOvl) { diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 25d92227c..16c39855c 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -2,20 +2,127 @@ #include "buffers.h" #include "system_malloc.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s") +extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; +extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178818.s") +OSViMode sNotebookViMode; // placeholder name +void* gFramebuffers[2]; +OSViMode* gActiveViMode; +u16* gZBufferPtr; +void* gWorkBuffer; +u64* gGfxSPTaskOutputBufferPtr; +void* gGfxSPTaskOutputBufferEnd; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178978.s") +void* sCfbLoRes1; +void* sCfbLoRes0; +u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +void* gGfxSPTaskOutputBufferEndLoRes; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_801789D4.s") +void* sCfbHiRes1; +void* sCfbHiRes0; +u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +void* gGfxSPTaskOutputBufferEndHiRes; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetFbPtr.s") +s16 gCfbWidth; +s16 gCfbHeight; +s16 gCfbLeftAdjust; +s16 gCfbUpperAdjust; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetZBuffer.s") +u8 gSysCfbHiResEnabled; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A24.s") +void SysCfb_SetLoResMode(void) { + gFramebuffers[1] = sCfbLoRes1; + gFramebuffers[0] = sCfbLoRes0; + gZBufferPtr = *gZBufferLoRes; + gWorkBuffer = gWorkBufferLoRes; + gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferLoRes; + gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndLoRes; + gCfbWidth = SCREEN_WIDTH; + gCfbHeight = SCREEN_HEIGHT; + gCfbLeftAdjust = 0; + gCfbUpperAdjust = 0; + gSysCfbHiResEnabled = false; + gScreenWidth = gCfbWidth; + gScreenHeight = gCfbHeight; + gActiveViMode = &osViModeNtscLan1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A34.s") +void SysCfb_SetHiResMode(void) { + gFramebuffers[1] = sCfbHiRes1; + gFramebuffers[0] = sCfbHiRes0; + gZBufferPtr = *gZBufferHiRes; + gWorkBuffer = gWorkBufferHiRes; + gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferHiRes; + gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndHiRes; + if (1) {} + gCfbWidth = HIRES_BUFFER_WIDTH; + gCfbHeight = HIRES_BUFFER_HEIGHT; + gCfbLeftAdjust = 30; + gCfbUpperAdjust = 10; + gScreenWidth = gCfbWidth; + gScreenHeight = gCfbHeight; + if ((gCfbWidth == SCREEN_WIDTH_HIRES) && (gCfbHeight == SCREEN_HEIGHT_HIRES)) { + gActiveViMode = &osViModeNtscHpf1; + } else { + s32 rightAdjust; + s32 lowerAdjust; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A94.s") + //! FAKE: + l1: + rightAdjust = gCfbWidth - 610; + lowerAdjust = gCfbHeight - 470; + ViMode_Configure(&sNotebookViMode, -1, osTvType, 0, 1, 0, 1, gCfbWidth, gCfbHeight, 30, rightAdjust, 10, + lowerAdjust); + gActiveViMode = &sNotebookViMode; + } + gSysCfbHiResEnabled = true; +} + +void SysCfb_Init(void) { + sCfbLoRes1 = gFramebuffer1; + sCfbLoRes0 = gFramebuffer0; + sCfbHiRes1 = gFramebufferHiRes1; + sCfbHiRes0 = gFramebufferHiRes0; + SysCfb_SetLoResMode(); +} + +// Unused +void SysCfb_Reset(void) { + gFramebuffers[0] = NULL; + gFramebuffers[1] = NULL; +} + +void* SysCfb_GetFramebuffer(s32 index) { + if (index < 2) { + return gFramebuffers[index]; + } + return NULL; +} + +void* SysCfb_GetZBuffer(void) { + return gZBufferPtr; +} + +void* SysCfb_GetWorkBuffer(void) { + return gWorkBuffer; +} + +u16 SysCfb_GetZBufferPixel(s32 x, s32 y) { + u16* zBuff = SysCfb_GetZBuffer(); + u16 val; + + if (zBuff != NULL) { + val = (&zBuff[x])[y * gCfbWidth]; + } else { + val = 0; + } + return val; +} + +s32 SysCfb_GetZBufferInt(s32 x, s32 y) { + return Environment_ZBufValToFixedPoint(SysCfb_GetZBufferPixel(x, y) << 2) >> 3; +} diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 3d98c8f46..c46b6ec3b 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2705,7 +2705,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors spA4 = play->unk_18E68; if (dbgVar2) { - PreRender_SetValues(&play->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, zbuffer); + PreRender_SetValues(&play->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, zbuffer); gfxTemp = gfx; func_80170200(&play->pauseBgPreRender, &gfxTemp, zbuffer, spA4); diff --git a/src/code/z_demo.c b/src/code/z_demo.c index da965969f..733ec4bc1 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index bc07df883..addfe6b67 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -82,8 +82,8 @@ void TransitionCircle_SetType(void* thisx, s32 type) { void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, f32 arg6) { Gfx* gfx = *gfxp; - s32 xh = D_801FBBCC; - s32 yh = D_801FBBCE; + s32 xh = gCfbWidth; + s32 yh = gCfbHeight; s32 width = 1 << masks; s32 height = 1 << maskt; f32 s; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index d6d38f9d6..2191498a3 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -2,7 +2,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F50D4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s") diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 860d04ae9..534ec6dfc 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -360,12 +360,9 @@ Lights* Lights_New(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 ambient lights = GRAPH_ALLOC(gfxCtx, sizeof(Lights)); - lights->l.a.l.col[0] = ambientR; - lights->l.a.l.colc[0] = ambientR; - lights->l.a.l.col[1] = ambientG; - lights->l.a.l.colc[1] = ambientG; - lights->l.a.l.col[2] = ambientB; - lights->l.a.l.colc[2] = ambientB; + lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; + lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; + lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; lights->enablePosLights = 0; lights->numLights = 0; @@ -394,7 +391,7 @@ void Lights_GlowCheck(PlayState* play) { s32 screenPosX = PROJECTED_TO_SCREEN_X(projectedPos, invW); s32 screenPosY = PROJECTED_TO_SCREEN_Y(projectedPos, invW); s32 wZ = (s32)((projectedPos.z * invW) * 16352.0f) + 16352; - s32 zBuf = func_80178A94(screenPosX, screenPosY); + s32 zBuf = SysCfb_GetZBufferInt(screenPosX, screenPosY); if (wZ < zBuf) { params->drawGlow = 1; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 1c03f5cb1..d0558d7f8 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2421,7 +2421,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { // Related to pictograph if (sPictoState == PICTO_BOX_STATE_LENS) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)((void)0, gSaveContext.pictoPhotoI5), PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -2460,7 +2460,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { Interface_SetHudVisibility(HUD_VISIBILITY_ALL); sPictoState = PICTO_BOX_STATE_OFF; if (sPictoPhotoBeingTaken) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)((void)0, gSaveContext.pictoPhotoI5), PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); Snap_RecordPictographedActors(play); @@ -2493,7 +2493,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { sPictoState = PICTO_BOX_STATE_LENS; } else { Play_DecompressI5ToI8((u8*)((void)0, gSaveContext.pictoPhotoI5), - (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); play->haltAllActors = true; sPictoState = PICTO_BOX_STATE_SETUP_PHOTO; @@ -6631,7 +6631,7 @@ void Interface_Draw(PlayState* play) { // Draw pictograph photo if (sPictoState >= PICTO_BOX_STATE_SETUP_PHOTO) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)gSaveContext.pictoPhotoI5, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -6667,7 +6667,7 @@ void Interface_Draw(PlayState* play) { for (sp2CC = 0; sp2CC < (PICTO_PHOTO_HEIGHT / 8); sp2CC++, pictoRectTop += 8) { pictoRectLeft = PICTO_PHOTO_TOPLEFT_X; gDPLoadTextureBlock(OVERLAY_DISP++, - (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90) + + (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer) + (0x500 * sp2CC), G_IM_FMT_I, G_IM_SIZ_8b, PICTO_PHOTO_WIDTH, 8, 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); diff --git a/src/code/z_play.c b/src/code/z_play.c index e25b50b4b..dd06a461e 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -358,10 +358,10 @@ void Play_Destroy(GameState* thisx) { if (sBombersNotebookOpen) { MsgEvent_SendNullTask(); - func_80178750(); - gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + SysCfb_SetLoResMode(); + gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); gfxCtx->zbuffer = SysCfb_GetZBuffer(); - gfxCtx->viMode = D_801FBB88; + gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; @@ -1242,7 +1242,7 @@ void Play_DrawMain(PlayState* this) { goto PostWorldDraw; } - PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); + PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_PROCESS) { MsgEvent_SendNullTask(); @@ -1442,24 +1442,24 @@ void Play_Draw(PlayState* this) { GraphicsContext* gfxCtx2 = this->state.gfxCtx; if (sBombersNotebookOpen) { - if (D_801FBBD4 != 1) { + if (gSysCfbHiResEnabled != 1) { MsgEvent_SendNullTask(); - func_80178818(); - gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + SysCfb_SetHiResMode(); + gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2); gfxCtx2->zbuffer = SysCfb_GetZBuffer(); - gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viMode = gActiveViMode; gfxCtx2->viConfigFeatures = gViConfigFeatures; gfxCtx2->xScale = gViConfigXScale; gfxCtx2->yScale = gViConfigYScale; gfxCtx2->updateViMode = true; } } else { - if (D_801FBBD4 != 0) { + if (gSysCfbHiResEnabled != 0) { MsgEvent_SendNullTask(); - func_80178750(); - gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + SysCfb_SetLoResMode(); + gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2); gfxCtx2->zbuffer = SysCfb_GetZBuffer(); - gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viMode = gActiveViMode; gfxCtx2->viConfigFeatures = gViConfigFeatures; gfxCtx2->xScale = gViConfigXScale; gfxCtx2->yScale = gViConfigYScale; @@ -2252,10 +2252,10 @@ void Play_Init(GameState* thisx) { R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF; PreRender_Init(&this->pauseBgPreRender); - PreRender_SetValuesSave(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL, NULL); - PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL); + PreRender_SetValuesSave(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL, NULL); + PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL); - this->unk_18E64 = D_801FBB90; + this->unk_18E64 = gWorkBuffer; this->pictoPhotoI8 = gPictoPhotoI8; this->unk_18E68 = D_80784600; this->unk_18E58 = D_80784600; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 299639e98..4b5787129 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1459,7 +1459,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(&masterGfx[0], D_0E000000.syncSegments); gSPDisplayList(&masterGfx[1], sFillSetupDL); - gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); if (zbuffer != NULL) { gDPSetDepthImage(&masterGfx[3], zbuffer); } else { @@ -1471,7 +1471,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->setScissor; - gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, D_801FBBCC, D_801FBBCE); + gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, gCfbWidth, gCfbHeight); gSPEndDisplayList(&masterGfx[1]); // Clear Z-Buffer @@ -1481,13 +1481,13 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g if (zbuffer == NULL) { gSPEndDisplayList(&masterGfx[0]); } else { - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, zbuffer); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, zbuffer); gDPPipeSync(&masterGfx[1]); gDPSetCycleType(&masterGfx[2], G_CYC_FILL); gDPSetRenderMode(&masterGfx[3], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[4], (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0)); gSPDisplayList(&masterGfx[5], D_0E000000.clearFillRect); - gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gSPEndDisplayList(&masterGfx[7]); } @@ -1495,7 +1495,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFrameBuffer; - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gDPSetCycleType(&masterGfx[1], G_CYC_FILL); gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); @@ -1505,7 +1505,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFillRect; - gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC - 1, D_801FBBCE - 1); + gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth - 1, gCfbHeight - 1); gDPPipeSync(&masterGfx[1]); gSPEndDisplayList(&masterGfx[2]); @@ -1513,7 +1513,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->fillRect; - gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC, D_801FBBCE); + gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth, gCfbHeight); gDPPipeSync(&masterGfx[1]); gSPEndDisplayList(&masterGfx[2]); diff --git a/src/code/z_view.c b/src/code/z_view.c index 105e6643a..4adc00b8d 100644 --- a/src/code/z_view.c +++ b/src/code/z_view.c @@ -18,8 +18,8 @@ void View_ViewportToVp(Vp* dest, Viewport* src) { dest->vp.vtrans[2] = 0x01FF; dest->vp.vtrans[3] = 0; - if ((src->leftX == 0) && (src->rightX == SCREEN_WIDTH_HIGH_RES) && (src->topY == 0) && - (src->bottomY == SCREEN_HEIGHT_HIGH_RES)) {} + if ((src->leftX == 0) && (src->rightX == HIRES_BUFFER_WIDTH) && (src->topY == 0) && + (src->bottomY == HIRES_BUFFER_HEIGHT)) {} } void View_Init(View* view, GraphicsContext* gfxCtx) { diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index b7d2dea64..2ddd27775 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,17 +1,377 @@ #include "global.h" +#include "ultra64/viint.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140260.s") +typedef struct { + /* 0x00 */ u32 burst; + /* 0x04 */ u32 vSync; + /* 0x08 */ u32 hSync; + /* 0x0C */ u32 leap; + /* 0x10 */ u32 hStart; + /* 0x14 */ u32 vStart; + /* 0x18 */ u32 vBurst; +} ViModeStruct; // size = 0x1C -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014026C.s") +void ViMode_LogPrint(OSViMode* osViMode) { +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140730.s") +/** + * Configures the custom OSViMode for this ViMode + * + * @param viMode ViMode to configure the custom OSViMode for + * @param type Identifying type for the OSViMode + * @param tvType TV Type: NTSC, PAL, MPAL or FPAL + * @param loRes Boolean: true = low resolution, false = high resolution. + * Corresponds to "L" or "H" in libultra VI mode names + * @param antialiasOff Boolean: true = point-sampling, false = anti-aliasing. + * Corresponds to "P" or "A" in libultra VI mode names + * @param modeN Boolean: controls interlacing mode, different based on resolution. + * Corresponds to "N" or "F" in libultra VI mode names + * @param fb16Bit Bolean: true = 16-bit framebuffer, false = 32-bit framebuffer. + * Corresponds to "1" or "2" in libultra VI mode names + * @param width Screen width + * @param height Screen height + * @param leftAdjust Left edge adjustment + * @param rightAdjust Right edge adjustment + * @param upperAdjust Upper edge adjustment + * @param lowerAdjust Lower edge adjustment + */ +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust) { + s32 hiRes; + s32 antialiasOn; + s32 modeF; + s32 fb32Bit; + s32 hiResDeflicker; // deflickered interlacing + s32 hiResInterlaced; + s32 loResDeinterlaced; + s32 loResInterlaced; + s32 modeLAN1; // L=(lo res) A=(antialias) N=(deinterlace) 1=(16-bit) + s32 modeLPN2; // L=(lo res) P=(point-sampled) N=(deinterlace) 2=(32-bit) + s32 modeHPN2; // H=(hi res) P=(point-sampled) N=(normal interlacing) 2=(32-bit) + s32 yScaleLo; + s32 yScaleHiEvenField; + s32 yScaleHiOddField; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140810.s") + hiRes = !loRes; + antialiasOn = !antialiasOff; + modeF = !modeN; + fb32Bit = !fb16Bit; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140898.s") + hiResDeflicker = hiRes && modeF; + hiResInterlaced = hiRes && modeN; + loResDeinterlaced = loRes && modeN; + loResInterlaced = loRes && modeF; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140900.s") + modeLAN1 = loRes && antialiasOn && modeN && fb16Bit; + modeLPN2 = loRes && antialiasOff && modeN && fb32Bit; + modeHPN2 = hiRes && antialiasOff && modeN && fb32Bit; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014090C.s") + upperAdjust &= ~1; + lowerAdjust &= ~1; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140970.s") + yScaleLo = (hiResDeflicker ? 2 : 1) * (((SCREEN_HEIGHT << 11) / SCREEN_HEIGHT) / (loRes ? 1 : 2)); + + yScaleHiEvenField = modeF ? (loResInterlaced ? 0x1000000 : 0x2000000) : 0; + yScaleHiOddField = modeF ? (loResInterlaced ? 0x3000000 : 0x2000000) : 0; + + viMode->type = type; + viMode->comRegs.ctrl = OS_VI_UNK2000 | OS_VI_UNK1000 | OS_VI_GAMMA | OS_VI_GAMMA_DITHER | + (!loResDeinterlaced ? OS_VI_UNK40 : 0) | (antialiasOn ? OS_VI_DIVOT : 0) | + (fb32Bit ? OS_VI_UNK2 | OS_VI_UNK1 : OS_VI_UNK2); + + if (modeLAN1) { + // Anti-aliased, fetch extra lines as-needed + viMode->comRegs.ctrl |= 0x100; + } else if (modeLPN2 | modeHPN2) { + // Point-sampled, resampling disabled + viMode->comRegs.ctrl |= 0x300; + } else { + if (antialiasOff) { + // Point-sampled, resampling enabled + viMode->comRegs.ctrl |= 0x200; + } else { + // Anti-aliased, always fetch extra lines + viMode->comRegs.ctrl |= 0; + } + } + + viMode->comRegs.width = width * (hiResInterlaced ? 2 : 1); + + if (tvType < 3) { + static const ViModeStruct D_801DF0C0[] = { + { + // OS_TV_PAL + BURST(58, 35, 4, 64), + VSYNC(624), + HSYNC(3177, 21), + LEAP(3183, 3182), + HSTART(128, 768), + START(95, 569), + BURST(107, 2, 9, 0), + }, + { + // OS_TV_NTSC + BURST(57, 34, 5, 62), + VSYNC(524), + HSYNC(3093, 0), + LEAP(3093, 3093), + HSTART(108, 748), + START(37, 511), + BURST(4, 2, 14, 0), + }, + { + // OS_TV_MPAL + BURST(57, 30, 5, 70), + VSYNC(524), + HSYNC(3088, 0), + LEAP(3100, 3100), + HSTART(108, 748), + START(37, 511), + BURST(4, 2, 14, 0), + }, + }; + const ViModeStruct* ptr = &D_801DF0C0[tvType]; + + viMode->comRegs.burst = ptr->burst; + viMode->comRegs.vSync = ptr->vSync; + viMode->comRegs.hSync = ptr->hSync; + viMode->comRegs.leap = ptr->leap; + viMode->comRegs.hStart = ptr->hStart; + viMode->fldRegs[0].vStart = ptr->vStart; + viMode->fldRegs[1].vStart = ptr->vStart; + viMode->fldRegs[0].vBurst = ptr->vBurst; + viMode->fldRegs[1].vBurst = ptr->vBurst; + } else { + __assert("../z_vimode.c", 216); + } + + viMode->comRegs.hStart += (leftAdjust << 16) + (s16)rightAdjust; + viMode->fldRegs[0].vStart += (upperAdjust << 16) + (s16)lowerAdjust; + viMode->fldRegs[1].vStart += (upperAdjust << 16) + (s16)lowerAdjust; + + if (loResDeinterlaced) { + viMode->comRegs.vSync++; + if (tvType == OS_TV_MPAL) { + viMode->comRegs.hSync += HSYNC(1, 4); + viMode->comRegs.leap += LEAP((u16)-4, (u16)-2); + } + } else { + viMode->fldRegs[0].vStart += START((u16)-3, (u16)-2); + if (tvType == OS_TV_MPAL) { + viMode->fldRegs[0].vBurst += BURST((u8)-2, (u8)-1, 12, -1); + } else if (tvType == OS_TV_PAL) { + viMode->fldRegs[1].vBurst += BURST((u8)-2, (u8)-1, 2, 0); + } + } + + viMode->comRegs.xScale = (SCREEN_WIDTH << 10) / SCREEN_WIDTH; + viMode->comRegs.vCurrent = 0; + + viMode->fldRegs[0].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2)); + viMode->fldRegs[1].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2) * (loRes ? 1 : 2)); + + viMode->fldRegs[0].yScale = yScaleLo | yScaleHiEvenField; + viMode->fldRegs[1].yScale = yScaleLo | yScaleHiOddField; + + viMode->fldRegs[0].vIntr = 2; + viMode->fldRegs[1].vIntr = 2; +} + +void ViMode_Save(ViMode* viMode) { + R_VI_MODE_EDIT_STATE = viMode->editState; + R_VI_MODE_EDIT_WIDTH = viMode->viWidth; + R_VI_MODE_EDIT_HEIGHT = viMode->viHeight; + R_VI_MODE_EDIT_ULY_ADJ = viMode->upperAdjust; + R_VI_MODE_EDIT_LRY_ADJ = viMode->lowerAdjust; + R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust; + R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust; + + if (SREG(58) == 1) { + SREG(58) = 0; + switch (SREG(59)) { + case 1: + ViMode_LogPrint(&osViModePalLan1); + break; + + case 2: + ViMode_LogPrint(&osViModeFpalLan1); + break; + + default: + ViMode_LogPrint(&viMode->customViMode); + break; + } + } +} + +void ViMode_Load(ViMode* viMode) { + //! @bug This condition always fails as the lowest bit is masked out to 0 + if ((R_VI_MODE_EDIT_WIDTH & ~3) == 1) { + R_VI_MODE_EDIT_WIDTH += 4; + } + + viMode->editState = R_VI_MODE_EDIT_STATE; + viMode->viWidth = R_VI_MODE_EDIT_WIDTH & ~3; + viMode->viHeight = R_VI_MODE_EDIT_HEIGHT; + viMode->upperAdjust = R_VI_MODE_EDIT_ULY_ADJ; + viMode->lowerAdjust = R_VI_MODE_EDIT_LRY_ADJ; + viMode->leftAdjust = R_VI_MODE_EDIT_ULX_ADJ; + viMode->rightAdjust = R_VI_MODE_EDIT_LRX_ADJ; +} + +void ViMode_Init(ViMode* viMode) { + viMode->editState = VI_MODE_EDIT_STATE_INACTIVE; + viMode->viWidth = SCREEN_WIDTH; + viMode->viHeight = SCREEN_HEIGHT; + viMode->leftAdjust = 0; + viMode->rightAdjust = 0; + viMode->upperAdjust = 0; + viMode->lowerAdjust = 0; + viMode->viFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF; + viMode->tvType = osTvType; + viMode->fb16Bit = true; + viMode->modeN = true; + viMode->antialiasOff = false; + viMode->loRes = true; + + ViMode_Save(viMode); +} + +void ViMode_Destroy(ViMode* viMode) { +} + +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures) { + u32 ctrl = viMode->customViMode.comRegs.ctrl; + + if (viFeatures & OS_VI_GAMMA_ON) { + ctrl |= OS_VI_GAMMA; + } + if (viFeatures & OS_VI_GAMMA_OFF) { + ctrl &= ~OS_VI_GAMMA; + } + if (viFeatures & OS_VI_GAMMA_DITHER_ON) { + ctrl |= OS_VI_GAMMA_DITHER; + } + if (viFeatures & OS_VI_GAMMA_DITHER_OFF) { + ctrl &= ~OS_VI_GAMMA_DITHER; + } + if (viFeatures & OS_VI_DIVOT_ON) { + ctrl |= OS_VI_DIVOT; + } + if (viFeatures & OS_VI_DIVOT_OFF) { + ctrl &= ~OS_VI_DIVOT; + } + viMode->customViMode.comRegs.ctrl = ctrl; +} + +/** + * Updates the custom VI mode with controller input and any edits made with the REG editor + * (through R_VI_MODE_EDIT_* entries) + */ +void ViMode_Update(ViMode* viMode, Input* input) { + ViMode_Load(viMode); + + if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) || + (viMode->editState == VI_MODE_EDIT_STATE_3)) { + gScreenWidth = viMode->viWidth; + gScreenHeight = viMode->viHeight; + + // Controls to reset the ViMode to defaults + if (CHECK_BTN_ALL(input->cur.button, BTN_START | BTN_CUP | BTN_CRIGHT)) { + ViMode_Init(viMode); + } + + // Controls to adjust the screen dimensions (upper-left) + if (CHECK_BTN_ALL(input->cur.button, BTN_CUP)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { + viMode->upperAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { + viMode->upperAdjust++; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { + viMode->leftAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { + viMode->leftAdjust++; + } + } + + // Controls to adjust the screen dimensions (lower-right) + if (CHECK_BTN_ALL(input->cur.button, BTN_CRIGHT)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { + viMode->lowerAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { + viMode->lowerAdjust++; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { + viMode->rightAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { + viMode->rightAdjust++; + } + } + + // Controls to adjust key features + if (CHECK_BTN_ALL(input->cur.button, BTN_CDOWN)) { + if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) { + viMode->loRes = !viMode->loRes; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) { + viMode->antialiasOff = !viMode->antialiasOff; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) { + viMode->modeN = !viMode->modeN; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) { + viMode->fb16Bit = !viMode->fb16Bit; + } + } + + // Clamp adjustments + if (viMode->editState >= VI_MODE_EDIT_STATE_2) { + // Allow parts of the framebuffer to possibly be offscreen by a small margin + if (viMode->leftAdjust < -16) { + viMode->leftAdjust = -16; + } + if (viMode->upperAdjust < -50) { + viMode->upperAdjust = -50; + } + if (viMode->rightAdjust > 16) { + viMode->rightAdjust = 16; + } + if (viMode->lowerAdjust > 50) { + viMode->lowerAdjust = 50; + } + } else { + // Do not allow parts of the framebuffer to end up offscreen + if (viMode->leftAdjust < 0) { + viMode->leftAdjust = 0; + } + if (viMode->upperAdjust < 0) { + viMode->upperAdjust = 0; + } + if (viMode->rightAdjust > 0) { + viMode->rightAdjust = 0; + } + if (viMode->lowerAdjust > 0) { + viMode->lowerAdjust = 0; + } + } + + ViMode_Configure(&viMode->customViMode, OS_VI_UNK28, osTvType, viMode->loRes, viMode->antialiasOff, + viMode->modeN, viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust, + viMode->rightAdjust, viMode->upperAdjust, viMode->lowerAdjust); + ViMode_ConfigureFeatures(viMode, viMode->viFeatures); + + if (viMode->editState == VI_MODE_EDIT_STATE_3) { + // Log comparison between the NTSC LAN1 mode and the custom mode + ViMode_LogPrint(&osViModeNtscLan1); + ViMode_LogPrint(&viMode->customViMode); + viMode->editState = VI_MODE_EDIT_STATE_2; + } + } + + ViMode_Save(viMode); +} diff --git a/src/code/z_viscvg.c b/src/code/z_viscvg.c new file mode 100644 index 000000000..888fa19b3 --- /dev/null +++ b/src/code/z_viscvg.c @@ -0,0 +1,90 @@ +#include "global.h" + +Gfx D_801C5DD0[] = { + gsDPSetOtherMode(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_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_VISCVG | G_RM_VISCVG2), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5DE0[] = { + gsDPSetOtherMode(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_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5DF0[] = { + gsDPSetOtherMode(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_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5E00[] = { + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_CONV | 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_CLD_SURF | G_RM_CLD_SURF2), + gsSPDisplayList(D_0E000000.fillRect), + gsDPSetOtherMode(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_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +void VisCvg_Init(struct_801F8010* this) { + this->type = 0; + this->setScissor = false; + this->color.r = 255; + this->color.g = 255; + this->color.b = 255; + this->color.a = 255; +} + +void VisCvg_Destroy(struct_801F8010* this) { +} + +void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp) { + Gfx* gfx = *gfxp; + + gDPPipeSync(gfx++); + gDPSetPrimDepth(gfx++, -1, -1); + + if (this->setScissor == true) { + gSPDisplayList(gfx++, D_0E000000.setScissor); + } + + switch (this->type) { + case 1: + gSPDisplayList(gfx++, D_801C5DF0); + break; + + case 2: + gDPSetColor(gfx++, G_SETPRIMCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5E00); + break; + + case 3: + gDPSetColor(gfx++, G_SETBLENDCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5DD0); + break; + + case 4: + gDPSetColor(gfx++, G_SETFOGCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5DE0); + break; + + default: + break; + } + + gDPPipeSync(gfx++); + *gfxp = gfx; +} diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c index 9970a1e1b..cf603f324 100644 --- a/src/code/z_viszbuf.c +++ b/src/code/z_viszbuf.c @@ -1,6 +1,6 @@ #include "global.h" -#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES)) +#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (gCfbWidth * G_IM_SIZ_16b_BYTES)) void VisZbuf_Init(VisZbuf* this) { this->useRgba = false; @@ -42,12 +42,12 @@ void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) { gDPSetColor(gfx++, G_SETPRIMCOLOR, this->primColor.rgba); gDPSetColor(gfx++, G_SETENVCOLOR, this->envColor.rgba); - for (y = 0; y < (D_801FBBCE - height) + 1; y += height) { - gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, D_801FBBCC, 0, 0, y, D_801FBBCC - 1, (y + height) - 1, 0, + for (y = 0; y < (gCfbHeight - height) + 1; y += height) { + gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, gCfbWidth, 0, 0, y, gCfbWidth - 1, (y + height) - 1, 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++, 0, y << 2, D_801FBBCC << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, + gSPTextureRectangle(gfx++, 0, y << 2, gCfbWidth << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, 1 << 10); } diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c index c7c09f659..ccccf68ae 100644 --- a/src/libultra/io/osViModeMpalLan1.c +++ b/src/libultra/io/osViModeMpalLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeMpalLan1 = { OS_VI_MPAL_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x4651E39, // burst - 0x20D, // vSync - 0x40C11, // hSync - 0xC190C1A, // leap - 0x6C02EC, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(57, 30, 5, 70), // burst + VSYNC(525), // vSync + HSYNC(3089, 4), // hSync + LEAP(3097, 3098), // leap + HSTART(108, 748), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c index ac0a1fa2b..5f88f4e94 100644 --- a/src/libultra/io/osViModeNtscHpf1.c +++ b/src/libultra/io/osViModeNtscHpf1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeNtscHpf1 = { OS_VI_NTSC_HPF1, // type { // comRegs - 0x324E, // ctrl - 640, // width - 0x3E52239, // burst - 0x20C, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x400, // xScale - 0, // vCurrent + 0x324E, // ctrl + WIDTH(640), // width + BURST(57, 34, 5, 62), // 0x3E52239, // burst + VSYNC(524), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // 0x6C02EC, // hStart + SCALE(1, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x500, // origin - 0x2000800, // yScale - 0x2301FD, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(1280), // origin + SCALE(0.5, 0.5), // 0x2000800, // yScale + START(35, 509), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0xA00, // origin - 0x2000800, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2 // vIntr + ORIGIN(2560), // origin + SCALE(0.5, 0.5), // 0x2000800, // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2) // vIntr } }, }; diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c index 632d763f4..86eb473b7 100644 --- a/src/libultra/io/osViModeNtscLan1.c +++ b/src/libultra/io/osViModeNtscLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeNtscLan1 = { OS_VI_NTSC_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x3E52239, // burst - 0x20D, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(57, 34, 5, 62), // burst + VSYNC(525), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c index 174cbf142..f875bb731 100644 --- a/src/libultra/io/osViModePalLan1.c +++ b/src/libultra/io/osViModePalLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModePalLan1 = { OS_VI_PAL_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x4541E3A, // burst - 0x271, // vSync - 0x170C69, // hSync - 0xC6F0C6D, // leap - 0x800300, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(58, 30, 4, 69), // burst + VSYNC(625), // vSync + HSYNC(3177, 23), // hSync + LEAP(3183, 3181), // leap + HSTART(128, 768), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x5F0239, // vStart - 0x9026B, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(95, 569), // vStart + BURST(107, 2, 9, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x5F0239, // vStart - 0x9026B, // vBurst - 2 // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(95, 569), // vStart + BURST(107, 2, 9, 0), // vBurst + VINTR(2), // vIntr } }, }; 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 444142715..7de134218 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -4,6 +4,7 @@ * Description: Kafei */ +#include "prevent_bss_reordering.h" #include "z_en_test3.h" #include "objects/object_test3/object_test3.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 9f5257b32..7f33b45c1 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 "z64quake.h" #include "z64rumble.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 48c8bdf58..9e11df190 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -81,7 +81,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { Gfx* gfx = *gfxP; s32 width = gScreenWidth; s32 height = gScreenHeight; - void* sp50 = D_801FBB90; + void* workBuffer = gWorkBuffer; TransitionWipe5* this = THIS; s32 alpha = (1.0f - this->unk_0C) * 255.0f; @@ -92,7 +92,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { 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_COPY | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); - func_8014116C(&gfx, D_0F000000, sp50, width, height, 1); + func_8014116C(&gfx, D_0F000000, workBuffer, width, height, 1); } else { if (alpha == 255) { gDPSetOtherMode(gfx++, @@ -108,7 +108,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { gDPSetEnvColor(gfx++, 255, 255, 255, alpha); gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT); - func_8014116C(&gfx, sp50, D_0F000000, width, height, 0); + func_8014116C(&gfx, workBuffer, D_0F000000, width, height, 0); } gDPPipeSync(gfx++); gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index a28ff6132..b1d42739b 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1707,7 +1707,7 @@ 0x800F4FC0:("Font_LoadMessageBoxEndIcon",), 0x800F5004:("Font_LoadOrderedFont",), 0x800F5090:("func_800F5090",), - 0x800F50D4:("func_800F50D4",), + 0x800F50D4:("Environment_ZBufValToFixedPoint",), 0x800F510C:("Environment_Init",), 0x800F5954:("func_800F5954",), 0x800F5A8C:("Environment_LerpWeight",), @@ -2748,17 +2748,17 @@ 0x8013FD74:("View_ApplyPerspectiveToOverlay",), 0x80140024:("View_UpdateViewingMatrix",), 0x801400CC:("View_ApplyTo",), - 0x80140260:("func_80140260",), - 0x8014026C:("func_8014026C",), - 0x80140730:("func_80140730",), - 0x80140810:("func_80140810",), - 0x80140898:("func_80140898",), - 0x80140900:("func_80140900",), - 0x8014090C:("func_8014090C",), - 0x80140970:("func_80140970",), - 0x80140CE0:("func_80140CE0",), - 0x80140D04:("func_80140D04",), - 0x80140D10:("func_80140D10",), + 0x80140260:("ViMode_LogPrint",), + 0x8014026C:("ViMode_Configure",), + 0x80140730:("ViMode_Save",), + 0x80140810:("ViMode_Load",), + 0x80140898:("ViMode_Init",), + 0x80140900:("ViMode_Destroy",), + 0x8014090C:("ViMode_ConfigureFeatures",), + 0x80140970:("ViMode_Update",), + 0x80140CE0:("VisCvg_Init",), + 0x80140D04:("VisCvg_Destroy",), + 0x80140D10:("VisCvg_Draw",), 0x80140E80:("func_80140E80",), 0x80140EA0:("func_80140EA0",), 0x80140EAC:("func_80140EAC",), @@ -3225,15 +3225,15 @@ 0x801780F0:("Mtx_SetTranslateScaleMtx",), 0x801781EC:("Mtx_SetRotationMtx",), 0x8017842C:("Mtx_SetTranslationRotationScaleMtx",), - 0x80178750:("func_80178750",), - 0x80178818:("func_80178818",), - 0x80178978:("func_80178978",), - 0x801789D4:("func_801789D4",), - 0x801789EC:("SysCfb_GetFbPtr",), + 0x80178750:("SysCfb_SetLoResMode",), + 0x80178818:("SysCfb_SetHiResMode",), + 0x80178978:("SysCfb_Init",), + 0x801789D4:("SysCfb_Reset",), + 0x801789EC:("SysCfb_GetFramebuffer",), 0x80178A14:("SysCfb_GetZBuffer",), - 0x80178A24:("func_80178A24",), - 0x80178A34:("func_80178A34",), - 0x80178A94:("func_80178A94",), + 0x80178A24:("SysCfb_GetWorkBuffer",), + 0x80178A34:("SysCfb_GetZBufferPixel",), + 0x80178A94:("SysCfb_GetZBufferInt",), 0x80178AC0:("func_80178AC0",), 0x80178C80:("CmpDma_GetFileInfo",), 0x80178D7C:("CmpDma_Decompress",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f58d54a87..53b35efa0 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4051,7 +4051,7 @@ 0x801F8010:("D_801F8010","struct_801F8010","",0x10), 0x801F8020:("sVisZbuf","VisZbuf","",0x10), 0x801F8030:("sMonoColors","VisMono","",0x18), - 0x801F8048:("D_801F8048","UNK_TYPE1","",0x1), + 0x801F8048:("D_801F8048","ViMode","",0x88), 0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc), 0x801F80E0:("sGraphFaultClient","FaultClient","",0x10), 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), @@ -4094,30 +4094,30 @@ 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1), 0x801FBB20:("gRDPTotalTime","UNK_TYPE1","",0x1), 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1), - 0x801FBB30:("D_801FBB30","OSViMode","",0x50), + 0x801FBB30:("sNotebookViMode","OSViMode","",0x50), 0x801FBB80:("gFramebuffers","u32*","[2]",0x8), - 0x801FBB88:("D_801FBB88","OSViMode*","",0x4), + 0x801FBB88:("gActiveViMode","OSViMode*","",0x4), 0x801FBB8C:("gZBufferPtr","u16*","",0x4), - 0x801FBB90:("D_801FBB90","UNK_TYPE4","",0x4), + 0x801FBB90:("gWorkBuffer","UNK_TYPE4","",0x4), 0x801FBB94:("gGfxSPTaskOutputBufferPtr","UNK_TYPE1","",0x1), - 0x801FBB98:("gGfxSPTaskOutputBufferSize","UNK_TYPE1","",0x1), - 0x801FBB9C:("D_801FBB9C","UNK_TYPE1","",0x1), - 0x801FBBA0:("D_801FBBA0","UNK_TYPE1","",0x1), - 0x801FBBA4:("gZBuffer","u16*","",0x4), - 0x801FBBA8:("gWorkBuffer","u16**","",0x4), - 0x801FBBAC:("gGfxSPTaskOutputBuffer","u16**","",0x4), - 0x801FBBB0:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1), - 0x801FBBB4:("D_801FBBB4","UNK_TYPE1","",0x1), - 0x801FBBB8:("D_801FBBB8","UNK_TYPE1","",0x1), - 0x801FBBBC:("D_801FBBBC","UNK_TYPE1","",0x1), - 0x801FBBC0:("D_801FBBC0","UNK_TYPE1","",0x1), - 0x801FBBC4:("gGfxSPTaskOutputBuffer2","UNK_TYPE1","",0x1), - 0x801FBBC8:("gGfxSPTaskOutputBufferEnd2","UNK_TYPE1","",0x1), - 0x801FBBCC:("D_801FBBCC","UNK_TYPE2","",0x2), - 0x801FBBCE:("D_801FBBCE","UNK_TYPE2","",0x2), - 0x801FBBD0:("D_801FBBD0","UNK_TYPE1","",0x1), - 0x801FBBD2:("D_801FBBD2","UNK_TYPE1","",0x1), - 0x801FBBD4:("D_801FBBD4","UNK_TYPE1","",0x1), + 0x801FBB98:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1), + 0x801FBB9C:("sCfbLoRes1","UNK_TYPE1","",0x1), + 0x801FBBA0:("sCfbLoRes0","UNK_TYPE1","",0x1), + 0x801FBBA4:("gZBufferLoRes","u16*","",0x4), + 0x801FBBA8:("gWorkBufferLoRes","u16**","",0x4), + 0x801FBBAC:("gGfxSPTaskOutputBufferLoRes","u16**","",0x4), + 0x801FBBB0:("gGfxSPTaskOutputBufferEndLoRes","UNK_TYPE1","",0x1), + 0x801FBBB4:("sCfbHiRes1","UNK_TYPE1","",0x1), + 0x801FBBB8:("sCfbHiRes0","UNK_TYPE1","",0x1), + 0x801FBBBC:("gZBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC0:("gWorkBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC4:("gGfxSPTaskOutputBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC8:("gGfxSPTaskOutputBufferEndHiRes","UNK_TYPE1","",0x1), + 0x801FBBCC:("gCfbWidth","UNK_TYPE2","",0x2), + 0x801FBBCE:("gCfbHeight","UNK_TYPE2","",0x2), + 0x801FBBD0:("gCfbLeftAdjust","UNK_TYPE1","",0x1), + 0x801FBBD2:("gCfbUpperAdjust","UNK_TYPE1","",0x1), + 0x801FBBD4:("gSysCfbHiResEnabled","UNK_TYPE1","",0x1), 0x801FBBE0:("sDmaBuffer","u32","[2]",0x8), 0x801FBBF0:("D_801FBBF0","Vec3f","",0xc), 0x801FBC00:("Math3D_ColSphereTri_line","LineSegment","",0x18), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 03469f7bf..34318dc27 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1221,7 +1221,7 @@ asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54, 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/func_800F50D4.s,func_800F50D4,0x800F50D4,0xE +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_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21 @@ -2270,9 +2270,9 @@ asm/non_matchings/code/z_vimode/func_80140898.s,func_80140898,0x80140898,0x1A asm/non_matchings/code/z_vimode/func_80140900.s,func_80140900,0x80140900,0x3 asm/non_matchings/code/z_vimode/func_8014090C.s,func_8014090C,0x8014090C,0x19 asm/non_matchings/code/z_vimode/func_80140970.s,func_80140970,0x80140970,0xDC -asm/non_matchings/code/z_vimode/func_80140CE0.s,func_80140CE0,0x80140CE0,0x9 -asm/non_matchings/code/z_vimode/func_80140D04.s,func_80140D04,0x80140D04,0x3 -asm/non_matchings/code/z_vimode/func_80140D10.s,func_80140D10,0x80140D10,0x5C +asm/non_matchings/code/z_vimode/VisCvg_Init.s,VisCvg_Init,0x80140CE0,0x9 +asm/non_matchings/code/z_vimode/VisCvg_Destroy.s,VisCvg_Destroy,0x80140D04,0x3 +asm/non_matchings/code/z_vimode/VisCvg_Draw.s,VisCvg_Draw,0x80140D10,0x5C asm/non_matchings/code/code_80140E80/func_80140E80.s,func_80140E80,0x80140E80,0x8 asm/non_matchings/code/code_80140E80/func_80140EA0.s,func_80140EA0,0x80140EA0,0x3 asm/non_matchings/code/code_80140E80/func_80140EAC.s,func_80140EAC,0x80140EAC,0x57 @@ -2739,15 +2739,15 @@ asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_Draw 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 asm/non_matchings/code/speed_meter/func_8017842C.s,func_8017842C,0x8017842C,0xC9 -asm/non_matchings/code/sys_cmpdma/func_80178750.s,func_80178750,0x80178750,0x32 -asm/non_matchings/code/sys_cmpdma/func_80178818.s,func_80178818,0x80178818,0x58 -asm/non_matchings/code/sys_cmpdma/func_80178978.s,func_80178978,0x80178978,0x17 -asm/non_matchings/code/sys_cmpdma/func_801789D4.s,func_801789D4,0x801789D4,0x6 -asm/non_matchings/code/sys_cmpdma/SysCfb_GetFbPtr.s,SysCfb_GetFbPtr,0x801789EC,0xA +asm/non_matchings/code/sys_cmpdma/SysCfb_SetLoResMode.s,SysCfb_SetLoResMode,0x80178750,0x32 +asm/non_matchings/code/sys_cmpdma/SysCfb_SetHiResMode.s,SysCfb_SetHiResMode,0x80178818,0x58 +asm/non_matchings/code/sys_cmpdma/SysCfb_Init.s,SysCfb_Init,0x80178978,0x17 +asm/non_matchings/code/sys_cmpdma/SysCfb_Reset.s,SysCfb_Reset,0x801789D4,0x6 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetFramebuffer.s,SysCfb_GetFramebuffer,0x801789EC,0xA asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBuffer.s,SysCfb_GetZBuffer,0x80178A14,0x4 -asm/non_matchings/code/sys_cmpdma/func_80178A24.s,func_80178A24,0x80178A24,0x4 -asm/non_matchings/code/sys_cmpdma/func_80178A34.s,func_80178A34,0x80178A34,0x18 -asm/non_matchings/code/sys_cmpdma/func_80178A94.s,func_80178A94,0x80178A94,0xB +asm/non_matchings/code/sys_cmpdma/SysCfb_GetWorkBuffer.s,SysCfb_GetWorkBuffer,0x80178A24,0x4 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferPixel.s,SysCfb_GetZBufferPixel,0x80178A34,0x18 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferInt.s,SysCfb_GetZBufferInt,0x80178A94,0xB asm/non_matchings/code/sys_cmpdma/func_80178AC0.s,func_80178AC0,0x80178AC0,0x70 asm/non_matchings/code/sys_cmpdma/CmpDma_GetFileInfo.s,CmpDma_GetFileInfo,0x80178C80,0x3F asm/non_matchings/code/sys_cmpdma/CmpDma_Decompress.s,CmpDma_Decompress,0x80178D7C,0xC diff --git a/undefined_syms.txt b/undefined_syms.txt index aad4bba7b..336a6c4b4 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -122,9 +122,11 @@ D_A4800010 = 0xA4800010; // SI_PIF_ADDR_WR64B_REG D_A4800014 = 0xA4800014; // reserved D_A4800018 = 0xA4800018; // SI_STATUS_REG -// buffers +// sys_cfb buffers gFramebuffer1 = 0x80000500; +gFramebufferHiRes0 = 0x80780000; +gFramebufferHiRes1 = 0x80000500; D_80025D00 = 0x80025D00; // Ucode symbols From 4143097c5a6080a1ebbb3d328b85178ab13ab8e6 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Mon, 29 May 2023 19:57:14 -0400 Subject: [PATCH 31/51] Scene table (#1207) * scene_table.h * Move restriction flgs to scene_table.h * format * rename D_801C5FC0 to sPersistentCycleFlags * format * move persistent flags to table * cleanups * review * PERSISTENT_CYCLE_FLAGS_SET * PERSISTENT_CYCLE_FLAGS_NONE * move comment above the scene * bss * tons of bss * whoops * bss * bss * bss * Update include/tables/scene_table.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_scene_table.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * SCENE_MAX * bss * bss * bss --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/segment_symbols.h | 102 -------- include/tables/scene_table.h | 229 ++++++++++++++++++ include/variables.h | 4 +- include/z64scene.h | 122 +--------- src/boot_O2_g3/CIC6105.c | 1 - src/boot_O2_g3/yaz0.c | 1 + src/code/sys_cfb.c | 1 + src/code/z_camera.c | 1 + src/code/z_effect_soft_sprite.c | 1 + src/code/z_parameter.c | 122 +--------- src/code/z_player_call.c | 1 - src/code/z_scene_proc.c | 1 - src/code/z_scene_table.c | 136 ++--------- src/code/z_skin.c | 1 - src/code/z_sram_NES.c | 161 +++--------- src/libultra/flash/osFlash.c | 1 - .../z_bg_hakugin_switch.c | 1 + src/overlays/actors/ovl_Boss_06/z_boss_06.c | 1 - .../actors/ovl_En_Fishing/z_en_fishing.c | 2 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 1 - src/overlays/actors/ovl_En_Test7/z_en_test7.c | 1 + tools/disasm/variables.txt | 2 +- 22 files changed, 308 insertions(+), 585 deletions(-) create mode 100644 include/tables/scene_table.h diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 9fc49a6cb..a8e88e794 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -124,56 +124,44 @@ DECLARE_ROM_SEGMENT(d2_fine_pal_static) DECLARE_ROM_SEGMENT(elf_message_field) DECLARE_ROM_SEGMENT(elf_message_ydan) -DECLARE_ROM_SEGMENT(Z2_20SICHITAI2) DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_00) DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_01) DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_02) -DECLARE_ROM_SEGMENT(Z2_WITCH_SHOP) DECLARE_ROM_SEGMENT(Z2_WITCH_SHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_LAST_BS) DECLARE_ROM_SEGMENT(Z2_LAST_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_HAKASHITA) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_00) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_01) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_02) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_03) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_04) -DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP) DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP_room_00) DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP_room_01) -DECLARE_ROM_SEGMENT(Z2_OMOYA) DECLARE_ROM_SEGMENT(Z2_OMOYA_room_00) DECLARE_ROM_SEGMENT(Z2_OMOYA_room_01) DECLARE_ROM_SEGMENT(Z2_OMOYA_room_02) -DECLARE_ROM_SEGMENT(Z2_BOWLING) DECLARE_ROM_SEGMENT(Z2_BOWLING_room_00) -DECLARE_ROM_SEGMENT(Z2_SONCHONOIE) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_00) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_01) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_02) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_03) -DECLARE_ROM_SEGMENT(Z2_IKANA) DECLARE_ROM_SEGMENT(Z2_IKANA_room_00) DECLARE_ROM_SEGMENT(Z2_IKANA_room_01) DECLARE_ROM_SEGMENT(Z2_IKANA_room_02) DECLARE_ROM_SEGMENT(Z2_IKANA_room_03) DECLARE_ROM_SEGMENT(Z2_IKANA_room_04) -DECLARE_ROM_SEGMENT(Z2_KAIZOKU) DECLARE_ROM_SEGMENT(Z2_KAIZOKU_room_00) -DECLARE_ROM_SEGMENT(Z2_MILK_BAR) DECLARE_ROM_SEGMENT(Z2_MILK_BAR_room_00) -DECLARE_ROM_SEGMENT(Z2_INISIE_N) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_00) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_01) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_02) @@ -187,10 +175,8 @@ DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_09) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_10) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_11) -DECLARE_ROM_SEGMENT(Z2_TAKARAYA) DECLARE_ROM_SEGMENT(Z2_TAKARAYA_room_00) -DECLARE_ROM_SEGMENT(Z2_INISIE_R) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_00) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_01) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_02) @@ -204,14 +190,11 @@ DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_09) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_10) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_11) -DECLARE_ROM_SEGMENT(Z2_OKUJOU) DECLARE_ROM_SEGMENT(Z2_OKUJOU_room_00) -DECLARE_ROM_SEGMENT(Z2_OPENINGDAN) DECLARE_ROM_SEGMENT(Z2_OPENINGDAN_room_00) DECLARE_ROM_SEGMENT(Z2_OPENINGDAN_room_01) -DECLARE_ROM_SEGMENT(Z2_MITURIN) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_00) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_01) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_02) @@ -226,10 +209,8 @@ DECLARE_ROM_SEGMENT(Z2_MITURIN_room_10) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_11) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_12) -DECLARE_ROM_SEGMENT(Z2_13HUBUKINOMITI) DECLARE_ROM_SEGMENT(Z2_13HUBUKINOMITI_room_00) -DECLARE_ROM_SEGMENT(Z2_CASTLE) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_00) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_01) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_02) @@ -241,16 +222,12 @@ DECLARE_ROM_SEGMENT(Z2_CASTLE_room_07) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_08) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_09) -DECLARE_ROM_SEGMENT(Z2_DEKUTES) DECLARE_ROM_SEGMENT(Z2_DEKUTES_room_00) -DECLARE_ROM_SEGMENT(Z2_MITURIN_BS) DECLARE_ROM_SEGMENT(Z2_MITURIN_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_SYATEKI_MIZU) DECLARE_ROM_SEGMENT(Z2_SYATEKI_MIZU_room_00) -DECLARE_ROM_SEGMENT(Z2_HAKUGIN) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_00) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_01) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_02) @@ -266,10 +243,8 @@ DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_11) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_12) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_13) -DECLARE_ROM_SEGMENT(Z2_ROMANYMAE) DECLARE_ROM_SEGMENT(Z2_ROMANYMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_PIRATE) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_00) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_01) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_02) @@ -286,20 +261,16 @@ DECLARE_ROM_SEGMENT(Z2_PIRATE_room_12) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_13) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_14) -DECLARE_ROM_SEGMENT(Z2_SYATEKI_MORI) DECLARE_ROM_SEGMENT(Z2_SYATEKI_MORI_room_00) -DECLARE_ROM_SEGMENT(Z2_SINKAI) DECLARE_ROM_SEGMENT(Z2_SINKAI_room_00) -DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_00) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_01) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_02) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_03) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_04) -DECLARE_ROM_SEGMENT(Z2_KINSTA1) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_00) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_01) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_02) @@ -307,7 +278,6 @@ DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_03) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_04) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_05) -DECLARE_ROM_SEGMENT(Z2_KINDAN2) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_00) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_01) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_02) @@ -315,108 +285,77 @@ DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_03) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_04) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_05) -DECLARE_ROM_SEGMENT(Z2_TENMON_DAI) DECLARE_ROM_SEGMENT(Z2_TENMON_DAI_room_00) DECLARE_ROM_SEGMENT(Z2_TENMON_DAI_room_01) -DECLARE_ROM_SEGMENT(Z2_LAST_DEKU) DECLARE_ROM_SEGMENT(Z2_LAST_DEKU_room_00) DECLARE_ROM_SEGMENT(Z2_LAST_DEKU_room_01) -DECLARE_ROM_SEGMENT(Z2_22DEKUCITY) DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_00) DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_01) DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_02) -DECLARE_ROM_SEGMENT(Z2_KAJIYA) DECLARE_ROM_SEGMENT(Z2_KAJIYA_room_00) -DECLARE_ROM_SEGMENT(Z2_00KEIKOKU) DECLARE_ROM_SEGMENT(Z2_00KEIKOKU_room_00) -DECLARE_ROM_SEGMENT(Z2_POSTHOUSE) DECLARE_ROM_SEGMENT(Z2_POSTHOUSE_room_00) -DECLARE_ROM_SEGMENT(Z2_LABO) DECLARE_ROM_SEGMENT(Z2_LABO_room_00) -DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST) DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST_room_00) DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST_room_01) -DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE) DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE_room_00) DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE_room_01) -DECLARE_ROM_SEGMENT(Z2_33ZORACITY) DECLARE_ROM_SEGMENT(Z2_33ZORACITY_room_00) -DECLARE_ROM_SEGMENT(Z2_8ITEMSHOP) DECLARE_ROM_SEGMENT(Z2_8ITEMSHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_F01) DECLARE_ROM_SEGMENT(Z2_F01_room_00) -DECLARE_ROM_SEGMENT(Z2_INISIE_BS) DECLARE_ROM_SEGMENT(Z2_INISIE_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_30GYOSON) DECLARE_ROM_SEGMENT(Z2_30GYOSON_room_00) -DECLARE_ROM_SEGMENT(Z2_31MISAKI) DECLARE_ROM_SEGMENT(Z2_31MISAKI_room_00) -DECLARE_ROM_SEGMENT(Z2_TAKARAKUJI) DECLARE_ROM_SEGMENT(Z2_TAKARAKUJI_room_00) -DECLARE_ROM_SEGMENT(Z2_TORIDE) DECLARE_ROM_SEGMENT(Z2_TORIDE_room_00) -DECLARE_ROM_SEGMENT(Z2_FISHERMAN) DECLARE_ROM_SEGMENT(Z2_FISHERMAN_room_00) -DECLARE_ROM_SEGMENT(Z2_GORONSHOP) DECLARE_ROM_SEGMENT(Z2_GORONSHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_DEKU_KING) DECLARE_ROM_SEGMENT(Z2_DEKU_KING_room_00) -DECLARE_ROM_SEGMENT(Z2_LAST_GORON) DECLARE_ROM_SEGMENT(Z2_LAST_GORON_room_00) DECLARE_ROM_SEGMENT(Z2_LAST_GORON_room_01) -DECLARE_ROM_SEGMENT(Z2_24KEMONOMITI) DECLARE_ROM_SEGMENT(Z2_24KEMONOMITI_room_00) -DECLARE_ROM_SEGMENT(Z2_F01_B) DECLARE_ROM_SEGMENT(Z2_F01_B_room_00) -DECLARE_ROM_SEGMENT(Z2_F01C) DECLARE_ROM_SEGMENT(Z2_F01C_room_00) -DECLARE_ROM_SEGMENT(Z2_BOTI) DECLARE_ROM_SEGMENT(Z2_BOTI_room_00) DECLARE_ROM_SEGMENT(Z2_BOTI_room_01) -DECLARE_ROM_SEGMENT(Z2_HAKUGIN_BS) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_20SICHITAI) DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_00) DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_01) DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_02) -DECLARE_ROM_SEGMENT(Z2_21MITURINMAE) DECLARE_ROM_SEGMENT(Z2_21MITURINMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_LAST_ZORA) DECLARE_ROM_SEGMENT(Z2_LAST_ZORA_room_00) -DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2_room_00) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2_room_01) -DECLARE_ROM_SEGMENT(Z2_SEA) DECLARE_ROM_SEGMENT(Z2_SEA_room_00) DECLARE_ROM_SEGMENT(Z2_SEA_room_01) DECLARE_ROM_SEGMENT(Z2_SEA_room_02) @@ -434,10 +373,8 @@ DECLARE_ROM_SEGMENT(Z2_SEA_room_13) DECLARE_ROM_SEGMENT(Z2_SEA_room_14) DECLARE_ROM_SEGMENT(Z2_SEA_room_15) -DECLARE_ROM_SEGMENT(Z2_35TAKI) DECLARE_ROM_SEGMENT(Z2_35TAKI_room_00) -DECLARE_ROM_SEGMENT(Z2_REDEAD) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_00) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_01) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_02) @@ -453,31 +390,24 @@ DECLARE_ROM_SEGMENT(Z2_REDEAD_room_11) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_12) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_13) -DECLARE_ROM_SEGMENT(Z2_BANDROOM) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_00) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_01) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_02) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_03) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_04) -DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO_room_00) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO_room_01) -DECLARE_ROM_SEGMENT(Z2_GORON_HAKA) DECLARE_ROM_SEGMENT(Z2_GORON_HAKA_room_00) -DECLARE_ROM_SEGMENT(Z2_SECOM) DECLARE_ROM_SEGMENT(Z2_SECOM_room_00) DECLARE_ROM_SEGMENT(Z2_SECOM_room_01) -DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA) DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA_room_00) -DECLARE_ROM_SEGMENT(Z2_TOUGITES) DECLARE_ROM_SEGMENT(Z2_TOUGITES_room_00) -DECLARE_ROM_SEGMENT(Z2_DANPEI) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_00) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_01) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_02) @@ -488,48 +418,34 @@ DECLARE_ROM_SEGMENT(Z2_DANPEI_room_06) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_07) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_08) -DECLARE_ROM_SEGMENT(Z2_IKANAMAE) DECLARE_ROM_SEGMENT(Z2_IKANAMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_DOUJOU) DECLARE_ROM_SEGMENT(Z2_DOUJOU_room_00) -DECLARE_ROM_SEGMENT(Z2_MUSICHOUSE) DECLARE_ROM_SEGMENT(Z2_MUSICHOUSE_room_00) -DECLARE_ROM_SEGMENT(Z2_IKNINSIDE) DECLARE_ROM_SEGMENT(Z2_IKNINSIDE_room_00) DECLARE_ROM_SEGMENT(Z2_IKNINSIDE_room_01) -DECLARE_ROM_SEGMENT(Z2_MAP_SHOP) DECLARE_ROM_SEGMENT(Z2_MAP_SHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_F40) DECLARE_ROM_SEGMENT(Z2_F40_room_00) -DECLARE_ROM_SEGMENT(Z2_F41) DECLARE_ROM_SEGMENT(Z2_F41_room_00) -DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2) DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2_room_00) DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2_room_01) -DECLARE_ROM_SEGMENT(Z2_14YUKIDAMANOMITI) DECLARE_ROM_SEGMENT(Z2_14YUKIDAMANOMITI_room_00) -DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE) DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_17SETUGEN) DECLARE_ROM_SEGMENT(Z2_17SETUGEN_room_00) -DECLARE_ROM_SEGMENT(Z2_17SETUGEN2) DECLARE_ROM_SEGMENT(Z2_17SETUGEN2_room_00) -DECLARE_ROM_SEGMENT(Z2_SEA_BS) DECLARE_ROM_SEGMENT(Z2_SEA_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_RANDOM) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_00) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_01) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_02) @@ -537,21 +453,17 @@ DECLARE_ROM_SEGMENT(Z2_RANDOM_room_03) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_04) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_05) -DECLARE_ROM_SEGMENT(Z2_YADOYA) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_00) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_01) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_02) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_03) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_04) -DECLARE_ROM_SEGMENT(Z2_KONPEKI_ENT) DECLARE_ROM_SEGMENT(Z2_KONPEKI_ENT_room_00) -DECLARE_ROM_SEGMENT(Z2_INSIDETOWER) DECLARE_ROM_SEGMENT(Z2_INSIDETOWER_room_00) DECLARE_ROM_SEGMENT(Z2_INSIDETOWER_room_01) -DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_00) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_01) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_02) @@ -562,12 +474,10 @@ DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_06) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_07) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_08) -DECLARE_ROM_SEGMENT(Z2_LOST_WOODS) DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_00) DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_01) DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_02) -DECLARE_ROM_SEGMENT(Z2_LAST_LINK) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_00) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_01) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_02) @@ -577,40 +487,28 @@ DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_05) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_06) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_07) -DECLARE_ROM_SEGMENT(Z2_SOUGEN) DECLARE_ROM_SEGMENT(Z2_SOUGEN_room_00) -DECLARE_ROM_SEGMENT(Z2_BOMYA) DECLARE_ROM_SEGMENT(Z2_BOMYA_room_00) -DECLARE_ROM_SEGMENT(Z2_KYOJINNOMA) DECLARE_ROM_SEGMENT(Z2_KYOJINNOMA_room_00) -DECLARE_ROM_SEGMENT(Z2_KOEPONARACE) DECLARE_ROM_SEGMENT(Z2_KOEPONARACE_room_00) -DECLARE_ROM_SEGMENT(Z2_GORONRACE) DECLARE_ROM_SEGMENT(Z2_GORONRACE_room_00) -DECLARE_ROM_SEGMENT(Z2_TOWN) DECLARE_ROM_SEGMENT(Z2_TOWN_room_00) -DECLARE_ROM_SEGMENT(Z2_ICHIBA) DECLARE_ROM_SEGMENT(Z2_ICHIBA_room_00) -DECLARE_ROM_SEGMENT(Z2_BACKTOWN) DECLARE_ROM_SEGMENT(Z2_BACKTOWN_room_00) -DECLARE_ROM_SEGMENT(Z2_CLOCKTOWER) DECLARE_ROM_SEGMENT(Z2_CLOCKTOWER_room_00) -DECLARE_ROM_SEGMENT(Z2_ALLEY) DECLARE_ROM_SEGMENT(Z2_ALLEY_room_00) -DECLARE_ROM_SEGMENT(SPOT00) DECLARE_ROM_SEGMENT(SPOT00_room_00) -DECLARE_ROM_SEGMENT(KAKUSIANA) DECLARE_ROM_SEGMENT(KAKUSIANA_room_00) DECLARE_ROM_SEGMENT(KAKUSIANA_room_01) DECLARE_ROM_SEGMENT(KAKUSIANA_room_02) diff --git a/include/tables/scene_table.h b/include/tables/scene_table.h new file mode 100644 index 000000000..ebd8cdb03 --- /dev/null +++ b/include/tables/scene_table.h @@ -0,0 +1,229 @@ +/** + * Scene Table + * + * DEFINE_SCENE should be used for non-empty scenes + * - Argument 0: Name of the scene segment in spec + * - Argument 1: Enum value for this scene + * - Argument 2: Title card's text id, or zero for no title card + * - Argument 3: Scene draw config index + * - Argument 4: Restriction flags. See `RESTRICTIONS_SET` on z_parameter.c + * - Argument 5: Persistent cycle flag set: bitwise flags which won't be turned off on a cycle reset (will persist between cycles) + * + * DEFINE_SCENE_UNSET is needed to define empty entries from the original game + * - Argument 0: Enum value for this scene + */ +// Southern Swamp (Clear) +/* 0x00 */ DEFINE_SCENE(Z2_20SICHITAI2, SCENE_20SICHITAI2, 0x116, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 11), 0, 0, (1 << 30))) +/* 0x01 */ DEFINE_SCENE_UNSET(SCENE_UNSET_01) +/* 0x02 */ DEFINE_SCENE_UNSET(SCENE_UNSET_02) +/* 0x03 */ DEFINE_SCENE_UNSET(SCENE_UNSET_03) +/* 0x04 */ DEFINE_SCENE_UNSET(SCENE_UNSET_04) +/* 0x05 */ DEFINE_SCENE_UNSET(SCENE_UNSET_05) +/* 0x06 */ DEFINE_SCENE_UNSET(SCENE_UNSET_06) +// Lone Peak Shrine & Grottos +/* 0x07 */ DEFINE_SCENE(KAKUSIANA, SCENE_KAKUSIANA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 2) | (1 << 10) | (1 << 11))) +// Cutscene Scene +/* 0x08 */ DEFINE_SCENE(SPOT00, SCENE_SPOT00, 0, SCENE_DRAW_CFG_NOTHING, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +/* 0x09 */ DEFINE_SCENE_UNSET(SCENE_UNSET_09) +// Magic Hags' Potion Shop +/* 0x0A */ DEFINE_SCENE(Z2_WITCH_SHOP, SCENE_WITCH_SHOP, 0x11A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Majora's Lair +/* 0x0B */ DEFINE_SCENE(Z2_LAST_BS, SCENE_LAST_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Beneath the Graveyard +/* 0x0C */ DEFINE_SCENE(Z2_HAKASHITA, SCENE_HAKASHITA, 0x113, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Curiosity Shop +/* 0x0D */ DEFINE_SCENE(Z2_AYASHIISHOP, SCENE_AYASHIISHOP, 0x10E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +/* 0x0E */ DEFINE_SCENE_UNSET(SCENE_UNSET_0E) +/* 0x0F */ DEFINE_SCENE_UNSET(SCENE_UNSET_0F) +// Mama's House (Ranch House in PAL) & Barn +/* 0x10 */ DEFINE_SCENE(Z2_OMOYA, SCENE_OMOYA, 0x132, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Honey & Darling's Shop +/* 0x11 */ DEFINE_SCENE(Z2_BOWLING, SCENE_BOWLING, 0x108, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// The Mayor's Residence +/* 0x12 */ DEFINE_SCENE(Z2_SONCHONOIE, SCENE_SONCHONOIE, 0x10B, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Ikana Canyon +/* 0x13 */ DEFINE_SCENE(Z2_IKANA, SCENE_IKANA, 0x141, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 1) | (1 << 30))) +// Pirates' Fortress +/* 0x14 */ DEFINE_SCENE(Z2_KAIZOKU, SCENE_KAIZOKU, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Milk Bar +/* 0x15 */ DEFINE_SCENE(Z2_MILK_BAR, SCENE_MILK_BAR, 0x10C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Stone Tower Temple +/* 0x16 */ DEFINE_SCENE(Z2_INISIE_N, SCENE_INISIE_N, 0x144, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 26), 0, 0, 0)) +// Treasure Chest Shop +/* 0x17 */ DEFINE_SCENE(Z2_TAKARAYA, SCENE_TAKARAYA, 0x109, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_SET(2, 0, 0, 0)) +// Inverted Stone Tower Temple +/* 0x18 */ DEFINE_SCENE(Z2_INISIE_R, SCENE_INISIE_R, 0x144, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 26), 0, 0, 0)) +// Clock Tower Rooftop +/* 0x19 */ DEFINE_SCENE(Z2_OKUJOU, SCENE_OKUJOU, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Before Clock Town +/* 0x1A */ DEFINE_SCENE(Z2_OPENINGDAN, SCENE_OPENINGDAN, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0)) +// Woodfall Temple +/* 0x1B */ DEFINE_SCENE(Z2_MITURIN, SCENE_MITURIN, 0x11F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 12) | (1 << 13) | (1 << 15) | (1 << 20) | (1 << 21) | (1 << 22), 0, 0, 0)) +// Path to Mountain Village +/* 0x1C */ DEFINE_SCENE(Z2_13HUBUKINOMITI, SCENE_13HUBUKINOMITI, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Ancient Castle of Ikana +/* 0x1D */ DEFINE_SCENE(Z2_CASTLE, SCENE_CASTLE, 0x142, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, (1 << 31), 0, (1 << 10))) +// Deku Scrub Playground +/* 0x1E */ DEFINE_SCENE(Z2_DEKUTES, SCENE_DEKUTES, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Odolwa's Lair +/* 0x1F */ DEFINE_SCENE(Z2_MITURIN_BS, SCENE_MITURIN_BS, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Town Shooting Gallery +/* 0x20 */ DEFINE_SCENE(Z2_SYATEKI_MIZU, SCENE_SYATEKI_MIZU, 0x107, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Snowhead Temple +/* 0x21 */ DEFINE_SCENE(Z2_HAKUGIN, SCENE_HAKUGIN, 0x12B, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 5) | (1 << 21) | (1 << 23) | (1 << 24), 0, 0, 0)) +// Milk Road +/* 0x22 */ DEFINE_SCENE(Z2_ROMANYMAE, SCENE_ROMANYMAE, 0x149, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Pirates' Fortress Interior +/* 0x23 */ DEFINE_SCENE(Z2_PIRATE, SCENE_PIRATE, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 12))) +// Swamp Shooting Gallery +/* 0x24 */ DEFINE_SCENE(Z2_SYATEKI_MORI, SCENE_SYATEKI_MORI, 0x11B, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Pinnacle Rock +/* 0x25 */ DEFINE_SCENE(Z2_SINKAI, SCENE_SINKAI, 0x135, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Fairy's Fountain +/* 0x26 */ DEFINE_SCENE(Z2_YOUSEI_IZUMI, SCENE_YOUSEI_IZUMI, 0x13E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Swamp Spider House +/* 0x27 */ DEFINE_SCENE(Z2_KINSTA1, SCENE_KINSTA1, 0x11E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Oceanside Spider House +/* 0x28 */ DEFINE_SCENE(Z2_KINDAN2, SCENE_KINDAN2, 0x13F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Astral Observatory +/* 0x29 */ DEFINE_SCENE(Z2_TENMON_DAI, SCENE_TENMON_DAI, 0x114, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Moon Deku Trial +/* 0x2A */ DEFINE_SCENE(Z2_LAST_DEKU, SCENE_LAST_DEKU, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Deku Palace +/* 0x2B */ DEFINE_SCENE(Z2_22DEKUCITY, SCENE_22DEKUCITY, 0x118, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Mountain Smithy +/* 0x2C */ DEFINE_SCENE(Z2_KAJIYA, SCENE_KAJIYA, 0x127, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Termina Field +/* 0x2D */ DEFINE_SCENE(Z2_00KEIKOKU, SCENE_00KEIKOKU, 0x100, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 4), 0, 0, 0)) +// Post Office +/* 0x2E */ DEFINE_SCENE(Z2_POSTHOUSE, SCENE_POSTHOUSE, 0x111, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_SET(3, 0, 0, 0)) +// Marine Research Lab +/* 0x2F */ DEFINE_SCENE(Z2_LABO, SCENE_LABO, 0x13A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Beneath the Graveyard (Day 3) and Dampe's House +/* 0x30 */ DEFINE_SCENE(Z2_DANPEI2TEST, SCENE_DANPEI2TEST, 0x113, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +/* 0x31 */ DEFINE_SCENE_UNSET(SCENE_UNSET_31) +// Goron Shrine +/* 0x32 */ DEFINE_SCENE(Z2_16GORON_HOUSE, SCENE_16GORON_HOUSE, 0x124, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Zora Hall +/* 0x33 */ DEFINE_SCENE(Z2_33ZORACITY, SCENE_33ZORACITY, 0x136, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Trading Post +/* 0x34 */ DEFINE_SCENE(Z2_8ITEMSHOP, SCENE_8ITEMSHOP, 0x10F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Romani Ranch +/* 0x35 */ DEFINE_SCENE(Z2_F01, SCENE_F01, 0x12E, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Twinmold's Lair +/* 0x36 */ DEFINE_SCENE(Z2_INISIE_BS, SCENE_INISIE_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Great Bay Coast +/* 0x37 */ DEFINE_SCENE(Z2_30GYOSON, SCENE_30GYOSON, 0x134, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 20), 0, 0, (1 << 1) | (1 << 5))) +// Zora Cape +/* 0x38 */ DEFINE_SCENE(Z2_31MISAKI, SCENE_31MISAKI, 0x134, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, (1 << 7))) +// Lottery Shop +/* 0x39 */ DEFINE_SCENE(Z2_TAKARAKUJI, SCENE_TAKARAKUJI, 0x112, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +/* 0x3A */ DEFINE_SCENE_UNSET(SCENE_UNSET_3A) +// Pirates' Fortress Moat +/* 0x3B */ DEFINE_SCENE(Z2_TORIDE, SCENE_TORIDE, 0x138, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Fisherman's Hut +/* 0x3C */ DEFINE_SCENE(Z2_FISHERMAN, SCENE_FISHERMAN, 0x13B, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Goron Shop +/* 0x3D */ DEFINE_SCENE(Z2_GORONSHOP, SCENE_GORONSHOP, 0x129, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Deku King's Chamber +/* 0x3E */ DEFINE_SCENE(Z2_DEKU_KING, SCENE_DEKU_KING, 0x11C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Moon Goron Trial +/* 0x3F */ DEFINE_SCENE(Z2_LAST_GORON, SCENE_LAST_GORON, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Road to Southern Swamp +/* 0x40 */ DEFINE_SCENE(Z2_24KEMONOMITI, SCENE_24KEMONOMITI, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 1) | (1 << 31))) +// Doggy Racetrack +/* 0x41 */ DEFINE_SCENE(Z2_F01_B, SCENE_F01_B, 0x130, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Cucco Shack +/* 0x42 */ DEFINE_SCENE(Z2_F01C, SCENE_F01C, 0x12F, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Ikana Graveyard +/* 0x43 */ DEFINE_SCENE(Z2_BOTI, SCENE_BOTI, 0x106, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Goht's Lair +/* 0x44 */ DEFINE_SCENE(Z2_HAKUGIN_BS, SCENE_HAKUGIN_BS, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Southern Swamp (poison) +/* 0x45 */ DEFINE_SCENE(Z2_20SICHITAI, SCENE_20SICHITAI, 0x116, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 11), 0, 0, (1 << 30))) +// Woodfall +/* 0x46 */ DEFINE_SCENE(Z2_21MITURINMAE, SCENE_21MITURINMAE, 0x117, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0x102, 0, 0, (1 << 10))) +// Moon Zora Trial +/* 0x47 */ DEFINE_SCENE(Z2_LAST_ZORA, SCENE_LAST_ZORA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Goron Village (spring) +/* 0x48 */ DEFINE_SCENE(Z2_11GORONNOSATO2, SCENE_11GORONNOSATO2, 0x123, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Great Bay Temple +/* 0x49 */ DEFINE_SCENE(Z2_SEA, SCENE_SEA, 0x13D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 4) | (1 << 5) | (1 << 6), 0, 0, 0)) +// Waterfall Rapids +/* 0x4A */ DEFINE_SCENE(Z2_35TAKI, SCENE_35TAKI, 0x137, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Beneath the Well +/* 0x4B */ DEFINE_SCENE(Z2_REDEAD, SCENE_REDEAD, 0x145, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Zora Hall Rooms +/* 0x4C */ DEFINE_SCENE(Z2_BANDROOM, SCENE_BANDROOM, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Goron Village (winter) +/* 0x4D */ DEFINE_SCENE(Z2_11GORONNOSATO, SCENE_11GORONNOSATO, 0x123, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Goron Graveyard +/* 0x4E */ DEFINE_SCENE(Z2_GORON_HAKA, SCENE_GORON_HAKA, 0x12A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Sakon's Hideout +/* 0x4F */ DEFINE_SCENE(Z2_SECOM, SCENE_SECOM, 0x143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Mountain Village (winter) +/* 0x50 */ DEFINE_SCENE(Z2_10YUKIYAMANOMURA, SCENE_10YUKIYAMANOMURA, 0x122, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 31))) +// Ghost Hut +/* 0x51 */ DEFINE_SCENE(Z2_TOUGITES, SCENE_TOUGITES, 0x146, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Deku Shrine +/* 0x52 */ DEFINE_SCENE(Z2_DANPEI, SCENE_DANPEI, 0x120, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Road to Ikana +/* 0x53 */ DEFINE_SCENE(Z2_IKANAMAE, SCENE_IKANAMAE, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Swordsman's School +/* 0x54 */ DEFINE_SCENE(Z2_DOUJOU, SCENE_DOUJOU, 0x110, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Music Box House +/* 0x55 */ DEFINE_SCENE(Z2_MUSICHOUSE, SCENE_MUSICHOUSE, 0x147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Igos du Ikana's Lair +/* 0x56 */ DEFINE_SCENE(Z2_IKNINSIDE, SCENE_IKNINSIDE, 0x142, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Tourist Information +/* 0x57 */ DEFINE_SCENE(Z2_MAP_SHOP, SCENE_MAP_SHOP, 0x119, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Stone Tower +/* 0x58 */ DEFINE_SCENE(Z2_F40, SCENE_F40, 0x140, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Inverted Stone Tower +/* 0x59 */ DEFINE_SCENE(Z2_F41, SCENE_F41, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Mountain Village (spring) +/* 0x5A */ DEFINE_SCENE(Z2_10YUKIYAMANOMURA2, SCENE_10YUKIYAMANOMURA2, 0x122, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 31))) +// Path to Snowhead +/* 0x5B */ DEFINE_SCENE(Z2_14YUKIDAMANOMITI, SCENE_14YUKIDAMANOMITI, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 8))) +// Snowhead +/* 0x5C */ DEFINE_SCENE(Z2_12HAKUGINMAE, SCENE_12HAKUGINMAE, 0x125, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Path to Goron Village (winter) +/* 0x5D */ DEFINE_SCENE(Z2_17SETUGEN, SCENE_17SETUGEN, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 7))) +// Path to Goron Village (spring) +/* 0x5E */ DEFINE_SCENE(Z2_17SETUGEN2, SCENE_17SETUGEN2, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 7))) +// Gyorg's Lair +/* 0x5F */ DEFINE_SCENE(Z2_SEA_BS, SCENE_SEA_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Secret Shrine +/* 0x60 */ DEFINE_SCENE(Z2_RANDOM, SCENE_RANDOM, 0x12C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 10))) +// Stock Pot Inn +/* 0x61 */ DEFINE_SCENE(Z2_YADOYA, SCENE_YADOYA, 0x10A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Great Bay Cutscene +/* 0x62 */ DEFINE_SCENE(Z2_KONPEKI_ENT, SCENE_KONPEKI_ENT, 0x139, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Clock Tower Interior +/* 0x63 */ DEFINE_SCENE(Z2_INSIDETOWER, SCENE_INSIDETOWER, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_SET(1 << 0, 0, 0, 0)) +// Woods of Mystery +/* 0x64 */ DEFINE_SCENE(Z2_26SARUNOMORI, SCENE_26SARUNOMORI, 0x11D, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Lost Woods (Intro) +/* 0x65 */ DEFINE_SCENE(Z2_LOST_WOODS, SCENE_LOST_WOODS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Moon Link Trial +/* 0x66 */ DEFINE_SCENE(Z2_LAST_LINK, SCENE_LAST_LINK, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// The Moon +/* 0x67 */ DEFINE_SCENE(Z2_SOUGEN, SCENE_SOUGEN, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_NONE) +// Bomb Shop +/* 0x68 */ DEFINE_SCENE(Z2_BOMYA, SCENE_BOMYA, 0x10D, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Giants' Chamber +/* 0x69 */ DEFINE_SCENE(Z2_KYOJINNOMA, SCENE_KYOJINNOMA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Gorman Track +/* 0x6A */ DEFINE_SCENE(Z2_KOEPONARACE, SCENE_KOEPONARACE, 0x131, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Goron Racetrack +/* 0x6B */ DEFINE_SCENE(Z2_GORONRACE, SCENE_GORONRACE, 0x126, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// East Clock Town +/* 0x6C */ DEFINE_SCENE(Z2_TOWN, SCENE_TOWN, 0x101, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(1, 0, 0, 0)) +// West Clock Town +/* 0x6D */ DEFINE_SCENE(Z2_ICHIBA, SCENE_ICHIBA, 0x102, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// North Clock Town +/* 0x6E */ DEFINE_SCENE(Z2_BACKTOWN, SCENE_BACKTOWN, 0x103, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 10))) +// South Clock Town +/* 0x6F */ DEFINE_SCENE(Z2_CLOCKTOWER, SCENE_CLOCKTOWER, 0x104, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 10))) +// Laundry Pool +/* 0x70 */ DEFINE_SCENE(Z2_ALLEY, SCENE_ALLEY, 0x105, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 1, 0)) diff --git a/include/variables.h b/include/variables.h index dfb0ab791..61ac8824b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -581,7 +581,7 @@ extern s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX]; extern ObjectId gObjectTableSize; extern RomFile gObjectTable[OBJECT_ID_MAX]; -extern SceneTableEntry gSceneTable[]; +extern SceneTableEntry gSceneTable[SCENE_MAX]; extern UNK_PTR D_801C5C50; // extern UNK_TYPE1 D_801C5C9C; extern UNK_PTR D_801C5CB0; @@ -2422,6 +2422,7 @@ extern volatile OSTime sRSPOtherTotalTime; // extern UNK_TYPE1 D_801FBB18; extern volatile OSTime gRDPTotalTime; // extern UNK_TYPE1 D_801FBB28; + extern OSViMode sNotebookViMode; extern void* gFramebuffers[2]; extern OSViMode* gActiveViMode; @@ -2446,6 +2447,7 @@ extern s16 gCfbHeight; extern s16 gCfbLeftAdjust; extern s16 gCfbUpperAdjust; extern u8 gSysCfbHiResEnabled; + extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64scene.h b/include/z64scene.h index c31b7ce58..387d584f5 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -584,123 +584,17 @@ typedef enum { /* 6 */ TINGLE_MAP_MAX } TingleMapId; -typedef enum { - /* 0x00 */ SCENE_20SICHITAI2, // Southern Swamp (Clear) - /* 0x01 */ SCENE_UNSET_1, - /* 0x02 */ SCENE_UNSET_2, - /* 0x03 */ SCENE_UNSET_3, - /* 0x04 */ SCENE_UNSET_4, - /* 0x05 */ SCENE_UNSET_5, - /* 0x06 */ SCENE_UNSET_6, - /* 0x07 */ SCENE_KAKUSIANA, // Lone Peak Shrine & Grottos - /* 0x08 */ SCENE_SPOT00, // Cutscene Scene - /* 0x09 */ SCENE_UNSET_9, - /* 0x0A */ SCENE_WITCH_SHOP, // Magic Hags' Potion Shop - /* 0x0B */ SCENE_LAST_BS, // Majora's Lair - /* 0x0C */ SCENE_HAKASHITA, // Beneath the Graveyard - /* 0x0D */ SCENE_AYASHIISHOP, // Curiosity Shop - /* 0x0E */ SCENE_UNSET_E, - /* 0x0F */ SCENE_UNSET_F, - /* 0x10 */ SCENE_OMOYA, // Mama's House (Ranch House in PAL) & Barn - /* 0x11 */ SCENE_BOWLING, // Honey & Darling's Shop - /* 0x12 */ SCENE_SONCHONOIE, // The Mayor's Residence - /* 0x13 */ SCENE_IKANA, // Ikana Canyon - /* 0x14 */ SCENE_KAIZOKU, // Pirates' Fortress - /* 0x15 */ SCENE_MILK_BAR, // Milk Bar - /* 0x16 */ SCENE_INISIE_N, // Stone Tower Temple - /* 0x17 */ SCENE_TAKARAYA, // Treasure Chest Shop - /* 0x18 */ SCENE_INISIE_R, // Inverted Stone Tower Temple - /* 0x19 */ SCENE_OKUJOU, // Clock Tower Rooftop - /* 0x1A */ SCENE_OPENINGDAN, // Before Clock Town - /* 0x1B */ SCENE_MITURIN, // Woodfall Temple - /* 0x1C */ SCENE_13HUBUKINOMITI, // Path to Mountain Village - /* 0x1D */ SCENE_CASTLE, // Ancient Castle of Ikana - /* 0x1E */ SCENE_DEKUTES, // Deku Scrub Playground - /* 0x1F */ SCENE_MITURIN_BS, // Odolwa's Lair - /* 0x20 */ SCENE_SYATEKI_MIZU, // Town Shooting Gallery - /* 0x21 */ SCENE_HAKUGIN, // Snowhead Temple - /* 0x22 */ SCENE_ROMANYMAE, // Milk Road - /* 0x23 */ SCENE_PIRATE, // Pirates' Fortress Interior - /* 0x24 */ SCENE_SYATEKI_MORI, // Swamp Shooting Gallery - /* 0x25 */ SCENE_SINKAI, // Pinnacle Rock - /* 0x26 */ SCENE_YOUSEI_IZUMI, // Fairy's Fountain - /* 0x27 */ SCENE_KINSTA1, // Swamp Spider House - /* 0x28 */ SCENE_KINDAN2, // Oceanside Spider House - /* 0x29 */ SCENE_TENMON_DAI, // Astral Observatory - /* 0x2A */ SCENE_LAST_DEKU, // Moon Deku Trial - /* 0x2B */ SCENE_22DEKUCITY, // Deku Palace - /* 0x2C */ SCENE_KAJIYA, // Mountain Smithy - /* 0x2D */ SCENE_00KEIKOKU, // Termina Field - /* 0x2E */ SCENE_POSTHOUSE, // Post Office - /* 0x2F */ SCENE_LABO, // Marine Research Lab - /* 0x30 */ SCENE_DANPEI2TEST, // Beneath the Graveyard (Day 3) and Dampe's House - /* 0x31 */ SCENE_UNSET_31, - /* 0x32 */ SCENE_16GORON_HOUSE, // Goron Shrine - /* 0x33 */ SCENE_33ZORACITY, // Zora Hall - /* 0x34 */ SCENE_8ITEMSHOP, // Trading Post - /* 0x35 */ SCENE_F01, // Romani Ranch - /* 0x36 */ SCENE_INISIE_BS, // Twinmold's Lair - /* 0x37 */ SCENE_30GYOSON, // Great Bay Coast - /* 0x38 */ SCENE_31MISAKI, // Zora Cape - /* 0x39 */ SCENE_TAKARAKUJI, // Lottery Shop - /* 0x3A */ SCENE_UNSET_3A, - /* 0x3B */ SCENE_TORIDE, // Pirates' Fortress Moat - /* 0x3C */ SCENE_FISHERMAN, // Fisherman's Hut - /* 0x3D */ SCENE_GORONSHOP, // Goron Shop - /* 0x3E */ SCENE_DEKU_KING, // Deku King's Chamber - /* 0x3F */ SCENE_LAST_GORON, // Moon Goron Trial - /* 0x40 */ SCENE_24KEMONOMITI, // Road to Southern Swamp - /* 0x41 */ SCENE_F01_B, // Doggy Racetrack - /* 0x42 */ SCENE_F01C, // Cucco Shack - /* 0x43 */ SCENE_BOTI, // Ikana Graveyard - /* 0x44 */ SCENE_HAKUGIN_BS, // Goht's Lair - /* 0x45 */ SCENE_20SICHITAI, // Southern Swamp (poison) - /* 0x46 */ SCENE_21MITURINMAE, // Woodfall - /* 0x47 */ SCENE_LAST_ZORA, // Moon Zora Trial - /* 0x48 */ SCENE_11GORONNOSATO2, // Goron Village (spring) - /* 0x49 */ SCENE_SEA, // Great Bay Temple - /* 0x4A */ SCENE_35TAKI, // Waterfall Rapids - /* 0x4B */ SCENE_REDEAD, // Beneath the Well - /* 0x4C */ SCENE_BANDROOM, // Zora Hall Rooms - /* 0x4D */ SCENE_11GORONNOSATO, // Goron Village (winter) - /* 0x4E */ SCENE_GORON_HAKA, // Goron Graveyard - /* 0x4F */ SCENE_SECOM, // Sakon's Hideout - /* 0x50 */ SCENE_10YUKIYAMANOMURA, // Mountain Village (winter) - /* 0x51 */ SCENE_TOUGITES, // Ghost Hut - /* 0x52 */ SCENE_DANPEI, // Deku Shrine - /* 0x53 */ SCENE_IKANAMAE, // Road to Ikana - /* 0x54 */ SCENE_DOUJOU, // Swordsman's School - /* 0x55 */ SCENE_MUSICHOUSE, // Music Box House - /* 0x56 */ SCENE_IKNINSIDE, // Igos du Ikana's Lair - /* 0x57 */ SCENE_MAP_SHOP, // Tourist Information - /* 0x58 */ SCENE_F40, // Stone Tower - /* 0x59 */ SCENE_F41, // Inverted Stone Tower - /* 0x5A */ SCENE_10YUKIYAMANOMURA2, // Mountain Village (spring) - /* 0x5B */ SCENE_14YUKIDAMANOMITI, // Path to Snowhead - /* 0x5C */ SCENE_12HAKUGINMAE, // Snowhead - /* 0x5D */ SCENE_17SETUGEN, // Path to Goron Village (winter) - /* 0x5E */ SCENE_17SETUGEN2, // Path to Goron Village (spring) - /* 0x5F */ SCENE_SEA_BS, // Gyorg's Lair - /* 0x60 */ SCENE_RANDOM, // Secret Shrine - /* 0x61 */ SCENE_YADOYA, // Stock Pot Inn - /* 0x62 */ SCENE_KONPEKI_ENT, // Great Bay Cutscene - /* 0x63 */ SCENE_INSIDETOWER, // Clock Tower Interior - /* 0x64 */ SCENE_26SARUNOMORI, // Woods of Mystery - /* 0x65 */ SCENE_LOST_WOODS, // Lost Woods (Intro) - /* 0x66 */ SCENE_LAST_LINK, // Moon Link Trial - /* 0x67 */ SCENE_SOUGEN, // The Moon - /* 0x68 */ SCENE_BOMYA, // Bomb Shop - /* 0x69 */ SCENE_KYOJINNOMA, // Giants' Chamber - /* 0x6A */ SCENE_KOEPONARACE, // Gorman Track - /* 0x6B */ SCENE_GORONRACE, // Goron Racetrack - /* 0x6C */ SCENE_TOWN, // East Clock Town - /* 0x6D */ SCENE_ICHIBA, // West Clock Town - /* 0x6E */ SCENE_BACKTOWN, // North Clock Town - /* 0x6F */ SCENE_CLOCKTOWER, // South Clock Town - /* 0x70 */ SCENE_ALLEY, // Laundry Pool +#define DEFINE_SCENE(_name, enumValue, _textId, _drawConfig, _restrictionFlags, _persistentCycleFlags) enumValue, +#define DEFINE_SCENE_UNSET(enumValue) enumValue, + +typedef enum SceneId { + #include "tables/scene_table.h" /* 0x71 */ SCENE_MAX } SceneId; +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + typedef enum { /* 0x00 */ ENTR_SCENE_MAYORS_RESIDENCE, /* 0x01 */ ENTR_SCENE_MAJORAS_LAIR, diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c index 4745ad5c8..78eed1a77 100644 --- a/src/boot_O2_g3/CIC6105.c +++ b/src/boot_O2_g3/CIC6105.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" UNK_TYPE4 D_8009BE30; diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index 3517b97ae..aa7ecdfe1 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" u8 sYaz0DataBuffer[0x400]; diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 16c39855c..29d6e39c4 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "buffers.h" #include "system_malloc.h" diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 89b148942..91a1d6b06 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -42,6 +42,7 @@ * -Y +Z -Y * */ + #include "global.h" #include "z64quake.h" #include "z64shrink_window.h" diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 775b68f01..186608729 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -273,6 +273,7 @@ void EffectSS_DrawAllParticles(PlayState* play) { s16 func_800B096C(s16 arg0, s16 arg1, s32 arg2) { s16 ret = (arg2 == 0) ? arg1 : arg0 + (s32)((arg1 - arg0) / (f32)arg2); + return ret; } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index d0558d7f8..86b6d0107 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -73,125 +73,21 @@ Input sPostmanTimerInput[MAXCONTROLLERS]; #define RESTRICTIONS_MOON RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0) #define RESTRICTIONS_NO_DOUBLE_TIME RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0) +#define DEFINE_SCENE(_name, enumValue, _textId, _drawConfig, restrictionFlags, _persistentCycleFlags) \ + { enumValue, restrictionFlags }, + +#define DEFINE_SCENE_UNSET(enumValue) { enumValue, RESTRICTIONS_NONE }, + RestrictionFlags sRestrictionFlags[] = { - { SCENE_20SICHITAI2, RESTRICTIONS_NONE }, - { SCENE_UNSET_1, RESTRICTIONS_NONE }, - { SCENE_UNSET_2, RESTRICTIONS_NONE }, - { SCENE_UNSET_3, RESTRICTIONS_NONE }, - { SCENE_UNSET_4, RESTRICTIONS_NONE }, - { SCENE_UNSET_5, RESTRICTIONS_NONE }, - { SCENE_UNSET_6, RESTRICTIONS_NONE }, - { SCENE_KAKUSIANA, RESTRICTIONS_NONE }, - { SCENE_SPOT00, RESTRICTIONS_NONE }, - { SCENE_UNSET_9, RESTRICTIONS_NONE }, - { SCENE_WITCH_SHOP, RESTRICTIONS_INDOORS }, - { SCENE_LAST_BS, RESTRICTIONS_MOON }, - { SCENE_HAKASHITA, RESTRICTIONS_NONE }, - { SCENE_AYASHIISHOP, RESTRICTIONS_INDOORS }, - { SCENE_UNSET_E, RESTRICTIONS_NONE }, - { SCENE_UNSET_F, RESTRICTIONS_NONE }, - { SCENE_OMOYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0) }, - { SCENE_BOWLING, RESTRICTIONS_INDOORS }, - { SCENE_SONCHONOIE, RESTRICTIONS_INDOORS }, - { SCENE_IKANA, RESTRICTIONS_NONE }, - { SCENE_KAIZOKU, RESTRICTIONS_NONE }, - { SCENE_MILK_BAR, RESTRICTIONS_INDOORS }, - { SCENE_INISIE_N, RESTRICTIONS_NONE }, - { SCENE_TAKARAYA, RESTRICTIONS_INDOORS }, - { SCENE_INISIE_R, RESTRICTIONS_NONE }, - { SCENE_OKUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) }, - { SCENE_OPENINGDAN, RESTRICTIONS_NONE }, - { SCENE_MITURIN, RESTRICTIONS_NONE }, - { SCENE_13HUBUKINOMITI, RESTRICTIONS_NONE }, - { SCENE_CASTLE, RESTRICTIONS_NONE }, - { SCENE_DEKUTES, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1) }, - { SCENE_MITURIN_BS, RESTRICTIONS_NONE }, - { SCENE_SYATEKI_MIZU, RESTRICTIONS_INDOORS }, - { SCENE_HAKUGIN, RESTRICTIONS_NONE }, - { SCENE_ROMANYMAE, RESTRICTIONS_NONE }, - { SCENE_PIRATE, RESTRICTIONS_NONE }, - { SCENE_SYATEKI_MORI, RESTRICTIONS_INDOORS }, - { SCENE_SINKAI, RESTRICTIONS_NONE }, - { SCENE_YOUSEI_IZUMI, RESTRICTIONS_NONE }, - { SCENE_KINSTA1, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_KINDAN2, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_TENMON_DAI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0) }, - { SCENE_LAST_DEKU, RESTRICTIONS_MOON }, - { SCENE_22DEKUCITY, RESTRICTIONS_NONE }, - { SCENE_KAJIYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_00KEIKOKU, RESTRICTIONS_NONE }, - { SCENE_POSTHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_LABO, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_DANPEI2TEST, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_UNSET_31, RESTRICTIONS_NONE }, - { SCENE_16GORON_HOUSE, RESTRICTIONS_NONE }, - { SCENE_33ZORACITY, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0) }, - { SCENE_8ITEMSHOP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_F01, RESTRICTIONS_NONE }, - { SCENE_INISIE_BS, RESTRICTIONS_NONE }, - { SCENE_30GYOSON, RESTRICTIONS_NONE }, - { SCENE_31MISAKI, RESTRICTIONS_NONE }, - { SCENE_TAKARAKUJI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_UNSET_3A, RESTRICTIONS_NONE }, - { SCENE_TORIDE, RESTRICTIONS_NONE }, - { SCENE_FISHERMAN, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_GORONSHOP, RESTRICTIONS_INDOORS }, - { SCENE_DEKU_KING, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_LAST_GORON, RESTRICTIONS_MOON }, - { SCENE_24KEMONOMITI, RESTRICTIONS_NONE }, - { SCENE_F01_B, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_F01C, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_BOTI, RESTRICTIONS_NONE }, - { SCENE_HAKUGIN_BS, RESTRICTIONS_NONE }, - { SCENE_20SICHITAI, RESTRICTIONS_NONE }, - { SCENE_21MITURINMAE, RESTRICTIONS_NONE }, - { SCENE_LAST_ZORA, RESTRICTIONS_MOON }, - { SCENE_11GORONNOSATO2, RESTRICTIONS_NONE }, - { SCENE_SEA, RESTRICTIONS_NONE }, - { SCENE_35TAKI, RESTRICTIONS_NONE }, - { SCENE_REDEAD, RESTRICTIONS_NONE }, - { SCENE_BANDROOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_11GORONNOSATO, RESTRICTIONS_NONE }, - { SCENE_GORON_HAKA, RESTRICTIONS_NONE }, - { SCENE_SECOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0) }, - { SCENE_10YUKIYAMANOMURA, RESTRICTIONS_NONE }, - { SCENE_TOUGITES, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) }, - { SCENE_DANPEI, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_IKANAMAE, RESTRICTIONS_NONE }, - { SCENE_DOUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_MUSICHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_IKNINSIDE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0) }, - { SCENE_MAP_SHOP, RESTRICTIONS_INDOORS }, - { SCENE_F40, RESTRICTIONS_NONE }, - { SCENE_F41, RESTRICTIONS_NONE }, - { SCENE_10YUKIYAMANOMURA2, RESTRICTIONS_NONE }, - { SCENE_14YUKIDAMANOMITI, RESTRICTIONS_NONE }, - { SCENE_12HAKUGINMAE, RESTRICTIONS_NONE }, - { SCENE_17SETUGEN, RESTRICTIONS_NONE }, - { SCENE_17SETUGEN2, RESTRICTIONS_NONE }, - { SCENE_SEA_BS, RESTRICTIONS_NONE }, - { SCENE_RANDOM, RESTRICTIONS_NONE }, - { SCENE_YADOYA, RESTRICTIONS_INDOORS }, - { SCENE_KONPEKI_ENT, RESTRICTIONS_NONE }, - { SCENE_INSIDETOWER, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0) }, - { SCENE_26SARUNOMORI, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_LOST_WOODS, RESTRICTIONS_NONE }, - { SCENE_LAST_LINK, RESTRICTIONS_MOON }, - { SCENE_SOUGEN, RESTRICTIONS_MOON }, - { SCENE_BOMYA, RESTRICTIONS_INDOORS }, - { SCENE_KYOJINNOMA, RESTRICTIONS_NONE }, - { SCENE_KOEPONARACE, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_GORONRACE, RESTRICTIONS_NONE }, - { SCENE_TOWN, RESTRICTIONS_NONE }, - { SCENE_ICHIBA, RESTRICTIONS_NONE }, - { SCENE_BACKTOWN, RESTRICTIONS_NONE }, - { SCENE_CLOCKTOWER, RESTRICTIONS_NONE }, - { SCENE_ALLEY, RESTRICTIONS_NONE }, +#include "tables/scene_table.h" // { RESTRICTIONS_TABLE_END, RESTRICTIONS_NONE }, // See note below }; //! @note: in `Interface_SetSceneRestrictions`, `RESTRICTIONS_TABLE_END` act as a terminating value to // stop looping through the array. If a scene is missing, then this will cause issues. +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + s16 sPictoState = PICTO_BOX_STATE_OFF; s16 sPictoPhotoBeingTaken = false; diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index a109dab17..6aee18baf 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #define FLAGS \ diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c index 6ec3f2b80..c899b4d83 100644 --- a/src/code/z_scene_proc.c +++ b/src/code/z_scene_proc.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" s32 sMatAnimStep; diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c index f80ad551d..e31e4b185 100644 --- a/src/code/z_scene_table.c +++ b/src/code/z_scene_table.c @@ -1,127 +1,27 @@ #include "global.h" -#define SCENE_ENTRY(name, textId, config) \ - { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0, 0 } +#define DEFINE_SCENE(name, _enumValue, textId, drawConfig, _restrictionFlags, _persistentCycleFlags) \ + DECLARE_ROM_SEGMENT(name) -#define SCENE_ENTRY_NONE() \ - { { 0, 0 }, 0, 0, 0, 0, 0 } +#define DEFINE_SCENE_UNSET(_enumValue) -SceneTableEntry gSceneTable[] = { - /* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x01 */ SCENE_ENTRY_NONE(), - /* 0x02 */ SCENE_ENTRY_NONE(), - /* 0x03 */ SCENE_ENTRY_NONE(), - /* 0x04 */ SCENE_ENTRY_NONE(), - /* 0x05 */ SCENE_ENTRY_NONE(), - /* 0x06 */ SCENE_ENTRY_NONE(), - /* 0x07 */ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x08 */ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING), - /* 0x09 */ SCENE_ENTRY_NONE(), - /* 0x0A */ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0B */ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0C */ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0D */ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0E */ SCENE_ENTRY_NONE(), - /* 0x0F */ SCENE_ENTRY_NONE(), - /* 0x10 */ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT), - /* 0x11 */ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x12 */ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT), - /* 0x13 */ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x14 */ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x15 */ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x16 */ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x17 */ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT), - /* 0x18 */ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x19 */ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x1A */ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1B */ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1C */ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x1D */ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1E */ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1F */ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x20 */ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x21 */ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x22 */ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT), - /* 0x23 */ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x24 */ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT), - /* 0x25 */ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x26 */ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x27 */ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x28 */ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x29 */ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2A */ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x2B */ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2C */ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2D */ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2E */ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT), - /* 0x2F */ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x30 */ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x31 */ SCENE_ENTRY_NONE(), - /* 0x32 */ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT), - /* 0x33 */ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x34 */ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x35 */ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT), - /* 0x36 */ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x37 */ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x38 */ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x39 */ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT), - /* 0x3A */ SCENE_ENTRY_NONE(), - /* 0x3B */ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3C */ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3D */ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3E */ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3F */ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x40 */ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x41 */ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT), - /* 0x42 */ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT), - /* 0x43 */ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT), - /* 0x44 */ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x45 */ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x46 */ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x47 */ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x48 */ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x49 */ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE), - /* 0x4A */ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4B */ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4C */ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4D */ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4E */ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4F */ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP), - /* 0x50 */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x51 */ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT), - /* 0x52 */ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x53 */ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x54 */ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT), - /* 0x55 */ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP), - /* 0x56 */ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x57 */ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT), - /* 0x58 */ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT), - /* 0x59 */ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x5A */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5B */ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x5C */ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5D */ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5E */ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5F */ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x60 */ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x61 */ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x62 */ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x63 */ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x64 */ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x65 */ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x66 */ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x67 */ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x68 */ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT), - /* 0x69 */ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x6A */ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x6B */ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT), - /* 0x6C */ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT), - /* 0x6D */ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT), - /* 0x6E */ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT), - /* 0x6F */ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x70 */ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM), +#include "tables/scene_table.h" + +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + +#define DEFINE_SCENE(name, _enumValue, textId, drawConfig, _restrictionFlags, _persistentCycleFlags) \ + { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, drawConfig, 0, 0 }, + +#define DEFINE_SCENE_UNSET(_enumValue) { 0 }, + +SceneTableEntry gSceneTable[SCENE_MAX] = { +#include "tables/scene_table.h" }; +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + static EntranceTableEntry sMayorsResidenceEntrance0[] = { { SCENE_SONCHONOIE, 0, 0x4102 }, }; diff --git a/src/code/z_skin.c b/src/code/z_skin.c index 9bfd8d566..0d3e0bf85 100644 --- a/src/code/z_skin.c +++ b/src/code/z_skin.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64skin.h" diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index c10c1943e..6556adfa7 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -10,128 +10,30 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2); ((newf)[0] != 'Z' || (newf)[1] != 'E' || (newf)[2] != 'L' || (newf)[3] != 'D' || (newf)[4] != 'A' || \ (newf)[5] != '3') -// default scene flags (?) -// indices of subarray: -// - 0: switch0 -// - 1: switch1 -// - 2: chest -// - 3: collectible -u32 D_801C5FC0[SCENE_MAX][4] = { - { 0xC00, 0, 0, 0x40000000 }, // SCENE_20SICHITAI2 - { 0, 0, 0, 0 }, // SCENE_UNSET_1 - { 0, 0, 0, 0 }, // SCENE_UNSET_2 - { 0, 0, 0, 0 }, // SCENE_UNSET_3 - { 0, 0, 0, 0 }, // SCENE_UNSET_4 - { 0, 0, 0, 0 }, // SCENE_UNSET_5 - { 0, 0, 0, 0 }, // SCENE_UNSET_6 - { 0, 0, 0, 0xC04 }, // SCENE_KAKUSIANA - { 0, 0, 0, 0 }, // SCENE_SPOT00 - { 0, 0, 0, 0 }, // SCENE_UNSET_9 - { 0, 0, 0, 0 }, // SCENE_WITCH_SHOP - { 0, 0, 0, 0x80000000 }, // SCENE_LAST_BS - { 0, 0, 0, 0x80000000 }, // SCENE_HAKASHITA - { 0, 0, 0, 0 }, // SCENE_AYASHIISHOP - { 0, 0, 0, 0 }, // SCENE_UNSET_E - { 0, 0, 0, 0 }, // SCENE_UNSET_F - { 0, 0, 0, 0 }, // SCENE_OMOYA - { 0, 0, 0, 0 }, // SCENE_BOWLING - { 0, 0, 0, 0 }, // SCENE_SONCHONOIE - { 0x100000, 0, 0, 0x40000002 }, // SCENE_IKANA - { 0, 0, 0, 0 }, // SCENE_KAIZOKU - { 0, 0, 0, 0 }, // SCENE_MILK_BAR - { 0x4000000, 0, 0, 0 }, // SCENE_INISIE_N - { 2, 0, 0, 0 }, // SCENE_TAKARAYA - { 0x4000000, 0, 0, 0 }, // SCENE_INISIE_R - { 0, 0, 0, 0 }, // SCENE_OKUJOU - { 0xF, 0, 0, 0 }, // SCENE_OPENINGDAN - { 0x70B000, 0, 0, 0 }, // SCENE_MITURIN - { 0, 0, 0, 0 }, // SCENE_13HUBUKINOMITI - { 0, 0x80000000, 0, 0x400 }, // SCENE_CASTLE - { 0, 0, 0, 0 }, // SCENE_DEKUTES - { 0, 0, 0, 0x80000000 }, // SCENE_MITURIN_BS - { 0, 0, 0, 0 }, // SCENE_SYATEKI_MIZU - { 0x1A00020, 0, 0, 0 }, // SCENE_HAKUGIN - { 0x400, 0, 0, 0 }, // SCENE_ROMANYMAE - { 0, 0, 0, 0x1000 }, // SCENE_PIRATE - { 0, 0, 0, 0 }, // SCENE_SYATEKI_MORI - { 0, 0, 0, 2 }, // SCENE_SINKAI - { 0x400, 0, 0, 0 }, // SCENE_YOUSEI_IZUMI - { 0, 0, 0, 0 }, // SCENE_KINSTA1 - { 0, 0, 0, 0x80000000 }, // SCENE_KINDAN2 - { 0, 0, 0, 0 }, // SCENE_TENMON_DAI - { 0, 0, 0, 2 }, // SCENE_LAST_DEKU - { 0, 0, 0, 0x40000000 }, // SCENE_22DEKUCITY - { 0, 0, 0, 0 }, // SCENE_KAJIYA - { 0x10, 0, 0, 0 }, // SCENE_00KEIKOKU - { 3, 0, 0, 0 }, // SCENE_POSTHOUSE - { 0, 0, 0, 0 }, // SCENE_LABO - { 0, 0, 0, 0x80000000 }, // SCENE_DANPEI2TEST - { 0, 0, 0, 0 }, // SCENE_UNSET_31 - { 0, 0, 0, 0 }, // SCENE_16GORON_HOUSE - { 0, 0, 0, 0 }, // SCENE_33ZORACITY - { 0, 0, 0, 0 }, // SCENE_8ITEMSHOP - { 0, 0, 0, 0 }, // SCENE_F01 - { 0, 0, 0, 0x80000000 }, // SCENE_INISIE_BS - { 0x100400, 0, 0, 0x22 }, // SCENE_30GYOSON - { 0x400, 0, 0, 0x80 }, // SCENE_31MISAKI - { 0, 0, 0, 0 }, // SCENE_TAKARAKUJI - { 0, 0, 0, 0 }, // SCENE_UNSET_3A - { 0x400, 0, 0, 0 }, // SCENE_TORIDE - { 0, 0, 0, 0 }, // SCENE_FISHERMAN - { 0, 0, 0, 0 }, // SCENE_GORONSHOP - { 0, 0, 0, 0 }, // SCENE_DEKU_KING - { 0, 0, 0, 2 }, // SCENE_LAST_GORON - { 0, 0, 0, 0x80000002 }, // SCENE_24KEMONOMITI - { 0, 0, 0, 0 }, // SCENE_F01_B - { 0, 0, 0, 0 }, // SCENE_F01C - { 0, 0, 0, 0 }, // SCENE_BOTI - { 0, 0, 0, 0x80000000 }, // SCENE_HAKUGIN_BS - { 0xC00, 0, 0, 0x40000000 }, // SCENE_20SICHITAI - { 0x102, 0, 0, 0x400 }, // SCENE_21MITURINMAE - { 0, 0, 0, 2 }, // SCENE_LAST_ZORA - { 0, 0, 0, 0x40000000 }, // SCENE_11GORONNOSATO2 - { 0x70, 0, 0, 0 }, // SCENE_SEA - { 0, 0, 0, 0 }, // SCENE_35TAKI - { 0, 0, 0, 0 }, // SCENE_REDEAD - { 0, 0, 0, 0x40000000 }, // SCENE_BANDROOM - { 0, 0, 0, 0x40000000 }, // SCENE_11GORONNOSATO - { 0, 0, 0, 0 }, // SCENE_GORON_HAKA - { 0, 0, 0, 0 }, // SCENE_SECOM - { 0x100000, 0, 0, 0x80000000 }, // SCENE_10YUKIYAMANOMURA - { 0, 0, 0, 0 }, // SCENE_TOUGITES - { 0, 0, 0, 0 }, // SCENE_DANPEI - { 0, 0, 0, 0 }, // SCENE_IKANAMAE - { 0, 0, 0, 0 }, // SCENE_DOUJOU - { 0, 0, 0, 0 }, // SCENE_MUSICHOUSE - { 0, 0, 0, 0 }, // SCENE_IKNINSIDE - { 0, 0, 0, 0 }, // SCENE_MAP_SHOP - { 0x400, 0, 0, 0 }, // SCENE_F40 - { 0x400, 0, 0, 0 }, // SCENE_F41 - { 0x100000, 0, 0, 0x80000000 }, // SCENE_10YUKIYAMANOMURA2 - { 0, 0, 0, 0x100 }, // SCENE_14YUKIDAMANOMITI - { 0x400, 0, 0, 0 }, // SCENE_12HAKUGINMAE - { 0, 0, 0, 0x80 }, // SCENE_17SETUGEN - { 0, 0, 0, 0x80 }, // SCENE_17SETUGEN2 - { 0, 0, 0, 0x80000000 }, // SCENE_SEA_BS - { 0, 0, 0, 0x400 }, // SCENE_RANDOM - { 0, 0, 0, 0 }, // SCENE_YADOYA - { 0, 0, 0, 0 }, // SCENE_KONPEKI_ENT - { 1, 0, 0, 0 }, // SCENE_INSIDETOWER - { 0, 0, 0, 0 }, // SCENE_26SARUNOMORI - { 0, 0, 0, 0 }, // SCENE_LOST_WOODS - { 0, 0, 0, 2 }, // SCENE_LAST_LINK - { 0, 0, 0, 0 }, // SCENE_SOUGEN - { 0, 0, 0, 0 }, // SCENE_BOMYA - { 0, 0, 0, 0 }, // SCENE_KYOJINNOMA - { 0, 0, 0, 0 }, // SCENE_KOEPONARACE - { 0, 0, 0, 0 }, // SCENE_GORONRACE - { 1, 0, 0, 0 }, // SCENE_TOWN - { 0, 0, 0, 0 }, // SCENE_ICHIBA - { 0, 0, 0, 0x400 }, // SCENE_BACKTOWN - { 0x100000, 0, 0, 0x400 }, // SCENE_CLOCKTOWER - { 0, 0, 1, 0 }, // SCENE_ALLEY +typedef struct PersistentCycleFlags { + /* 0x0 */ u32 switch0; + /* 0x4 */ u32 switch1; + /* 0x8 */ u32 chest; + /* 0xC */ u32 collectible; +} PersistentCycleFlags; // size = 0x10 + +#define PERSISTENT_CYCLE_FLAGS_SET(switch0, switch1, chest, collectible) { switch0, switch1, chest, collectible }, +#define PERSISTENT_CYCLE_FLAGS_NONE PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 0) + +#define DEFINE_SCENE(_name, _enumValue, _textId, _drawConfig, _restrictionFlags, persistentCycleFlags) \ + persistentCycleFlags +#define DEFINE_SCENE_UNSET(_enumValue) PERSISTENT_CYCLE_FLAGS_NONE + +/** + * Array of bitwise flags which won't be turned off on a cycle reset (will persist between cycles) + */ +PersistentCycleFlags sPersistentCycleFlags[SCENE_MAX] = { +#include "tables/scene_table.h" }; +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + // TODO: figure out a way to use the WEEKEVENTREG defines here // weekEventReg flags which will be not be cleared on a cycle reset u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { @@ -350,18 +252,21 @@ void Sram_SaveEndOfCycle(PlayState* play) { sceneId = Play_GetOriginalSceneId(play->sceneId); Play_SaveCycleSceneFlags(&play->state); - play->actorCtx.sceneFlags.chest &= D_801C5FC0[sceneId][2]; - play->actorCtx.sceneFlags.switches[0] &= D_801C5FC0[sceneId][0]; - play->actorCtx.sceneFlags.switches[1] &= D_801C5FC0[sceneId][1]; - play->actorCtx.sceneFlags.collectible[0] &= D_801C5FC0[sceneId][3]; + play->actorCtx.sceneFlags.chest &= sPersistentCycleFlags[sceneId].chest; + play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleFlags[sceneId].switch0; + play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleFlags[sceneId].switch1; + play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleFlags[sceneId].collectible; play->actorCtx.sceneFlags.clearedRoom = 0; for (i = 0; i < SCENE_MAX; i++) { - gSaveContext.cycleSceneFlags[i].switch0 = ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & D_801C5FC0[i][0]; - gSaveContext.cycleSceneFlags[i].switch1 = ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & D_801C5FC0[i][1]; - gSaveContext.cycleSceneFlags[i].chest = ((void)0, gSaveContext.cycleSceneFlags[i].chest) & D_801C5FC0[i][2]; + gSaveContext.cycleSceneFlags[i].switch0 = + ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleFlags[i].switch0; + gSaveContext.cycleSceneFlags[i].switch1 = + ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleFlags[i].switch1; + gSaveContext.cycleSceneFlags[i].chest = + ((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleFlags[i].chest; gSaveContext.cycleSceneFlags[i].collectible = - ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & D_801C5FC0[i][3]; + ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleFlags[i].collectible; gSaveContext.cycleSceneFlags[i].clearedRoom = 0; gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0; gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0; diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index 3ed33f45d..cd4420c4a 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" 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 c7fa3d69e..bcc662c9f 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 @@ -4,6 +4,7 @@ * Description: Goron Link Switch */ +#include "prevent_bss_reordering.h" #include "z_bg_hakugin_switch.h" #include "z64rumble.h" #include "objects/object_goronswitch/object_goronswitch.h" 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 aa6291aae..aa2929f28 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -4,7 +4,6 @@ * Description: Igos du Ikana window - curtains and ray effects */ -#include "prevent_bss_reordering.h" #include "z_boss_06.h" #include "z64shrink_window.h" #include "overlays/actors/ovl_En_Knight/z_en_knight.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 ef15c27a9..010106fe5 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -3,7 +3,7 @@ * Overlay: ovl_En_Fishing * 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/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index f400d157f..5d7a5fd5b 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -4,7 +4,6 @@ * Description: Keaton grass */ -#include "prevent_bss_reordering.h" #include "z_en_kusa2.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_keep/gameplay_keep.h" 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 fa378ec68..2606331e2 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -4,6 +4,7 @@ * Description: Soaring effects (wings, sphere, etc) */ +#include "prevent_bss_reordering.h" #include "z_en_test7.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 53b35efa0..6f08583ac 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1935,7 +1935,7 @@ 0x801C5EB0:("D_801C5EB0","UNK_TYPE4","",0x4), 0x801C5EC4:("D_801C5EC4","UNK_TYPE2","",0x2), 0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4), - 0x801C5FC0:("D_801C5FC0","u32","[452]",0x710), + 0x801C5FC0:("sPersistentCycleFlags","u32","[452]",0x710), 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2), 0x801C6798:("D_801C6798","UNK_TYPE4","",0x4), 0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1), From 51cd9df591322c4541ca9697a4ce4a6acde1fad6 Mon Sep 17 00:00:00 2001 From: louist103 <35883445+louist103@users.noreply.github.com> Date: Mon, 29 May 2023 20:39:14 -0400 Subject: [PATCH 32/51] sys_flashrom matched (#1251) * done * WIP * Fix the rebase * fix build * re match * Last thing before the PR * PR fixes * PR Fixes (tharo) * fix * format * PR fixes (hensldm) * oops * MAGIC * Fix BSS and rename FLASH_MAGIC * PR Fixes (Engineer) * remove from functions.h --- include/functions.h | 22 +-- include/z64.h | 29 +++- spec | 1 - src/code/sys_flashrom.c | 257 ++++++++++++++++++++++++++++++--- src/code/title_setup.c | 2 +- src/code/z_sram_NES.c | 81 ++++++----- tools/disasm/functions.txt | 26 ++-- tools/disasm/variables.txt | 10 +- tools/sizes/code_functions.csv | 25 ++-- 9 files changed, 336 insertions(+), 117 deletions(-) diff --git a/include/functions.h b/include/functions.h index 8330903e1..530cedd86 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2222,21 +2222,13 @@ void func_8018450C(PlayState* play, SkeletonInfo* skeleton, Mtx* mtx, OverrideKe // void func_801853C8(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_80185460(void); -// void func_801857C0(void); -// char* func_801857D0(void); -// void func_80185864(void); -u32 func_80185908(void); -UNK_TYPE func_80185968(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2); -// void func_801859F0(void); -// void func_80185A2C(void); -// void func_80185B1C(void); -// void func_80185BE4(void); -// void func_80185C24(void); -void SysFlashrom_ThreadEntry(s80185D40* param_1); -void func_80185DDC(u8* arg0, u32 arg1, u32 arg2); -s32 func_80185EC4(void); -s32 func_80185F04(void); -void func_80185F64(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2); +s32 SysFlashrom_InitFlash(void); +s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount); +void SysFlashrom_WriteDataAsync(u8* addr, u32 pageNum, u32 pageCount); +s32 SysFlashrom_IsBusy(void); +s32 SysFlashrom_AwaitResult(void); +void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount); + s32 func_80185F90(u32 param_1); u32 osFlashGetAddr(u32 pageNum); OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); diff --git a/include/z64.h b/include/z64.h index bbcb860e5..b5597f58c 100644 --- a/include/z64.h +++ b/include/z64.h @@ -68,6 +68,7 @@ #define Z_THREAD_ID_MAIN 3 #define Z_THREAD_ID_GRAPH 4 #define Z_THREAD_ID_SCHED 5 +#define Z_THREAD_ID_FLASHROM 13 #define Z_THREAD_ID_DMAMGR 18 #define Z_THREAD_ID_IRQMGR 19 @@ -76,6 +77,7 @@ #define Z_PRIORITY_AUDIOMGR 11 #define Z_PRIORITY_IDLE 12 #define Z_PRIORITY_MAIN 12 +#define Z_PRIORITY_FLASHROM 13 #define Z_PRIORITY_PADMGR 15 #define Z_PRIORITY_SCHED 16 #define Z_PRIORITY_DMAMGR 17 @@ -118,13 +120,13 @@ typedef struct { } NmiBuff; // size >= 0x18 typedef struct { - /* 0x00 */ int unk0; - /* 0x04 */ void* unk4; - /* 0x08 */ int unk8; - /* 0x0C */ int unkC; - /* 0x10 */ int unk10; - /* 0x14 */ OSMesgQueue unk14; -} s80185D40; // size = 0x2C + /* 0x00 */ s32 requestType; + /* 0x04 */ OSMesg response; + /* 0x08 */ void* addr; + /* 0x0C */ s32 pageNum; + /* 0x10 */ s32 pageCount; + /* 0x14 */ OSMesgQueue messageQueue; +} FlashromRequest; // size = 0x2C // End of RDRAM without the Expansion Pak installed #define NORMAL_RDRAM_END 0x80400000 @@ -642,6 +644,19 @@ typedef struct { #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 + enum fram_command { /* 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 diff --git a/spec b/spec index 5fe02e11f..c7c67d830 100644 --- a/spec +++ b/spec @@ -588,7 +588,6 @@ beginseg include "build/src/code/c_keyframe.o" include "build/src/code/sys_slowly.o" include "build/src/code/sys_flashrom.o" - include "build/data/code/sys_flashrom.bss.o" include "build/asm/code/code_80185F90.text.o" // handwritten include "build/src/libultra/flash/osFlash.o" pad_text diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index 0db0b8744..c2665741e 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -1,44 +1,253 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" #include "system_malloc.h" -// extern UNK_TYPE1 D_801FBE10; -// extern UNK_TYPE1 D_801FBE28; -// extern UNK_TYPE1 D_801FBE2C; -// extern UNK_TYPE4 D_801FBE30; -extern STACK(sSysFlashromStack, 0x1000); -extern StackEntry sSysFlashromStackInfo; -extern OSThread sSysFlashromThread; -extern s80185D40 D_801FD008; -extern OSMesg D_801FD034[1]; +OSMesgQueue sFlashromMesgQueue; +OSMesg sFlashromMesg[1]; +s32 sFlashromIsInit; +s32 sFlashromVendor; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857C0.s") +STACK(sSysFlashromStack, 0x1000); +StackEntry sSysFlashromStackInfo; +OSThread sSysFlashromThread; +FlashromRequest sFlashromRequest; +OSMesg sSysFlashromMsgBuf[1]; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857D0.s") +s32 SysFlashrom_IsInit(void) { + return sFlashromIsInit; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185864.s") +const char* SysFlashrom_GetVendorStr(void) { + switch (sFlashromVendor) { + case FLASH_VERSION_MX_PROTO_A: + return "PROTO A"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185908.s") + case FLASH_VERSION_MX_A: + return "A"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185968.s") + case FLASH_VERSION_MX_C: + return "C"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801859F0.s") + case FLASH_VERSION_MEI: + return "D(NEW)"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185A2C.s") + case FLASH_VERSION_MX_B_AND_D: + return "B or D"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185B1C.s") + default: + return "UNKNOWN"; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185BE4.s") +s32 SysFlashrom_CheckFlashType(void) { + u32 flashType; + u32 flashVendor; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185C24.s") + if (!SysFlashrom_IsInit()) { + return -1; + } + osFlashReadId(&flashType, &flashVendor); + sFlashromVendor = flashVendor; + if (flashType == FLASH_TYPE_MAGIC) { + if ((flashVendor == FLASH_VERSION_MX_PROTO_A) || (flashVendor == FLASH_VERSION_MX_A) || + (flashVendor == FLASH_VERSION_MX_C) || (flashVendor == FLASH_VERSION_MEI) || + (flashVendor == FLASH_VERSION_MX_B_AND_D)) { + return 0; + } else { + return -1; + } + } + return -1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/SysFlashrom_ThreadEntry.s") +s32 SysFlashrom_InitFlash(void) { + osCreateMesgQueue(&sFlashromMesgQueue, sFlashromMesg, ARRAY_COUNT(sFlashromMesg)); + osFlashInit(); + sFlashromIsInit = true; + if (SysFlashrom_CheckFlashType() != 0) { + sFlashromIsInit = false; + return -1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185DDC.s") +s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) { + OSIoMesg msg; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185EC4.s") + if (!SysFlashrom_IsInit()) { + return -1; + } + osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE); + osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue); + osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185F04.s") +s32 SysFlashrom_EraseSector(u32 page) { + if (!SysFlashrom_IsInit()) { + return -1; + } + return osFlashSectorErase(page); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185F64.s") +s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) { + OSIoMesg msg; + s32 result; + u32 i; + + if (!SysFlashrom_IsInit()) { + return -1; + } + // Ensure the page is always aligned to a sector boundary. + if ((pageNum % FLASH_PAGE_SIZE) != 0) { + Fault_AddHungupAndCrash("../sys_flashrom.c", 275); + } + osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + for (i = 0; i < pageCount; i++) { + osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue); + osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); + result = osFlashWriteArray(i + pageNum); + if (result != 0) { + return result; + } + } + return 0; +} + +s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) { + s32 result; + s32 i; + + if (!SysFlashrom_IsInit()) { + return -1; + } + osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + i = 0; +failRetry: + result = SysFlashrom_EraseSector(pageNum); + if (result != 0) { + if (i < 3) { + i++; + goto failRetry; + } + return result; + } + result = SysFlashrom_ExecWrite(addr, pageNum, pageCount); + if (result != 0) { + if (i < 3) { + i++; + goto failRetry; + } + return result; + } + return 0; +} + +// Flash bits can only by flipped with a write from 1 -> 0. Going from 0 -> 1 requires an erasure. +// This function will try to determine if any sectors need to be erased before writing saving erase cycles. +s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) { + u32 size; + u32 i; + + for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) { + if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) { + return false; + } + } + return true; +} + +s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) { + void* data; + size_t size; + s32 ret; + + if (!SysFlashrom_IsInit()) { + return -1; + } + size = pageCount * FLASH_PAGE_SIZE; + data = SystemArena_Malloc(size); + if (data == NULL) { + ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); + } else { + SysFlashrom_ReadData(data, pageNum, pageCount); + if (bcmp(data, addr, size) == 0) { + ret = 0; + } else { + // Will always erase the sector even if it wouldn't normally need to. + if (SysFlashrom_NeedsToErase(data, addr, pageCount)) { + ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); + } else { + ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); + } + if (ret == 0) { + SysFlashrom_ReadData(data, pageNum, pageCount); + if (bcmp(data, addr, size) == 0) { + ret = 0; + } else { + ret = -1; + } + } + } + SystemArena_Free(data); + } + return ret; +} + +void SysFlashrom_ThreadEntry(void* arg) { + FlashromRequest* req = (FlashromRequest*)arg; + + switch (req->requestType) { + case FLASHROM_REQUEST_WRITE: + req->response = SysFlashrom_WriteData(req->addr, req->pageNum, req->pageCount); + osSendMesg(&req->messageQueue, req->response, OS_MESG_BLOCK); + break; + + case FLASHROM_REQUEST_READ: + req->response = SysFlashrom_ReadData(req->addr, req->pageNum, req->pageCount); + osSendMesg(&req->messageQueue, req->response, OS_MESG_BLOCK); + break; + } +} + +void SysFlashrom_WriteDataAsync(u8* addr, u32 pageNum, u32 pageCount) { + FlashromRequest* req = &sFlashromRequest; + if (SysFlashrom_IsInit()) { + req->requestType = FLASHROM_REQUEST_WRITE; + req->addr = addr; + req->pageNum = pageNum; + req->pageCount = pageCount; + osCreateMesgQueue(&req->messageQueue, sSysFlashromMsgBuf, ARRAY_COUNT(sSysFlashromMsgBuf)); + StackCheck_Init(&sSysFlashromStackInfo, sSysFlashromStack, STACK_TOP(sSysFlashromStack), 0, 0x100, + "sys_flashrom"); + osCreateThread(&sSysFlashromThread, Z_THREAD_ID_FLASHROM, SysFlashrom_ThreadEntry, req, + STACK_TOP(sSysFlashromStack), Z_PRIORITY_FLASHROM); + osStartThread(&sSysFlashromThread); + } +} + +s32 SysFlashrom_IsBusy(void) { + OSMesgQueue* queue = &sFlashromRequest.messageQueue; + + if (!SysFlashrom_IsInit()) { + return -1; + } + return MQ_IS_FULL(queue); +} + +s32 SysFlashrom_AwaitResult(void) { + if (!SysFlashrom_IsInit()) { + return -1; + } + osRecvMesg(&sFlashromRequest.messageQueue, NULL, OS_MESG_BLOCK); + osDestroyThread(&sSysFlashromThread); + StackCheck_Cleanup(&sSysFlashromStackInfo); + return sFlashromRequest.response; +} + +void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount) { + SysFlashrom_WriteDataAsync(addr, pageNum, pageCount); + SysFlashrom_AwaitResult(); +} diff --git a/src/code/title_setup.c b/src/code/title_setup.c index 4e9293ce7..841c301e2 100644 --- a/src/code/title_setup.c +++ b/src/code/title_setup.c @@ -48,7 +48,7 @@ void Setup_SetRegs(void) { } void Setup_InitImpl(SetupState* this) { - func_80185908(); + SysFlashrom_InitFlash(); SaveContext_Init(); Setup_SetRegs(); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 6556adfa7..cfd230569 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -850,15 +850,15 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - if (func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]) != - 0) { - func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], + D_801C67F0[gSaveContext.fileNum * 2]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], + D_801C67F0[gSaveContext.fileNum * 2 + 1]); } Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], + D_801C67F0[gSaveContext.fileNum * 2 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } gSaveContext.save.cutsceneIndex = cutsceneIndex; @@ -910,27 +910,27 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); if (gSaveContext.fileNum == 0xFF) { - func_80185968(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]); } else if (fileSelect->unk_2446A[gSaveContext.fileNum] != 0) { phi_t1 = gSaveContext.fileNum + 2; phi_t1 *= 2; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); } } else { phi_t1 = gSaveContext.fileNum; phi_t1 *= 2; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); } } Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); } } @@ -1090,9 +1090,9 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { phi_s2 = false; sp6E = 0; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) { sp6E = 1; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2 = true; } } @@ -1115,7 +1115,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {} phi_s2 = false; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2 = true; } @@ -1171,7 +1171,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); } else if (sp6E == 0) { // TODO: == 0? temp_s2 = gSaveContext.save.saveInfo.checksum; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2_3 = 1; } else { Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); @@ -1182,7 +1182,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); @@ -1210,7 +1210,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { phi_s2 = false; } - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2 = true; } @@ -1267,7 +1267,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); } else if (!sp6E) { // TODO: == 0? temp_s2 = gSaveContext.save.saveInfo.checksum; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2_3 = 1; } else { Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); @@ -1279,7 +1279,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); @@ -1381,11 +1381,12 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { // clear buffer bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // read to buffer - func_80185968(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], D_801C67F0[fileSelect->unk_2448E * 2]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], + D_801C67F0[fileSelect->unk_2448E * 2]); if (1) {} - func_80185968(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1], - D_801C67F0[fileSelect->unk_2448E * 2 + 1]); + SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1], + D_801C67F0[fileSelect->unk_2448E * 2 + 1]); if (1) {} // copy buffer to save context @@ -1518,7 +1519,7 @@ void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; - func_80185F64(sramCtx->saveBuf, curPage, numPages); + SysFlashrom_WriteDataSync(sramCtx->saveBuf, curPage, numPages); } /** @@ -1531,7 +1532,8 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) { gSaveContext.save.isFirstCycle = true; gSaveContext.save.isOwlSave = false; func_80145698(sramCtx); - func_80185F64(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C6818[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], + D_801C6818[gSaveContext.fileNum * 2]); } /** @@ -1552,7 +1554,8 @@ void Sram_SaveSpecialNewDay(PlayState* play) { gSaveContext.save.day = day; gSaveContext.save.time = time; gSaveContext.save.cutsceneIndex = cutsceneIndex; - func_80185F64(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], + D_801C67F0[gSaveContext.fileNum * 2]); } void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) { @@ -1563,7 +1566,7 @@ void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) { void func_80147020(SramContext* sramCtx) { // async flash write - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); sramCtx->unk_18 = osGetTime(); sramCtx->status = 2; @@ -1571,8 +1574,8 @@ void func_80147020(SramContext* sramCtx) { void func_80147068(SramContext* sramCtx) { if (sramCtx->status == 2) { - if (func_80185EC4() != 0) { // if task running - if (func_80185F04() == 0) { // wait for task done + if (SysFlashrom_IsBusy() != 0) { // if task running + if (SysFlashrom_AwaitResult() == 0) { // wait for task done // task success sramCtx->status = 4; } else { @@ -1592,7 +1595,7 @@ void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages) { } void func_80147150(SramContext* sramCtx) { - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); sramCtx->unk_18 = osGetTime(); sramCtx->status = 7; @@ -1600,18 +1603,18 @@ void func_80147150(SramContext* sramCtx) { void func_80147198(SramContext* sramCtx) { if (sramCtx->status == 7) { - if (func_80185EC4() != 0) { // Is task running - if (func_80185F04() == 0) { // Wait for task done - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); + if (SysFlashrom_IsBusy() != 0) { // Is task running + if (SysFlashrom_AwaitResult() == 0) { // Wait for task done + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); sramCtx->status = 8; } else { - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); sramCtx->status = 8; } } } else if (sramCtx->status == 8) { - if (func_80185EC4() != 0) { // Is task running - if (func_80185F04() == 0) { // Wait for task done + if (SysFlashrom_IsBusy() != 0) { // Is task running + if (SysFlashrom_AwaitResult() == 0) { // Wait for task done sramCtx->status = 4; } else { sramCtx->status = 4; @@ -1623,7 +1626,7 @@ void func_80147198(SramContext* sramCtx) { gSaveContext.save.isOwlSave = false; gSaveContext.save.saveInfo.checksum = 0; // flash read to buffer then copy to save context - func_80185968(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); + SysFlashrom_ReadData(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum)); } } @@ -1664,9 +1667,9 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // Read save file - if (func_80185968(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) { // If failed, read backup save file - func_80185968(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]); } // Copy buffer to save context diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index b1d42739b..fa886e81c 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3447,21 +3447,21 @@ 0x801856FC:("Slowly_ThreadEntry",), 0x8018571C:("Slowly_Init",), 0x801857A0:("Slowly_Destroy",), - 0x801857C0:("func_801857C0",), - 0x801857D0:("func_801857D0",), - 0x80185864:("func_80185864",), - 0x80185908:("func_80185908",), - 0x80185968:("func_80185968",), - 0x801859F0:("func_801859F0",), - 0x80185A2C:("func_80185A2C",), - 0x80185B1C:("func_80185B1C",), - 0x80185BE4:("func_80185BE4",), + 0x801857C0:("SysFlashrom_IsInit",), + 0x801857D0:("SysFlashrom_GetVendorStr",), + 0x80185864:("SysFlashrom_CheckFlashType",), + 0x80185908:("SysFlashrom_InitFlash",), + 0x80185968:("SysFlashrom_ReadData",), + 0x801859F0:("SysFlashrom_EraseSector",), + 0x80185A2C:("SysFlashrom_ExecWrite",), + 0x80185B1C:("SysFlashrom_AttemptWrite",), + 0x80185BE4:("SysFlashrom_NeedsToErase",), 0x80185C24:("func_80185C24",), 0x80185D40:("SysFlashrom_ThreadEntry",), - 0x80185DDC:("func_80185DDC",), - 0x80185EC4:("func_80185EC4",), - 0x80185F04:("func_80185F04",), - 0x80185F64:("func_80185F64",), + 0x80185DDC:("SysFlashrom_WriteDataAsync",), + 0x80185EC4:("SysFlashrom_IsBusy",), + 0x80185F04:("SysFlashrom_AwaitResult",), + 0x80185F64:("SysFlashrom_WriteDataSync",), 0x80185F90:("func_80185F90",), 0x80186A70:("osFlashGetAddr",), 0x80186AB8:("osFlashReInit",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6f08583ac..15bebeffd 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4193,14 +4193,14 @@ 0x801FBDE8:("D_801FBDE8","Vec3f","",0xc), 0x801FBE00:("sMatrixStack","MtxF*","",0x4), 0x801FBE04:("sCurrentMatrix","MtxF*","",0x4), - 0x801FBE10:("D_801FBE10","UNK_TYPE1","",0x1), - 0x801FBE28:("D_801FBE28","UNK_TYPE1","",0x1), - 0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1), - 0x801FBE30:("D_801FBE30","UNK_TYPE4","",0x4), + 0x801FBE10:("sFlashromMesgQueue","UNK_TYPE1","",0x1), + 0x801FBE28:("sFlashromMesg","UNK_TYPE1","",0x1), + 0x801FBE2C:("sFlashromIsInit","UNK_TYPE1","",0x1), + 0x801FBE30:("sFlashromVendor","UNK_TYPE4","",0x4), 0x801FBE38:("sSysFlashromStack","u8","[4096]",0x1000), 0x801FCE38:("sSysFlashromStackInfo","StackEntry","",0x1c), 0x801FCE58:("sSysFlashromThread","OSThread","",0x1b0), - 0x801FD008:("D_801FD008","s80185D40","",0x2c), + 0x801FD008:("sFlashromRequest","s80185D40","",0x2c), 0x801FD034:("D_801FD034","OSMesg","",0x4), 0x801FD040:("D_801FD040","s32","",0x10), 0x801FD050:("D_801FD050","OSIoMesg","",0x18), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 34318dc27..419a7a4be 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2962,20 +2962,21 @@ asm/non_matchings/code/sys_slowly/Slowly_ThreadEntry.s,Slowly_ThreadEntry,0x8018 asm/non_matchings/code/sys_slowly/Slowly_Init.s,Slowly_Init,0x8018571C,0x21 asm/non_matchings/code/sys_slowly/Slowly_Destroy.s,Slowly_Destroy,0x801857A0,0x8 asm/non_matchings/code/sys_flashrom/func_801857C0.s,func_801857C0,0x801857C0,0x4 -asm/non_matchings/code/sys_flashrom/func_801857D0.s,func_801857D0,0x801857D0,0x25 -asm/non_matchings/code/sys_flashrom/func_80185864.s,func_80185864,0x80185864,0x29 -asm/non_matchings/code/sys_flashrom/func_80185908.s,func_80185908,0x80185908,0x18 -asm/non_matchings/code/sys_flashrom/func_80185968.s,func_80185968,0x80185968,0x22 -asm/non_matchings/code/sys_flashrom/func_801859F0.s,func_801859F0,0x801859F0,0xF -asm/non_matchings/code/sys_flashrom/func_80185A2C.s,func_80185A2C,0x80185A2C,0x3C -asm/non_matchings/code/sys_flashrom/func_80185B1C.s,func_80185B1C,0x80185B1C,0x32 -asm/non_matchings/code/sys_flashrom/func_80185BE4.s,func_80185BE4,0x80185BE4,0x10 +asm/non_matchings/code/sys_flashrom/SysFlashrom_IsInit.s,SysFlashrom_IsInit,0x801857C0,0x4 +asm/non_matchings/code/sys_flashrom/SysFlashrom_GetVendorStr.s,SysFlashrom_GetVendorStr,0x801857D0,0x25 +asm/non_matchings/code/sys_flashrom/SysFlashrom_CheckFlashType.s,SysFlashrom_CheckFlashType,0x80185864,0x29 +asm/non_matchings/code/sys_flashrom/SysFlashrom_InitFlash.s,SysFlashrom_InitFlash,0x80185908,0x18 +asm/non_matchings/code/sys_flashrom/SysFlashrom_ReadData.s,SysFlashrom_ReadData,0x80185968,0x22 +asm/non_matchings/code/sys_flashrom/SysFlashrom_EraseSector.s,SysFlashrom_EraseSector,0x801859F0,0xF +asm/non_matchings/code/sys_flashrom/SysFlashrom_ExecWrite.s,SysFlashrom_ExecWrite,0x80185A2C,0x3C +asm/non_matchings/code/sys_flashrom/SysFlashrom_AttemptWrite.s,SysFlashrom_AttemptWrite,0x80185B1C,0x32 +asm/non_matchings/code/sys_flashrom/SysFlashrom_NeedsToErase.s,SysFlashrom_NeedsToErase,0x80185BE4,0x10 asm/non_matchings/code/sys_flashrom/func_80185C24.s,func_80185C24,0x80185C24,0x47 asm/non_matchings/code/sys_flashrom/SysFlashrom_ThreadEntry.s,SysFlashrom_ThreadEntry,0x80185D40,0x27 -asm/non_matchings/code/sys_flashrom/func_80185DDC.s,func_80185DDC,0x80185DDC,0x3A -asm/non_matchings/code/sys_flashrom/func_80185EC4.s,func_80185EC4,0x80185EC4,0x10 -asm/non_matchings/code/sys_flashrom/func_80185F04.s,func_80185F04,0x80185F04,0x18 -asm/non_matchings/code/sys_flashrom/func_80185F64.s,func_80185F64,0x80185F64,0xB +asm/non_matchings/code/sys_flashrom/SysFlashrom_WriteDataAsync.s,SysFlashrom_WriteDataAsync,0x80185DDC,0x3A +asm/non_matchings/code/sys_flashrom/SysFlashrom_IsBusy.s,SysFlashrom_IsBusy,0x80185EC4,0x10 +asm/non_matchings/code/sys_flashrom/SysFlashrom_AwaitResult.s,SysFlashrom_AwaitResult,0x80185F04,0x18 +asm/non_matchings/code/sys_flashrom/SysFlashrom_WriteDataSync.s,SysFlashrom_WriteDataSync,0x80185F64,0xB asm/non_matchings/code/code_80185F90/func_80185F90.s,func_80185F90,0x80185F90,0x26 asm/non_matchings/code/osFlash/func_80186A70.s,func_80186A70,0x80186A70,0x12 asm/non_matchings/code/osFlash/func_80186AB8.s,func_80186AB8,0x80186AB8,0x1C From f8ac9d2e9ae65027f8bbe45f5357c6e3adb1ebc4 Mon Sep 17 00:00:00 2001 From: louist103 <35883445+louist103@users.noreply.github.com> Date: Tue, 30 May 2023 00:07:04 -0400 Subject: [PATCH 33/51] fbdemo wipe 3 Matching (#1254) * OK * PR fixes * someone please add clang-format-11 to the AUR thanks * Add outname * Update z_fbdemo_wipe3.c * ARRAY_COUNTU --- assets/xml/overlays/ovl_fbdemo_wipe3.xml | 13 ++ spec | 3 +- .../fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c | 168 +++++++++++++++--- .../fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h | 17 +- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 17 +- 6 files changed, 185 insertions(+), 35 deletions(-) create mode 100644 assets/xml/overlays/ovl_fbdemo_wipe3.xml diff --git a/assets/xml/overlays/ovl_fbdemo_wipe3.xml b/assets/xml/overlays/ovl_fbdemo_wipe3.xml new file mode 100644 index 000000000..fe4804689 --- /dev/null +++ b/assets/xml/overlays/ovl_fbdemo_wipe3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/spec b/spec index c7c67d830..51a80f17a 100644 --- a/spec +++ b/spec @@ -3195,8 +3195,7 @@ beginseg name "ovl_fbdemo_wipe3" compress include "build/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.o" - include "build/data/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.data.o" - include "build/data/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.reloc.o" + include "build/src/overlays/fbdemos/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3_reloc.o" endseg beginseg diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c index 759e1511c..03bc1e81d 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c @@ -7,6 +7,8 @@ #include "global.h" #include "z_fbdemo_wipe3.h" +#define THIS ((TransitionWipe3*)thisx) + void* TransitionWipe3_Init(void* thisx); void TransitionWipe3_Destroy(void* thisx); void TransitionWipe3_Update(void* thisx, s32 updateRate); @@ -17,37 +19,159 @@ void TransitionWipe3_SetColor(void* thisx, u32 color); void TransitionWipe3_SetEnvColor(void* thisx, u32 color); s32 TransitionWipe3_IsDone(void* thisx); -#if 0 -TransitionInit TransitionWipe3_InitVars = { - TransitionWipe3_Init, - TransitionWipe3_Destroy, - TransitionWipe3_Update, - TransitionWipe3_Draw, - TransitionWipe3_Start, - TransitionWipe3_SetType, - TransitionWipe3_SetColor, - TransitionWipe3_SetEnvColor, - TransitionWipe3_IsDone, +#include "assets/overlays/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.c" + +TexturePtr sTransWipe3Textures[] = { + fbdemo_tex_000520, fbdemo_tex_000920, fbdemo_tex_000D20, fbdemo_tex_001120, + fbdemo_tex_001520, fbdemo_tex_000520, fbdemo_tex_000520, fbdemo_tex_000520, }; -#endif +TransitionInit TransitionWipe3_InitVars = { + TransitionWipe3_Init, TransitionWipe3_Destroy, TransitionWipe3_Update, + TransitionWipe3_Draw, TransitionWipe3_Start, TransitionWipe3_SetType, + TransitionWipe3_SetColor, TransitionWipe3_SetEnvColor, TransitionWipe3_IsDone, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Start.s") +#define TRANS3_GET_SPEED(type) (type & 1) +#define TRANS3_GET_TEX_INDEX(type) ((type >> 1) & 7) +#define TRANS3_GET_COLOR(type) ((type >> 4) & 3) -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Init.s") +typedef enum { + /* 0 */ TRANS_WIPE3_DIR_IN, + /* 1 */ TRANS_WIPE3_DIR_OUT +} TransitionWipe3Direction; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Destroy.s") +typedef enum { + /* 0 */ TRANS_WIPE3_SPEED_SLOW, + /* 1 */ TRANS_WIPE3_SPEED_FAST +} TransitionWipe3Speed; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/func_80AC68B4.s") +typedef enum { + /* 0 */ TRANS_WIPE3_COLOR_BLACK, + /* 1 */ TRANS_WIPE3_COLOR_WHITE, + /* 2 */ TRANS_WIPE3_COLOR_GRAY +} TransitionWipe3Color; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Update.s") +void TransitionWipe3_Start(void* thisx) { + TransitionWipe3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Draw.s") + this->isDone = false; + this->curTexture = sTransWipe3Textures[this->texIndex % ARRAY_COUNTU(sTransWipe3Textures)]; + if (this->speedType == TRANS_WIPE3_SPEED_SLOW) { + this->wipeSpeed = 20; + } else { + this->wipeSpeed = 10; + } + if (this->colorType == TRANS_WIPE3_COLOR_BLACK) { + this->color.rgba = RGBA8(0, 0, 0, 255); + } else if (this->colorType == TRANS_WIPE3_COLOR_WHITE) { + this->color.rgba = RGBA8(255, 255, 255, 255); + } else { + this->color.rgba = RGBA8(160, 160, 160, 255); + } + if (this->dir != TRANS_WIPE3_DIR_IN) { + this->scrollY = 0; + } else { + this->scrollY = 500; + if (this->texIndex == 2) { + func_8019F128(NA_SE_OC_SECRET_WARP_OUT); + } + } + guPerspective(&this->projection, &this->normal, 60.0f, 4.0f / 3.0f, 10.0f, 12800.0f, 1.0f); + guLookAt(&this->lookAt, 0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_IsDone.s") +void* TransitionWipe3_Init(void* thisx) { + TransitionWipe3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetType.s") + bzero(this, sizeof(TransitionWipe3)); + return this; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetColor.s") +void TransitionWipe3_Destroy(void* thisx) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetEnvColor.s") +void TransitionWipe3_UpdateScrollY(void* thisx, f32 scroll) { + TransitionWipe3* this = THIS; + + this->scrollY = (s32)(500.0f * scroll); +} + +void TransitionWipe3_Update(void* thisx, s32 updateRate) { + TransitionWipe3* this = THIS; + + if (this->dir != TRANS_WIPE3_DIR_IN) { + if ((this->scrollY == 0) && (this->texIndex == 2)) { + func_8019F128(NA_SE_OC_SECRET_WARP_IN); + } + this->scrollY += (this->wipeSpeed * 3) / updateRate; + if (this->scrollY >= 500) { + this->scrollY = 500; + this->isDone = true; + } + } else { + this->scrollY -= (this->wipeSpeed * 3) / updateRate; + if (this->scrollY <= 0) { + this->scrollY = 0; + this->isDone = true; + } + } +} + +void TransitionWipe3_Draw(void* thisx, Gfx** gfxP) { + Gfx* gfx = *gfxP; + Mtx* modelView = &THIS->modelView[THIS->frame]; + f32 scale = 14.8f; + Gfx* texScroll; + + THIS->frame ^= 1; + gDPPipeSync(gfx++); + texScroll = Gfx_BranchTexScroll(&gfx, THIS->scrollX, THIS->scrollY, 16, 64); + gSPSegment(gfx++, 0x09, texScroll); + gSPSegment(gfx++, 0x08, THIS->curTexture); + gDPSetColor(gfx++, G_SETPRIMCOLOR, THIS->color.rgba); + gDPSetColor(gfx++, G_SETENVCOLOR, THIS->color.rgba); + gSPMatrix(gfx++, &THIS->projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPPerspNormalize(gfx++, THIS->normal); + gSPMatrix(gfx++, &THIS->lookAt, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + + if (scale != 1.0f) { + guScale(modelView, scale, scale, 1.0f); + gSPMatrix(gfx++, modelView, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } + gSPDisplayList(gfx++, sTransWipe3DL); + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +s32 TransitionWipe3_IsDone(void* thisx) { + TransitionWipe3* this = THIS; + + return this->isDone; +} + +void TransitionWipe3_SetType(void* thisx, s32 type) { + TransitionWipe3* this = THIS; + + if (type & TRANS_TYPE_SET_PARAMS) { + this->speedType = TRANS3_GET_SPEED(type); + this->texIndex = TRANS3_GET_TEX_INDEX(type); + this->colorType = TRANS3_GET_COLOR(type); + } else if (type == TRANS_INSTANCE_TYPE_FILL_OUT) { + this->dir = TRANS_WIPE3_DIR_OUT; + } else { + this->dir = TRANS_WIPE3_DIR_IN; + } +} + +void TransitionWipe3_SetColor(void* thisx, u32 color) { + TransitionWipe3* this = THIS; + + this->color.rgba = color; +} + +void TransitionWipe3_SetEnvColor(void* thisx, u32 color) { + TransitionWipe3* this = THIS; + + this->envColor.rgba = color; +} diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h index b023ecb8b..711f97952 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h @@ -5,7 +5,22 @@ #include "color.h" typedef struct { - /* 0x000 */ char unk_0[0x120]; + /* 0x000 */ Color_RGBA8_u32 color; + /* 0x008 */ Color_RGBA8_u32 envColor; + /* 0x004 */ u32 scrollX; + /* 0x00C */ s32 scrollY; + /* 0x010 */ s32 wipeSpeed; + /* 0x014 */ u8 dir; + /* 0x015 */ u8 colorType; + /* 0x016 */ u8 speedType; + /* 0x017 */ u8 texIndex; + /* 0x018 */ u8 isDone; + /* 0x019 */ u8 frame; + /* 0x01A */ u16 normal; + /* 0x01C */ TexturePtr curTexture; + /* 0x020 */ Mtx projection; + /* 0x060 */ Mtx lookAt; + /* 0x0A0 */ Mtx modelView[2]; } TransitionWipe3; // size = 0x120 #endif diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index fa886e81c..bb392b722 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -11971,7 +11971,7 @@ 0x80AC6740:("TransitionWipe3_Start",), 0x80AC687C:("TransitionWipe3_Init",), 0x80AC68A8:("TransitionWipe3_Destroy",), - 0x80AC68B4:("func_80AC68B4",), + 0x80AC68B4:("TransitionWipe3_UpdateScrollY",), 0x80AC68E0:("TransitionWipe3_Update",), 0x80AC69F8:("TransitionWipe3_Draw",), 0x80AC6BE4:("TransitionWipe3_IsDone",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 15bebeffd..83bf2c681 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -12850,15 +12850,14 @@ 0x80AC65B0:("D_80AC65B0","UNK_TYPE1","",0x1), 0x80AC66A8:("TransitionWipe1_InitVars","UNK_PTR","",0x4), 0x80AC66D0:("D_80AC66D0","f32","",0x4), - 0x80AC6C60:("D_80AC6C60","UNK_TYPE1","",0x1), - 0x80AC7060:("D_80AC7060","UNK_TYPE1","",0x1), - 0x80AC7460:("D_80AC7460","UNK_TYPE1","",0x1), - 0x80AC7860:("D_80AC7860","UNK_TYPE1","",0x1), - 0x80AC7C60:("D_80AC7C60","UNK_TYPE1","",0x1), - 0x80AC8060:("D_80AC8060","UNK_TYPE1","",0x1), - 0x80AC8250:("D_80AC8250","UNK_TYPE1","",0x1), - 0x80AC8280:("D_80AC8280","UNK_TYPE1","",0x1), - 0x80AC8350:("D_80AC8350","UNK_PTR","",0x4), + 0x80AC6C60:("fbdemo_tex_000520","UNK_TYPE1","",0x1), + 0x80AC7060:("fbdemo_tex_000920","UNK_TYPE1","",0x1), + 0x80AC7460:("fbdemo_tex_000D20","UNK_TYPE1","",0x1), + 0x80AC7860:("fbdemo_tex_001120","UNK_TYPE1","",0x1), + 0x80AC7C60:("fbdemo_tex_001520","UNK_TYPE1","",0x1), + 0x80AC8060:("sTransWipe3Vtx","UNK_TYPE1","",0x1), + 0x80AC8280:("sTransWipe3DL","UNK_TYPE1","",0x1), + 0x80AC8350:("sTransWipe3Textures","TexturePtr[]","8",0x4), 0x80AC8370:("TransitionWipe3_InitVars","UNK_PTR","",0x4), 0x80AC83A0:("D_80AC83A0","f32","",0x4), 0x80AC8650:("TransitionWipe4_InitVars","UNK_PTR","",0x4), From 72c4f378cb16f82a83c49eec22b4b8955827e694 Mon Sep 17 00:00:00 2001 From: Lucas Shaw <49287729+shawlucas@users.noreply.github.com> Date: Tue, 30 May 2023 21:01:08 -0400 Subject: [PATCH 34/51] ovl_Demo_Moonend ok (#1249) * Progress * one more * OK * update * finished z_demo_moonend * update reloc * actually updated reloc * fix symbols * made suggested changes * reformat * Made suggested changes * forgot to run format.py * made suggested changes * made suggested changes * moved cueid to be in scope --- assets/xml/objects/object_moonend.xml | 6 +- include/z64animation.h | 2 +- spec | 3 +- .../actors/ovl_Demo_Moonend/z_demo_moonend.c | 193 ++++++++++++++++-- .../actors/ovl_Demo_Moonend/z_demo_moonend.h | 9 +- undefined_syms.txt | 8 - 6 files changed, 191 insertions(+), 30 deletions(-) diff --git a/assets/xml/objects/object_moonend.xml b/assets/xml/objects/object_moonend.xml index e677f9c3f..666e9e07c 100644 --- a/assets/xml/objects/object_moonend.xml +++ b/assets/xml/objects/object_moonend.xml @@ -1,6 +1,7 @@  - + + @@ -19,7 +20,8 @@ - + + diff --git a/include/z64animation.h b/include/z64animation.h index 316dfe341..67c9d7641 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -304,7 +304,7 @@ typedef struct SkeletonInfo { typedef s32 (*OverrideKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList, u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos); -typedef void (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, +typedef s32 (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos); void SkelAnime_DrawLod(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor, s32 lod); diff --git a/spec b/spec index 51a80f17a..8ddf28c01 100644 --- a/spec +++ b/spec @@ -4852,8 +4852,7 @@ beginseg name "ovl_Demo_Moonend" compress include "build/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.o" - include "build/data/ovl_Demo_Moonend/ovl_Demo_Moonend.data.o" - include "build/data/ovl_Demo_Moonend/ovl_Demo_Moonend.reloc.o" + include "build/src/overlays/actors/ovl_Demo_Moonend/ovl_Demo_Moonend_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c index 76a4230f5..ba8d1b834 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c @@ -15,8 +15,12 @@ void DemoMoonend_Destroy(Actor* thisx, PlayState* play); void DemoMoonend_Update(Actor* thisx, PlayState* play); void DemoMoonend_Draw(Actor* thisx, PlayState* play); -#if 0 -ActorInit Demo_Moonend_InitVars = { +void DemoMoonend_DoNothing(DemoMoonend* this, PlayState* play); +void func_80C17B60(DemoMoonend* this, PlayState* play); +void func_80C17C48(DemoMoonend* this, PlayState* play); +void func_80C17FCC(Actor* thisx, PlayState* play); + +const ActorInit Demo_Moonend_InitVars = { ACTOR_DEMO_MOONEND, ACTORCAT_ITEMACTION, FLAGS, @@ -28,28 +32,185 @@ ActorInit Demo_Moonend_InitVars = { (ActorFunc)DemoMoonend_Draw, }; -#endif +void DemoMoonend_Init(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; -extern UNK_TYPE D_06001214; -extern UNK_TYPE D_0600B540; -extern UNK_TYPE D_060129F0; + Actor_SetScale(&this->actor, 0.1f); + this->actionFunc = DemoMoonend_DoNothing; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Init.s") + if (DEMOMOONEND_GET_PARAMS_F(thisx) == 1) { + Actor_SetScale(&this->actor, 0.05f); + Actor_SetScale(&this->actor, 6.0f); + this->actor.draw = NULL; + this->cueType = CS_CMD_ACTOR_CUE_558; + this->actionFunc = func_80C17B60; + } else { + Actor_SetScale(&this->actor, 0.095f); + func_80183430(&this->skeletonInfo, &object_moonend_Blob_00B5A0, &object_moonend_Blob_001214, this->jointTable, + this->morphTable, NULL); + func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214); + this->cueType = CS_CMD_ACTOR_CUE_560; + this->actionFunc = func_80C17C48; + this->actor.home.rot.z = 0; + this->actor.draw = NULL; + this->skeletonInfo.frameCtrl.unk_C = 2.0f / 3.0f; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Destroy.s") +void DemoMoonend_Destroy(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17B50.s") + if (DEMOMOONEND_GET_PARAMS_F(thisx) != 1) { + func_8018349C(&this->skeletonInfo); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17B60.s") +void DemoMoonend_DoNothing(DemoMoonend* this, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17C48.s") +void func_80C17B60(DemoMoonend* this, PlayState* play) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + u16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Update.s") + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { + case 1: + this->actor.draw = NULL; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17E70.s") + case 2: + this->actor.draw = func_80C17FCC; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17EE0.s") + default: + break; + } + } + if (this->cueId == 2) { + func_800B9010(&this->actor, NA_SE_EV_RAINBOW - SFX_FLAG); + } + } else { + this->actor.draw = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Draw.s") +void func_80C17C48(DemoMoonend* this, PlayState* play) { + if (func_80183DE0(&this->skeletonInfo)) { + this->actor.home.rot.z = 0; + } + if (Cutscene_IsCueInChannel(play, this->cueType)) { + u16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17FCC.s") + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { + case 1: + this->actor.draw = DemoMoonend_Draw; + func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214); + this->skeletonInfo.frameCtrl.unk_C = 0.0f; + break; + + case 2: + this->actor.draw = DemoMoonend_Draw; + func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214); + this->skeletonInfo.frameCtrl.unk_C = 2.0f / 3.0f; + Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_EXPLOSION); + this->actor.home.rot.z = 1; + break; + + default: + break; + } + } + if (this->actor.home.rot.z != 0) { + func_800B9010(&this->actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); + } + } else { + this->actor.draw = NULL; + } + if ((play->csCtx.state != CS_STATE_IDLE) && (gSaveContext.sceneLayer == 8) && (play->csCtx.scriptIndex == 0)) { + switch (play->csCtx.curFrame) { + case 5: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1); + break; + + case 50: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM2); + break; + + case 100: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM3); + break; + + case 150: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM2); + break; + + case 200: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM4); + break; + + default: + break; + } + } +} + +void DemoMoonend_Update(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; + + this->actionFunc(this, play); +} + +s32 func_80C17E70(PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx, + Vec3f* scale, Vec3s* rot, Vec3f* pos) { + DemoMoonend* this = THIS; + + if (limbIndex == 2) { + Matrix_Push(); + Matrix_RotateYS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000, MTXMODE_APPLY); + } + + return true; +} + +s32 func_80C17EE0(PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx, + Vec3f* scale, Vec3s* rot, Vec3f* pos) { + DemoMoonend* this = THIS; + + if (limbIndex == 8) { + Matrix_Pop(); + } + + return true; +} + +void DemoMoonend_Draw(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; + Mtx* mtx; + + AnimatedMat_Draw(play, (AnimatedMaterial*)Lib_SegmentedToVirtual(object_moonend_Matanimheader_00B540)); + + mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); + + if (mtx != NULL) { + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + func_8018450C(play, &this->skeletonInfo, mtx, func_80C17E70, func_80C17EE0, &this->actor); + } +} + +void func_80C17FCC(Actor* thisx, PlayState* play) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_moonend_Matanimheader_0129F0)); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, object_moonend_DL_010C40); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h index d36dcb284..fd229e004 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h @@ -2,14 +2,21 @@ #define Z_DEMO_MOONEND_H #include "global.h" +#include "objects/object_moonend/object_moonend.h" struct DemoMoonend; typedef void (*DemoMoonendActionFunc)(struct DemoMoonend*, PlayState*); +#define DEMOMOONEND_GET_PARAMS_F(thisx) (((thisx)->params) & 0xF) + typedef struct DemoMoonend { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x19C]; + /* 0x144 */ SkeletonInfo skeletonInfo; + /* 0x174 */ Vec3s jointTable[30]; + /* 0x228 */ Vec3s morphTable[30]; + /* 0x2DC */ u16 cueType; + /* 0x2DE */ u16 cueId; /* 0x2E0 */ DemoMoonendActionFunc actionFunc; } DemoMoonend; // size = 0x2E4 diff --git a/undefined_syms.txt b/undefined_syms.txt index 336a6c4b4..a45e5c682 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -725,14 +725,6 @@ D_060134D0 = 0x060134D0; D_06013828 = 0x06013828; D_06014040 = 0x06014040; -// ovl_Demo_Moonend - -D_06001214 = 0x06001214; -D_0600B540 = 0x0600B540; -D_0600B5A0 = 0x0600B5A0; -D_06010C40 = 0x06010C40; -D_060129F0 = 0x060129F0; - // ovl_Dm_Tsg D_06002D30 = 0x06002D30; From b9f2411cd2cc492cbeb9f3674764fb873f4d8478 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 1 Jun 2023 05:02:37 +1000 Subject: [PATCH 35/51] match EnKanban_Update (#1263) --- spec | 4 - .../actors/ovl_En_Kanban/z_en_kanban.c | 327 +++++++++--------- 2 files changed, 162 insertions(+), 169 deletions(-) diff --git a/spec b/spec index 8ddf28c01..69d9bb5c8 100644 --- a/spec +++ b/spec @@ -1523,11 +1523,7 @@ beginseg name "ovl_En_Kanban" compress include "build/src/overlays/actors/ovl_En_Kanban/z_en_kanban.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_En_Kanban/ovl_En_Kanban_reloc.o" -#else - include "build/data/ovl_En_Kanban/ovl_En_Kanban.reloc.o" -#endif endseg beginseg 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 804854f53..e1d9df24c 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -198,20 +198,16 @@ void func_80954BE8(EnKanban* this, PlayState* play) { } } -#ifdef NON_MATCHING -// Lots of branch likely stuff void EnKanban_Update(Actor* thisx, PlayState* play) { - // PlayState* play = play2; u8 bounced = false; - s32 pad; EnKanban* this = THIS; + s32 pad; + FloorType floorType; + f32 phi_f0; Player* player = GET_PLAYER(play); Vec3f offset; EnKanban* piece; EnKanban* signpost; - FloorType floorType; - f32 phi_f0; - s32 pad2; this->frameCount++; @@ -423,8 +419,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { f32 tempY; f32 tempZ; f32 tempWaterDepth; + s32 pad2; u16 bgCheckFlags; - u8 onGround; if (this->unk_198 != 0) { this->actor.velocity.y = -2.0f; @@ -452,103 +448,103 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.bgCheckFlags = bgCheckFlags; this->actor.depthInWater = tempWaterDepth; - if (1) {} + if (1) { + u8 onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND); - onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND); - - if (this->spinXFlag != 0) { - this->spinRot.x += this->spinVel.x; - this->spinVel.x -= 0x800; - if ((this->spinRot.x <= 0) && onGround) { - this->spinRot.x = 0; - this->spinVel.x = 0; - } - } else { - this->spinRot.x -= this->spinVel.x; - this->spinVel.x -= 0x800; - if ((this->spinRot.x >= 0) && onGround) { - this->spinRot.x = 0; - this->spinVel.x = 0; - } - } - - if (this->spinVel.x < -0xC00) { - this->spinVel.x = -0xC00; - } - - if (this->spinZFlag != 0) { - this->spinRot.z += this->spinVel.z; - this->spinVel.z -= 0x800; - if ((this->spinRot.z <= 0) && onGround) { - this->spinRot.z = 0; - this->spinVel.z = 0; - } - } else { - this->spinRot.z -= this->spinVel.z; - this->spinVel.z -= 0x800; - if ((this->spinRot.z >= 0) && onGround) { - this->spinRot.z = 0; - this->spinVel.z = 0; - } - } - - if (this->spinVel.z < -0xC00) { - this->spinVel.z = -0xC00; - } - - if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND); - } - this->actor.speed *= -0.5f; - } - - if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { - this->actionState = ENKANBAN_WATER; - Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER); - this->bounceX = this->bounceZ = 0; - this->actor.world.pos.y += this->actor.depthInWater; - EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 0, (this->partCount * 20) + 300); - EffectSsGRipple_Spawn(play, &this->actor.world.pos, 150, 650, 0); - EffectSsGRipple_Spawn(play, &this->actor.world.pos, 300, 800, 5); - this->actor.velocity.y = 0.0f; - this->actor.gravity = 0.0f; - break; - } - - if (onGround) { - floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - - if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { - this->unk_197 = 1; - } else if (floorType == FLOOR_TYPE_5) { - this->unk_197 = -1; - } - - if (this->bounceCount <= 0) { - this->bounceCount++; - if (this->unk_197 != 0) { - this->actor.velocity.y = 0.0f; - } else { - this->actor.velocity.y *= -0.3f; - this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000); + if (this->spinXFlag != 0) { + this->spinRot.x += this->spinVel.x; + this->spinVel.x -= 0x800; + if ((this->spinRot.x <= 0) && onGround) { + this->spinRot.x = 0; + this->spinVel.x = 0; } - bounced = true; } else { - this->actor.velocity.y = 0.0f; + this->spinRot.x -= this->spinVel.x; + this->spinVel.x -= 0x800; + if ((this->spinRot.x >= 0) && onGround) { + this->spinRot.x = 0; + this->spinVel.x = 0; + } } - if (this->unk_197 != 0) { - if (this->unk_197 > 0) { - this->actor.speed = 0.0f; - } else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) { - this->airTimer = 10; - if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - this->actionState = ENKANBAN_GROUND; - this->actor.speed = 0.0f; - goto nextCase; + if (this->spinVel.x < -0xC00) { + this->spinVel.x = -0xC00; + } + + if (this->spinZFlag != 0) { + this->spinRot.z += this->spinVel.z; + this->spinVel.z -= 0x800; + if ((this->spinRot.z <= 0) && onGround) { + this->spinRot.z = 0; + this->spinVel.z = 0; + } + } else { + this->spinRot.z -= this->spinVel.z; + this->spinVel.z -= 0x800; + if ((this->spinRot.z >= 0) && onGround) { + this->spinRot.z = 0; + this->spinVel.z = 0; + } + } + + if (this->spinVel.z < -0xC00) { + this->spinVel.z = -0xC00; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND); + } + this->actor.speed *= -0.5f; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { + this->actionState = ENKANBAN_WATER; + Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER); + this->bounceX = this->bounceZ = 0; + this->actor.world.pos.y += this->actor.depthInWater; + EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 0, (this->partCount * 20) + 300); + EffectSsGRipple_Spawn(play, &this->actor.world.pos, 150, 650, 0); + EffectSsGRipple_Spawn(play, &this->actor.world.pos, 300, 800, 5); + this->actor.velocity.y = 0.0f; + this->actor.gravity = 0.0f; + break; + } + + if (onGround) { + floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + + if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { + this->unk_197 = 1; + } else if (floorType == FLOOR_TYPE_5) { + this->unk_197 = -1; + } + + if (this->bounceCount <= 0) { + this->bounceCount++; + if (this->unk_197 != 0) { + this->actor.velocity.y = 0.0f; } else { - Vec3f spC8; + this->actor.velocity.y *= -0.3f; + this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000); + } + bounced = true; + } else { + this->actor.velocity.y = 0.0f; + } + + if (this->unk_197 != 0) { + Vec3f spC8; + + if (this->unk_197 > 0) { + this->actor.speed = 0.0f; + } else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) { + this->airTimer = 10; + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + this->actionState = ENKANBAN_GROUND; + this->actor.speed = 0.0f; + goto nextCase; + } Matrix_RotateXFNew(this->floorRot.x); Matrix_RotateZF(this->floorRot.z, MTXMODE_APPLY); @@ -558,67 +554,67 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.world.rot.y = Math_Atan2S(spC8.x, spC8.z); this->unk_198 = 1; this->actor.speed = sqrtf(SQXZ(this->actor.velocity)); + } else { + this->unk_198 = 0; + Math_ApproachZeroF(&this->actor.speed, 1, 0.1f); } } else { - this->unk_198 = 0; - Math_ApproachZeroF(&this->actor.speed, 1, 0.1f); + this->actor.speed *= 0.7f; } + + if (this->spinRot.x == 0) { + if (this->bounceX != 0) { + bounced = true; + if (this->unk_197 != 0) { + this->spinRot.x = 0; + this->bounceX = 0; + } else { + this->spinVel.x = this->bounceX << 9; + if (this->bounceX != 0) { + this->bounceX -= 5; + if (this->bounceX <= 0) { + this->bounceX = 0; + } + } + + if (Rand_ZeroOne() < 0.5f) { + this->spinXFlag = 1; + } else { + this->spinXFlag = 0; + } + } + } + } + + if (this->spinRot.z == 0) { + if (this->bounceZ != 0) { + bounced = 1; + if (this->unk_197 != 0) { + this->spinRot.z = 0; + this->bounceZ = 0; + } else { + this->spinVel.z = this->bounceZ << 9; + if (this->bounceZ != 0) { + this->bounceZ -= 5; + if (this->bounceZ <= 0) { + this->bounceZ = 0; + } + } + + if (Rand_ZeroOne() < 0.5f) { + this->spinZFlag = 1; + } else { + this->spinZFlag = 0; + } + } + } + } + + Math_ApproachS(&this->actor.shape.rot.x, this->direction << 0xE, 1, 0x2000); } else { - this->actor.speed *= 0.7f; + this->actor.shape.rot.y += this->spinVel.y; + this->actor.shape.rot.x += this->direction * 0x7D0; } - - if (this->spinRot.x == 0) { - if (this->bounceX != 0) { - bounced = true; - if (this->unk_197 != 0) { - this->spinRot.x = 0; - this->bounceX = 0; - } else { - this->spinVel.x = this->bounceX << 9; - if (this->bounceX != 0) { - this->bounceX -= 5; - if (this->bounceX <= 0) { - this->bounceX = 0; - } - } - - if (Rand_ZeroOne() < 0.5f) { - this->spinXFlag = 1; - } else { - this->spinXFlag = 0; - } - } - } - } - - if (this->spinRot.z == 0) { - if (this->bounceZ != 0) { - bounced = 1; - if (this->unk_197 != 0) { - this->spinRot.z = 0; - this->bounceZ = 0; - } else { - this->spinVel.z = this->bounceZ << 9; - if (this->bounceZ != 0) { - this->bounceZ -= 5; - if (this->bounceZ <= 0) { - this->bounceZ = 0; - } - } - - if (Rand_ZeroOne() < 0.5f) { - this->spinZFlag = 1; - } else { - this->spinZFlag = 0; - } - } - } - } - - Math_ApproachS(&this->actor.shape.rot.x, this->direction << 0xE, 1, 0x2000); - } else { - this->actor.shape.rot.y += this->spinVel.y; - this->actor.shape.rot.x += this->direction * 0x7D0; } if (bounced) { @@ -630,15 +626,16 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } if (bounced && (this->unk_197 >= 0)) { + static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 }; + static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 }; s16 dustCount; s16 j; Vec3f velocity = { 0.0f, 0.0f, 0.0f }; - static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 }; - static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 }; Vec3f accel; Vec3f pos; Color_RGBA8 primColor; Color_RGBA8 envColor; + s32 pad3; if (this->unk_197 != 0) { primColor = D_8095754C; @@ -667,10 +664,10 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actionState = ENKANBAN_GROUND; } } - + nextCase: + // fallthrough case ENKANBAN_GROUND: case ENKANBAN_WATER: - nextCase: signpost = (EnKanban*)this->actor.parent; if (signpost->partFlags == 0xFFFF) { @@ -839,6 +836,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { play_sound(NA_SE_SY_TRE_BOX_APPEAR); } break; + + default: + break; } break; @@ -883,14 +883,11 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } break; } + + default: + break; } } -#else -static Vec3f D_8095753C = { 0.0f, 0.0f, 0.0f }; -static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 }; -static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kanban/EnKanban_Update.s") -#endif static Gfx* sDisplayLists[] = { object_kanban_DL_000CB0, object_kanban_DL_000DB8, object_kanban_DL_000E78, object_kanban_DL_000F38, From 64959177d90f158e2e39ca3a6b728f915bf084b5 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 1 Jun 2023 06:27:30 +1000 Subject: [PATCH 36/51] match func_808DDE9C (#1262) --- spec | 4 -- .../ovl_Object_Kankyo/z_object_kankyo.c | 56 ++++++++----------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/spec b/spec index 69d9bb5c8..14aff1cd7 100644 --- a/spec +++ b/spec @@ -1119,11 +1119,7 @@ beginseg name "ovl_Object_Kankyo" compress include "build/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_Object_Kankyo/ovl_Object_Kankyo_reloc.o" -#else - include "build/data/ovl_Object_Kankyo/ovl_Object_Kankyo.reloc.o" -#endif endseg beginseg 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 b8a7b3b16..1c05a0981 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -647,8 +647,6 @@ f32 func_808DDE74(void) { return Rand_ZeroOne() - 0.5f; } -#ifdef NON_MATCHING -// s2/s3 swapped void func_808DDE9C(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjectKankyo* this = THIS; @@ -674,25 +672,23 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { temp_f22 = this->unk_14C[0].unk_04 + ((Rand_ZeroOne() - 0.7f) * this->unk_144); temp_f2 = this->unk_14C[0].unk_08 + ((Rand_ZeroOne() - 0.7f) * this->unk_144); - if ((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f)) { - continue; + if (!((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f))) { + Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); + + gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + Matrix_RotateYS((s16)this->unk_14C[2].unk_04 + (s16)(i << 5), MTXMODE_APPLY); + Matrix_RotateXS((s16)this->unk_14C[2].unk_00 + (s16)(i << 5), MTXMODE_APPLY); + + if (this->unk_114C == 0) { + Matrix_Scale(0.5f, 1.0f, 0.5f, MTXMODE_APPLY); + } else { + Matrix_Scale(2.0f, 4.0f, 2.0f, MTXMODE_APPLY); + } + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0706E0); } - - Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); - - gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - Matrix_RotateYS((s16)this->unk_14C[2].unk_04 + (s16)(i << 5), MTXMODE_APPLY); - Matrix_RotateXS((s16)this->unk_14C[2].unk_00 + (s16)(i << 5), MTXMODE_APPLY); - - if (this->unk_114C == 0) { - Matrix_Scale(0.5f, 1.0f, 0.5f, MTXMODE_APPLY); - } else { - Matrix_Scale(2.0f, 4.0f, 2.0f, MTXMODE_APPLY); - } - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0706E0); } phi_s5 = false; @@ -710,21 +706,17 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { temp_f22 = player->actor.floorHeight + 2.0f; temp_f2 = this->unk_14C[1].unk_08 + (func_808DDE74() * 220.0f); - if ((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f)) { - continue; + if (!((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f))) { + Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); + temp_f12 = (Rand_ZeroOne() * 0.05f) + 0.05f; + Matrix_Scale(temp_f12, temp_f12, temp_f12, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL); } - - Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); - temp_f12 = (Rand_ZeroOne() * 0.05f) + 0.05f; - Matrix_Scale(temp_f12, temp_f12, temp_f12, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL); } } CLOSE_DISPS(play->state.gfxCtx); } -#else -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Object_Kankyo/func_808DDE9C.s") -#endif From eb24680be36616c36009e17e1e09608db17560b8 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Thu, 1 Jun 2023 15:11:11 -0400 Subject: [PATCH 37/51] `z_horse.c` OK (#1245) * func_800F3940 * func_800F3B2C, func_800F415C and func_800F41E4 * func_800F40A0 * func_800F3ED4 * func_800F3C44 * func_800F3B68 NON_MATCHING * func_800F3A64 kinda * func_800F39B4 * cleanups * import data * fix fake match * format * Scene enum * minor cleanup on data usage * Horse_RotateToPoint and ENHORSE_PARAMS * scene setup index Co-authored-by: Tom Overton * fix merge * z64horse.h * Renames * and even more renames * format * fix * review * Horse_IsActive * review * bss * fix * remove comments * Update src/code/z_horse.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * Update src/code/z_horse.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review --------- Co-authored-by: Tom Overton Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 11 - include/variables.h | 20 +- include/z64horse.h | 21 ++ spec | 1 - src/code/z_actor.c | 7 +- src/code/z_horse.c | 232 +++++++++++++++++- src/code/z_sram_NES.c | 7 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 11 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.h | 7 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 9 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 27 +- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 2 +- .../z_en_horse_game_check.c | 5 +- .../z_en_horse_link_child.c | 13 +- src/overlays/actors/ovl_En_In/z_en_in.c | 7 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 5 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 5 +- .../actors/ovl_player_actor/z_player.c | 5 +- tools/disasm/functions.txt | 22 +- tools/disasm/variables.txt | 22 +- tools/namefixer.py | 9 + tools/sizes/code_functions.csv | 22 +- 22 files changed, 341 insertions(+), 129 deletions(-) create mode 100644 include/z64horse.h diff --git a/include/functions.h b/include/functions.h index 530cedd86..5774ca3c6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1069,17 +1069,6 @@ u16 QuestHint_GetTatlTextId(PlayState* play); u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet); -s32 func_800F3940(PlayState* play); -// void func_800F39B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_800F3A64(void); -void func_800F3B2C(PlayState* play); -// void func_800F3B68(void); -// void func_800F3C44(void); -// void func_800F3ED4(void); -void func_800F40A0(GameState* gameState, Player* player); -void func_800F415C(Actor* actor, Vec3f* arg1, s16 arg2); -UNK_TYPE func_800F41E4(PlayState* play, ActorContext* actorCtx); - void func_800F4A10(PlayState* play); void KaleidoSetup_Update(PlayState* play); void KaleidoSetup_Init(PlayState* play); diff --git a/include/variables.h b/include/variables.h index 61ac8824b..24030fd99 100644 --- a/include/variables.h +++ b/include/variables.h @@ -419,21 +419,7 @@ extern u8 gOpeningEntranceIndex; extern ActorCutscene sGlobalCutsceneList[8]; extern GameStateOverlay gGameStateOverlayTable[]; extern s32 gGraphNumGameStates; -// extern UNK_TYPE2 D_801BDA70; -// extern UNK_TYPE2 D_801BDA74; -// extern UNK_TYPE2 D_801BDA78; -// extern UNK_TYPE2 D_801BDA7C; -extern s32 D_801BDA9C; -extern UNK_TYPE4 D_801BDAA0; -extern s32 D_801BDAA4; -// extern UNK_TYPE2 D_801BDAA8; -// extern UNK_TYPE2 D_801BDAAA; -// extern UNK_TYPE2 D_801BDAAC; -// extern UNK_TYPE2 D_801BDAAE; -// extern UNK_TYPE2 D_801BDAB0; -// extern UNK_TYPE2 D_801BDAB2; -// extern UNK_TYPE2 D_801BDAB4; -// extern UNK_TYPE2 D_801BDAB6; + // extern UNK_TYPE4 D_801BDAC0; // extern UNK_TYPE4 D_801BDAC4; // extern UNK_TYPE4 D_801BDAC8; @@ -1605,10 +1591,6 @@ extern f32 D_801DD774; extern f32 D_801DD780; extern f32 D_801DD7B0; extern f32 D_801DD7C0; -extern f32 D_801DD7E0; -extern f32 D_801DD7E4; -extern f32 D_801DD7E8; -extern f32 D_801DD7EC; // extern UNK_TYPE2 D_801DD880; // extern UNK_TYPE1 D_801DD8E0; // extern UNK_TYPE4 D_801DD900; diff --git a/include/z64horse.h b/include/z64horse.h new file mode 100644 index 000000000..bae439868 --- /dev/null +++ b/include/z64horse.h @@ -0,0 +1,21 @@ +#ifndef Z64_HORSE_H +#define Z64_HORSE_H + +#include "ultra64.h" +#include "z64.h" + + +s32 Horse_GetJumpingFencePathIndex(PlayState* play); +s32 Horse_CopyPointFromPathList(PlayState* play, s32 pathIndex, s32 pointIndex, Vec3s* dst, s16* arg4); +s32 Horse_IsValidSpawn(s16 sceneId); +void Horse_ResetHorseData(PlayState* play); +void Horse_Spawn(PlayState* play, Player* player); +void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnYaw); +s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx); + + +extern s32 gHorseIsMounted; +extern s32 D_801BDAA0; +extern s32 gHorsePlayedEponasSong; + +#endif diff --git a/spec b/spec index 14aff1cd7..c378c6f05 100644 --- a/spec +++ b/spec @@ -474,7 +474,6 @@ beginseg include "build/src/code/z_fireobj.o" include "build/src/code/z_game_dlftbls.o" include "build/src/code/z_horse.o" - include "build/data/code/z_horse.data.o" include "build/src/code/z_jpeg.o" include "build/src/code/z_kaleido_setup.o" include "build/src/code/z_kanfont.o" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index c46b6ec3b..b5a24cfac 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4,6 +4,7 @@ */ #include "global.h" +#include "z64horse.h" #include "z64load.h" #include "z64quake.h" #include "z64rumble.h" @@ -1357,8 +1358,8 @@ s32 func_800B7200(Player* player) { return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0); } -void func_800B722C(GameState* gameState, Player* player) { - func_800F40A0(gameState, player); +void Actor_SpawnHorse(PlayState* play, Player* player) { + Horse_Spawn(play, player); } s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { @@ -2304,7 +2305,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto Actor_TargetContextInit(&actorCtx->targetContext, actorCtx->actorLists[ACTORCAT_PLAYER].first, play); Actor_InitHalfDaysBit(actorCtx); Fault_AddClient(&sActorFaultClient, (void*)Actor_PrintLists, actorCtx, NULL); - func_800B722C(&play->state, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first); + Actor_SpawnHorse(play, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first); } /** diff --git a/src/code/z_horse.c b/src/code/z_horse.c index 976ea2948..ac0142fae 100644 --- a/src/code/z_horse.c +++ b/src/code/z_horse.c @@ -1,21 +1,233 @@ #include "global.h" +#include "z64horse.h" +#include "overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h" +#include "overlays/actors/ovl_En_Horse/z_en_horse.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3940.s") +s32 Horse_GetJumpingFencePathIndex(PlayState* play) { + Actor* actor; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F39B4.s") + for (actor = NULL;; actor = actor->next) { + actor = SubS_FindActor(play, actor, ACTORCAT_PROP, ACTOR_BG_UMAJUMP); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3A64.s") + if (actor == NULL) { + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3B2C.s") + if (actor->params == BG_UMAJUMP_TYPE_2) { + return ((BgUmajump*)actor)->pathIndex; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3B68.s") + return -1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3C44.s") +// unused +s32 Horse_CopyPointFromPathList(PlayState* play, s32 pathIndex, s32 pointIndex, Vec3s* dst, s16* arg4) { + Path* path = &play->setupPathList[pathIndex]; + Vec3s* points; + s32 count = path->count; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3ED4.s") + dst->x = 0; + dst->y = 0; + dst->z = 0; + *arg4 = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F40A0.s") + if (count == 0) { + return false; + } + if (pointIndex >= count) { + return false; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F415C.s") + points = Lib_SegmentedToVirtual(path->points); + points += pointIndex; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F41E4.s") + dst->x = points->x; + dst->y = points->y; + dst->z = points->z; + *arg4 = 0; + + return true; +} + +typedef struct HorseValidScene { + /* 0x0 */ s16 sceneId; + /* 0x2 */ s16 sceneLayerMinusOne; +} HorseValidScene; // size = 0x4 + +HorseValidScene sHorseValidScenes[] = { + { SCENE_00KEIKOKU, 0 }, // Termina Field + { SCENE_24KEMONOMITI, 0 }, // Road to southern swap + { SCENE_F01, 0 }, // Romani ranch + { SCENE_KOEPONARACE, 0 }, // Gorman track + { SCENE_20SICHITAI, 0 }, // Southern swamp poisoned + { SCENE_20SICHITAI2, 0 }, // Souther swamp clear + { SCENE_30GYOSON, 0 }, // Great bay coast + { SCENE_31MISAKI, 0 }, // Zora cape + { SCENE_ROMANYMAE, 0 }, // Milk road + { SCENE_IKANAMAE, 0 }, // Road to Ikana + { SCENE_13HUBUKINOMITI, 0 }, // Path to Mountain Village +}; + +s32 Horse_IsValidSpawn(s16 sceneId) { + s32 i; + + for (i = 0; i < ARRAY_COUNT(sHorseValidScenes); i++) { + if (sceneId == sHorseValidScenes[i].sceneId) { + return true; + } + } + + return false; +} + +void Horse_ResetHorseData(PlayState* play) { + gSaveContext.save.saveInfo.horseData.sceneId = SCENE_F01; + gSaveContext.save.saveInfo.horseData.pos.x = -1420; + gSaveContext.save.saveInfo.horseData.pos.y = 257; + gSaveContext.save.saveInfo.horseData.pos.z = -1285; + gSaveContext.save.saveInfo.horseData.yaw = 0x2AAA; +} + +s32 gHorseIsMounted = false; +s32 D_801BDAA0 = false; +s32 gHorsePlayedEponasSong = false; + +HorseValidScene sHorseValidSceneLayers[] = { + { SCENE_00KEIKOKU, 5 - 1 }, // Termina Field - First Cycle + { SCENE_30GYOSON, 1 - 1 }, // Great Bay Coast - Post-Gyorg + { SCENE_31MISAKI, 1 - 1 }, // Zora Cape - Post-Gyorg + { SCENE_13HUBUKINOMITI, 1 - 1 }, // Path to Mountain Village - Post-Goht +}; + +s32 Horse_IsValidSceneLayer(PlayState* play, Player* player) { + s32 i; + + if (gSaveContext.sceneLayer == 0) { + return true; + } + + for (i = 0; i < ARRAY_COUNT(sHorseValidSceneLayers); i++) { + if ((sHorseValidSceneLayers[i].sceneId == play->sceneId) && + (gSaveContext.sceneLayer == sHorseValidSceneLayers[i].sceneLayerMinusOne + 1)) { + return true; + } + } + return false; +} + +void Horse_SpawnOverworld(PlayState* play, Player* player) { + if (!Horse_IsValidSceneLayer(play, player)) { + return; + } + + if (gHorseIsMounted && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + s32 pad; + Vec3f pos = player->actor.world.pos; + f32 yIntersect; + CollisionPoly* poly; + s32 pad2[3]; + + pos.y += 5.0f; + yIntersect = BgCheck_EntityRaycastFloor1(&play->colCtx, &poly, &pos); + if (yIntersect == BGCHECK_Y_MIN) { + yIntersect = player->actor.world.pos.y; + } + + player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, yIntersect, + player->actor.world.pos.z, player->actor.shape.rot.x, player->actor.shape.rot.y, + player->actor.shape.rot.z, ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_11)); + Actor_MountHorse(play, player, player->rideActor); + Actor_SetCameraHorseSetting(play, player); + } else if ((play->sceneId == gSaveContext.save.saveInfo.horseData.sceneId) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + if (Horse_IsValidSpawn(gSaveContext.save.saveInfo.horseData.sceneId)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.saveInfo.horseData.pos.x, + gSaveContext.save.saveInfo.horseData.pos.y, gSaveContext.save.saveInfo.horseData.pos.z, 0, + gSaveContext.save.saveInfo.horseData.yaw, 0, ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1)); + } else { + Horse_ResetHorseData(play); + } + } else if ((play->sceneId == SCENE_F01) && !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1420.0f, 257.0f, -1285.0f, 0, 0x2AAA, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1)); + } else if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && Horse_IsValidSpawn(play->sceneId)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z, 0, player->actor.shape.rot.y, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_2)); + } +} + +void Horse_SpawnMinigame(PlayState* play, Player* player) { + if ((play->sceneId == SCENE_KOEPONARACE) && + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) { + player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1262.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_13)); + Actor_MountHorse(play, player, player->rideActor); + Actor_SetCameraHorseSetting(play, player); + } else if ((play->sceneId == SCENE_KOEPONARACE) && + ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) || + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2))) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1741.0f, -106.0f, -641.0f, 0, -0x4FA4, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1)); + } else if ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0) && + (player->transformation == PLAYER_FORM_HUMAN)) { + player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1106.0f, 260.0f, -1185.0f, 0, 0x13, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_7)); + Actor_MountHorse(play, player, player->rideActor); + Actor_SetCameraHorseSetting(play, player); + } +} + +void Horse_Spawn(PlayState* play, Player* player) { + if (((play->sceneId == SCENE_KOEPONARACE) && + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) || + ((play->sceneId == SCENE_F01) && (((gSaveContext.sceneLayer == 1)) || (gSaveContext.sceneLayer == 5)) && + (player->transformation == PLAYER_FORM_HUMAN)) || + ((play->sceneId == SCENE_KOEPONARACE) && + (((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) || + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2)))) { + // Gorman Track and horse state is either STATE_START, STATE_2 or STATE_3 + // or Romani Ranch, Player is Human and scene layer is either 1 or 5 + Horse_SpawnMinigame(play, player); + } else { + Horse_SpawnOverworld(play, player); + } + + D_801BDAA0 = false; +} + +void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnYaw) { + s16 yaw = Math_Vec3f_Yaw(&actor->world.pos, pos) - actor->world.rot.y; + + if (yaw > turnYaw) { + actor->world.rot.y += turnYaw; + } else if (yaw < -turnYaw) { + actor->world.rot.y -= turnYaw; + } else { + actor->world.rot.y += yaw; + } + + actor->shape.rot.y = actor->world.rot.y; +} + +s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx) { + Actor* bgActor = actorCtx->actorLists[ACTORCAT_BG].first; + + if (bgActor != NULL) { + while (true) { + if ((bgActor->update != NULL) && (bgActor->init == NULL)) { + if (Object_IsLoaded(&play->objectCtx, bgActor->objBankIndex)) { + if ((bgActor->id == ACTOR_EN_HORSE) && (((EnHorse*)bgActor)->action != ENHORSE_ACTION_INACTIVE)) { + return true; + } + } + } + bgActor = bgActor->next; + if (bgActor == NULL) { + break; + } + } + } + + return false; +} diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index cfd230569..ac68f0fac 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "z64horse.h" #include "overlays/gamestates/ovl_file_choose/z_file_choose.h" void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages); @@ -454,7 +455,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.jinxTimer = 0; gSaveContext.rupeeAccumulator = 0; - func_800F3B2C(play); + Horse_ResetHorseData(play); } void Sram_IncrementDay(void) { @@ -884,8 +885,8 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { gSaveContext.timerPausedOsTimes[i] = 0; } - D_801BDAA0 = 1; - D_801BDA9C = 0; + D_801BDAA0 = true; + gHorseIsMounted = false; gSaveContext.powderKegTimer = 0; gSaveContext.unk_1014 = 0; gSaveContext.jinxTimer = 0; 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 d4d2c7274..8bf39145c 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -89,13 +89,12 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - this->objectIndex = BG_UMAJUMP_GET_OBJECT_INDEX(thisx); - thisx->params = BG_UMAJUMP_GET_FF(thisx); + this->pathIndex = BG_UMAJUMP_GET_PATH_INDEX(thisx); + thisx->params = BG_UMAJUMP_GET_TYPE(thisx); - if ((thisx->params == BG_UMAJUMP_TYPE_2)) { - if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) && - !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) && - (thisx->csId != CS_ID_NONE)) { + if (thisx->params == BG_UMAJUMP_TYPE_2) { + if ((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20) && + !CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && (thisx->csId != CS_ID_NONE)) { this->actionFunc = BgUmajump_CheckDistance; thisx->update = func_8091A5A0; thisx->flags |= ACTOR_FLAG_10; 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 62aaf6cb7..fe29e34cb 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h @@ -3,8 +3,8 @@ #include "global.h" -#define BG_UMAJUMP_GET_OBJECT_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) -#define BG_UMAJUMP_GET_FF(thisx) ((thisx)->params & 0xFF) +#define BG_UMAJUMP_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) +#define BG_UMAJUMP_GET_TYPE(thisx) ((thisx)->params & 0xFF) typedef enum { BG_UMAJUMP_TYPE_1 = 1, @@ -24,7 +24,8 @@ typedef struct BgUmajump { /* 0x15C */ BgUmajumpActionFunc actionFunc; /* 0x160 */ union { s32 objectIndex; - s32 rotationTimer; // y rotation + s32 rotationTimer; // y rotation + s32 pathIndex; }; /* 0x164 */ s32 hasSoundPlayed; /* 0x168 */ Actor* horse; 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 677c029cb..266e2c47b 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -5,6 +5,7 @@ */ #include "z_en_cow.h" +#include "z64horse.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -130,7 +131,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->animationCycle = 0; this->actor.targetMode = 6; - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; func_801A5080(4); break; case EN_COW_TYPE_TAIL: @@ -264,13 +265,13 @@ void EnCow_Talk(EnCow* this, PlayState* play) { void EnCow_Idle(EnCow* this, PlayState* play) { if ((play->msgCtx.ocarinaMode == 0) || (play->msgCtx.ocarinaMode == 4)) { - if (D_801BDAA4 != 0) { + if (gHorsePlayedEponasSong) { if (this->flags & EN_COW_FLAG_WONT_GIVE_MILK) { this->flags &= ~EN_COW_FLAG_WONT_GIVE_MILK; - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; } else if ((this->actor.xzDistToPlayer < 150.0f) && ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 25000) { - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; this->actionFunc = EnCow_Talk; this->actor.flags |= ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 170.0f); 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 2f2be8c64..b6d2c8c40 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -5,6 +5,7 @@ */ #include "z_en_horse.h" +#include "z64horse.h" #include "z64rumble.h" #include "overlays/actors/ovl_En_In/z_en_in.h" #include "overlays/actors/ovl_Obj_Um/z_obj_um.h" @@ -278,8 +279,8 @@ void EnHorse_RaceWaypointPos(RaceWaypoint* waypoints, s32 idx, Vec3f* pos) { pos->z = waypoints[idx].z; } -void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnAmount) { - func_800F415C(&this->actor, pos, turnAmount); +void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnYaw) { + Horse_RotateToPoint(&this->actor, pos, turnYaw); } void func_8087B7C0(EnHorse* this, PlayState* play, Path* path) { @@ -582,15 +583,15 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) { f32 minDist = 1.0e+38; Player* player = GET_PLAYER(play); Vec3f spawnPos; - s32 pathIdx = func_800F3940(play); + s32 pathIndex = Horse_GetJumpingFencePathIndex(play); s32 pathCount; Vec3s* pathPoints; - if (pathIdx == -1) { + if (pathIndex == -1) { return false; } - path = &play->setupPathList[pathIdx]; + path = &play->setupPathList[pathIndex]; pathCount = path->count; pathPoints = Lib_SegmentedToVirtual(path->points); @@ -691,7 +692,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); EnHorse_ClearDustFlags(&this->dustFlags); - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; Skin_Setup(&this->skin); this->riderPos = thisx->world.pos; this->unk_52C = 0; @@ -1874,8 +1875,8 @@ void EnHorse_InitInactive(EnHorse* this) { } void EnHorse_Inactive(EnHorse* this, PlayState* play) { - if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) { - D_801BDAA4 = 0; + if (gHorsePlayedEponasSong && (this->type == HORSE_TYPE_2)) { + gHorsePlayedEponasSong = false; if (EnHorse_Spawn(this, play)) { if (this->type == HORSE_TYPE_2) { Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); @@ -1954,8 +1955,8 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) { this->actor.speed = 0.0f; EnHorse_IdleAnimSounds(this, play); - if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) { - D_801BDAA4 = 0; + if (gHorsePlayedEponasSong && (this->type == HORSE_TYPE_2)) { + gHorsePlayedEponasSong = false; if (!func_8087C38C(play, this, &this->actor.world.pos)) { if (EnHorse_Spawn(this, play)) { if (this->type == HORSE_TYPE_2) { @@ -2050,7 +2051,7 @@ void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) { void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) { f32 distToPlayer; - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); if (((this->playerDir == PLAYER_DIR_BACK_R) || (this->playerDir == PLAYER_DIR_BACK_L)) && (distToPlayer > 300.0f) && @@ -2959,7 +2960,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { s32 animFinished; s16 yaw; - if ((D_801BDAA4 != 0) || (this->type == HORSE_TYPE_HNI)) { + if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) { EnHorse_StartIdleRidable(this); if (this->type == HORSE_TYPE_2) { Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); @@ -3318,7 +3319,7 @@ void func_808848C8(EnHorse* this, PlayState* play) { EnHorse_PlayWalkingSound(this); this->actor.speed = 4.0f; - func_800F415C(&this->actor, &sp24, 2000); + Horse_RotateToPoint(&this->actor, &sp24, 0x7D0); this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f; SkelAnime_Update(&this->skin.skelAnime); if (Math3D_Distance(&sp24, &this->actor.world.pos) < 30.0f) { 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 9f8cd2063..0574b3198 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -112,7 +112,7 @@ typedef enum HorseType { #define ENHORSE_IS_4000_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_4000) #define ENHORSE_IS_DONKEY_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_DONKEY) -typedef enum { +typedef enum EnHorseParam { /* 0 */ ENHORSE_0, /* 1 */ ENHORSE_1, /* 2 */ ENHORSE_2, 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 d37fb8f23..c7a2edaaa 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 @@ -5,6 +5,7 @@ */ #include "z_en_horse_game_check.h" +#include "z64horse.h" #include "objects/object_horse_game_check/object_horse_game_check.h" #define FLAGS (ACTOR_FLAG_10) @@ -168,9 +169,9 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) { gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } - D_801BDA9C = 0; + gHorseIsMounted = false; if (player->stateFlags1 & PLAYER_STATE1_800000) { - D_801BDAA0 = 1; + D_801BDAA0 = true; } play->nextEntrance = ENTRANCE(GORMAN_TRACK, 2); play->transitionTrigger = TRANS_TRIGGER_START; 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 10d4a6826..0217e8fa8 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 @@ -5,6 +5,7 @@ */ #include "z_en_horse_link_child.h" +#include "z64horse.h" #include "objects/object_horse_link_child/object_horse_link_child.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_2000000) @@ -417,7 +418,7 @@ void func_808DF560(EnHorseLinkChild* this) { this->unk_148 = 1; } - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f); } @@ -425,8 +426,8 @@ void func_808DF560(EnHorseLinkChild* this) { void func_808DF620(EnHorseLinkChild* this, PlayState* play) { s16 sp36; - if (D_801BDAA4 != 0) { - D_801BDAA4 = 0; + if (gHorsePlayedEponasSong) { + gHorsePlayedEponasSong = false; Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); func_808DF788(this); return; @@ -436,7 +437,7 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play) { sp36 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y; if ((Math_CosS(sp36) < 0.7071f) && (this->unk_148 == 2)) { - func_800F415C(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C); + Horse_RotateToPoint(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C); } if (SkelAnime_Update(&this->skin.skelAnime)) { @@ -472,9 +473,9 @@ void func_808DF838(EnHorseLinkChild* this, PlayState* play) { if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) { if (this->unk_1E0 == 0) { - func_800F415C(&this->actor, &player->actor.world.pos, 0x12C); + Horse_RotateToPoint(&this->actor, &player->actor.world.pos, 0x12C); } else { - func_800F415C(&this->actor, &this->actor.home.pos, 0x12C); + Horse_RotateToPoint(&this->actor, &this->actor.home.pos, 0x12C); } } 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 0e103de63..662f8a2c1 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -5,6 +5,7 @@ */ #include "z_en_in.h" +#include "z64horse.h" #include "objects/object_in/object_in.h" #include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h" @@ -1286,7 +1287,7 @@ void func_808F5A34(EnIn* this, PlayState* play) { } void func_808F5A94(EnIn* this, PlayState* play) { - if (func_800F41E4(play, &play->actorCtx)) { + if (Horse_IsActive(play, &play->actorCtx)) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 7, &this->unk48C); } else { @@ -1302,7 +1303,7 @@ void func_808F5A94(EnIn* this, PlayState* play) { } void func_808F5B58(EnIn* this, PlayState* play) { - if (func_800F41E4(play, &play->actorCtx)) { + if (Horse_IsActive(play, &play->actorCtx)) { if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day == 3) { @@ -1394,7 +1395,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk4AC |= 2; func_808F35AC(this, play); this->unk23C = 0; - D_801BDAA0 = 0; + D_801BDAA0 = false; if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_6); 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 24d8b4137..21ddf2bee 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -6,6 +6,7 @@ #include "prevent_bss_reordering.h" #include "z_en_test4.h" +#include "z64horse.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h" @@ -405,9 +406,9 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { if ((rideActor->type == HORSE_TYPE_EPONA) || (rideActor->type == HORSE_TYPE_2)) { if (CURRENT_DAY < 3) { - D_801BDA9C = 1; + gHorseIsMounted = true; } else { - D_801BDA9C = 0; + gHorseIsMounted = false; } } } 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 23282c965..32945a2a4 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -5,6 +5,7 @@ */ #include "z_obj_um.h" +#include "z64horse.h" #include "overlays/actors/ovl_En_In/z_en_in.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -835,7 +836,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_31_80); play->nextEntrance = ENTRANCE(ROMANI_RANCH, 11); if (player->stateFlags1 & PLAYER_STATE1_800000) { - D_801BDAA0 = 1; + D_801BDAA0 = true; } play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; @@ -1093,7 +1094,7 @@ ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) { if (this->donkey != NULL) { this->dyna.actor.world.rot.y = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp50); - func_800F415C(&this->donkey->actor, &sp50, 0x190); + Horse_RotateToPoint(&this->donkey->actor, &sp50, 0x190); if (1) {} diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 7f33b45c1..1d4fa3489 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -6,6 +6,7 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "z64horse.h" #include "z64quake.h" #include "z64rumble.h" #include "z64shrink_window.h" @@ -5795,7 +5796,7 @@ s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) if (D_801BDAA0) { D_801BDAA0 = false; } else { - D_801BDA9C = true; + gHorseIsMounted = true; } } } @@ -15790,7 +15791,7 @@ void func_808505D0(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_800000; this->actor.parent = NULL; - D_801BDA9C = false; + gHorseIsMounted = false; if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) || (DREG(1) != 0)) { gSaveContext.save.saveInfo.horseData.sceneId = play->sceneId; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index bb392b722..088d66ce9 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -743,7 +743,7 @@ 0x800B7170:("Actor_SetCameraHorseSetting",), 0x800B71DC:("Actor_MountHorse",), 0x800B7200:("func_800B7200",), - 0x800B722C:("func_800B722C",), + 0x800B722C:("Actor_SpawnHorse",), 0x800B724C:("func_800B724C",), 0x800B7298:("func_800B7298",), 0x800B72E0:("func_800B72E0",), @@ -1683,16 +1683,16 @@ 0x800F37B0:("FireObj_Destroy",), 0x800F37F0:("FireObj_SetState2",), 0x800F3820:("FireObj_Update",), - 0x800F3940:("func_800F3940",), - 0x800F39B4:("func_800F39B4",), - 0x800F3A64:("func_800F3A64",), - 0x800F3B2C:("func_800F3B2C",), - 0x800F3B68:("func_800F3B68",), - 0x800F3C44:("func_800F3C44",), - 0x800F3ED4:("func_800F3ED4",), - 0x800F40A0:("func_800F40A0",), - 0x800F415C:("func_800F415C",), - 0x800F41E4:("func_800F41E4",), + 0x800F3940:("Horse_GetJumpingFencePathIndex",), + 0x800F39B4:("Horse_CopyPointFromPathList",), + 0x800F3A64:("Horse_IsValidSpawn",), + 0x800F3B2C:("Horse_ResetHorseData",), + 0x800F3B68:("Horse_IsValidSceneLayer",), + 0x800F3C44:("Horse_SpawnOverworld",), + 0x800F3ED4:("Horse_SpawnMinigame",), + 0x800F40A0:("Horse_Spawn",), + 0x800F415C:("Horse_RotateToPoint",), + 0x800F41E4:("Horse_IsActive",), 0x800F42A0:("Jpeg_ScheduleDecoderTask",), 0x800F43BC:("Jpeg_CopyToZbuffer",), 0x800F44F4:("Jpeg_GetUnalignedU16",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 83bf2c681..240ea9679 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -933,22 +933,12 @@ 0x801BD8FC:("sFireObjColors","FireObjColors","[1]",0x08), 0x801BD904:("sFireObjLightParams","FireObjLightParams","[1]",0x08), 0x801BD910:("gGameStateOverlayTable","GameStateOverlay","[7]",0x150), - 0x801BDA60:("graphNumGameStates","UNK_TYPE4","",0x4), - 0x801BDA70:("D_801BDA70","UNK_TYPE2","",0x2), - 0x801BDA74:("D_801BDA74","UNK_TYPE2","",0x2), - 0x801BDA78:("D_801BDA78","UNK_TYPE2","",0x2), - 0x801BDA7C:("D_801BDA7C","UNK_TYPE2","",0x2), - 0x801BDA9C:("D_801BDA9C","UNK_TYPE4","",0x4), - 0x801BDAA0:("D_801BDAA0","UNK_TYPE4","",0x4), - 0x801BDAA4:("D_801BDAA4","UNK_TYPE4","",0x4), - 0x801BDAA8:("D_801BDAA8","UNK_TYPE2","",0x2), - 0x801BDAAA:("D_801BDAAA","UNK_TYPE2","",0x2), - 0x801BDAAC:("D_801BDAAC","UNK_TYPE2","",0x2), - 0x801BDAAE:("D_801BDAAE","UNK_TYPE2","",0x2), - 0x801BDAB0:("D_801BDAB0","UNK_TYPE2","",0x2), - 0x801BDAB2:("D_801BDAB2","UNK_TYPE2","",0x2), - 0x801BDAB4:("D_801BDAB4","UNK_TYPE2","",0x2), - 0x801BDAB6:("D_801BDAB6","UNK_TYPE2","",0x2), + 0x801BDA60:("gGraphNumGameStates","UNK_TYPE4","",0x4), + 0x801BDA70:("sHorseValidScenes","struct_801BDAA8","[11]",0x2C), + 0x801BDA9C:("gHorseIsMounted","s32","",0x4), + 0x801BDAA0:("D_801BDAA0","s32","",0x4), + 0x801BDAA4:("gHorsePlayedEponasSong","s32","",0x4), + 0x801BDAA8:("sHorseValidSceneLayers","struct_801BDAA8","[4]",0x10), 0x801BDAC0:("D_801BDAC0","UNK_TYPE4","",0x4), 0x801BDAC4:("D_801BDAC4","UNK_TYPE4","",0x4), 0x801BDAC8:("D_801BDAC8","UNK_TYPE4","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index b1a0b9072..901d6dbf6 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -743,6 +743,12 @@ wordReplace = { "func_80102544": "LightContext_SetFog", + "func_800F3A64": "Horse_IsValidSpawn", + "func_800F3B2C": "Horse_ResetHorseData", + "func_800F40A0": "Horse_Spawn", + "func_800F415C": "Horse_RotateToPoint", + "func_800F41E4": "Horse_IsActive", + "Padmgr_GetControllerBitmask": "PadMgr_GetValidControllersMask", "func_80174F24": "PadMgr_SetRumbleRetraceCallback", "func_80174F44": "PadMgr_UnsetRumbleRetraceCallback", @@ -1071,6 +1077,9 @@ wordReplace = { "D_801D1E20": "gIdentityMtxF", "sSetupDL": "gSetupDLs", + "D_801BDA9C": "gHorseIsMounted", + "D_801BDAA4": "gHorsePlayedEponasSong", + # 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 419a7a4be..6713041f7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -257,7 +257,7 @@ asm/non_matchings/code/z_actor/func_800B715C.s,func_800B715C,0x800B715C,0x5 asm/non_matchings/code/z_actor/Actor_SetCameraHorseSetting.s,Actor_SetCameraHorseSetting,0x800B7170,0x1B asm/non_matchings/code/z_actor/Actor_MountHorse.s,Actor_MountHorse,0x800B71DC,0x9 asm/non_matchings/code/z_actor/func_800B7200.s,func_800B7200,0x800B7200,0xB -asm/non_matchings/code/z_actor/func_800B722C.s,func_800B722C,0x800B722C,0x8 +asm/non_matchings/code/z_actor/Actor_SpawnHorse.s,Actor_SpawnHorse,0x800B722C,0x8 asm/non_matchings/code/z_actor/func_800B724C.s,func_800B724C,0x800B724C,0x13 asm/non_matchings/code/z_actor/func_800B7298.s,func_800B7298,0x800B7298,0x12 asm/non_matchings/code/z_actor/func_800B72E0.s,func_800B72E0,0x800B72E0,0x6 @@ -1197,16 +1197,16 @@ asm/non_matchings/code/z_fireobj/FireObj_Init.s,FireObj_Init,0x800F36CC,0x39 asm/non_matchings/code/z_fireobj/FireObj_Fini.s,FireObj_Fini,0x800F37B0,0x10 asm/non_matchings/code/z_fireobj/FireObj_SetState2.s,FireObj_SetState2,0x800F37F0,0xC asm/non_matchings/code/z_fireobj/FireObj_Update.s,FireObj_Update,0x800F3820,0x48 -asm/non_matchings/code/z_horse/func_800F3940.s,func_800F3940,0x800F3940,0x1D -asm/non_matchings/code/z_horse/func_800F39B4.s,func_800F39B4,0x800F39B4,0x2C -asm/non_matchings/code/z_horse/func_800F3A64.s,func_800F3A64,0x800F3A64,0x32 -asm/non_matchings/code/z_horse/func_800F3B2C.s,func_800F3B2C,0x800F3B2C,0xF -asm/non_matchings/code/z_horse/func_800F3B68.s,func_800F3B68,0x800F3B68,0x37 -asm/non_matchings/code/z_horse/func_800F3C44.s,func_800F3C44,0x800F3C44,0xA4 -asm/non_matchings/code/z_horse/func_800F3ED4.s,func_800F3ED4,0x800F3ED4,0x73 -asm/non_matchings/code/z_horse/func_800F40A0.s,func_800F40A0,0x800F40A0,0x2F -asm/non_matchings/code/z_horse/func_800F415C.s,func_800F415C,0x800F415C,0x22 -asm/non_matchings/code/z_horse/func_800F41E4.s,func_800F41E4,0x800F41E4,0x2F +asm/non_matchings/code/z_horse/Horse_GetJumpingFencePathIndex.s,Horse_GetJumpingFencePathIndex,0x800F3940,0x1D +asm/non_matchings/code/z_horse/Horse_CopyPointFromPathList.s,Horse_CopyPointFromPathList,0x800F39B4,0x2C +asm/non_matchings/code/z_horse/Horse_IsValidSpawn.s,Horse_IsValidSpawn,0x800F3A64,0x32 +asm/non_matchings/code/z_horse/Horse_ResetHorseData.s,Horse_ResetHorseData,0x800F3B2C,0xF +asm/non_matchings/code/z_horse/Horse_IsValidSceneLayer.s,Horse_IsValidSceneLayer,0x800F3B68,0x37 +asm/non_matchings/code/z_horse/Horse_SpawnOverworld.s,Horse_SpawnOverworld,0x800F3C44,0xA4 +asm/non_matchings/code/z_horse/Horse_SpawnMinigame.s,Horse_SpawnMinigame,0x800F3ED4,0x73 +asm/non_matchings/code/z_horse/Horse_Spawn.s,Horse_Spawn,0x800F40A0,0x2F +asm/non_matchings/code/z_horse/Horse_RotateToPoint.s,Horse_RotateToPoint,0x800F415C,0x22 +asm/non_matchings/code/z_horse/Horse_IsActive.s,Horse_IsActive,0x800F41E4,0x2F asm/non_matchings/code/z_jpeg/Jpeg_ScheduleDecoderTask.s,Jpeg_ScheduleDecoderTask,0x800F42A0,0x47 asm/non_matchings/code/z_jpeg/Jpeg_CopyToZbuffer.s,Jpeg_CopyToZbuffer,0x800F43BC,0x4E asm/non_matchings/code/z_jpeg/Jpeg_GetUnalignedU16.s,Jpeg_GetUnalignedU16,0x800F44F4,0x13 From e0ae4e24f7978064e8d83c88aa4d09a4687da5b3 Mon Sep 17 00:00:00 2001 From: KidFeroz <98241806+KidFeroz@users.noreply.github.com> Date: Thu, 1 Jun 2023 17:41:37 -0600 Subject: [PATCH 38/51] ovl_Bg_Keikoku_Spr (#1228) * ovl_Bg_Keikoku_Spr * format * format * Co-authored-by: Alejandro Asenjo Nitti * Co-authored-by: Alejandro Asenjo Nitti --- spec | 3 +- .../ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c | 47 ++++++++++++++++--- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/spec b/spec index c378c6f05..05cd8d634 100644 --- a/spec +++ b/spec @@ -1026,8 +1026,7 @@ beginseg name "ovl_Bg_Keikoku_Spr" compress include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.o" - include "build/data/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr.data.o" - include "build/data/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr.reloc.o" + include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c index 8246a0298..ac9d089a4 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c +++ b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c @@ -1,3 +1,9 @@ +/* + * File: z_bg_keikoku_spr.c + * Overlay: ovl_Bg_Keikoku_Spr + * Description: Termina Field Fountain Water + */ + #include "z_bg_keikoku_spr.h" #include "objects/object_keikoku_obj/object_keikoku_obj.h" @@ -10,7 +16,6 @@ void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play); void BgKeikokuSpr_Update(Actor* thisx, PlayState* play); void BgKeikokuSpr_Draw(Actor* thisx, PlayState* play); -/* const ActorInit Bg_Keikoku_Spr_InitVars = { ACTOR_BG_KEIKOKU_SPR, ACTORCAT_PROP, @@ -20,14 +25,42 @@ const ActorInit Bg_Keikoku_Spr_InitVars = { (ActorFunc)BgKeikokuSpr_Init, (ActorFunc)BgKeikokuSpr_Destroy, (ActorFunc)BgKeikokuSpr_Update, - (ActorFunc)BgKeikokuSpr_Draw + (ActorFunc)BgKeikokuSpr_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Init.s") +static InitChainEntry sInitChain[] = { + ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_CONTINUE), + ICHAIN_VEC3F_DIV1000(scale, 20, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Destroy.s") +void BgKeikokuSpr_Init(Actor* thisx, PlayState* play) { + BgKeikokuSpr* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Update.s") + Actor_ProcessInitChain(&this->actor, sInitChain); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Draw.s") +void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play) { +} + +void BgKeikokuSpr_Update(Actor* thisx, PlayState* play) { +} + +void BgKeikokuSpr_Draw(Actor* thisx, PlayState* play) { + s32 pad; + + OPEN_DISPS(play->state.gfxCtx); + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0001F8)); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000100); + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0003F8)); + gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000300); + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0005F8)); + gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000500); + + CLOSE_DISPS(play->state.gfxCtx); +} From 95c5796e413c79ee3c228749d4269a8d4557e847 Mon Sep 17 00:00:00 2001 From: StickyThwomp <89738536+StickyThwomp@users.noreply.github.com> Date: Thu, 1 Jun 2023 22:30:48 -0500 Subject: [PATCH 39/51] ovl_En_Go OK and documented (Decomp was mostly done already) (#1080) * Match remaining functions in z_en_go: - Changed some already matching functions for uniformity with the tricky match (early continue from loop). In some cases, this eliminated some strange constructs, in others, it didn't leave much difference. - Comments/Notes to start understanding/naming process. * WIP renaming * More WIP renaming. * More renaming, Effects (See oot for continuation) and some flags) * MessageScript documenting. * Util for dumping message data by textId value. * Identify some messages. * Formatting, figuring out event flags. * More WIP naming * WIP renaming. * WIP renaming * WIP naming and organizing * WIP more renaming. * WIP renaming/organizing. * Near-Final Cleanup before review. * Rename Taisou and Hakugin animations and associated functions/variables. * Misc Cleanup. * Undo changes to variables.txt * Removed msgtableparser.py (Split to another branch) * Removal of uncompiled Message Script details. * Fixup spec file * First part of hensldm's suggested changes from review. Awaiting discussion. * Second part of hensldm's suggested changes. * Fixup missed 'Animation' suffix and functions.txt * Update .xml files and related source per tom-overton's comments * Align w/ engineer124's Quake Cleanup #1102 * fixup * Run format.sh after merge. * Add brackets around one-line conditional blocks * Remainder of hensldm's comments from review. * First pass at Elliptic's comments. * Rename functions UpdateToX -> ChangeToX * Header cleanup. * Run Format, remove accidental commit of .orig file. * Fixup ActorInit * Review comments addressed, plus a few unsolicited changes. - Location of function declarations moved above static data, below types: References in the codebase were mixed, but this just made more sense. - Function name changes: It didn't fit into subsystems based on Goron Type, so I quit trying to name functions that way. Loss of a bit of "which function applies to which type", but it looks a bit cleaner, sooo... - Took a stab at making effectTable usage a bit clearer. Just using a EnGoEffect* everywhere and not inherently knowing if it was for one element, or an array really bugged me. - "GraveBro" names changed. They're all "brothers". * Changes from engineer124's review. - "Stretcher" replaced with "Athletic" as a descriptor of goron type. - Misc formatting and naming changes * Restructure switch-case statment for early break, and added missing default cases. Removed #define for 0 for actionFlags bitmask. * Relocate WEEKEVENTREG comments, remove SCENE comments. * Updated WEEKEVENTREG define names * Update WEEKEVENTREG names in Goron Shrine Door. * ELDER -> ELDERS, and revert formatting on z64save.h * Fixed re-applying changes over wrong defines. * Adjust Weekeventreg names and comments. * Update comment as well. --- assets/xml/objects/object_hakugin_demo.xml | 9 +- assets/xml/objects/object_taisou.xml | 17 +- include/z64save.h | 33 +- spec | 4 - .../actors/ovl_Bg_Tobira01/z_bg_tobira01.c | 12 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 20 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 14 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 2661 ++++++++++------- src/overlays/actors/ovl_En_Go/z_en_go.h | 194 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 22 +- tools/disasm/functions.txt | 128 +- tools/weekeventregconvert.py | 18 +- 12 files changed, 1887 insertions(+), 1245 deletions(-) diff --git a/assets/xml/objects/object_hakugin_demo.xml b/assets/xml/objects/object_hakugin_demo.xml index 24c7a2ba2..8c8b5837c 100644 --- a/assets/xml/objects/object_hakugin_demo.xml +++ b/assets/xml/objects/object_hakugin_demo.xml @@ -1,8 +1,9 @@  + - - - - + + + + diff --git a/assets/xml/objects/object_taisou.xml b/assets/xml/objects/object_taisou.xml index 696285927..0143f2444 100644 --- a/assets/xml/objects/object_taisou.xml +++ b/assets/xml/objects/object_taisou.xml @@ -1,12 +1,13 @@  + - - - - - - - - + + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index 01acfed0e..fdb99fea0 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -695,7 +695,9 @@ typedef enum { #define WEEKEVENTREG_18_10 PACK_WEEKEVENTREG_FLAG(18, 0x10) #define WEEKEVENTREG_18_20 PACK_WEEKEVENTREG_FLAG(18, 0x20) #define WEEKEVENTREG_18_40 PACK_WEEKEVENTREG_FLAG(18, 0x40) -#define WEEKEVENTREG_18_80 PACK_WEEKEVENTREG_FLAG(18, 0x80) + +// Player has Powder Keg purchasing privileges. +#define WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES PACK_WEEKEVENTREG_FLAG(18, 0x80) #define WEEKEVENTREG_19_01 PACK_WEEKEVENTREG_FLAG(19, 0x01) #define WEEKEVENTREG_19_02 PACK_WEEKEVENTREG_FLAG(19, 0x02) #define WEEKEVENTREG_19_04 PACK_WEEKEVENTREG_FLAG(19, 0x04) @@ -717,8 +719,12 @@ typedef enum { #define WEEKEVENTREG_20_80 PACK_WEEKEVENTREG_FLAG(20, 0x80) #define WEEKEVENTREG_21_01 PACK_WEEKEVENTREG_FLAG(21, 0x01) #define WEEKEVENTREG_21_02 PACK_WEEKEVENTREG_FLAG(21, 0x02) -#define WEEKEVENTREG_21_04 PACK_WEEKEVENTREG_FLAG(21, 0x04) -#define WEEKEVENTREG_21_08 PACK_WEEKEVENTREG_FLAG(21, 0x08) + +// Player has spoken to Goron Graveyard's gravemaker while in Goron form. +#define WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON PACK_WEEKEVENTREG_FLAG(21, 0x04) +// Player has spoken to formerly frozen Goron outside Goron Graveyard. +#define WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON PACK_WEEKEVENTREG_FLAG(21, 0x08) + #define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10) #define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20) #define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40) @@ -729,7 +735,10 @@ typedef enum { #define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01) #define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02) -#define WEEKEVENTREG_22_04 PACK_WEEKEVENTREG_FLAG(22, 0x04) + +// Goron Elder's son has been calmed from Goron's Lullaby. +#define WEEKEVENTREG_CALMED_GORON_ELDERS_SON PACK_WEEKEVENTREG_FLAG(22, 0x04) + #define WEEKEVENTREG_22_08 PACK_WEEKEVENTREG_FLAG(22, 0x08) #define WEEKEVENTREG_22_10 PACK_WEEKEVENTREG_FLAG(22, 0x10) #define WEEKEVENTREG_22_20 PACK_WEEKEVENTREG_FLAG(22, 0x20) @@ -1293,11 +1302,17 @@ typedef enum { #define WEEKEVENTREG_88_08 PACK_WEEKEVENTREG_FLAG(88, 0x08) #define WEEKEVENTREG_88_10 PACK_WEEKEVENTREG_FLAG(88, 0x10) #define WEEKEVENTREG_88_20 PACK_WEEKEVENTREG_FLAG(88, 0x20) -#define WEEKEVENTREG_88_40 PACK_WEEKEVENTREG_FLAG(88, 0x40) -#define WEEKEVENTREG_88_80 PACK_WEEKEVENTREG_FLAG(88, 0x80) -#define WEEKEVENTREG_89_01 PACK_WEEKEVENTREG_FLAG(89, 0x01) -#define WEEKEVENTREG_89_02 PACK_WEEKEVENTREG_FLAG(89, 0x02) -#define WEEKEVENTREG_89_04 PACK_WEEKEVENTREG_FLAG(89, 0x04) + +// Goron shrine Gatekeeper has opened shrine. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE PACK_WEEKEVENTREG_FLAG(88, 0x40) +// Goron shrine Gatekeeper has opened shrine for player in Human form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN PACK_WEEKEVENTREG_FLAG(88, 0x80) +// Goron shrine Gatekeeper has opened shrine for player in Deku form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU PACK_WEEKEVENTREG_FLAG(89, 0x01) +// Goron shrine Gatekeeper has opened shrine for player in Zora form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA PACK_WEEKEVENTREG_FLAG(89, 0x02) +// Goron shrine Gatekeeper has opened shrine for player in Goron form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON PACK_WEEKEVENTREG_FLAG(89, 0x04) // Unconfirmed: "Postman has delivered priority mail" #define WEEKEVENTREG_89_08 PACK_WEEKEVENTREG_FLAG(89, 0x08) diff --git a/spec b/spec index 05cd8d634..a9d627634 100644 --- a/spec +++ b/spec @@ -2402,11 +2402,7 @@ beginseg name "ovl_En_Go" compress include "build/src/overlays/actors/ovl_En_Go/z_en_go.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_En_Go/ovl_En_Go_reloc.o" -#else - include "build/data/ovl_En_Go/ovl_En_Go.reloc.o" -#endif endseg beginseg diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index 920842b0b..5302c6a90 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -38,12 +38,12 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } else if (CutsceneManager_IsNext(csId)) { CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); - SET_WEEKEVENTREG(WEEKEVENTREG_88_40); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); this->cutsceneRequested = false; } else { CutsceneManager_Queue(csId); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (this->posYTick == 0) && + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) && (this->posYTick == 0) && (play->actorCtx.playerImpact.timer != 0) && (play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND) && (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) { @@ -52,7 +52,7 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) { } prevPosYTick = this->posYTick; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE)) { this->posYTick++; } else { this->posYTick--; @@ -65,9 +65,9 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) { this->timer = 180; } - if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && + if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) && (DECR(this->timer) == 0)) { - CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); } } @@ -76,7 +76,7 @@ void BgTobira01_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gGoronDoorCol); - CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); Actor_SetScale(&this->dyna.actor, 1.0f); this->timer = gSaveContext.save.isNight; this->posYTick = 0; 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 0362fb4e3..6621ecc93 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -135,17 +135,17 @@ static AnimationInfoS sAnimationInfo[] = { { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &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 }, - { &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &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 }, }; 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 c561035aa..28d5c344d 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -830,7 +830,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) { } void func_80B51FD0(EnGk* this, PlayState* play) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (this->unk_1E4 & 2) { func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } else { @@ -897,7 +897,7 @@ void func_80B5227C(EnGk* this, PlayState* play) { func_800B14D4(play, 20.0f, &this->actor.home.pos); this->unk_350 = 60; if (!(this->unk_1E4 & 0x80)) { - SET_WEEKEVENTREG(WEEKEVENTREG_22_04); + SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON); } Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT); this->unk_350 = 0x4000; @@ -987,7 +987,7 @@ void func_80B525E0(EnGk* this, PlayState* play) { void func_80B52654(EnGk* this, PlayState* play) { this->unk_350 += 0x400; if ((this->unk_1E4 & 0x80) && (play->csCtx.curFrame == 250)) { - SET_WEEKEVENTREG(WEEKEVENTREG_22_04); + SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON); } this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f; @@ -1044,7 +1044,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } else if (ENGK_GET_F(&this->actor) == ENGK_F_2) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->actionFunc = func_80B51FD0; this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; @@ -1052,7 +1052,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { } else { Actor_Kill(&this->actor); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->unk_2E4 = 0; this->csId = this->actor.csId; this->actor.flags |= ACTOR_FLAG_10; @@ -1076,7 +1076,7 @@ void EnGk_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if ((ENGK_GET_F(&this->actor) == ENGK_F_1) || - ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) { + ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) { func_80B507A0(this, play); SkelAnime_Update(&this->skelAnime); Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos); @@ -1235,7 +1235,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { Matrix_RotateXS(-0x4000, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 67cbf327a..f70628930 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -2,42 +2,208 @@ * File: z_en_go.c * Overlay: ovl_En_Go * Description: Goron + * + * This actor handles multiple (but not all) Gorons. The Gorons included are: + * - Athletics Goron: Gorons in the racetrack performing stretches before/after a race. + * - Spectator Goron: Gorons scattered throughout the racetrack watching the race. + * - Gatekeeper Goron: The Gatekeeper of the Goron Shrine. + * - Graveyard Goron: Both Gorons outside the Goron Graveyard (one of which is initially frozen). + * - Shrine Goron: Gorons in the Goron Shrine (specifically, one in the elders room, one outside the elder's room, and + * one outside the shop, not all Gorons in the Goron Shrine are covered by this actor). + * - Medigoron: The Powder Keg making Medigoron in Goron Village. */ - #include "z_en_go.h" #include "z64quake.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" -#include "objects/object_oF1d_map/object_oF1d_map.h" #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/object_taisou/object_taisou.h" #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 THIS ((EnGo*)thisx) +#define ENGO_STANDING_Y_OFFSET 0.0f // Actor shape offset in use when a Goron is in any standing state. +#define ENGO_ROLLEDUP_Y_OFFSET 14.0f // Actor shape offset in use when a Goron is "rolled up". +#define ENGO_SNOWBALL_Y_OFFSET 46.0f // Actor shape offset in use when a Goron is in a snowball. + +#define ENGO_NORMAL_SCALE 0.01f // "Unit Scale" of a normal Goron. +#define ENGO_MEDIGORON_SCALE_MULTIPLIER 5.0f // Scale factor for the Medigoron in the Powder Keg Shop. + +#define ENGO_POUND_INITIAL_RISE_VEL 10.0f // Velocity at which the Gatekeeper's pound surges into the air. +#define ENGO_POUND_INITIAL_FALL_VEL -6.0f // Velocity at which the Gatekeeper's pound surges to the ground. + +#define ENGO_DUST_STEAM_LIFETIME 16 // Lifetime in frames of the Dust and Steam effects. + +#define ENGO_FLAG_ENGAGED (1 << 3) +#define ENGO_FLAG_FACE_TARGET (1 << 4) +#define ENGO_FLAG_EYES_OPEN (1 << 5) +#define ENGO_FLAG_LOST_ATTENTION (1 << 6) +#define ENGO_FLAG_STANDING (1 << 7) +#define ENGO_FLAG_SNOWBALLED (1 << 8) +#define ENGO_FLAG_ROLLED_UP (1 << 9) +#define ENGO_FLAG_FROZEN (1 << 10) +#define ENGO_FLAG_HIT_OTHER (1 << 11) +#define ENGO_FLAG_HIT_BY_OTHER (1 << 12) +#define ENGO_FLAG_HIT_OBJ (1 << 13) +#define ENGO_FLAG_ROLLING_UP (1 << 14) +#define ENGO_FLAG_UNROLLING (1 << 15) + void EnGo_Init(Actor* thisx, PlayState* play); void EnGo_Destroy(Actor* thisx, PlayState* play); void EnGo_Update(Actor* thisx, PlayState* play); +void EnGo_Draw(Actor* thisx, PlayState* play); -void func_80A14798(EnGo* this, PlayState* play); -void func_80A149B0(EnGo* this, PlayState* play); -void func_80A14B30(EnGo* this, PlayState* play); -void func_80A14E14(EnGo* this, PlayState* play); -void func_80A14E74(EnGo* this, PlayState* play); -void func_80A14EB0(EnGo* this, PlayState* play); -void func_80A14FC8(EnGo* this, PlayState* play); -void func_80A153FC(EnGo* this, PlayState* play); -void func_80A157C4(EnGo* this, PlayState* play); -void func_80A15FEC(Actor* thisx, PlayState* play); +typedef enum EnGoEyeTexture { + /* 0 */ ENGO_EYETEX_OPEN, + /* 1 */ ENGO_EYETEX_HALF, + /* 2 */ ENGO_EYETEX_CLOSED, + /* 3 */ ENGO_EYETEX_HALF2, + /* 4 */ ENGO_EYETEX_CLOSED2 +} EnGoEyeTexture; -static s32 D_80A16100[] = { +typedef enum EnGoSleepState { + /* -1 */ ENGO_ASLEEP_NEG = -1, + /* 0 */ ENGO_AWAKE, + /* 1 */ ENGO_ASLEEP_POS +} EnGoSleepState; + +typedef enum EnGoEffectType { + /* 0 */ ENGO_EFFECT_NONE, + /* 1 */ ENGO_EFFECT_SNOW1, + /* 2 */ ENGO_EFFECT_SNOW2, + /* 3 */ ENGO_EFFECT_SNOW3, + /* 4 */ ENGO_EFFECT_DUST_MIN, + /* 4 */ ENGO_EFFECT_DUST1 = ENGO_EFFECT_DUST_MIN, + /* 5 */ ENGO_EFFECT_DUST2, + /* 6 */ ENGO_EFFECT_DUST3, + /* 7 */ ENGO_EFFECT_STEAM_MIN, + /* 7 */ ENGO_EFFECT_STEAM = ENGO_EFFECT_STEAM_MIN +} EnGoEffectType; + +typedef enum EnGoAnimationIndex { + /* -1 */ ENGO_ANIM_INVALID = -1, + /* 0 */ ENGO_ANIM_GORON_MIN, + /* 0 */ ENGO_ANIM_LYINGDOWNIDLE = ENGO_ANIM_GORON_MIN, + /* 1 */ ENGO_ANIM_LYINGDOWNIDLE_IMM, + /* 2 */ ENGO_ANIM_UNROLL, + /* 3 */ ENGO_ANIM_UNROLL_IMM, + /* 4 */ ENGO_ANIM_ROLL, + /* 5 */ ENGO_ANIM_SHIVER, + /* 6 */ ENGO_ANIM_SHIVER_IMM, + /* 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; + +EnGoEffect* EnGo_InitSteam(EnGoEffect effect[], Vec3f pos, Vec3f accel, Vec3f velocity, f32 scale, f32 deltaScale, + s32 maxFrames); +void EnGo_DrawSteam(EnGoEffect effect[], PlayState* play2); + +void EnGo_InitDust(EnGoEffect effect[], Vec3f pos, Vec3f accel, Vec3f vel, f32 scale, f32 deltaScale, s32 maxFrames, + EnGoEffectType parentEffectType); +void EnGo_DrawDust(EnGoEffect effect[], PlayState* play2); + +void EnGo_InitSnow(EnGoEffect effect[], Vec3f pos); +void EnGo_UpdateSnow(EnGoEffect* effect, f32 dustConversionHeight); +void EnGo_DrawSnow(EnGoEffect effect[], PlayState* play, Gfx* material, Gfx* model, u8 effectType); + +void EnGo_UpdateEffects(EnGo* this); +void EnGo_DrawEffects(EnGo* this, PlayState* play); + +s32 EnGo_CanSnowballHurtPlayer(PlayState* play); +s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play); + +s32 EnGo_UpdateFocus(EnGo* this); + +void EnGo_UpdateSnowballCollider(EnGo* this, PlayState* play); +void EnGo_UpdateMedigoronCollider(EnGo* this, PlayState* play); +void EnGo_UpdateRolledUpCollider(EnGo* this, PlayState* play); +void EnGo_UpdateFrozenCollider(EnGo* this, PlayState* play); +void EnGo_UpdateStandingCollider(EnGo* this, PlayState* play); +void EnGo_UpdateCollider(EnGo* this, PlayState* play); + +s32 EnGo_UpdateTalking(EnGo* this, PlayState* play); +s32 EnGo_DetectCollisions(EnGo* this, PlayState* play); +s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play); +s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play); +s32 EnGo_UpdateSfx(EnGo* this, PlayState* play); +s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex); +void EnGo_UpdateEyes(EnGo* this); + +void EnGo_UpdateShiverSurprisedAnimation(EnGo* this, PlayState* play); +s32 EnGo_UpdateGraveyardAttentionTargetAndReactions(EnGo* this, PlayState* play); +s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play); +s32 EnGo_UpdateAttentionTargetAndReactions(EnGo* this, PlayState* play); + +void EnGo_GravemakerIdle(EnGo* this, PlayState* play); +void EnGo_FrozenIdle(EnGo* this, PlayState* play); +Actor* EnGo_FindGravemaker(EnGo* this, PlayState* play); + +void EnGo_UpdateMedigoronColliderRadius(EnGo* this, PlayState* play, s32 isGivenPowderKeg); +s32 EnGo_ChangeCutscene(EnGo* this, s16 csId); + +s32 EnGo_HandleGatekeeperPoundCutscene(EnGo* this, f32 initialVelocity, f32 maxDistortion, s32 maxHangtime); +void EnGo_AddGatekeeperPoundQuake(PlayState* play, s16 speed, s16 verticalMag, s16 countdown); +void EnGo_CreateGatekeeperPoundEffects(EnGo* this, PlayState* play); +void EnGo_DrawIceBlockWhenFrozen(EnGo* this, PlayState* play, f32 scale, f32 alpha); +void EnGo_MakeSteam(EnGo* this); + +s32 EnGo_HandleOpenShrineCutscene(Actor* thisx, PlayState* play); +s32 EnGo_HandleGivePowderKegCutscene(Actor* thisx, PlayState* play); + +void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToSnowballAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play); + +void EnGo_SetupAthletic(EnGo* this, PlayState* play); +void EnGo_SetupSpectator(EnGo* this, PlayState* play); +void EnGo_SetupGatekeeper(EnGo* this, PlayState* play); +void EnGo_SetupGraveyardGoron(EnGo* this, PlayState* play); +void EnGo_SetupShrineGoron(EnGo* this, PlayState* play); +void EnGo_SetupMedigoron(EnGo* this, PlayState* play); +void EnGo_SetupInitialAction(EnGo* this, PlayState* play); + +void EnGo_Idle(EnGo* this, PlayState* play); +void EnGo_Sleep(EnGo* this, PlayState* play); +void EnGo_Frozen(EnGo* this, PlayState* play); +void EnGo_AwaitThaw(EnGo* this, PlayState* play); +void EnGo_Thaw(EnGo* this, PlayState* play); + +void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play); + +void EnGo_Snowball(EnGo* this, PlayState* play); + +s32* EnGo_GetMsgEventScript(EnGo* this, PlayState* play); + +void EnGo_Talk(EnGo* this, PlayState* play); + +// MsgEvent script for the Goron who made Darmani's grave in the mountain village. +static s32 sMsgScriptGoronGravemaker[] = { 0x00150800, 0x40010022, 0x00150200, 0x180E0E10, 0x0C0F0E11, 0x0C0F0E12, 0x0C0F0E13, 0x0C0F0E14, 0x0C111502, 0x100E0E15, 0x0C100015, 0x0400110E, 0x0E160C0F, 0x0E170C0F, 0x0E180C11, 0x15041610, 0x0E0E190C, 0x10001504, 0x000D0100, 0x050E0E31, 0x0C100E0E, 0x2F0C1001, 0x00050E0E, 0x2D0C100E, 0x0E2B0C10, }; -static s32 D_80A16164[] = { +// MsgEvent script for the frozen Goron aside the gravemaker in the mountain village. +static s32 sMsgScriptGoronFrozen[] = { 0x00150800, 0x7E01004D, 0x00150400, 0x180E0E1A, 0x0C170F0E, 0x230C180F, 0x0E240C0F, 0x0E250C12, 0x16111508, 0x100E0E1A, 0x0C170F0E, 0x230C180F, 0x0E240C0F, 0x0E250C17, 0x0F0E260C, 0x180F0E27, 0x0C170F0E, 0x280C180F, 0x0E290C17, 0x0F0E2A0C, 0x16111508, 0x100E0E1A, 0x0C170F0E, 0x1B0C180F, 0x0E1C0C0F, 0x0E1D0C0F, 0x0E1E0C17, @@ -45,19 +211,23 @@ static s32 D_80A16164[] = { 0x0E0E300C, 0x10010005, 0x0E0E2E0C, 0x100E0E2C, 0x0C100000, }; -static s32 D_80A16208[2] = { 0xE0E520C, 0x10000000 }; +// MsgEvent script for the shrine Goron standing aside the store. +static s32 sMsgScriptGoronAsideStore[] = { 0xE0E520C, 0x10000000 }; -static s32 D_80A16210[17] = { +// MsgEvent script for the shrine Goron standing aside the Elder's son. +static s32 sMsgScriptGoronAsideEldersSon[] = { 0x160400, 0x38010010, 0xE0E430C, 0xF0E440C, 0xF0E450C, 0x11188010, 0x160800, 0x1B0E0E46, 0xC0F0E47, 0xC0F0E48, 0xC0F0E49, 0xC0F0E4A, 0xC111608, 0x11188010, 0xE0E4B0C, 0x100E0E42, 0xC100000, }; -static s32 D_80A16254[11] = { +// MsgEvent script for the shrine Goron standing aside the Elder's room. +static s32 sMsgScriptGoronAsideEldersRoom[] = { 0x160400, 0x22010009, 0xE0E4D0C, 0xF0E4E0C, 0x10001701, 0xC0E0E, 0x4F0C0F0E, 0x500C1117, 0x1100E0E, 0x510C100E, 0xE4C0C10, }; -static s32 D_80A16280[52] = { +// MsgEvent script for the Goron in Goron Village who sells Powder Kegs. +static s32 sMsgScriptGoronMedigoron[] = { 0x1001200, 0x12200008, 0xE0C8E0C, 0x11122010, 0xE0C8F0C, 0x10001240, 0x1D0E0C, 0x800C1112, 0x40001280, 0x742500, 0xC006F00, 0x13010045, 0xF0C810C, 0x19001300, 0x1280005E, 0x25000C00, 0x59001301, 0x2F0E0C, 0x810C0F0C, 0x820C0500, 0x1A00, 0x1A300E0C, 0x830C1209, 0x700, 0xE0C84, 0x160C1113, 0x1100E0C, @@ -66,18 +236,30 @@ static s32 D_80A16280[52] = { 0x14FF9C12, 0x6003400, 0x130034, 0x700000E, 0xC870C16, 0x100E0C8B, 0xC100000, }; -static s32 D_80A16350[27] = { +// MsgEvent script for the gatekeeper Goron in Goron Village who opens the shrine gate. +static s32 sMsgScriptGoronGatekeeper[] = { 0x584000, 0x2903000E, 0x2001301, 0x180058, 0x80005119, 0x1E0059, 0x1004919, 0x160059, 0x2004119, 0xE0059, 0x4003919, 0x2F0E0D, 0x4D0C1210, 0xE0D480C, 0xF0D490C, 0xF0D4A0C, 0x5000000, 0xF000F30, 0xE0D4B0C, 0x15090000, 0xE0D4D0C, 0x1210310E, 0xD4C0C12, 0x100E0D4E, 0xC19FFD8, 0xE0D4F0C, 0x19FFD500, }; -static s32 D_80A163BC[4] = { 0x100060E, 0xDFE0C12, 0x100E0DFF, 0xC121000 }; -static s32 D_80A163CC[4] = { 0x100060E, 0xE000C12, 0x100E0E01, 0xC121000 }; -static s32 D_80A163DC[4] = { 0x100060E, 0xE020C12, 0x100E0E03, 0xC121000 }; -static s32 D_80A163EC[4] = { 0x100060E, 0xE040C12, 0x100E0E05, 0xC121000 }; -static s32 D_80A163FC[4] = { 0x100060E, 0xE060C12, 0x100E0E07, 0xC121000 }; -static s32 D_80A1640C[2] = { 0xE023A0C, 0x12100000 }; +// MsgEvent script for one of the Goron stretchers at the racetrack (Initially stretching side to side while squatting). +static s32 sMsgScriptGoronAthleticA[] = { 0x100060E, 0xDFE0C12, 0x100E0DFF, 0xC121000 }; + +// MsgEvent script for one of the Goron stretchers at the racetrack (Initially doing sidebend stretches with one arm). +static s32 sMsgScriptGoronAthleticB[] = { 0x100060E, 0xE000C12, 0x100E0E01, 0xC121000 }; + +// MsgEvent script for one of the Goron stretchers at the racetrack (Initially shaking out their limbs). +static s32 sMsgScriptGoronAthleticC[] = { 0x100060E, 0xE020C12, 0x100E0E03, 0xC121000 }; + +// MsgEvent script for one of the Goron stretchers (Initially doing sidebend stretches with both arms). +static s32 sMsgScriptGoronAthleticD[] = { 0x100060E, 0xE040C12, 0x100E0E05, 0xC121000 }; + +// MsgEvent script for the pair of Gorons stretching one Goron's hamstrings. +static s32 sMsgScriptGoronAthleticHamstring[] = { 0x100060E, 0xE060C12, 0x100E0E07, 0xC121000 }; + +// MsgEvent script for any sleeping Goron. +static s32 sMsgScriptGoronSleeping[] = { 0xE023A0C, 0x12100000 }; ActorInit En_Go_InitVars = { ACTOR_EN_GO, @@ -111,7 +293,8 @@ static ColliderSphereInit sSphereInit = { { 0, { { 0, 0, 0 }, 0 }, 100 }, }; -static ColliderCylinderInit sCylinderInit1 = { +// Collider for the frozen solid Gorons. +static ColliderCylinderInit sCylinderInitFrozen = { { COLTYPE_METAL, AT_ON | AT_TYPE_ENEMY, @@ -131,7 +314,8 @@ static ColliderCylinderInit sCylinderInit1 = { { 0, 0, 0, { 0, 0, 0 } }, }; -static ColliderCylinderInit sCylinderInit2 = { +// Collider for normal Gorons. +static ColliderCylinderInit sCylinderInit = { { COLTYPE_HIT1, AT_NONE, @@ -153,42 +337,55 @@ static ColliderCylinderInit sCylinderInit2 = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; +typedef enum { + /* 0x0 */ ENGO_DMGEFF_NONE, + /* 0x2 */ ENGO_DMGEFF_FIRE = 0x2, + /* 0xF */ ENGO_DMGEFF_BREAK = 0xF +} EnGoDamageEffect; + static DamageTable sDamageTable = { - /* Deku Nut */ DMG_ENTRY(1, 0x0), - /* Deku Stick */ DMG_ENTRY(1, 0x0), - /* Horse trample */ DMG_ENTRY(1, 0x0), - /* Explosives */ DMG_ENTRY(1, 0x0), - /* Zora boomerang */ DMG_ENTRY(1, 0x0), - /* Normal arrow */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x06 */ DMG_ENTRY(1, 0x0), - /* Hookshot */ DMG_ENTRY(1, 0x0), - /* Goron punch */ DMG_ENTRY(1, 0xF), - /* Sword */ DMG_ENTRY(1, 0x0), - /* Goron pound */ DMG_ENTRY(1, 0xF), - /* Fire arrow */ DMG_ENTRY(1, 0x2), - /* Ice arrow */ DMG_ENTRY(1, 0x0), - /* Light arrow */ DMG_ENTRY(1, 0x0), - /* Goron spikes */ DMG_ENTRY(1, 0xF), - /* Deku spin */ DMG_ENTRY(1, 0x0), - /* Deku bubble */ DMG_ENTRY(1, 0x0), - /* Deku launch */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x12 */ DMG_ENTRY(1, 0x0), - /* Zora barrier */ DMG_ENTRY(1, 0x0), - /* Normal shield */ DMG_ENTRY(1, 0x0), - /* Light ray */ DMG_ENTRY(1, 0x0), - /* Thrown object */ DMG_ENTRY(1, 0x0), - /* Zora punch */ DMG_ENTRY(1, 0x0), - /* Spin attack */ DMG_ENTRY(1, 0x0), - /* Sword beam */ DMG_ENTRY(1, 0x0), - /* Normal Roll */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(1, 0x0), - /* Unblockable */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(1, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0x0), + /* Deku Nut */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Deku Stick */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Horse trample */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Explosives */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Zora boomerang */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Hookshot */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Goron punch */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK), + /* Sword */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Goron pound */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK), + /* Fire arrow */ DMG_ENTRY(1, ENGO_DMGEFF_FIRE), + /* Ice arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Light arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Goron spikes */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK), + /* Deku spin */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Deku bubble */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x12 */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Zora barrier */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Normal shield */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Light ray */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Thrown object */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Sword beam */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Normal Roll */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x1B */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x1C */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Unblockable */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x1E */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Powder Keg */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), }; +/** + * Animations used in the actor. + * + * @see EnGoAnimationIndex + */ static AnimationInfoS sAnimationInfo[] = { + + /* Animations for generic Goron actions */ { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, @@ -200,366 +397,453 @@ static AnimationInfoS sAnimationInfo[] = { { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + /* Animations for stretching Gorons at the racetrack */ + { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsSquatSideToSideAnim, 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 }, - { &object_hakugin_demo_Anim_001420, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_hakugin_demo_Anim_001A4C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + /* Animations for the Goron during the spring arrival cutscene */ + { &gGoronSpringShowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gGoronSpringShowLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, }; -EnGoStruct* func_80A10FD0(EnGoStruct* ptr, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 arg4, f32 arg5, s32 arg6) { +/** + * Initialize the latter section of the effects in 'effectTable' to be of type ENGO_EFFECT_STEAM. + * + * @param effect Latter section of the EnGoEffect table (&effectTable[ENGO_SNOW_EFFECT_COUNT]) + * @param pos Initial pos + * @param accel Initial acceleration + * @param velocity Initial velocity + * @param scale Initial scale + * @param deltaScale How much the effect scales per frame (additive) + * @param maxFrames Maximum number of frames the effect will last. Actual lifetime will be between 'maxFrames / 3' and + * 'maxFrames' + */ +EnGoEffect* EnGo_InitSteam(EnGoEffect effect[ENGO_OTHER_EFFECT_COUNT], Vec3f pos, Vec3f accel, Vec3f velocity, + f32 scale, f32 deltaScale, s32 maxFrames) { s32 i; - for (i = 16; i < 32; i++, ptr++) { - if (ptr->unk_00 == 0) { - ptr->unk_00 = 7; - ptr->unk_01 = (Rand_ZeroOne() * (2.0f * (arg6 / 3.0f))) + (arg6 / 3.0f); - ptr->unk_02 = ptr->unk_01; - ptr->unk_10 = arg1; - ptr->unk_1C = arg2; - ptr->unk_28 = arg3; - ptr->unk_34 = arg4; - ptr->unk_38 = arg5; - break; + // Steam effects are from the end of the snow effects to the end of all effects + for (i = ENGO_SNOW_EFFECT_COUNT; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_NONE) { + continue; } - } - return ptr; + effect->type = ENGO_EFFECT_STEAM; + effect->alphaDenom = (Rand_ZeroOne() * (2.0f * (maxFrames / 3.0f))) + (maxFrames / 3.0f); + effect->alphaNumer = effect->alphaDenom; + effect->pos = pos; + effect->accel = accel; + effect->velocity = velocity; + effect->scaleXY = scale; + effect->scaleXYDelta = deltaScale; + break; + } + return effect; } -void func_80A11144(EnGoStruct* ptr, PlayState* play) { - s32 pad; +/** + * Draw all effects of type ENGO_EFFECT_STEAM. + * + * @param effect The EnGoEffect table + */ +void EnGo_DrawSteam(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { + PlayState* play = play2; s32 i; - s32 flag = false; - f32 temp; + s32 isMaterialSet = false; + f32 alpha; OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Xlu(play->state.gfxCtx); - - for (i = 0; i < 32; i++, ptr++) { - - if (ptr->unk_00 == 7) { - gDPPipeSync(POLY_XLU_DISP++); - - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, gGoronSteamMaterialDL); - flag = true; - } - - Matrix_Push(); - - temp = ((f32)ptr->unk_02 / ptr->unk_01); - temp *= 255; - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)temp); - gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, (ptr->unk_02 + (i * 3)) * 3, - (ptr->unk_02 + (i * 3)) * 15, 0x20, 0x40, 1, 0, 0, 0x20, 0x20)); - - Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(ptr->unk_34, ptr->unk_34, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gGoronSteamModelDL); - - Matrix_Pop(); - if (play->state.gfxCtx) {} + for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_STEAM) { + continue; } + + gDPPipeSync(POLY_XLU_DISP++); + if (!isMaterialSet) { + gSPDisplayList(POLY_XLU_DISP++, gGoronSteamMaterialDL); + isMaterialSet = true; + } + + Matrix_Push(); + + alpha = (f32)effect->alphaNumer / effect->alphaDenom; + alpha *= 255.0f; + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)alpha); + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, (effect->alphaNumer + (i * 3)) * 3, + (effect->alphaNumer + (i * 3)) * 15, 0x20, 0x40, 1, 0, 0, 0x20, 0x20)); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(effect->scaleXY, effect->scaleXY, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gGoronSteamModelDL); + + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -void func_80A1143C(EnGoStruct* ptr, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 arg4, f32 arg5, s32 arg6, s32 arg7) { +/** + * Initialize the first available effect to be of type 'ENGO_EFFECT_DUST1'/'2'/'3'. + * + * @param effect Latter section of the EnGoEffect table (&effectTable[ENGO_SNOW_EFFECT_COUNT]) + * @param pos Initial pos + * @param accel Initial acceleration + * @param velocity Initial velocity + * @param scale Initial scale + * @param deltaScale How much the effect scales per frame (additive) + * @param maxFrames Maximum number of frames the effect will last. Actual lifetime will be 1/3 * maxFrames -> maxFrames + * @param parentEffectType Type of the parent effect, determines which of the possible dust effects correspond + */ +void EnGo_InitDust(EnGoEffect effect[ENGO_OTHER_EFFECT_COUNT], Vec3f pos, Vec3f accel, Vec3f vel, f32 scale, + f32 deltaScale, s32 maxFrames, EnGoEffectType parentEffectType) { s32 i; - for (i = 16; i < 32; i++, ptr++) { - if (ptr->unk_00 == 0) { - ptr->unk_00 = arg7 + 4; - - ptr->unk_01 = (Rand_ZeroOne() * (2.0f * (arg6 / 3.0f))) + (arg6 / 3.0f); - ptr->unk_02 = ptr->unk_01; - - ptr->unk_10 = arg1; - ptr->unk_1C = arg2; - ptr->unk_28 = arg3; - ptr->unk_34 = arg4; - ptr->unk_38 = arg5; - break; + // Dust effects are from the end of the snow effects to the end of all effects. + for (i = ENGO_SNOW_EFFECT_COUNT; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_NONE) { + continue; } + + effect->type = parentEffectType + ENGO_EFFECT_DUST_MIN; + effect->alphaDenom = (Rand_ZeroOne() * (2.0f * (maxFrames / 3.0f))) + (maxFrames / 3.0f); + effect->alphaNumer = effect->alphaDenom; + effect->pos = pos; + effect->accel = accel; + effect->velocity = vel; + effect->scaleXY = scale; + effect->scaleXYDelta = deltaScale; + break; } } -void func_80A115B4(EnGoStruct* ptr, PlayState* play) { +/** + * Draw all effects of type 'ENGO_EFFECT_DUST1'/'2'/'3'. + * + * @param effect The EnGoEffect table + */ +void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { static TexturePtr sDustTextures[] = { gEffDust8Tex, gEffDust7Tex, gEffDust6Tex, gEffDust5Tex, gEffDust4Tex, gEffDust3Tex, gEffDust2Tex, gEffDust1Tex, }; - static Color_RGBA8 D_80A16664[] = { - { 255, 255, 255, 0 }, - { 170, 130, 90, 0 }, - { 0, 0, 0, 0 }, + static Color_RGBA8 sEnGoDustPrimColor[] = { + { 255, 255, 255, 0 }, // White + { 170, 130, 90, 0 }, // Light Brown + { 0, 0, 0, 0 }, // Black }; - static Color_RGBA8 D_80A16670[] = { - { 255, 255, 255, 0 }, - { 100, 60, 20, 0 }, - { 0, 0, 0, 0 }, + static Color_RGBA8 sEnGoDustEnvColor[] = { + { 255, 255, 255, 0 }, // White + { 100, 60, 20, 0 }, // Dark Brown + { 0, 0, 0, 0 }, // Black }; + PlayState* play = play2; s32 i; - u8 flag = false; - f32 temp; + u8 isMaterialSet = false; + f32 alpha; OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Xlu(play->state.gfxCtx); - - for (i = 0; i < 32; i++, ptr++) { - if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) { - if (!flag) { - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); - flag = true; - } - Matrix_Push(); - - temp = (f32)ptr->unk_02 / ptr->unk_01; - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80A16664[(s32)ptr->unk_00 - 4].r, - D_80A16664[(s32)ptr->unk_00 - 4].g, D_80A16664[(s32)ptr->unk_00 - 4].b, (u8)(temp * 255)); - gDPSetEnvColor(POLY_XLU_DISP++, D_80A16670[(s32)ptr->unk_00 - 4].r, D_80A16670[(s32)ptr->unk_00 - 4].g, - D_80A16670[(s32)ptr->unk_00 - 4].b, 0); - - Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW); - Matrix_Scale(ptr->unk_34, ptr->unk_34, 1.0f, MTXMODE_APPLY); - Matrix_ReplaceRotation(&play->billboardMtxF); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[(s32)(temp * 7.0f)])); - gSPDisplayList(POLY_XLU_DISP++, gGoronDustModelDL); - - Matrix_Pop(); + for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { + if ((effect->type < ENGO_EFFECT_DUST_MIN) || (effect->type >= ENGO_EFFECT_STEAM_MIN)) { + continue; } - if (play->state.gfxCtx) {} + + if (!isMaterialSet) { + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); + gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); + isMaterialSet = true; + } + + Matrix_Push(); + + alpha = (f32)effect->alphaNumer / effect->alphaDenom; + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].r, + sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].g, + sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].b, (u8)(alpha * UINT8_MAX)); + gDPSetEnvColor(POLY_XLU_DISP++, sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].r, + sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].g, + sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].b, 0); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(effect->scaleXY, effect->scaleXY, 1.0f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[(s32)(alpha * 7.0f)])); + gSPDisplayList(POLY_XLU_DISP++, gGoronDustModelDL); + + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -#ifdef NON_MATCHING -void func_80A118F8(EnGoStruct* ptr, Vec3f arg1) { - static u8 D_80A1667C[] = { - 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, +/** + * Initialize the snowball break effects. + * + * Half of the elements will be 'ENGO_EFFECT_SNOW1'/'2'/'3' randomly generated around the character. The second half + * will be dedicated 'ENGO_EFFECT_DUST1'/'2'/'3' paired with the snow. + * + * @param effect The EnGoEffect table + * @param pos Position around which the effects appear + */ +void EnGo_InitSnow(EnGoEffect effect[ENGO_EFFECT_COUNT], Vec3f pos) { + static u8 effectIndexToSnowEffectTable[] = { + 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, + ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, }; - EnGoStruct* ptr2 = &ptr[16]; + + EnGoEffect* dustEffects = &effect[ENGO_SNOW_EFFECT_COUNT]; s32 i; - Vec3f spB4; - Vec3f spA8; - f32 temp_f20; + Vec3f randRelativeToWorldPos; + Vec3f randYOneToFour; + f32 velMagnitude; - for (i = 0; i < 16; i++, ptr++) { - if (ptr->unk_00 == 0) { - ptr->unk_10 = arg1; - ptr->unk_10.y += 56.0f; - - ptr->unk_04.x = (Rand_ZeroOne() - 0.5f) * 5460.0f; - ptr->unk_04.y = (Rand_ZeroOne() - 0.5f) * 5460.0f; - ptr->unk_04.z = (Rand_ZeroOne() - 0.5f) * 5460.0f; - - temp_f20 = (Rand_ZeroOne() * 4.0f) + 6.0f; - ptr->unk_28.x = Math_SinS(i * 0x1000) * temp_f20; - ptr->unk_28.z = Math_CosS(i * 0x1000) * temp_f20; - ptr->unk_28.y = (Rand_ZeroOne() * 3.0f) + 6.0f; - - ptr->unk_1C = gZeroVec3f; - ptr->unk_1C.y = -0.8f; - - ptr->unk_01 = ptr->unk_02 = 1; - ptr->unk_00 = D_80A1667C[i]; - - spB4.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + ptr->unk_10.x; - spB4.y = ((Rand_ZeroOne() - 0.5f) * 40.0f) + ptr->unk_10.y; - spB4.z = ((Rand_ZeroOne() - 0.5f) * 80.0f) + ptr->unk_10.z; - - spA8 = gZeroVec3f; - spA8.y = (Rand_ZeroOne() * 3.0f) + 1.0f; - - func_80A1143C(ptr2, spB4, gZeroVec3f, spA8, 0.6f, 0.2f, 16, 0); + // Snow effects consume the first part of the effects table, and are paired with dust effects in the latter part + for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_NONE) { + continue; } + + effect->pos = pos; + effect->pos.y += 56.0f; + + // Generate a +-15 degree rotational velocity + effect->rotVelocity.x = (Rand_ZeroOne() - 0.5f) * (f32)0x1554; + effect->rotVelocity.y = (Rand_ZeroOne() - 0.5f) * (f32)0x1554; + effect->rotVelocity.z = (Rand_ZeroOne() - 0.5f) * (f32)0x1554; + + // Generate a radially outward velocity for each of the effects + velMagnitude = (Rand_ZeroOne() * 4.0f) + 6.0f; + effect->velocity.x = Math_SinS(i * (0x10000 / ENGO_SNOW_EFFECT_COUNT)) * velMagnitude; + effect->velocity.z = Math_CosS(i * (0x10000 / ENGO_SNOW_EFFECT_COUNT)) * velMagnitude; + effect->velocity.y = (Rand_ZeroOne() * 3.0f) + 6.0f; + + // No acceleration on the X,Z axis, negative acceleration on the Y axis + effect->accel = gZeroVec3f; + effect->accel.y = -0.8f; + + // Full visibility (1/1) + effect->alphaDenom = effect->alphaNumer = 1; + + // Assign a snow effect value of 'ENGO_EFFECT_SNOW1'/'2'/'3' + effect->type = effectIndexToSnowEffectTable[i]; + + // Initialize the parameters for the paired element + randRelativeToWorldPos.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.x; + randRelativeToWorldPos.y = ((Rand_ZeroOne() - 0.5f) * 40.0f) + effect->pos.y; + randRelativeToWorldPos.z = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.z; + + randYOneToFour = gZeroVec3f; + randYOneToFour.y = (Rand_ZeroOne() * 3.0f) + 1.0f; + + // Initialize the paired element. + EnGo_InitDust(dustEffects, randRelativeToWorldPos, gZeroVec3f, randYOneToFour, 0.6f, 0.2f, + ENGO_DUST_STEAM_LIFETIME, 0); } } -#else -static u8 D_80A1667C[] = { - 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, -}; -void func_80A118F8(EnGoStruct* ptr, Vec3f arg1); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Go/func_80A118F8.s") -#endif -void func_80A11BF8(EnGoStruct* ptr, f32 arg1) { - f32 test; - f32 test2; +/** + * Update the snow effect's movement. + * + * When the snow drops to the ground, it is converted to dust. + * + * @param effect Pointer to the effect to update + * @param dustConversionHeight Height above the ground at which to convert the effect to dust + */ +void EnGo_UpdateSnow(EnGoEffect* effect, f32 dustConversionHeight) { f32 x; f32 z; - ptr->unk_10.x += ptr->unk_28.x; - ptr->unk_10.y += ptr->unk_28.y; - ptr->unk_10.z += ptr->unk_28.z; + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; - ptr->unk_28.y += ptr->unk_1C.y; - ptr->unk_34 += ptr->unk_38; + effect->velocity.y += effect->accel.y; + effect->scaleXY += effect->scaleXYDelta; - if (ptr->unk_10.y < arg1) { - ptr->unk_10.y = arg1; + if (effect->pos.y < dustConversionHeight) { + effect->pos.y = dustConversionHeight; - ptr->unk_00 = 4; - ptr->unk_01 = (Rand_ZeroOne() * 8.0f) + 4.0f; - ptr->unk_02 = ptr->unk_01; + effect->type = ENGO_EFFECT_DUST1; + effect->alphaDenom = (Rand_ZeroOne() * 8.0f) + 4.0f; + effect->alphaNumer = effect->alphaDenom; - ptr->unk_28 = gZeroVec3f; - ptr->unk_28.y = (Rand_ZeroOne() * 3.0f) + 1.0f; + effect->velocity = gZeroVec3f; + effect->velocity.y = (Rand_ZeroOne() * 3.0f) + 1.0f; - ptr->unk_34 = 0.4f; - ptr->unk_38 = 0.1f; + effect->scaleXY = 0.4f; + effect->scaleXYDelta = 0.1f; return; } - if (ptr->unk_28.x != 0.0f) { - x = ptr->unk_28.x / fabsf(ptr->unk_28.x); - x *= ((sREG(13) + 140) * 0.01f); - Math_StepToF(&ptr->unk_28.x, x, (sREG(14) + 40) * 0.01f); + if (effect->velocity.x != 0.0f) { + x = effect->velocity.x / fabsf(effect->velocity.x); + x *= (sREG(13) + 140) * 0.01f; + Math_StepToF(&effect->velocity.x, x, (sREG(14) + 40) * 0.01f); } - if (ptr->unk_28.z != 0.0f) { - z = ptr->unk_28.z / fabsf(ptr->unk_28.z); + if (effect->velocity.z != 0.0f) { + z = effect->velocity.z / fabsf(effect->velocity.z); z *= ((sREG(13) + 140) * 0.01f); - Math_StepToF(&ptr->unk_28.z, z, (sREG(14) + 40) * 0.01f); + Math_StepToF(&effect->velocity.z, z, (sREG(14) + 40) * 0.01f); } - ptr->unk_0A.x += ptr->unk_04.x; - ptr->unk_0A.y += ptr->unk_04.y; - ptr->unk_0A.z += ptr->unk_04.z; + effect->rotAngle.x += effect->rotVelocity.x; + effect->rotAngle.y += effect->rotVelocity.y; + effect->rotAngle.z += effect->rotVelocity.z; } -#ifdef NON_MATCHING -void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 arg4) { +/** + * Draw all effects of type 'ENGO_EFFECT_SNOW1'/'2'/'3'. + * + * @param effect The EnGoEffect table + * @param material Snow Material + * @param model Snow Model + * @param type Snow Effect type to draw + */ +void EnGo_DrawSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], PlayState* play, Gfx* material, Gfx* model, + u8 effectType) { s32 i; - u8 flag = false; + u8 isMaterialSet = false; OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Opa(play->state.gfxCtx); - - for (i = 0; i < 16; i++, ptr++) { - if (ptr->unk_00 == arg4) { - if (!flag) { - gSPDisplayList(POLY_OPA_DISP++, arg2); - flag = true; - } - - Matrix_Push(); - Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW); - Matrix_Scale(0.08f, 0.08f, 0.08f, MTXMODE_APPLY); - Matrix_RotateZS(ptr->unk_0A.z, MTXMODE_APPLY); - Matrix_RotateXS(ptr->unk_0A.x, MTXMODE_APPLY); - Matrix_RotateYS(ptr->unk_0A.y, MTXMODE_APPLY); - - if (1) { - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, arg3); - } - - Matrix_Pop(); + for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) { + if (effect->type != effectType) { + continue; } + + if (!isMaterialSet) { + gSPDisplayList(POLY_OPA_DISP++, material); + isMaterialSet = true; + } + + Matrix_Push(); + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(0.08f, 0.08f, 0.08f, MTXMODE_APPLY); + Matrix_RotateZS(effect->rotAngle.z, MTXMODE_APPLY); + Matrix_RotateXS(effect->rotAngle.x, MTXMODE_APPLY); + Matrix_RotateYS(effect->rotAngle.y, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, model); + + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -#else -void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 arg4); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Go/func_80A11EC0.s") -#endif -void func_80A1203C(EnGo* this) { - EnGoStruct* ptr = this->unk_3F8; +/** + * Update all effects, potentially fading them away to nothing. + */ +void EnGo_UpdateEffects(EnGo* this) { + EnGoEffect* effect = this->effectTable; s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++, ptr++) { - if (ptr->unk_00 != 0) { - if (ptr->unk_02 == 0) { - ptr->unk_00 = 0; - } else if ((ptr->unk_00 > 0) && (ptr->unk_00 < 4)) { - func_80A11BF8(ptr, this->actor.world.pos.y); - } else { - ptr->unk_10.x += ptr->unk_28.x; - ptr->unk_10.y += ptr->unk_28.y; - ptr->unk_10.z += ptr->unk_28.z; + for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type == ENGO_EFFECT_NONE) { + continue; + } - ptr->unk_28.x += ptr->unk_1C.x; - ptr->unk_28.y += ptr->unk_1C.y; - ptr->unk_28.z += ptr->unk_1C.z; + if (effect->alphaNumer == 0) { + // End usage of the effect + effect->type = ENGO_EFFECT_NONE; + } else if ((effect->type > ENGO_EFFECT_NONE) && (effect->type < ENGO_EFFECT_DUST_MIN)) { + // Snow rotates, and changes to dust upon dropping below the actor position + EnGo_UpdateSnow(effect, this->actor.world.pos.y); + } else { + // Dust and steam move according to their initial values + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; - ptr->unk_34 += ptr->unk_38; - ptr->unk_02--; - } + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; + + effect->scaleXY += effect->scaleXYDelta; + effect->alphaNumer--; } } } -void func_80A1213C(EnGo* this, PlayState* play) { - func_80A11EC0(this->unk_3F8, play, gGoronLargeSnowballFragmentMaterialDL, gGoronLargeSnowballFragmentModelDL, 1); - func_80A11EC0(this->unk_3F8, play, gGoronMediumSnowballFragmentMaterialDL, gGoronMediumSnowballFragmentModelDL, 2); - func_80A11EC0(this->unk_3F8, play, gGoronSmallSnowballFragmentMaterialDL, gGoronSmallSnowballFragmentModelDL, 3); - func_80A11144(this->unk_3F8, play); - func_80A115B4(this->unk_3F8, play); +/** + * Draw all effects. + */ +void EnGo_DrawEffects(EnGo* this, PlayState* play) { + EnGo_DrawSnow(this->effectTable, play, gGoronLargeSnowballFragmentMaterialDL, gGoronLargeSnowballFragmentModelDL, + ENGO_EFFECT_SNOW1); + EnGo_DrawSnow(this->effectTable, play, gGoronMediumSnowballFragmentMaterialDL, gGoronMediumSnowballFragmentModelDL, + ENGO_EFFECT_SNOW2); + EnGo_DrawSnow(this->effectTable, play, gGoronSmallSnowballFragmentMaterialDL, gGoronSmallSnowballFragmentModelDL, + ENGO_EFFECT_SNOW3); + EnGo_DrawSteam(this->effectTable, play); + EnGo_DrawDust(this->effectTable, play); } -s32 func_80A121F4(PlayState* play) { +/** + * Check if the Goron can hurt the player. + */ +s32 EnGo_CanSnowballHurtPlayer(PlayState* play) { Player* player = GET_PLAYER(play); if ((player->transformation == PLAYER_FORM_GORON) && (player->stateFlags3 & PLAYER_STATE3_2000000)) { return false; + } else { + return true; } - return true; } -s32 func_80A1222C(EnGo* this, PlayState* play) { +/** + * Check if the Goron is falling asleep. + */ +s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 ret = false; + s32 isFallingAsleep = false; if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && - (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->unk_3EC == 0) && + (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->sleepState == ENGO_AWAKE) && (this->actor.xzDistToPlayer < 400.0f)) || - (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) && - (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.scriptIndex == 1))) { - ret = true; + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON) && (play->sceneId == SCENE_16GORON_HOUSE) && + (gSaveContext.sceneLayer == 0) && (this->sleepState == ENGO_AWAKE) && (play->csCtx.scriptIndex == 1))) { + isFallingAsleep = true; } - return ret; + return isFallingAsleep; } -s32 func_80A122EC(EnGo* this) { - static Vec3f D_80A1668C = { 0.0f, 100.0f, 160.0f }; +/** + * Update the actor's focus. + */ +s32 EnGo_UpdateFocus(EnGo* this) { + static Vec3f sMedigoronPos = { 0.0f, 100.0f, 160.0f }; s32 pad; - f32 sp20 = 58.0f; + f32 yAxisOffsetToFocusPoint = 58.0f; - if (ENGO_GET_F(&this->actor) == ENGO_F_8) { - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A1668C, + if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) { + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sMedigoronPos, &this->actor.focus.pos); } else { - if ((this->unk_390 & 0x200) || (this->unk_390 & 0x100)) { - sp20 = this->actor.shape.yOffset; + if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) || (this->actionFlags & ENGO_FLAG_SNOWBALLED)) { + yAxisOffsetToFocusPoint = this->actor.shape.yOffset; } Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos); - this->actor.focus.pos.y += sp20; + this->actor.focus.pos.y += yAxisOffsetToFocusPoint; } this->actor.focus.rot.x = this->actor.world.rot.x; @@ -568,21 +852,24 @@ s32 func_80A122EC(EnGo* this) { return false; } -void func_80A123A0(EnGo* this, PlayState* play) { - Vec3f sp2C; +/** + * Update the collider for the snowball form of the Goron Shrine gatekeeper. + */ +void EnGo_UpdateSnowballCollider(EnGo* this, PlayState* play) { + Vec3f worldPos; - Math_Vec3f_Copy(&sp2C, &this->actor.world.pos); + Math_Vec3f_Copy(&worldPos, &this->actor.world.pos); - this->colliderSphere.dim.worldSphere.center.x = sp2C.x; - this->colliderSphere.dim.worldSphere.center.y = sp2C.y; + this->colliderSphere.dim.worldSphere.center.x = worldPos.x; + this->colliderSphere.dim.worldSphere.center.y = worldPos.y; this->colliderSphere.dim.worldSphere.center.y += (s16)this->actor.shape.yOffset; - this->colliderSphere.dim.worldSphere.center.z = sp2C.z; + this->colliderSphere.dim.worldSphere.center.z = worldPos.z; this->colliderSphere.dim.modelSphere.radius = 48; this->colliderSphere.dim.worldSphere.radius = this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale; - if (func_80A121F4(play)) { + if (EnGo_CanSnowballHurtPlayer(play)) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderSphere.base); } @@ -590,175 +877,203 @@ void func_80A123A0(EnGo* this, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base); } -void func_80A124A0(EnGo* this, PlayState* play) { +/** + * Update the collider for the Medigoron in the Powder Keg Shop. + */ +void EnGo_UpdateMedigoronCollider(EnGo* this, PlayState* play) { this->colliderSphere.dim.worldSphere.radius = this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale; CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base); } -void func_80A124FC(EnGo* this, PlayState* play) { - Vec3f sp1C; +/** + * Update the collider for the rolled up form of a Goron. + */ +void EnGo_UpdateRolledUpCollider(EnGo* this, PlayState* play) { + Vec3f worldPos; - Math_Vec3f_Copy(&sp1C, &this->actor.world.pos); - - this->colliderSphere.dim.worldSphere.center.x = sp1C.x; - this->colliderSphere.dim.worldSphere.center.y = sp1C.y; + Math_Vec3f_Copy(&worldPos, &this->actor.world.pos); + this->colliderSphere.dim.worldSphere.center.x = worldPos.x; + this->colliderSphere.dim.worldSphere.center.y = worldPos.y; this->colliderSphere.dim.worldSphere.center.y += (s16)this->actor.shape.yOffset; - this->colliderSphere.dim.worldSphere.center.z = sp1C.z; - + this->colliderSphere.dim.worldSphere.center.z = worldPos.z; this->colliderSphere.dim.modelSphere.radius = 20; this->colliderSphere.dim.worldSphere.radius = this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale; - CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base); } -void func_80A125BC(EnGo* this, PlayState* play) { +/** + * Update the collider for the frozen form of a Goron. + */ +void EnGo_UpdateFrozenCollider(EnGo* this, PlayState* play) { s32 pad; Math_Vec3f_ToVec3s(&this->colliderCylinder.dim.pos, &this->actor.world.pos); - this->colliderCylinder.dim.radius = 46; this->colliderCylinder.dim.height = 78; - - if (this->unk_3C6 == 0) { + if (this->harmlessTimer == 0) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderCylinder.base); } CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderCylinder.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base); } -void func_80A12660(EnGo* this, PlayState* play) { +/** + * Update the collider for all standing forms of a Goron. + */ +void EnGo_UpdateStandingCollider(EnGo* this, PlayState* play) { Math_Vec3f_ToVec3s(&this->colliderCylinder.dim.pos, &this->actor.world.pos); this->colliderCylinder.dim.radius = 24; this->colliderCylinder.dim.height = 62; CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base); } -void func_80A126BC(EnGo* this, PlayState* play) { +/** + * Update the collider for the Goron. + * + * Both the rolling snowball and frozen forms can hurt Player on collision, others do not. + */ +void EnGo_UpdateCollider(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); if (!(player->stateFlags2 & PLAYER_STATE2_4000)) { - if (this->unk_3C6 != 0) { - this->unk_3C6--; - } + DECR(this->harmlessTimer); } - - if (ENGO_GET_F(&this->actor) == ENGO_F_8) { - func_80A124A0(this, play); - } else if (this->unk_390 & 0x100) { - func_80A123A0(this, play); - } else if (this->unk_390 & 0x200) { - func_80A124FC(this, play); - } else if (this->unk_390 & 0x400) { - func_80A125BC(this, play); + if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) { + EnGo_UpdateMedigoronCollider(this, play); + } else if (this->actionFlags & ENGO_FLAG_SNOWBALLED) { + EnGo_UpdateSnowballCollider(this, play); + } else if (this->actionFlags & ENGO_FLAG_ROLLED_UP) { + EnGo_UpdateRolledUpCollider(this, play); + } else if (this->actionFlags & ENGO_FLAG_FROZEN) { + EnGo_UpdateFrozenCollider(this, play); } else { - func_80A12660(this, play); + EnGo_UpdateStandingCollider(this, play); } } -s32 func_80A12774(EnGo* this, PlayState* play) { - if (!(this->unk_390 & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { +/** + * Check if the actor is talking, and if so set the action function to handle it. + * + * @return True if talking + */ +s32 EnGo_UpdateTalking(EnGo* this, PlayState* play) { + if (!(this->actionFlags & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { return false; } - if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_1)) { - if (!(this->unk_390 & 0x200)) { - this->unk_390 |= 8; + if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC)) { + if (!(this->actionFlags & ENGO_FLAG_ROLLED_UP)) { + this->actionFlags |= ENGO_FLAG_ENGAGED; } } - if ((ENGO_GET_F(&this->actor) == ENGO_F_5) || (ENGO_GET_F(&this->actor) == ENGO_F_6) || - (ENGO_GET_F(&this->actor) == ENGO_F_7)) { - this->unk_3BC = 0; - this->unk_3BE = 0; - this->unk_390 |= 0x20; + if ((ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_STORE) || (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSROOM) || + (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSSON)) { + this->blinkTimer = 0; + this->eyeTexIndex = ENGO_EYETEX_OPEN; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; } - SubS_UpdateFlags(&this->unk_390, 0, 7); - this->unk_3C0 = 0; - this->unk_3C4 = 0; - this->unk_18C = this->actionFunc; - this->actionFunc = func_80A157C4; + SubS_UpdateFlags(&this->actionFlags, 0, 7); + this->cutsceneState = 0; + this->gatekeeperAnimState = 0; + this->interruptedActionFunc = this->actionFunc; + this->actionFunc = EnGo_Talk; return true; } -s32 func_80A12868(EnGo* this, PlayState* play) { - this->unk_390 &= ~0x800; - this->unk_390 &= ~0x1000; - this->unk_390 &= ~0x2000; +/** + * Detect any collisions, and convert detections to object specific 'actionFlags'. + */ +s32 EnGo_DetectCollisions(EnGo* this, PlayState* play) { + this->actionFlags &= ~ENGO_FLAG_HIT_OTHER; + this->actionFlags &= ~ENGO_FLAG_HIT_BY_OTHER; + this->actionFlags &= ~ENGO_FLAG_HIT_OBJ; if ((this->colliderCylinder.base.atFlags & AT_HIT) || (this->colliderSphere.base.atFlags & AT_HIT)) { this->colliderCylinder.base.atFlags &= ~AT_HIT; this->colliderSphere.base.atFlags &= ~AT_HIT; - this->unk_390 |= 0x800; - this->unk_3C6 = 0x28; + this->actionFlags |= ENGO_FLAG_HIT_OTHER; + this->harmlessTimer = 40; } if ((this->colliderCylinder.base.acFlags & AC_HIT) || (this->colliderSphere.base.acFlags & AC_HIT)) { this->colliderCylinder.base.acFlags &= ~AC_HIT; this->colliderSphere.base.acFlags &= ~AC_HIT; - this->unk_390 |= 0x1000; + this->actionFlags |= ENGO_FLAG_HIT_BY_OTHER; } if ((this->colliderCylinder.base.ocFlags1 & OC1_HIT) || (this->colliderSphere.base.ocFlags1 & OC1_HIT)) { this->colliderCylinder.base.ocFlags1 &= ~OC1_HIT; this->colliderSphere.base.ocFlags1 &= ~OC1_HIT; - this->unk_390 |= 0x2000; + this->actionFlags |= ENGO_FLAG_HIT_OBJ; } return false; } -s32 func_80A12954(EnGo* this, PlayState* play) { - if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != CS_STATE_IDLE) && (this->actor.draw != NULL) && - (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && +/** + * Start, or finish, the cutscene for the arrival of springtime. + */ +s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { + if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && (play->csCtx.state != CS_STATE_IDLE) && + (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { - if (this->unk_3F0 == 0) { + if (this->springArrivalCutsceneActive == false) { this->actor.flags &= ~ACTOR_FLAG_1; - this->cueId = 255; - this->unk_3F0 = 1; - this->unk_18C = this->actionFunc; + this->springArrivalCueId = 255; + this->springArrivalCutsceneActive = true; + this->interruptedActionFunc = this->actionFunc; } - SubS_UpdateFlags(&this->unk_390, 0, 7); - this->actionFunc = func_80A14FC8; - } else if (this->unk_3F0 != 0) { + SubS_UpdateFlags(&this->actionFlags, 0, 7); + this->actionFunc = EnGo_HandleSpringArrivalCutscene; + } else if (this->springArrivalCutsceneActive) { this->actor.flags |= ACTOR_FLAG_1; - this->cueId = 255; - this->unk_3F0 = 0; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->actionFunc = this->unk_18C; + this->springArrivalCueId = 255; + this->springArrivalCutsceneActive = false; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->actionFunc = this->interruptedActionFunc; } return false; } -s32 func_80A12A64(EnGo* this, PlayState* play) { - s8 objIdx = this->actor.objBankIndex; - s8 objIdx2 = -1; - s32 ret = 0; +/** + * Update the animation to the actor's currently set value. + * + * @return True if non-repeating animation has finished + */ +s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) { + s8 objIndex = this->actor.objBankIndex; + s8 extraObjIndex = -1; + s32 ret = false; - if ((this->unk_3DC >= 18) && (this->unk_289 >= 0)) { - objIdx2 = this->unk_289; - } else if ((this->unk_3DC >= 10) && (this->unk_288 >= 0)) { - objIdx2 = this->unk_288; - } else if (this->unk_3DC < 10) { - objIdx2 = this->actor.objBankIndex; + if ((this->curAnimIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { + extraObjIndex = this->hakuginDemoObjIndex; + } else if ((this->curAnimIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { + extraObjIndex = this->taisouObjIndex; + } else if (this->curAnimIndex < ENGO_ANIM_ATHLETICS_MIN) { + extraObjIndex = this->actor.objBankIndex; } - if (objIdx2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx2].segment); - this->skelAnime.playSpeed = this->unk_398; + if (extraObjIndex >= 0) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + this->skelAnime.playSpeed = this->curAnimPlaySpeed; ret = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } return ret; } -s32 func_80A12B78(EnGo* this, PlayState* play) { +/** + * Update sound effects based on animation. + */ +s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { - if (this->unk_3DC == 4) { + if (this->curAnimIndex == ENGO_ANIM_ROLL) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE); } @@ -766,7 +1081,7 @@ s32 func_80A12B78(EnGo* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 22.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT); } - } else if ((this->unk_3DC == 2) || (this->unk_3DC == 3)) { + } else if ((this->curAnimIndex == ENGO_ANIM_UNROLL) || (this->curAnimIndex == ENGO_ANIM_UNROLL_IMM)) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF); } @@ -779,189 +1094,231 @@ s32 func_80A12B78(EnGo* this, PlayState* play) { return 0; } -s32 func_80A12C48(EnGo* this, PlayState* play, s32 arg2) { - s8 objIdx = this->actor.objBankIndex; - s8 objIdx2 = -1; +/** + * Change the Goron's animation. + * + * Goron animations come from one of three categories: + * - Basic Goron animations + * - Goron athletics like stretches, cheers, etc... + * - Spring arrival cutscene animations + * Changing animations with this function handles the transitions between the three categories. + * + * @return True if animation was changed + */ +s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) { + s8 objIndex = this->actor.objBankIndex; + s8 extraObjIndex = -1; s32 ret = false; - if ((arg2 >= 18) && (this->unk_289 >= 0)) { - objIdx2 = this->unk_289; - } else if ((arg2 >= 10) && (this->unk_288 >= 0)) { - objIdx2 = this->unk_288; - } else if (arg2 < 10) { - objIdx2 = this->actor.objBankIndex; + 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; + } else if (animIndex < ENGO_ANIM_ATHLETICS_MIN) { + extraObjIndex = this->actor.objBankIndex; } - if (objIdx2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx2].segment); - this->unk_3DC = arg2; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2); - this->unk_398 = this->skelAnime.playSpeed; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx].segment); + 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; + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } return ret; } -void func_80A12D6C(EnGo* this) { - if ((this->unk_390 & 0x20) && (DECR(this->unk_3BC) == 0)) { - this->unk_3BE++; - if (this->unk_3BE >= 4) { - this->unk_3BC = Rand_S16Offset(30, 30); - this->unk_3BE = 0; +/** + * Update the eye textures to blink. + */ +void EnGo_UpdateEyes(EnGo* this) { + if (this->actionFlags & ENGO_FLAG_EYES_OPEN) { + if (DECR(this->blinkTimer) == 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex >= ENGO_EYETEX_CLOSED2) { + this->blinkTimer = Rand_S16Offset(30, 30); + this->eyeTexIndex = ENGO_EYETEX_OPEN; + } } } } -void func_80A12DF4(EnGo* this, PlayState* play) { - if (this->unk_3D4 == 0) { - func_80A12C48(this, play, 9); - this->unk_3D4++; - } else if ((this->unk_3D4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A12C48(this, play, 6); - this->unk_3D4++; +/** + * Play the surprise animation then return to shivering. + */ +void EnGo_UpdateShiverSurprisedAnimation(EnGo* this, PlayState* play) { + if (this->surprisePhase == 0) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVERINGSURPRISED); + this->surprisePhase++; + } else if ((this->surprisePhase == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER_IMM); + this->surprisePhase++; } } -s32 func_80A12E80(EnGo* this, PlayState* play) { - u16 temp = play->msgCtx.currentTextId; +/** + * Change the attention target, and dialog reactions of the Gorons outside Darmani's grave. + */ +s32 EnGo_UpdateGraveyardAttentionTargetAndReactions(EnGo* this, PlayState* play) { + u16 textId = play->msgCtx.currentTextId; Player* player = GET_PLAYER(play); - if (ENGO_GET_F(&this->actor) != ENGO_F_4) { + if (ENGO_GET_TYPE(&this->actor) != ENGO_GRAVEYARD) { return false; } if (player->stateFlags1 & PLAYER_STATE1_40) { - if (this->unk_392 != temp) { - switch (temp) { - case 0xE1A: - this->unk_390 |= 8; - this->unk_38C = this->actor.child; + if (this->lastTextId != textId) { + switch (textId) { + case 0xE1A: // Awakening from frozen form, confused, turn to other Goron + this->actionFlags |= ENGO_FLAG_ENGAGED; + this->attentionTarget = this->actor.child; break; - case 0xE1D: - case 0xE25: - if (ENGO_GET_70(&this->actor) == ENGO_70_1) { - this->unk_38C = &GET_PLAYER(play)->actor; + case 0xE1D: // Turn to player (Goron form) while stating Darmani is dead + case 0xE25: // Turn to player (Other form) while thanking player + if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) { + this->attentionTarget = &GET_PLAYER(play)->actor; } break; - case 0xE27: - if (ENGO_GET_70(&this->actor) == ENGO_70_1) { - this->unk_38C = this->actor.child; + case 0xE27: // (spoken) "What's this?..." + if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) { + this->attentionTarget = this->actor.child; } - case 0xE16: - case 0xE1E: - this->unk_190 = func_80A12DF4; + case 0xE16: // Surprised, questioning if player is Darmani + case 0xE1E: // Surprised, seeing Darmani + this->graveyardDialogActionFunc = EnGo_UpdateShiverSurprisedAnimation; break; - case 0xE1F: - if (ENGO_GET_70(&this->actor) == ENGO_70_0) { - this->unk_38C = &GET_PLAYER(play)->actor; + case 0xE1F: // Turn to player stating Darmani is not dead + if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_GRAVEMAKER) { + this->attentionTarget = &GET_PLAYER(play)->actor; } break; + + default: + break; } } - this->unk_3F4 = 1; - this->unk_392 = temp; - } else if (this->unk_3F4 != 0) { - this->unk_3F4 = 0; - this->unk_190 = NULL; - this->unk_392 = 0; - func_80A12C48(this, play, 5); - this->unk_390 &= ~8; + this->changedText = true; + this->lastTextId = textId; + } else if (this->changedText) { + // If the player isn't talking, and the text has changed, its the last text. + // Set everything back to the "Idle" behavior. + this->changedText = false; + this->graveyardDialogActionFunc = NULL; + this->lastTextId = 0; + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); + this->actionFlags &= ~ENGO_FLAG_ENGAGED; } - if (this->unk_190 != NULL) { - this->unk_190(this, play); + if (this->graveyardDialogActionFunc != NULL) { + this->graveyardDialogActionFunc(this, play); } return false; } -s32 func_80A12FE8(EnGo* this, PlayState* play) { +/** + * Update the actor's rotation to point towards the target. + */ +s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play) { s32 pad; - Vec3f sp40; - Vec3f sp34; - s16 sp32; + Vec3f targetPos; + Vec3f thisPos; + s16 desiredYaw; - Math_Vec3f_Copy(&sp40, &this->unk_38C->world.pos); - Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - sp32 = Math_Vec3f_Yaw(&sp34, &sp40); + Math_Vec3f_Copy(&targetPos, &this->attentionTarget->world.pos); + Math_Vec3f_Copy(&thisPos, &this->actor.world.pos); + desiredYaw = Math_Vec3f_Yaw(&thisPos, &targetPos); - Math_ApproachS(&this->unk_3B2, (sp32 - this->unk_3B6) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_3B2 = CLAMP(this->unk_3B2, -0x1FFE, 0x1FFE); + Math_ApproachS(&this->headRotY, (desiredYaw - this->bodyRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE); - Math_ApproachS(&this->unk_3B6, (sp32 - this->unk_3B2) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_3B6 = CLAMP(this->unk_3B6, -0x1C70, 0x1C70); + Math_ApproachS(&this->bodyRotY, (desiredYaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->bodyRotY = CLAMP(this->bodyRotY, -0x1C70, 0x1C70); - Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); - - if (this->unk_38C->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_38C)->bodyPartsPos[7].y + 3.0f; + Math_Vec3f_Copy(&thisPos, &this->actor.focus.pos); + if (this->attentionTarget->id == ACTOR_PLAYER) { + targetPos.y = ((Player*)this->attentionTarget)->bodyPartsPos[7].y + 3.0f; } else { - Math_Vec3f_Copy(&sp40, &this->unk_38C->focus.pos); + Math_Vec3f_Copy(&targetPos, &this->attentionTarget->focus.pos); } - Math_ApproachS(&this->unk_3B0, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_3B4, 4, 0x2AA8); - this->unk_3B0 = CLAMP(this->unk_3B0, -0x1554, 0x1554); + Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&thisPos, &targetPos) - this->bodyRotZ, 4, 0x2AA8); + this->headRotZ = CLAMP(this->headRotZ, -0x1554, 0x1554); - Math_ApproachS(&this->unk_3B4, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_3B0, 4, 0x2AA8); - this->unk_3B4 = CLAMP(this->unk_3B4, -0xE38, 0xE38); + Math_ApproachS(&this->bodyRotZ, Math_Vec3f_Pitch(&thisPos, &targetPos) - this->headRotZ, 4, 0x2AA8); + this->bodyRotZ = CLAMP(this->bodyRotZ, -0xE38, 0xE38); return false; } -s32 func_80A131F8(EnGo* this, PlayState* play) { - if (this->unk_3F4 == 0) { - this->unk_38C = &GET_PLAYER(play)->actor; +/** + * Handle updating of Goron's attention target, and reactions during dialog. + */ +s32 EnGo_UpdateAttentionTargetAndReactions(EnGo* this, PlayState* play) { + if (!this->changedText) { + this->attentionTarget = &GET_PLAYER(play)->actor; } - func_80A12E80(this, play); + EnGo_UpdateGraveyardAttentionTargetAndReactions(this, play); - if (this->unk_390 & 8) { - this->unk_390 &= ~0x40; - this->unk_390 |= 0x10; - func_80A12FE8(this, play); - } else if (this->unk_390 & 0x10) { - this->unk_390 &= ~0x10; - this->unk_3B0 = 0; - this->unk_3B2 = 0; - this->unk_3B4 = 0; - this->unk_3B6 = 0; - this->unk_3BA = 0x14; - } else if (DECR(this->unk_3BA) == 0) { - this->unk_390 |= 0x40; - this->unk_3BA = 0x14; + if (this->actionFlags & ENGO_FLAG_ENGAGED) { + this->actionFlags &= ~ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_FACE_TARGET; + EnGo_UpdateRotationToTarget(this, play); + } else if (this->actionFlags & ENGO_FLAG_FACE_TARGET) { + this->actionFlags &= ~ENGO_FLAG_FACE_TARGET; + this->headRotZ = 0; + this->headRotY = 0; + this->bodyRotZ = 0; + this->bodyRotY = 0; + this->loseAttentionTimer = 20; + } else if (DECR(this->loseAttentionTimer) == 0) { + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->loseAttentionTimer = 20; } return true; } -void func_80A132C8(EnGo* this, PlayState* play) { +/** + * Idle action function for the gravemaker at the Goron Graveyard. + */ +void EnGo_GravemakerIdle(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); - s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); + s16 deltaYaw = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); if ((fabsf(this->actor.playerHeightRel) > 20.0f) || (this->actor.xzDistToPlayer > 300.0f)) { - SubS_UpdateFlags(&this->unk_390, 3, 7); - } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(temp_v1) >= 0x1C70) || - CHECK_WEEKEVENTREG(WEEKEVENTREG_21_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) { - SubS_UpdateFlags(&this->unk_390, 3, 7); + SubS_UpdateFlags(&this->actionFlags, 3, 7); + } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(deltaYaw) >= 0x1C70) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) { + SubS_UpdateFlags(&this->actionFlags, 3, 7); } else { - SubS_UpdateFlags(&this->unk_390, 4, 7); + SubS_UpdateFlags(&this->actionFlags, 4, 7); } } -void func_80A133A8(EnGo* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) { - SubS_UpdateFlags(&this->unk_390, 3, 7); +/** + * Idle action function for the Goron frozen at the Goron Graveyard + */ +void EnGo_FrozenIdle(EnGo* this, PlayState* play) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) { + SubS_UpdateFlags(&this->actionFlags, 3, 7); } else { - SubS_UpdateFlags(&this->unk_390, 4, 7); + SubS_UpdateFlags(&this->actionFlags, 4, 7); } } -Actor* func_80A13400(EnGo* this, PlayState* play) { +/** + * Obtain a pointer to the gravemaker at the Goron Graveyard. + */ +Actor* EnGo_FindGravemaker(EnGo* this, PlayState* play) { Actor* actor; Actor* retActor = NULL; @@ -969,8 +1326,8 @@ Actor* func_80A13400(EnGo* this, PlayState* play) { actor = SubS_FindActor(play, retActor, ACTORCAT_NPC, ACTOR_EN_GO); retActor = actor; - if ((actor != NULL) && ((EnGo*)actor != this) && (ENGO_GET_F(actor) == ENGO_F_4) && - (ENGO_GET_70(actor) == ENGO_70_0)) { + if ((actor != NULL) && ((EnGo*)actor != this) && (ENGO_GET_TYPE(actor) == ENGO_GRAVEYARD) && + (ENGO_GET_SUBTYPE(actor) == ENGO_GRAVEYARD_GRAVEMAKER)) { return retActor; } @@ -988,15 +1345,27 @@ Actor* func_80A13400(EnGo* this, PlayState* play) { return NULL; } -void func_80A134B0(EnGo* this, PlayState* play, s32 arg2) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) { +/** + * The Medigoron's collider radius is greater when it needs to be able to drop the Powder Keg in front of the player. + */ +void EnGo_UpdateMedigoronColliderRadius(EnGo* this, PlayState* play, s32 isGivenPowderKeg) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES) || + (play->actorCtx.flags & ACTORCTX_FLAG_0) // Same check occurs in Powder Keg ammo check MsgScript Command + || isGivenPowderKeg) { this->colliderSphere.dim.modelSphere.radius = 300; } else { this->colliderSphere.dim.modelSphere.radius = 380; } } -s32 func_80A134F4(EnGo* this, s16 csId) { +/** + * Helper to change a cutscene. + * + * @returns Status of cutscene change + * @retval true Cutscene has started + * @retval false Cutscene is queued to start + */ +s32 EnGo_ChangeCutscene(EnGo* this, s16 csId) { if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } else if (CutsceneManager_IsNext(csId)) { @@ -1007,44 +1376,66 @@ s32 func_80A134F4(EnGo* this, s16 csId) { return false; } -s32 func_80A13564(EnGo* this, f32 arg1, f32 arg2, s32 arg3) { +/** + * Handle the animation of the "Goron Pound". + * + * There are Several Phases to the pound: + * - Phase 1: (Once in Rolled-Up form) the pound starts by leaping into the air. + * - The Goron rotates until its back faces the ground at its peak. + * - The Goron distorts shape until at its peak. + * - Transition: At the peak, all movement is halted. + * - Phase 2: While hanging, the Goron reverts back to normal shape. + * - Transition: At reaching maxHangTime, ENGO_POUND_INITIAL_FALL_VEL is applied. + * - Phase 3: The Goron falls to the ground. + * - Transition: At reaching the ground. + * + * @param initialVelocity Initial +Y velocity of the pound. + * @param maxDistortion Maximum distortion of the Goron's shape. + * @param maxHangtime Maximum hangtime at the peak of the pound. + * @returns True when pound finishes. + */ +s32 EnGo_HandleGatekeeperPoundCutscene(EnGo* this, f32 initialVelocity, f32 maxDistortion, s32 maxHangtime) { s32 pad; - f32 temp_f0 = 1.0f; - f32 temp_f14 = this->actor.velocity.y + this->actor.gravity; - s32 ret; + f32 rotAndDistortFactor = 1.0f; + f32 velocity = this->actor.velocity.y + this->actor.gravity; + s32 isFinished; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - ret = true; + // Transition 3->DONE + isFinished = true; } else { - if (temp_f14 > 0.0f) { - temp_f0 = temp_f14 / arg1; - this->actor.shape.rot.x += (s16)(9100.0f * temp_f0); - this->unk_3AE = 0; + if (velocity > 0.0f) { + // PHASE 1: Goron is rising + rotAndDistortFactor = velocity / initialVelocity; + this->actor.shape.rot.x += (s16)(0x238C * rotAndDistortFactor); + this->elapsedHangtime = 0; } else if ((s32)this->actor.velocity.y == 0) { - if (arg3 >= this->unk_3AE) { - temp_f0 = (f32)this->unk_3AE / arg3; + if (maxHangtime >= this->elapsedHangtime) { + // PHASE 2: Goron is hanging in the air + rotAndDistortFactor = (f32)this->elapsedHangtime / maxHangtime; } else { - this->actor.gravity = -6.0f; + // Transition 2->3: Hanging is complete + this->actor.gravity = ENGO_POUND_INITIAL_FALL_VEL; } - this->unk_3AE++; - } else if (this->unk_3AE == 0) { + this->elapsedHangtime++; + } else if (this->elapsedHangtime == 0) { + // Transition 1->2: Goron has reached the peak this->actor.velocity.y = 0.0f; this->actor.gravity = 0.0f; - temp_f0 = temp_f14 / arg1; + rotAndDistortFactor = velocity / initialVelocity; + } else { + // PHASE 3: Goron is falling (Just letting gravity take effect) } - ret = false; + isFinished = false; } - this->unk_3A8 = (1.0f - temp_f0) * arg2; - this->actor.scale.x = this->unk_3A4 - this->unk_3A8; - this->actor.scale.y = this->unk_3A4 + this->unk_3A8; + // Handle shape distortions + this->scaleFactorPoundDistortion = (1.0f - rotAndDistortFactor) * maxDistortion; + this->actor.scale.x = this->scaleFactor - this->scaleFactorPoundDistortion; + this->actor.scale.y = this->scaleFactor + this->scaleFactorPoundDistortion; + this->actor.scale.z = MAX(this->actor.scale.x, this->actor.scale.y); - if (this->actor.scale.y < this->actor.scale.x) { - this->actor.scale.z = this->actor.scale.x; - } else { - this->actor.scale.z = this->actor.scale.y; - } - return ret; + return isFinished; } void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) { @@ -1055,7 +1446,10 @@ void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) { Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); } -void func_80A13728(EnGo* this, PlayState* play) { +/** + * Create the visual effects caused by the gatekeeper's pound. + */ +void EnGo_CreateGatekeeperPoundEffects(EnGo* this, PlayState* play) { EnGo_RequestQuake(play, 27767, 7, 20); play->actorCtx.unk2 = 4; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, @@ -1063,11 +1457,14 @@ void func_80A13728(EnGo* this, PlayState* play) { EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f); } -void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { - u32 frames1; - u32 frames2; +/** + * Draw the ice encasing a frozen Goron. + */ +void EnGo_DrawIceBlockWhenFrozen(EnGo* this, PlayState* play, f32 scale, f32 alpha) { + u32 y1; + u32 y2; - if (this->unk_390 & 0x400) { + if (this->actionFlags & ENGO_FLAG_FROZEN) { Matrix_Push(); OPEN_DISPS(play->state.gfxCtx); @@ -1075,15 +1472,15 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { 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); - Matrix_Scale(arg2 * 0.7f, arg2 * 0.8f, arg2, MTXMODE_APPLY); + Matrix_Scale(scale * 0.7f, scale * 0.8f, scale, MTXMODE_APPLY); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - frames1 = play->gameplayFrames % 256; - frames2 = (play->gameplayFrames * 2) % 256; + y1 = play->gameplayFrames % 256; + y2 = (play->gameplayFrames * 2) % 256; gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, frames1, 0x20, 0x10, 1, 0, frames2, 0x40, 0x20)); - gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)arg3); + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, y1, 0x20, 0x10, 1, 0, y2, 0x40, 0x20)); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)alpha); gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL); CLOSE_DISPS(play->state.gfxCtx); @@ -1092,154 +1489,172 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { } } -void func_80A139E4(EnGo* this) { - static Vec3f D_80A16698 = { 0.0f, 0.06f, 0.0f }; - Vec3f sp54; - Vec3f sp48; - s16 sp46 = Rand_ZeroOne() * 360.0f * 182.0f; +/** + * Initialize the steam effect used for melting ice. + */ +void EnGo_MakeSteam(EnGo* this) { + static Vec3f sAccel = { 0.0f, 0.06f, 0.0f }; + Vec3f tempPos; + Vec3f effectPos; + s16 rotAngle = Rand_ZeroOne() * 360.0f * 182.0f; - Math_Vec3f_Copy(&sp54, &gZeroVec3f); - sp54.z = 28.0f; - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, sp46, &sp54, &sp48); - sp48.y = (Rand_ZeroOne() * 10.0f) + 4.0f; - sp48.y += this->actor.floorHeight; - func_80A10FD0(&this->unk_3F8[16], sp48, D_80A16698, gZeroVec3f, 0.01f, 0.002f, 16); + Math_Vec3f_Copy(&tempPos, &gZeroVec3f); + tempPos.z = 28.0f; + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, rotAngle, &tempPos, &effectPos); + effectPos.y = (Rand_ZeroOne() * 10.0f) + 4.0f; + effectPos.y += this->actor.floorHeight; + EnGo_InitSteam(&this->effectTable[ENGO_SNOW_EFFECT_COUNT], effectPos, sAccel, gZeroVec3f, ENGO_NORMAL_SCALE, + (0.2f * ENGO_NORMAL_SCALE), ENGO_DUST_STEAM_LIFETIME); } -s32 func_80A13B1C(EnGo* this, PlayState* play) { +/** + * Transition through the cutscenes when the gatekeeper is opening the shrine. + * + * @return True when cutscenes end. + */ +s32 EnGo_HandleOpenShrineCutscene(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); - s32 pad; + EnGo* this = THIS; s32 ret = false; - switch (this->unk_3C0) { + switch (this->cutsceneState) { case 0: this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); - if (func_80A134F4(this, this->csId)) { - this->unk_3C4 = 1; - this->unk_3C0 = 1; - } else { + if (!EnGo_ChangeCutscene(this, this->csId)) { break; } - + this->gatekeeperAnimState = 1; + this->cutsceneState = 1; + // fallthrough case 1: - if (CutsceneManager_GetCurrentCsId() != this->csId) { - this->csId = CutsceneManager_GetAdditionalCsId(this->csId); - this->unk_3C0 = 2; - } else { + if (CutsceneManager_GetCurrentCsId() == this->csId) { break; } - + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + this->cutsceneState = 2; + // fallthrough case 2: - if (func_80A134F4(this, this->csId)) { - this->unk_3C0 = 3; - } else { + if (!EnGo_ChangeCutscene(this, this->csId)) { break; } - + this->cutsceneState = 3; + // fallthrough case 3: if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_TALK, NULL); - this->unk_3C0 = 4; + this->cutsceneState = 4; } else if (CutsceneManager_GetCurrentCsId() == this->csId) { CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } + // fallthrough + default: + break; } - switch (this->unk_3C4) { + switch (this->gatekeeperAnimState) { case 1: - func_80A12C48(this, play, 4); - this->unk_390 |= 0x4000; - this->unk_3C4++; + EnGo_ChangeAnim(this, play, ENGO_ANIM_ROLL); + this->actionFlags |= ENGO_FLAG_ROLLING_UP; + this->gatekeeperAnimState++; break; case 2: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->unk_390 &= ~0x4000; - this->unk_390 &= ~0x80; - this->unk_390 |= 0x200; - this->unk_3C4++; - this->unk_3C2 = 0; - this->actor.shape.yOffset = 14.0f; + this->actionFlags &= ~ENGO_FLAG_ROLLING_UP; + this->actionFlags &= ~ENGO_FLAG_STANDING; + this->actionFlags |= ENGO_FLAG_ROLLED_UP; + this->gatekeeperAnimState++; + this->cutsceneDelayTimer = 0; + this->actor.shape.yOffset = ENGO_ROLLEDUP_Y_OFFSET; } break; case 3: - this->unk_3C2++; - if (this->unk_3C2 >= 10) { + this->cutsceneDelayTimer++; + if (this->cutsceneDelayTimer >= 10) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_JUMP); - this->actor.velocity.y = 10.0f; + this->actor.velocity.y = ENGO_POUND_INITIAL_RISE_VEL; this->actor.gravity = -1.0f; - this->unk_3C4++; + this->gatekeeperAnimState++; } break; case 4: - if (func_80A13564(this, 10.0f, 0.004f, 6)) { + if (EnGo_HandleGatekeeperPoundCutscene(this, ENGO_POUND_INITIAL_RISE_VEL, (0.4f) * ENGO_NORMAL_SCALE, 6)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_LAND_BIG); - func_80A13728(this, play); - this->unk_3C4++; - this->unk_3C2 = 0; - SET_WEEKEVENTREG(WEEKEVENTREG_88_40); + EnGo_CreateGatekeeperPoundEffects(this, play); + this->gatekeeperAnimState++; + this->cutsceneDelayTimer = 0; + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); } break; case 5: - this->unk_3C2++; - if (this->unk_3C2 >= 10) { - func_80A12C48(this, play, 5); + this->cutsceneDelayTimer++; + if (this->cutsceneDelayTimer >= 10) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); this->actor.shape.rot.x = 0; - this->unk_390 &= ~0x200; - this->unk_390 |= 0x80; - this->unk_3C4++; + this->actionFlags &= ~ENGO_FLAG_ROLLED_UP; + this->actionFlags |= ENGO_FLAG_STANDING; + this->gatekeeperAnimState++; } break; case 6: - this->unk_3C0++; - if (this->unk_3C0 >= 65) { + this->cutsceneState++; + if (this->cutsceneState >= 65) { switch (player->transformation) { case PLAYER_FORM_HUMAN: - SET_WEEKEVENTREG(WEEKEVENTREG_88_80); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN); break; case PLAYER_FORM_GORON: - SET_WEEKEVENTREG(WEEKEVENTREG_89_04); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON); break; case PLAYER_FORM_ZORA: - SET_WEEKEVENTREG(WEEKEVENTREG_89_02); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA); break; case PLAYER_FORM_DEKU: - SET_WEEKEVENTREG(WEEKEVENTREG_89_01); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU); + break; + + default: break; } ret = true; } break; + + default: + break; } Actor_MoveWithGravity(&this->actor); return ret; } -s32 func_80A13E80(EnGo* this, PlayState* play) { - static Vec3f D_80A166A4 = { 0.0f, 200.0f, 280.0f }; - s32 pad; - Vec3f sp48; +/** + * Medigoron's MsgEvent callback to give the Powder Keg for the test. + */ +s32 EnGo_HandleGivePowderKegCutscene(Actor* thisx, PlayState* play) { + static Vec3f sPowderKegSpawnOffset = { 0.0f, 200.0f, 280.0f }; + EnGo* this = THIS; + Vec3f powderKegSpawnPos; s32 ret = false; - switch (this->unk_3C0) { + switch (this->cutsceneState) { case 0: this->csId = this->actor.csId; - if (func_80A134F4(this, this->csId)) { - this->unk_3C0++; + if (EnGo_ChangeCutscene(this, this->csId)) { + this->cutsceneState++; } break; case 1: - func_80A12C48(this, play, 7); - this->unk_3C0++; + EnGo_ChangeAnim(this, play, ENGO_ANIM_DROPKEG); + this->cutsceneState++; case 2: if (Animation_OnFrame(&this->skelAnime, 16.0f)) { @@ -1247,263 +1662,348 @@ s32 func_80A13E80(EnGo* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A12C48(this, play, 1); - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166A4, &sp48); + EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE_IMM); + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sPowderKegSpawnOffset, + &powderKegSpawnPos); gSaveContext.powderKegTimer = 2400; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, - 0, 0, BOMB_TYPE_BODY); - func_80A134B0(this, play, 1); - this->unk_3C2 = 0; - this->unk_3C0++; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, powderKegSpawnPos.x, powderKegSpawnPos.y, + powderKegSpawnPos.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, 0, 0, BOMB_TYPE_BODY); + EnGo_UpdateMedigoronColliderRadius(this, play, true); + this->cutsceneDelayTimer = 0; + this->cutsceneState++; } break; case 3: - if (this->unk_3C2 >= 60) { + if (this->cutsceneDelayTimer >= 60) { CutsceneManager_Stop(this->csId); - this->unk_3C2 = 0; - this->unk_3C0 = 0; + this->cutsceneDelayTimer = 0; + this->cutsceneState = 0; ret = true; } else { - this->unk_3C2++; + this->cutsceneDelayTimer++; } break; + + default: + break; } return ret; } -void func_80A14018(EnGo* this, PlayState* play) { - static Vec3f D_80A166B0 = { 0.0f, 0.0f, 40.0f }; - static s32 D_80A166BC[] = { 11, 10, 12, 13, 14, 17 }; - Vec3f sp2C; - s32 phi_v0 = ENGO_GET_70(&this->actor) % 6; +/** + * Update the stretching racer's animation and actionFlags. + * + * 'ENGO_ATHLETIC_A' through 'ENGO_ATHLETIC_D' exchange animations before and after the race, while the hamstring + * stretchers have the same animation every time. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) { + static Vec3f sStretchingGoronOffset = { 0.0f, 0.0f, 40.0f }; + static s32 sSubtypeToAnimIndex[] = { + ENGO_ANIM_SQUAT_SIDE_TO_SIDE, ENGO_ANIM_DOUBLE_ARM_SIDEBEND, ENGO_ANIM_SHAKE_LIMBS, + ENGO_ANIM_SINGLE_ARM_SIDEBEND, ENGO_ANIM_SITTING_STRETCH, ENGO_ANIM_HELP_SITTING_STRETCH, + }; + Vec3f newSittingStretcherPos; - if (phi_v0 < 4) { - phi_v0 = ((gSaveContext.eventInf[2] & 0xF) + phi_v0) % 4; + // The first four Racer Gorons have different stretches depending on context + // The last two remain the same (since they are dependent on one-another) + s32 subtypeLookup = ENGO_GET_SUBTYPE(&this->actor) % 6; + + if (subtypeLookup < 4) { + subtypeLookup = ((gSaveContext.eventInf[2] & 0xF) + subtypeLookup) % 4; } - func_80A12C48(this, play, D_80A166BC[phi_v0]); + EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[subtypeLookup]); - if (this->unk_3DC == 14) { - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166B0, &sp2C); - Math_Vec3f_Copy(&this->actor.world.pos, &sp2C); + // Move the sitting Goron forward, since their spawn location is the same as their standing counterpart. + if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { + + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sStretchingGoronOffset, + &newSittingStretcherPos); + Math_Vec3f_Copy(&this->actor.world.pos, &newSittingStretcherPos); } + this->actor.flags &= ~ACTOR_FLAG_1; - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_3EC = 0; - this->unk_390 = 0; - this->unk_390 |= (0x40 | 0x20); + Actor_SetScale(&this->actor, this->scaleFactor); + this->sleepState = ENGO_AWAKE; + this->actionFlags = 0; + this->actionFlags |= (ENGO_FLAG_LOST_ATTENTION | ENGO_FLAG_EYES_OPEN); this->actor.gravity = 0.0f; } -void func_80A14104(EnGo* this, PlayState* play) { - static s32 D_80A166D4[] = { 15, 16 }; - s16 temp; +/** + * Update the Goron's animation and actionFlags to 'spectating'. + * + * Spectators engage in one of two cheering animations. Either cheering with their hands above their head, or + * cupping their hands infront of their face and shouting. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) { + static s32 sSubtypeToAnimIndex[] = { ENGO_ANIM_CHEER, ENGO_ANIM_SHOUT }; + s16 animFrame; + + EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[ENGO_GET_SUBTYPE(&this->actor) % 2]); + animFrame = Rand_ZeroOne() * this->skelAnime.endFrame; + this->skelAnime.curFrame = animFrame; - func_80A12C48(this, play, D_80A166D4[ENGO_GET_70(&this->actor) % 2]); - temp = Rand_ZeroOne() * this->skelAnime.endFrame; - this->skelAnime.curFrame = temp; this->actor.flags &= ~ACTOR_FLAG_1; - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_3EC = 0; - this->unk_390 = 0; - this->unk_390 |= 0x40; - this->unk_390 |= 0x20; + Actor_SetScale(&this->actor, this->scaleFactor); + this->sleepState = ENGO_AWAKE; + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; this->actor.gravity = 0.0f; } -void func_80A141D4(EnGo* this, PlayState* play) { - Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit1); +/** + * Update the Goron's animation and actionFlags to 'frozen'. + * + * The Goron will shiver upon awakening, but is otherwise encased in a block of ice which deals damage upon contact. + * + * @see EnGo_Frozen + */ +void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play) { + Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInitFrozen); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->unk_3DC = -1; - func_80A12C48(this, play, 5); - this->unk_3EC = 0; - this->unk_39C = (this->unk_3A4 / 0.01f) * 0.9f; - this->unk_3BE = 2; - this->unk_390 = 0; - this->unk_390 |= 0x40; - this->unk_390 |= 0x400; - this->unk_3A0 = 100.0f; + this->curAnimIndex = -1; + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); + this->sleepState = ENGO_AWAKE; + this->iceBlockScale = (this->scaleFactor / 0.01f) * 0.9f; + this->eyeTexIndex = ENGO_EYETEX_CLOSED; + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_FROZEN; + this->iceBlockAlpha = 100.0f; } -void func_80A1428C(EnGo* this, PlayState* play) { - s16 temp; - Vec3f sp30; - Vec3f sp24; +/** + * Update the Goron Gatekeeper's animation and actionFlags to 'snowball'. + * + * @see EnGo_Snowball + */ +void EnGo_ChangeToSnowballAnimation(EnGo* this, PlayState* play) { + s16 yawToPathPoint; + Vec3f currentPos; + Vec3f startingPathPoint; - Math_Vec3f_Copy(&sp30, &this->actor.world.pos); - if (this->unk_284 != NULL) { + Math_Vec3f_Copy(¤tPos, &this->actor.world.pos); + if (this->gatekeeperPath != NULL) { this->actor.flags &= ~ACTOR_FLAG_2000000; - SubS_CopyPointFromPathCheckBounds(this->unk_284, 0, &sp24); - temp = Math_Vec3f_Yaw(&sp30, &sp24); - this->actor.shape.rot.y = temp; - this->actor.world.rot.y = temp; + SubS_CopyPointFromPathCheckBounds(this->gatekeeperPath, 0, &startingPathPoint); + yawToPathPoint = Math_Vec3f_Yaw(¤tPos, &startingPathPoint); + this->actor.shape.rot.y = yawToPathPoint; + this->actor.world.rot.y = yawToPathPoint; } - this->unk_390 = 0; - this->unk_390 |= 0x100; - this->actor.shape.yOffset = 46.0f; + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_SNOWBALLED; + this->actor.shape.yOffset = ENGO_SNOWBALL_Y_OFFSET; this->actor.gravity = -1.0f; } -void func_80A14324(EnGo* this, PlayState* play) { - func_80A12C48(this, play, 8); - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_390 = 0; +/** + * Update the Goron's animation and actionFlags to 'covering ears'. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_COVEREARS); + Actor_SetScale(&this->actor, this->scaleFactor); + this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_3EC = 0; - this->unk_390 |= 0x40; - this->unk_3BC = 0; - this->unk_3BE = 4; - this->unk_39C = 0.0f; - this->unk_3A0 = 0.0f; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->sleepState = ENGO_AWAKE; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->blinkTimer = 0; + this->eyeTexIndex = ENGO_EYETEX_CLOSED2; + this->iceBlockScale = 0.0f; + this->iceBlockAlpha = 0.0f; } -void func_80A143A8(EnGo* this, PlayState* play) { - func_80A12C48(this, play, 5); - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_390 = 0; +/** + * Update the Goron's animation and actionFlags to 'shivering'. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); + Actor_SetScale(&this->actor, this->scaleFactor); + this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_3EC = 0; - this->unk_390 |= 0x40; - this->unk_390 |= 0x20; - this->unk_3BC = 0; - this->unk_3BE = 0; - this->unk_39C = 0.0f; - this->unk_3A0 = 0.0f; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->sleepState = ENGO_AWAKE; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; + this->blinkTimer = 0; + this->eyeTexIndex = ENGO_EYETEX_OPEN; + this->iceBlockScale = 0.0f; + this->iceBlockAlpha = 0.0f; } -void func_80A14430(EnGo* this, PlayState* play) { +/** + * Setup a Goron stretching at the racetrack. + * + * Stretching Gorons placed in the starting area of the racetrack doing various stretches. + */ +void EnGo_SetupAthletic(EnGo* this, PlayState* play) { if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) || (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) && (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { - func_80A14018(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToStretchingAnimation(this, play); + this->actionFunc = EnGo_Idle; } else { Actor_Kill(&this->actor); } } -void func_80A1449C(EnGo* this, PlayState* play) { +/** + * Setup a Goron spectating at the racetrack. + * + * Spectators to the Goron races cannot be engaged, they simply stand idle and cheer. + */ +void EnGo_SetupSpectator(EnGo* this, PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) || (gSaveContext.save.entrance == ENTRANCE(CUTSCENE, 0))) { - func_80A14104(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToSpectatingAnimation(this, play); + this->actionFunc = EnGo_Idle; } else { Actor_Kill(&this->actor); } } -void func_80A144F4(EnGo* this, PlayState* play) { +/** + * Setup the Goron Shrine's Gatekeeper. + * + * When spoken to, can open the Goron Shrine for the player. + * - On Day 1: Can be found in the open, shivering. + * - On Days 2,3: Can be found in a snowball. + */ +void EnGo_SetupGatekeeper(EnGo* this, PlayState* play) { if (gSaveContext.save.day >= 2) { - this->unk_284 = SubS_GetDayDependentPath(play, ENGO_GET_7F80(&this->actor), 0xFF, &this->unk_3E4); - if (this->unk_284 != NULL) { - this->unk_3E4 = 1; + this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH(&this->actor), 0xFF, &this->indexPathPoint); + if (this->gatekeeperPath != NULL) { + this->indexPathPoint = 1; } - func_80A1428C(this, play); - this->actionFunc = func_80A153FC; - this->unk_3D8 = func_80A13B1C; + EnGo_ChangeToSnowballAnimation(this, play); + this->actionFunc = EnGo_Snowball; + this->msgEventFunc = EnGo_HandleOpenShrineCutscene; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; - this->unk_3D8 = func_80A13B1C; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; + this->msgEventFunc = EnGo_HandleOpenShrineCutscene; } } -void func_80A145AC(EnGo* this, PlayState* play) { - if ((ENGO_GET_70(&this->actor) == ENGO_70_1) && +/** + * Setup a Goron at the graveyard + * + * The Gorons are together, one shivering from the cold, another frozen solid. + */ +void EnGo_SetupGraveyardGoron(EnGo* this, PlayState* play) { + if ((ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) && (((play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) || - !CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08))) { - this->actor.child = func_80A13400(this, play); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON))) { + this->actor.child = EnGo_FindGravemaker(this, play); this->actor.child->child = &this->actor; - func_80A141D4(this, play); - this->actionFunc = func_80A14E14; + EnGo_ChangeToFrozenAnimation(this, play); + this->actionFunc = EnGo_Frozen; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; } } -void func_80A14668(EnGo* this, PlayState* play) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { - func_80A14324(this, play); - this->actionFunc = func_80A149B0; +/** + * Setup a shrine Goron. + * + * There are three, but they all behave the same way aside from dialog. + */ +void EnGo_SetupShrineGoron(EnGo* this, PlayState* play) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { + EnGo_ChangeToCoveringEarsAnimation(this, play); + this->actionFunc = EnGo_Idle; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; } } -void func_80A146CC(EnGo* this, PlayState* play) { - func_80A134B0(this, play, 0); - func_80A12C48(this, play, 0); - this->unk_3A4 *= 5.0f; - Actor_SetScale(&this->actor, this->unk_3A4); +/** + * Setup the Medigoron in the Powder Keg Shop. + * + * This Goron sells Powder Kegs, and gives the player a Powder Keg as part of a challenge to gain + * the privilege to buy them. + */ +void EnGo_SetupMedigoron(EnGo* this, PlayState* play) { + EnGo_UpdateMedigoronColliderRadius(this, play, false); + 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->unk_390 = 0; + this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_390 |= 0x40; - this->unk_390 |= 0x20; - this->unk_3D8 = func_80A13E80; - this->actionFunc = func_80A149B0; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; + this->msgEventFunc = EnGo_HandleGivePowderKegCutscene; + this->actionFunc = EnGo_Idle; } -void func_80A14798(EnGo* this, PlayState* play) { - EffectTireMarkInit sp38 = { - 0, - 62, - { 0, 0, 15, 100 }, - }; +/** + * Default setup function as the initial action function. + */ +void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { + EffectTireMarkInit tireMarkInit = { 0, 62, { 0, 0, 15, 100 } }; - if ((this->unk_288 < 0) || SubS_IsObjectLoaded(this->unk_288, play) || (this->unk_289 < 0) || - SubS_IsObjectLoaded(this->unk_289, play)) { + if (((this->taisouObjIndex < 0) || SubS_IsObjectLoaded(this->taisouObjIndex, play)) || + ((this->hakuginDemoObjIndex < 0) || SubS_IsObjectLoaded(this->hakuginDemoObjIndex, 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); - this->unk_3DC = -1; - func_80A12C48(this, play, 2); - this->actor.draw = func_80A15FEC; + this->curAnimIndex = ENGO_ANIM_INVALID; + EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL); + this->actor.draw = EnGo_Draw; Collider_InitAndSetSphere(play, &this->colliderSphere, &this->actor, &sSphereInit); - Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit2); + Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - Effect_Add(play, &this->unk_3E8, EFFECT_TIRE_MARK, 0, 0, &sp38); + Effect_Add(play, &this->indexEffect, EFFECT_TIRE_MARK, 0, 0, &tireMarkInit); this->actor.targetMode = 1; - this->unk_3A4 = 0.01f; - this->unk_3D8 = NULL; + this->scaleFactor = ENGO_NORMAL_SCALE; + this->msgEventFunc = NULL; - switch (ENGO_GET_F(&this->actor)) { - case ENGO_F_1: - func_80A14430(this, play); + switch (ENGO_GET_TYPE(&this->actor)) { + case ENGO_ATHLETIC: + EnGo_SetupAthletic(this, play); break; - case ENGO_F_2: - func_80A1449C(this, play); + case ENGO_SPECTATOR: + EnGo_SetupSpectator(this, play); break; - case ENGO_F_3: - func_80A144F4(this, play); + case ENGO_GATEKEEPER: + EnGo_SetupGatekeeper(this, play); break; - case ENGO_F_4: - func_80A145AC(this, play); + case ENGO_GRAVEYARD: + EnGo_SetupGraveyardGoron(this, play); break; - case ENGO_F_5: - case ENGO_F_6: - case ENGO_F_7: - func_80A14668(this, play); + case ENGO_ASIDE_STORE: + case ENGO_ASIDE_ELDERSROOM: + case ENGO_ASIDE_ELDERSSON: + EnGo_SetupShrineGoron(this, play); break; - case ENGO_F_8: - func_80A146CC(this, play); + case ENGO_MEDIGORON: + EnGo_SetupMedigoron(this, play); break; default: @@ -1513,147 +2013,192 @@ void func_80A14798(EnGo* this, PlayState* play) { } } -void func_80A149B0(EnGo* this, PlayState* play) { - s16 sp26 = this->actor.world.rot.y; +/** + * Default action for the Gorons. Different types have different default actions. + * + * The default action possibilities include: + * - Shivering + * - Covering ears + * - Spectating (cheering or shouting) + * - Stretching (side-to-side squatting, two-arm side bend, limb shake, one-arm side bend, hamstring stretching while + * sitting, and helping the hamstring stretching Goron.) + */ +void EnGo_Idle(EnGo* this, PlayState* play) { + s16 targetRot = this->actor.world.rot.y; - if ((ENGO_GET_F(&this->actor) == ENGO_F_2) && (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) { + if ((ENGO_GET_TYPE(&this->actor) == ENGO_SPECTATOR) && + (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) { + // Spectators only cheer. No other interactions Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_CHEER - SFX_FLAG); - } else if (ENGO_GET_F(&this->actor) != ENGO_F_8) { - if (func_80A1222C(this, play)) { - SubS_UpdateFlags(&this->unk_390, 0, 7); - this->unk_3EC = 1; - this->actionFunc = func_80A14B30; - } else if (ENGO_GET_F(&this->actor) == ENGO_F_4) { - switch (ENGO_GET_70(&this->actor)) { - case ENGO_70_0: - func_80A132C8(this, play); + } else if (ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) { + // All others besides the Medigoron in the Powder Keg Shop can fall asleep + if (EnGo_IsFallingAsleep(this, play)) { + SubS_UpdateFlags(&this->actionFlags, 0, 7); + this->sleepState = ENGO_ASLEEP_POS; + this->actionFunc = EnGo_Sleep; + } else if (ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) { + switch (ENGO_GET_SUBTYPE(&this->actor)) { + case ENGO_GRAVEYARD_GRAVEMAKER: + EnGo_GravemakerIdle(this, play); break; - case ENGO_70_1: - func_80A133A8(this, play); + case ENGO_GRAVEYARD_FROZEN: + EnGo_FrozenIdle(this, play); + break; + + default: break; } - } else if (ENGO_GET_F(&this->actor) == ENGO_F_1) { + } else if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) { if (ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 0x3FFC) { - SubS_UpdateFlags(&this->unk_390, 3, 7); + SubS_UpdateFlags(&this->actionFlags, 3, 7); } else { - SubS_UpdateFlags(&this->unk_390, 0, 7); + SubS_UpdateFlags(&this->actionFlags, 0, 7); } } } - Math_ApproachS(&this->actor.shape.rot.y, sp26, 4, 0x2AA8); + Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8); } -void func_80A14B30(EnGo* this, PlayState* play) { - s16 sp26 = this->actor.world.rot.y; +/** + * Handles falling asleep, as well as snoring while asleep. + */ +void EnGo_Sleep(EnGo* this, PlayState* play) { + s16 targetRot = this->actor.world.rot.y; u16 sfxId; - if (func_80A1222C(this, play)) { - this->unk_3EC = 1; + if (EnGo_IsFallingAsleep(this, play)) { + this->sleepState = ENGO_ASLEEP_POS; } - if (this->unk_390 & 0x4000) { + if (this->actionFlags & ENGO_FLAG_ROLLING_UP) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->unk_390 &= ~0x4000; - this->unk_390 |= 0x200; - if (this->unk_3EC != 0) { - this->unk_3AE = 0; + this->actionFlags &= ~ENGO_FLAG_ROLLING_UP; + this->actionFlags |= ENGO_FLAG_ROLLED_UP; + if (this->sleepState != ENGO_AWAKE) { + this->snorePhase = 0; } - this->actor.shape.yOffset = 14.0f; + this->actor.shape.yOffset = ENGO_ROLLEDUP_Y_OFFSET; } - } else if (this->unk_390 & 0x8000) { + } else if (this->actionFlags & ENGO_FLAG_UNROLLING) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->unk_390 |= 0x80; - this->unk_390 &= ~0x8000; + this->actionFlags |= ENGO_FLAG_STANDING; + this->actionFlags &= ~ENGO_FLAG_UNROLLING; } - } else if (this->unk_390 & 0x200) { - if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.playerHeightRel < 20.0f) && (this->unk_3EC == 0)) { - func_80A12C48(this, play, 3); - this->unk_390 &= ~0x80; - this->unk_390 &= ~0x200; - this->unk_390 |= 0x8000; - this->actor.shape.yOffset = 0.0f; - } else if ((this->unk_3EC != 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { - this->actor.scale.x = this->unk_3A4 - (Math_SinS(this->unk_3AE) * 0.001f); - this->actor.scale.y = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4; - this->actor.scale.z = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4; - if (this->unk_3AE == 0) { - this->unk_3EC = -this->unk_3EC; - if (this->unk_3EC > 0) { - sfxId = NA_SE_EN_GOLON_SNORE1; - } else { - sfxId = NA_SE_EN_GOLON_SNORE2; - } + } else if (this->actionFlags & ENGO_FLAG_ROLLED_UP) { + if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.playerHeightRel < 20.0f) && + (this->sleepState == ENGO_AWAKE)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL_IMM); + this->actionFlags &= ~ENGO_FLAG_STANDING; + this->actionFlags &= ~ENGO_FLAG_ROLLED_UP; + this->actionFlags |= ENGO_FLAG_UNROLLING; + this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET; + } else if ((this->sleepState != ENGO_AWAKE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { + // While asleep, rhythmicallly snore and change shape to show breathing. + this->actor.scale.x = this->scaleFactor - (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE)); + this->actor.scale.y = this->scaleFactor + (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE)); + this->actor.scale.z = this->scaleFactor + (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE)); + + if (this->snorePhase == 0) { + this->sleepState = -this->sleepState; + sfxId = (this->sleepState > ENGO_AWAKE) ? NA_SE_EN_GOLON_SNORE1 : NA_SE_EN_GOLON_SNORE2; Actor_PlaySfx(&this->actor, sfxId); } - this->unk_3AE += 0x400; - this->actor.shape.yOffset = (this->actor.scale.y / this->unk_3A4) * 14.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); + this->snorePhase += 0x400; + this->actor.shape.yOffset = (this->actor.scale.y / this->scaleFactor) * ENGO_ROLLEDUP_Y_OFFSET; + SubS_UpdateFlags(&this->actionFlags, 3, 7); } } else if ((this->actor.xzDistToPlayer >= 240.0f) || (this->actor.playerHeightRel >= 20.0f) || - (this->unk_3EC != 0)) { - func_80A12C48(this, play, 4); - this->unk_390 &= ~0x80; - this->unk_390 &= ~0x200; - this->unk_390 |= 0x4000; - this->actor.shape.yOffset = 0.0f; + (this->sleepState != ENGO_AWAKE)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_ROLL); + this->actionFlags &= ~ENGO_FLAG_STANDING; + this->actionFlags &= ~ENGO_FLAG_ROLLED_UP; + this->actionFlags |= ENGO_FLAG_ROLLING_UP; + this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET; } - SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); - Math_ApproachS(&this->actor.shape.rot.y, sp26, 4, 0x2AA8); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8); } -void func_80A14E14(EnGo* this, PlayState* play) { - Actor* actor = this->colliderCylinder.base.ac; +/** + * Action function for a frozen Goron. + * + * Transitions to the thawing cutscene when colliding with hot water or fire effect. + */ +void EnGo_Frozen(EnGo* this, PlayState* play) { + Actor* actorCollidedWith = this->colliderCylinder.base.ac; - if ((this->unk_390 & 0x1000) && (((actor != NULL) && (actor->id == ACTOR_OBJ_AQUA) && (actor->params & 1)) || - (this->actor.colChkInfo.damageEffect == 2))) { - this->actionFunc = func_80A14E74; + if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) && + (((actorCollidedWith != NULL) && (actorCollidedWith->id == ACTOR_OBJ_AQUA) && AQUA_HOT(actorCollidedWith)) || + (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_FIRE))) { + this->actionFunc = EnGo_AwaitThaw; } } -void func_80A14E74(EnGo* this, PlayState* play) { - if (func_80A134F4(this, this->actor.csId)) { - this->actionFunc = func_80A14EB0; +/** + * Action function for transitioning to thawing. + */ +void EnGo_AwaitThaw(EnGo* this, PlayState* play) { + if (EnGo_ChangeCutscene(this, this->actor.csId)) { + this->actionFunc = EnGo_Thaw; } } -void func_80A14EB0(EnGo* this, PlayState* play) { - EnGo* sp24 = (EnGo*)this->actor.child; +/** + * Action function for thawing of the Goron, melting sounds, and steam. + */ +void EnGo_Thaw(EnGo* this, PlayState* play) { + EnGo* otherGoron = (EnGo*)this->actor.child; - if ((s32)(this->unk_39C * 3.0f) != 0) { + if ((s32)(this->iceBlockScale * 3.0f) != 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); - Math_ApproachF(&this->unk_39C, 0.0f, 0.02f, 1.0f); - this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f; - func_80A139E4(this); + Math_ApproachF(&this->iceBlockScale, 0.0f, 0.02f, 1.0f); + this->iceBlockAlpha = (this->iceBlockScale / 0.9f) * 100.0f; + EnGo_MakeSteam(this); } else { CutsceneManager_Stop(this->actor.csId); - func_80A143A8(this, play); - if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (ENGO_GET_70(&this->actor) == ENGO_70_1)) { - SubS_UpdateFlags(&this->unk_390, 4, 7); - func_80A143A8(sp24, play); - sp24->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && + (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN)) { + SubS_UpdateFlags(&this->actionFlags, 4, 7); + EnGo_ChangeToShiveringAnimation(otherGoron, play); + otherGoron->actionFunc = EnGo_Idle; } - this->actionFunc = func_80A149B0; + this->actionFunc = EnGo_Idle; } } -void func_80A14FC8(EnGo* this, PlayState* play) { - s32 sp38[] = { - 0, 2, 6, 20, 18, 5, 5, 15, +/** + * Cutscene action function for the arrival of springtime. + * + * This cutscene consists of: + * - The gravemaker stops shivering and looks around. + * - The other Goron thaws and shivers briefly. + * - The gravemaker pats the other's back and gestures broadly. + * - They both look around. + * - They both cheer. + */ +void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) { + s32 animationIndices[] = { + ENGO_ANIM_LYINGDOWNIDLE, ENGO_ANIM_UNROLL, ENGO_ANIM_SHIVER_IMM, ENGO_ANIM_LOOK_AROUND, + ENGO_ANIM_SHOW, ENGO_ANIM_SHIVER, ENGO_ANIM_SHIVER, ENGO_ANIM_CHEER, }; u16 cueType = 0; s32 cueId; s32 cueChannel; - switch (ENGO_GET_70(&this->actor)) { - case ENGO_70_0: + switch (ENGO_GET_SUBTYPE(&this->actor)) { + case ENGO_GRAVEYARD_GRAVEMAKER: cueType = CS_CMD_ACTOR_CUE_128; break; - case ENGO_70_1: + case ENGO_GRAVEYARD_FROZEN: cueType = CS_CMD_ACTOR_CUE_129; break; + + default: + break; } if ((cueType == CS_CMD_ACTOR_CUE_128) || (cueType == CS_CMD_ACTOR_CUE_129)) { @@ -1661,51 +2206,59 @@ void func_80A14FC8(EnGo* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, cueType); cueId = play->csCtx.actorCues[cueChannel]->id; - if (this->cueId != (u8)cueId) { - this->cueId = cueId; - func_80A12C48(this, play, sp38[cueId]); - this->unk_390 = 0; - this->unk_390 |= 0x20; - this->unk_3BE = 0; - this->unk_39C = 0.0f; - this->unk_3A0 = 0.0f; + if (this->springArrivalCueId != (u8)cueId) { + this->springArrivalCueId = cueId; + EnGo_ChangeAnim(this, play, animationIndices[cueId]); + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; + this->eyeTexIndex = ENGO_EYETEX_OPEN; + this->iceBlockScale = 0.0f; + this->iceBlockAlpha = 0.0f; switch (cueId) { case 1: - this->unk_390 |= 0x80; + this->actionFlags |= ENGO_FLAG_STANDING; this->skelAnime.curFrame = this->skelAnime.endFrame; break; case 5: case 6: - func_80A141D4(this, play); + EnGo_ChangeToFrozenAnimation(this, play); + break; + + default: break; } } - switch (this->cueId) { + switch (this->springArrivalCueId) { case 3: - if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 20)) { - func_80A12C48(this, play, 21); + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && + (this->curAnimIndex == 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->unk_3DC == 18)) { - func_80A12C48(this, play, 19); + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && + (this->curAnimIndex == ENGO_ANIM_SHOW)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHOW_LOOPED); } break; case 6: - if ((s32)(this->unk_39C * 3.0f) != 0) { + if ((s32)(this->iceBlockScale * 3.0f) != 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); - Math_ApproachF(&this->unk_39C, 0.0f, 0.02f, 1.0f); - this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f; - func_80A139E4(this); - } else if (this->unk_390 & 0x400) { - func_80A143A8(this, play); + Math_ApproachF(&this->iceBlockScale, 0.0f, 0.02f, 1.0f); + this->iceBlockAlpha = (this->iceBlockScale / 0.9f) * 100.0f; + EnGo_MakeSteam(this); + } else if (this->actionFlags & ENGO_FLAG_FROZEN) { + EnGo_ChangeToShiveringAnimation(this, play); } break; + + default: + break; } if (cueType == 128) { @@ -1731,6 +2284,9 @@ void func_80A14FC8(EnGo* this, PlayState* play) { case 490: Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL); break; + + default: + break; } } else if (cueType == 129) { switch (play->csCtx.curFrame) { @@ -1750,65 +2306,72 @@ void func_80A14FC8(EnGo* this, PlayState* play) { case 480: Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL); break; + + default: + break; } } - SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } } -void func_80A153FC(EnGo* this, PlayState* play) { - Vec3s* sp5C; - Vec3f sp50; - Vec3f sp44; +/** + * Action function for the Gatekeeper while they're in a snowball. + * + * On Day 2, they'll roll along a set path, and can be halted with certain attacks. + * On Day 3, they're frozen solid. + */ +void EnGo_Snowball(EnGo* this, PlayState* play) { + Vec3s* pathPoints; + Vec3f currentPos; + Vec3f currentPathPoint; - if ((this->unk_390 & 0x1000) && (this->actor.colChkInfo.damageEffect == 0xF)) { + if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) && (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_BREAK)) { + // Stop the Gatekeeper when hit by an appropriate effect Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN); - this->actor.flags &= ~ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - - func_80A118F8(this->unk_3F8, this->actor.world.pos); + EnGo_InitSnow(this->effectTable, this->actor.world.pos); this->actor.shape.rot.x = 0; this->actor.speed = 0.0f; - Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD); if (gSaveContext.save.day == 3) { - func_80A141D4(this, play); - this->actionFunc = func_80A14E14; + EnGo_ChangeToFrozenAnimation(this, play); + this->actionFunc = EnGo_Frozen; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; } - } else if (this->unk_284 != NULL) { - if (this->unk_390 & 0x800) { + } else if (this->gatekeeperPath != NULL) { + if (this->actionFlags & ENGO_FLAG_HIT_OTHER) { Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_BODY_HIT); func_800B8D50(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0); } - sp5C = Lib_SegmentedToVirtual(this->unk_284->points); - if (SubS_HasReachedPoint(&this->actor, this->unk_284, this->unk_3E4)) { - if (this->unk_3E4 >= (this->unk_284->count - 1)) { - this->unk_3E4 = 0; + pathPoints = Lib_SegmentedToVirtual(this->gatekeeperPath->points); + if (SubS_HasReachedPoint(&this->actor, this->gatekeeperPath, this->indexPathPoint)) { + if (this->indexPathPoint >= (this->gatekeeperPath->count - 1)) { + this->indexPathPoint = 0; } else { - this->unk_3E4++; + this->indexPathPoint++; } } - Math_Vec3s_ToVec3f(&sp44, &sp5C[this->unk_3E4]); - Math_Vec3f_Copy(&sp50, &this->actor.world.pos); - Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&sp50, &sp44), 4, 0x38E); + Math_Vec3s_ToVec3f(¤tPathPoint, &pathPoints[this->indexPathPoint]); + Math_Vec3f_Copy(¤tPos, &this->actor.world.pos); + Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(¤tPos, ¤tPathPoint), 4, 0x38E); this->actor.shape.rot.y = this->actor.world.rot.y; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { Actor_PlaySfx(&this->actor, NA_SE_EV_BIGBALL_ROLL - SFX_FLAG); - func_800AE930(&play->colCtx, Effect_GetByIndex(this->unk_3E8), &this->actor.world.pos, 18.0f, + func_800AE930(&play->colCtx, Effect_GetByIndex(this->indexEffect), &this->actor.world.pos, 18.0f, this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId); } else { - func_800AEF44(Effect_GetByIndex(this->unk_3E8)); + func_800AEF44(Effect_GetByIndex(this->indexEffect)); } this->actor.speed = 4.0f; @@ -1817,86 +2380,107 @@ void func_80A153FC(EnGo* this, PlayState* play) { } } -s32* func_80A15684(EnGo* this, PlayState* play) { - static s32* D_80A16704[] = { - D_80A16100, - D_80A16164, +/** + * Return the MsgEvent script appropriate for the actor. + */ +s32* EnGo_GetMsgEventScript(EnGo* this, PlayState* play) { + static s32 sMsgScriptGraveyard[] = { + sMsgScriptGoronGravemaker, + sMsgScriptGoronFrozen, }; - if (this->unk_3EC != 0) { - return D_80A1640C; + if (this->sleepState != ENGO_AWAKE) { + return sMsgScriptGoronSleeping; // Lullaby hint } - if (ENGO_GET_F(&this->actor) == ENGO_F_1) { - switch (ENGO_GET_70(&this->actor) % 6) { - case ENGO_70_0: - return D_80A163BC; - case ENGO_70_1: - return D_80A163CC; - case ENGO_70_2: - return D_80A163DC; - case ENGO_70_3: - return D_80A163EC; - case ENGO_70_4: - return D_80A163FC; - case ENGO_70_5: - return D_80A163FC; + if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) { + switch (ENGO_GET_SUBTYPE(&this->actor) % 6) { + case ENGO_ATHLETIC_A: + return sMsgScriptGoronAthleticA; + + case ENGO_ATHLETIC_B: // Unused! + return sMsgScriptGoronAthleticB; + + case ENGO_ATHLETIC_C: + return sMsgScriptGoronAthleticC; + + case ENGO_ATHLETIC_D: + return sMsgScriptGoronAthleticD; + + case ENGO_ATHLETIC_HAMSTRINGSIT: + return sMsgScriptGoronAthleticHamstring; + + case ENGO_ATHLETIC_HAMSTRINGSTAND: + return sMsgScriptGoronAthleticHamstring; + + default: + break; } } - switch (ENGO_GET_F(&this->actor)) { - case ENGO_F_3: - return D_80A16350; - case ENGO_F_4: - return D_80A16704[ENGO_GET_70(&this->actor)]; - case ENGO_F_5: - return D_80A16208; - case ENGO_F_6: - return D_80A16254; - case ENGO_F_7: - return D_80A16210; - case ENGO_F_8: - return D_80A16280; + switch (ENGO_GET_TYPE(&this->actor)) { + case ENGO_GATEKEEPER: + return sMsgScriptGoronGatekeeper; + + case ENGO_GRAVEYARD: + return sMsgScriptGraveyard[ENGO_GET_SUBTYPE(&this->actor)]; + + case ENGO_ASIDE_STORE: + return sMsgScriptGoronAsideStore; + + case ENGO_ASIDE_ELDERSROOM: + return sMsgScriptGoronAsideEldersRoom; + + case ENGO_ASIDE_ELDERSSON: + return sMsgScriptGoronAsideEldersSon; + + case ENGO_MEDIGORON: + return sMsgScriptGoronMedigoron; + default: - return D_80A16208; + return sMsgScriptGoronAsideStore; } } -void func_80A157C4(EnGo* this, PlayState* play) { +/** + * Action function for dialog, movement due to dialog, and ending dialog + */ +void EnGo_Talk(EnGo* this, PlayState* play) { s32 pad; - Vec3f sp40; - Vec3f sp34; + Vec3f targetPos; + Vec3f thisPos; - if (!func_8010BF58(&this->actor, play, func_80A15684(this, play), this->unk_3D8, &this->unk_28C)) { - if ((ENGO_GET_F(&this->actor) != ENGO_F_1) && !(this->unk_390 & 0x200)) { - Math_Vec3f_Copy(&sp40, &this->unk_38C->world.pos); - Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&sp34, &sp40), 4, 0x2AA8); + if (!func_8010BF58(&this->actor, play, EnGo_GetMsgEventScript(this, play), this->msgEventFunc, + &this->msgScriptResumePos)) { + if ((ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC) && !(this->actionFlags & ENGO_FLAG_ROLLED_UP)) { + Math_Vec3f_Copy(&targetPos, &this->attentionTarget->world.pos); + Math_Vec3f_Copy(&thisPos, &this->actor.world.pos); + Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&thisPos, &targetPos), 4, 0x2AA8); } - SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); return; } - if ((ENGO_GET_F(&this->actor) == ENGO_F_5) || (ENGO_GET_F(&this->actor) == ENGO_F_6) || - (ENGO_GET_F(&this->actor) == ENGO_F_7)) { - this->unk_3BC = 0; - this->unk_390 &= ~0x20; - this->unk_3BE = 4; + if ((ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_STORE) || (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSROOM) || + (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSSON)) { + this->blinkTimer = 0; + this->actionFlags &= ~ENGO_FLAG_EYES_OPEN; + this->eyeTexIndex = ENGO_EYETEX_CLOSED2; } - this->unk_390 &= ~0x8; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_28C = 0; - this->unk_390 |= 0x40; - this->actionFunc = this->unk_18C; + this->actionFlags &= ~ENGO_FLAG_ENGAGED; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->msgScriptResumePos = 0; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFunc = this->interruptedActionFunc; } void EnGo_Init(Actor* thisx, PlayState* play) { EnGo* this = THIS; - this->unk_288 = SubS_GetObjectIndex(OBJECT_TAISOU, play); - this->unk_289 = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play); - this->actionFunc = func_80A14798; + this->taisouObjIndex = SubS_GetObjectIndex(OBJECT_TAISOU, play); + this->hakuginDemoObjIndex = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play); + this->actionFunc = EnGo_SetupInitialAction; } void EnGo_Destroy(Actor* thisx, PlayState* play) { @@ -1904,50 +2488,55 @@ void EnGo_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->colliderCylinder); Collider_DestroySphere(play, &this->colliderSphere); - Effect_Destroy(play, this->unk_3E8); + Effect_Destroy(play, this->indexEffect); } void EnGo_Update(Actor* thisx, PlayState* play) { EnGo* this = THIS; - f32 phi_f0; + f32 xzRange; - func_80A12868(this, play); - if (!func_80A12774(this, play)) { - func_80A12954(this, play); + EnGo_DetectCollisions(this, play); + + if (!EnGo_UpdateTalking(this, play)) { + EnGo_UpdateSpringArrivalCutscene(this, play); } this->actionFunc(this, play); - if (!(this->unk_390 & 0x400)) { - func_80A12D6C(this); - func_80A12A64(this, play); - func_80A131F8(this, play); - func_80A12B78(this, play); + if (!(this->actionFlags & ENGO_FLAG_FROZEN)) { + EnGo_UpdateEyes(this); + EnGo_UpdateAnimationToCurrent(this, play); + EnGo_UpdateAttentionTargetAndReactions(this, play); + EnGo_UpdateSfx(this, play); } - if (!(this->unk_390 & 0x100) && !(this->unk_390 & 0x200) && !(this->unk_390 & 0x400)) { - if (ENGO_GET_F(&this->actor) == ENGO_F_8) { - phi_f0 = this->colliderSphere.dim.worldSphere.radius + 60; + if (!(this->actionFlags & ENGO_FLAG_SNOWBALLED) && !(this->actionFlags & ENGO_FLAG_ROLLED_UP) && + !(this->actionFlags & ENGO_FLAG_FROZEN)) { + if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) { + xzRange = this->colliderSphere.dim.worldSphere.radius + 60; } else { - phi_f0 = this->colliderCylinder.dim.radius + 40; + xzRange = this->colliderCylinder.dim.radius + 40; } - func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7); - } else if ((this->unk_390 & 0x200) && (this->unk_3EC != 0)) { - phi_f0 = this->colliderCylinder.dim.radius + 40; - func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7); + func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7); + } else if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) && (this->sleepState != ENGO_AWAKE)) { + xzRange = this->colliderCylinder.dim.radius + 40; + func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7); } - if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_2) && - (ENGO_GET_F(&this->actor) != ENGO_F_1)) { + if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_SPECTATOR) && + (ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC)) { Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } - func_80A122EC(this); - func_80A126BC(this, play); - func_80A1203C(this); + EnGo_UpdateFocus(this); + EnGo_UpdateCollider(this, play); + EnGo_UpdateEffects(this); } -void func_80A15B80(EnGo* this, PlayState* play) { +/** + * Draw function for a snowballed or rolled up Goron (no need to draw limbs). + */ +void EnGo_Draw_NoSkeleton(EnGo* this, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); @@ -1961,7 +2550,7 @@ void func_80A15B80(EnGo* this, PlayState* play) { Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); Matrix_Translate(0.0f, this->actor.shape.yOffset, 0.0f, MTXMODE_APPLY); - if (this->unk_390 & 0x100) { + if (this->actionFlags & ENGO_FLAG_SNOWBALLED) { Matrix_Scale(this->actor.scale.x * 8.0f, this->actor.scale.y * 8.0f, this->actor.scale.z * 8.0f, MTXMODE_APPLY); } else { Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); @@ -1970,60 +2559,59 @@ void func_80A15B80(EnGo* this, PlayState* play) { Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, (this->unk_390 & 0x100) ? gGoronSnowballDL : gGoronRolledUpDL); + gSPDisplayList(POLY_OPA_DISP++, (this->actionFlags & ENGO_FLAG_SNOWBALLED) ? gGoronSnowballDL : gGoronRolledUpDL); CLOSE_DISPS(play->state.gfxCtx); } s32 EnGo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGo* this = THIS; - Vec3f sp30; - s32 idx; + Vec3f worldPos; + s32 rotTableIndex; - if ((ENGO_GET_F(&this->actor) == ENGO_F_8) && (limbIndex == 10)) { - Matrix_MultZero(&sp30); - sp30.y = this->actor.world.pos.y; - Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30); + if ((ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) && (limbIndex == GORON_LIMB_BODY)) { + Matrix_MultZero(&worldPos); + worldPos.y = this->actor.world.pos.y; + Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &worldPos); } switch (limbIndex) { - case 10: - idx = 0; + case GORON_LIMB_BODY: + rotTableIndex = 0; break; - case 11: - idx = 1; + case GORON_LIMB_LEFT_UPPER_ARM: + rotTableIndex = 1; break; - case 14: - idx = 2; + case GORON_LIMB_RIGHT_UPPER_ARM: + rotTableIndex = 2; break; default: - idx = 9; + rotTableIndex = 9; break; } - if ((this->unk_390 & 0x80) && (idx < 9)) { - rot->y += (s16)(Math_SinS(this->unk_3CE[idx]) * 200.0f); - rot->z += (s16)(Math_CosS(this->unk_3C8[idx]) * 200.0f); + if ((this->actionFlags & ENGO_FLAG_STANDING) && (rotTableIndex < 9)) { + rot->y += (s16)(Math_SinS(this->limbRotTableY[rotTableIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->limbRotTableZ[rotTableIndex]) * 200.0f); } return false; } void EnGo_TransfromLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { EnGo* this = THIS; - u16 temp_v0; s32 stepRot; s32 overrideRot; - if (this->unk_390 & 0x40) { + if (this->actionFlags & ENGO_FLAG_LOST_ATTENTION) { stepRot = false; } else { stepRot = true; } - if (this->unk_390 & 0x10) { + if (this->actionFlags & ENGO_FLAG_FACE_TARGET) { overrideRot = true; } else { overrideRot = false; @@ -2034,47 +2622,50 @@ void EnGo_TransfromLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } switch (limbIndex) { - case 17: - SubS_UpdateLimb(this->unk_3B0 + this->unk_3B4 + 0x4000, - this->unk_3B2 + this->unk_3B6 + this->actor.shape.rot.y + 0x4000, &this->unk_290, - &this->unk_2A8, stepRot, overrideRot); + case GORON_LIMB_HEAD: + SubS_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000, + this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->headPos, + &this->headRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_290.x, this->unk_290.y, this->unk_290.z, MTXMODE_NEW); + Matrix_Translate(this->headPos.x, this->headPos.y, this->headPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_2A8.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_2A8.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_2A8.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headRot.z, MTXMODE_APPLY); Matrix_Push(); break; - case 10: - SubS_UpdateLimb(this->unk_3B4 + 0x4000, this->unk_3B6 + this->actor.shape.rot.y + 0x4000, &this->unk_29C, - &this->unk_2AE, stepRot, overrideRot); + case GORON_LIMB_BODY: + SubS_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->bodyPos, + &this->bodyRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_29C.x, this->unk_29C.y, this->unk_29C.z, MTXMODE_NEW); + Matrix_Translate(this->bodyPos.x, this->bodyPos.y, this->bodyPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_2AE.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_2AE.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_2AE.z, MTXMODE_APPLY); + Matrix_RotateYS(this->bodyRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->bodyRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->bodyRot.z, MTXMODE_APPLY); Matrix_Push(); break; + + default: + break; } } -void func_80A15FEC(Actor* thisx, PlayState* play) { - static TexturePtr D_80A1670C[] = { +void EnGo_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sEyeTextures[] = { gGoronEyeOpenTex, gGoronEyeHalfTex, gGoronEyeClosedTex, gGoronEyeHalfTex, gGoronEyeClosed2Tex, }; EnGo* this = THIS; - if (!(this->unk_390 & 0x300)) { + if (!(this->actionFlags & (ENGO_FLAG_SNOWBALLED | ENGO_FLAG_ROLLED_UP))) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A1670C[this->unk_3BE])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); - if (this->unk_3DC == 14) { + if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY); } SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, @@ -2083,8 +2674,8 @@ void func_80A15FEC(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } else { - func_80A15B80(this, play); + EnGo_Draw_NoSkeleton(this, play); } - func_80A137C0(this, play, this->unk_39C, this->unk_3A0); - func_80A1213C(this, play); + EnGo_DrawIceBlockWhenFrozen(this, play, this->iceBlockScale, this->iceBlockAlpha); + EnGo_DrawEffects(this, play); } 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 9d12dfdce..a1c96214b 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -2,103 +2,141 @@ #define Z_EN_GO_H #include "global.h" +#include "objects/object_oF1d_map/object_oF1d_map.h" struct EnGo; typedef void (*EnGoActionFunc)(struct EnGo*, PlayState*); +typedef s32 (*MsgEventFunc)(Actor*, PlayState*); -#define ENGO_GET_F(thisx) (((thisx)->params & 0xF) & 0xFF) -#define ENGO_GET_70(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF) -#define ENGO_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) +#define ENGO_GET_TYPE(thisx) (((thisx)->params & 0xF) & 0xFF) +#define ENGO_GET_SUBTYPE(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF) -enum { +#define ENGO_GET_PATH(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) + +#define ENGO_SNOW_EFFECT_COUNT 16 +#define ENGO_OTHER_EFFECT_COUNT 16 +#define ENGO_EFFECT_COUNT (ENGO_SNOW_EFFECT_COUNT + ENGO_OTHER_EFFECT_COUNT) + +/** + * Struct to track the state of various visual effects. + * + * A Goron's 'effectTable' is comprised of a number of these effects, which depending on the context in which they are + * used, take on the form of snow, dust, or steam. The functions using these objects have an expectation that they are + * iterating through the full effectTable, or half of the effectTable. See individual functions containing 'EnGoEffect*' + * parameters for more details. + */ +typedef struct EnGoEffect { + /* 0x00 */ u8 type; + /* 0x01 */ u8 alphaDenom; + /* 0x02 */ u8 alphaNumer; + /* 0x04 */ Vec3s rotVelocity; + /* 0x0A */ Vec3s rotAngle; + /* 0x10 */ Vec3f pos; + /* 0x1C */ Vec3f accel; + /* 0x28 */ Vec3f velocity; + /* 0x34 */ f32 scaleXY; + /* 0x38 */ f32 scaleXYDelta; +} EnGoEffect; // size = 0x3C; + +/** + * Goron Type, identified by bits [3..0] of the actor's params + * + * - The ENGO_ATHLETIC and ENGO_SPECTATOR types share the same subtype domain (EnGoRacetrackSubtype: [0,7]) + * - ENGO_GRAVEYARD types have their own subtype domain (EnGoGraveyardSubtype: [0,1]) + * - Others have no subtypes. + */ +typedef enum EnGoType { /* 0 */ ENGO_F_0, - /* 1 */ ENGO_F_1, - /* 2 */ ENGO_F_2, - /* 3 */ ENGO_F_3, - /* 4 */ ENGO_F_4, - /* 5 */ ENGO_F_5, - /* 6 */ ENGO_F_6, - /* 7 */ ENGO_F_7, - /* 8 */ ENGO_F_8, -}; + /* 1 */ ENGO_ATHLETIC, // Racers stretching before the race + /* 2 */ ENGO_SPECTATOR, // Spectators to the race + /* 3 */ ENGO_GATEKEEPER, // Gatekeeper to the Goron Shrine + /* 4 */ ENGO_GRAVEYARD, // Gravemaker and other + /* 5 */ ENGO_ASIDE_STORE, // Shrine Goron outside store + /* 6 */ ENGO_ASIDE_ELDERSROOM, // Shrine Goron outside Elder's room + /* 7 */ ENGO_ASIDE_ELDERSSON, // Shrine Goron aside the Elder's Son + /* 8 */ ENGO_MEDIGORON, // Medigoron selling Powder Kegs +} EnGoType; -enum { - /* 0 */ ENGO_70_0, - /* 1 */ ENGO_70_1, - /* 2 */ ENGO_70_2, - /* 3 */ ENGO_70_3, - /* 4 */ ENGO_70_4, - /* 5 */ ENGO_70_5, -}; +/** + * Subtype for Gorons at the racetrack (ENGO_ATHLETIC and ENGO_SPECTATOR) + */ +typedef enum EnGoRacetrackSubtype { + /* 0 */ ENGO_ATHLETIC_A, + /* 1 */ ENGO_ATHLETIC_B, + /* 2 */ ENGO_ATHLETIC_C, + /* 3 */ ENGO_ATHLETIC_D, + /* 4 */ ENGO_ATHLETIC_HAMSTRINGSIT, + /* 5 */ ENGO_ATHLETIC_HAMSTRINGSTAND, + /* 6 */ ENGO_SPECTATOR_CHEER, + /* 7 */ ENGO_SPECTATOR_SHOUTING, +} EnGoRacetrackSubtype; -typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ u8 unk_01; - /* 0x02 */ u8 unk_02; - /* 0x04 */ Vec3s unk_04; - /* 0x0A */ Vec3s unk_0A; - /* 0x10 */ Vec3f unk_10; - /* 0x1C */ Vec3f unk_1C; - /* 0x28 */ Vec3f unk_28; - /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; -} EnGoStruct; // size = 0x3C; +/** + * Subtype for Gorons outside the Goron Graveyard (ENGO_GRAVEYARD) + */ +typedef enum EnGoGraveyardSubtype { + /* 0 */ ENGO_GRAVEYARD_GRAVEMAKER, + /* 1 */ ENGO_GRAVEYARD_FROZEN, +} EnGoGraveyardSubtype; typedef struct EnGo { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnGoActionFunc actionFunc; - /* 0x18C */ EnGoActionFunc unk_18C; - /* 0x190 */ EnGoActionFunc unk_190; + /* 0x18C */ EnGoActionFunc interruptedActionFunc; + /* 0x190 */ EnGoActionFunc graveyardDialogActionFunc; /* 0x194 */ ColliderCylinder colliderCylinder; - /* 0x1E0 */ UNK_TYPE1 unk1E0[0x4C]; + /* 0x1E0 */ ColliderCylinder unusedCylinder; /* 0x22C */ ColliderSphere colliderSphere; - /* 0x284 */ Path* unk_284; - /* 0x288 */ s8 unk_288; - /* 0x289 */ s8 unk_289; - /* 0x28C */ s32 unk_28C; - /* 0x290 */ Vec3f unk_290; - /* 0x29C */ Vec3f unk_29C; - /* 0x2A8 */ Vec3s unk_2A8; - /* 0x2AE */ Vec3s unk_2AE; - /* 0x2B4 */ Vec3s jointTable[18]; - /* 0x320 */ Vec3s morphTable[18]; - /* 0x38C */ Actor* unk_38C; - /* 0x390 */ u16 unk_390; - /* 0x392 */ u16 unk_392; - /* 0x394 */ u8 cueId; - /* 0x398 */ f32 unk_398; - /* 0x39C */ f32 unk_39C; - /* 0x3A0 */ f32 unk_3A0; - /* 0x3A4 */ f32 unk_3A4; - /* 0x3A8 */ f32 unk_3A8; + /* 0x284 */ Path* gatekeeperPath; + /* 0x288 */ s8 taisouObjIndex; + /* 0x289 */ s8 hakuginDemoObjIndex; + /* 0x28C */ s32 msgScriptResumePos; + /* 0x290 */ Vec3f headPos; + /* 0x29C */ Vec3f bodyPos; + /* 0x2A8 */ Vec3s headRot; + /* 0x2AE */ Vec3s bodyRot; + /* 0x2B4 */ Vec3s jointTable[GORON_LIMB_MAX]; + /* 0x320 */ Vec3s morphTable[GORON_LIMB_MAX]; + /* 0x38C */ Actor* attentionTarget; + /* 0x390 */ u16 actionFlags; + /* 0x392 */ u16 lastTextId; + /* 0x394 */ u8 springArrivalCueId; + /* 0x398 */ f32 curAnimPlaySpeed; + /* 0x39C */ f32 iceBlockScale; + /* 0x3A0 */ f32 iceBlockAlpha; + /* 0x3A4 */ f32 scaleFactor; + /* 0x3A8 */ f32 scaleFactorPoundDistortion; /* 0x3AC */ UNK_TYPE1 unk3AC[0x2]; - /* 0x3AE */ s16 unk_3AE; - /* 0x3B0 */ s16 unk_3B0; - /* 0x3B2 */ s16 unk_3B2; - /* 0x3B4 */ s16 unk_3B4; - /* 0x3B6 */ s16 unk_3B6; + /* 0x3AE */ union { + s16 snorePhase; // Used whilst a Goron is sleeping, +0x400 at a time + s16 elapsedHangtime; // Hangtime at the top of a pound. + }; + /* 0x3B0 */ s16 headRotZ; + /* 0x3B2 */ s16 headRotY; + /* 0x3B4 */ s16 bodyRotZ; + /* 0x3B6 */ s16 bodyRotY; /* 0x3B8 */ s16 csId; - /* 0x3BA */ s16 unk_3BA; - /* 0x3BC */ s16 unk_3BC; - /* 0x3BE */ s16 unk_3BE; - /* 0x3C0 */ s16 unk_3C0; - /* 0x3C2 */ s16 unk_3C2; - /* 0x3C4 */ s16 unk_3C4; - /* 0x3C6 */ s16 unk_3C6; - /* 0x3C8 */ s16 unk_3C8[3]; - /* 0x3CE */ s16 unk_3CE[3]; - /* 0x3D4 */ s16 unk_3D4; - /* 0x3D8 */ void* unk_3D8; - /* 0x3DC */ s32 unk_3DC; + /* 0x3BA */ s16 loseAttentionTimer; + /* 0x3BC */ s16 blinkTimer; + /* 0x3BE */ s16 eyeTexIndex; + /* 0x3C0 */ s16 cutsceneState; + /* 0x3C2 */ s16 cutsceneDelayTimer; + /* 0x3C4 */ s16 gatekeeperAnimState; + /* 0x3C6 */ s16 harmlessTimer; + /* 0x3C8 */ s16 limbRotTableZ[3]; + /* 0x3CE */ s16 limbRotTableY[3]; + /* 0x3D4 */ s16 surprisePhase; + /* 0x3D8 */ MsgEventFunc msgEventFunc; + /* 0x3DC */ s32 curAnimIndex; /* 0x3E0 */ UNK_TYPE1 unk3E0[0x4]; - /* 0x3E4 */ s32 unk_3E4; - /* 0x3E8 */ s32 unk_3E8; - /* 0x3EC */ s32 unk_3EC; - /* 0x3F0 */ s32 unk_3F0; - /* 0x3F4 */ s32 unk_3F4; - /* 0x3F8 */ EnGoStruct unk_3F8[32]; + /* 0x3E4 */ s32 indexPathPoint; + /* 0x3E8 */ s32 indexEffect; + /* 0x3EC */ s32 sleepState; + /* 0x3F0 */ s32 springArrivalCutsceneActive; + /* 0x3F4 */ s32 changedText; + /* 0x3F8 */ EnGoEffect effectTable[ENGO_EFFECT_COUNT]; } EnGo; // size = 0xB78 #endif // Z_EN_GO_H 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 27c3279e6..54fe2698d 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 @@ -171,12 +171,12 @@ static AnimationInfoS sAnimationInfo[] = { { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005790, 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 }, + { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronStandingHandTappingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronSleepyAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, @@ -235,7 +235,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) { case EN_S_GORO_TYPE_SHRINE_WINTER_A: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_02)) { switch (this->textId) { @@ -302,7 +302,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { break; case EN_S_GORO_TYPE_SHRINE_WINTER_B: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_40)) { switch (this->textId) { @@ -367,7 +367,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { break; case EN_S_GORO_TYPE_SHRINE_WINTER_C: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_02)) { switch (this->textId) { @@ -771,7 +771,7 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE1); } } - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_SUPPRESS_SNORE; } @@ -842,7 +842,7 @@ s32 EnSGoro_CheckGKBehavior(EnSGoro* this, PlayState* play) { return false; } if ((!(this->actionFlags & EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED)) && - ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) { + ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED; this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP; @@ -1026,7 +1026,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) { this->actionFlags = 0; if (EN_S_GORO_OFTYPE_WSHRINE) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED; this->actionFlags |= EN_S_GORO_ACTIONFLAG_EYESOPEN; this->animInfoIndex = EN_S_GORO_ANIM_SHIVER_A; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 088d66ce9..4c65de06c 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -9675,76 +9675,76 @@ 0x80A10368:("EnSob1_ZoraShopkeeper_Draw",), 0x80A104E4:("EnSob1_GoronShopkeeper_Draw",), 0x80A10608:("EnSob1_BombShopkeeper_Draw",), - 0x80A10FD0:("func_80A10FD0",), - 0x80A11144:("func_80A11144",), - 0x80A1143C:("func_80A1143C",), - 0x80A115B4:("func_80A115B4",), - 0x80A118F8:("func_80A118F8",), - 0x80A11BF8:("func_80A11BF8",), - 0x80A11EC0:("func_80A11EC0",), - 0x80A1203C:("func_80A1203C",), - 0x80A1213C:("func_80A1213C",), - 0x80A121F4:("func_80A121F4",), - 0x80A1222C:("func_80A1222C",), - 0x80A122EC:("func_80A122EC",), - 0x80A123A0:("func_80A123A0",), - 0x80A124A0:("func_80A124A0",), - 0x80A124FC:("func_80A124FC",), - 0x80A125BC:("func_80A125BC",), - 0x80A12660:("func_80A12660",), - 0x80A126BC:("func_80A126BC",), - 0x80A12774:("func_80A12774",), - 0x80A12868:("func_80A12868",), - 0x80A12954:("func_80A12954",), - 0x80A12A64:("func_80A12A64",), - 0x80A12B78:("func_80A12B78",), - 0x80A12C48:("func_80A12C48",), - 0x80A12D6C:("func_80A12D6C",), - 0x80A12DF4:("func_80A12DF4",), - 0x80A12E80:("func_80A12E80",), - 0x80A12FE8:("func_80A12FE8",), - 0x80A131F8:("func_80A131F8",), - 0x80A132C8:("func_80A132C8",), - 0x80A133A8:("func_80A133A8",), - 0x80A13400:("func_80A13400",), - 0x80A134B0:("func_80A134B0",), - 0x80A134F4:("func_80A134F4",), - 0x80A13564:("func_80A13564",), + 0x80A10FD0:("EnGo_InitSteam",), + 0x80A11144:("EnGo_DrawSteam",), + 0x80A1143C:("EnGo_InitDust",), + 0x80A115B4:("EnGo_DrawDust",), + 0x80A118F8:("EnGo_InitSnow",), + 0x80A11BF8:("EnGo_UpdateSnow",), + 0x80A11EC0:("EnGo_DrawSnow",), + 0x80A1203C:("EnGo_UpdateEffects",), + 0x80A1213C:("EnGo_DrawEffects",), + 0x80A121F4:("EnGo_CanSnowballHurtPlayer",), + 0x80A1222C:("EnGo_IsFallingAsleep",), + 0x80A122EC:("EnGo_UpdateFocus",), + 0x80A123A0:("EnGo_UpdateSnowballCollider",), + 0x80A124A0:("EnGo_UpdateMedigoronCollider",), + 0x80A124FC:("EnGo_UpdateRolledUpCollider",), + 0x80A125BC:("EnGo_UpdateFrozenCollider",), + 0x80A12660:("EnGo_UpdateStandingCollider",), + 0x80A126BC:("EnGo_UpdateCollider",), + 0x80A12774:("EnGo_UpdateTalking",), + 0x80A12868:("EnGo_DetectCollisions",), + 0x80A12954:("EnGo_UpdateSpringArrivalCutscene",), + 0x80A12A64:("EnGo_UpdateAnimationToCurrent",), + 0x80A12B78:("EnGo_UpdateSfx",), + 0x80A12C48:("EnGo_ChangeAnim",), + 0x80A12D6C:("EnGo_UpdateEyes",), + 0x80A12DF4:("EnGo_UpdateShiverSurprisedAnimation",), + 0x80A12E80:("EnGo_UpdateGraveyardAttentionTargetAndReactions",), + 0x80A12FE8:("EnGo_UpdateRotationToTarget",), + 0x80A131F8:("EnGo_UpdateAttentionTargetAndReactions",), + 0x80A132C8:("EnGo_GravemakerIdle",), + 0x80A133A8:("EnGo_FrozenIdle",), + 0x80A13400:("EnGo_FindGravemaker",), + 0x80A134B0:("EnGo_UpdateMedigoronColliderRadius",), + 0x80A134F4:("EnGo_ChangeCutscene",), + 0x80A13564:("EnGo_HandleGatekeeperPoundCutscene",), 0x80A136B8:("EnGo_RequestQuake",), - 0x80A13728:("func_80A13728",), - 0x80A137C0:("func_80A137C0",), - 0x80A139E4:("func_80A139E4",), - 0x80A13B1C:("func_80A13B1C",), - 0x80A13E80:("func_80A13E80",), - 0x80A14018:("func_80A14018",), - 0x80A14104:("func_80A14104",), - 0x80A141D4:("func_80A141D4",), - 0x80A1428C:("func_80A1428C",), - 0x80A14324:("func_80A14324",), - 0x80A143A8:("func_80A143A8",), - 0x80A14430:("func_80A14430",), - 0x80A1449C:("func_80A1449C",), - 0x80A144F4:("func_80A144F4",), - 0x80A145AC:("func_80A145AC",), - 0x80A14668:("func_80A14668",), - 0x80A146CC:("func_80A146CC",), - 0x80A14798:("func_80A14798",), - 0x80A149B0:("func_80A149B0",), - 0x80A14B30:("func_80A14B30",), - 0x80A14E14:("func_80A14E14",), - 0x80A14E74:("func_80A14E74",), - 0x80A14EB0:("func_80A14EB0",), - 0x80A14FC8:("func_80A14FC8",), - 0x80A153FC:("func_80A153FC",), - 0x80A15684:("func_80A15684",), - 0x80A157C4:("func_80A157C4",), + 0x80A13728:("EnGo_CreateGatekeeperPoundEffects",), + 0x80A137C0:("EnGo_DrawIceBlockWhenFrozen",), + 0x80A139E4:("EnGo_MakeSteam",), + 0x80A13B1C:("EnGo_HandleOpenShrineCutscene",), + 0x80A13E80:("EnGo_HandleGivePowderKegCutscene",), + 0x80A14018:("EnGo_ChangeToStretchingAnimation",), + 0x80A14104:("EnGo_ChangeToSpectatingAnimation",), + 0x80A141D4:("EnGo_ChangeToFrozenAnimation",), + 0x80A1428C:("EnGo_ChangeToSnowballAnimation",), + 0x80A14324:("EnGo_ChangeToCoveringEarsAnimation",), + 0x80A143A8:("EnGo_ChangeToShiveringAnimation",), + 0x80A14430:("EnGo_SetupAthletic",), + 0x80A1449C:("EnGo_SetupSpectator",), + 0x80A144F4:("EnGo_SetupGatekeeper",), + 0x80A145AC:("EnGo_SetupGraveyardGoron",), + 0x80A14668:("EnGo_SetupShrineGoron",), + 0x80A146CC:("EnGo_SetupMedigoron",), + 0x80A14798:("EnGo_SetupInitialAction",), + 0x80A149B0:("EnGo_Idle",), + 0x80A14B30:("EnGo_Sleep",), + 0x80A14E14:("EnGo_Frozen",), + 0x80A14E74:("EnGo_AwaitThaw",), + 0x80A14EB0:("EnGo_Thaw",), + 0x80A14FC8:("EnGo_HandleSpringArrivalCutscene",), + 0x80A153FC:("EnGo_Snowball",), + 0x80A15684:("EnGo_GetMsgEventScript",), + 0x80A157C4:("EnGo_Talk",), 0x80A1590C:("EnGo_Init",), 0x80A15960:("EnGo_Destroy",), 0x80A159B0:("EnGo_Update",), - 0x80A15B80:("func_80A15B80",), + 0x80A15B80:("EnGo_Draw_NoSkeleton",), 0x80A15D04:("EnGo_OverrideLimbDraw",), 0x80A15E38:("EnGo_TransfromLimbDraw",), - 0x80A15FEC:("func_80A15FEC",), + 0x80A15FEC:("EnGo_Draw",), 0x80A16D40:("EnRaf_ClearPixelTeeth",), 0x80A16D6C:("EnRaf_ClearPixelPetal",), 0x80A16D90:("EnRaf_Init",), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index b96696b46..28b64d2fa 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -155,7 +155,7 @@ weekEventReg = { (18 << 8) | 0x10: "WEEKEVENTREG_18_10", (18 << 8) | 0x20: "WEEKEVENTREG_18_20", (18 << 8) | 0x40: "WEEKEVENTREG_18_40", - (18 << 8) | 0x80: "WEEKEVENTREG_18_80", + (18 << 8) | 0x80: "WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES", (19 << 8) | 0x01: "WEEKEVENTREG_19_01", (19 << 8) | 0x02: "WEEKEVENTREG_19_02", (19 << 8) | 0x04: "WEEKEVENTREG_19_04", @@ -174,15 +174,15 @@ weekEventReg = { (20 << 8) | 0x80: "WEEKEVENTREG_20_80", (21 << 8) | 0x01: "WEEKEVENTREG_21_01", (21 << 8) | 0x02: "WEEKEVENTREG_21_02", - (21 << 8) | 0x04: "WEEKEVENTREG_21_04", - (21 << 8) | 0x08: "WEEKEVENTREG_21_08", + (21 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON", + (21 << 8) | 0x08: "WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON", (21 << 8) | 0x10: "WEEKEVENTREG_21_10", (21 << 8) | 0x20: "WEEKEVENTREG_21_20", (21 << 8) | 0x40: "WEEKEVENTREG_21_40", (21 << 8) | 0x80: "WEEKEVENTREG_21_80", (22 << 8) | 0x01: "WEEKEVENTREG_22_01", (22 << 8) | 0x02: "WEEKEVENTREG_22_02", - (22 << 8) | 0x04: "WEEKEVENTREG_22_04", + (22 << 8) | 0x04: "WEEKEVENTREG_CALMED_GORON_ELDERS_SON", (22 << 8) | 0x08: "WEEKEVENTREG_22_08", (22 << 8) | 0x10: "WEEKEVENTREG_22_10", (22 << 8) | 0x20: "WEEKEVENTREG_22_20", @@ -714,11 +714,11 @@ weekEventReg = { (88 << 8) | 0x08: "WEEKEVENTREG_88_08", (88 << 8) | 0x10: "WEEKEVENTREG_88_10", (88 << 8) | 0x20: "WEEKEVENTREG_88_20", - (88 << 8) | 0x40: "WEEKEVENTREG_88_40", - (88 << 8) | 0x80: "WEEKEVENTREG_88_80", - (89 << 8) | 0x01: "WEEKEVENTREG_89_01", - (89 << 8) | 0x02: "WEEKEVENTREG_89_02", - (89 << 8) | 0x04: "WEEKEVENTREG_89_04", + (88 << 8) | 0x40: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE", + (88 << 8) | 0x80: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN", + (89 << 8) | 0x01: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU", + (89 << 8) | 0x02: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA", + (89 << 8) | 0x04: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON", (89 << 8) | 0x08: "WEEKEVENTREG_89_08", (89 << 8) | 0x10: "WEEKEVENTREG_89_10", (89 << 8) | 0x20: "WEEKEVENTREG_89_20", From 0261dc0a5c99ab87fed760c0cb81d1f7c4f9dc3b Mon Sep 17 00:00:00 2001 From: TrulyNaN <52424023+TrulyNaN@users.noreply.github.com> Date: Fri, 2 Jun 2023 00:25:03 -0400 Subject: [PATCH 40/51] ovl_Bg_F40_Swlift OK and documented. obj_f40_obj documented. (#1171) * Ported ovl_Bg_F40_Swlift to most recent zeldaret/master. * Ran formatter. * Attempt at fixing formatter problem. * Applied PR changes suggestions and added authors Co-authored-by: petrie911 Co-authored-by: Isghj5 Co-authored-by: Tom-Overton Co-authored-by: Derek-Hensley * More PR fixes. Put object_f40_obj unused descriptor as comments. Added another author. Co-authored-by: AngheloAlf * Fixed some effect of handling merge conflicts. Some early returns added and renames in object_f40_obj.xml --------- Co-authored-by: petrie911 Co-authored-by: Isghj5 Co-authored-by: Tom-Overton Co-authored-by: Derek-Hensley Co-authored-by: AngheloAlf --- assets/xml/objects/object_f40_obj.xml | 34 ++++--- spec | 4 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 4 +- .../actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c | 4 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.c | 91 ++++++++++++++++--- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.h | 7 +- 6 files changed, 109 insertions(+), 35 deletions(-) diff --git a/assets/xml/objects/object_f40_obj.xml b/assets/xml/objects/object_f40_obj.xml index 17e7210de..636a80682 100644 --- a/assets/xml/objects/object_f40_obj.xml +++ b/assets/xml/objects/object_f40_obj.xml @@ -1,17 +1,25 @@  + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/spec b/spec index a9d627634..12fce05ce 100644 --- a/spec +++ b/spec @@ -1637,9 +1637,7 @@ beginseg name "ovl_Bg_F40_Swlift" compress include "build/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.o" - include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.data.o" - include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.bss.o" - include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.reloc.o" + include "build/src/overlays/actors/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift_reloc.o" endseg beginseg 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 be1958cb4..134e7227a 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 @@ -229,7 +229,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004640); + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerBlockCol); if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; @@ -373,5 +373,5 @@ void BgF40Block_Update(Actor* thisx, PlayState* play) { } void BgF40Block_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_f40_obj_DL_0043D0); + Gfx_DrawDListOpa(play, gStoneTowerBlockDL); } diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c index 075f38607..2c9919728 100644 --- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c +++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c @@ -42,7 +42,7 @@ void BgF40Flift_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004240); + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerTempleSquareElevatorCol); this->dyna.actor.params = 1; this->actionFunc = func_808D75F0; } @@ -91,5 +91,5 @@ void BgF40Flift_Update(Actor* thisx, PlayState* play) { } void BgF40Flift_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_f40_obj_DL_004038); + Gfx_DrawDListOpa(play, gStoneTowerTempleSquareElevatorDL); } 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 97fd3f068..bf6244efe 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 @@ -5,6 +5,7 @@ */ #include "z_bg_f40_swlift.h" +#include "objects/object_f40_obj/object_f40_obj.h" #define FLAGS (ACTOR_FLAG_10) @@ -12,11 +13,13 @@ void BgF40Swlift_Init(Actor* thisx, PlayState* play); void BgF40Swlift_Destroy(Actor* thisx, PlayState* play); -void BgF40Swlift_Update(Actor* thisx, PlayState* play); +void BgF40Swlift_Update(Actor* thisx, PlayState* play2); void BgF40Swlift_Draw(Actor* thisx, PlayState* play); -#if 0 -ActorInit Bg_F40_Swlift_InitVars = { +static s32 sSwitchFlags[4] = { 0xFF, 0xFF, 0xFF, 0xFF }; +static s32 sHeights[4]; + +const ActorInit Bg_F40_Swlift_InitVars = { ACTOR_BG_F40_SWLIFT, ACTORCAT_BG, FLAGS, @@ -28,24 +31,86 @@ ActorInit Bg_F40_Swlift_InitVars = { (ActorFunc)BgF40Swlift_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_8096F540[] = { +static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneScale, 550, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 5000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; -#endif +void BgF40Swlift_Init(Actor* thisx, PlayState* play) { + BgF40Swlift* this = THIS; + s32 index; + s32 pad; -extern InitChainEntry D_8096F540[]; + Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); + index = BG_F40_SWLIFT_GET_INDEX(thisx); + if ((index < 0) || (index >= 5)) { //! @bug An index greater than 3 will cause an out of bounds array access. + Actor_Kill(&this->dyna.actor); + return; + } -extern UNK_TYPE D_06003B08; -extern UNK_TYPE D_06003E80; + sHeights[index] = this->dyna.actor.world.pos.y; + sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCHFLAG(thisx); + if (index != 0) { + Actor_Kill(&this->dyna.actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Init.s") + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerVerticallyOscillatingPlatformCol); + this->dyna.actor.params = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Destroy.s") +void BgF40Swlift_Destroy(Actor* thisx, PlayState* play) { + BgF40Swlift* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Update.s") + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Draw.s") +void BgF40Swlift_Update(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + BgF40Swlift* this = THIS; + s32 i; + + for (i = 1; i < ARRAY_COUNT(sSwitchFlags); i++) { + if ((sSwitchFlags[i] == 0xFF) || !Flags_GetSwitch(play, sSwitchFlags[i])) { + break; + } + } + + i--; + if (i != this->dyna.actor.params) { + f32 heightOffset; + + this->dyna.actor.params = -1; + heightOffset = (sHeights[i] - this->dyna.actor.world.pos.y) * 0.1f; + if (heightOffset > 0.0f) { + heightOffset = CLAMP(heightOffset, 0.5f, 15.0f); + } else { + heightOffset = CLAMP(heightOffset, -15.0f, -0.5f); + } + + if (Math_StepToF(&this->dyna.actor.speed, heightOffset, 1.0f) && (fabsf(heightOffset) <= 0.5f)) { + if (Math_StepToF(&this->dyna.actor.world.pos.y, sHeights[i], fabsf(this->dyna.actor.speed))) { + this->dyna.actor.params = i; + this->timer = 48; + this->dyna.actor.speed = 0.0f; + } + } else { + this->dyna.actor.world.pos.y += this->dyna.actor.speed; + } + } else { + if (this->timer == 0) { + this->timer = 48; + } + this->timer--; + this->dyna.actor.world.pos.y = + sHeights[this->dyna.actor.params] + (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f); + } +} + +void BgF40Swlift_Draw(Actor* thisx, PlayState* play) { + BgF40Swlift* this = THIS; + + Gfx_DrawDListOpa(play, gStoneTowerVerticallyOscillatingPlatformDL); +} 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 a687fc642..e377b73e0 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,13 +1,16 @@ #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_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) + #include "global.h" struct BgF40Swlift; typedef struct BgF40Swlift { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x1C]; + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ s32 timer; } BgF40Swlift; // size = 0x160 #endif // Z_BG_F40_SWLIFT_H From 4b25b4d8e655c5280fd42e5c99f3971ae9b5326b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 2 Jun 2023 14:39:39 +1000 Subject: [PATCH 41/51] Misc Cleanup 2 (#1260) * more misc cleanup * PR suggestions * more abs alt, csId * more cleanup, can't help it * fix incorrect sq * more fixes --- src/boot_O2/padutils.c | 9 +- src/boot_O2_g3/fault.c | 2 +- src/boot_O2_g3/fault_drawer.c | 10 +- src/code/sched.c | 2 +- src/code/z_actor.c | 22 ++-- src/code/z_bgcheck.c | 6 +- src/code/z_camera.c | 5 +- src/code/z_collision_btltbls.c | 2 +- src/code/z_eff_blure.c | 68 ++++++------ src/code/z_effect.c | 66 ++++++------ src/code/z_eventmgr.c | 12 +-- src/code/z_parameter.c | 1 - src/code/z_scene.c | 2 +- src/code/z_scene_proc.c | 2 +- src/code/z_snap.c | 20 ++-- src/code/z_sram_NES.c | 4 +- src/libultra/gu/position.c | 8 +- src/libultra/io/contpfs.c | 3 +- src/libultra/io/pfschecker.c | 6 +- src/libultra/libc/ldiv.c | 4 +- src/libultra/libc/ll.c | 2 +- src/libultra/rmon/xldtob.c | 2 +- src/libultra/rmon/xprintf.c | 2 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c | 2 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 5 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 5 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 6 ++ src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 9 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 4 +- src/overlays/actors/ovl_En_Dnb/z_en_dnb.c | 53 +++++---- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 6 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 11 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 7 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 54 ++++++---- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 91 +++++++++++++--- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 31 +++--- src/overlays/actors/ovl_En_In/z_en_in.c | 2 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 4 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 44 +++++--- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 97 ++++++++++++----- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 3 + .../actors/ovl_En_Pamera/z_en_pamera.c | 3 - src/overlays/actors/ovl_En_Sda/z_en_sda.c | 5 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 34 +++--- src/overlays/actors/ovl_En_Talk/z_en_talk.c | 4 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 35 +++--- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 43 ++++++-- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 5 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 18 +++- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 55 +++++----- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 101 +++++++++--------- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 13 +-- .../actors/ovl_Obj_Kibako2/z_obj_kibako2.c | 2 +- .../actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 2 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 2 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 29 ++--- .../actors/ovl_player_actor/z_player.c | 4 +- 62 files changed, 636 insertions(+), 423 deletions(-) diff --git a/src/boot_O2/padutils.c b/src/boot_O2/padutils.c index 95f1dfa3b..accd09e11 100644 --- a/src/boot_O2/padutils.c +++ b/src/boot_O2/padutils.c @@ -66,11 +66,10 @@ s8 PadUtils_GetRelY(Input* input) { } void PadUtils_UpdateRelXY(Input* input) { - s32 curX, curY; - s32 relX, relY; - - curX = PadUtils_GetCurX(input); - curY = PadUtils_GetCurY(input); + s32 curX = PadUtils_GetCurX(input); + s32 curY = PadUtils_GetCurY(input); + s32 relX; + s32 relY; if (curX > 7) { relX = (curX < 0x43) ? curX - 7 : 0x43 - 7; diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 6e1656170..eb190859e 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -447,7 +447,7 @@ void osSyncPrintfThreadContext(OSThread* t) { OSThread* Fault_FindFaultedThread() { OSThread* iter = __osGetActiveQueue(); while (iter->priority != -1) { - if (iter->priority > 0 && iter->priority < 0x7F && (iter->flags & 3)) { + if ((iter->priority > 0) && (iter->priority < 0x7F) && (iter->flags & 3)) { return iter; } iter = iter->tlnext; diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot_O2_g3/fault_drawer.c index 8efc930ec..f694be8aa 100644 --- a/src/boot_O2_g3/fault_drawer.c +++ b/src/boot_O2_g3/fault_drawer.c @@ -57,7 +57,7 @@ void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 col s32 xSize = xEnd - xStart + 1; s32 ySize = yEnd - yStart + 1; - if (xDiff > 0 && yDiff > 0) { + if ((xDiff > 0) && (yDiff > 0)) { if (xDiff < xSize) { xSize = xDiff; } @@ -127,11 +127,11 @@ void FaultDrawer_UpdatePrintColor() { if (sFaultDrawContext->osSyncPrintfEnabled) { osSyncPrintf(VT_RST); idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->foreColor); - if (idx >= 0 && idx < 8) { + if ((idx >= 0) && (idx < 8)) { osSyncPrintf(VT_SGR("3%d"), idx); } idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->backColor); - if (idx >= 0 && idx < 8) { + if ((idx >= 0) && (idx < 8)) { osSyncPrintf(VT_SGR("4%d"), idx); } } @@ -180,7 +180,7 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) { for (; count != 0; count--, str++) { if (sFaultDrawContext->escCode) { sFaultDrawContext->escCode = false; - if (*str >= '1' && *str <= '9') { + if ((*str >= '1') && (*str <= '9')) { FaultDrawer_SetForeColor(sFaultDrawContext->printColors[*str - '0']); } } else { @@ -192,9 +192,11 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) { sFaultDrawContext->cursorX = sFaultDrawContext->w; break; + case '\x1A': sFaultDrawContext->escCode = true; break; + default: if (sFaultDrawContext->osSyncPrintfEnabled) { osSyncPrintf("%c", *str); diff --git a/src/code/sched.c b/src/code/sched.c index c2630677c..9e2016833 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -396,7 +396,7 @@ void Sched_HandleRetrace(SchedContext* sched) { if (sched->curBuf->updateRate2 > 0) { sched->curBuf->updateRate2--; } - if (sched->curBuf->updateRate2 <= 0 && sched->pendingSwapBuf1 != NULL) { + if ((sched->curBuf->updateRate2 <= 0) && (sched->pendingSwapBuf1 != NULL)) { Sched_RetraceUpdateFramebuffer(sched, sched->pendingSwapBuf1); } } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index b5a24cfac..c7e2c4574 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -695,7 +695,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS * Tests if current scene switch flag is set. */ s32 Flags_GetSwitch(PlayState* play, s32 flag) { - if (flag >= 0 && flag < 0x80) { + if ((flag >= 0) && (flag < 0x80)) { return play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F)); } return 0; @@ -705,7 +705,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) { * Sets current scene switch flag. */ void Flags_SetSwitch(PlayState* play, s32 flag) { - if (flag >= 0 && flag < 0x80) { + if ((flag >= 0) && (flag < 0x80)) { play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F); } } @@ -714,7 +714,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) { * Unsets current scene switch flag. */ void Flags_UnsetSwitch(PlayState* play, s32 flag) { - if (flag >= 0 && flag < 0x80) { + if ((flag >= 0) && (flag < 0x80)) { play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] &= ~(1 << (flag & 0x1F)); } } @@ -793,7 +793,7 @@ void Flags_UnsetClearTemp(PlayState* play, s32 roomNumber) { * Tests if current scene collectible flag is set. */ s32 Flags_GetCollectible(PlayState* play, s32 flag) { - if (flag > 0 && flag < 0x80) { + if ((flag > 0) && (flag < 0x80)) { return play->actorCtx.sceneFlags.collectible[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F)); } return 0; @@ -803,7 +803,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) { * Sets current scene collectible flag. */ void Flags_SetCollectible(PlayState* play, s32 flag) { - if (flag > 0 && flag < 0x80) { + if ((flag > 0) && (flag < 0x80)) { play->actorCtx.sceneFlags.collectible[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F); } } @@ -3268,12 +3268,12 @@ void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) { for (i = 0; i < numTransitionActors; transitionActorList++, i++) { if (transitionActorList->id >= 0) { - if ((transitionActorList->sides[0].room >= 0 && - (play->roomCtx.curRoom.num == transitionActorList->sides[0].room || - play->roomCtx.prevRoom.num == transitionActorList->sides[0].room)) || - (transitionActorList->sides[1].room >= 0 && - (play->roomCtx.curRoom.num == transitionActorList->sides[1].room || - play->roomCtx.prevRoom.num == transitionActorList->sides[1].room))) { + if (((transitionActorList->sides[0].room >= 0) && + ((play->roomCtx.curRoom.num == transitionActorList->sides[0].room) || + (play->roomCtx.prevRoom.num == transitionActorList->sides[0].room))) || + ((transitionActorList->sides[1].room >= 0) && + ((play->roomCtx.curRoom.num == transitionActorList->sides[1].room) || + (play->roomCtx.prevRoom.num == transitionActorList->sides[1].room)))) { s16 rotY = DEG_TO_BINANG((transitionActorList->rotY >> 7) & 0x1FF); if (Actor_SpawnAsChildAndCutscene(actorCtx, play, transitionActorList->id & 0x1FFF, diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 2fc1852ab..e30dec5d5 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1920,12 +1920,14 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul s32 bgId; f32 temp_f0_2; f32 f32temp; - f32 nx2, nz2; + f32 nx2; + f32 nz2; Vec3f checkLineNext; Vec3f checkLinePrev; f32 n2XZDist; f32 n3XZDist; - f32 nx3, nz3; + f32 nx3; + f32 nz3; s32 bccFlags; Vec3f posIntersect2; s32 bgId2; diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 91a1d6b06..7fac2a2b2 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -6777,8 +6777,9 @@ s32 Camera_Special5(Camera* camera) { spA4 = BINANG_SUB(focalActorPosRot->rot.y, sp6C.yaw); sp74.r = roData->eyeDist; rand = Rand_ZeroOne(); - sp74.yaw = BINANG_ROT180(focalActorPosRot->rot.y) + - (s16)(spA4 < 0 ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f))); + sp74.yaw = + BINANG_ROT180(focalActorPosRot->rot.y) + + (s16)((spA4 < 0) ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f))); sp74.pitch = roData->pitch; OLib_AddVecGeoToVec3f(eyeNext, &spA8.pos, &sp74); *eye = *eyeNext; diff --git a/src/code/z_collision_btltbls.c b/src/code/z_collision_btltbls.c index c9f014f4f..36528e467 100644 --- a/src/code/z_collision_btltbls.c +++ b/src/code/z_collision_btltbls.c @@ -790,7 +790,7 @@ DamageTable sDamageTablePresets[] = { * is out of range. */ DamageTable* DamageTable_Get(s32 index) { - if (index < 0 || index > ARRAY_COUNT(sDamageTablePresets) - 1) { + if ((index < 0) || (index >= ARRAY_COUNT(sDamageTablePresets))) { return NULL; } diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index f25273279..370ca9481 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -753,7 +753,7 @@ void EffectBlure_DrawSimpleVertices(GraphicsContext* gfxCtx, EffectBlure* this, j = 0; - for (i = 0; i < this->numElements - 1; i++) { + for (i = 0; i < this->numElements - 1; i++, j += 4) { if (this->drawMode == 1) { alphaRatio = (f32)this->elements[i].timer / (f32)this->elemDuration; gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x80, this->altPrimColor.r, this->altPrimColor.g, @@ -761,45 +761,43 @@ void EffectBlure_DrawSimpleVertices(GraphicsContext* gfxCtx, EffectBlure* this, gDPPipeSync(POLY_XLU_DISP++); } - if (1) {} // Necessary to match - gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0); gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0); - if (this->flags & 4) { - sp1B0.x = ((f32)vtx[4 * i + 0].v.ob[0] + (f32)vtx[4 * i + 1].v.ob[0]) * 0.5f; - sp1B0.y = ((f32)vtx[4 * i + 0].v.ob[1] + (f32)vtx[4 * i + 1].v.ob[1]) * 0.5f; - sp1B0.z = ((f32)vtx[4 * i + 0].v.ob[2] + (f32)vtx[4 * i + 1].v.ob[2]) * 0.5f; - sp1A4.x = ((f32)vtx[4 * i + 2].v.ob[0] + (f32)vtx[4 * i + 3].v.ob[0]) * 0.5f; - sp1A4.y = ((f32)vtx[4 * i + 2].v.ob[1] + (f32)vtx[4 * i + 3].v.ob[1]) * 0.5f; - sp1A4.z = ((f32)vtx[4 * i + 2].v.ob[2] + (f32)vtx[4 * i + 3].v.ob[2]) * 0.5f; - - Math_Vec3f_Diff(&sp1A4, &sp1B0, &sp198); - scale = sqrtf(SQXYZ(sp198)); - - if (fabsf(scale) > 0.0005f) { - scale = 1.0f / scale; - Math_Vec3f_Scale(&sp198, scale); - - SkinMatrix_SetTranslate(&sp154, sp1B0.x, sp1B0.y, sp1B0.z); - SkinMatrix_SetRotateAroundVec(&sp114, 0x3FFF, sp198.x, sp198.y, sp198.z); - SkinMatrix_MtxFMtxFMult(&sp154, &sp114, &spD4); - SkinMatrix_SetTranslate(&sp154, -sp1B0.x, -sp1B0.y, -sp1B0.z); - SkinMatrix_MtxFMtxFMult(&spD4, &sp154, &sp94); - - mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp94); - if (mtx == NULL) { - break; - } - - gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0); - gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0); - gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - } + if (!(this->flags & 4)) { + continue; } - j += 4; + sp1B0.x = ((f32)vtx[4 * i + 0].v.ob[0] + (f32)vtx[4 * i + 1].v.ob[0]) / 2.0f; + sp1B0.y = ((f32)vtx[4 * i + 0].v.ob[1] + (f32)vtx[4 * i + 1].v.ob[1]) / 2.0f; + sp1B0.z = ((f32)vtx[4 * i + 0].v.ob[2] + (f32)vtx[4 * i + 1].v.ob[2]) / 2.0f; + sp1A4.x = ((f32)vtx[4 * i + 2].v.ob[0] + (f32)vtx[4 * i + 3].v.ob[0]) / 2.0f; + sp1A4.y = ((f32)vtx[4 * i + 2].v.ob[1] + (f32)vtx[4 * i + 3].v.ob[1]) / 2.0f; + sp1A4.z = ((f32)vtx[4 * i + 2].v.ob[2] + (f32)vtx[4 * i + 3].v.ob[2]) / 2.0f; + + Math_Vec3f_Diff(&sp1A4, &sp1B0, &sp198); + scale = sqrtf(SQXYZ(sp198)); + + if (fabsf(scale) > 0.0005f) { + scale = 1.0f / scale; + Math_Vec3f_Scale(&sp198, scale); + + SkinMatrix_SetTranslate(&sp154, sp1B0.x, sp1B0.y, sp1B0.z); + SkinMatrix_SetRotateAroundVec(&sp114, 0x3FFF, sp198.x, sp198.y, sp198.z); + SkinMatrix_MtxFMtxFMult(&sp154, &sp114, &spD4); + SkinMatrix_SetTranslate(&sp154, -sp1B0.x, -sp1B0.y, -sp1B0.z); + SkinMatrix_MtxFMtxFMult(&spD4, &sp154, &sp94); + + mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp94); + if (mtx == NULL) { + break; + } + + gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0); + gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0); + gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } } } diff --git a/src/code/z_effect.c b/src/code/z_effect.c index b4a76380e..60a98c4d9 100644 --- a/src/code/z_effect.c +++ b/src/code/z_effect.c @@ -187,33 +187,31 @@ void Effect_DrawAll(GraphicsContext* gfxCtx) { s32 i; for (i = 0; i < SPARK_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.sparks[i].status.active) { - sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx); + if (!sEffectContext.sparks[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx); } for (i = 0; i < BLURE_COUNT; i++) { - if (1) { - if (gfxCtx) {} - } // necessary to match - if (sEffectContext.blures[i].status.active) { - sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx); + if (!sEffectContext.blures[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx); } for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.shieldParticles[i].status.active) { - sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx); + if (!sEffectContext.shieldParticles[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx); } - if (1) {} // necessary to match for (i = 0; i < TIRE_MARK_COUNT; i++) { - if (sEffectContext.tireMarks[i].status.active) { - sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx); + if (!sEffectContext.tireMarks[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx); } } @@ -221,38 +219,38 @@ void Effect_UpdateAll(PlayState* play) { s32 i; for (i = 0; i < SPARK_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.sparks[i].status.active) { - if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) { - Effect_Destroy(play, i); - } + if (!sEffectContext.sparks[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) { + Effect_Destroy(play, i); } } for (i = 0; i < BLURE_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.blures[i].status.active) { - if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) { - Effect_Destroy(play, i + SPARK_COUNT); - } + if (!sEffectContext.blures[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) { + Effect_Destroy(play, i + SPARK_COUNT); } } for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.shieldParticles[i].status.active) { - if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) { - Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT); - } + if (!sEffectContext.shieldParticles[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) { + Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT); } } for (i = 0; i < TIRE_MARK_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.tireMarks[i].status.active) { - if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) { - Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT); - } + if (!sEffectContext.tireMarks[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) { + Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT); } } } diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index aec6fdbb0..e3defb402 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -371,7 +371,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) { Camera* retCam; s32 csType = 0; - if ((csId < 0) || (sCutsceneMgr.csId != CS_ID_NONE)) { + if ((csId <= CS_ID_NONE) || (sCutsceneMgr.csId != CS_ID_NONE)) { return csId; } @@ -437,7 +437,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) { s16 CutsceneManager_Stop(s16 csId) { ActorCutscene* csEntry; - if (csId < 0) { + if (csId <= CS_ID_NONE) { return csId; } @@ -468,28 +468,28 @@ ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId) { } s16 CutsceneManager_GetAdditionalCsId(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return CS_ID_NONE; } return CutsceneManager_GetCutsceneEntryImpl(csId)->additionalCsId; } s16 CutsceneManager_GetLength(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return -1; } return CutsceneManager_GetCutsceneEntryImpl(csId)->length; } s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return -1; } return CutsceneManager_GetCutsceneEntryImpl(csId)->scriptIndex; } s16 CutsceneManager_GetCutsceneCustomValue(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return -1; } return CutsceneManager_GetCutsceneEntryImpl(csId)->customValue; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 86b6d0107..25e6a26a5 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -3867,7 +3867,6 @@ void Interface_DrawItemButtons(PlayState* play) { OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[0], D_801BF9DC[0], D_801BFAF4[0], D_801BFAF4[0], D_801BF9E4[0] * 2, D_801BF9E4[0] * 2, 100, 255, 120, interfaceCtx->bAlpha); - if (1) {} gDPPipeSync(OVERLAY_DISP++); // C-Left Button Color & Texture diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 26dc39507..623db6b24 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -89,7 +89,7 @@ s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) { s32 i; for (i = 0; i < objectCtx->num; i++) { - if ((objectCtx->status[i].id < 0 ? -objectCtx->status[i].id : objectCtx->status[i].id) == objectId) { + if (ABS_ALT(objectCtx->status[i].id) == objectId) { return i; } } diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c index c899b4d83..b4597a5c2 100644 --- a/src/code/z_scene_proc.c +++ b/src/code/z_scene_proc.c @@ -400,7 +400,7 @@ void AnimatedMat_DrawMain(PlayState* play, AnimatedMaterial* matAnim, f32 alphaR if ((matAnim != NULL) && (matAnim->segment != 0)) { do { segment = matAnim->segment; - segmentAbs = ((segment < 0) ? -segment : segment) + 7; + segmentAbs = ABS_ALT(segment) + 7; matAnimDrawHandlers[matAnim->type](play, segmentAbs, Lib_SegmentedToVirtual(matAnim->params)); matAnim++; } while (segment >= 0); diff --git a/src/code/z_snap.c b/src/code/z_snap.c index 9361cc1e0..3524fe3ab 100644 --- a/src/code/z_snap.c +++ b/src/code/z_snap.c @@ -42,9 +42,6 @@ s32 Snap_RecordPictographedActors(PlayState* play) { break; } - //! FAKE: - if (1) {} - // Actors which may be pictographed anywhere switch (actor->id) { case ACTOR_EN_KAKASI: @@ -71,15 +68,20 @@ s32 Snap_RecordPictographedActors(PlayState* play) { case ACTOR_EN_GE2: seen |= PICTO_SEEN_ANYWHERE; break; + + default: + break; + } + + if (!seen) { + continue; } // If actor is recordable, run its validity function and record if valid - if (seen) { - pictoActor = (PictoActor*)actor; - if (pictoActor->validationFunc != NULL) { - if ((pictoActor->validationFunc)(play, actor) == 0) { - validCount++; - } + pictoActor = (PictoActor*)actor; + if (pictoActor->validationFunc != NULL) { + if (pictoActor->validationFunc(play, actor) == 0) { + validCount++; } } } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index ac68f0fac..f47a8e201 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -548,7 +548,7 @@ void Sram_GenerateRandomSaveFields(void) { do { randBombers = Rand_S16Offset(0, 6); - } while (randBombers <= 0 || randBombers >= 6); + } while ((randBombers <= 0) || (randBombers >= 6)); gSaveContext.save.saveInfo.bomberCode[0] = randBombers; @@ -558,7 +558,7 @@ void Sram_GenerateRandomSaveFields(void) { do { randBombers = Rand_S16Offset(0, 6); - } while (randBombers <= 0 || randBombers >= 6); + } while ((randBombers <= 0) || (randBombers >= 6)); sp2A = 0; do { diff --git a/src/libultra/gu/position.c b/src/libultra/gu/position.c index 4af6dadc4..9ba9d3570 100644 --- a/src/libultra/gu/position.c +++ b/src/libultra/gu/position.c @@ -6,8 +6,12 @@ */ void guPositionF(f32 mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z) { static f32 D_80134D00 = M_PI / 180.0f; - f32 sinr, sinp, sinh; - f32 cosr, cosp, cosh; + f32 sinr; + f32 sinp; + f32 sinh; + f32 cosr; + f32 cosp; + f32 cosh; rot *= D_80134D00; pitch *= D_80134D00; diff --git a/src/libultra/io/contpfs.c b/src/libultra/io/contpfs.c index fd4c4e459..e9431a741 100644 --- a/src/libultra/io/contpfs.c +++ b/src/libultra/io/contpfs.c @@ -66,7 +66,8 @@ s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid) { u8 buf[BLOCKSIZE]; u8 comp[BLOCKSIZE]; u8 mask = 0; - s32 i, j = 0; + s32 i = 0; + s32 j = 0; u16 index[4]; newid->repaired = 0xFFFFFFFF; diff --git a/src/libultra/io/pfschecker.c b/src/libultra/io/pfschecker.c index bf885a1a4..d3a635768 100644 --- a/src/libultra/io/pfschecker.c +++ b/src/libultra/io/pfschecker.c @@ -18,8 +18,10 @@ s32 osPfsChecker(OSPfs* pfs) { __OSInodeUnit nextNodeInFile[16]; __OSInodeCache cache; s32 fixed = 0; - u8 bank, prevBank = 254; - s32 cc, cl; + u8 bank = 254; + u8 prevBank = 254; + s32 cc; + s32 cl; s32 offset; ret = __osCheckId(pfs); diff --git a/src/libultra/libc/ldiv.c b/src/libultra/libc/ldiv.c index 21fe84e80..9f9d75031 100644 --- a/src/libultra/libc/ldiv.c +++ b/src/libultra/libc/ldiv.c @@ -5,7 +5,7 @@ ldiv_t ldiv(long numer, long denom) { val.quot = numer / denom; val.rem = numer - denom * val.quot; - if (val.quot < 0 && val.rem > 0) { + if ((val.quot < 0) && (val.rem > 0)) { val.quot++; val.rem -= denom; } @@ -18,7 +18,7 @@ lldiv_t lldiv(long long numer, long long denom) { val.quot = numer / denom; val.rem = numer - denom * val.quot; - if (val.quot < 0 && val.rem > 0) { + if ((val.quot < 0) && (val.rem > 0)) { val.quot++; val.rem -= denom; } diff --git a/src/libultra/libc/ll.c b/src/libultra/libc/ll.c index 399d2caf4..0fd42d1ed 100644 --- a/src/libultra/libc/ll.c +++ b/src/libultra/libc/ll.c @@ -36,7 +36,7 @@ void __ull_divremi(unsigned long long* quotient, unsigned long long* remainder, long long __ll_mod(long long left, long long right) { long long rem = left % right; - if ((rem < 0 && right > 0) || (rem > 0 && right < 0)) { + if (((rem < 0) && (right > 0)) || ((rem > 0) && (right < 0))) { rem += right; } return rem; diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c index 460d0951c..e943e51e2 100644 --- a/src/libultra/rmon/xldtob.c +++ b/src/libultra/rmon/xldtob.c @@ -107,7 +107,7 @@ void _Ldtob(_Pft* args, u8 type) { val = (val - lo) * 1.0e8; } ptr = ptr + 8; - for (j = 8; lo > 0 && --j >= 0;) { + for (j = 8; (lo > 0) && (--j >= 0);) { qr = ldiv(lo, 10); *--ptr = qr.rem + '0'; lo = qr.quot; diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c index ddb83652d..813520f01 100644 --- a/src/libultra/rmon/xprintf.c +++ b/src/libultra/rmon/xprintf.c @@ -206,7 +206,7 @@ void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac) { case 's': px->s = va_arg(*pap, char*); px->n1 = strlen(px->s); - if (px->prec >= 0 && px->n1 > px->prec) { + if ((px->prec >= 0) && (px->n1 > px->prec)) { px->n1 = px->prec; } break; 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 693fff484..c226c89f3 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 @@ -85,7 +85,7 @@ void func_80BD66AC(BgHakaTomb* this, PlayState* play) { if (Flags_GetClear(play, this->dyna.actor.room)) { this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); } - if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId < 0) && + 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) { 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 48045527f..6ce5f7d81 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 @@ -93,7 +93,10 @@ s32 func_80C0A95C(BgIkninSusceil* this, PlayState* play) { f32 new_var; Player* player = GET_PLAYER(play); Vec3f offset; - f32 temp1, temp2, temp3, temp4; + f32 temp1; + f32 temp2; + f32 temp3; + f32 temp4; Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos); for (i = 0; i < 7; i++) { 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 66f70d9c6..36415d7db 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -843,9 +843,10 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla case 594: Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL24_SCREAM2); break; - } - if (1) {} + default: + break; + } if ((play->csCtx.curFrame >= 62) && (play->csCtx.curFrame < 273)) { if ((Rand_ZeroOne() < 0.75f) && ((play->state.frames % 2) != 0)) { 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 64899a807..de20e6f63 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -572,6 +572,9 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) { gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0x00FFFFFF) | ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 0x18); break; + + default: + break; } gSaveContext.save.saveInfo.unk_EA8[1] = (gSaveContext.save.saveInfo.unk_EA8[1] & 0xFFFFFF00) | @@ -810,6 +813,9 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { case PLAYER_FORM_HUMAN: temp_f0 = -25.0f; break; + + default: + break; } temp_f2 = this->dyna.actor.world.pos.y + (this->dyna.actor.shape.yOffset * 0.1f) + temp_f0; 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 e18751369..9165b9392 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -203,7 +203,7 @@ void func_808A2918(EnBoom* this, PlayState* play) { } Math_ScaledStepToS(&this->actor.world.rot.y, sp72, - (this->unk_1CF > 0) ? 1000 : (s16)(((sp70 < 0) ? -sp70 : sp70) * sp64)); + (this->unk_1CF > 0) ? 1000 : (s16)(ABS_ALT(sp70) * sp64)); } Math_ScaledStepToS(&this->actor.world.rot.x, sp6E, ABS_ALT(sp6C) * sp64); 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 558824ad8..8a8770371 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -197,7 +197,8 @@ void func_809438F8(EnDaiku* this, PlayState* play) { } if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { - f32 sq, abs; + f32 xzDist; + f32 yawDiff; Math_ApproachF(&this->actor.world.pos.x, this->unk_26C.x, 0.5f, fabsf(2.0f * Math_SinS(this->actor.world.rot.y))); @@ -205,9 +206,9 @@ void func_809438F8(EnDaiku* this, PlayState* play) { fabsf(2.0f * Math_CosS(this->actor.world.rot.y))); Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_282, 1, 0x7D0, 0xA); - sq = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z)); - abs = fabsf(this->actor.world.rot.y - this->unk_282); - if ((sq < SQ(2.0f)) && (this->unk_258 != NULL) && (abs < 10.0f)) { + xzDist = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z)); + yawDiff = fabsf(this->actor.world.rot.y - this->unk_282); + if ((xzDist < 4.0f) && (this->unk_258 != NULL) && (yawDiff < 10.0f)) { this->unk_25C++; if (this->unk_25C >= this->unk_258->count) { this->unk_25C = 0; 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 2496a4cc2..cef97a8b0 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -667,7 +667,9 @@ void EnDekunuts_Update(Actor* thisx, PlayState* play) { s32 EnDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDekunuts* this = THIS; - f32 arg1, arg2, arg3; + f32 arg1; + f32 arg2; + f32 arg3; f32 currentFrame; if (this->actionFunc == func_808BDA4C) { diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c index 2a5198d1f..c7dbd8888 100644 --- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c +++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c @@ -266,34 +266,33 @@ s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 256; i++, arg0++) { - if (arg0->isEnabled == 1) { - if (!isGfxSetup) { - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000); - gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); - isGfxSetup = true; - } - Matrix_Push(); - - //! FAKE: - if (1) {} - - arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f; - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24); - - Matrix_Translate(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW); - Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY); - Matrix_ReplaceRotation(&play->billboardMtxF); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f; - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[idx])); - gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000020); - - Matrix_Pop(); - sp5C += 1; + if (arg0->isEnabled != 1) { + continue; } + + if (!isGfxSetup) { + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); + gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); + isGfxSetup = true; + } + Matrix_Push(); + + arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f; + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24); + + Matrix_Translate(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW); + Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f; + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[idx])); + gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000020); + + Matrix_Pop(); + sp5C += 1; } CLOSE_DISPS(play->state.gfxCtx); 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 503ce584e..8ee28ad7d 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -62,8 +62,10 @@ static Color_RGBAf sOuterColors[] = { }; typedef struct { - u8 r, g, b; -} FairyColorFlags; + /* 0x0 */ u8 r; + /* 0x1 */ u8 g; + /* 0x2 */ u8 b; +} FairyColorFlags; // size = 0x3 static FairyColorFlags sColorFlags[] = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 2, 0 }, { 1, 0, 2 }, { 0, 1, 0 }, { 2, 1, 0 }, { 0, 1, 2 }, 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 6a7e96b81..9c5bbf42e 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 @@ -114,7 +114,7 @@ void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec OPEN_DISPS(play->state.gfxCtx); - if (this->npcIndex >= 4 && limbIndex == 15) { + if ((this->npcIndex >= 4) && (limbIndex == 15)) { index = this->npcIndex - 4; gSPDisplayList(POLY_OPA_DISP++, D_80C2426C[index]); } @@ -136,25 +136,32 @@ 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)) { + if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment); switch (this->npcIndex) { case 4: gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255); break; + case 5: gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255); break; + case 6: gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255); break; + case 7: gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255); break; + case 8: gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); break; + + default: + break; } if (this->npcIndex == 0) { 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 d23e6b9ee..645a757a0 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -502,7 +502,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) { surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && // close enough - (surfaceType != FLOOR_PROPERTY_12 && surfaceType != FLOOR_PROPERTY_13)) { + ((surfaceType != FLOOR_PROPERTY_12) && (surfaceType != FLOOR_PROPERTY_13))) { EnFamos_SetupAttackAim(this); } else if ((Player_GetMask(play) == PLAYER_MASK_STONE) || @@ -545,7 +545,8 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) { surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); hitFloor = this->actor.bgCheckFlags & BGCHECKFLAG_GROUND; - if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == 0xC) || (surfaceType == 0xD)) { + if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == FLOOR_PROPERTY_12) || + (surfaceType == FLOOR_PROPERTY_13)) { this->collider1.base.atFlags &= ~AT_ON; this->collider2.base.atFlags |= AT_ON; if (hitFloor) { @@ -747,7 +748,7 @@ void EnFamos_Update(Actor* thisx, PlayState* play) { f32 oldHeight; s32 oldHoverTimer; // save old value to test if changed - if (this->debrisTimer <= 0 || + if ((this->debrisTimer <= 0) || (this->debrisTimer--, EnFamos_UpdateDebrisPosRot(this), (this->actionFunc != EnFamos_DeathFade))) { oldHoverTimer = this->hoverTimer; EnFamos_UpdateFlipStatus(this); 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 925dc93df..0f9b7594e 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -107,7 +107,7 @@ s32 EnFg_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s32 ret; ret = false; - if (animIndex >= 0 && animIndex < 4) { + if ((animIndex >= 0) && (animIndex < 4)) { ret = true; frameCount = sAnimationInfo[animIndex].frameCount; if (frameCount < 0) { @@ -151,15 +151,19 @@ s32 EnFg_GetDamageEffect(EnFg* this) { case 1: ret = FG_DMGEFFECT_DEKUSTICK; break; + case 15: ret = FG_DMGEFFECT_HOOKSHOT; break; + case 14: ret = FG_DMGEFFECT_ARROW; break; + case 3: ret = FG_DMGEFFECT_ICEARROW; break; + default: ret = FG_DMGEFFECT_EXPLOSION; break; @@ -187,8 +191,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->actor.world.pos.y = this->actor.floorHeight + 2.0f; this->actionFunc = EnFg_DoNothing; break; + case FG_DMGEFFECT_HOOKSHOT: break; + case FG_DMGEFFECT_ARROW: this->actor.flags &= ~ACTOR_FLAG_1; this->skelAnime.playSpeed = 0.0f; @@ -202,10 +208,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->actor.scale.z = CLAMP_MIN(this->actor.scale.z, 0.001f); this->actionFunc = EnFg_DoNothing; break; + case FG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); - if (1) {} this->actor.params = FG_BLACK; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; @@ -218,6 +224,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->timer = 0; this->actionFunc = EnFg_Knockback; break; + default: if (DECR(this->timer) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP); @@ -251,8 +258,10 @@ void EnFg_Jump(EnFg* this, PlayState* play) { this->actor.scale.z = CLAMP_MIN(this->actor.scale.z, 0.001f); this->actionFunc = EnFg_DoNothing; break; + case FG_DMGEFFECT_HOOKSHOT: break; + case FG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); @@ -269,6 +278,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { this->timer = 0; this->actionFunc = EnFg_Knockback; break; + default: if (Animation_OnFrame(&this->skelAnime, 8.0f)) { this->skelAnime.curFrame = 8.0f; @@ -461,26 +471,28 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 10; i++, dustEffect++) { - if (dustEffect->type) { - if (!firstDone) { - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); - gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); - firstDone = true; - } - - if (1) {} - alpha = (255.0f / 16.0f) * dustEffect->timer; - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, alpha); - gDPPipeSync(POLY_XLU_DISP++); - Matrix_Translate(dustEffect->pos.x, dustEffect->pos.y, dustEffect->pos.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(dustEffect->xyScale, dustEffect->xyScale, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - index = 0.5f * dustEffect->timer; - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); - gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338); + if (dustEffect->type == 0) { + continue; } + + if (!firstDone) { + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); + gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); + firstDone = true; + } + + alpha = (255.0f / 16.0f) * dustEffect->timer; + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, alpha); + gDPPipeSync(POLY_XLU_DISP++); + Matrix_Translate(dustEffect->pos.x, dustEffect->pos.y, dustEffect->pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(dustEffect->xyScale, dustEffect->xyScale, 1.0f, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + index = 0.5f * dustEffect->timer; + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); + gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338); } + CLOSE_DISPS(play->state.gfxCtx); } 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 636cd892e..07dfe95f0 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->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -138,13 +138,17 @@ u16 EnFsn_GetWelcome(PlayState* play) { switch (Player_GetMask(play)) { case PLAYER_MASK_NONE: return 0x29CC; + case PLAYER_MASK_DEKU: return 0x29FC; + case PLAYER_MASK_GORON: case PLAYER_MASK_ZORA: return 0x29FD; + case PLAYER_MASK_KAFEIS_MASK: return 0x2364; + default: return 0x29FE; } @@ -159,8 +163,9 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { } else { this->textId = 0x29E4; this->flags |= ENFSN_END_CONVERSATION; - break; } + break; + case 0x29E0: if (INV_CONTENT(ITEM_MASK_KEATON) == ITEM_MASK_KEATON) { this->flags |= ENFSN_GIVE_ITEM; @@ -171,17 +176,20 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { break; } else { this->textId = 0x29E1; - break; } + break; + case 0x29E1: this->textId = 0x29E2; break; + case 0x29E2: this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_KEATONS_MASK; this->getItemId = GI_MASK_KEATON; this->textId = 0x29E3; break; + case 0x29E3: this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; @@ -189,10 +197,14 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_80_10); this->textId = 0x29F1; break; + case 0x29F1: this->textId = 0x29E4; this->flags |= ENFSN_END_CONVERSATION; break; + + default: + break; } Message_StartTextbox(play, this->textId, &this->actor); if (this->flags & ENFSN_END_CONVERSATION) { @@ -210,7 +222,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { void EnFsn_HandleSetupResumeInteraction(EnFsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play) && - this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { + (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED)) { Actor_ProcessTalkRequest(&this->actor, &play->state); func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); if (ENFSN_IS_SHOP(&this->actor)) { @@ -301,7 +313,7 @@ void EnFsn_CursorLeftRight(EnFsn* this) { } s16 EnFsn_GetThirdDayItemId(void) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && CURRENT_DAY == 3) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && (CURRENT_DAY == 3)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { return SI_BOMB_BAG_30_1; } @@ -314,16 +326,22 @@ s16 EnFsn_GetStolenItemId(u32 stolenItem) { switch (stolenItem) { case ITEM_BOTTLE: return SI_BOTTLE; + case ITEM_SWORD_GREAT_FAIRY: return SI_SWORD_GREAT_FAIRY; + case ITEM_SWORD_KOKIRI: return SI_SWORD_KOKIRI; + case ITEM_SWORD_RAZOR: return SI_SWORD_RAZOR; + case ITEM_SWORD_GILDED: return SI_SWORD_GILDED; + + default: + return SI_NONE; } - return SI_NONE; } s32 EnFsn_HasItemsToSell(void) { @@ -450,6 +468,7 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { } Message_StartTextbox(play, this->actor.textId, &this->actor); return true; + case 1: func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; @@ -457,8 +476,10 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { func_80151BB4(play, 3); this->actionFunc = EnFsn_SetupEndInteraction; return true; + + default: + return false; } - return false; } s32 EnFsn_HasPlayerSelectedItem(EnFsn* this, PlayState* play, Input* input) { @@ -487,10 +508,10 @@ void EnFsn_UpdateJoystickInputState(EnFsn* this, PlayState* play) { s8 stickY = CONTROLLER1(&play->state)->rel.stick_y; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -503,10 +524,10 @@ void EnFsn_UpdateJoystickInputState(EnFsn* this, PlayState* play) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -765,7 +786,7 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) { this->animIndex = FSN_ANIM_SLAM_COUNTER_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } else { - if (this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP && Animation_OnFrame(&this->skelAnime, 18.0f)) { + if ((this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP) && Animation_OnFrame(&this->skelAnime, 18.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO); } if (this->flags & ENFSN_CALM_DOWN) { @@ -828,20 +849,26 @@ void EnFsn_StartBuying(EnFsn* this, PlayState* play) { this->actor.textId = 0x29CD; Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29CD: this->actor.textId = 0x29CE; EnFsn_HandleLookToShopkeeperBuyingCutscene(this); Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29CE: this->actor.textId = 0xFF; Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_DeterminePrice; break; + case 0x29CF: player->exchangeItemId = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; + + default: + break; } } } @@ -860,6 +887,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { } Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29D2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { this->actor.textId = 0x2A01; @@ -870,6 +898,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { } Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29D3: case 0x29D4: case 0x29FA: @@ -877,6 +906,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { this->actor.textId = 0x29D5; Message_StartTextbox(play, this->actor.textId, &this->actor); break; + + default: + break; } } } else if (talkState == TEXT_STATE_CHOICE) { @@ -892,6 +924,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_FaceShopkeeperSelling; break; + case 1: func_8019F208(); this->isSelling = false; @@ -900,6 +933,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_StartBuying; break; + + default: + break; } } } @@ -965,21 +1001,29 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { case 5: this->getItemId = GI_RUPEE_BLUE; break; + case 10: this->getItemId = GI_RUPEE_10; break; + case 20: this->getItemId = GI_RUPEE_RED; break; + case 50: this->getItemId = GI_RUPEE_PURPLE; break; + case 200: this->getItemId = GI_RUPEE_HUGE; break; + + default: + break; } this->actionFunc = EnFsn_GiveItem; break; + case 1: func_8019F230(); player->exchangeItemId = PLAYER_IA_NONE; @@ -1146,6 +1190,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { case CANBUY_RESULT_SUCCESS_2: func_8019F208(); SET_WEEKEVENTREG(WEEKEVENTREG_33_04); + // fallthrough case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { CutsceneManager_Stop(this->csId); @@ -1171,16 +1216,21 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { this->itemIds[this->cursorIndex] = -1; this->actionFunc = EnFsn_GiveItem; break; + case CANBUY_RESULT_NEED_RUPEES: play_sound(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x29F0); this->actionFunc = EnFsn_PlayerCannotBuy; break; + case CANBUY_RESULT_CANNOT_GET_NOW: play_sound(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x29DD); this->actionFunc = EnFsn_PlayerCannotBuy; break; + + default: + break; } } @@ -1211,10 +1261,15 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) { case 0: EnFsn_HandleCanPlayerBuyItem(this, play); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); + break; + + default: + break; } } } @@ -1251,12 +1306,16 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_DeterminePrice; break; + case 1: func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); func_80151BB4(play, 3); break; + + default: + break; } } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { @@ -1298,12 +1357,16 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_StartBuying; break; + case 1: func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); func_80151BB4(play, 3); break; + + default: + break; } } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { @@ -1341,6 +1404,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) { } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { this->actor.textId = 0x29D6; Message_StartTextbox(play, this->actor.textId, &this->actor); + //! FAKE: if (play) {} } } @@ -1576,12 +1640,15 @@ s32 EnFsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p case FSN_LIMB_TORSO: limbRotTableIdx = 0; break; + case FSN_LIMB_LEFT_HAND: limbRotTableIdx = 1; break; + case FSN_LIMB_HEAD: limbRotTableIdx = 2; break; + default: limbRotTableIdx = 9; break; 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 3866c4fb1..6fe9bf291 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -426,23 +426,24 @@ void func_80962340(EnFu* this, PlayState* play) { } void func_80962588(EnFu* this, PlayState* play) { - if (Message_ShouldAdvance(play) && (this->unk_552 == 0x2871)) { - if (1) {} - if (play->msgCtx.choiceIndex == 0) { - if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { - func_8019F208(); - Rupees_ChangeBy(-10); - func_80963DE4(this, play); - } else { - play_sound(NA_SE_SY_ERROR); - Message_StartTextbox(play, 0x2873, &this->actor); - this->unk_552 = 0x2873; - } + if (!Message_ShouldAdvance(play) || (this->unk_552 != 0x2871)) { + return; + } + + if (play->msgCtx.choiceIndex == 0) { + if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { + func_8019F208(); + Rupees_ChangeBy(-10); + func_80963DE4(this, play); } else { - func_8019F230(); - Message_StartTextbox(play, 0x2872, &this->actor); - this->unk_552 = 0x2872; + play_sound(NA_SE_SY_ERROR); + Message_StartTextbox(play, 0x2873, &this->actor); + this->unk_552 = 0x2873; } + } else { + func_8019F230(); + Message_StartTextbox(play, 0x2872, &this->actor); + this->unk_552 = 0x2872; } } 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 662f8a2c1..cbdc2ba19 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -151,7 +151,7 @@ s32 EnIn_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s16 frameCount; s32 ret = false; - if (animIndex >= 0 && animIndex < 18) { + if ((animIndex >= 0) && (animIndex < 18)) { ret = true; frameCount = sAnimationInfo[animIndex].frameCount; if (frameCount < 0) { 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 202ed6637..da813182e 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -685,7 +685,7 @@ void func_8095F180(EnIshi* this) { } void func_8095F194(EnIshi* this, PlayState* play) { - if (this->actor.csId < 0) { + if (this->actor.csId <= CS_ID_NONE) { Actor_Kill(&this->actor); } else if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { Actor_Kill(&this->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 07e4990bf..ee6e28de2 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -1531,7 +1531,7 @@ void func_80B88D6C(EnKaizoku* this, PlayState* play) { temp_ft4 = this->skelAnime.curFrame - this->skelAnime.playSpeed; temp_ft5 = this->skelAnime.curFrame + this->skelAnime.playSpeed; if (this->skelAnime.curFrame != 0.0f) { - if (((temp_ft4 < 0 && temp_ft5 > 0) || (temp_ft4 < 5 && temp_ft5 > 5))) { + if ((((temp_ft4 < 0) && (temp_ft5 > 0)) || ((temp_ft4 < 5) && (temp_ft5 > 5)))) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); } } 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 7d54f3ed3..73de78707 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -348,8 +348,8 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { } if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { Actor_GetScreenPos(play, &this->picto.actor, &x, &y); - if (this->picto.actor.projectedPos.z > -20.0f && x > 0 && x < SCREEN_WIDTH && y > 0 && y < SCREEN_HEIGHT && - this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { + if ((this->picto.actor.projectedPos.z > -20.0f) && (x > 0) && (x < SCREEN_WIDTH) && (y > 0) && + (y < SCREEN_HEIGHT) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { // faster shaking EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); this->skelanime.playSpeed = 2.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 02f77693d..fd7795f7c 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 @@ -316,7 +316,7 @@ void func_80AEA128(EnLiftNuts* this, PlayState* play) { } void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { - if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && this->unk_34E == 1) { + if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && (this->unk_34E == 1)) { this->actor.flags |= ACTOR_FLAG_10000; } else if (this->actor.xzDistToPlayer > 120.0f) { func_80AE9FC8(this); @@ -326,7 +326,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { if (func_80AE9B4C(0, 0)) { switch (CURRENT_DAY) { case 1: - if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { @@ -339,7 +340,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { break; case 2: - if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else { @@ -360,7 +362,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { break; case 3: - if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) { @@ -383,7 +386,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Flags_UnsetSwitch(play, 0x40); Inventory_SaveDekuPlaygroundHighScore(4); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && - CURRENT_DAY == 3) { + (CURRENT_DAY == 3)) { this->unk_354 = 0; Message_StartTextbox(play, 0x27F4, &this->actor); this->textId = 0x27F4; @@ -394,7 +397,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { } else { if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) >= gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { - if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < 0x2EE0) { + if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < SECONDS_TO_TIMER(120)) { Message_StartTextbox(play, 0x27F9, &this->actor); this->textId = 0x27F9; } else { @@ -428,6 +431,9 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27E9, &this->actor); this->textId = 0x27E9; break; + + default: + break; } } } else { @@ -435,7 +441,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { this->textId = 0x27D8; } func_80AEABF0(this); - } else if (func_80AE9AC4(this, 0) || this->unk_34E == 1) { + } else if (func_80AE9AC4(this, 0) || (this->unk_34E == 1)) { if (this->unk_34E == 1) { func_800B8614(&this->actor, play, 200.0f); } else if (this->actor.playerHeightRel >= -13.0f) { @@ -533,6 +539,9 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27E9, &this->actor); this->textId = 0x27E9; break; + + default: + break; } break; @@ -589,6 +598,9 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27ED, &this->actor); this->textId = 0x27ED; break; + + default: + break; } } } @@ -644,6 +656,9 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) { } } break; + + default: + break; } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x2000, 0x500); @@ -668,6 +683,9 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) { this->unk_354++; } break; + + default: + break; } } func_80AEB974(this); @@ -759,7 +777,7 @@ void func_80AEB1C8(EnLiftNuts* this) { void func_80AEB230(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > 0) { + if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) { player->stateFlags1 &= ~PLAYER_STATE1_20; func_80AEB280(this); } @@ -773,8 +791,8 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.floorBgId == BG_ACTOR_MAX) && - player->actor.world.pos.y < 20.0f) || - gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= 0x2EE0) { + (player->actor.world.pos.y < 20.0f)) || + (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120))) { player->stateFlags1 |= PLAYER_STATE1_20; Flags_SetSwitch(play, 0x41); func_80AEB3E0(this, play); @@ -986,9 +1004,9 @@ void EnLiftNuts_Update(Actor* thisx, PlayState* play) { s32 EnLiftNuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnLiftNuts* this = THIS; - if (limbIndex == OBJECT_DNT_LIMB_0F || limbIndex == OBJECT_DNT_LIMB_10 || limbIndex == OBJECT_DNT_LIMB_15 || - limbIndex == OBJECT_DNT_LIMB_17 || limbIndex == OBJECT_DNT_LIMB_18 || limbIndex == OBJECT_DNT_LIMB_15 || - limbIndex == OBJECT_DNT_LIMB_1B) { + if ((limbIndex == OBJECT_DNT_LIMB_0F) || (limbIndex == OBJECT_DNT_LIMB_10) || (limbIndex == OBJECT_DNT_LIMB_15) || + (limbIndex == OBJECT_DNT_LIMB_17) || (limbIndex == OBJECT_DNT_LIMB_18) || (limbIndex == OBJECT_DNT_LIMB_15) || + (limbIndex == OBJECT_DNT_LIMB_1B)) { *dList = NULL; } 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 c2e813273..7ada3a223 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->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -210,7 +210,7 @@ void EnOssan_CheckValidSpawn(EnOssan* this) { switch (gSaveContext.save.day) { case 1: case 2: - if (gSaveContext.save.time <= CLOCK_TIME(21, 30) && gSaveContext.save.time > CLOCK_TIME(6, 00)) { + if ((gSaveContext.save.time <= CLOCK_TIME(21, 30)) && (gSaveContext.save.time > CLOCK_TIME(6, 00))) { if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) { Actor_Kill(&this->actor); } @@ -218,16 +218,20 @@ void EnOssan_CheckValidSpawn(EnOssan* this) { Actor_Kill(&this->actor); } break; + case 3: if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) { Actor_Kill(&this->actor); } - if (!(gSaveContext.save.time <= CLOCK_TIME(22, 00) && gSaveContext.save.time >= CLOCK_TIME(6, 00))) { + if ((gSaveContext.save.time > CLOCK_TIME(22, 00)) || (gSaveContext.save.time < CLOCK_TIME(6, 00))) { if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) { Actor_Kill(&this->actor); } } break; + + default: + break; } } @@ -377,9 +381,9 @@ void EnOssan_Idle(EnOssan* this, PlayState* play) { this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } } else { - if (this->actor.xzDistToPlayer < 100.0f && - (player->actor.world.pos.x >= -40.0f && player->actor.world.pos.x <= 40.0f) && - (player->actor.world.pos.z >= -91.0f && player->actor.world.pos.z <= -60.0f)) { + if ((this->actor.xzDistToPlayer < 100.0f) && (player->actor.world.pos.x >= -40.0f) && + (player->actor.world.pos.x <= 40.0f) && (player->actor.world.pos.z >= -91.0f) && + (player->actor.world.pos.z <= -60.0f)) { func_800B8614(&this->actor, play, 100.0f); } if (this->actor.params == ENOSSAN_PART_TIME_WORKER) { @@ -411,11 +415,13 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { this->animIndex = FSN_ANIM_TURN_AROUND_FORWARD; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_TURN_AROUND_FORWARD); break; + case FSN_ANIM_TURN_AROUND_FORWARD: EnOssan_SetHaveMet(this); this->textId = EnOssan_CuriosityShopMan_GetWelcome(this, play); SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, this->animIndex); break; + case FSN_ANIM_HANDS_ON_COUNTER_START: case FSN_ANIM_HAND_ON_FACE_START: case FSN_ANIM_LEAN_FORWARD_START: @@ -425,6 +431,7 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, false); break; + case FSN_ANIM_HANDS_ON_COUNTER_LOOP: case FSN_ANIM_HAND_ON_FACE_LOOP: case FSN_ANIM_LEAN_FORWARD_LOOP: @@ -432,11 +439,13 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { this->animIndex = FSN_ANIM_TURN_AROUND_REVERSE; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_TURN_AROUND_REVERSE); break; + case FSN_ANIM_TURN_AROUND_REVERSE: this->animIndex = FSN_ANIM_SCRATCH_BACK; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_SCRATCH_BACK); EnOssan_SetupAction(this, EnOssan_Idle); break; + default: this->animIndex = FSN_ANIM_SCRATCH_BACK; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_SCRATCH_BACK); @@ -459,11 +468,11 @@ void EnOssan_UpdateJoystickInputState(PlayState* play, EnOssan* this) { this->moveHorizontal = this->moveVertical = false; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; this->moveHorizontal = true; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -477,11 +486,11 @@ void EnOssan_UpdateJoystickInputState(PlayState* play, EnOssan* this) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; this->moveVertical = true; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -533,9 +542,9 @@ u8 EnOssan_SetCursorIndexFromNeutral(EnOssan* this, u8 shelfOffset) { u8 EnOssan_CursorRight(EnOssan* this, u8 cursorIndex, u8 shelfSlotMin) { u8 end = shelfSlotMin + 4; - while (cursorIndex >= shelfSlotMin && cursorIndex < end) { + while ((cursorIndex >= shelfSlotMin) && (cursorIndex < end)) { cursorIndex -= 2; - if (cursorIndex >= shelfSlotMin && cursorIndex < end) { + if ((cursorIndex >= shelfSlotMin) && (cursorIndex < end)) { if (this->items[cursorIndex] != NULL) { return cursorIndex; } @@ -607,12 +616,15 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) { this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; return true; + case 1: func_8019F230(); EnOssan_EndInteraction(play, this); return true; + + default: + return false; } - return false; } void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { @@ -656,7 +668,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { return; } } - if (this->actor.params == ENOSSAN_PART_TIME_WORKER && player->transformation != PLAYER_FORM_ZORA) { + if ((this->actor.params == ENOSSAN_PART_TIME_WORKER) && (player->transformation != PLAYER_FORM_ZORA)) { Math_SmoothStepToS(&this->partTimerHeadRot.y, 8000, 3, 2000, 0); } } @@ -871,7 +883,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) { } } } else { - if (this->stickAccumX > 0 && this->stickAccumX > 500) { + if ((this->stickAccumX > 0) && (this->stickAccumX > 500)) { cursorIndex = EnOssan_CursorRight(this, this->cursorIndex, 4); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -879,7 +891,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) { EnOssan_SetupLookToShopkeeperFromShelf(play, this); return; } - } else if (this->stickAccumX < 0 && this->stickAccumX < -500) { + } else if ((this->stickAccumX < 0) && (this->stickAccumX < -500)) { cursorIndex = EnOssan_CursorLeft(this, this->cursorIndex, 8); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -929,7 +941,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { } } } else { - if (this->stickAccumX < 0 && this->stickAccumX < -500) { + if ((this->stickAccumX < 0) && (this->stickAccumX < -500)) { cursorIndex = EnOssan_CursorRight(this, this->cursorIndex, 0); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -937,7 +949,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { EnOssan_SetupLookToShopkeeperFromShelf(play, this); return; } - } else if (this->stickAccumX > 0 && this->stickAccumX > 500) { + } else if ((this->stickAccumX > 0) && (this->stickAccumX > 500)) { cursorIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -1016,6 +1028,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_SUCCESS_2: func_8019F208(); item->buyFunc(play, item); @@ -1024,27 +1037,35 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_NO_ROOM: case CANBUY_RESULT_NO_ROOM_2: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]); break; + case CANBUY_RESULT_NEED_EMPTY_BOTTLE: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->actor.params]); break; + case CANBUY_RESULT_NEED_RUPEES: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->actor.params]); break; + case CANBUY_RESULT_CANNOT_GET_NOW_2: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->actor.params]); break; + case CANBUY_RESULT_CANNOT_GET_NOW: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]); break; + + default: + break; } } @@ -1058,11 +1079,15 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) { case 0: EnOssan_HandleCanBuyItem(play, this); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); break; + + default: + break; } } } @@ -1134,6 +1159,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { EnOssan_SetupStartShopping(play, this, true); func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); break; + case 1: default: func_8019F230(); @@ -1142,7 +1168,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { } } } - } else if (talkState == TEXT_STATE_5 && Message_ShouldAdvance(play)) { + } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { EnOssan_ResetItemPosition(this); item = this->items[this->cursorIndex]; item->restockFunc(play, item); @@ -1241,11 +1267,11 @@ void EnOssan_UpdateItemSelectedProperty(EnOssan* this) { for (i = 0; i < ARRAY_COUNT(this->items); i++, items++) { item = *items; if (item != NULL) { - if (this->actionFunc != EnOssan_SelectItem && this->actionFunc != EnOssan_CannotBuy && - this->drawCursor == 0) { + if ((this->actionFunc != EnOssan_SelectItem) && (this->actionFunc != EnOssan_CannotBuy) && + (this->drawCursor == 0)) { item->isSelected = false; } else { - item->isSelected = this->cursorIndex == i ? true : false; + item->isSelected = (this->cursorIndex == i) ? true : false; } } } @@ -1383,6 +1409,7 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { this->flags |= END_INTERACTION; return textId; } + switch (player->transformation) { case PLAYER_FORM_DEKU: this->animIndex = FSN_ANIM_SLAM_COUNTER_START; @@ -1390,21 +1417,25 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { return sWelcomeDekuTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; + case PLAYER_FORM_ZORA: this->animIndex = FSN_ANIM_LEAN_FORWARD_START; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_08)) { return sWelcomeZoraTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; + case PLAYER_FORM_GORON: this->animIndex = FSN_ANIM_HAND_ON_FACE_START; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_04)) { return sWelcomeGoronTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; + + default: + this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START; + return sWelcomeHumanTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } - this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START; - return sWelcomeHumanTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { @@ -1415,24 +1446,29 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { this->flags |= END_INTERACTION; return textId; } + switch (player->transformation) { case PLAYER_FORM_DEKU: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_10)) { return sWelcomeDekuTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; + case PLAYER_FORM_ZORA: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_08)) { return sWelcomeZoraTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; + case PLAYER_FORM_GORON: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_04)) { return sWelcomeGoronTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; + + default: + return sWelcomeHumanTextIds[ENOSSAN_PART_TIME_WORKER]; } - return sWelcomeHumanTextIds[ENOSSAN_PART_TIME_WORKER]; } void EnOssan_SetHaveMet(EnOssan* this) { @@ -1440,21 +1476,29 @@ void EnOssan_SetHaveMet(EnOssan* this) { case 0x06A9: SET_WEEKEVENTREG(WEEKEVENTREG_18_10); break; + case 0x06C6: SET_WEEKEVENTREG(WEEKEVENTREG_55_10); break; + case 0x06A7: SET_WEEKEVENTREG(WEEKEVENTREG_18_08); break; + case 0x06C4: SET_WEEKEVENTREG(WEEKEVENTREG_55_08); break; + case 0x06A5: SET_WEEKEVENTREG(WEEKEVENTREG_18_04); break; + case 0x06C2: SET_WEEKEVENTREG(WEEKEVENTREG_55_04); break; + + default: + break; } } @@ -1698,7 +1742,8 @@ s32 EnOssan_PartTimer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dLi void EnOssan_CuriosityShopMan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnOssan* this = THIS; - if (limbIndex == FSN_LIMB_PELVIS || limbIndex == FSN_LIMB_LEFT_UPPER_ARM || limbIndex == FSN_LIMB_RIGHT_UPPER_ARM) { + if ((limbIndex == FSN_LIMB_PELVIS) || (limbIndex == FSN_LIMB_LEFT_UPPER_ARM) || + (limbIndex == FSN_LIMB_RIGHT_UPPER_ARM)) { rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 200; rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 200; } 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 1e1a36d74..df6d3708f 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -671,6 +671,9 @@ void func_80B5CD40(EnOt* this, PlayState* play) { func_80B5CE6C(this, play); } break; + + default: + break; } } 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 b78c9a314..e64e09cbc 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -154,8 +154,6 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { func_80BD8588(this, play); func_80BD8658(this); - if (1) {} - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) { Actor_Kill(&this->actor); @@ -601,7 +599,6 @@ void func_80BD9938(EnPamera* this) { void func_80BD994C(EnPamera* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (Player_GetMask(play) == PLAYER_MASK_GIBDO) { - if (1) {} func_80BD93CC(this, 0, 1); Message_StartTextbox(play, 0x15A8, &this->actor); diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index 3390f4f0c..909510329 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -228,7 +228,8 @@ void func_8094702C(EnSda* this, u8* shadowTexture, Player* player, PlayState* pl if (BREG(57) != 0) { for (shadowTextureTemp = shadowTexture, i = 0; i < 0x1000; i++, shadowTextureTemp++) { - if ((i >= 0 && i < 0x40) || (i >= 0xFC0 && i < 0x1000) || ((i & 0x3F) == 0) || ((i & 0x3F) == 0x3F)) { + if (((i >= 0) && (i < 0x40)) || ((i >= 0xFC0) && (i < 0x1000)) || ((i & 0x3F) == 0) || + ((i & 0x3F) == 0x3F)) { *shadowTextureTemp = 255; } else { *shadowTextureTemp = 0; @@ -352,6 +353,4 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play) { } CLOSE_DISPS(gfxCtx); - - if (1) {} } 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 cf829bda0..e67808d38 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -742,11 +742,11 @@ void func_809961E4(EnSkb* this, PlayState* play) { } void func_80996284(EnSkb* this, PlayState* play) { - if (this->unk_3D8 & 0x80) { - if (1) {} - Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10); - func_80996474(this); + if (!(this->unk_3D8 & 0x80)) { + return; } + Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10); + func_80996474(this); } void func_809962D4(EnSkb* this) { @@ -982,22 +982,22 @@ void func_8099672C(EnSkb* this, PlayState* play) { } void func_80996AD0(EnSkb* this, PlayState* play) { - if (1) {} + if ((this->actionFunc == func_80996284) || (this->unk_3E2 == 1)) { + return; + } - if ((this->actionFunc != func_80996284) && (this->unk_3E2 != 1)) { - if (this->unk_3E4 != 0) { - CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); - } + if (this->unk_3E4 != 0) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + } - if (((this->unk_3DE != 0) || (this->unk_3D0 >= 11)) && (this->unk_3DE != 1) && (this->unk_3DE != 4) && - (this->unk_3DE != 6) && (this->unk_3DE != 7) && - ((this->actor.colorFilterTimer == 0) || !(this->actor.colorFilterParams & 0x4000))) { - CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - } + if (((this->unk_3DE != 0) || (this->unk_3D0 >= 11)) && (this->unk_3DE != 1) && (this->unk_3DE != 4) && + (this->unk_3DE != 6) && (this->unk_3DE != 7) && + ((this->actor.colorFilterTimer == 0) || !(this->actor.colorFilterParams & 0x4000))) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } - if ((this->actionFunc != func_80996284) && (this->actionFunc != func_809964A0)) { - CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - } + if ((this->actionFunc != func_80996284) && (this->actionFunc != func_809964A0)) { + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } 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 4f9b2a53d..7c639c44a 100644 --- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c +++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c @@ -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 >= 0) && (targetMode < 7)) { this->actor.targetMode = targetMode; } @@ -56,7 +56,7 @@ void func_80BDE090(EnTalk* this, PlayState* play) { return; } - if ((this->actor.xzDistToPlayer < 40.0f && Player_IsFacingActor(&this->actor, 0x3000, play)) || + if (((this->actor.xzDistToPlayer < 40.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) || this->actor.isTargeted) { func_800B8614(&this->actor, play, 120.0f); } 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 4c2d3eaaf..495c16c13 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -390,26 +390,23 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) { flag = 0; ptr = ptrBase; for (i = 0; i < this->actor.params; i++, ptr++) { - if (ptr->unk_24 != 2) { - continue; + if (ptr->unk_24 == 2) { + if (!flag) { + gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888); + gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD, + G_TX_NOLOD); + flag++; + } + + Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW); + Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY); + Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY); + Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900); } - - if (!flag) { - gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888); - gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0, - G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD, G_TX_NOLOD); - flag++; - } - - Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW); - Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY); - Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY); - Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY); - - if (1) {} - - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900); } CLOSE_DISPS(play->state.gfxCtx); 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 42be7784c..ee9c5aaae 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->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -274,10 +274,10 @@ void EnTrt_UpdateJoystickInputState(PlayState* play, EnTrt* this) { s8 stickY = CONTROLLER1(&play->state)->rel.stick_y; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -290,10 +290,10 @@ void EnTrt_UpdateJoystickInputState(PlayState* play, EnTrt* this) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -351,10 +351,12 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_53_08); Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); break; + case 0x888: this->textId = 0x889; Message_StartTextbox(play, this->textId, &this->actor); break; + case 0x889: if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { CutsceneManager_Stop(this->csId); @@ -364,6 +366,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_PayForMushroom; break; + default: this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; EnTrt_EndInteraction(play, this); @@ -389,10 +392,14 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) { this->textId = 0x887; Message_ContinueTextbox(play, this->textId); break; + case 0x887: case 0x88B: EnTrt_EndInteraction(play, this); break; + + default: + break; } } } @@ -504,12 +511,15 @@ s32 EnTrt_FacingShopkeeperDialogResult(EnTrt* this, PlayState* play) { func_8019F208(); EnTrt_SetupTalkToShopkeeper(play, this); return true; + case 1: func_8019F230(); EnTrt_EndInteraction(play, this); return true; + + default: + return false; } - return false; } void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { @@ -603,7 +613,7 @@ s32 EnTrt_HasPlayerSelectedItem(PlayState* play, EnTrt* this, Input* input) { return true; } if (EnTrt_TestItemSelected(play)) { - if (item->actor.params != SI_POTION_BLUE || (this->flags & ENTRT_GIVEN_MUSHROOM)) { + if ((item->actor.params != SI_POTION_BLUE) || (this->flags & ENTRT_GIVEN_MUSHROOM)) { this->prevActionFunc = this->actionFunc; Message_ContinueTextbox(play, EnTrt_GetItemChoiceTextId(this)); play_sound(NA_SE_SY_DECIDE); @@ -733,11 +743,15 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { case 0: EnTrt_HandleCanBuyItem(play, this); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, EnTrt_GetItemTextId(this)); break; + + default: + break; } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { @@ -904,19 +918,25 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { this->actionFunc = EnTrt_StartRedPotionConversation; } break; + case 0x83E: func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; this->actionFunc = EnTrt_FaceShopkeeper; break; + case 0x850: case 0x890: this->actionFunc = EnTrt_SetupEndInteraction; break; + case 0x88F: this->actionFunc = EnTrt_StartRedPotionConversation; break; + + default: + break; } } } @@ -1015,16 +1035,20 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) { case 0x889: this->textId = 0x88A; break; + case 0x881: this->textId = 0x88C; break; + case 0x838: case 0x83C: case 0x88E: case 0x88F: this->textId = 0x83A; break; + default: + //! FAKE: if (1) {} this->textId = 0x849; break; @@ -1048,8 +1072,8 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, this->textId, &this->actor); } else { - if ((player->actor.world.pos.x >= -50.0f && player->actor.world.pos.x <= 50.0f) && - (player->actor.world.pos.z >= -19.0f && player->actor.world.pos.z <= 30.0f)) { + if ((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= 50.0f) && + (player->actor.world.pos.z >= -19.0f) && (player->actor.world.pos.z <= 30.0f)) { func_800B8614(&this->actor, play, 200.0f); } } @@ -1129,6 +1153,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { EnTrt_SetupStartShopping(play, this, true); func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); break; + case 1: default: func_8019F230(); 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 a61e7e8df..06893449e 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 @@ -149,8 +149,8 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { u8 playerForm; s16 playerParams; - if (play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0 && - CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]) { + if ((play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0) && + (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) { if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) { CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]); @@ -245,7 +245,6 @@ void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play) { play->transitionTrigger = TRANS_TRIGGER_START; func_8019F128(NA_SE_OC_SECRET_HOLE_OUT); func_801A4058(5); - if (1) {} gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } 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 fb00fdae3..10be4ec3c 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 @@ -76,24 +76,26 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { this->unk158 = this->actor.world.rot.y; EnWeatherTag_SetupAction(this, func_80966A08); break; + case WEATHERTAG_TYPE_UNK1: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } EnWeatherTag_SetupAction(this, func_80966B08); break; + case WEATHERTAG_TYPE_WINTERFOG: EnWeatherTag_SetupAction(this, func_80966E0C); break; - case WEATHERTAG_TYPE_UNK3: - //! FAKE: this can move to different locations and still match - if (1) {} + case WEATHERTAG_TYPE_UNK3: EnWeatherTag_SetupAction(this, func_80966EF0); break; + case WEATHERTAG_TYPE_UNK4: EnWeatherTag_SetupAction(this, func_80966FEC); break; + case WEATHERTAG_TYPE_UNK5: func_800BC154(play, &play->actorCtx, &this->actor, 7); play->skyboxId = SKYBOX_3; @@ -102,6 +104,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { D_801F4E74 = 1.0f; EnWeatherTag_SetupAction(this, func_80966BF4); break; + case WEATHERTAG_TYPE_WATERMURK: pathID = WEATHER_TAG_PATHID(&this->actor); path = &play->setupPathList[pathID]; @@ -109,8 +112,13 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { this->pathCount = path->count; EnWeatherTag_SetupAction(this, func_809672DC); break; + case WEATHERTAG_TYPE_LOCALDAY2RAIN: EnWeatherTag_SetupAction(this, func_809674C8); + break; + + default: + break; } } @@ -255,11 +263,13 @@ void func_80966BF4(EnWeatherTag* this, PlayState* play) { case 0: case 1: default: + newUnk20 = 0; break; case 2: newUnk20 = 3; break; + case 3: newUnk20 = 4; break; @@ -287,9 +297,11 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) { default: newUnk20 = 0; break; + case 2: newUnk20 = 3; break; + case 3: newUnk20 = 4; break; 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 2e9fe8b3f..ab97962de 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -757,8 +757,6 @@ void func_80B97E0C(EnZot* this, PlayState* play) { } void func_80B97E4C(EnZot* this, PlayState* play) { - if (1) {} - if (this->unk_2F2 & 0x40) { func_80B96BEC(this, 0, ANIMMODE_LOOP); } @@ -768,33 +766,38 @@ void func_80B97E4C(EnZot* this, PlayState* play) { this->actor.world.rot.y = this->actor.shape.rot.y; } - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - switch (play->msgCtx.currentTextId) { - case 0x128C: - this->unk_2F2 &= ~4; - func_80B96BEC(this, 6, ANIMMODE_ONCE); - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + if ((Message_GetState(&play->msgCtx) != TEXT_STATE_5) || !Message_ShouldAdvance(play)) { + return; + } - case 0x128D: - case 0x128E: - case 0x128F: - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + switch (play->msgCtx.currentTextId) { + case 0x128C: + this->unk_2F2 &= ~4; + func_80B96BEC(this, 6, ANIMMODE_ONCE); + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1290: - Message_CloseTextbox(play); - this->actionFunc = func_80B97D6C; - this->unk_2F2 |= 4; - func_80B96BEC(this, 3, ANIMMODE_LOOP); - SET_WEEKEVENTREG(WEEKEVENTREG_38_08); - break; + case 0x128D: + case 0x128E: + case 0x128F: + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x128B: - Message_CloseTextbox(play); - this->actionFunc = func_80B97FD0; - break; - } + case 0x1290: + Message_CloseTextbox(play); + this->actionFunc = func_80B97D6C; + this->unk_2F2 |= 4; + func_80B96BEC(this, 3, ANIMMODE_LOOP); + SET_WEEKEVENTREG(WEEKEVENTREG_38_08); + break; + + case 0x128B: + Message_CloseTextbox(play); + this->actionFunc = func_80B97FD0; + break; + + default: + break; } } 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 3e9ef53f4..334b8fc05 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -185,23 +185,24 @@ void func_80BDC830(EnZowStruct* ptr, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { - if (ptr->unk_00 == 1) { - if (!flag) { - gDPPipeSync(POLY_XLU_DISP++); - gSPDisplayList(POLY_XLU_DISP++, gZoraRippleMaterialDL); - gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0); - if (1) {} - flag = true; - } - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr->unk_0F); - - Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); - Matrix_Scale(ptr->unk_04, 1.0f, ptr->unk_04, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gZoraRippleModelDL); + if (ptr->unk_00 != 1) { + continue; } + + if (!flag) { + gDPPipeSync(POLY_XLU_DISP++); + gSPDisplayList(POLY_XLU_DISP++, gZoraRippleMaterialDL); + gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0); + flag = true; + } + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr->unk_0F); + + Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); + Matrix_Scale(ptr->unk_04, 1.0f, ptr->unk_04, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gZoraRippleModelDL); } CLOSE_DISPS(play->state.gfxCtx); @@ -216,23 +217,24 @@ void func_80BDC9DC(EnZowStruct* ptr, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { - if (ptr->unk_00 == 3) { - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleMaterialDL); - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); - if (1) {} - flag = true; - } - - Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleModelDL); + if (ptr->unk_00 != 3) { + continue; } + + if (!flag) { + gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleMaterialDL); + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); + flag = true; + } + + Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleModelDL); } CLOSE_DISPS(play->state.gfxCtx); @@ -247,24 +249,25 @@ void func_80BDCB84(EnZowStruct* ptr, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { - if (ptr->unk_00 == 2) { - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, gZoraSplashMaterialDL); - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0); - if (1) {} - flag = true; - } - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 180, 180, 180, ptr->unk_0F); - - Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gZoraSplashModelDL); + if (ptr->unk_00 != 2) { + continue; } + + if (!flag) { + gSPDisplayList(POLY_XLU_DISP++, gZoraSplashMaterialDL); + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0); + flag = true; + } + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 180, 180, 180, ptr->unk_0F); + + Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gZoraSplashModelDL); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index a7d2714db..b5547fdad 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -671,13 +671,14 @@ void func_80A24B74(ObjIceblock* this, PlayState* play) { s32 pad; Vec3f sp20; - if (this->dyna.actor.flags & ACTOR_FLAG_40) { - if (1) {} - sp20.x = this->dyna.actor.world.pos.x; - sp20.y = this->unk_244; - sp20.z = this->dyna.actor.world.pos.z; - EffectSsGRipple_Spawn(play, &sp20, 480, 880, 0); + if (!(this->dyna.actor.flags & ACTOR_FLAG_40)) { + return; } + + sp20.x = this->dyna.actor.world.pos.x; + sp20.y = this->unk_244; + sp20.z = this->dyna.actor.world.pos.z; + EffectSsGRipple_Spawn(play, &sp20, 480, 880, 0); } void func_80A24BDC(ObjIceblock* this, PlayState* play, f32 arg2, f32 arg3, s32 arg4) { diff --git a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c index eb14dff6a..4d3bdc348 100644 --- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -65,7 +65,7 @@ s32 ObjKibako2_ContainsSkulltula(ObjKibako2* this, PlayState* play) { if ((u16)actorSpawnParam & 3) { flag = ((actorSpawnParam & 0x3FC) >> 2) & 0xFF; } - return !(flag >= 0 && Flags_GetTreasure(play, flag)); + return !((flag >= 0) && Flags_GetTreasure(play, flag)); } void ObjKibako2_Break(ObjKibako2* this, PlayState* play) { 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 b0ac87b4e..d08f2d638 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 @@ -64,7 +64,7 @@ void func_80C06B70(ObjMuPict* this, PlayState* play) { s16 yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (this->actor.csId < 0) { + if (this->actor.csId <= CS_ID_NONE) { func_80C06DC8(this, play); func_80C06CC4(this); } else { 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 d5dfed84d..4710b8908 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -130,7 +130,7 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) { } s32 func_80BA26A8(ObjNozoki* this) { - if (this->csId < 0) { + if (this->csId <= CS_ID_NONE) { return true; } 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 cd9eed10b..a4378d92b 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -549,7 +549,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) { this->unk_20A = 0; } - if (this->actor.csId < 0) { + if (this->actor.csId <= CS_ID_NONE) { func_80B03FF8(this, play); if (this->unk_20A == 0) { func_80B04608(this, play); 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 ca72d1854..cc47113a5 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -97,7 +97,7 @@ s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, PlayState* play) { } s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, PlayState* play) { - if ((this->dyna.actor.csId < 0) || CutsceneManager_IsNext(this->dyna.actor.csId)) { + if ((this->dyna.actor.csId <= CS_ID_NONE) || CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); ObjWarpstone_SetupAction(this, ObjWarpstone_PlayOpeningCutscene); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON); 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 f237bed47..69f56ef2d 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -145,13 +145,14 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { s32 pad; Vec3f spawnPos; + //! FAKE: + if (1) {} + if (this->collider.base.acFlags & AC_HIT) { play_sound(NA_SE_SY_CORRECT_CHIME); - if (1) {} if (INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE) { Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_ETCETERA, 700.0f, -800.0f, 7261.0f, 0, 0, 0, ITEM_ETC_ARROW_FIRE); - if (1) {} gSaveContext.cutsceneTrigger = 1; } else { spawnPos.x = 700.0f; @@ -168,19 +169,19 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { return; } - if (!(this->actor.xzDistToPlayer > 120.0f)) { - if ((gSaveContext.save.time >= CLOCK_TIME(6, 30)) && (gSaveContext.save.time < CLOCK_TIME(7, 30))) { - cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f)); - cylinderPos.y = - (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f)); - cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f)); - - this->hitboxPos = cylinderPos; - - Collider_SetCylinderPosition(&this->collider, &cylinderPos); - CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - } + if ((this->actor.xzDistToPlayer > 120.0f) || (gSaveContext.save.time < CLOCK_TIME(6, 30)) || + (gSaveContext.save.time >= CLOCK_TIME(7, 30))) { + return; } + + cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f)); + cylinderPos.y = (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f)); + cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f)); + + this->hitboxPos = cylinderPos; + + Collider_SetCylinderPosition(&this->collider, &cylinderPos); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } void ShotSun_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 1d4fa3489..87db12b1e 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3995,8 +3995,8 @@ s32 func_80830F9C(PlayState* play) { s32 func_80830FD4(PlayState* play) { return (play->unk_1887C != 0) && - (play->unk_1887C < 0 || CHECK_BTN_ANY(sPlayerControlInput->cur.button, - BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)); + ((play->unk_1887C < 0) || CHECK_BTN_ANY(sPlayerControlInput->cur.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)); } s32 func_80831010(Player* this, PlayState* play) { From 91182a796be6d089460974c6eeb6b337d8039eb7 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 2 Jun 2023 15:09:49 +1000 Subject: [PATCH 42/51] Match Interface_DrawClock (#1261) * Match Interface_DrawClock * oops * space * combine ifs to help indentation * small adjustment * PR Suggestions * extra space * Section: --- src/code/z_parameter.c | 985 ++++++++++++++++++------------------- tools/disasm/variables.txt | 42 +- 2 files changed, 495 insertions(+), 532 deletions(-) diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 25e6a26a5..9672b8804 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -4309,11 +4309,10 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) { /** * Draws either the analog three-day clock or the digital final-hours clock */ -#ifdef NON_MATCHING void Interface_DrawClock(PlayState* play) { static s16 sThreeDayClockAlpha = 255; - static s16 D_801BFB30 = 0; // sClockAlphaTimer1 - static s16 D_801BFB34 = 0; // sClockAlphaTimer2 + static s16 sClockAlphaTimer1 = 0; + static s16 sClockAlphaTimer2 = 0; static u16 sThreeDayClockHours[] = { CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0), @@ -4329,31 +4328,30 @@ void Interface_DrawClock(PlayState* play) { gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, }; - static s16 D_801BFBCC = 0; // sClockInvDiamondPrimRed - static s16 D_801BFBD0 = 0; // sClockInvDiamondPrimGreen - static s16 D_801BFBD4 = 255; // sClockInvDiamondPrimBlue - static s16 D_801BFBD8 = 0; // sClockInvDiamondEnvRed - static s16 D_801BFBDC = 0; // sClockInvDiamondEnvGreen - static s16 D_801BFBE0 = 0; // sClockInvDiamondEnvBlue - static s16 D_801BFBE4 = 15; // sClockInvDiamondTimer - static s16 D_801BFBE8 = 0; // sClockInvDiamondTargetIndex - static s16 D_801BFBEC[] = { 100, 0 }; // sClockInvDiamondPrimRedTargets - static s16 D_801BFBF0[] = { 205, 155 }; // sClockInvDiamondPrimGreenTargets - static s16 D_801BFBF4[] = { 255, 255 }; // sClockInvDiamondPrimBlueTargets - static s16 D_801BFBF8[] = { 30, 0 }; // sClockInvDiamondEnvRedTargets - static s16 D_801BFBFC[] = { 30, 0 }; // sClockInvDiamondEnvGreenTargets - static s16 D_801BFC00[] = { 100, 0 }; // sClockInvDiamondEnvBlueTargets - static s16 D_801BFC04[] = { 255, 0 }; // sFinalHoursClockDigitsRed - static s16 D_801BFC08[] = { 100, 0 }; // sFinalHoursClockFrameEnvRedTargets - static s16 D_801BFC0C[] = { 30, 0 }; // sFinalHoursClockFrameEnvGreenTargets - static s16 D_801BFC10[] = { 100, 0 }; // sFinalHoursClockFrameEnvBlueTargets + static s16 sClockInvDiamondPrimRed = 0; + static s16 sClockInvDiamondPrimGreen = 155; + static s16 sClockInvDiamondPrimBlue = 255; + static s16 sClockInvDiamondEnvRed = 0; + static s16 sClockInvDiamondEnvGreen = 0; + static s16 sClockInvDiamondEnvBlue = 0; + static s16 sClockInvDiamondTimer = 15; + static s16 sClockInvDiamondTargetIndex = 0; + static s16 sClockInvDiamondPrimRedTargets[] = { 100, 0 }; + static s16 sClockInvDiamondPrimGreenTargets[] = { 205, 155 }; + static s16 sClockInvDiamondPrimBlueTargets[] = { 255, 255 }; + static s16 sClockInvDiamondEnvRedTargets[] = { 30, 0 }; + static s16 sClockInvDiamondEnvGreenTargets[] = { 30, 0 }; + static s16 sClockInvDiamondEnvBlueTargets[] = { 100, 0 }; + static s16 sFinalHoursClockDigitsRedTargets[] = { 255, 0 }; + static s16 sFinalHoursClockFrameEnvRedTargets[] = { 100, 0 }; + static s16 sFinalHoursClockFrameEnvGreenTargets[] = { 30, 0 }; + static s16 sFinalHoursClockFrameEnvBlueTargets[] = { 100, 0 }; static TexturePtr sFinalHoursDigitTextures[] = { gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex, gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex, gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex, }; - // sFinalHoursDigitSlotPosXOffset - static s16 D_801BFC40[] = { + static s16 sFinalHoursDigitSlotPosXOffset[] = { 127, 136, 144, 151, 160, 168, 175, 184, }; InterfaceContext* interfaceCtx = &play->interfaceCtx; @@ -4365,527 +4363,492 @@ void Interface_DrawClock(PlayState* play) { f32 timeInMinutes; f32 timeInSeconds; f32 sp1CC; - s32 new_var; + s32 pad1; s16 sp1C6; s16 currentHour; u16 time; - s16 temp; + s16 pad2; s16 colorStep; - s16 finalHoursClockSlots[8]; // sp1AC + s16 finalHoursClockSlots[8]; s16 index; OPEN_DISPS(play->state.gfxCtx); - if (R_TIME_SPEED != 0) { - if ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || - (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || - (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) { - if (!FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day < 4)) { - /** - * Changes Clock's transparancy depending if Player is moving or not and possibly other things - */ - if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) { - if (func_801234D4(play)) { - sThreeDayClockAlpha = 80; - D_801BFB30 = 5; - D_801BFB34 = 20; - } else if (D_801BFB34 != 0) { - D_801BFB34--; - } else if (D_801BFB30 != 0) { - colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / D_801BFB30; - sThreeDayClockAlpha += colorStep; + 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)) || + (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && + !FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day <= 3)) { + /** + * Section: Changes Clock's transparancy depending if Player is moving or not and possibly other things + */ + if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) { + if (func_801234D4(play)) { + sThreeDayClockAlpha = 80; + sClockAlphaTimer1 = 5; + sClockAlphaTimer2 = 20; + } else if (sClockAlphaTimer2 != 0) { + sClockAlphaTimer2--; + } else if (sClockAlphaTimer1 != 0) { + colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / sClockAlphaTimer1; + sThreeDayClockAlpha += colorStep; - if (sThreeDayClockAlpha >= 255) { - sThreeDayClockAlpha = 255; - D_801BFB30 = 0; - } - } else { - if (play->actorCtx.flags & ACTORCTX_FLAG_1) { - sThreeDayClockAlpha = 255; - } else { - sThreeDayClockAlpha = interfaceCtx->bAlpha; - } - D_801BFB34 = 0; - D_801BFB30 = 0; - } + if (sThreeDayClockAlpha >= 255) { + sThreeDayClockAlpha = 255; + sClockAlphaTimer1 = 0; + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_1) { + sThreeDayClockAlpha = 255; } else { - if (play->actorCtx.flags & ACTORCTX_FLAG_1) { - sThreeDayClockAlpha = 255; + sThreeDayClockAlpha = interfaceCtx->bAlpha; + } + sClockAlphaTimer2 = 0; + sClockAlphaTimer1 = 0; + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_1) { + sThreeDayClockAlpha = 255; + } else { + sThreeDayClockAlpha = interfaceCtx->bAlpha; + } + sClockAlphaTimer2 = 0; + sClockAlphaTimer1 = 0; + } + + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + Gfx_SetupDL39_Overlay(play->state.gfxCtx); + + /** + * Section: Draw Clock's Hour Lines + */ + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128, 35, 1, + 6, 0, 1 << 10, 1 << 10); + + /** + * Section: Draw Clock's Border + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + + //! @bug A texture height of 50 is given below. The texture is only 48 units height + //! resulting in this reading into the next texture. This results in a white + //! dot in the bottom center of the clock. For the three-day clock, this is + //! covered by the diamond. However, it can be seen by the final-hours clock. + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50, 1, 6, + 0, 1 << 10, 1 << 10); + + if (((CURRENT_DAY >= 4) || + ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= (CLOCK_TIME(0, 0) + 5)) && + (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { + Gfx_SetupDL42_Overlay(play->state.gfxCtx); + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } else { + /** + * Section: Draw Three-Day Clock's Diamond + */ + gDPPipeSync(OVERLAY_DISP++); + + // Time is slowed down to half speed with inverted song of time + if (gSaveContext.save.timeSpeedOffset == -2) { + // Clock diamond is blue and flashes white + colorStep = + ABS_ALT(sClockInvDiamondPrimRed - sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondPrimRed >= sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondPrimRed -= colorStep; } else { - sThreeDayClockAlpha = interfaceCtx->bAlpha; + sClockInvDiamondPrimRed += colorStep; } - D_801BFB34 = 0; - D_801BFB30 = 0; + + colorStep = ABS_ALT(sClockInvDiamondPrimGreen - + sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondPrimGreen >= sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondPrimGreen -= colorStep; + } else { + sClockInvDiamondPrimGreen += colorStep; + } + + colorStep = ABS_ALT(sClockInvDiamondPrimBlue - + sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondPrimBlue >= sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondPrimBlue -= colorStep; + } else { + sClockInvDiamondPrimBlue += colorStep; + } + + colorStep = + ABS_ALT(sClockInvDiamondEnvRed - sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondEnvRed >= sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondEnvRed -= colorStep; + } else { + sClockInvDiamondEnvRed += colorStep; + } + + colorStep = ABS_ALT(sClockInvDiamondEnvGreen - + sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondEnvGreen >= sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondEnvGreen -= colorStep; + } else { + sClockInvDiamondEnvGreen += colorStep; + } + + colorStep = + ABS_ALT(sClockInvDiamondEnvBlue - sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondEnvBlue >= sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondEnvBlue -= colorStep; + } else { + sClockInvDiamondEnvBlue += colorStep; + } + + sClockInvDiamondTimer--; + + if (sClockInvDiamondTimer == 0) { + sClockInvDiamondPrimRed = sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondPrimGreen = sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondPrimBlue = sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondEnvRed = sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondEnvGreen = sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondEnvBlue = sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondTimer = 15; + sClockInvDiamondTargetIndex ^= 1; + } + + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, + 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sClockInvDiamondPrimRed, sClockInvDiamondPrimGreen, 255, + sThreeDayClockAlpha); + gDPSetEnvColor(OVERLAY_DISP++, sClockInvDiamondEnvRed, sClockInvDiamondEnvGreen, + sClockInvDiamondEnvBlue, 0); + } else { + // Clock diamond is green for regular timeSpeedOffset + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha); } - if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40, 32, + 1 << 10, 1 << 10); - Gfx_SetupDL39_Overlay(play->state.gfxCtx); + /** + * Section: Draw Three-Day Clock's Day-Number over Diamond + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - /** - * Draw Clock's Hour Lines - */ - gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27, 137, 192, + 48, 27, 1 << 10, 1 << 10); - OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128, - 35, 1, 6, 0, 1 << 10, 1 << 10); + /** + * Section: Draw Three-Day Clock's Star (for the Minute Tracker) + */ + gDPPipeSync(OVERLAY_DISP++); - /** - * Draw Clock's Border - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); + if (D_801BF974 != 0) { + D_801BF980 += 0.02f; + D_801BF97C += 11; + } else { + D_801BF980 -= 0.02f; + D_801BF97C -= 11; + } - //! @bug A texture height of 50 is given below. The texture is only 48 units height - //! resulting in this reading into the next texture. This results in a white - //! dot in the bottom center of the clock. For the three-day clock, this is - //! covered by the diamond. However, it can be seen by the final-hours clock. - OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50, - 1, 6, 0, 1 << 10, 1 << 10); + D_801BF978--; + if (D_801BF978 == 0) { + D_801BF978 = 10; + D_801BF974 ^= 1; + } - if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && - (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { - Gfx_SetupDL42_Overlay(play->state.gfxCtx); - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); + timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; + + Gfx_SetupDL42_Overlay(play->state.gfxCtx); + + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if (sThreeDayClockAlpha != 255) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C); + } + + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY); + Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 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); + gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0); + } + + /** + * Section: Cuts off Three-Day Clock's Sun and Moon when they dip below the clock + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, + R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f); + + // determines the current hour + for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) { + if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) { + break; + } + } + + /** + * Section: Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker) + */ + time = gSaveContext.save.time; + sp1D8 = Math_SinS(time) * -40.0f; + temp_f14 = Math_CosS(time) * -34.0f; + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha); + + Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0); + + /** + * Section: Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker) + */ + sp1D8 = Math_SinS(time) * 40.0f; + temp_f14 = Math_CosS(time) * 34.0f; + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha); + + Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0); + + /** + * Section: Cuts off Three-Day Clock's Hour Digits when they dip below the clock + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, + R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f); + + /** + * Section: Draws Three-Day Clock's Hour Digit Above the Sun + */ + sp1CC = gSaveContext.save.time * 0.000096131f; // (2.0f * 3.15f / 0x10000) + + // Rotates Three-Day Clock's Hour Digit To Above the Sun + Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Draws Three-Day Clock's Hour Digit Above the Sun + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); + + // Colours the Three-Day Clocks's Hour Digit Above the Sun + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); + + /** + * Section: Draws Three-Day Clock's Hour Digit Above the Moon + */ + + // Rotates Three-Day Clock's Hour Digit To Above the Moon + Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateZF(-sp1CC, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Draws Three-Day Clock's Hour Digit Above the Moon + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); + + // Colours the Three-Day Clocks's Hour Digit Above the Moon + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); + + gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor); + + // Final Hours + if ((CURRENT_DAY >= 4) || + ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= (CLOCK_TIME(0, 0) + 5)) && + (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) { + if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) { + // The Final Hours clock will flash red + + colorStep = ABS_ALT(sFinalHoursClockDigitsRed - + sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockDigitsRed >= + sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockDigitsRed -= colorStep; } else { - /** - * Draw Three-Day Clock's Diamond - */ - gDPPipeSync(OVERLAY_DISP++); - - // Time is slowed down to half speed with inverted song of time - if (gSaveContext.save.timeSpeedOffset == -2) { - // Clock diamond is blue and flashes white - colorStep = ABS_ALT(D_801BFBCC - D_801BFBEC[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBCC >= D_801BFBEC[D_801BFBE8]) { - D_801BFBCC -= colorStep; - } else { - D_801BFBCC += colorStep; - } - - colorStep = ABS_ALT(D_801BFBD0 - D_801BFBF0[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBD0 >= D_801BFBF0[D_801BFBE8]) { - D_801BFBD0 -= colorStep; - } else { - D_801BFBD0 += colorStep; - } - - colorStep = ABS_ALT(D_801BFBD4 - D_801BFBF4[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBD4 >= D_801BFBF4[D_801BFBE8]) { - D_801BFBD4 -= colorStep; - } else { - D_801BFBD4 += colorStep; - } - - colorStep = ABS_ALT(D_801BFBD8 - D_801BFBF8[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBD8 >= D_801BFBF8[D_801BFBE8]) { - D_801BFBD8 -= colorStep; - } else { - D_801BFBD8 += colorStep; - } - - colorStep = ABS_ALT(D_801BFBDC - D_801BFBFC[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBDC >= D_801BFBFC[D_801BFBE8]) { - D_801BFBDC -= colorStep; - } else { - D_801BFBDC += colorStep; - } - - colorStep = ABS_ALT(D_801BFBE0 - D_801BFC00[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBE0 >= D_801BFC00[D_801BFBE8]) { - D_801BFBE0 -= colorStep; - } else { - D_801BFBE0 += colorStep; - } - - D_801BFBE4--; - - if (D_801BFBE4 == 0) { - D_801BFBCC = D_801BFBEC[D_801BFBE8]; - D_801BFBD0 = D_801BFBF0[D_801BFBE8]; - D_801BFBD4 = D_801BFBF4[D_801BFBE8]; - D_801BFBD8 = D_801BFBF8[D_801BFBE8]; - D_801BFBDC = D_801BFBFC[D_801BFBE8]; - D_801BFBE0 = D_801BFC00[D_801BFBE8]; - D_801BFBE4 = 15; - D_801BFBE8 ^= 1; - } - - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BFBCC, D_801BFBD0, 255, sThreeDayClockAlpha); - gDPSetEnvColor(OVERLAY_DISP++, D_801BFBD8, D_801BFBDC, D_801BFBE0, 0); - } else { - // Clock diamond is green for regular timeSpeedOffset - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha); - } - - OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40, - 32, 1 << 10, 1 << 10); - - /** - * Draw Three-Day Clock's Day-Number over Diamond - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - - OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27, - 137, 192, 48, 27, 1 << 10, 1 << 10); - - /** - * Draw Three-Day Clock's Star (for the Minute Tracker) - */ - gDPPipeSync(OVERLAY_DISP++); - - if (D_801BF974 != 0) { - D_801BF980 += 0.02f; - D_801BF97C += 11; - } else { - D_801BF980 -= 0.02f; - D_801BF97C -= 11; - } - - D_801BF978--; - if (D_801BF978 == 0) { - D_801BF978 = 10; - D_801BF974 ^= 1; - } - - timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); - timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; - - Gfx_SetupDL42_Overlay(play->state.gfxCtx); - - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - if (sThreeDayClockAlpha != 255) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha); - } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C); - } - - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - - Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY); - Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY); - - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 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); - gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0); + sFinalHoursClockDigitsRed += colorStep; } - /** - * Cuts off Three-Day Clock's Sun and Moon when they dip below the clock - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, - R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f); - - // determines the current hour - for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) { - if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) { - break; - } + colorStep = ABS_ALT(sFinalHoursClockFrameEnvRed - + sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvRed >= + sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvRed -= colorStep; + } else { + sFinalHoursClockFrameEnvRed += colorStep; } - /** - * Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker) - */ - time = gSaveContext.save.time; - sp1D8 = Math_SinS(time) * -40.0f; - temp_f14 = Math_CosS(time) * -34.0f; - - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha); - - Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0); - - OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0); - - /** - * Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker) - */ - sp1D8 = Math_SinS(time) * 40.0f; - temp_f14 = Math_CosS(time) * 34.0f; - - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha); - - Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0); - - OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0); - - /** - * Cuts off Three-Day Clock's Hour Digits when they dip below the clock - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, - R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f); - - /** - * Draws Three-Day Clock's Hour Digit Above the Sun - */ - sp1CC = gSaveContext.save.time * 0.000096131f; - - // Rotates Three-Day Clock's Hour Digit To Above the Sun - Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - // Draws Three-Day Clock's Hour Digit Above the Sun - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0); - - OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); - - // Colours the Three-Day Clocks's Hour Digit Above the Sun - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); - - /** - * Draws Three-Day Clock's Hour Digit Above the Moon - */ - // Rotates Three-Day Clock's Hour Digit To Above the Moon - Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - Matrix_RotateZF(-sp1CC, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - // Draws Three-Day Clock's Hour Digit Above the Moon - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0); - - OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); - - // Colours the Three-Day Clocks's Hour Digit Above the Moon - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); - - gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor); - - // Final Hours - if ((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && - (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) { - if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) { - // The Final Hours clock will flash red - - colorStep = - ABS_ALT(sFinalHoursClockDigitsRed - D_801BFC04[sFinalHoursClockColorTargetIndex]) / + colorStep = ABS_ALT(sFinalHoursClockFrameEnvGreen - + sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]) / sFinalHoursClockColorTimer; - if (sFinalHoursClockDigitsRed >= D_801BFC04[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockDigitsRed -= colorStep; - } else { - sFinalHoursClockDigitsRed += colorStep; - } - - colorStep = - ABS_ALT(sFinalHoursClockFrameEnvRed - D_801BFC08[sFinalHoursClockColorTargetIndex]) / - sFinalHoursClockColorTimer; - if (sFinalHoursClockFrameEnvRed >= D_801BFC08[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockFrameEnvRed -= colorStep; - } else { - sFinalHoursClockFrameEnvRed += colorStep; - } - - colorStep = - ABS_ALT(sFinalHoursClockFrameEnvGreen - D_801BFC0C[sFinalHoursClockColorTargetIndex]) / - sFinalHoursClockColorTimer; - if (sFinalHoursClockFrameEnvGreen >= D_801BFC0C[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockFrameEnvGreen -= colorStep; - } else { - sFinalHoursClockFrameEnvGreen += colorStep; - } - - colorStep = - ABS_ALT(sFinalHoursClockFrameEnvBlue - D_801BFC10[sFinalHoursClockColorTargetIndex]) / - sFinalHoursClockColorTimer; - if (sFinalHoursClockFrameEnvBlue >= D_801BFC10[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockFrameEnvBlue -= colorStep; - } else { - sFinalHoursClockFrameEnvBlue += colorStep; - } - - sFinalHoursClockColorTimer--; - - if (sFinalHoursClockColorTimer == 0) { - sFinalHoursClockDigitsRed = D_801BFC04[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockFrameEnvRed = D_801BFC08[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockFrameEnvGreen = D_801BFC0C[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockFrameEnvBlue = D_801BFC10[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockColorTimer = 6; - sFinalHoursClockColorTargetIndex ^= 1; - } - } - - sp1E6 = sThreeDayClockAlpha; - if (sp1E6 != 0) { - sp1E6 = 255; - } - - Gfx_SetupDL39_Overlay(play->state.gfxCtx); - - /** - * Draws Final-Hours Clock's Frame - */ - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6); - gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen, - sFinalHoursClockFrameEnvBlue, 0); - - OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202, - 80, 13, 0, 0, 0, 1 << 10, 1 << 10); - - finalHoursClockSlots[0] = 0; - - timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; - - timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash); - - // digits for hours - finalHoursClockSlots[1] = timeInMinutes / 60.0f; - finalHoursClockSlots[2] = timeInMinutes / 60.0f; - - temp = (s32)timeInMinutes % 60; - - while (finalHoursClockSlots[1] >= 10) { - finalHoursClockSlots[0]++; - finalHoursClockSlots[1] -= 10; - } - - // digits for minutes - finalHoursClockSlots[3] = 0; - finalHoursClockSlots[4] = temp; - - while (finalHoursClockSlots[4] >= 10) { - finalHoursClockSlots[3]++; - finalHoursClockSlots[4] -= 10; - } - - // digits for seconds - finalHoursClockSlots[6] = 0; - finalHoursClockSlots[7] = - timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) + - (((void)0, temp) * ((f32)0x10000 / (24 * 60)))); - - while (finalHoursClockSlots[7] >= 10) { - finalHoursClockSlots[6]++; - finalHoursClockSlots[7] -= 10; - } - - // Colon separating hours from minutes and minutes from seconds - finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10; - - /** - * Draws Final-Hours Clock's Digits - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6); - gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0); - - for (sp1C6 = 0; sp1C6 < 8; sp1C6++) { - index = D_801BFC40[sp1C6]; - - OVERLAY_DISP = - Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]], - 8, 8, index, 205, 8, 8, 1 << 10, 1 << 10); - } + if (sFinalHoursClockFrameEnvGreen >= + sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvGreen -= colorStep; + } else { + sFinalHoursClockFrameEnvGreen += colorStep; } + + colorStep = ABS_ALT(sFinalHoursClockFrameEnvBlue - + sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvBlue >= + sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvBlue -= colorStep; + } else { + sFinalHoursClockFrameEnvBlue += colorStep; + } + + sFinalHoursClockColorTimer--; + + if (sFinalHoursClockColorTimer == 0) { + sFinalHoursClockDigitsRed = sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvRed = + sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvGreen = + sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvBlue = + sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockColorTimer = 6; + sFinalHoursClockColorTargetIndex ^= 1; + } + } + + sp1E6 = sThreeDayClockAlpha; + if (sp1E6 != 0) { + sp1E6 = 255; + } + + Gfx_SetupDL39_Overlay(play->state.gfxCtx); + + /** + * Section: Draws Final-Hours Clock's Frame + */ + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6); + gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen, + sFinalHoursClockFrameEnvBlue, 0); + + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202, 80, 13, 0, + 0, 0, 1 << 10, 1 << 10); + + timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; + timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash); + + // digits for hours + finalHoursClockSlots[0] = 0; + finalHoursClockSlots[1] = timeInMinutes / 60.0f; + finalHoursClockSlots[2] = timeInMinutes / 60.0f; + + while (finalHoursClockSlots[1] >= 10) { + finalHoursClockSlots[0]++; + finalHoursClockSlots[1] -= 10; + } + + // digits for minutes + finalHoursClockSlots[3] = 0; + finalHoursClockSlots[4] = (s32)timeInMinutes % 60; + finalHoursClockSlots[5] = (s32)timeInMinutes % 60; + + while (finalHoursClockSlots[4] >= 10) { + finalHoursClockSlots[3]++; + finalHoursClockSlots[4] -= 10; + } + + // digits for seconds + finalHoursClockSlots[6] = 0; + finalHoursClockSlots[7] = + timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) + + (finalHoursClockSlots[5] * ((f32)0x10000 / (24 * 60)))); + + while (finalHoursClockSlots[7] >= 10) { + finalHoursClockSlots[6]++; + finalHoursClockSlots[7] -= 10; + } + + // Colon separating hours from minutes and minutes from seconds + finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10; + + /** + * Section: Draws Final-Hours Clock's Digits + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6); + gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0); + + for (sp1C6 = 0; sp1C6 < 8; sp1C6++) { + index = sFinalHoursDigitSlotPosXOffset[sp1C6]; + + OVERLAY_DISP = + Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]], 8, 8, + index, 205, 8, 8, 1 << 10, 1 << 10); } } } } + CLOSE_DISPS(play->state.gfxCtx); } -#else -s16 sThreeDayClockAlpha = 255; -s16 D_801BFB30 = 0; -s16 D_801BFB34 = 0; -u16 sThreeDayClockHours[] = { - CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0), - CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0), - CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0), - CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), - CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1, -}; -TexturePtr sThreeDayClockHourTextures[] = { - gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, - gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, - gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, - gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, - gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, - gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, -}; -s16 D_801BFBCC = 0; // color R -s16 D_801BFBD0 = 155; // color G -s16 D_801BFBD4 = 255; -s16 D_801BFBD8 = 0; -s16 D_801BFBDC = 0; -s16 D_801BFBE0 = 0; -s16 D_801BFBE4 = 0xF; -u32 D_801BFBE8 = 0; -s16 D_801BFBEC[] = { 100, 0 }; -s16 D_801BFBF0[] = { 205, 155 }; -s16 D_801BFBF4[] = { 255, 255 }; -s16 D_801BFBF8[] = { 30, 0 }; -s16 D_801BFBFC[] = { 30, 0 }; -s16 D_801BFC00[] = { 100, 0 }; -s16 D_801BFC04[] = { 255, 0 }; -s16 D_801BFC08[] = { 100, 0 }; -s16 D_801BFC0C[] = { 30, 0 }; -s16 D_801BFC10[] = { 100, 0 }; -TexturePtr sFinalHoursDigitTextures[] = { - gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex, - gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex, - gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex, -}; -s16 D_801BFC40[] = { - 127, 136, 144, 151, 160, 168, 175, 184, -}; -void Interface_DrawClock(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawClock.s") -#endif void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType) { InterfaceContext* interfaceCtx = &play->interfaceCtx; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 240ea9679..26cfb7a59 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1114,30 +1114,30 @@ 0x801BFB1C:("sMagicArrowEffectsG","UNK_TYPE1","",0x1), 0x801BFB24:("sMagicArrowEffectsB","UNK_TYPE1","",0x1), 0x801BFB2C:("sThreeDayClockAlpha","UNK_TYPE2","",0x2), - 0x801BFB30:("D_801BFB30","UNK_TYPE2","",0x2), - 0x801BFB34:("D_801BFB34","UNK_TYPE2","",0x2), + 0x801BFB30:("sClockAlphaTimer1","UNK_TYPE2","",0x2), + 0x801BFB34:("sClockAlphaTimer2","UNK_TYPE2","",0x2), 0x801BFB38:("sThreeDayClockHours","UNK_TYPE1","",0x1), 0x801BFB6C:("sThreeDayClockHourTextures","UNK_TYPE1","",0x1), - 0x801BFBCC:("D_801BFBCC","UNK_TYPE2","",0x2), - 0x801BFBD0:("D_801BFBD0","UNK_TYPE2","",0x2), - 0x801BFBD4:("D_801BFBD4","UNK_TYPE2","",0x2), - 0x801BFBD8:("D_801BFBD8","UNK_TYPE2","",0x2), - 0x801BFBDC:("D_801BFBDC","UNK_TYPE2","",0x2), - 0x801BFBE0:("D_801BFBE0","UNK_TYPE2","",0x2), - 0x801BFBE4:("D_801BFBE4","UNK_TYPE2","",0x2), - 0x801BFBE8:("D_801BFBE8","UNK_TYPE2","",0x2), - 0x801BFBEC:("D_801BFBEC","UNK_TYPE1","",0x1), - 0x801BFBF0:("D_801BFBF0","UNK_TYPE1","",0x1), - 0x801BFBF4:("D_801BFBF4","UNK_TYPE1","",0x1), - 0x801BFBF8:("D_801BFBF8","UNK_TYPE1","",0x1), - 0x801BFBFC:("D_801BFBFC","UNK_TYPE1","",0x1), - 0x801BFC00:("D_801BFC00","UNK_TYPE1","",0x1), - 0x801BFC04:("D_801BFC04","UNK_TYPE1","",0x1), - 0x801BFC08:("D_801BFC08","UNK_TYPE1","",0x1), - 0x801BFC0C:("D_801BFC0C","UNK_TYPE1","",0x1), - 0x801BFC10:("D_801BFC10","UNK_TYPE1","",0x1), + 0x801BFBCC:("sClockInvDiamondPrimRed","UNK_TYPE2","",0x2), + 0x801BFBD0:("sClockInvDiamondPrimGreen","UNK_TYPE2","",0x2), + 0x801BFBD4:("sClockInvDiamondPrimBlue","UNK_TYPE2","",0x2), + 0x801BFBD8:("sClockInvDiamondEnvRed","UNK_TYPE2","",0x2), + 0x801BFBDC:("sClockInvDiamondEnvGreen","UNK_TYPE2","",0x2), + 0x801BFBE0:("sClockInvDiamondEnvBlue","UNK_TYPE2","",0x2), + 0x801BFBE4:("sClockInvDiamondTimer","UNK_TYPE2","",0x2), + 0x801BFBE8:("sClockInvDiamondTargetIndex","UNK_TYPE2","",0x2), + 0x801BFBEC:("sClockInvDiamondPrimRedTargets","UNK_TYPE1","",0x1), + 0x801BFBF0:("sClockInvDiamondPrimGreenTargets","UNK_TYPE1","",0x1), + 0x801BFBF4:("sClockInvDiamondPrimBlueTargets","UNK_TYPE1","",0x1), + 0x801BFBF8:("sClockInvDiamondEnvRedTargets","UNK_TYPE1","",0x1), + 0x801BFBFC:("sClockInvDiamondEnvGreenTargets","UNK_TYPE1","",0x1), + 0x801BFC00:("sClockInvDiamondEnvBlueTargets","UNK_TYPE1","",0x1), + 0x801BFC04:("sFinalHoursClockDigitsRedTargets","UNK_TYPE1","",0x1), + 0x801BFC08:("sFinalHoursClockFrameEnvRedTargets","UNK_TYPE1","",0x1), + 0x801BFC0C:("sFinalHoursClockFrameEnvGreenTargets","UNK_TYPE1","",0x1), + 0x801BFC10:("sFinalHoursClockFrameEnvBlueTargets","UNK_TYPE1","",0x1), 0x801BFC14:("sFinalHoursDigitTextures","UNK_TYPE1","",0x1), - 0x801BFC40:("D_801BFC40","UNK_TYPE1","",0x1), + 0x801BFC40:("sFinalHoursDigitSlotPosXOffset","UNK_TYPE1","",0x1), 0x801BFC50:("sPerfectLettersType1OffScreenAngles","UNK_TYPE2","",0x2), 0x801BFC60:("sPerfectLettersType1PrimColorTargets","s16","[6]",0xC), 0x801BFC6C:("sPerfectLettersType2SpellingOffsetsX","UNK_TYPE4","",0x4), From a995e4cf6181bab778b89d073a2aa67860d82721 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Fri, 2 Jun 2023 17:50:57 +0200 Subject: [PATCH 43/51] ovl_Eff_Stk decompiled (#1265) * ovl_Eff_Stk decompiled * ovl_Eff_Stk improvements * ovl_Eff_Stk forgot to remove variables * ovl_Eff_Stk improvements --- spec | 3 +- src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c | 77 ++++++++++++++++++--- src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h | 4 +- 3 files changed, 73 insertions(+), 11 deletions(-) diff --git a/spec b/spec index 12fce05ce..601a46f40 100644 --- a/spec +++ b/spec @@ -4602,8 +4602,7 @@ beginseg name "ovl_Eff_Stk" compress include "build/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.o" - include "build/data/ovl_Eff_Stk/ovl_Eff_Stk.data.o" - include "build/data/ovl_Eff_Stk/ovl_Eff_Stk.reloc.o" + include "build/src/overlays/actors/ovl_Eff_Stk/ovl_Eff_Stk_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c index 4d66cc827..88c604c5e 100644 --- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c +++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c @@ -5,6 +5,7 @@ */ #include "z_eff_stk.h" +#include "objects/object_stk2/object_stk2.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -15,7 +16,8 @@ void EffStk_Destroy(Actor* thisx, PlayState* play); void EffStk_Update(Actor* thisx, PlayState* play); void EffStk_Draw(Actor* thisx, PlayState* play); -#if 0 +void func_80BF0DE0(EffStk* this, PlayState* play); + ActorInit Eff_Stk_InitVars = { ACTOR_EFF_STK, ACTORCAT_ITEMACTION, @@ -28,16 +30,75 @@ ActorInit Eff_Stk_InitVars = { (ActorFunc)EffStk_Draw, }; -#endif +void EffStk_Init(Actor* thisx, PlayState* play) { + EffStk* this = THIS; -extern UNK_TYPE D_06009F60; + Actor_SetScale(&this->actor, 0.2f); + this->actionFunc = func_80BF0DE0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Init.s") +void EffStk_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Destroy.s") +void func_80BF0DE0(EffStk* this, PlayState* play) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_512)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_512)]->id) { + case 2: + this->actor.draw = EffStk_Draw; + if (this->unk146 < 0x3C00) { + this->unk146 += 0x400; + this->unk148 = Math_SinS(this->unk146) * -630.0f; + } + this->unk144++; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/func_80BF0DE0.s") + case 3: + this->actor.draw = EffStk_Draw; + if (this->unk146 < 0x3C00) { + this->unk146 += 0x400; + this->unk148 = Math_SinS(this->unk146) * -630.0f; + } + this->unk144--; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Update.s") + default: + this->actor.draw = NULL; + this->unk146 = 0; + this->unk148 = 0.0f; + break; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Draw.s") +void EffStk_Update(Actor* thisx, PlayState* play) { + EffStk* this = THIS; + + this->actionFunc(this, play); +} + +void EffStk_Draw(Actor* thisx, PlayState* play) { + EffStk* this = THIS; + s32 pad; + Camera* activeCam = GET_ACTIVE_CAM(play); + Vec3f eye = activeCam->eye; + Vec3f quakeOffset; + + Camera_GetQuakeOffset(&quakeOffset, activeCam); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); + Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Translate(0.0f, 0.0f, this->unk148, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + AnimatedMat_DrawAlphaStep(play, Lib_SegmentedToVirtual(object_stk2_Matanimheader_009F60), 1.0f, this->unk144); + gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE); + gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE); + gSPDisplayList(POLY_XLU_DISP++, object_stk2_DL_008920); + gSPDisplayList(POLY_XLU_DISP++, object_stk2_DL_008A38); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h index 4b2b84783..03b6660d2 100644 --- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h +++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h @@ -9,7 +9,9 @@ typedef void (*EffStkActionFunc)(struct EffStk*, PlayState*); typedef struct EffStk { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x8]; + /* 0x144 */ s16 unk144; + /* 0x146 */ s16 unk146; + /* 0x148 */ f32 unk148; /* 0x14C */ EffStkActionFunc actionFunc; } EffStk; // size = 0x150 From 47bc7c12e2d28b8d8ed1cff8df9c17395aefce80 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 5 Jun 2023 05:43:12 +1000 Subject: [PATCH 44/51] Misc Cleanup (#1257) * a lot of brackets, and some other things * oops * another bracket * check flag all * just a few more... * PR suggestions * PR comment * pr * one more bracket --- include/variables.h | 24 --- src/audio/code_8019AF00.c | 6 +- src/audio/lib/effects.c | 2 +- src/audio/lib/heap.c | 8 +- src/audio/lib/load.c | 10 +- src/audio/lib/playback.c | 8 +- src/boot_O2/__osMalloc.c | 4 +- src/boot_O2/system_heap.c | 2 +- src/code/PreRender.c | 2 +- src/code/jpegutils.c | 4 +- src/code/sched.c | 31 ++- src/code/z_DLF.c | 2 +- src/code/z_actor.c | 25 +-- src/code/z_camera.c | 5 +- src/code/z_collision_check.c | 124 ++++++------ src/code/z_fireobj.c | 1 + src/code/z_lifemeter.c | 8 +- src/code/z_lights.c | 12 +- src/code/z_play.c | 2 +- src/code/z_player_lib.c | 12 +- src/code/z_room.c | 2 +- src/code/z_sub_s.c | 12 +- src/libultra/io/pfsfilestate.c | 2 +- src/libultra/os/seteventmesg.c | 2 +- src/libultra/rmon/xldtob.c | 14 +- src/libultra/rmon/xlitob.c | 6 +- src/libultra/rmon/xprintf.c | 2 +- src/libultra/voice/voicegetstatus.c | 2 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 14 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 1 + .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 + .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 2 + .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 22 +-- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 2 +- .../actors/ovl_Bg_Icefloe/z_bg_icefloe.c | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 6 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 2 +- .../actors/ovl_Bg_Open_Spot/z_bg_open_spot.c | 1 + src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 5 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 2 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 5 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 11 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 8 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 1 + .../ovl_En_Attack_Niw/z_en_attack_niw.c | 15 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 4 + .../actors/ovl_En_Bba_01/z_en_bba_01.c | 5 + .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 1 + src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 10 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 4 + .../actors/ovl_En_Cne_01/z_en_cne_01.c | 4 + src/overlays/actors/ovl_En_Door/z_en_door.c | 6 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 2 + .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 4 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 12 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 16 +- .../ovl_En_Ending_Hero5/z_en_ending_hero5.c | 7 + src/overlays/actors/ovl_En_Fall/z_en_fall.c | 1 + src/overlays/actors/ovl_En_Fg/z_en_fg.c | 3 + src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 10 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 3 + src/overlays/actors/ovl_En_Giant/z_en_giant.c | 33 +++- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 31 ++- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 10 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 17 +- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 14 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 1 + src/overlays/actors/ovl_En_In/z_en_in.c | 178 ++++++++++++++++-- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 95 +++++----- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 107 ++++++----- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 16 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 2 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 30 ++- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 84 ++++++--- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 19 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 2 + src/overlays/actors/ovl_En_Muto/z_en_muto.c | 12 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 42 +++-- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 20 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 1 + .../ovl_En_Po_Sisters/z_en_po_sisters.c | 19 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 46 +++-- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 42 +++-- src/overlays/actors/ovl_En_St/z_en_st.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 90 +++++++-- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 29 ++- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 16 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 6 + src/overlays/actors/ovl_En_Test5/z_en_test5.c | 17 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 1 + src/overlays/actors/ovl_En_Tk/z_en_tk.c | 1 + .../actors/ovl_En_Torch2/z_en_torch2.c | 4 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 17 +- .../actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c | 1 + src/overlays/actors/ovl_En_Yb/z_en_yb.c | 18 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 16 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 1 + .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 8 +- src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c | 17 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 8 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 44 +++-- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 36 ++-- .../ovl_Object_Kankyo/z_object_kankyo.c | 1 + .../actors/ovl_player_actor/z_player.c | 6 +- tools/disasm/variables.txt | 8 +- 110 files changed, 1086 insertions(+), 623 deletions(-) diff --git a/include/variables.h b/include/variables.h index 24030fd99..e264a7d9b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -459,30 +459,6 @@ extern u8 D_801BDBC8; // extern UNK_TYPE1 D_801BE92C; // extern UNK_TYPE1 D_801BE944; // extern actor_init_var_func sInitChainHandlers[11]; -// extern UNK_TYPE2 sHeartsPrimColors; -// extern UNK_TYPE2 D_801BE992; -// extern UNK_TYPE2 D_801BE994; -// extern UNK_TYPE2 sHeartsEnvColors; -// extern UNK_TYPE2 D_801BE9A6; -// extern UNK_TYPE2 D_801BE9A8; -// extern UNK_TYPE2 sHeartsPrimFactors; -// extern UNK_TYPE2 sHeartsEnvFactors; -// extern UNK_TYPE2 sHeartsDDPrimColors; -// extern UNK_TYPE2 D_801BE9E2; -// extern UNK_TYPE2 D_801BE9E4; -// extern UNK_TYPE2 sHeartsDDEnvColors; -// extern UNK_TYPE2 D_801BE9F6; -// extern UNK_TYPE2 D_801BE9F8; -// extern UNK_TYPE2 sHeartsDDPrimFactors; -// extern UNK_TYPE2 D_801BEA0A; -// extern UNK_TYPE2 D_801BEA0C; -// extern UNK_TYPE2 sHeartsDDEnvFactors; -// extern UNK_TYPE2 D_801BEA1E; -// extern UNK_TYPE2 D_801BEA20; -// extern UNK_TYPE1 HeartTextures; -// extern UNK_TYPE1 HeartDDTextures; -//extern LightsPosBindFunc posBindFuncs[3]; -//extern LightsBindFunc dirBindFuncs[3]; // extern UNK_TYPE4 D_801BEAD4; // extern UNK_TYPE4 D_801BEAD8; // extern UNK_TYPE1 D_801BEAE0; diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index 287149c91..e88135b8d 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -2543,8 +2543,8 @@ void AudioOcarina_CheckSongsWithoutMusicStaff(void) { if ((u32)sOcarinaAvailableSongFlags & (1 << songIndex)) { // Loops through all possible starting indices? // Loops through the notes of the song? - for (j = 0, k = 0; j < gOcarinaSongButtons[songIndex].numButtons && k == 0 && - sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[songIndex].numButtons;) { + for (j = 0, k = 0; (j < gOcarinaSongButtons[songIndex].numButtons) && (k == 0) && + (sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[songIndex].numButtons);) { pitch = sCurOcarinaSongWithoutMusicStaff[(sOcarinaWithoutMusicStaffPos - gOcarinaSongButtons[songIndex].numButtons) + @@ -2953,7 +2953,7 @@ void AudioOcarina_SetRecordingSong(u8 isRecordingComplete) { i = sRecordSongPos; pitch = OCARINA_PITCH_NONE; - while (i != 0 && pitch == OCARINA_PITCH_NONE) { + while ((i != 0) && (pitch == OCARINA_PITCH_NONE)) { i--; pitch = recordedSong[i].pitch; } diff --git a/src/audio/lib/effects.c b/src/audio/lib/effects.c index feddf73ca..6ef8added 100644 --- a/src/audio/lib/effects.c +++ b/src/audio/lib/effects.c @@ -26,7 +26,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca for (i = 0; i < ARRAY_COUNT(channel->layers); i++) { SequenceLayer* layer = channel->layers[i]; - if (layer != NULL && layer->enabled && layer->note != NULL) { + if ((layer != NULL) && layer->enabled && (layer->note != NULL)) { if (layer->notePropertiesNeedInit) { layer->noteFreqScale = layer->freqScale * chanFreqScale; layer->noteVelocity = layer->velocitySquare2 * channel->appliedVolume; diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 0a64c0d1b..1ea26952b 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1303,8 +1303,8 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) { sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1; sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2; if (((sampleBankId1 != 0xFF) && (entry->sampleBankId == sampleBankId1)) || - ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || entry->sampleBankId == 0 || - entry->sampleBankId == 0xFE) { + ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || (entry->sampleBankId == 0) || + (entry->sampleBankId == 0xFE)) { if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) != NULL) { if (1) {} if (AudioLoad_IsFontLoadComplete(fontId) != 0) { @@ -1369,7 +1369,7 @@ void AudioHeap_DiscardSampleCaches(void) { if ((sampleBankId1 == 0xFF) && (sampleBankId2 == 0xFF)) { continue; } - if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_PERMANENT, fontId) == NULL || + if ((AudioHeap_SearchCaches(FONT_TABLE, CACHE_PERMANENT, fontId) == NULL) || !AudioLoad_IsFontLoadComplete(fontId)) { continue; } @@ -1393,7 +1393,7 @@ typedef struct { } StorageChange; void AudioHeap_ChangeStorage(StorageChange* change, Sample* sample) { - if (sample != NULL && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) && + if ((sample != NULL) && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) && ((sample->medium == MEDIUM_RAM) || (D_801FD120 != 0))) { uintptr_t startAddr = change->oldAddr; uintptr_t endAddr = change->oldAddr + change->size; diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index 3a4f1c1e0..7df46952b 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -138,13 +138,13 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI s32 bufferPos; u32 i; - if (arg2 != 0 || *dmaIndexRef >= gAudioCtx.sampleDmaListSize1) { + if ((arg2 != 0) || (*dmaIndexRef >= gAudioCtx.sampleDmaListSize1)) { for (i = gAudioCtx.sampleDmaListSize1; i < gAudioCtx.sampleDmaCount; i++) { dma = &gAudioCtx.sampleDmas[i]; bufferPos = devAddr - dma->devAddr; - if (0 <= bufferPos && ((u32)bufferPos <= dma->size - size)) { + if ((0 <= bufferPos) && ((u32)bufferPos <= (dma->size - size))) { // We already have a DMA request for this memory range. - if (dma->ttl == 0 && gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos) { + if ((dma->ttl == 0) && (gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos)) { // Move the DMA out of the reuse queue, by swapping it with the // read pos, and then incrementing the read pos. if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue2RdPos) { @@ -1905,7 +1905,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData } gAudioCtx.numUsedSamples = 0; - if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) { + if ((gAudioCtx.preloadSampleStackTop != 0) && !preloadInProgress) { topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1]; sample = topPreload->sample; nChunks = (sample->size >> 12) + 1; @@ -2160,7 +2160,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo* } gAudioCtx.numUsedSamples = 0; - if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) { + if ((gAudioCtx.preloadSampleStackTop != 0) && !preloadInProgress) { topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1]; sample = topPreload->sample; nChunks = (sample->size >> 12) + 1; diff --git a/src/audio/lib/playback.c b/src/audio/lib/playback.c index deb6e82b9..678e01089 100644 --- a/src/audio/lib/playback.c +++ b/src/audio/lib/playback.c @@ -597,7 +597,7 @@ s32 AudioPlayback_BuildSyntheticWave(Note* note, SequenceLayer* layer, s32 waveI } freqScale = layer->freqScale; - if (layer->portamento.mode != 0 && 0.0f < layer->portamento.extent) { + if ((layer->portamento.mode != 0) && (0.0f < layer->portamento.extent)) { freqScale *= (layer->portamento.extent + 1.0f); } @@ -906,7 +906,7 @@ Note* AudioPlayback_AllocNoteFromActive(NotePool* pool, SequenceLayer* layer) { aPriority = aNote->playbackState.priority; } - if (rNote == NULL && aNote == NULL) { + if ((rNote == NULL) && (aNote == NULL)) { return NULL; } @@ -928,8 +928,8 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) { if (policy & 1) { note = layer->note; - if (note != NULL && note->playbackState.prevParentLayer == layer && - note->playbackState.wantedParentLayer == NO_LAYER) { + if ((note != NULL) && (note->playbackState.prevParentLayer == layer) && + (note->playbackState.wantedParentLayer == NO_LAYER)) { AudioPlayback_NoteReleaseAndTakeOwnership(note, layer); AudioPlayback_AudioListRemove(¬e->listItem); AudioScript_AudioListPushBack(¬e->listItem.pool->releasing, ¬e->listItem); diff --git a/src/boot_O2/__osMalloc.c b/src/boot_O2/__osMalloc.c index 24fa6d39e..71a5a5ba3 100644 --- a/src/boot_O2/__osMalloc.c +++ b/src/boot_O2/__osMalloc.c @@ -275,7 +275,7 @@ void __osFree(Arena* arena, void* ptr) { node = (ArenaNode*)((uintptr_t)ptr - sizeof(ArenaNode)); - if (ptr != NULL && node->magic == NODE_MAGIC && !node->isFree) { + if ((ptr != NULL) && (node->magic == NODE_MAGIC) && !node->isFree) { next = node->next; prev = node->prev; node->isFree = true; @@ -297,7 +297,7 @@ void __osFree(Arena* arena, void* ptr) { // Checks if the previous node is contiguous to the current node and if it isn't currently allocated. Then merge // the two nodes into one. - if (prev != NULL && prev->isFree && (uintptr_t)node == (uintptr_t)prev + sizeof(ArenaNode) + prev->size) { + if ((prev != NULL) && prev->isFree && ((uintptr_t)node == (uintptr_t)prev + sizeof(ArenaNode) + prev->size)) { if (next != NULL) { next->prev = prev; } diff --git a/src/boot_O2/system_heap.c b/src/boot_O2/system_heap.c index 66e53dc12..365d94596 100644 --- a/src/boot_O2/system_heap.c +++ b/src/boot_O2/system_heap.c @@ -61,7 +61,7 @@ void* SystemHeap_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc blk = SystemHeap_Malloc(nBlk * blkSize); } - if (blk != NULL && blockFunc != NULL) { + if ((blk != NULL) && (blockFunc != NULL)) { uintptr_t pos = blk; for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) { diff --git a/src/code/PreRender.c b/src/code/PreRender.c index 172659cf7..c9f279e75 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -403,7 +403,7 @@ void PreRender_ApplyAntiAliasingFilter(PreRender* this) { * Applies filters to the framebuffer prerender to make it look smoother */ void PreRender_ApplyFilters(PreRender* this) { - if (this->cvgSave == NULL || this->fbufSave == NULL) { + if ((this->cvgSave == NULL) || (this->fbufSave == NULL)) { this->unk_4D = 0; } else { this->unk_4D = 1; diff --git a/src/code/jpegutils.c b/src/code/jpegutils.c index 904643f46..fbf6c69c2 100644 --- a/src/code/jpegutils.c +++ b/src/code/jpegutils.c @@ -86,7 +86,7 @@ u32 JpegUtils_ProcessHuffmanTableImpl(u8* data, JpegHuffmanTable* ht, u8* codesL s32 temp; ret = count; - if (count == 0 || (isAc && count > 0x100) || (!isAc && count > 0x10)) { + if ((count == 0) || (isAc && (count > 0x100)) || (!isAc && (count > 0x10))) { return 0; } if (ret != JpegUtils_GetHuffmanCodes(codesLengths, codes)) { @@ -141,7 +141,7 @@ u32 JpegUtils_ProcessHuffmanTableImplOld(u8* dht, JpegHuffmanTableOld* ht, u8* c count2 = count = JpegUtils_ParseHuffmanCodesLengths(dht, codesLengths); - if (count == 0 || (isAc && count > 0x100) || (!isAc && count > 0x10)) { + if ((count == 0) || (isAc && (count > 0x100)) || (!isAc && (count > 0x10))) { return true; } diff --git a/src/code/sched.c b/src/code/sched.c index 9e2016833..c06eb41ba 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -25,7 +25,7 @@ void Sched_SwapFramebuffer(CfbInfo* cfbInfo) { osViSwapBuffer(cfbInfo->swapBuffer); cfbInfo->updateRate2 = cfbInfo->updateRate; - if (SREG(62) == 0 && cfbInfo->viMode != NULL) { + if ((SREG(62) == 0) && (cfbInfo->viMode != NULL)) { D_80096B20 = one; osViSetMode(cfbInfo->viMode); osViSetSpecialFeatures(cfbInfo->features); @@ -68,7 +68,7 @@ void Sched_HandleAudioCancel(SchedContext* sched) { // AUDIO SP Cancel osSyncPrintf("AUDIO SP キャンセルします\n"); - if (sched->curRSPTask != NULL && sched->curRSPTask->list.t.type == M_AUDTASK) { + if ((sched->curRSPTask != NULL) && (sched->curRSPTask->list.t.type == M_AUDTASK)) { if (!(HW_REG(SP_STATUS_REG, u32) & SP_STATUS_HALT)) { // Attempts to stop AUDIO SP osSyncPrintf("AUDIO SP止めようとします\n"); @@ -130,7 +130,7 @@ void Sched_HandleGfxCancel(SchedContext* sched) { // GRAPH SP Cancel osSyncPrintf("GRAPH SP キャンセルします\n"); - if (sched->curRSPTask != NULL && sched->curRSPTask->list.t.type == M_GFXTASK) { + if ((sched->curRSPTask != NULL) && (sched->curRSPTask->list.t.type == M_GFXTASK)) { if (!(HW_REG(SP_STATUS_REG, u32) & SP_STATUS_HALT)) { // GRAPH SP tries to stop osSyncPrintf("GRAPH SP止めようとします\n"); @@ -227,7 +227,8 @@ s32 Sched_TaskCheckFramebuffers(SchedContext* sched, OSScTask* task) { void* nextFB = osViGetNextFramebuffer(); void* curFB = osViGetCurrentFramebuffer(); - if (task == NULL || sched->pendingSwapBuf1 != NULL || (curFB == TASK_FRAMEBUFFER(task)->fb1 && curFB != nextFB)) { + if ((task == NULL) || (sched->pendingSwapBuf1 != NULL) || + ((curFB == TASK_FRAMEBUFFER(task)->fb1) && (curFB != nextFB))) { return 0; } return 1; @@ -241,7 +242,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 OSScTask* gfxTask = sched->gfxListHead; OSScTask* audioTask = sched->audioListHead; - if ((ret & OS_SC_SP) && sched->audioListHead != NULL) { + if ((ret & OS_SC_SP) && (sched->audioListHead != NULL)) { *spTask = audioTask; ret &= ~OS_SC_SP; sched->audioListHead = sched->audioListHead->next; @@ -249,7 +250,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 sched->audioListTail = NULL; } } else if (gfxTask != NULL) { - if (gfxTask->state & OS_SC_YIELDED || !(gfxTask->flags & OS_SC_NEEDS_RDP)) { + if ((gfxTask->state & OS_SC_YIELDED) || !(gfxTask->flags & OS_SC_NEEDS_RDP)) { if (ret & OS_SC_SP) { *spTask = gfxTask; ret &= ~OS_SC_SP; @@ -259,7 +260,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 } } } else if (ret == (OS_SC_SP | OS_SC_DP)) { - if (TASK_FRAMEBUFFER(gfxTask) == NULL || Sched_TaskCheckFramebuffers(sched, gfxTask)) { + if ((TASK_FRAMEBUFFER(gfxTask) == NULL) || Sched_TaskCheckFramebuffers(sched, gfxTask)) { *spTask = *dpTask = gfxTask; ret &= ~(OS_SC_SP | OS_SC_DP); sched->gfxListHead = sched->gfxListHead->next; @@ -275,7 +276,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 void Sched_TaskUpdateFramebuffer(SchedContext* sched, OSScTask* task) { sched->pendingSwapBuf1 = TASK_FRAMEBUFFER(task); - if (sched->curBuf != NULL && sched->curBuf->updateRate2 > 0) { + if ((sched->curBuf != NULL) && (sched->curBuf->updateRate2 > 0)) { return; } Sched_RetraceUpdateFramebuffer(sched, sched->pendingSwapBuf1); @@ -314,7 +315,7 @@ void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask) { return; } // Write back the data cache to ensure imminent SP DMA does not miss anything - if (spTask->list.t.type != M_AUDTASK && !(spTask->state & OS_SC_YIELDED)) { + if ((spTask->list.t.type != M_AUDTASK) && !(spTask->state & OS_SC_YIELDED)) { osWritebackDCacheAll(); } spTask->state &= ~(OS_SC_YIELD | OS_SC_YIELDED); @@ -327,9 +328,11 @@ void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask) { case M_AUDTASK: sRSPAudioStartTime = time; break; + case M_GFXTASK: sRSPGFXStartTime = time; break; + default: if (1) {} sRSPOtherStartTime = time; @@ -366,7 +369,7 @@ void Sched_HandleEntry(SchedContext* sched) { Sched_QueueTask(sched, msg); } // If there is an audio task pending and an RSP task is running, yield the current task. - if (sched->audioListHead != NULL && sched->curRSPTask != NULL) { + if ((sched->audioListHead != NULL) && (sched->curRSPTask != NULL)) { Sched_Yield(sched); return; } @@ -421,9 +424,11 @@ void Sched_HandleRSPDone(SchedContext* sched) { case M_AUDTASK: gRSPAudioTotalTime += time - sRSPAudioStartTime; break; + case M_GFXTASK: sRSPGFXTotalTime += time - sRSPGFXStartTime; break; + default: if (1) {} sRSPOtherTotalTime += time - sRSPOtherStartTime; @@ -555,15 +560,19 @@ void Sched_ThreadEntry(void* arg) { case RDP_AUDIO_CANCEL_MSG: Sched_HandleAudioCancel(sched); continue; + case RSP_GFX_CANCEL_MSG: Sched_HandleGfxCancel(sched); continue; + case ENTRY_MSG: Sched_HandleEntry(sched); continue; + case RSP_DONE_MSG: Sched_HandleRSPDone(sched); continue; + case RDP_DONE_MSG: Sched_HandleRDPDone(sched); continue; @@ -573,9 +582,11 @@ void Sched_ThreadEntry(void* arg) { case OS_SC_RETRACE_MSG: Sched_HandleRetrace(sched); continue; + case OS_SC_PRE_NMI_MSG: Sched_HandleReset(sched); continue; + case OS_SC_NMI_MSG: Sched_HandleStop(sched); continue; diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c index 020edcf27..aa5c0325d 100644 --- a/src/code/z_DLF.c +++ b/src/code/z_DLF.c @@ -46,7 +46,7 @@ void Overlay_FreeGameState(GameStateOverlay* overlayEntry) { s32 var_v0; if (overlayEntry->loadedRamAddr != NULL) { - var_v0 = overlayEntry->unk_28 != 0 ? -1 : 0; + var_v0 = (overlayEntry->unk_28 != 0) ? -1 : 0; if (var_v0 == 0) { overlayEntry->unk_14 = (uintptr_t)( (overlayEntry->unk_14 != NULL) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index c7e2c4574..82ff8ddd9 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -476,6 +476,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { Actor* actor = targetCtx->targetedActor; OPEN_DISPS(play->state.gfxCtx); + if (targetCtx->unk48 != 0) { TargetContextEntry* entry; s16 alpha = 255; @@ -598,10 +599,10 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS targetCtx->unk_94 = sp68; } - if (targetCtx->unk8C != 0) { + if (targetCtx->unk8C != NULL) { sp68 = targetCtx->unk8C; targetCtx->unk8C = NULL; - } else if (actor != 0) { + } else if (actor != NULL) { sp68 = actor; } @@ -640,7 +641,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS Target_SetColors(targetCtx, sp68, category, play); } - if (actor != NULL && targetCtx->unk4B == 0) { + if ((actor != NULL) && (targetCtx->unk4B == 0)) { Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW); if ((projectedPos.z <= 0.0f) || (fabsf(projectedPos.x * invW) >= 1.0f) || (fabsf(projectedPos.y * invW) >= 1.0f)) { @@ -2028,10 +2029,10 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 x PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000)) && (Player_GetExplosiveHeld(player) <= PLAYER_EXPLOSIVE_NONE)) { if ((actor->xzDistToPlayer <= xzRange) && (fabsf(actor->playerHeightRel) <= fabsf(yRange))) { - if ((getItemId == GI_MASK_CIRCUS_LEADER || getItemId == GI_PENDANT_OF_MEMORIES || - getItemId == GI_DEED_LAND || - ((player->heldActor != NULL || actor == player->talkActor) && - (getItemId > GI_NONE && getItemId < GI_MAX))) || + if (((getItemId == GI_MASK_CIRCUS_LEADER) || (getItemId == GI_PENDANT_OF_MEMORIES) || + (getItemId == GI_DEED_LAND) || + (((player->heldActor != NULL) || (actor == player->talkActor)) && + ((getItemId > GI_NONE) && (getItemId < GI_MAX)))) || !(player->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000))) { s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y; s32 absYawDiff = ABS_ALT(yawDiff); @@ -2386,12 +2387,12 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { } else { if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { Actor_Kill(actor); - } else if (((params->requiredActorFlag) && !(actor->flags & params->requiredActorFlag)) || - ((((!params->requiredActorFlag) != 0)) && + } else if ((params->requiredActorFlag && !(actor->flags & params->requiredActorFlag)) || + (((!params->requiredActorFlag) != 0) && (!(actor->flags & ACTOR_FLAG_100000) || ((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & PLAYER_STATE1_200))) && - params->canFreezeCategory && (actor != params->talkActor) && - ((actor != params->player->heldActor)) && (actor->parent != ¶ms->player->actor))) { + params->canFreezeCategory && (actor != params->talkActor) && (actor != params->player->heldActor) && + (actor->parent != ¶ms->player->actor))) { CollisionCheck_ResetDamage(&actor->colChkInfo); } else { Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos); @@ -3195,7 +3196,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 } overlayEntry = &gActorOverlayTable[index]; - if (overlayEntry->vramStart != 0) { + if (overlayEntry->vramStart != NULL) { overlayEntry->numLoaded++; } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 7fac2a2b2..bd23308c3 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -7790,7 +7790,7 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) { break; case CAM_MODE_FOLLOWTARGET: - if (camera->target != NULL && camera->target->id != ACTOR_EN_BOOM) { + if ((camera->target != NULL) && (camera->target->id != ACTOR_EN_BOOM)) { sModeChangeFlags = CAM_CHANGE_MODE_FOLLOW_TARGET; } break; @@ -7807,6 +7807,9 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) { case CAM_MODE_HANG: sModeChangeFlags = CAM_CHANGE_MODE_4; break; + + default: + break; } // Process Current Camera Mode diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index 8bcd244bd..b7f07d14d 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -92,7 +92,8 @@ f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac) { * factors such as the ac collider's defense. */ s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo) { - if (at->actor != NULL && at->actor->id == ACTOR_EN_BOM && ac->actor != NULL && ac->actor->id == ACTOR_PLAYER) { + if ((at->actor != NULL) && (at->actor->id == ACTOR_EN_BOM) && (ac->actor != NULL) && + (ac->actor->id == ACTOR_PLAYER)) { return 8; } return atInfo->toucher.damage; @@ -1153,7 +1154,7 @@ s32 CollisionCheck_SetAT(PlayState* play, CollisionCheckContext* colCtxt, Collid } sATResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->colATCount >= ARRAY_COUNT(colCtxt->colAT)) { @@ -1179,7 +1180,7 @@ s32 CollisionCheck_SetAT_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co } sATResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->sacFlags & SAC_ON) { @@ -1213,7 +1214,7 @@ s32 CollisionCheck_SetAC(PlayState* play, CollisionCheckContext* colCtxt, Collid } sACResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->colACCount >= ARRAY_COUNT(colCtxt->colAC)) { @@ -1239,7 +1240,7 @@ s32 CollisionCheck_SetAC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co } sACResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->sacFlags & SAC_ON) { @@ -1273,7 +1274,7 @@ s32 CollisionCheck_SetOC(PlayState* play, CollisionCheckContext* colCtxt, Collid } sOCResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->colOCCount >= ARRAY_COUNT(colCtxt->colOC)) { @@ -1299,7 +1300,7 @@ s32 CollisionCheck_SetOC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co } sOCResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->sacFlags & SAC_ON) { @@ -1523,7 +1524,7 @@ void CollisionCheck_RedBloodUnused(PlayState* play, Collider* collider, Vec3f* v void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos) { s32 flags = info->toucherFlags & TOUCH_SFX_NONE; - if (flags == TOUCH_SFX_NORMAL && collider->colType != COLTYPE_METAL) { + if ((flags == TOUCH_SFX_NORMAL) && (collider->colType != COLTYPE_METAL)) { EffectSsHitmark_SpawnFixedScale(play, 0, hitPos); if (collider->actor == NULL) { play_sound(NA_SE_IT_SHIELD_BOUND); @@ -1558,7 +1559,7 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll * Plays a hit sound effect for AT colliders attached to Player based on the AC element's elemType. */ s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo) { - if (at->actor != NULL && at->actor->category == ACTORCAT_PLAYER) { + if ((at->actor != NULL) && (at->actor->category == ACTORCAT_PLAYER)) { if (acInfo->elemType == ELEMTYPE_UNK0) { Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE); } else if (acInfo->elemType == ELEMTYPE_UNK1) { @@ -1652,7 +1653,7 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo return 0; } } - if ((ac->acFlags & AC_HARD) && at->actor != NULL && ac->actor != NULL) { + if ((ac->acFlags & AC_HARD) && (at->actor != NULL) && (ac->actor != NULL)) { CollisionCheck_SetBounce(at, ac); } if (!(acInfo->bumperFlags & BUMP_NO_AT_INFO)) { @@ -1683,8 +1684,8 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo acInfo->bumper.hitPos.y = hitPos->y; acInfo->bumper.hitPos.z = hitPos->z; } - if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && ac->colType != COLTYPE_METAL && ac->colType != COLTYPE_WOOD && - ac->colType != COLTYPE_HARD) { + if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && (ac->colType != COLTYPE_METAL) && (ac->colType != COLTYPE_WOOD) && + (ac->colType != COLTYPE_HARD)) { acInfo->bumperFlags |= BUMP_DRAW_HITMARK; } else { CollisionCheck_HitEffects(play, at, atInfo, ac, acInfo, hitPos); @@ -1719,7 +1720,7 @@ void CollisionCheck_AC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* co f32 overlapSize; f32 centerDist; - if (at->count > 0 && at->elements != NULL && ac->count > 0 && ac->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL) && (ac->count > 0) && (ac->elements != NULL)) { for (atElem = at->elements; atElem < &at->elements[at->count]; atElem++) { if (CollisionCheck_SkipTouch(&atElem->info)) { continue; @@ -1773,7 +1774,7 @@ void CollisionCheck_AC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCt f32 overlapSize; f32 centerDist; - if (at->count > 0 && at->elements != NULL && ac->dim.radius > 0 && ac->dim.height > 0) { + if ((at->count > 0) && (at->elements != NULL) && (ac->dim.radius > 0) && (ac->dim.height > 0)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -1822,7 +1823,7 @@ void CollisionCheck_AC_JntSphVsTris(PlayState* play, CollisionCheckContext* colC ColliderTrisElement* acElem; Vec3f hitPos; - if (at->count > 0 && at->elements != NULL && ac->count > 0 && ac->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL) && (ac->count > 0) && (ac->elements != NULL)) { for (atElem = at->elements; atElem < &at->elements[at->count]; atElem++) { if (CollisionCheck_SkipTouch(&atElem->info)) { continue; @@ -1858,7 +1859,7 @@ void CollisionCheck_AC_JntSphVsQuad(PlayState* play, CollisionCheckContext* colC Vec3f hitPos; ColliderJntSphElement* sphElem; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -1898,7 +1899,7 @@ void CollisionCheck_AC_JntSphVsSphere(PlayState* play, CollisionCheckContext* co f32 overlapSize; f32 centerDist; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -1943,7 +1944,7 @@ void CollisionCheck_AC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCt f32 centerDist; ColliderJntSphElement* sphElem; - if (ac->count > 0 && ac->elements != NULL && at->dim.radius > 0 && at->dim.height > 0) { + if ((ac->count > 0) && (ac->elements != NULL) && (at->dim.radius > 0) && (at->dim.height > 0)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -1994,7 +1995,7 @@ void CollisionCheck_AC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt, f32 overlapSize; f32 centerDist; - if (at->dim.radius > 0 && at->dim.height > 0 && ac->dim.radius > 0 && ac->dim.height > 0) { + if ((at->dim.radius > 0) && (at->dim.height > 0) && (ac->dim.radius > 0) && (ac->dim.height > 0)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2046,7 +2047,7 @@ void CollisionCheck_AC_CylVsTris(PlayState* play, CollisionCheckContext* colCtxt ColliderTrisElement* acElem; Vec3f hitPos; - if (at->dim.radius > 0 && at->dim.height > 0 && ac->count > 0 && ac->elements != NULL) { + if ((at->dim.radius > 0) && (at->dim.height > 0) && (ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2079,7 +2080,7 @@ void CollisionCheck_AC_CylVsQuad(PlayState* play, CollisionCheckContext* colCtxt ColliderCylinder* at = (ColliderCylinder*)colAT; ColliderQuad* ac = (ColliderQuad*)colAC; - if (at->dim.height > 0 && at->dim.radius > 0) { + if ((at->dim.height > 0) && (at->dim.radius > 0)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2119,7 +2120,7 @@ void CollisionCheck_AC_CylVsSphere(PlayState* play, CollisionCheckContext* colCt f32 overlapSize; f32 centerDist; - if (at->dim.radius > 0 && at->dim.height > 0) { + if ((at->dim.radius > 0) && (at->dim.height > 0)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2166,7 +2167,7 @@ void CollisionCheck_AC_TrisVsJntSph(PlayState* play, CollisionCheckContext* colC ColliderTrisElement* atElem; Vec3f hitPos; - if (ac->count > 0 && ac->elements != NULL && at->count > 0 && at->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL) && (at->count > 0) && (at->elements != NULL)) { for (acElem = ac->elements; acElem < &ac->elements[ac->count]; acElem++) { if (CollisionCheck_SkipBump(&acElem->info)) { continue; @@ -2204,7 +2205,7 @@ void CollisionCheck_AC_TrisVsCyl(PlayState* play, CollisionCheckContext* colCtxt ColliderCylinder* ac = (ColliderCylinder*)colAC; ColliderTrisElement* atElem; - if (ac->dim.radius > 0 && ac->dim.height > 0 && at->count > 0 && at->elements != NULL) { + if ((ac->dim.radius > 0) && (ac->dim.height > 0) && (at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2238,7 +2239,7 @@ void CollisionCheck_AC_TrisVsTris(PlayState* play, CollisionCheckContext* colCtx ColliderTris* ac = (ColliderTris*)colAC; ColliderTrisElement* acElem; - if (ac->count > 0 && ac->elements != NULL && at->count > 0 && at->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL) && (at->count > 0) && (at->elements != NULL)) { for (acElem = ac->elements; acElem < &ac->elements[ac->count]; acElem++) { if (CollisionCheck_SkipBump(&acElem->info)) { continue; @@ -2273,7 +2274,7 @@ void CollisionCheck_AC_TrisVsQuad(PlayState* play, CollisionCheckContext* colCtx ColliderQuad* ac = (ColliderQuad*)colAC; ColliderTrisElement* atElem; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2312,7 +2313,7 @@ void CollisionCheck_AC_TrisVsSphere(PlayState* play, CollisionCheckContext* colC ColliderSphere* ac = (ColliderSphere*)colAC; Vec3f hitPos; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2344,7 +2345,7 @@ void CollisionCheck_AC_QuadVsJntSph(PlayState* play, CollisionCheckContext* colC ColliderQuad* at = (ColliderQuad*)colAT; ColliderJntSph* ac = (ColliderJntSph*)colAC; - if (ac->count > 0 && ac->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2385,7 +2386,7 @@ void CollisionCheck_AC_QuadVsCyl(PlayState* play, CollisionCheckContext* colCtxt ColliderQuad* at = (ColliderQuad*)colAT; ColliderCylinder* ac = (ColliderCylinder*)colAC; - if (ac->dim.height > 0 && ac->dim.radius > 0) { + if ((ac->dim.height > 0) && (ac->dim.radius > 0)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2431,7 +2432,7 @@ void CollisionCheck_AC_QuadVsTris(PlayState* play, CollisionCheckContext* colCtx ColliderTris* ac = (ColliderTris*)colAC; ColliderTrisElement* acElem; - if (ac->count > 0 && ac->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2546,7 +2547,7 @@ void CollisionCheck_AC_SphereVsJntSph(PlayState* play, CollisionCheckContext* co f32 overlapSize; f32 centerDist; - if (ac->count > 0 && ac->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2739,7 +2740,7 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCt ColliderJntSphElement* element; for (element = jntSph->elements; element < &jntSph->elements[jntSph->count]; element++) { - if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && element->info.acHitInfo != NULL && + if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) && !(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2758,7 +2759,7 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCt void CollisionCheck_SetCylHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) { ColliderCylinder* cylinder = (ColliderCylinder*)collider; - if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && cylinder->info.acHitInfo != NULL && + if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && (cylinder->info.acHitInfo != NULL) && !(cylinder->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2777,7 +2778,7 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt ColliderTrisElement* element; for (element = tris->elements; element < &tris->elements[tris->count]; element++) { - if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && element->info.acHitInfo != NULL && + if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) && !(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2796,7 +2797,7 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) { ColliderQuad* quad = (ColliderQuad*)collider; - if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && quad->info.acHitInfo != NULL && + if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && (quad->info.acHitInfo != NULL) && !(quad->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2812,7 +2813,7 @@ void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt void CollisionCheck_SetSphereHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) { ColliderSphere* sphere = (ColliderSphere*)collider; - if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && sphere->info.acHitInfo != NULL && + if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && (sphere->info.acHitInfo != NULL) && !(sphere->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2837,8 +2838,8 @@ void CollisionCheck_SetHitEffects(PlayState* play, CollisionCheckContext* colCtx for (col = &colCtxt->colAC[0]; col < &colCtxt->colAC[colCtxt->colACCount]; col++) { Collider* colAC = *col; - if (colAC != NULL && (colAC->acFlags & AC_ON)) { - if (colAC->actor != NULL && colAC->actor->update == NULL) { + if ((colAC != NULL) && (colAC->acFlags & AC_ON)) { + if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) { continue; } sColChkApplyFuncs[colAC->shape](play, colCtxt, colAC); @@ -2868,12 +2869,12 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider for (col = &colCtxt->colAC[0]; col < &colCtxt->colAC[colCtxt->colACCount]; col++) { Collider* colAC = *col; - if (colAC != NULL && (colAC->acFlags & AC_ON)) { - if (colAC->actor != NULL && colAC->actor->update == NULL) { + if ((colAC != NULL) && (colAC->acFlags & AC_ON)) { + if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) { continue; } - if ((colAC->acFlags & colAT->atFlags & AC_TYPE_ALL) && colAT != colAC) { - if (!(colAT->atFlags & AT_SELF) && colAT->actor != NULL && colAC->actor == colAT->actor) { + if ((colAC->acFlags & colAT->atFlags & AC_TYPE_ALL) && (colAT != colAC)) { + if (!(colAT->atFlags & AT_SELF) && (colAT->actor != NULL) && (colAC->actor == colAT->actor)) { continue; } sACVsFuncs[colAT->shape][colAC->shape](play, colCtxt, colAT, colAC); @@ -2891,15 +2892,15 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider void CollisionCheck_AT(PlayState* play, CollisionCheckContext* colCtxt) { Collider** col; - if (colCtxt->colATCount == 0 || colCtxt->colACCount == 0) { + if ((colCtxt->colATCount == 0) || (colCtxt->colACCount == 0)) { return; } for (col = &colCtxt->colAT[0]; col < &colCtxt->colAT[colCtxt->colATCount]; col++) { Collider* colAC = *col; - if (colAC != NULL && (colAC->atFlags & AT_ON)) { - if (colAC->actor != NULL && colAC->actor->update == NULL) { + if ((colAC != NULL) && (colAC->atFlags & AT_ON)) { + if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) { continue; } CollisionCheck_AC(play, colCtxt, colAC); @@ -2958,7 +2959,8 @@ void CollisionCheck_SetOCvsOC(PlayState* play, Collider* left, ColliderInfo* lef right->ocFlags2 |= OC2_HIT_PLAYER; } - if (leftActor == NULL || rightActor == NULL || (left->ocFlags1 & OC1_NO_PUSH) || (right->ocFlags1 & OC1_NO_PUSH)) { + if ((leftActor == NULL) || (rightActor == NULL) || (left->ocFlags1 & OC1_NO_PUSH) || + (right->ocFlags1 & OC1_NO_PUSH)) { return; } @@ -3032,7 +3034,7 @@ void CollisionCheck_OC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* co ColliderJntSphElement* rightElem; f32 overlap; - if (left->count > 0 && left->elements != NULL && right->count > 0 && right->elements != NULL && + if ((left->count > 0) && (left->elements != NULL) && (right->count > 0) && (right->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON)) { for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) { @@ -3067,7 +3069,7 @@ void CollisionCheck_OC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCt ColliderJntSphElement* leftElem; f32 overlap; - if (left->count > 0 && left->elements != NULL && (left->base.ocFlags1 & OCELEM_ON) && + if ((left->count > 0) && (left->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON) && (right->info.ocElemFlags & OCELEM_ON)) { for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) { @@ -3096,7 +3098,7 @@ void CollisionCheck_OC_JntSphVsSphere(PlayState* play, CollisionCheckContext* co ColliderJntSphElement* leftElem; f32 overlap; - if (left->count > 0 && left->elements != NULL && (left->base.ocFlags1 & OCELEM_ON) && + if ((left->count > 0) && (left->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON) && (right->info.ocElemFlags & OCELEM_ON)) { for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) { @@ -3252,11 +3254,11 @@ void CollisionCheck_OC(PlayState* play, CollisionCheckContext* colCtxt) { ColChkVsFunc vsFunc; for (left = colCtxt->colOC; left < colCtxt->colOC + colCtxt->colOCCount; left++) { - if (*left == NULL || CollisionCheck_SkipOC(*left)) { + if ((*left == NULL) || CollisionCheck_SkipOC(*left)) { continue; } for (right = left + 1; right < colCtxt->colOC + colCtxt->colOCCount; right++) { - if (*right == NULL || CollisionCheck_SkipOC(*right) || CollisionCheck_Incompatible(*left, *right)) { + if ((*right == NULL) || CollisionCheck_SkipOC(*right) || CollisionCheck_Incompatible(*left, *right)) { continue; } vsFunc = sOCVsFuncs[(*left)->shape][(*right)->shape]; @@ -3353,7 +3355,7 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt, at = info->acHit; atInfo = info->acHitInfo; - if (at != NULL && atInfo != NULL && collider != NULL && info != NULL) { + if ((at != NULL) && (atInfo != NULL) && (collider != NULL) && (info != NULL)) { damage = CollisionCheck_GetDamageAndEffectOnBumper(at, atInfo, collider, info, &effect); if (CollisionCheck_GetToucherDamage(at, atInfo, collider, info) != 0) { @@ -3373,7 +3375,7 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt, collider->actor->colChkInfo.damageEffect = effect; } if (!(collider->acFlags & AC_HARD) || - ((collider->acFlags & AC_HARD) && atInfo->toucher.dmgFlags == 0x20000000)) { + ((collider->acFlags & AC_HARD) && (atInfo->toucher.dmgFlags == 0x20000000))) { if (collider->actor->colChkInfo.damage < finalDamage) { collider->actor->colChkInfo.damage = finalDamage; } @@ -3388,7 +3390,7 @@ void CollisionCheck_ApplyDamageJntSph(PlayState* play, CollisionCheckContext* co ColliderJntSph* jntSph = (ColliderJntSph*)collider; s32 i; - if (jntSph->count > 0 && jntSph->elements != NULL) { + if ((jntSph->count > 0) && (jntSph->elements != NULL)) { for (i = 0; i < jntSph->count; i++) { CollisionCheck_ApplyDamage(play, colCtxt, &jntSph->base, &jntSph->elements[i].info); } @@ -3965,7 +3967,7 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a if (SQ(actorDotItemXZ) < (4.0f * SQXZ(itemStep) * radSqDiff)) { return 0; } - if (SQ(actorDotItemXZ) - (4.0f * SQXZ(itemStep) * radSqDiff) > zero) { + if ((SQ(actorDotItemXZ) - (4.0f * SQXZ(itemStep) * radSqDiff)) > zero) { intersect1 = intersect2 = 1; } else { intersect1 = 1; @@ -4005,12 +4007,12 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a } if (intersect2 == 0) { - if (frac1 < 0.0f || 1.0f < frac1) { + if ((frac1 < 0.0f) || (1.0f < frac1)) { return 0; } } else { - test1 = (frac1 < 0.0f || 1.0f < frac1); - test2 = (frac2 < 0.0f || 1.0f < frac2); + test1 = (frac1 < 0.0f) || (1.0f < frac1); + test2 = (frac2 < 0.0f) || (1.0f < frac2); if (test1 && test2) { return 0; @@ -4024,14 +4026,14 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a } if ((intersect1 != 0) && - ((frac1 * itemStep.y + actorToItem.y < 0.0f) || (height < frac1 * itemStep.y + actorToItem.y))) { + (((frac1 * itemStep.y + actorToItem.y) < 0.0f) || (height < (frac1 * itemStep.y + actorToItem.y)))) { intersect1 = 0; } if ((intersect2 != 0) && - ((frac2 * itemStep.y + actorToItem.y < 0.0f) || (height < frac2 * itemStep.y + actorToItem.y))) { + (((frac2 * itemStep.y + actorToItem.y) < 0.0f) || (height < (frac2 * itemStep.y + actorToItem.y)))) { intersect2 = 0; } - if (intersect1 == 0 && intersect2 == 0) { + if ((intersect1 == 0) && (intersect2 == 0)) { return 0; } else if ((intersect1 != 0) && (intersect2 != 0)) { out1->x = frac1 * itemStep.x + actorToItem.x + actorPos->x; diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index 5e93e1187..5565bc876 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -142,6 +142,7 @@ void FireObj_Draw(PlayState* play, FireObj* fire) { Vec3s vec; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->timer * -20) % 512U, 32, 128)); diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index c6c1501ba..c9bea1669 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -16,14 +16,14 @@ s16 sBeatingHeartsDDEnv[3]; s16 sHeartsDDPrim[2][3]; s16 sHeartsDDEnv[2][3]; -TexturePtr HeartTextures[] = { +TexturePtr sHeartTextures[] = { gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, }; -TexturePtr HeartDDTextures[] = { +TexturePtr sHeartDDTextures[] = { gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, @@ -283,7 +283,7 @@ void LifeMeter_Draw(PlayState* play) { if (i < fullHeartCount) { heartTex = gHeartFullTex; } else if (i == fullHeartCount) { - heartTex = HeartTextures[fractionHeartCount]; + heartTex = sHeartTextures[fractionHeartCount]; } else { heartTex = gHeartEmptyTex; } @@ -323,7 +323,7 @@ void LifeMeter_Draw(PlayState* play) { if (i < fullHeartCount) { heartTex = gDefenseHeartFullTex; } else if (i == fullHeartCount) { - heartTex = HeartDDTextures[fractionHeartCount]; + heartTex = sHeartDDTextures[fractionHeartCount]; } else { heartTex = gDefenseHeartEmptyTex; } diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 534ec6dfc..e82c3a9b2 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -190,12 +190,12 @@ void Lights_BindDirectional(Lights* lights, LightParams* params, void* unused) { * available in the Lights group. This is at most 7 slots for a new group, but could be less. */ void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayState* play) { - static LightsPosBindFunc posBindFuncs[] = { + static LightsPosBindFunc sPosBindFuncs[] = { Lights_BindPoint, (LightsPosBindFunc)Lights_BindDirectional, Lights_BindPoint, }; - static LightsBindFunc dirBindFuncs[] = { + static LightsBindFunc sDirBindFuncs[] = { Lights_BindPointWithReference, (LightsBindFunc)Lights_BindDirectional, Lights_BindPointWithReference, @@ -204,12 +204,12 @@ void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayStat if (listHead != NULL) { if ((refPos == NULL) && (lights->enablePosLights == 1)) { do { - posBindFuncs[listHead->info->type](lights, &listHead->info->params, play); + sPosBindFuncs[listHead->info->type](lights, &listHead->info->params, play); listHead = listHead->next; } while (listHead != NULL); } else { do { - dirBindFuncs[listHead->info->type](lights, &listHead->info->params, refPos); + sDirBindFuncs[listHead->info->type](lights, &listHead->info->params, refPos); listHead = listHead->next; } while (listHead != NULL); } @@ -338,7 +338,7 @@ Lights* Lights_NewAndDraw(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; - lights->enablePosLights = 0; + lights->enablePosLights = false; lights->numLights = numLights; for (i = 0; i < numLights; i++) { @@ -363,7 +363,7 @@ Lights* Lights_New(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 ambient lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; - lights->enablePosLights = 0; + lights->enablePosLights = false; lights->numLights = 0; return lights; diff --git a/src/code/z_play.c b/src/code/z_play.c index dd06a461e..dade44cf6 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1508,7 +1508,7 @@ void Play_Main(GameState* thisx) { } s32 Play_InCsMode(PlayState* this) { - return (this->csCtx.state != 0) || Player_InCsMode(this); + return (this->csCtx.state != CS_STATE_IDLE) || Player_InCsMode(this); } f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos) { diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index f7ccd5230..44b1fd986 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -257,7 +257,7 @@ void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) { for (i = 0; i < ARRAY_COUNT(arg1->unk_04); i++, temp_v1++) { // Can't be `temp_v1->alpha != 0` if (temp_v1->alpha) { - phi_a1 = temp_v1->unk_00 == 3 ? (255 / 3) : (255 / 5); + phi_a1 = (temp_v1->unk_00 == 3) ? (255 / 3) : (255 / 5); if (phi_a1 >= temp_v1->alpha) { temp_v1->alpha = 0; } else { @@ -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->unk_AE7 == 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->unk_AE7 == 1) || (player->unk_AE7 == 3)); } void func_8012300C(PlayState* play, s32 arg1) { @@ -1363,12 +1363,12 @@ s32 func_80123F2C(PlayState* play, s32 ammo) { } s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 yRange) { - Player* this = GET_PLAYER(play); + Player* player = GET_PLAYER(play); Vec3f diff; s32 pad; - if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) { - Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff); + if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { + Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, pos, &diff); return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange); } diff --git a/src/code/z_room.c b/src/code/z_room.c index 89cf47935..9bc6e12ee 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -99,7 +99,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } - if ((room->enablePosLights != 0) || (MREG(93) != 0)) { + if (room->enablePosLights || (MREG(93) != 0)) { gSPSetGeometryMode(POLY_OPA_DISP++, G_LIGHTING_POSITIONAL); gSPSetGeometryMode(POLY_XLU_DISP++, G_LIGHTING_POSITIONAL); } diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 09897fbb9..05a3c331e 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -128,7 +128,7 @@ Gfx* SubS_DrawTransformFlex(PlayState* play, void** skeleton, Vec3s* jointTable, newDlist = rootLimb->dList; limbDList = rootLimb->dList; - if (overrideLimbDraw == NULL || !overrideLimbDraw(play, 1, &newDlist, &pos, &rot, actor, &gfx)) { + if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &newDlist, &pos, &rot, actor, &gfx)) { Matrix_TranslateRotateZYX(&pos, &rot); Matrix_Push(); @@ -1179,7 +1179,7 @@ Actor* SubS_FindActor(PlayState* play, Actor* actorListStart, u8 actorCategory, actor = play->actorCtx.actorLists[actorCategory].first; } - while (actor != NULL && actorId != actor->id) { + while ((actor != NULL) && (actorId != actor->id)) { actor = actor->next; } @@ -1503,10 +1503,10 @@ Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart actorIter = play->actorCtx.actorLists[actorCategory].first; } - while (actorIter != NULL && - (actorId != actorIter->id || - (actorId == actorIter->id && - (verifyActor == NULL || (verifyActor != NULL && !verifyActor(play, actor, actorIter, verifyData)))))) { + while ((actorIter != NULL) && + ((actorId != actorIter->id) || + ((actorId == actorIter->id) && + ((verifyActor == NULL) || ((verifyActor != NULL) && !verifyActor(play, actor, actorIter, verifyData)))))) { actorIter = actorIter->next; } diff --git a/src/libultra/io/pfsfilestate.c b/src/libultra/io/pfsfilestate.c index a555199fc..f06c8d937 100644 --- a/src/libultra/io/pfsfilestate.c +++ b/src/libultra/io/pfsfilestate.c @@ -34,7 +34,7 @@ s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state) { return ret; } - if (dir.company_code == 0 || dir.game_code == 0) { + if ((dir.company_code == 0) || (dir.game_code == 0)) { return PFS_ERR_INVALID; } diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index 8be2ff9e2..26e837fcf 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -16,7 +16,7 @@ void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { es->message = m; if (e == 14) { - if (__osShutdown != 0 && D_80097F10 == 0) { + if ((__osShutdown != 0) && (D_80097F10 == 0)) { osSendMesg(mq, m, OS_MESG_NOBLOCK); } D_80097F10 = 1; diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c index e943e51e2..66c058396 100644 --- a/src/libultra/rmon/xldtob.c +++ b/src/libultra/rmon/xldtob.c @@ -61,7 +61,7 @@ void _Ldtob(_Pft* args, u8 type) { if (args->prec < 0) { args->prec = 6; - } else if (args->prec == 0 && (type == 'g' || type == 'G')) { + } else if ((args->prec == 0) && ((type == 'g') || (type == 'G'))) { args->prec = 1; } err = _Ldunscale(&exp, (_Pft*)args); @@ -101,7 +101,7 @@ void _Ldtob(_Pft* args, u8 type) { gen = 0x13; } *ptr++ = '0'; - while (gen > 0 && 0 < val) { + while ((gen > 0) && (0 < val)) { lo = val; if ((gen -= 8) > 0) { val = (val - lo) * 1.0e8; @@ -124,12 +124,12 @@ void _Ldtob(_Pft* args, u8 type) { --gen, --exp; } - nsig = ((type == 'f') ? exp + 1 : ((type == 'e' || type == 'E') ? 1 : 0)) + args->prec; + nsig = ((type == 'f') ? exp + 1 : (((type == 'e') || (type == 'E')) ? 1 : 0)) + args->prec; if (gen < nsig) { nsig = gen; } if (nsig > 0) { - if (nsig < gen && ptr[nsig] > '4') { + if ((nsig < gen) && (ptr[nsig] > '4')) { drop = '9'; } else { drop = '0'; @@ -178,7 +178,7 @@ void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp) { p = (u8*)"0"; } - if (code == 'f' || ((code == 'g' || code == 'G') && (-4 <= xexp) && (xexp < px->prec))) { /* 'f' format */ + if ((code == 'f') || (((code == 'g') || (code == 'G')) && (-4 <= xexp) && (xexp < px->prec))) { /* 'f' format */ ++xexp; /* change to leading digit count */ if (code != 'f') { /* fixup for 'g' */ if (!(px->flags & FLAGS_HASH) && nsig < px->prec) { @@ -225,8 +225,8 @@ void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp) { px->n1 += nsig; px->nz1 = px->prec - nsig; } - } else { /* 'e' format */ - if (code == 'g' || code == 'G') { /* fixup for 'g' */ + } else { /* 'e' format */ + if ((code == 'g') || (code == 'G')) { /* fixup for 'g' */ if (nsig < px->prec) { px->prec = nsig; } diff --git a/src/libultra/rmon/xlitob.c b/src/libultra/rmon/xlitob.c index f200e01a4..6c53ee094 100644 --- a/src/libultra/rmon/xlitob.c +++ b/src/libultra/rmon/xlitob.c @@ -27,13 +27,13 @@ void _Litob(_Pft* args, u8 type) { num = -num; } - if (num != 0 || args->prec != 0) { + if ((num != 0) || (args->prec != 0)) { buff[--idx] = numMap[num % base]; } args->v.ll = num / base; - while (args->v.ll > 0 && idx > 0) { + while ((args->v.ll > 0) && (idx > 0)) { quotrem = lldiv(args->v.ll, base); args->v.ll = quotrem.quot; buff[--idx] = numMap[quotrem.rem]; @@ -47,7 +47,7 @@ void _Litob(_Pft* args, u8 type) { args->nz0 = args->prec - args->n1; } - if (args->prec < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { + if ((args->prec < 0) && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { idx = args->width - args->n0 - args->nz0 - args->n1; if (idx > 0) { args->nz0 += idx; diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c index 813520f01..6caac436f 100644 --- a/src/libultra/rmon/xprintf.c +++ b/src/libultra/rmon/xprintf.c @@ -42,7 +42,7 @@ int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) { unsigned char ac[0x20]; s = fmt; - while ((c = *s) != 0 && c != '%') { + while (((c = *s) != 0) && (c != '%')) { s++; } _PROUT((char*)fmt, s - fmt); diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c index a3608277f..3840ec62b 100644 --- a/src/libultra/voice/voicegetstatus.c +++ b/src/libultra/voice/voicegetstatus.c @@ -37,7 +37,7 @@ s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status) { *status = header.status; if (ret == 0) { - if (header.typeh == 0 && header.typel == 1) { + if ((header.typeh == 0) && (header.typel == 1)) { if (header.status & 4) { ret = CONT_ERR_CONTRFAIL; } diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index e06d51313..c7bff97f2 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -129,7 +129,7 @@ void ArmsHook_AttachHookToActor(ArmsHook* this, Actor* actor) { void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((this->actor.parent == NULL) || (!Player_IsHoldingHookshot(player))) { + if ((this->actor.parent == NULL) || !Player_IsHoldingHookshot(player)) { ArmsHook_DetachHookFromActor(this); Actor_Kill(&this->actor); return; @@ -138,7 +138,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { func_800B8F98(&player->actor, NA_SE_IT_HOOKSHOT_CHAIN - SFX_FLAG); ArmsHook_CheckForCancel(this); - if (this->timer != 0 && (this->collider.base.atFlags & AT_HIT) && + if ((this->timer != 0) && (this->collider.base.atFlags & AT_HIT) && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) { Actor* touchedActor = this->collider.base.at; @@ -191,12 +191,10 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { } else { if (this->actor.child != NULL) { velocity = 30.0f; + } else if (grabbed != NULL) { + velocity = 50.0f; } else { - if (grabbed != NULL) { - velocity = 50.0f; - } else { - velocity = 200.0f; - } + velocity = 200.0f; } phi_f16 = bodyDistDiff - velocity; if (bodyDistDiff <= velocity) { @@ -245,7 +243,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { sp60.z = this->unk1EC.z - (this->unk1E0.z - this->unk1EC.z); if (BgCheck_EntityLineTest1(&play->colCtx, &sp60, &this->unk1E0, &posResult, &poly, true, true, true, true, &bgId) && - (func_800B90AC(play, &this->actor, poly, bgId, &posResult) == 0 || + (!func_800B90AC(play, &this->actor, poly, bgId, &posResult) || BgCheck_ProjectileLineTest(&play->colCtx, &sp60, &this->unk1E0, &posResult, &poly, true, true, true, true, &bgId))) { f32 nx = COLPOLY_GET_NORMAL(poly->normal.x); 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 7af684201..efa7f04c4 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -249,6 +249,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) { Actor* transform = (arrow->unk_261 & 2) ? &this->actor : &arrow->actor; OPEN_DISPS(play->state.gfxCtx); + Matrix_Translate(transform->world.pos.x, transform->world.pos.y, transform->world.pos.z, MTXMODE_NEW); Matrix_RotateYS(transform->shape.rot.y, MTXMODE_APPLY); Matrix_RotateXS(transform->shape.rot.x, MTXMODE_APPLY); 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 18e2eb5d0..0391925ae 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 @@ -202,24 +202,28 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) { Gfx* opa; OPEN_DISPS(play->state.gfxCtx); + opa = POLY_OPA_DISP; gSPDisplayList(&opa[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&opa[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&opa[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&opa[3], object_astr_obj_DL_002380); POLY_OPA_DISP = &opa[4]; + CLOSE_DISPS(play->state.gfxCtx); } { Gfx* xlu; OPEN_DISPS(play->state.gfxCtx); + xlu = POLY_XLU_DISP; gSPDisplayList(&xlu[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&xlu[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&xlu[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&xlu[3], object_astr_obj_DL_0022E0); POLY_XLU_DISP = &xlu[4]; + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c index 22998a34e..d8c39a098 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c @@ -191,11 +191,13 @@ void BgCtowerGear_Draw(Actor* thisx, PlayState* play) { void BgCtowerGear_DrawOrgan(Actor* thisx, PlayState* play) { 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++, gClockTowerOrganDL); Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gClockTowerOrganPipesDL); + CLOSE_DISPS(play->state.gfxCtx); } 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 67703f0cd..be3c9cb47 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 @@ -53,21 +53,20 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { u32 inCsMode = Player_InCsMode(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) { + if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && + (actor->update != NULL)) { actorAsSwitch = (BgF40Switch*)actor; actorAsSwitch->wasPressed = actorAsSwitch->isPressed; isPressed = DynaPolyActor_IsSwitchPressed(&actorAsSwitch->dyna); - if (actorAsSwitch->isPressed && actorAsSwitch->actionFunc == BgF40Switch_IdlePressed) { + if (actorAsSwitch->isPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdlePressed)) { // Switch is fully pressed - if there's nothing keeping it pressed, wait a short time before // reverting to unpressed state. if (isPressed || inCsMode) { actorAsSwitch->switchReleaseDelay = 6; + } else if (actorAsSwitch->switchReleaseDelay > 0) { + actorAsSwitch->switchReleaseDelay--; } else { - if (actorAsSwitch->switchReleaseDelay > 0) { - actorAsSwitch->switchReleaseDelay--; - } else { - actorAsSwitch->isPressed = isPressed; - } + actorAsSwitch->isPressed = isPressed; } } else { // No delay when pressing switch, or releasing from a not-fully-pressed state. @@ -75,9 +74,9 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { } if (actorAsSwitch->isPressed) { switchFlag = BGF40SWITCH_GET_SWITCHFLAG(&actorAsSwitch->dyna.actor); - if (switchFlag >= 0 && switchFlag < 0x80) { + if ((switchFlag >= 0) && (switchFlag < 0x80)) { pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F); - if (!actorAsSwitch->wasPressed && actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed && + if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) && !Flags_GetSwitch(play, switchFlag)) { actorAsSwitch->isInitiator = true; } @@ -86,9 +85,10 @@ 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 != 0) { + if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && + (actor->update != NULL)) { switchFlag = BGF40SWITCH_GET_SWITCHFLAG(actor); - if (switchFlag >= 0 && switchFlag < 0x80 && Flags_GetSwitch(play, switchFlag) && + if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) && !(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) { Flags_UnsetSwitch(play, switchFlag); } 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 7bddd548f..942a544ff 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 @@ -1019,7 +1019,7 @@ void func_80A9D61C(Actor* thisx, PlayState* play) { for (i = 0; i < D_80A9E028.count; i++) { unkStruct1 = &D_80A9E028.unk_0000[i]; - if (unkStruct1->unk_34 != 5 && unkStruct1->unk_34 != 4) { + if ((unkStruct1->unk_34 != 5) && (unkStruct1->unk_34 != 4)) { sp68.x = unkStruct1->unk_14.x + this->dyna.actor.home.pos.x; sp68.y = unkStruct1->unk_14.y + this->unk_16C; sp68.z = unkStruct1->unk_14.z + this->dyna.actor.home.pos.z; diff --git a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c index 27e5d2fee..15a677c29 100644 --- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c +++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c @@ -121,7 +121,7 @@ void func_80AC4C34(BgIcefloe* this, PlayState* play) { WaterBox* water; this->timer--; - if (this->timer == 0 || + if ((this->timer == 0) || !WaterBox_GetSurface1_2(play, &play->colCtx, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.z, &this->dyna.actor.home.pos.y, &water)) { func_80AC4CF0(this); 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 f853fdfc5..4646b8d45 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 @@ -151,7 +151,7 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { this->collider.base.acFlags &= ~AC_HIT; } - if (wasHit && sFirstHitBgIkanaDharma == NULL) { + if (wasHit && (sFirstHitBgIkanaDharma == NULL)) { sFirstHitBgIkanaDharma = this2; Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCHFLAG(&this->dyna.actor)); tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000); @@ -160,8 +160,8 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { this->dyna.actor.speed = 20.0f; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DARUMA_VANISH); BgIkanaDharma_SetupStartCutscene(this); - } else if ((this->dyna.actor.flags & ACTOR_FLAG_40) == ACTOR_FLAG_40 && sFirstHitBgIkanaDharma == NULL && - this->dyna.actor.xzDistToPlayer < 420.0f) { + } else if (CHECK_FLAG_ALL(this->dyna.actor.flags, ACTOR_FLAG_40) && (sFirstHitBgIkanaDharma == NULL) && + (this->dyna.actor.xzDistToPlayer < 420.0f)) { tempAngle1 = BINANG_SUB(this->dyna.actor.yawTowardsPlayer, player->actor.shape.rot.y); tempAngle1 = ABS_ALT(tempAngle1); 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 3129d9411..8f86f7c12 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -259,7 +259,7 @@ void func_809542A0(BgIngate* this, PlayState* play) { } void func_80954340(BgIngate* this, PlayState* play) { - if (!DECR(this->unk16A)) { + if (DECR(this->unk16A) == 0) { if (this->timePath != NULL) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); this->timePath = &play->setupPathList[this->timePath->unk1]; diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c index ffb260bf3..b5eb3130a 100644 --- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c +++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c @@ -64,6 +64,7 @@ void BgOpenSpot_Draw(Actor* thisx, PlayState* play) { BgOpenSpot* this = (BgOpenSpot*)thisx; AnimatedMat_Draw(play, this->texScrolls); + OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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 721d1de60..ddd012426 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -113,7 +113,7 @@ Actor* func_80C1D78C(PlayState* play) { } tempActor = foundActor->next; - if (tempActor == NULL || false) { + if ((tempActor == NULL) || false) { foundActor = NULL; 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 2d8175bda..86d57660f 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -160,7 +160,7 @@ Actor* func_80C1C8E8(PlayState* play) { } tempActor = foundActor->next; - if (tempActor == NULL || false) { + if ((tempActor == NULL) || false) { foundActor = NULL; break; } @@ -229,6 +229,9 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { } } break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } 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 aa3a8b0e6..e348d145a 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -163,7 +163,7 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) { DmChar03* this = THIS; if (!this->unk_18E) { - if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) && + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id != 1)) { Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, 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 9f8cd237f..139d80bc3 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -160,7 +160,7 @@ Actor* func_80C24838(PlayState* play) { } tempActor = foundActor->next; - if (tempActor == NULL || false) { + if ((tempActor == NULL) || false) { foundActor = NULL; break; } @@ -229,6 +229,9 @@ void func_80C24A00(DmGm* this, PlayState* play) { } } break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } 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 e7eba8fa2..88129eddc 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -348,7 +348,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { if (this->unk_166 != 0) { Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor)); if (this->doorType != 5) { - gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; + DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1; Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index 0cf8d76d1..ef73ef2dd 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -63,6 +63,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dz = 1.0f; this->scalingFactor = 0.2f; break; + case EFF_DUST_TYPE_1: this->actionFunc = func_80918FE4; this->actor.draw = func_80919768; @@ -71,6 +72,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dz = 0.8f; this->scalingFactor = 0.5f; break; + case EFF_DUST_TYPE_SPIN_ATTACK_CHARGE: case EFF_DUST_TYPE_3: this->actionFunc = func_80919230; @@ -79,6 +81,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dx = 0.5f; this->scalingFactor = 15.0f; break; + case EFF_DUST_TYPE_4: this->actionFunc = func_80919230; this->actor.draw = func_809199FC; @@ -86,6 +89,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dx = 0.5f; this->scalingFactor = 10.0f; break; + case EFF_DUST_TYPE_5: this->actionFunc = func_80919230; this->actor.draw = func_809199FC; @@ -93,6 +97,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dx = 0.5f; this->scalingFactor = 20.0f; break; + default: SystemArena_Free(this); break; @@ -171,7 +176,7 @@ void func_80919230(EffDust* this, PlayState* play) { s32 i; s32 j; - if (parent == NULL || parent->update == NULL || !(player->stateFlags1 & PLAYER_STATE1_1000)) { + if ((parent == NULL) || (parent->update == NULL) || !(player->stateFlags1 & PLAYER_STATE1_1000)) { if (this->life != 0) { this->life--; } else { @@ -235,6 +240,9 @@ void func_80919230(EffDust* this, PlayState* play) { this->initialPositions[i].z = 4000.0f * Math_CosS(theta); } break; + + default: + break; } this->distanceTraveled[i] = 0.0f; @@ -319,6 +327,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); OPEN_DISPS(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); 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 839022d2c..015e57008 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -232,8 +232,10 @@ s32 func_80BECFBC(EnAkindonuts* this) { case 3: Inventory_DeleteItem(ITEM_DEED_OCEAN, SLOT(ITEM_DEED_OCEAN)); return GI_RUPEE_HUGE; + + default: + return GI_NONE; } - return GI_NONE; } s32 func_80BED034(EnAkindonuts* this) { @@ -249,8 +251,10 @@ s32 func_80BED034(EnAkindonuts* this) { case 3: return GI_POTION_BLUE; + + default: + return GI_NONE; } - return GI_NONE; } void func_80BED090(PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index e4a83a6d0..5f0ef2edf 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -468,6 +468,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { if ((this->unk_262 = BgCheck_ProjectileLineTest(&play->colCtx, &this->actor.prevPos, &this->actor.world.pos, &sp9C, &this->actor.wallPoly, true, true, true, true, &spA8))) { + // `func_800B90AC` only returns a boolean, and does not process any code func_800B90AC(play, &this->actor, this->actor.wallPoly, spA8, &sp9C); Math_Vec3f_Copy(&this->actor.world.pos, &sp9C); this->actor.wallBgId = spA8; 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 5eb0d0351..8c2b4eb4b 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 @@ -68,7 +68,7 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) { EnAttackNiw* this = THIS; EnNiw* parent = (EnNiw*)this->actor.parent; - if (this->actor.parent != NULL && this->actor.parent->update != NULL) { + if ((this->actor.parent != NULL) && (this->actor.parent->update != NULL)) { if (parent->attackNiwCount > 0) { parent->attackNiwCount--; } @@ -78,11 +78,11 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) { /** * Summary: instead of using SkelAnime animations AttackNiw modifies head+wings directly to create animations * - * EnNiw has its own version of this function, probably copy paste since AttackNiw only uses two animationState (2/5) + * EnNiw has its own version of this function, probably copy paste since AttackNiw only uses two animIndex (2/5) */ -void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animationState) { +void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animIndex) { if (this->unkTimer24C == 0) { - if (animationState == 0) { + if (animIndex == 0) { this->targetBodyRotY = 0.0f; } else { this->targetBodyRotY = -10000.0f; @@ -92,7 +92,7 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati this->unkTimer24C = 3; if ((this->clearRotYToggleTimer % 2) == 0) { this->targetBodyRotY = 0.0f; - if (animationState == 0) { + if (animIndex == 0) { this->unkTimer24C = Rand_ZeroFloat(30.0f); } } @@ -102,7 +102,7 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati this->unkToggle28A++; this->unkToggle28A &= 1; - switch (animationState) { // only case 2 and 5 are ever called in AttackNiw + switch (animIndex) { // only case 2 and 5 are ever called in AttackNiw case NIW_ANIM_STILL: this->targetLeftWingRotZ = 0.0f; this->targetRightWingRotZ = 0.0f; @@ -156,6 +156,9 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati this->targetLeftWingRotY = 10000.0f; } break; + + default: + break; } } 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 96a4fed1c..b6c5df58d 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1794,13 +1794,16 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { func_80A98DA4, func_80A98E48, &this->actor); } else { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sYoungerBrotherEyeTextures[this->unk_37E])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sYoungerBrotherBeltTextures[this->unk_380])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, func_80A98DA4, func_80A98E48, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } OPEN_DISPS(play->state.gfxCtx); + if ((this->actor.depthInWater >= 28.0f) && (this->actor.speed > 0.5f)) { Matrix_Translate(this->unk_3B4.x, this->unk_3B4.y, this->unk_3B4.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); @@ -1855,6 +1858,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_XLU_DISP++, gBeaverYoungerBrotherTailSplashDL); } } + CLOSE_DISPS(play->state.gfxCtx); } 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 2653fb685..223bb1b24 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 @@ -261,11 +261,14 @@ 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); + CLOSE_DISPS(play->state.gfxCtx); } + if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->enHy.headRot.y, MTXMODE_APPLY); @@ -297,8 +300,10 @@ 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); + CLOSE_DISPS(play->state.gfxCtx); } 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 887fb68d5..713410f23 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -657,6 +657,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); + if ((this->actionFunc != EnBigokuta_PlayDeathEffects) || (this->timer != 0)) { Scene_SetRenderModeXlu(play, 0, 1); gfx = POLY_OPA_DISP; 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 06bcd3b84..7c82b50b0 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -375,7 +375,6 @@ void EnBigpo_SpawnCutsceneStage4(EnBigpo* this, PlayState* play) { this->actor.shape.rot.y += this->rotVelocity; EnBigpo_RotateSpawnCutsceneFires(this); - if (1) {} for (i = 0; i < ARRAY_COUNT(this->fires); i++) { this->fires[i].pos.y += this->actor.velocity.y; } @@ -861,7 +860,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { // count the number of possible fires we can find (4 in vanilla) for (enemyPtr = GET_FIRST_ENEMY(play); enemyPtr != NULL; enemyPtr = enemyPtr->next) { - if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) { fireCount++; } } @@ -882,7 +881,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { randomIndex = ((s32)Rand_ZeroFloat(fireCount)) % fireCount; while (enemyPtr != NULL) { - if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) { if (randomIndex == 0) { randomFirePo = (EnBigpo*)enemyPtr; randomFirePo->actor.params = ENBIGPO_CHOSENFIRE; @@ -1225,8 +1224,8 @@ s32 EnBigpo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* Gfx** gfx) { EnBigpo* this = THIS; // not fully invisible - if (!(this->mainColor.a != 0 && limbIndex != 7) || - (this->actionFunc == EnBigpo_BurnAwayDeath && this->idleTimer >= 2)) { + if ((this->mainColor.a == 0) || (limbIndex == 7) || + ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2))) { *dList = NULL; } return false; @@ -1416,6 +1415,7 @@ void EnBigpo_DrawCircleFlames(Actor* thisx, PlayState* play) { s32 i; mtfxPtr = Matrix_GetCurrent(); + OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); 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 a32f2f410..b65b2c63d 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -122,6 +122,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { if (temp_s6 > 0) { OPEN_DISPS(play->state.gfxCtx); + Matrix_Push(); for (i = 0; i < temp_s6; i++) { f32 temp_f0 = (f32)i / temp_s6; @@ -150,6 +151,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { } Matrix_Pop(); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -694,6 +696,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) { EnBox* this = THIS; OPEN_DISPS(play->state.gfxCtx); + if (this->unk_1F4.unk_10 != NULL) { this->unk_1F4.unk_10(&this->unk_1F4, play); } @@ -719,5 +722,6 @@ void EnBox_Draw(Actor* thisx, PlayState* play) { POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnBox_PostLimbDraw, &this->dyna.actor, POLY_XLU_DISP); } + 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 8d841fdd2..1cda18c27 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 @@ -251,10 +251,12 @@ 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); *dList = gCneHeadBrownHairDL; gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + CLOSE_DISPS(play->state.gfxCtx); } if (limbIndex == CNE_LIMB_HEAD) { @@ -289,8 +291,10 @@ 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); + CLOSE_DISPS(play->state.gfxCtx); } 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 be946b872..91d243464 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -478,7 +478,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { Animation_PlayOnceSetSpeed(&this->knobDoor.skelAnime, sAnimations[this->knobDoor.animIndex], (player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f); if (this->unk_1A6 != 0) { - gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; + DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1; Flags_SetSwitch(play, this->switchFlag); Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } @@ -501,7 +501,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f; player->doorActor = &this->knobDoor.dyna.actor; if (this->unk_1A6 != 0) { - if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { + if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; this->knobDoor.dyna.actor.textId = 0x1802; } else { @@ -658,6 +658,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) { if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { OPEN_DISPS(play->state.gfxCtx); + if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8); } else { @@ -675,6 +676,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) { if (this->unk_1A6) { Actor_DrawDoorLock(play, this->unk_1A6, 0); } + CLOSE_DISPS(play->state.gfxCtx); } } 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 d5dc8d250..9fc28c952 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -110,9 +110,11 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot // after that it will no longer be rendered. 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); gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp2].segment); + CLOSE_DISPS(play->state.gfxCtx); } } 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 50e9303d7..06b4308a0 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 @@ -55,7 +55,7 @@ void func_80A61334(EnDyExtra* this, PlayState* play) { this->actor.velocity.y = 0.0f; } - if (this->unk14C == 0 && this->unk14A != 0) { + if ((this->unk14C == 0) && (this->unk14A != 0)) { this->unk14C = 0x32; this->actionFunc = func_80A613C8; } @@ -64,7 +64,7 @@ void func_80A61334(EnDyExtra* this, PlayState* play) { void func_80A613C8(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->unk14C == 0) || (this->unk150 < 0.02f)) { Actor_Kill(&this->actor); return; } 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 8ee28ad7d..2bb7b6d0d 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -638,9 +638,9 @@ s32 func_8088DCA4(EnElf* this) { } void func_8088DD34(EnElf* this, PlayState* play) { - Player* refActor = GET_PLAYER(play); + Actor* playerActor = &GET_PLAYER(play)->actor; s32 pad; - Player* player2 = GET_PLAYER(play); + Player* player = GET_PLAYER(play); f32 heightDiff; SkelAnime_Update(&this->skelAnime); @@ -652,7 +652,7 @@ void func_8088DD34(EnElf* this, PlayState* play) { func_8088CBAC(this, play); if (this->fairyFlags & 0x800) { - this->unk_224.y = player2->bodyPartsPos[0].y; + this->unk_224.y = player->bodyPartsPos[0].y; } func_8088D8D0(this, &this->unk_224); @@ -672,17 +672,17 @@ void func_8088DD34(EnElf* this, PlayState* play) { return; } - heightDiff = this->actor.world.pos.y - refActor->actor.world.pos.y; + heightDiff = this->actor.world.pos.y - playerActor->world.pos.y; if ((this->fairyFlags & 0x1000) && (heightDiff > 0.0f) && (heightDiff < 60.0f) && - !func_8088C804(&this->actor.world.pos, &refActor->actor.world.pos, 10.0f)) { + !func_8088C804(&this->actor.world.pos, &playerActor->world.pos, 10.0f)) { Health_ChangeBy(play, 0x80); if (this->fairyFlags & 0x200) { Magic_Add(play, MAGIC_FILL_TO_CAPACITY); } gSaveContext.jinxTimer = 0; this->unk_254 = 50.0f; - this->unk_248 = refActor->actor.shape.rot.y; + this->unk_248 = playerActor->shape.rot.y; this->unk_24C = -0x1000; this->unk_224.y = 30.0f; this->unk_250 = 0.0f; 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 e19e8d522..05351cd3f 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -93,18 +93,18 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { } break; + 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: + break; + default: if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) { Actor_Kill(thisx); return; } break; - - 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: - break; } if (Map_IsInDungeonOrBossArea(play)) { @@ -561,7 +561,7 @@ void EnElforg_TrappedByEnemy(EnElforg* this, PlayState* play) { void EnElforg_SetupTrappedByEnemy(EnElforg* this, PlayState* play) { Actor* enemy = EnElforg_GetHoldingEnemy(this, play); - if (enemy != NULL && enemy->update != NULL) { + if ((enemy != NULL) && (enemy->update != NULL)) { this->actionFunc = EnElforg_TrappedByEnemy; this->enemy = enemy; } @@ -587,7 +587,7 @@ void EnElforg_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->timer == 0 && this->secondaryTimer > 0) { + if ((this->timer == 0) && (this->secondaryTimer > 0)) { this->secondaryTimer--; } else { this->timer++; 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 03eb40786..dd656f903 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 @@ -94,18 +94,25 @@ void EnEndingHero5_Draw(Actor* thisx, PlayState* play) { case 0: gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255); break; + case 1: gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255); break; + case 2: gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255); break; + case 3: gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255); break; + case 4: gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); break; + + default: + break; } SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, 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 d21b30b60..8c975dbad 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -890,6 +890,7 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play) { if (this->fireRingAlpha > 1.0f) { this->fireRingAlpha = 1.0f; } + OPEN_DISPS(play->state.gfxCtx); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gMoonFireRingTexAnim)); 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 0f9b7594e..491d3c499 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -387,11 +387,13 @@ void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if ((limbIndex == 7) || (limbIndex == 8)) { OPEN_DISPS(play->state.gfxCtx); + Matrix_Push(); Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, *dList); Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); } @@ -468,6 +470,7 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { s16 firstDone = false; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 10; i++, dustEffect++) { 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 8d3cf44a5..11fa876d4 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -615,24 +615,24 @@ void func_80B10868(EnGb2* this, PlayState* play) { } void func_80B10924(EnGb2* this, PlayState* play) { - s32 sp24; + s32 getItemId; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_40)) { - sp24 = 5; + getItemId = GI_RUPEE_PURPLE; } else { - sp24 = 12; + getItemId = GI_HEART_PIECE; } if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (sp24 == 12) { + if (getItemId == GI_HEART_PIECE) { SET_WEEKEVENTREG(WEEKEVENTREG_54_40); } else { Rupees_ChangeBy(50); } this->actionFunc = func_80B109DC; } else { - Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f); + Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f); } } 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 99a2808f5..6de6c7e75 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -441,6 +441,9 @@ void EnGe1_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPDisplayList(POLY_OPA_DISP++, sHairstyleDLs[this->hairstyle]); Matrix_MultVec3f(&sInitialFocusPos, &this->picto.actor.focus.pos); break; + + default: + break; } CLOSE_DISPS(play->state.gfxCtx); 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 cc15fcbce..29f7059a5 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -114,6 +114,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + case GIANT_TYPE_MOUNTAIN_TERMINA_FIELD: case GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_MOUNTAIN_GIANTS_CHAMBER_AND_ENDING: @@ -122,6 +123,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + case GIANT_TYPE_OCEAN_TERMINA_FIELD: case GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING: @@ -130,6 +132,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + case GIANT_TYPE_CANYON_TERMINA_FIELD: case GIANT_TYPE_CANYON_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_CANYON_GIANTS_CHAMBER_AND_ENDING: @@ -138,6 +141,9 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + + default: + break; } return false; @@ -229,11 +235,13 @@ void EnGiant_Init(Actor* thisx, PlayState* play) { case 10: this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE2 - SFX_FLAG; break; + case 1: case 2: case 3: this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE1 - SFX_FLAG; break; + default: this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE0 - SFX_FLAG; break; @@ -361,47 +369,56 @@ void EnGiant_PlayAndUpdateAnimation(EnGiant* this) { case GIANT_CUE_ID_LOOKING_UP: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START); break; + case GIANT_CUE_ID_RAISING_ARMS: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START); break; + case GIANT_CUE_ID_STRUGGLING: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START); break; + case GIANT_CUE_ID_FALLING_OVER: // Unused EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER); break; + case GIANT_CUE_ID_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: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; + case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP); break; + + default: + break; } SkelAnime_Update(&this->skelAnime); } } void EnGiant_PlaySound(EnGiant* this) { - if (this->actor.draw != NULL && this->alpha > 0) { - if (this->animIndex == GIANT_ANIM_WALKING_LOOP && + if ((this->actor.draw != NULL) && (this->alpha > 0)) { + if ((this->animIndex == GIANT_ANIM_WALKING_LOOP) && (Animation_OnFrame(&this->skelAnime, 40.0f) || Animation_OnFrame(&this->skelAnime, 100.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_WALK); } - if (this->animIndex == GIANT_ANIM_FALLING_OVER && Animation_OnFrame(&this->skelAnime, 40.0f)) { + if ((this->animIndex == GIANT_ANIM_FALLING_OVER) && Animation_OnFrame(&this->skelAnime, 40.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_VOICE_FAIL); } - if (this->sfxId != 0xFFFF && - ((this->animIndex == GIANT_ANIM_BIG_CALL_START && this->skelAnime.curFrame >= 18.0f) || - this->animIndex == GIANT_ANIM_BIG_CALL_LOOP)) { + if ((this->sfxId != 0xFFFF) && + (((this->animIndex == GIANT_ANIM_BIG_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) || + (this->animIndex == GIANT_ANIM_BIG_CALL_LOOP))) { func_800B9010(&this->actor, this->sfxId); } - if ((this->animIndex == GIANT_ANIM_SMALL_CALL_START && this->skelAnime.curFrame >= 18.0f) || - this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP) { + if (((this->animIndex == GIANT_ANIM_SMALL_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) || + (this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP)) { func_800B9010(&this->actor, NA_SE_EV_KYOJIN_SIGN - SFX_FLAG); } } 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 90e449be3..1859cf83f 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -234,7 +234,7 @@ s32 EnGirlA_CanBuyArrows(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyNuts(PlayState* play, EnGirlA* this) { - if (CUR_CAPACITY(UPG_NUTS) != 0 && CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT)) { + if ((CUR_CAPACITY(UPG_NUTS) != 0) && (CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT))) { return CANBUY_RESULT_NO_ROOM; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { @@ -257,7 +257,7 @@ s32 EnGirlA_CanBuyShieldHero(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) { - if (CUR_CAPACITY(UPG_STICKS) != 0 && AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) { + if ((CUR_CAPACITY(UPG_STICKS) != 0) && (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS))) { return CANBUY_RESULT_NO_ROOM; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { @@ -385,18 +385,24 @@ void EnGirlA_BuyBottleItem(PlayState* play, EnGirlA* this) { case SI_POTION_RED_6: Item_Give(play, ITEM_POTION_RED); break; + case SI_POTION_GREEN_1: case SI_POTION_GREEN_2: case SI_POTION_GREEN_3: Item_Give(play, ITEM_POTION_GREEN); break; + case SI_POTION_BLUE: Item_Give(play, ITEM_POTION_BLUE); break; + case SI_FAIRY_1: case SI_FAIRY_2: Item_Give(play, ITEM_FAIRY); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -411,9 +417,13 @@ void EnGirlA_BuyNuts(PlayState* play, EnGirlA* this) { case 5: Item_Give(play, ITEM_NUTS_5); break; + case 10: Item_Give(play, ITEM_NUTS_10); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -439,12 +449,17 @@ void EnGirlA_BuyBombBag(PlayState* play, EnGirlA* this) { case 20: Item_Give(play, ITEM_BOMB_BAG_20); break; + case 21: Item_Give(play, ITEM_BOMB_BAG_30); break; + case 22: Item_Give(play, ITEM_BOMB_BAG_40); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -461,15 +476,21 @@ void EnGirlA_BuyBombs(PlayState* play, EnGirlA* this) { case 5: Item_Give(play, ITEM_BOMBS_5); break; + case 10: Item_Give(play, ITEM_BOMBS_10); break; + case 20: Item_Give(play, ITEM_BOMBS_20); break; + case 30: Item_Give(play, ITEM_BOMBS_30); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -484,15 +505,21 @@ void EnGirlA_BuySword(PlayState* play, EnGirlA* this) { case 1: Item_Give(play, ITEM_SWORD_KOKIRI); break; + case 2: Item_Give(play, ITEM_SWORD_RAZOR); break; + case 3: Item_Give(play, ITEM_SWORD_GILDED); break; + case 4: Item_Give(play, ITEM_SWORD_GREAT_FAIRY); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } 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 28d5c344d..edb079373 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -955,22 +955,22 @@ void func_80B52430(EnGk* this, PlayState* play) { } void func_80B5253C(EnGk* this, PlayState* play) { - s32 sp24; + s32 getItemId; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08)) { - sp24 = 0x93; + getItemId = GI_GOLD_DUST_2; } else { - sp24 = 0x6A; + getItemId = GI_GOLD_DUST; } if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (sp24 == 0x6A) { + if (getItemId == GI_GOLD_DUST) { SET_WEEKEVENTREG(WEEKEVENTREG_41_08); } this->actionFunc = func_80B525E0; } else { - Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f); + Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f); } } 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 30a6709a2..d8004bef8 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -458,25 +458,25 @@ void func_8099874C(EnGs* this, PlayState* play) { } if (phi_v0 != 0) { - this->unk_20C = -1; + this->getItemId = -1; switch (this->unk_194) { case 1: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_08)) { - this->unk_20C = 6; + this->getItemId = GI_RUPEE_SILVER; SET_WEEKEVENTREG(WEEKEVENTREG_77_08); } break; case 3: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_10)) { - this->unk_20C = 6; + this->getItemId = GI_RUPEE_SILVER; SET_WEEKEVENTREG(WEEKEVENTREG_77_10); } break; case 2: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_20)) { - this->unk_20C = 6; + this->getItemId = GI_RUPEE_SILVER; SET_WEEKEVENTREG(WEEKEVENTREG_77_20); } break; @@ -484,10 +484,10 @@ void func_8099874C(EnGs* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) { SET_WEEKEVENTREG(WEEKEVENTREG_90_10); - this->unk_20C = 12; + this->getItemId = GI_HEART_PIECE; } - if (this->unk_20C > 0) { + if (this->getItemId > GI_NONE) { func_809989B4(this, play); } else { func_80997D14(this, play); @@ -502,7 +502,7 @@ void func_8099874C(EnGs* this, PlayState* play) { } void func_809989B4(EnGs* this, PlayState* play) { - Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel); + Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel); this->actionFunc = func_809989F4; } @@ -511,7 +511,8 @@ void func_809989F4(EnGs* this, PlayState* play) { this->actor.parent = NULL; func_80997D14(this, play); } else { - Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel); + Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, + this->actor.playerHeightRel); } } 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 abb4a5b86..42efabb61 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -47,7 +47,7 @@ typedef struct EnGs { /* 0x200 */ f32 unk_200; /* 0x204 */ s32 unk_204; /* 0x208 */ s32 unk_208; - /* 0x20C */ s32 unk_20C; + /* 0x20C */ s32 getItemId; /* 0x210 */ u16 unk_210; /* 0x212 */ s16 csIdList[2]; /* 0x216 */ s16 unk_216; 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 78a2aa4d1..bdc4637d1 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -131,7 +131,7 @@ void func_80BC6E10(EnGuruguru* this) { this->headZRotTarget = 0; this->unk268 = 1; this->actor.textId = textIDs[this->textIdIndex]; - if ((this->textIdIndex == 0 || this->textIdIndex == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { + if (((this->textIdIndex == 0) || (this->textIdIndex == 1)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_04)) { this->actor.textId = 0x295F; } else { @@ -175,7 +175,7 @@ void func_80BC701C(EnGuruguru* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((this->unk268 != 0) && - (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU)) { + ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU))) { this->headZRotTarget = 5000; } @@ -324,7 +324,7 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - } else if (this->actor.params == 0 || this->actor.params == 2) { + } else if ((this->actor.params == 0) || (this->actor.params == 2)) { Actor_Kill(&this->actor); return; } @@ -352,10 +352,10 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { this->headXRotTarget = 0; if (yaw < 0x2AF8) { this->headXRotTarget = this->actor.yawTowardsPlayer - this->actor.world.rot.y; - if (this->headXRotTarget > 5000) { - this->headXRotTarget = 5000; - } else if (this->headXRotTarget < -5000) { - this->headXRotTarget = -5000; + if (this->headXRotTarget > 0x1388) { + this->headXRotTarget = 0x1388; + } else if (this->headXRotTarget < -0x1388) { + this->headXRotTarget = -0x1388; } } Actor_SetScale(&this->actor, 0.01f); 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 630ae405f..43a5895d5 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 @@ -156,7 +156,7 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { this->unk_20A = 0; } - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80BDB580(this); return; } 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 8cff778fd..71b338121 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -1033,6 +1033,7 @@ void EnIk_UpdateArmorDraw(EnIk* this, PlayState* play) { sp54 = 0; OPEN_DISPS(play->state.gfxCtx); + gfxOpa = POLY_OPA_DISP; gfxXlu = POLY_XLU_DISP; 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 cbdc2ba19..5031d7e87 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -329,7 +329,7 @@ void func_808F38F8(EnIn* this, PlayState* play) { while (true) { //! @bug: Infinite loop if there is only one ACTOR_EN_IN this->unk4A4 = (EnIn*)SubS_FindActor(play, &this->unk4A4->actor, ACTORCAT_NPC, ACTOR_EN_IN); - if (this->unk4A4 != NULL && this->unk4A4 != this) { + if ((this->unk4A4 != NULL) && (this->unk4A4 != this)) { break; } this->unk4A4 = (EnIn*)this->unk4A4->actor.next; @@ -357,9 +357,13 @@ void func_808F39DC(EnIn* this, PlayState* play) { case WEEKEVENTREG_HORSE_RACE_STATE_2: textId = 0x347A; break; + case WEEKEVENTREG_HORSE_RACE_STATE_3: textId = 0x3476; break; + + default: + break; } SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); } else { @@ -367,9 +371,13 @@ void func_808F39DC(EnIn* this, PlayState* play) { case WEEKEVENTREG_HORSE_RACE_STATE_2: textId = 0x349D; break; + case WEEKEVENTREG_HORSE_RACE_STATE_3: textId = 0x3499; break; + + default: + break; } SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); } @@ -482,6 +490,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x345B; } break; + case 1: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_10)) { textId = 0x3463; @@ -489,11 +498,12 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x346B; } break; + case 3: if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x3485; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || - gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || + (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { textId = 0x3484; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_04)) { textId = 0x346D; @@ -501,8 +511,10 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x3482; } break; + case 4: - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || + (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { textId = 0x348A; } else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x348B; @@ -512,6 +524,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x3489; } break; + case 5: if (func_808F33B8()) { textId = 0x34B3; @@ -521,17 +534,22 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x3493; } break; + case 7: if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x34A8; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || - gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || + (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { textId = 0x34A7; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_04)) { textId = 0x3495; } else { textId = 0x34A5; } + break; + + default: + break; } if (textId == 0) { textId = 1; @@ -540,10 +558,9 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { } void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) { - s32 unused; + s32 pad; - if (textId == 0x34AE || textId == 0x34B0 || textId == 0x34B2) { - unused = textId; + if ((textId == 0x34AE) || (textId == 0x34B0) || (textId == 0x34B2)) { func_80151BB4(play, 0x11); } switch (arg2) { @@ -554,12 +571,15 @@ void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) { func_808F35D8(this, play); } break; + case 2: if (textId == 0x3473) { func_808F35D8(this, play); } break; + case 0: + default: break; } } @@ -599,7 +619,7 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, s32 arg4) { s32 pad; - s32 fee = play->msgCtx.unk1206C != 0xFFFF ? play->msgCtx.unk1206C : 10; + s32 fee = (play->msgCtx.unk1206C != 0xFFFF) ? play->msgCtx.unk1206C : 10; if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -651,31 +671,38 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x34B0); ret = false; break; + case 0x34A9: func_808F4108(this, play, 0x34AA); SET_WEEKEVENTREG(WEEKEVENTREG_63_40); ret = false; break; + case 0x34AA: func_808F4108(this, play, 0x34AB); ret = false; break; + case 0x34AB: func_808F4108(this, play, 0x34AC); ret = false; break; + case 0x34AC: func_808F4108(this, play, 0x34AD); ret = false; break; + case 0x34AD: Actor_ContinueText(play, &this->actor, 0x34AE); ret = false; break; + case 0x34B1: Actor_ContinueText(play, &this->actor, 0x34B2); ret = false; break; + default: break; } @@ -688,48 +715,62 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x3459); ret = false; break; + case 0x3459: Actor_ContinueText(play, &this->actor, 0x345A); ret = false; break; + case 0x345A: func_80151BB4(play, 0x11); ret = true; break; + case 0x345B: func_80151BB4(play, 0x11); ret = true; break; + case 0x345C: Actor_ContinueText(play, &this->actor, 0x345D); ret = false; break; + case 0x345D: Actor_ContinueText(play, &this->actor, 0x345E); ret = false; break; + case 0x345E: Actor_ContinueText(play, &this->actor, 0x345F); ret = false; break; + case 0x345F: func_80151BB4(play, 0x11); ret = true; break; + case 0x3460: Actor_ContinueText(play, &this->actor, 0x3461); ret = false; break; + case 0x3461: Actor_ContinueText(play, &this->actor, 0x3462); ret = false; break; + case 0x3462: func_80151BB4(play, 0x11); ret = true; break; + + default: + break; } break; + case 1: switch (textId) { case 0x3463: @@ -737,14 +778,17 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x3464); ret = false; break; + case 0x3464: Actor_ContinueText(play, &this->actor, 0x3465); ret = false; break; + case 0x3465: Actor_ContinueText(play, &this->actor, 0x3466); ret = false; break; + case 0x3466: if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -769,54 +813,65 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x3467: case 0x3468: case 0x3469: func_80151BB4(play, 0x11); ret = true; break; + case 0x346B: Actor_ContinueText(play, &this->actor, 0x346C); ret = false; break; + case 0x346C: Actor_ContinueText(play, &this->actor, 0x3466); ret = false; break; + case 0x346A: this->actionFunc = func_808F5A94; func_80151BB4(play, 0x11); break; } break; + case 2: switch (textId) { case 0x346E: func_808F4108(this, play, 0x346F); ret = false; break; + case 0x3470: Actor_ContinueText(play, &this->actor, 0x3471); ret = false; break; + case 0x3483: Actor_ContinueText(play, &this->actor, 0x3471); ret = false; break; + case 0x3471: func_808F4150(play, this, arg2, msgCtx); ret = false; break; + case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); ret = true; break; + case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); break; + case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); func_800FD750(NA_BGM_HORSE); @@ -825,6 +880,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { play->transitionTrigger = TRANS_TRIGGER_START; SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; + case 0x3478: if (msgCtx->choiceIndex == 0) { func_808F4150(play, this, arg2, msgCtx); @@ -836,13 +892,18 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x347B: func_808F4108(this, play, 0x347C); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + + default: + break; } break; + case 3: switch (textId) { case 0x346D: @@ -851,36 +912,44 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x346F: func_808F4108(this, play, 0x3470); ret = false; break; + case 0x3482: func_808F4108(this, play, 0x3483); SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x3484: func_80151BB4(play, 0x11); break; + case 0x3485: func_80151BB4(play, 0x11); break; + case 0x3474: func_808F4108(this, play, 0x3475); ret = false; break; + case 0x3476: Actor_ContinueText(play, &this->actor, 0x3477); EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); ret = false; break; + case 0x3477: SET_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x3478); ret = false; break; + case 0x347A: EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); @@ -904,33 +973,39 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x347F: Actor_ContinueText(play, &this->actor, 0x3480); ret = false; break; + case 0x3480: func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x3479: func_808F43E0(this); func_808F35D8(this, play); func_80151BB4(play, 0x11); ret = true; break; + case 0x347C: this->actionFunc = func_808F3D40; Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f); func_808F35D8(this, play); ret = true; break; + case 0x3481: this->actionFunc = func_808F5A34; func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x347D: this->actionFunc = func_808F5A34; func_808F43E0(this); @@ -938,8 +1013,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_80151BB4(play, 0x2F); ret = true; break; + + default: + break; } break; + case 4: switch (textId) { case 0x3486: @@ -947,34 +1026,45 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_16_01); ret = false; break; + case 0x3487: Actor_ContinueText(play, &this->actor, 0x3488); ret = false; break; + case 0x3488: func_80151BB4(play, 0x11); ret = true; break; + case 0x3489: func_80151BB4(play, 0x11); break; + case 0x348A: func_80151BB4(play, 0x11); break; + case 0x348B: Actor_ContinueText(play, &this->actor, 0x348C); ret = false; break; + case 0x348C: Actor_ContinueText(play, &this->actor, 0x348D); ret = false; break; + case 0x348D: func_80151BB4(play, 0x11); ret = true; break; + + default: + break; } break; + case 5: switch (textId) { case 0x3468: @@ -982,21 +1072,25 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3491: func_80151BB4(play, 0x11); break; + case 0x348E: case 0x34B3: Actor_ContinueText(play, &this->actor, 0x348F); SET_WEEKEVENTREG(WEEKEVENTREG_16_02); ret = false; break; + case 0x3493: Actor_ContinueText(play, &this->actor, 0x3494); ret = false; break; + case 0x348F: case 0x3494: Actor_ContinueText(play, &this->actor, 0x3490); ret = false; break; + case 0x3490: if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -1021,49 +1115,59 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x3492: this->actionFunc = func_808F5A94; func_80151BB4(play, 0x11); break; } break; + case 7: switch (textId) { case 0x34A8: func_80151BB4(play, 0x11); break; + case 0x34A7: func_80151BB4(play, 0x11); break; + case 0x3495: func_808F4108(this, play, 0x3496); SET_WEEKEVENTREG(WEEKEVENTREG_16_04); SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x3497: func_808F4108(this, play, 0x3498); ret = false; break; + case 0x34A4: this->actionFunc = func_808F5A34; func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x34A5: func_808F4108(this, play, 0x34A6); SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); break; + case 0x3474: Actor_ContinueText(play, &this->actor, 0x3475); ret = false; break; + case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); func_800FD750(NA_BGM_HORSE); @@ -1072,6 +1176,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { play->transitionTrigger = TRANS_TRIGGER_START; SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; + case 0x349D: EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); @@ -1084,12 +1189,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x349F: this->actionFunc = func_808F3D40; Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f); func_808F35D8(this, play); ret = true; break; + case 0x34A0: this->actionFunc = func_808F5A34; func_80151BB4(play, 0x11); @@ -1097,6 +1204,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_808F43E0(this); ret = true; break; + case 0x34A1: func_808F35D8(this, play); if (Inventory_HasEmptyBottle()) { @@ -1108,25 +1216,30 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x34A2: Actor_ContinueText(play, &this->actor, 0x34A3); ret = false; break; + case 0x34A3: func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x3499: Actor_ContinueText(play, &this->actor, 0x349A); EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); ret = false; break; + case 0x349A: Actor_ContinueText(play, &this->actor, 0x349B); ret = false; break; + case 0x349B: if (msgCtx->choiceIndex == 0) { func_808F4270(play, this, arg2, msgCtx, 1); @@ -1137,42 +1250,57 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x349C: func_808F43E0(this); func_808F35D8(this, play); func_80151BB4(play, 0x11); ret = true; break; + + default: + break; } break; + case 6: switch (textId) { case 0x3496: func_808F4108(this, play, 0x3497); ret = false; break; + case 0x3498: case 0x34A6: Actor_ContinueText(play, &this->actor, 0x3471); ret = false; break; + case 0x3471: func_808F4270(play, this, arg2, msgCtx, 0); ret = false; break; + case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); ret = true; break; + case 0x349E: func_808F4108(this, play, 0x349F); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + + default: + break; } break; + + default: + break; } return ret; } @@ -1186,6 +1314,7 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) { func_808F4054(play, this, arg2, this->actor.textId); ret = true; break; + case TEXT_STATE_CHOICE: case TEXT_STATE_5: if (Message_ShouldAdvance(play) && func_808F4414(play, this, arg2)) { @@ -1193,6 +1322,9 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) { ret = true; } break; + + default: + break; } return ret; } @@ -1368,10 +1500,10 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk4AC = 0; type = ENIN_GET_TYPE(thisx); this->unk4B0 = GET_WEEKEVENTREG_HORSE_RACE_STATE; - if (type == ENIN_HORSE_RIDER_BLUE_SHIRT || type == ENIN_BLUE_SHIRT) { + if ((type == ENIN_HORSE_RIDER_BLUE_SHIRT) || (type == ENIN_BLUE_SHIRT)) { this->unk4AC |= 8; } - if (type == ENIN_HORSE_RIDER_YELLOW_SHIRT || type == ENIN_HORSE_RIDER_BLUE_SHIRT) { + 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; Animation_Change(&this->skelAnime, &object_in_Anim_016A60, 1.0f, 0.0f, @@ -1387,7 +1519,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -4.0f; this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F); this->unk23D = 0; - if (type == ENIN_YELLOW_SHIRT || type == ENIN_BLUE_SHIRT) { + if ((type == ENIN_YELLOW_SHIRT) || (type == ENIN_BLUE_SHIRT)) { if ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) || (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); @@ -1478,15 +1610,15 @@ void func_808F6334(EnIn* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 talkState = Message_GetState(&play->msgCtx); - this->unk4C4 += this->unk4C0 != 0.0f ? 40.0f : -40.0f; + this->unk4C4 += (this->unk4C0 != 0.0f) ? 40.0f : -40.0f; this->unk4C4 = CLAMP(this->unk4C4, 0.0f, 80.0f); Matrix_Translate(this->unk4C4, 0.0f, 0.0f, MTXMODE_APPLY); if ((&this->actor == player->talkActor) && - !((play->msgCtx.currentTextId >= 0xFF) && (play->msgCtx.currentTextId <= 0x200)) && - (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { + ((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) && + (this->prevTalkState == TEXT_STATE_3)) { if (!(play->state.frames & 1)) { - this->unk4C0 = this->unk4C0 != 0.0f ? 0.0f : 1.0f; + this->unk4C0 = (this->unk4C0 != 0.0f) ? 0.0f : 1.0f; } } else { this->unk4C0 = 0.0f; @@ -1520,16 +1652,17 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po object_in_DL_013440, }; - if (this->unk23C != 0 && limbIndex != 16) { + if ((this->unk23C != 0) && (limbIndex != 16)) { if (sp50[limbIndex] != NULL) { *dList = sp50[limbIndex]; } } - if (this->unk4AC & 4 && limbIndex == 16) { + if ((this->unk4AC & 4) && (limbIndex == 16)) { *dList = object_in_DL_01C528; } OPEN_DISPS(play->state.gfxCtx); + if (limbIndex == 16) { TexturePtr sp38[] = { object_in_Tex_0035E0, object_in_Tex_004820, object_in_Tex_004C20, object_in_Tex_0043E0 }; @@ -1538,6 +1671,7 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po } else { AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(object_in_Matanimheader_001C30), this->unk4AC & 8 ? 1 : 0); } + CLOSE_DISPS(play->state.gfxCtx); if (limbIndex == 16) { @@ -1551,7 +1685,7 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Matrix_RotateYS(this->torsoRot.y, MTXMODE_APPLY); Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY); } - if (limbIndex == 9 || limbIndex == 10 || limbIndex == 13) { + if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) { rot->y += (s16)(Math_SinS(this->unk376[limbIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->unk39E[limbIndex]) * 200.0f); } @@ -1593,21 +1727,25 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (this->unk23C == 0) { if (!(this->unk4AC & 8)) { OPEN_DISPS(play->state.gfxCtx); + if (limbIndex == 12) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007A70); } if (limbIndex == 15) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } + CLOSE_DISPS(play->state.gfxCtx); } } } if (this->unk4AC & 0x20) { OPEN_DISPS(play->state.gfxCtx); + if (limbIndex == 12) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } + CLOSE_DISPS(play->state.gfxCtx); } } 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 ee6e28de2..a1da5941b 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -321,15 +321,15 @@ s32 func_80B85858(EnKaizoku* this, PlayState* play) { for (itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; itemAction != NULL; itemAction = itemAction->next) { - //! FAKE: - if (1) {} - if (((itemAction->id == ACTOR_ARMS_HOOK) || (itemAction->id == ACTOR_EN_ARROW)) && (player->unk_D57)) { - if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) && - (this->action != KAIZOKU_ACTION_6)) { - func_80B87C7C(this); - } - break; + if (((itemAction->id != ACTOR_ARMS_HOOK) && (itemAction->id != ACTOR_EN_ARROW)) || (player->unk_D57 == 0)) { + continue; } + + if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) && + (this->action != KAIZOKU_ACTION_6)) { + func_80B87C7C(this); + } + break; } if (prevAction != this->action) { @@ -423,8 +423,8 @@ s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) { func_80B87900(this); } else { sp2A = player->actor.shape.rot.y - this->picto.actor.shape.rot.y; - if (this->picto.actor.xzDistToPlayer <= 65.0f && !Actor_OtherIsTargeted(play, &this->picto.actor) && - ABS_ALT(sp2A) < 0x5000) { + if ((this->picto.actor.xzDistToPlayer <= 65.0f) && !Actor_OtherIsTargeted(play, &this->picto.actor) && + (ABS_ALT(sp2A) < 0x5000)) { if (this->action != KAIZOKU_ACTION_9) { func_80B87F70(this); return 1; @@ -508,7 +508,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->unk_598 = 0; Audio_SetMainBgmVolume(0, 0xA); this->unk_59C++; - + // fallthrough case 1: player->actor.shape.rot.y = player->actor.world.rot.y = Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); @@ -611,7 +611,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { func_800B7298(play, &this->picto.actor, 6); CutsceneManager_Stop(this->csId); this->unk_59C = 0; - this->subCamId = 0; + 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; @@ -657,7 +657,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4); } - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.y = 1.0f; this->subCamUp.z = 0.0f; Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); @@ -665,7 +665,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { } void func_80B86804(EnKaizoku* this, PlayState* play) { - if (this->subCamId == 0) { + if (this->subCamId == SUB_CAM_ID_DONE) { if (!CutsceneManager_IsNext(this->csId)) { CutsceneManager_Queue(this->csId); return; @@ -725,7 +725,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { Message_CloseTextbox(play); func_800B7298(play, &this->picto.actor, 6); CutsceneManager_Stop(this->csId); - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; play->nextEntrance = play->setupExitList[this->exitIndex]; gSaveContext.nextCutsceneIndex = 0; Scene_SetExitFade(play); @@ -733,11 +733,13 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { this->unk_59C++; this->action = KAIZOKU_ACTION_16; } + break; + default: break; } - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; this->subCamUp.z = 0.0f; @@ -861,7 +863,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { play->envCtx.screenFillColor[3] = 0; play->envCtx.fillScreen = false; this->unk_59C = 0; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; func_800B7298(play, &this->picto.actor, 6); CutsceneManager_Stop(this->csId); if (this->switchFlag >= 0) { @@ -871,6 +873,9 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { } } break; + + default: + break; } Math_ApproachF(&this->subCamEye.x, this->unk_5C8.x, 0.5f, this->unk_5E0); Math_ApproachF(&this->subCamEye.y, this->unk_5C8.y, 0.5f, this->unk_5E0); @@ -880,7 +885,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { Math_ApproachF(&this->subCamAt.z, this->unk_5D4.z, 0.5f, this->unk_5E0); Math_ApproachF(&this->unk_5E0, 10.0f, 0.5f, 100.0f); - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.x = 0.0f; this->subCamUp.z = 0.0f; this->subCamUp.y = 1.0f; @@ -990,7 +995,8 @@ void func_80B8760C(EnKaizoku* this, PlayState* play) { this->skelAnime.playSpeed = 1.0f; temp_ft0 = this->skelAnime.curFrame - this->skelAnime.playSpeed; temp_ft1 = this->skelAnime.curFrame + this->skelAnime.playSpeed; - if (this->skelAnime.curFrame != 0.0f && ((temp_ft0 < 0 && temp_ft1 > 0) || (temp_ft0 < 5 && temp_ft1 >= 6))) { + if ((this->skelAnime.curFrame != 0.0f) && + (((temp_ft0 < 0) && (temp_ft1 > 0)) || ((temp_ft0 < 5) && (temp_ft1 >= 6)))) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); } @@ -1007,12 +1013,10 @@ void func_80B8760C(EnKaizoku* this, PlayState* play) { func_80B87E28(this); } } + } else if (this->picto.actor.speed >= 0.0f) { + this->picto.actor.shape.rot.y += 0x4000; } else { - if (this->picto.actor.speed >= 0.0f) { - this->picto.actor.shape.rot.y += 0x4000; - } else { - this->picto.actor.shape.rot.y -= 0x4000; - } + this->picto.actor.shape.rot.y -= 0x4000; } } @@ -1042,8 +1046,8 @@ void func_80B8798C(EnKaizoku* this, PlayState* play) { if (this->lookTimer == 0) { this->unk_2D8 = 0; temp_v0 = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; - if (ABS_ALT(temp_v0) <= 0x4000 && this->picto.actor.xzDistToPlayer < 40.0f && - fabsf(this->picto.actor.playerHeightRel) < 50.0f) { + if ((ABS_ALT(temp_v0) <= 0x4000) && (this->picto.actor.xzDistToPlayer < 40.0f) && + (fabsf(this->picto.actor.playerHeightRel) < 50.0f)) { if (func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) { if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { this->bodyCollider.base.acFlags &= ~AC_HARD; @@ -1068,7 +1072,7 @@ void func_80B8798C(EnKaizoku* this, PlayState* play) { this->bodyCollider.base.acFlags &= ~AC_HARD; func_80B88CD8(this); } - } else if (this->unk_2B2 == 0 && + } else if ((this->unk_2B2 == 0) && func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) { if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { this->bodyCollider.base.acFlags &= ~AC_HARD; @@ -1314,7 +1318,7 @@ void func_80B88378(EnKaizoku* this, PlayState* play) { } if (!func_80B85A00(this, play, false)) { - if (this->picto.actor.xzDistToPlayer < 210.0f && this->picto.actor.xzDistToPlayer > 150.0f && + if ((this->picto.actor.xzDistToPlayer < 210.0f) && (this->picto.actor.xzDistToPlayer > 150.0f) && Actor_IsFacingPlayer(&this->picto.actor, 0x1388)) { if (Actor_IsTargeted(play, &this->picto.actor)) { if (Rand_ZeroOne() > 0.5f) { @@ -1332,7 +1336,7 @@ void func_80B88378(EnKaizoku* this, PlayState* play) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); } - if ((this->skelAnime.curFrame != 0.0f) && ((sp30 < 0 && sp2C > 0) || (sp30 < 4 && sp2C >= 5))) { + if ((this->skelAnime.curFrame != 0.0f) && (((sp30 < 0) && (sp2C > 0)) || ((sp30 < 4) && (sp2C >= 5)))) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); } } @@ -1414,7 +1418,7 @@ void func_80B88964(EnKaizoku* this, PlayState* play) { } this->unk_2D8 = 0; - if (this->frameCount <= curFrame && this->unk_2D0 < 2) { + if ((this->frameCount <= curFrame) && (this->unk_2D0 < 2)) { if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; @@ -1584,7 +1588,7 @@ void func_80B891B8(EnKaizoku* this) { // EnKaizoku_Stunned void func_80B89280(EnKaizoku* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) { - if (this->unk_2B8 != 0 && this->unk_2B8 < 60) { + if ((this->unk_2B8 != 0) && (this->unk_2B8 < 60)) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; } } @@ -1604,8 +1608,8 @@ void func_80B89280(EnKaizoku* this, PlayState* play) { this->unk_2D8 = 0; func_80B85A00(this, play, true); - if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX || - this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, 0.4f); this->unk_2B8 = 0; @@ -1655,7 +1659,7 @@ void func_80B894C0(EnKaizoku* this, PlayState* play) { } } - if (this->picto.actor.xzDistToPlayer <= 65.0f && ((play->gameplayFrames % 8) != 0)) { + if ((this->picto.actor.xzDistToPlayer <= 65.0f) && ((play->gameplayFrames % 8) != 0)) { this->swordCollider.info.elemType = ELEMTYPE_UNK2; func_80B87F70(this); } else { @@ -1717,7 +1721,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { if (curFrame >= 25.0f) { player = GET_PLAYER(play); - if (this->subCamId == 0) { + if (this->subCamId == SUB_CAM_ID_DONE) { if (!CutsceneManager_IsNext(this->csId)) { CutsceneManager_Queue(this->csId); return; @@ -1743,7 +1747,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { player->actor.shape.rot.y = player->actor.world.rot.y = Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; this->subCamUp.z = 0.0f; @@ -1775,7 +1779,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { if (!(this->swordCollider.base.atFlags & AT_BOUNCED) && (this->swordCollider.base.atFlags & AT_HIT)) { if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { this->unk_2D0 = 2; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags |= ACTOR_FLAG_100000; if (!CutsceneManager_IsNext(this->csId)) { @@ -1793,7 +1797,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { Health_ChangeBy(play, 0x10); this->unk_2D0 = 2; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags |= ACTOR_FLAG_100000; if (!CutsceneManager_IsNext(this->csId)) { @@ -1833,7 +1837,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { this->unk_2B8 = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM; } - /* fallthrough */ + // fallthrough case KAIZOKU_DMGEFF_1: if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || @@ -1908,6 +1912,9 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { sp64 = 1; } break; + + default: + break; } if (sp64) { @@ -2104,11 +2111,11 @@ void EnKaizoku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultVec3f(&sFootOffset, &this->rightFootPos); } - if (limbIndex == KAIZOKU_LIMB_02 || limbIndex == KAIZOKU_LIMB_06 || limbIndex == KAIZOKU_LIMB_07 || - limbIndex == KAIZOKU_LIMB_08 || limbIndex == KAIZOKU_LIMB_0A || limbIndex == KAIZOKU_LIMB_0C || - limbIndex == KAIZOKU_LIMB_0D || limbIndex == KAIZOKU_LIMB_0F || limbIndex == KAIZOKU_LIMB_11 || - limbIndex == KAIZOKU_LIMB_12 || limbIndex == KAIZOKU_LIMB_L_FOOT || limbIndex == KAIZOKU_LIMB_14 || - limbIndex == KAIZOKU_LIMB_15 || limbIndex == KAIZOKU_LIMB_R_FOOT || limbIndex == KAIZOKU_LIMB_17) { + if ((limbIndex == KAIZOKU_LIMB_02) || (limbIndex == KAIZOKU_LIMB_06) || (limbIndex == KAIZOKU_LIMB_07) || + (limbIndex == KAIZOKU_LIMB_08) || (limbIndex == KAIZOKU_LIMB_0A) || (limbIndex == KAIZOKU_LIMB_0C) || + (limbIndex == KAIZOKU_LIMB_0D) || (limbIndex == KAIZOKU_LIMB_0F) || (limbIndex == KAIZOKU_LIMB_11) || + (limbIndex == KAIZOKU_LIMB_12) || (limbIndex == KAIZOKU_LIMB_L_FOOT) || (limbIndex == KAIZOKU_LIMB_14) || + (limbIndex == KAIZOKU_LIMB_15) || (limbIndex == KAIZOKU_LIMB_R_FOOT) || (limbIndex == KAIZOKU_LIMB_17)) { Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); this->bodyPartsPosIndex++; 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 73de78707..86d74f69a 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -157,7 +157,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; - if (this->picto.actor.world.rot.x > 0 && this->picto.actor.world.rot.x < 8) { + if ((this->picto.actor.world.rot.x > 0) && (this->picto.actor.world.rot.x < 8)) { this->picto.actor.targetMode = KAKASI_GET_TARGETMODE(thisx); } this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y; @@ -208,12 +208,12 @@ s32 EnKakasi_ValidatePictograph(PlayState* play, Actor* thisx) { } void EnKakasi_CheckAnimationSfx(EnKakasi* this) { - if (this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING || this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL) { + if ((this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING) || (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL)) { if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING); } } - if (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR || this->animIndex == ENKAKASI_ANIM_SLOWROLL) { + if ((this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) || (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) { if (Animation_OnFrame(&this->skelanime, 4.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING); } @@ -225,7 +225,7 @@ void EnKakasi_CheckAnimationSfx(EnKakasi* this) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL); } } - if (this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER || this->animIndex == ENKAKASI_ANIM_TWIRL) { + if ((this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER) || (this->animIndex == ENKAKASI_ANIM_TWIRL)) { if (Animation_OnFrame(&this->skelanime, 1.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL); } @@ -274,12 +274,12 @@ 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.unk12048 == 0) || (play->msgCtx.unk12048 == 1) || (play->msgCtx.unk12048 == 2) || + (play->msgCtx.unk12048 == 3) || (play->msgCtx.unk12048 == 4)) { // why not 0 < x < 4? fewer branches this->unk190++; } - if (this->unk190 != 0 && this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { + if ((this->unk190 != 0) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } if (this->unk190 > 8) { @@ -299,8 +299,8 @@ void EnKakasi_InitTimeSkipDialogue(EnKakasi* this) { void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (gSaveContext.respawnFlag != -4 && gSaveContext.respawnFlag != -8) { - if (gSaveContext.save.time != CLOCK_TIME(6, 0) && gSaveContext.save.time != CLOCK_TIME(18, 0) && + if ((gSaveContext.respawnFlag != -4) && (gSaveContext.respawnFlag != -8)) { + if ((gSaveContext.save.time != CLOCK_TIME(6, 0)) && (gSaveContext.save.time != CLOCK_TIME(18, 0)) && !CHECK_EVENTINF(EVENTINF_17)) { if (this->picto.actor.textId == 0) { @@ -359,7 +359,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); this->skelanime.playSpeed = 2.0f; } - } else if (saveContextDay == 3 && gSaveContext.save.isNight) { + } else if ((saveContextDay == 3) && gSaveContext.save.isNight) { this->skelanime.playSpeed = 1.0f; if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { EnKakasi_ChangeAnim(this, 1); @@ -391,16 +391,16 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 2000, 0); // if first dialogue - if (this->picto.actor.textId != 0x1644 && this->animeFrameCount <= currentAnimeFrame && - this->animIndex == ENKAKASI_ANIM_SLOWROLL) { + if ((this->picto.actor.textId != 0x1644) && (this->animeFrameCount <= currentAnimeFrame) && + (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); this->unkCounter1A4 = 0; } // if dialogue: oh sorry come back again - if (this->picto.actor.textId == 0x1651 || this->picto.actor.textId == 0x1659) { - if (this->animeFrameCount <= currentAnimeFrame && this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER) { + if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) { + if ((this->animeFrameCount <= currentAnimeFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) { if (++this->unkCounter1A4 >= 2) { this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -408,7 +408,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } } - if (this->unkState1A8 == 2 && this->unkState196 == 2) { + if ((this->unkState1A8 == 2) && (this->unkState196 == 2)) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73); this->unkState1A8 = 0; } @@ -417,7 +417,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { Message_CloseTextbox(play); if (this->talkState == TEXT_STATE_5) { // bad song input - if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) { + if ((this->unkState196 == 2) && (this->picto.actor.textId == 0x1647)) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); } @@ -429,7 +429,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } - if (saveContextDay2 == 3 && gSaveContext.save.isNight) { + if ((saveContextDay2 == 3) && gSaveContext.save.isNight) { // text: dangerous outside this->picto.actor.textId = 0x164F; } else if (gSaveContext.save.isNight) { @@ -443,8 +443,8 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { Message_ContinueTextbox(play, this->picto.actor.textId); return; - } else if (this->picto.actor.textId == 0x165D || this->picto.actor.textId == 0x165F || - this->picto.actor.textId == 0x1660 || this->picto.actor.textId == 0x1652) { + } else if ((this->picto.actor.textId == 0x165D) || (this->picto.actor.textId == 0x165F) || + (this->picto.actor.textId == 0x1660) || (this->picto.actor.textId == 0x1652)) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4); if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -462,7 +462,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } return; - } else if (this->picto.actor.textId == 0x1645 || this->picto.actor.textId == 0x164E) { + } else if ((this->picto.actor.textId == 0x1645) || (this->picto.actor.textId == 0x164E)) { this->picto.actor.textId = 0x1650; // "Shall we dance? No Yes" if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); @@ -517,7 +517,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { this->picto.actor.textId = 0x1658; } else if (this->picto.actor.textId == 0x165C) { this->picto.actor.textId = 0x165E; - } else if (saveContextDay == 3 && gSaveContext.save.isNight) { + } else if ((saveContextDay == 3) && gSaveContext.save.isNight) { this->picto.actor.textId = 0x164F; } else { this->picto.actor.textId = 0x1652; @@ -642,11 +642,12 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) { f32 animeFrame = this->skelanime.curFrame; - if (this->postTeachTimer == 0 && this->animIndex != ENKAKASI_ANIM_TWIRL) { + if ((this->postTeachTimer == 0) && (this->animIndex != ENKAKASI_ANIM_TWIRL)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL); this->skelanime.playSpeed = 2.0f; } - if (this->postTeachTimer == 0 && this->animIndex == ENKAKASI_ANIM_TWIRL && this->animeFrameCount <= animeFrame) { + if ((this->postTeachTimer == 0) && (this->animIndex == ENKAKASI_ANIM_TWIRL) && + (this->animeFrameCount <= animeFrame)) { EnKakasi_SetupPostSongLearnDialogue(this, play); } } @@ -682,16 +683,16 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { this->unk190 = 1; } - if (this->picto.actor.textId == 0x1648 && this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR && - this->animeFrameCount <= tempAnimFrame) { + if ((this->picto.actor.textId == 0x1648) && (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) && + (this->animeFrameCount <= tempAnimFrame)) { this->unkCounter1A4++; if (this->unkCounter1A4 >= 2) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); } } - if (this->picto.actor.textId == 0x164B && this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING && - this->animeFrameCount <= tempAnimFrame) { + if ((this->picto.actor.textId == 0x164B) && (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) && + (this->animeFrameCount <= tempAnimFrame)) { this->unkCounter1A4++; if (this->unkCounter1A4 >= 2) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -762,7 +763,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL); } else { - if (this->picto.actor.textId == 0x164C || this->picto.actor.textId == 0x1661) { + if ((this->picto.actor.textId == 0x164C) || (this->picto.actor.textId == 0x1661)) { EnKakasi_SetupDigAway(this); return; } @@ -797,7 +798,7 @@ void EnKakasi_DancingRemark(EnKakasi* this, PlayState* play) { } else { CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); - if (currentDay == 3 && gSaveContext.save.isNight) { + if ((currentDay == 3) && gSaveContext.save.isNight) { EnKakasi_SetupDigAway(this); } else { Audio_PlaySubBgm(NA_BGM_SARIAS_SONG); @@ -833,15 +834,14 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { Math_Vec3f_Copy(&localVec3f, &this->subCamEyeNext); OLib_Vec3fAdd(&this->picto.actor.home, &localVec3f, &this->subCamEyeNext, OLIB_ADD_OFFSET); - if (1) {} this->subCamAtNext.x = D_80971EEC[this->unk190].x + this->unk22C.x; this->subCamAtNext.y = D_80971EEC[this->unk190].y + this->unk22C.y; this->subCamAtNext.z = D_80971EEC[this->unk190].z + this->unk22C.z; - if (this->unk190 != 6 && this->unk190 != 7) { + if ((this->unk190 != 6) && (this->unk190 != 7)) { Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext); Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext); } - if (this->unk190 >= 7 && this->unk190 != 0xE) { + if ((this->unk190 >= 7) && (this->unk190 != 0xE)) { this->picto.actor.shape.rot.y += 0x800; } @@ -853,57 +853,64 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { // twirling this->unk204 = 0x28; this->unk190++; - return; + break; + case 1: // end of twirl, start shaking back and forth - if (this->unk204 == 0 && this->animeFrameCount <= currentFrame) { + if ((this->unk204 == 0) && (this->animeFrameCount <= currentFrame)) { this->unk204 = 0x14; this->unk190++; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } - return; + break; + case 2: // camera view on the left if (this->unk204 == 0) { this->unk204 = 0x14; this->unk190++; } - return; + break; + case 3: // camera view on the right if (this->unk204 == 0) { this->unk204 = 0x14; this->unk190++; } - return; + break; + case 4: // camera view close up front if (this->unk204 == 0) { this->unk204 = 0x14; this->unk190++; } - return; + break; + case 5: // camera view zoomed out front if (this->unk204 == 0) { this->unk204 = 0xF; this->unk190++; } - return; + break; + case 6: // zoom in and sweep down in from case 5 if (this->unk204 == 0) { this->unk204 = 0xF; this->unk190++; } - return; + break; + case 7: // zoom in close from case 6 if (this->unk204 == 0) { this->unk204 = 0xA; this->unk190++; } - return; + break; case 8: case 9: @@ -921,7 +928,8 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->unk204 = 0x14; } } - return; + break; + case 14: // goes off once for some camera changes, // otherwise it's the end when camera is back to normal and Player is confused @@ -933,10 +941,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); func_80169EFC(&play->state); - //! FAKE - if (1) {} - - if (gSaveContext.save.time > CLOCK_TIME(18, 0) || gSaveContext.save.time < CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) { gSaveContext.save.time = CLOCK_TIME(6, 0); gSaveContext.respawnFlag = -4; SET_EVENTINF(EVENTINF_27); @@ -948,6 +953,10 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->unk190 = 0; this->actionFunc = EnKakasi_DoNothing; } + break; + + default: + break; } } @@ -1031,8 +1040,8 @@ 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)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && (this->picto.actor.xzDistToPlayer < this->songSummonDist) && + ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == 0xD))) { this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; play->msgCtx.ocarinaMode = 4; this->actionFunc = EnKakasi_SetupRiseOutOfGround; @@ -1119,7 +1128,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { DECR(this->unk204); if (this->unkState196 != 5) { - if (this->unk1BC.x != 0.0f || this->unk1BC.z != 0.0f) { + if ((this->unk1BC.x != 0.0f) || (this->unk1BC.z != 0.0f)) { Math_Vec3f_Copy(&this->picto.actor.focus.pos, &this->unk1BC); this->picto.actor.focus.pos.y += 10.0f; if (this->subCamId == SUB_CAM_ID_DONE) { 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 ea7faef57..fbb8346e5 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 @@ -159,7 +159,7 @@ void func_80B2654C(EnKendoJs* this, PlayState* play) { s32 phi_v0; s32 sp30; - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (CURRENT_DAY != 0) { sp30 = CURRENT_DAY - 1; } else { 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 dd26ba172..e80807b08 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -72,7 +72,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80B419B0; this->actor.textId = 0xC4E; this->unk_29C |= 1; - this->unk_2EA = 3; + this->getItemId = GI_RUPEE_10; } else { EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B42714; @@ -420,12 +420,12 @@ void func_80B4163C(EnKgy* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { if (this->unk_2D2 == 6) { - if (this->unk_2EA > 0) { + if (this->getItemId > GI_NONE) { EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0.0f); - this->unk_2EA--; + this->getItemId--; } else { EnKgy_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f); - this->unk_2EA = (s32)Rand_ZeroFloat(3.0f) + 2; + this->getItemId = (s32)Rand_ZeroFloat(GI_RUPEE_PURPLE - GI_RUPEE_BLUE) + GI_RUPEE_BLUE; } } else { EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, -5.0f); @@ -598,7 +598,7 @@ void func_80B41D64(EnKgy* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_10000; func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { - Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f); + Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f); } func_80B40EE8(this, play); } @@ -790,16 +790,16 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC50: if (func_80B40D8C(play)) { - this->unk_2EA = 57; + this->getItemId = GI_SWORD_GILDED; this->actor.textId = 0xC53; } else { - this->unk_2EA = 56; + this->getItemId = GI_SWORD_RAZOR; this->actor.textId = 0xC51; } Message_CloseTextbox(play); this->actionFunc = func_80B41D64; func_80B413C8(this); - Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f); + Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f); break; case 0xC51: 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 8207678fd..94f2aabd5 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -31,7 +31,7 @@ typedef struct EnKgy { /* 0x2E4 */ s16 unk_2E4; /* 0x2E6 */ s16 unk_2E6; /* 0x2E8 */ s16 unk_2E8; - /* 0x2EA */ s16 unk_2EA; + /* 0x2EA */ s16 getItemId; /* 0x2EC */ LightInfo lightInfo; /* 0x2FC */ LightNode* lightNode; /* 0x300 */ s16 unk_300; 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 7fb2a13a3..44bb67443 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -252,7 +252,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { s32 pad; s16 sp2E; - if (sAnimIndex != 9 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + if ((sAnimIndex != 9) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { if (sAnimIndex == 3) { if (D_80AC0250 < 3) { D_80AC0250++; @@ -268,7 +268,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - if (sAnimIndex == 13 && Animation_OnFrame(&this->skelAnime, 37.0f)) { + if ((sAnimIndex == 13) && Animation_OnFrame(&this->skelAnime, 37.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK); } @@ -291,7 +291,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - if (this->pathIndex < this->pathPointsCount - 1) { + if (this->pathIndex < (this->pathPointsCount - 1)) { this->pathIndex++; } else { this->pathIndex = 0; @@ -345,7 +345,7 @@ void EnMa4_Wait(EnMa4* this, PlayState* play) { } } - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { EnMa4_StartDialogue(this, play); EnMa4_SetupDialogueHandler(this); } else if (this->type != MA4_TYPE_ALIENS_WON || ABS_ALT(yaw) < 0x4000) { @@ -483,6 +483,9 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { func_80151BB4(play, 5); } break; + + default: + break; } } } @@ -614,6 +617,9 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { this->textId = 0x3359; } break; + + default: + break; } } } @@ -629,9 +635,6 @@ void EnMa4_SetupDialogueHandler(EnMa4* this) { void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) { switch (Message_GetState(&play->msgCtx)) { - default: - break; - case TEXT_STATE_CHOICE: // Player answered a question EnMa4_HandlePlayerChoice(this, play); break; @@ -652,6 +655,9 @@ void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) { case TEXT_STATE_CLOSING: case TEXT_STATE_3: break; + + default: + break; } if (this->type != MA4_TYPE_ALIENS_WON) { @@ -818,12 +824,15 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { this->hasBow = false; EnMa4_ChangeAnim(this, 4); break; + + default: + break; } } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); - if (sCueId == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + if ((sCueId == 2) && (this->animTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMa4_ChangeAnim(this, 7); } } else { @@ -845,7 +854,7 @@ void EnMa4_EndEponasSongCs(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); this->actor.flags |= ACTOR_FLAG_10000; - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { player->stateFlags1 &= ~PLAYER_STATE1_20; Message_StartTextbox(play, 0x334C, &this->actor); this->textId = 0x334C; @@ -1054,7 +1063,9 @@ void EnMa4_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, } else if (limbIndex == ROMANI_LIMB_LEFT_HAND) { if (this->hasBow == true) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gRomaniBowDL); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1064,6 +1075,7 @@ void EnMa4_Draw(Actor* thisx, PlayState* play) { EnMa4* this = THIS; OPEN_DISPS(play->state.gfxCtx); + if (this->type == MA4_TYPE_ALIENS_WON) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gRomaniWoodenBoxDL); 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 89ee4aada..00281d6e4 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 @@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { this->unk320 = 0; this->eyeTexIndex = 0; - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_SetFaceExpression(this, 0, 1); } else { EnMaYto_SetFaceExpression(this, 5, 2); @@ -186,13 +186,13 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { switch (this->type) { case MA_YTO_TYPE_DEFAULT: - if (CURRENT_DAY == 3 && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; case MA_YTO_TYPE_DINNER: - if (CURRENT_DAY != 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; @@ -205,7 +205,7 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { } else if (((this->actor.params & 0x0F00) >> 8) == 0) { return false; } - if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) { + if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) { return false; } break; @@ -218,6 +218,7 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_4: + default: break; } @@ -304,8 +305,8 @@ s32 EnMaYto_SearchRomani(EnMaYto* this, PlayState* play) { EnMaYts* romani = (EnMaYts*)npcActor; s16 romaniType = EN_MA_YTS_GET_TYPE(&romani->actor); - if ((this->type == MA_YTO_TYPE_DINNER && romaniType == MA_YTS_TYPE_SITTING) || - (this->type == MA_YTO_TYPE_BARN && romaniType == MA_YTS_TYPE_BARN)) { + if (((this->type == MA_YTO_TYPE_DINNER) && (romaniType == MA_YTS_TYPE_SITTING)) || + ((this->type == MA_YTO_TYPE_BARN) && (romaniType == MA_YTS_TYPE_BARN))) { this->actor.child = &romani->actor; romani->actor.parent = &this->actor; return true; @@ -394,8 +395,8 @@ void EnMaYto_DefaultWait(EnMaYto* this, PlayState* play) { s16 direction; direction = rotY - this->actor.yawTowardsPlayer; - if (Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x3000, 0x100) == 0 && - this->animIndex == 1) { + if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x3000, 0x100) && + (this->animIndex == 1)) { this->animIndex = 11; EnMaYto_ChangeAnim(this, 11); } @@ -439,7 +440,7 @@ void EnMaYto_DefaultDialogueHandler(EnMaYto* this, PlayState* play) { } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x3000, 0x100); - if (this->textId == 0x3395 && this->skelAnime.animation == &gCremiaSpreadArmsStartAnim && + if ((this->textId == 0x3395) && (this->skelAnime.animation == &gCremiaSpreadArmsStartAnim) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMaYto_ChangeAnim(this, 4); } @@ -490,12 +491,15 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { this->textId = 0x3396; func_80151BB4(play, 6); break; + + default: + break; } } } void EnMaYto_SetupDinnerWait(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 0); this->unk31E = 0; } else { @@ -516,7 +520,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } else { Actor* child = this->actor.child; - if (child != NULL && Actor_ProcessTalkRequest(child, &play->state)) { + if ((child != NULL) && Actor_ProcessTalkRequest(child, &play->state)) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_DinnerStartDialogue(this, play); EnMaYto_SetupDinnerDialogueHandler(this); @@ -524,7 +528,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { func_800B8614(&this->actor, play, 120.0f); child = this->actor.child; - if (child != NULL && CURRENT_DAY != 2) { + if ((child != NULL) && (CURRENT_DAY != 2)) { s16 childDirection = child->shape.rot.y - child->yawTowardsPlayer; if (ABS_ALT(childDirection) < 0x4000) { @@ -536,7 +540,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -682,12 +686,15 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { this->textId = 0x33A8; func_80151BB4(play, 6); break; + + default: + break; } } } void EnMaYto_SetupBarnWait(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_ChangeAnim(this, 13); func_80B90E50(this, 0); this->unk31E = 0; @@ -711,11 +718,11 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } else { Actor* child = this->actor.child; - if (child != NULL && Actor_ProcessTalkRequest(child, &play->state)) { + if ((child != NULL) && Actor_ProcessTalkRequest(child, &play->state)) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_BarnStartDialogue(this, play); EnMaYto_SetupBarnDialogueHandler(this); - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ABS_ALT(direction) < 0x2000) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || (ABS_ALT(direction) < 0x2000)) { func_800B8614(&this->actor, play, 100.0f); child = this->actor.child; @@ -727,7 +734,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -948,6 +955,9 @@ void EnMaYto_AfterMilkRunChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetupPostMilkRunGiveReward(this); EnMaYto_PostMilkRunGiveReward(this, play); break; + + default: + break; } } } @@ -1047,12 +1057,15 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) { case 3: EnMaYto_ChangeAnim(this, 22); break; + + default: + break; } } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); - if (sCueId == 2 && this->skelAnime.animation == &gCremiaHugStartAnim && + if ((sCueId == 2) && (this->skelAnime.animation == &gCremiaHugStartAnim) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMaYto_ChangeAnim(this, 20); } @@ -1066,14 +1079,14 @@ void EnMaYto_SetupPostMilkRunWaitDialogueEnd(EnMaYto* this) { } void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) { - if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE || Message_GetState(&play->msgCtx) == TEXT_STATE_5) { - if (Message_ShouldAdvance(play) && Message_GetState(&play->msgCtx) == TEXT_STATE_5) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) { + if (Message_ShouldAdvance(play) && (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) { func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); Message_CloseTextbox(play); } } - if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE && play->msgCtx.unk120B1 == 0) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.unk120B1 == 0)) { EnMaYto_SetupPostMilkRunEnd(this); } } @@ -1096,7 +1109,7 @@ void EnMaYto_PostMilkRunEnd(EnMaYto* this, PlayState* play) { void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { if (CURRENT_DAY == 1) { - if (Player_GetMask(play) != PLAYER_MASK_NONE && gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { switch (Player_GetMask(play)) { case PLAYER_MASK_ROMANI: Message_StartTextbox(play, 0x235D, &this->actor); @@ -1155,7 +1168,7 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { switch (CURRENT_DAY) { case 1: - if (Player_GetMask(play) != PLAYER_MASK_NONE && gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { switch (Player_GetMask(play)) { case PLAYER_MASK_ROMANI: Message_StartTextbox(play, 0x235D, &this->actor); @@ -1217,6 +1230,9 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { this->textId = 0x33A7; } break; + + default: + break; } } @@ -1324,7 +1340,7 @@ void EnMaYto_UpdateEyes(EnMaYto* this) { void func_80B90E50(EnMaYto* this, s16 arg1) { EnMaYts* romani = (EnMaYts*)this->actor.child; - if (romani != NULL && romani->actor.id == ACTOR_EN_MA_YTS) { + if ((romani != NULL) && (romani->actor.id == ACTOR_EN_MA_YTS)) { romani->unk_32C = arg1; } } @@ -1344,7 +1360,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth } void EnMaYto_InitFaceExpression(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_SetFaceExpression(this, 0, 1); EnMaYto_SetRomaniFaceExpression(this, 0, 0); } else { @@ -1372,27 +1388,33 @@ s32 EnMaYto_HasSpokenToPlayerToday(void) { return true; } break; + + default: + break; } return false; } s32 EnMaYto_HasSpokenToPlayer(void) { - // Please note no case here has a `break`. switch (CURRENT_DAY) { case 3: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) { return true; } - + // fallthrough case 2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) { return true; } - + // fallthrough case 1: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) { return true; } + break; + + default: + break; } return false; } @@ -1410,6 +1432,9 @@ void EnMaYto_SetTalkedFlag(void) { case 3: SET_WEEKEVENTREG(WEEKEVENTREG_13_10); break; + + default: + break; } } @@ -1458,7 +1483,8 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - if (this->type == MA_YTO_TYPE_BARN && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + + if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL); } 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 8eacc7962..163f89fcd 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 @@ -123,7 +123,7 @@ void func_80B8D12C(EnMaYts* this, PlayState* play) { Player* player = GET_PLAYER(play); s16 trackingMode = (this->unk_32C == 2) ? NPC_TRACKING_NONE : NPC_TRACKING_PLAYER_AUTO_TURN; - if (this->unk_32C == 0 || this->actor.parent == NULL) { + if ((this->unk_32C == 0) || (this->actor.parent == NULL)) { this->interactInfo.trackPos = player->actor.world.pos; this->interactInfo.trackPos.y -= -10.0f; } else { @@ -144,7 +144,7 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SITTING: this->actor.targetMode = 6; // Day 1 or "Winning" the alien invasion - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYts_ChangeAnim(this, 14); } else { EnMaYts_ChangeAnim(this, 18); @@ -188,6 +188,9 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { return false; } break; + + default: + break; } break; @@ -195,7 +198,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { // Failing the alien invasion if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; - } else if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) { + } else if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) { return false; } break; @@ -209,6 +212,9 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_ENDCREDITS: break; + + default: + break; } return true; @@ -266,7 +272,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->mouthTexIndex = 0; this->unk_32C = 2; EnMaYts_SetupEndCreditsHandler(this); - } else if (CURRENT_DAY == 2 && gSaveContext.save.isNight == 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYts_SetupStartDialogue(this); } else { EnMaYts_SetupDoNothing(this); @@ -406,6 +412,9 @@ void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) { this->hasBow = true; EnMaYts_ChangeAnim(this, 20); break; + + default: + break; } } } @@ -526,7 +535,9 @@ void EnMaYts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro } else if (limbIndex == ROMANI_LIMB_LEFT_HAND) { if (this->hasBow == true) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gRomaniBowDL); + CLOSE_DISPS(play->state.gfxCtx); } } 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 e7941a4d5..315bc1ffd 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -608,9 +608,11 @@ void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if ((limbIndex == 7) || (limbIndex == 8)) { OPEN_DISPS(play->state.gfxCtx); + Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, *dList); + CLOSE_DISPS(play->state.gfxCtx); } 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 441c27cdc..6eceb89d6 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -74,7 +74,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) { this->textIdIndex = 3; } - if (gSaveContext.save.day != 3 || !gSaveContext.save.isNight) { + if ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight) { Actor_Kill(&this->actor); } } else { @@ -113,7 +113,7 @@ void EnMuto_SetHeadRotation(EnMuto* this) { s32 yawRotToTarget = ABS_ALT(BINANG_SUB(this->yawTowardsTarget, this->actor.world.rot.y)); this->headRotTarget.y = 0; - if (this->actor.xzDistToPlayer < 200.0f && yawRotToTarget < 0x4E20) { + if ((this->actor.xzDistToPlayer < 200.0f) && (yawRotToTarget < 0x4E20)) { this->headRotTarget.y = BINANG_SUB(this->yawTowardsTarget, this->actor.world.rot.y); if (this->headRotTarget.y > 0x2710) { this->headRotTarget.y = 0x2710; @@ -146,7 +146,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) { if (1) {} // Needed to match - if (!this->isInMayorsRoom && Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { + if (!this->isInMayorsRoom && (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK)) { this->actor.textId = 0x2363; } @@ -229,8 +229,8 @@ void EnMuto_InDialogue(EnMuto* this, PlayState* play) { } } - if (play->msgCtx.currentTextId == 0x2AC6 || play->msgCtx.currentTextId == 0x2AC7 || - play->msgCtx.currentTextId == 0x2AC8) { + if ((play->msgCtx.currentTextId == 0x2AC6) || (play->msgCtx.currentTextId == 0x2AC7) || + (play->msgCtx.currentTextId == 0x2AC8)) { this->skelAnime.playSpeed = 0.0f; this->yawTowardsTarget = this->actor.yawTowardsPlayer; this->skelAnime.curFrame = 30.0f; @@ -254,7 +254,7 @@ void EnMuto_Update(Actor* thisx, PlayState* play2) { EnMuto_SetHeadRotation(this); } - if (this->isInMayorsRoom && gSaveContext.save.day == 3 && gSaveContext.save.isNight) { + if (this->isInMayorsRoom && (gSaveContext.save.day == 3) && gSaveContext.save.isNight) { Actor_Kill(&this->actor); return; } 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 9f364c2c6..03cdad42c 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -188,6 +188,7 @@ void EnNiw_AnimateWingHead(EnNiw* this, PlayState* play, s16 animationState) { this->targetLimbRots[2] = 0.0f; // both wingRotZ this->targetLimbRots[1] = 0.0f; break; + case NIW_ANIM_HEAD_PECKING: this->unkTimer24E = 3; this->targetLimbRots[2] = 7000.0f * tempOne; // both wingRotZ @@ -235,6 +236,9 @@ void EnNiw_AnimateWingHead(EnNiw* this, PlayState* play, s16 animationState) { this->targetLimbRots[7] = 10000.0f; } break; + + default: + break; } } @@ -271,7 +275,7 @@ void EnNiw_SpawnAttackNiw(EnNiw* this, PlayState* play) { Vec3f newNiwPos; Actor* attackNiw; - if (this->attackNiwSpawnTimer == 0 && this->attackNiwCount < 7) { + if ((this->attackNiwSpawnTimer == 0) && (this->attackNiwCount < 7)) { xView = play->view.at.x - play->view.eye.x; yView = play->view.at.y - play->view.eye.y; zView = play->view.at.z - play->view.eye.z; @@ -312,7 +316,7 @@ void EnNiw_UpdateRunning(EnNiw* this, PlayState* play, s32 isStormCucco) { runningDirection = -runningAngles[isStormCucco]; } - if (isStormCucco == true && (this->runAwayTimer == 0 || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) { + if ((isStormCucco == true) && ((this->runAwayTimer == 0) || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) { this->runAwayTimer = 150; if (this->yawTimer == 0) { this->yawTimer = 70; @@ -367,7 +371,7 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) { Math_ApproachF(&this->targetLimbRots[9], sHeadRotations[this->headRotationToggle], 0.5f, 4000.0f); // head rot } - if (this->unkIdleTimer2 == 0 && this->unkIdleTimer == 0) { + if ((this->unkIdleTimer2 == 0) && (this->unkIdleTimer == 0)) { this->unk298++; if (this->unk298 > 7) { this->unkIdleTimer2 = Rand_ZeroFloat(30.0f); @@ -469,14 +473,14 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { void EnNiw_Thrown(EnNiw* this, PlayState* play) { if (this->unk2EC == 0) { - if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - this->unk2EC = 1; - this->hoppingTimer = 80; // hop timer - this->actor.speed = 0.0f; - this->actor.velocity.y = 4.0f; - } else { - return; // wait until back on floor + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + // wait until back on floor + return; } + this->unk2EC = 1; + this->hoppingTimer = 80; + this->actor.speed = 0.0f; + this->actor.velocity.y = 4.0f; } else { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->sfxTimer1 = 0; @@ -683,10 +687,10 @@ void EnNiw_LandBeforeIdle(EnNiw* this, PlayState* play) { } void EnNiw_CheckRage(EnNiw* this, PlayState* play) { - if (!this->isStormActive && this->iframeTimer == 0 && this->niwType == NIW_TYPE_REGULAR) { + if (!this->isStormActive && (this->iframeTimer == 0) && (this->niwType == NIW_TYPE_REGULAR)) { // is this used? this is before we even know if we've been hit - if (this->niwState != NIW_STATE_RUNNING && this->unk2BC.x != 90000.0f) { + if ((this->niwState != NIW_STATE_RUNNING) && (this->unk2BC.x != 90000.0f)) { this->iframeTimer = 10; this->sfxTimer1 = 30; this->unk29E = 1; @@ -703,7 +707,7 @@ void EnNiw_CheckRage(EnNiw* this, PlayState* play) { this->actor.colChkInfo.health--; } - if (!sCuccoStormActive && this->actor.colChkInfo.health == 0) { + if (!sCuccoStormActive && (this->actor.colChkInfo.health == 0)) { this->runAwayTimer = 100; // main cucco will run away after storm starts sCuccoStormActive = true; this->unk298 = 0; @@ -774,7 +778,7 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z; featherScale = Rand_ZeroFloat(6.0f) + 6.0f; - if (this->unk29E == 2 && this->unk308 != 0) { + if ((this->unk29E == 2) && (this->unk308 != 0)) { pos.y += 10.0f; } @@ -817,7 +821,7 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); // if cucco is off the map - if (this->actor.floorHeight <= BGCHECK_Y_MIN || this->actor.floorHeight >= BGCHECK_Y_MAX) { + if ((this->actor.floorHeight <= BGCHECK_Y_MIN) || (this->actor.floorHeight >= BGCHECK_Y_MAX)) { Vec3f viewAtToEye; // Direction vector for the direction the camera is facing @@ -881,12 +885,12 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { return; } - if (this->isStormActive && (this->actor.xyzDistToPlayerSq < SQ(dist)) && player->invincibilityTimer == 0) { + if (this->isStormActive && (this->actor.xyzDistToPlayerSq < SQ(dist)) && (player->invincibilityTimer == 0)) { func_800B8D50(play, &this->actor, 2.0f, this->actor.world.rot.y, 0.0f, 0x10); } EnNiw_CheckRage(this, play); - if (this->flutterSfxTimer == 0 && this->niwState == NIW_STATE_HELD) { + if ((this->flutterSfxTimer == 0) && (this->niwState == NIW_STATE_HELD)) { this->flutterSfxTimer = 7; Actor_PlaySfx(&this->actor, NA_SE_EN_CHICKEN_FLUTTER); } @@ -901,13 +905,13 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { } } - if (!this->isStormActive && this->niwType == NIW_TYPE_REGULAR) { + if (!this->isStormActive && (this->niwType == NIW_TYPE_REGULAR)) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); if (play) {} - if (this->niwState != NIW_STATE_HELD && this->niwState != NIW_STATE_FALLING) { + if ((this->niwState != NIW_STATE_HELD) && (this->niwState != NIW_STATE_FALLING)) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } 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 afd6eea3e..ac1e9749a 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -164,7 +164,7 @@ s32 EnNwc_IsFound(EnNwc* this, PlayState* play) { return false; } - if ((player->stateFlags3 & PLAYER_STATE3_20000000) && this->actor.xzDistToPlayer < 100.0f) { + if ((player->stateFlags3 & PLAYER_STATE3_20000000) && (this->actor.xzDistToPlayer < 100.0f)) { return true; } @@ -178,26 +178,34 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) { this->stateTimer = 10; this->actionFunc = EnNwc_CheckForBreman; break; + case NWC_STATE_TURNING: this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f; this->actionFunc = EnNwc_Turn; - this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(65536.0f); + this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(0x10000); break; + case NWC_STATE_HOPPING_FORWARD: this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f; this->actionFunc = EnNwc_HopForward; break; + case NWC_STATE_FOLLOWING: this->actionFunc = EnNwc_Follow; this->transformTimer = 0; this->randomRot = (s16)(s32)randPlusMinusPoint5Scaled(10000.0f); break; + case NWC_STATE_RUNNING: - this->actor.world.rot.y = this->actor.home.rot.z * 0x3000 & 0xFFFF; // Fake Match?: & 0xFFFF + //! FAKE: & 0xFFFF + this->actor.world.rot.y = this->actor.home.rot.z * 0x3000 & 0xFFFF; this->actor.shape.rot.y = this->actor.world.rot.y; this->stateTimer = Rand_ZeroFloat(40.0f) + 120.0f; this->actionFunc = EnNwc_RunAway; break; + + default: + break; } this->state = newState; @@ -289,7 +297,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) { Math_SmoothStepToS(&this->upperBodyRotY, targetUpperBodyRot, 2, 0x1B58, 0x3E8); } else { // NOT grown up - if ((this->stateTimer & 3) == 3 && this->stateTimer & 20) { + if (((this->stateTimer & 3) == 3) && ((this->stateTimer & 0x14) != 0)) { this->actor.velocity.y = 2.0f; // hop up and down } if ((this->stateTimer & 0x1B) == 24) { @@ -473,7 +481,7 @@ void EnNwc_Update(Actor* thisx, PlayState* play) { this->blinkTimer = Rand_S16Offset(0x3C, 0x3C); } - if (this->blinkTimer == 1 || this->blinkTimer == 3) { + if ((this->blinkTimer == 1) || (this->blinkTimer == 3)) { this->blinkState = true; } else { this->blinkState = false; @@ -508,7 +516,7 @@ s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p if (limbIndex == NIW_LIMB_UPPER_BODY) { rot->y += this->upperBodyRotY; } - if (limbIndex == NIW_LIMB_RIGHT_WING_ROOT || limbIndex == NIW_LIMB_LEFT_WING_ROOT) { + if ((limbIndex == NIW_LIMB_RIGHT_WING_ROOT) || (limbIndex == NIW_LIMB_LEFT_WING_ROOT)) { rot->y += this->footRotY; rot->z += this->footRotZ; } 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 045da7fa1..d4996d74f 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -901,6 +901,7 @@ void EnPeehat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultVecX(-400.0f, vec2); OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; Matrix_Translate(-1000.0f, 0.0f, 0.0f, MTXMODE_APPLY); 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 56d0f5326..a1ea97199 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 @@ -242,9 +242,9 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 dist; - if (this->megCloneId == POE_SISTERS_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) { - if ((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0 || - player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) && + if ((this->megCloneId == POE_SISTERS_MEG_REAL) || (this->actionFunc != EnPoSisters_DamageFlinch)) { + if (((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) || + (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) && ((player->actor.world.pos.y - player->actor.floorHeight) < 1.0f)) { Math_StepToF(&this->megDistToPlayer, 110.0f, 3.0f); } else { @@ -277,7 +277,8 @@ void EnPoSisters_MatchPlayerY(EnPoSisters* this, PlayState* play) { this->actor.world.pos.y += (2.0f + (0.5f * Rand_ZeroOne())) * Math_SinS(this->floatingBobbingTimer * 0x800); // fully opaque - if (this->color.a == 255 && this->actionFunc != EnPoSisters_SpinAttack && this->actionFunc != EnPoSisters_SpinUp) { + if ((this->color.a == 255) && (this->actionFunc != EnPoSisters_SpinAttack) && + (this->actionFunc != EnPoSisters_SpinUp)) { if (this->actionFunc == EnPoSisters_Flee) { func_800B9010(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG); } else { @@ -579,7 +580,7 @@ void EnPoSisters_Flee(EnPoSisters* this, PlayState* play) { this->actor.world.rot.y = this->actor.shape.rot.y; this->poSisterFlags |= POE_SISTERS_FLAG_UPDATE_SHAPE_ROT; EnPoSisters_SetupSpinToInvis(this); - } else if (this->fleeTimer == 0 && this->actor.xzDistToPlayer > 480.0f) { + } else if ((this->fleeTimer == 0) && (this->actor.xzDistToPlayer > 480.0f)) { this->actor.world.rot.y = this->actor.shape.rot.y; EnPoSisters_SetupAimlessIdleFlying(this); } @@ -818,7 +819,7 @@ void EnPoSisters_MegSurroundPlayer(EnPoSisters* this, PlayState* play) { DECR(this->megSurroundTimer); - if (this->megClonesRemaining > 0 && this->megSurroundTimer >= 16) { + if ((this->megClonesRemaining > 0) && (this->megSurroundTimer >= 16)) { SkelAnime_Update(&this->skelAnime); if (this->megCloneId == POE_SISTERS_MEG_REAL) { if (ABS_ALT(16 - this->floatingBobbingTimer) < 14) { @@ -1092,7 +1093,7 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve }; EnPoSisters* this = THIS; - if (limbIndex == POE_SISTERS_LIMB_ROOT && (this->poSisterFlags & POE_SISTERS_FLAG_REAL_MEG_ROTATION)) { + if ((limbIndex == POE_SISTERS_LIMB_ROOT) && (this->poSisterFlags & POE_SISTERS_FLAG_REAL_MEG_ROTATION)) { if (this->megSurroundTimer >= 284) { rot->x += (this->megSurroundTimer - 284) * 0x1000; } else { @@ -1153,8 +1154,8 @@ void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s Matrix_MultVecX(3000.0f, &this->limbPos[7]); } - if (this->actionFunc == EnPoSisters_DeathStage1 && this->deathTimer >= 8 && - limbIndex == POE_SISTERS_LIMB_MAIN_BODY) { + if ((this->actionFunc == EnPoSisters_DeathStage1) && (this->deathTimer >= 8) && + (limbIndex == POE_SISTERS_LIMB_MAIN_BODY)) { gSPMatrix((*gfx)++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList((*gfx)++, gPoeSistersBurnBodyDL); } 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 d95337728..fcc01b1ec 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -153,14 +153,12 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn if (currentPoint == 0) { diffX = points[1].x - points[0].x; diffZ = points[1].z - points[0].z; + } else if (currentPoint == (pathCount - 1)) { + diffX = points[pathCount - 1].x - points[pathCount - 2].x; + diffZ = points[pathCount - 1].z - points[pathCount - 2].z; } else { - if (currentPoint == (pathCount - 1)) { - diffX = points[pathCount - 1].x - points[pathCount - 2].x; - diffZ = points[pathCount - 1].z - points[pathCount - 2].z; - } else { - diffX = points[currentPoint + 1].x - points[currentPoint - 1].x; - diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; - } + diffX = points[currentPoint + 1].x - points[currentPoint - 1].x; + diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); @@ -188,14 +186,12 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32 if (currentPoint == 0) { diffX = points[0].x - points[1].x; diffZ = points[0].z - points[1].z; + } else if (currentPoint == (pathCount - 1)) { + diffX = points[pathCount - 2].x - points[pathCount - 1].x; + diffZ = points[pathCount - 2].z - points[pathCount - 1].z; } else { - if (currentPoint == (pathCount - 1)) { - diffX = points[pathCount - 2].x - points[pathCount - 1].x; - diffZ = points[pathCount - 2].z - points[pathCount - 1].z; - } else { - diffX = points[currentPoint - 1].x - points[currentPoint + 1].x; - diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z; - } + diffX = points[currentPoint - 1].x - points[currentPoint + 1].x; + diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z; } func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); @@ -236,19 +232,23 @@ s32 EnRuppecrow_CanSpawnBlueRupees(PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: return false; + case PLAYER_FORM_GORON: return true; + case PLAYER_FORM_ZORA: return false; + case PLAYER_FORM_HUMAN: if (player->stateFlags1 & PLAYER_STATE1_800000) { return true; } else { return false; } - } - return false; + default: + return false; + } } void EnRuppecrow_UpdateRupees(EnRuppecrow* this) { @@ -257,7 +257,7 @@ void EnRuppecrow_UpdateRupees(EnRuppecrow* this) { for (rupeeIndex = 0; rupeeIndex < ENRUPPECROW_RUPEE_COUNT; rupeeIndex++) { rupee = this->rupees[rupeeIndex]; - if (rupee != NULL && rupee->unk152 == 0) { + if ((rupee != NULL) && (rupee->unk152 == 0)) { Actor_Kill(&rupee->actor); } } @@ -375,16 +375,19 @@ s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) { return true; } break; + case PLAYER_FORM_GORON: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) { return true; } break; + case PLAYER_FORM_ZORA: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_NEW_WAVE) { return true; } break; + case PLAYER_FORM_HUMAN: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA) { return true; @@ -394,6 +397,9 @@ s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) { return true; } break; + + default: + break; } } @@ -407,6 +413,7 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) { case PLAYER_FORM_DEKU: this->speedModifier = 7.0f; break; + case PLAYER_FORM_GORON: if (player->stateFlags3 & PLAYER_STATE3_1000) { // Goron Link is curled this->speedModifier = 19.0f; @@ -414,9 +421,11 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) { this->speedModifier = 7.0f; } break; + case PLAYER_FORM_ZORA: this->speedModifier = 7.0f; break; + case PLAYER_FORM_HUMAN: if (player->stateFlags1 & PLAYER_STATE1_800000) { this->speedModifier = 16.0f; @@ -424,6 +433,9 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) { this->speedModifier = 7.0f; } break; + + default: + break; } this->skelAnime.playSpeed = this->speedModifier / 6.0f; 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 8d8991fba..bde455986 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->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -188,7 +188,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->shopType == BOMB_SHOP) { - if (gSaveContext.save.day == 1 && gSaveContext.save.time >= CLOCK_TIME(6, 00)) { + if ((gSaveContext.save.day == 1) && (gSaveContext.save.time >= CLOCK_TIME(6, 00))) { return 0x648; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { return 0x649; @@ -199,10 +199,13 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: return 0x12D8; + case PLAYER_FORM_GORON: return 0x12D9; + case PLAYER_FORM_ZORA: return 0x12DA; + default: return 0x12D7; } @@ -405,6 +408,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { case ZORA_SHOP: this->shopType = ZORA_SHOP; break; + case GORON_SHOP: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { this->shopType = GORON_SHOP_SPRING; @@ -412,9 +416,11 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { this->shopType = GORON_SHOP; } break; + case BOMB_SHOP: this->shopType = BOMB_SHOP; break; + default: Actor_Kill(&this->actor); return; @@ -579,10 +585,10 @@ void EnSob1_UpdateJoystickInputState(PlayState* play, EnSob1* this) { s8 stickY = CONTROLLER1(&play->state)->rel.stick_y; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -595,10 +601,10 @@ void EnSob1_UpdateJoystickInputState(PlayState* play, EnSob1* this) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -646,6 +652,7 @@ s32 EnSob1_FacingShopkeeperDialogResult(EnSob1* this, PlayState* play) { func_8019F208(); EnSob1_TalkToShopkeeper(play, this); return true; + case 1: func_8019F230(); if (this->shopType == BOMB_SHOP) { @@ -986,6 +993,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_SUCCESS_2: func_8019F208(); item->buyFunc(play, item); @@ -1002,38 +1010,49 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_NO_ROOM: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNoRoomTextIds[this->shopType]); break; + case CANBUY_RESULT_NEED_EMPTY_BOTTLE: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->shopType]); break; + case CANBUY_RESULT_NEED_RUPEES: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->shopType]); break; + case CANBUY_RESULT_CANNOT_GET_NOW: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->shopType]); break; + case CANBUY_RESULT_CANNOT_GET_NOW_2: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sCannotGetNow2TextIds[this->shopType]); break; + case CANBUY_RESULT_NO_ROOM_2: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNoRoom2TextIds[this->shopType]); break; + case CANBUY_RESULT_ALREADY_HAVE: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, 0x658); break; + case CANBUY_RESULT_HAVE_BETTER: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, 0x659); break; + + default: + break; } } @@ -1047,6 +1066,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) { case 0: EnSob1_HandleCanBuyItem(play, this); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; @@ -1179,11 +1199,11 @@ void EnSob1_UpdateItemSelectedProperty(EnSob1* this) { for (i = 0; i < ARRAY_COUNT(this->items); i++, items++) { item = *items; if (item != NULL) { - if (this->actionFunc != EnSob1_SelectItem && this->actionFunc != EnSob1_CannotBuy && - this->drawCursor == 0) { + if ((this->actionFunc != EnSob1_SelectItem) && (this->actionFunc != EnSob1_CannotBuy) && + (this->drawCursor == 0)) { item->isSelected = false; } else { - item->isSelected = this->cursorIndex == i ? true : false; + item->isSelected = (this->cursorIndex == i) ? true : false; } } } @@ -1330,10 +1350,10 @@ void EnSob1_ChangeObject(EnSob1* this, PlayState* play) { 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 ((this->unusedObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) { return false; } - if (this->shopkeeperAnimObjIndex >= 0 && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) { + if ((this->shopkeeperAnimObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) { return false; } return true; 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 e8b67451c..f4cc458cb 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -546,7 +546,7 @@ void func_808A650C(EnSt* this) { } s32 func_808A6580(EnSt* this, PlayState* play) { - Player* sp3C = GET_PLAYER(play); + Player* player = GET_PLAYER(play); s32 ret = false; s32 i; @@ -666,7 +666,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { if ((this->unk_316 == 0) && (this->unk_314 == 0) && (this->unk_312 == 0) && !(this->collider1.base.atFlags & AT_BOUNCED) && (this->actor.colChkInfo.health != 0)) { play->damagePlayer(play, -8); - Actor_PlaySfx(&sp3C->actor, NA_SE_PL_BODY_HIT); + Actor_PlaySfx(&player->actor, NA_SE_PL_BODY_HIT); func_800B8D98(play, &this->actor, 4.0f, this->actor.yawTowardsPlayer, 6.0f); this->unk_316 = 10; this->unk_18C |= 1; 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 877a400d5..74258058f 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -267,6 +267,7 @@ void func_80BAA9B4(EnSuttari* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } break; + default: if ((this->animIndex != 1) && (curFrame == frameCount)) { this->animIndex = 1; @@ -281,23 +282,31 @@ void func_80BAAA94(EnSuttari* this) { this->animIndex = 1; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); break; + case 0x29E9: this->enFsn->flags |= ENFSN_ANGRY; break; + case 0x29EA: this->enFsn->flags |= ENFSN_CALM_DOWN; break; + case 0x29EB: this->enFsn->flags |= ENFSN_OFFER_FINAL_PRICE; break; + case 0x29EC: this->animIndex = 7; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); break; + case 0x29ED: this->animIndex = 1; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); break; + + default: + break; } } @@ -309,52 +318,64 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { this->csIdIndex = 0; this->textId = 0x29E5; break; + case 0x29E5: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29E6; break; + case 0x29E6: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29E7; break; + case 0x29E7: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29E8; break; + case 0x29E8: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29E9; break; + case 0x29E9: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29EA; break; + case 0x29EA: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29EB; break; + case 0x29EB: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29EC; break; + case 0x29EC: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29ED; break; + case 0x29ED: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->flags1 |= 0x400; this->csIdIndex = 1; this->textId = 0x29EE; break; + + default: + break; } if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -372,9 +393,11 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { this->textId = 0x1450; } break; + case 0x1450: this->textId = 0x1451; break; + case 0x1451: if (this->flags1 & 0x800) { this->flags1 &= ~0x800; @@ -385,6 +408,7 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_81_01); } break; + case 0x1453: this->flags1 |= 0x400; SET_WEEKEVENTREG(WEEKEVENTREG_81_01); @@ -392,25 +416,34 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { this->flags2 |= 1; this->textId = 0x1454; break; + case 0x1455: this->textId = 0x1456; break; + case 0x1456: this->textId = 0x1457; break; + case 0x1457: this->textId = 0x1458; break; + case 0x1458: this->textId = 0x1459; break; + case 0x1459: this->textId = 0x145A; break; + case 0x145A: this->flags1 |= 0x400; this->textId = 0x145B; break; + + default: + break; } } Message_StartTextbox(play, this->textId, &this->actor); @@ -688,7 +721,7 @@ s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp if (this->timePath == NULL) { return 0; } - if ((this->unk428 != 0 && this->unk428 < 0xC) && (this->timePathTimeSpeed >= 0)) { + if ((this->unk428 != 0) && (this->unk428 < 0xC) && (this->timePathTimeSpeed >= 0)) { phi_a0 = sp26; } else { phi_a0 = scheduleOutput->time0; @@ -717,8 +750,8 @@ s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp Vec3s* sp28; s32 sp24; - if (this->unk428 == 10 || this->unk428 == 11 || this->unk428 == 2) { - return 0; + if ((this->unk428 == 10) || (this->unk428 == 11) || (this->unk428 == 2)) { + return false; } sp48 = (EnDoor*)SubS_FindNearestActor(&this->actor, play, ACTORCAT_DOOR, ACTOR_EN_DOOR); sp24 = D_80BAE8F8[scheduleOutput->result]; @@ -726,21 +759,21 @@ s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp this->timePath = SubS_GetAdditionalPath(play, sp47, sp24); } if ((sp48 == NULL) || (this->timePath == NULL)) { - return 0; + return false; } sp28 = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp38, &sp28[0]); Math_Vec3s_ToVec3f(&sp2C, &sp28[1]); this->unk434 = sp44 - scheduleOutput->time0; this->unk436 = scheduleOutput->time1 - scheduleOutput->time0; - if (scheduleOutput->result != 10 && scheduleOutput->result != 11) { + if ((scheduleOutput->result != 10) && (scheduleOutput->result != 11)) { sp48->unk_1A7 = 0x4B; } Math_Vec3f_Copy(&this->unk438, &sp38); Math_Vec3f_Copy(&this->unk444, &sp2C); this->actor.world.rot.y = Math_Vec3f_Yaw(&sp38, &sp2C); this->actor.world.pos = sp38; - return 1; + return true; } s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) { @@ -753,6 +786,7 @@ s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp case 12: ret = func_80BABC48(this, play, scheduleOutput); break; + case 11: case 10: case 9: @@ -761,15 +795,17 @@ s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp case 6: ret = func_80BABDD8(this, play, scheduleOutput); break; + case 5: case 4: case 3: case 2: case 1: - ret = 1; + ret = true; break; + default: - ret = 0; + ret = false; break; } return ret; @@ -853,6 +889,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->flags1 |= 0x80; func_80BABFD4(this, play); break; + case 15: if ((this->animIndex == 1) && (curFrame == frameCount)) { this->animIndex = 2; @@ -873,15 +910,18 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { } func_80BABFD4(this, play); break; + case 6: case 8: this->flags1 |= 0x80; func_80BAC220(this, play); break; + case 10: this->flags1 |= 0x80; func_80BAC220(this, play); break; + case 9: case 11: this->flags1 |= 0x80; @@ -893,19 +933,23 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { } func_80BAC220(this, play); break; + case 7: this->flags1 |= 0x20; this->flags1 |= 0x80; func_80BAC220(this, play); break; + case 14: this->flags1 |= 0x20; this->flags1 |= 0x80; func_80BABFD4(this, play); break; + case 1: Actor_Kill(&this->actor); break; + case 2: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_81_04)) { this->flags1 |= 0x80; @@ -916,9 +960,10 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BADA08; } break; + case 4: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { - if (this->animIndex == 2 || this->animIndex == 1) { + if ((this->animIndex == 2) || (this->animIndex == 1)) { this->animIndex = 5; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -935,6 +980,9 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD2B4; } break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 4, 0x1554); } @@ -947,7 +995,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; if (play->sceneId == SCENE_IKANA) { this->flags1 |= 1; - if (gSaveContext.save.day == 1 || gSaveContext.save.day == 2) { + if ((gSaveContext.save.day == 1) || (gSaveContext.save.day == 2)) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->flags1 |= 0x80; @@ -962,7 +1010,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { return; } } else if (play->sceneId == SCENE_BACKTOWN) { - if (gSaveContext.save.time >= CLOCK_TIME(0, 20) && gSaveContext.save.time < CLOCK_TIME(6, 00)) { + if ((gSaveContext.save.time >= CLOCK_TIME(0, 20)) && (gSaveContext.save.time < CLOCK_TIME(6, 00))) { Actor_Kill(&this->actor); } @@ -1011,14 +1059,14 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { void func_80BACA14(EnSuttari* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (this->animIndex == 1 || this->animIndex == 8) { + if ((this->animIndex == 1) || (this->animIndex == 8)) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } func_80BABA90(this, 0, 0); func_80BAB434(this); - if (player->transformation == PLAYER_FORM_GORON || player->transformation == PLAYER_FORM_ZORA) { - if (this->actor.playerHeightRel < 60.0f && this->actor.xzDistToPlayer < 500.0f) { + if ((player->transformation == PLAYER_FORM_GORON) || (player->transformation == PLAYER_FORM_ZORA)) { + if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) { this->unk3F2 = this->headRot.y; this->actionFunc = func_80BACBB0; } @@ -1041,7 +1089,7 @@ void func_80BACBB0(EnSuttari* this, PlayState* play) { s16 target; this->unk3F2 = this->headRot.y; - if (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU) { + if ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU)) { this->actionFunc = func_80BACA14; } if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) { @@ -1071,7 +1119,7 @@ void func_80BACD2C(EnSuttari* this, PlayState* play) { Player* player = GET_PLAYER(play); this->unk3F2 = this->headRot.y; - if (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU) { + if ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU)) { this->actionFunc = func_80BACA14; } if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) { @@ -1372,10 +1420,14 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { this->flags1 |= 0x800; func_80BAAB78(this, play); break; + case 1: func_8019F230(); func_80BAAB78(this, play); break; + + default: + break; } } if (!(this->flags1 & 4)) { @@ -1486,11 +1538,11 @@ void EnSuttari_Update(Actor* thisx, PlayState* play) { EnSuttari_AdvanceTime(); } if (this->unk428 != 0) { - if (this->animIndex == 2 || this->animIndex == 6) { + if ((this->animIndex == 2) || (this->animIndex == 6)) { if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 16.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK); } - } else if (this->animIndex == 0 || this->animIndex == 5) { + } else if ((this->animIndex == 0) || (this->animIndex == 5)) { if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 17.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK); } @@ -1514,7 +1566,7 @@ s32 EnSuttari_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 Matrix_RotateXS(-this->torsoRot.y, MTXMODE_APPLY); Matrix_RotateZS(-this->torsoRot.x, MTXMODE_APPLY); } - if (limbIndex == 8 || limbIndex == 9 || limbIndex == 0xC) { + if ((limbIndex == 8) || (limbIndex == 9) || (limbIndex == 0xC)) { rot->y += (s16)(Math_SinS(this->unk2FA[limbIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->unk31A[limbIndex]) * 200.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 d64053b5a..ee3b9af58 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 @@ -268,7 +268,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->switchFlag = -1; } - if (this->switchFlag != -1 && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag != -1) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); } @@ -291,7 +291,7 @@ void EnTalkGibud_SetupIdle(EnTalkGibud* this) { * Gibdo will attack the player if they get too close. */ void EnTalkGibud_Idle(EnTalkGibud* this, PlayState* play) { - if (this->actor.xzDistToPlayer <= 150.0f && func_800B715C(play)) { + if ((this->actor.xzDistToPlayer <= 150.0f) && func_800B715C(play)) { EnTalkGibud_SetupAttemptPlayerFreeze(this); } @@ -345,7 +345,8 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) { if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) { player->actor.freezeTimer = 0; - if (gSaveContext.save.playerForm == PLAYER_FORM_GORON || gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if ((gSaveContext.save.playerForm == PLAYER_FORM_GORON) || + (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) { // If the Gibdo/Redead tries to grab Goron or Deku Link, it will fail to // do so. It will appear to take damage and shake its head side-to-side. EnTalkGibud_SetupGrabFail(this); @@ -442,6 +443,9 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { Math_SmoothStepToF(&this->actor.shape.yOffset, 0.0f, 1.0f, 400.0f, 0.0f); } break; + + default: + break; } } @@ -512,7 +516,7 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) { this->actor.world.rot = this->actor.shape.rot; } if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play)) { - if (gSaveContext.save.playerForm != PLAYER_FORM_GORON && gSaveContext.save.playerForm != PLAYER_FORM_DEKU && + if ((gSaveContext.save.playerForm != PLAYER_FORM_GORON) && (gSaveContext.save.playerForm != PLAYER_FORM_DEKU) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { EnTalkGibud_SetupWalkToPlayer(this); } @@ -676,6 +680,9 @@ void EnTalkGibud_GetTextIdForRequestedItem(EnTalkGibud* this, PlayState* play) { Message_StartTextbox(play, 0x1395, &this->actor); this->textId = 0x1395; break; + + default: + break; } } @@ -700,6 +707,9 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { Message_StartTextbox(play, 0xFF, &this->actor); this->textId = 0xFF; break; + + default: + break; } } } @@ -1063,8 +1073,8 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) { break; case EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC: - if (this->actionFunc != EnTalkGibud_Grab && - (this->actionFunc != EnTalkGibud_Stunned || this->stunTimer == 0)) { + if ((this->actionFunc != EnTalkGibud_Grab) && + ((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0))) { this->drawDmgEffAlpha = 1.0f; this->drawDmgEffTimer = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL; @@ -1073,10 +1083,13 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) { break; case EN_TALK_GIBUD_DMGEFF_STUN: - if ((this->actionFunc != EnTalkGibud_Stunned) || this->stunTimer == 0) { + if ((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0)) { EnTalkGibud_SetupStunned(this); } break; + + default: + break; } } } @@ -1114,7 +1127,7 @@ void EnTalkGibud_MoveGrabbedPlayerAwayFromWall(EnTalkGibud* this, PlayState* pla Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); - if (this->actionFunc == EnTalkGibud_Grab && this->grabState == EN_TALK_GIBUD_GRAB_START && + if ((this->actionFunc == EnTalkGibud_Grab) && (this->grabState == EN_TALK_GIBUD_GRAB_START) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) { targetPos = player->actor.world.pos; targetPos.x += 10.0f * Math_SinS(this->actor.wallYaw); 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 483edd145..b86b9c714 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -180,10 +180,10 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { Player* player = GET_PLAYER(play); this->skelAnime.curFrame = 4.0f; - if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && player->actor.shape.feetPos[0].y >= 438.0f) { + if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.shape.feetPos[0].y >= 438.0f)) { // Player is standing on the central platform, so stop chasing them this->isNonHostile = true; - } else if (this->isNonHostile && this->workTimer[WORK_TIMER_WAIT] == 0 && !(this->timer & 0x1F)) { + } else if (this->isNonHostile && (this->workTimer[WORK_TIMER_WAIT] == 0) && !(this->timer & 0x1F)) { xDistance = this->targetPos.x - player->actor.world.pos.x; zDistance = this->targetPos.z - player->actor.world.pos.z; if (sqrtf(SQ(xDistance) + SQ(zDistance)) < 500.0f) { @@ -204,20 +204,21 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { Math_Vec3f_Copy(&this->targetPos, &player->actor.world.pos); if (!(this->timer & 0xF)) { - if (Rand_ZeroOne() < 0.5f && this->actor.xzDistToPlayer <= 200.0f) { + if ((Rand_ZeroOne() < 0.5f) && (this->actor.xzDistToPlayer <= 200.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_ATTACK); } } // If the player gets eaten by Gyorg, or if the attack timer ran out, // stop chasing the player for a little bit. - if (this->workTimer[WORK_TIMER_ATTACK] == 0 || (player->stateFlags2 & PLAYER_STATE2_80)) { + if ((this->workTimer[WORK_TIMER_ATTACK] == 0) || (player->stateFlags2 & PLAYER_STATE2_80)) { this->workTimer[WORK_TIMER_WAIT] = 150; this->isNonHostile = true; } break; + case true: - if (sGyorg->unk_324 != 0 && !(this->timer & 0x7)) { + if ((sGyorg->unk_324 != 0) && !(this->timer & 0x7)) { this->nextRotationAngle = 0x4E20; this->actor.speed = 6.0f; } else { @@ -242,7 +243,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { } if (this->workTimer[WORK_TIMER_OUT_OF_WATER] == 0) { - if (this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0 && this->actor.speed > 1.0f) { + if ((this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0) && (this->actor.speed > 1.0f)) { this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = Rand_ZeroFloat(20.0f); this->deviation.x = randPlusMinusPoint5Scaled(100.0f); this->deviation.y = randPlusMinusPoint5Scaled(50.0f + extraScaleY); @@ -286,6 +287,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { this->isBeached = true; } break; + case true: this->nextRotationAngle = 0x3A98; this->actor.gravity = -1.5f; @@ -423,7 +425,7 @@ void EnTanron3_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->atCollider.base); CollisionCheck_SetAC(play, &play->colChkCtx, &this->acCollider.base); - if ((s8)sGyorg->actor.colChkInfo.health <= 0 && this->actionFunc != EnTanron3_Die) { + if (((s8)sGyorg->actor.colChkInfo.health <= 0) && (this->actionFunc != EnTanron3_Die)) { EnTanron3_SetupDie(this, play); this->workTimer[WORK_TIMER_DIE] = 0; } 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 7de134218..3987f9d12 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -1164,7 +1164,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL func_80128640(play, &this->player, *dList1); if (this->player.stateFlags3 & PLAYER_STATE3_20000000) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00EDD0); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1200,7 +1202,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL (this->player.skelAnime.curFrame >= 12.0f))) { if (func_80127438(play, &this->player, this->player.currentMask)) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_mask_ki_tan_DL_0004A0); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1219,7 +1223,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL D_80A41D60 = true; } else { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00CB60); + CLOSE_DISPS(play->state.gfxCtx); } } else { diff --git a/src/overlays/actors/ovl_En_Test5/z_en_test5.c b/src/overlays/actors/ovl_En_Test5/z_en_test5.c index a041a1aaf..f7a9b431b 100644 --- a/src/overlays/actors/ovl_En_Test5/z_en_test5.c +++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.c @@ -66,13 +66,13 @@ void EnTest5_HandleBottleAction(EnTest5* this, PlayState* play) { player = GET_PLAYER(play); - if (player->interactRangeActor == NULL || player->getItemId != GI_MAX) { + if ((player->interactRangeActor == NULL) || (player->getItemId != GI_MAX)) { Math_Vec3f_DistXYZAndStoreDiff(&this->minPos, &player->actor.world.pos, &playerPosRelativeToWater); // Make sure that the player is within the bounds of the water and deep enough to grab some - if (playerPosRelativeToWater.x >= 0.0f && playerPosRelativeToWater.x <= this->xLength && - playerPosRelativeToWater.z >= 0.0f && playerPosRelativeToWater.z <= this->zLength && - fabsf(playerPosRelativeToWater.y) < 100.0f && player->actor.depthInWater > 12.0f) { + if ((playerPosRelativeToWater.x >= 0.0f) && (playerPosRelativeToWater.x <= this->xLength) && + (playerPosRelativeToWater.z >= 0.0f) && (playerPosRelativeToWater.z <= this->zLength) && + (fabsf(playerPosRelativeToWater.y) < 100.0f) && (player->actor.depthInWater > 12.0f)) { Actor_OfferGetItem(&this->actor, play, GI_MAX, this->actor.xzDistToPlayer, fabsf(this->actor.playerHeightRel)); } @@ -89,10 +89,10 @@ void EnTest5_Update(Actor* thisx, PlayState* play2) { this->actionFunc(this, play); // If it's the hot spring variant, generate steam clouds - if (ENTEST5_IS_HOT_SPRING(&this->actor) && (play->state.frames % 4) == 0) { - steamPos.x = (Rand_ZeroOne() * this->xLength) + this->minPos.x; + if (ENTEST5_IS_HOT_SPRING(&this->actor) && ((play->state.frames % 4) == 0)) { + steamPos.x = this->minPos.x + (Rand_ZeroOne() * this->xLength); steamPos.y = this->minPos.y + 100.0f; - steamPos.z = (Rand_ZeroOne() * this->zLength) + this->minPos.z; + steamPos.z = this->minPos.z + (Rand_ZeroOne() * this->zLength); if ((BgCheck_EntityRaycastFloor2(play, &play->colCtx, &poly, &steamPos) + 10.0f) < this->minPos.y) { Vec3f steamVel; @@ -102,8 +102,7 @@ void EnTest5_Update(Actor* thisx, PlayState* play2) { steamVel.x = 0.0f; steamVel.z = 0.0f; - EffectSsIceSmoke_Spawn(play, &steamPos, &steamVel, &gZeroVec3f, - (s16)((-200) - (s32)(Rand_ZeroOne() * 50.0f))); + EffectSsIceSmoke_Spawn(play, &steamPos, &steamVel, &gZeroVec3f, -200 - (s32)(Rand_ZeroOne() * 50.0f)); } } } 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 b56112421..846d728dc 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -1194,6 +1194,7 @@ void func_80A9369C(Actor* thisx, PlayState* play2) { s32 pad; if (this) {} + OPEN_DISPS(play->state.gfxCtx); this->unk_148 = POLY_OPA_DISP; 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 fb5f72c76..01ec414e5 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -1366,6 +1366,7 @@ void EnTk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPDisplayList(POLY_OPA_DISP++, object_tk_DL_00B530); CLOSE_DISPS(play->state.gfxCtx); + break; } } diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index c6681b4be..204fa8714 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -160,7 +160,8 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2) { Gfx* gfx = sShellDLists[this->actor.params]; OPEN_DISPS(play->state.gfxCtx); - if (this->alpha == 0xFF) { + + if (this->alpha == 255) { Scene_SetRenderModeXlu(play, 0, 0x01); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); Gfx_DrawDListOpa(play, gfx); @@ -169,5 +170,6 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->alpha); Gfx_DrawDListXlu(play, gfx); } + CLOSE_DISPS(play->state.gfxCtx); } 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 6eff18d29..7de3b50c2 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -205,10 +205,10 @@ void EnToto_Destroy(Actor* thisx, PlayState* play) { } void func_80BA383C(EnToto* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime) && this->actionFuncIndex == 1 && - this->skelAnime.animation != &object_zm_Anim_000C80) { - if (play->msgCtx.currentTextId != 0x2A98 && play->msgCtx.currentTextId != 0x2A99) { - if (this->unk2B4 & 1 || Rand_ZeroOne() > 0.5f) { + if (SkelAnime_Update(&this->skelAnime) && (this->actionFuncIndex == 1) && + (this->skelAnime.animation != &object_zm_Anim_000C80)) { + if ((play->msgCtx.currentTextId != 0x2A98) && (play->msgCtx.currentTextId != 0x2A99)) { + if ((this->unk2B4 & 1) || (Rand_ZeroOne() > 0.5f)) { this->unk2B4 = (this->unk2B4 + 1) & 3; } } @@ -251,9 +251,8 @@ void func_80BA39C8(EnToto* this, PlayState* play) { return; } - //! TODO: Neither 0xED02 nor 0xED01 match CLOCK_TIME macro if (((play->sceneId == SCENE_MILK_BAR) && - !((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time < 0xED02))) || + !((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= (CLOCK_TIME(22, 13) + 7)))) || ((play->sceneId != SCENE_MILK_BAR) && func_80BA397C(this, 0x2000))) { if (this->unk2B6 != 0) { this->text = D_80BA5044; @@ -327,7 +326,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { if (!func_80BA4C44(this, play)) { return; } - if (this->text->unk1 != 0 && ENTOTO_WEEK_EVENT_FLAGS) { + if ((this->text->unk1 != 0) && ENTOTO_WEEK_EVENT_FLAGS) { this->unk2B7 = 1; return; } @@ -428,7 +427,7 @@ s32 func_80BA415C(EnToto* this, PlayState* play) { } else { func_8019F208(); } - return (play->msgCtx.choiceIndex != 0 ? 0 : this->text->unk1) + 1; // Possible msg MACRO + return ((play->msgCtx.choiceIndex != 0) ? 0 : this->text->unk1) + 1; } return 0; } @@ -584,7 +583,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { this->unk2B3 += 8; } for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { - if (gSaveContext.save.playerForm != (i + 1) && (D_80BA5128[i] & this->unk2B3)) { + if ((gSaveContext.save.playerForm != (i + 1)) && (D_80BA5128[i] & this->unk2B3)) { Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6); Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c index 02955f0d0..ac6ae3152 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c @@ -121,6 +121,7 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) { if (this->platformType != EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE) { OPEN_DISPS(play->state.gfxCtx); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformCenterTexAnim)); gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255); 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 4bf82f55a..1dbe5d2e8 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -170,7 +170,7 @@ void EnYb_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play) { } void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f32 morphFrames) { - if (animIndex >= 0 && animIndex < 3) { + if ((animIndex >= 0) && (animIndex < 3)) { if ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP)) { if (animIndex > 0) { if (animMode == ANIMMODE_LOOP) { @@ -198,7 +198,7 @@ void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f3 } s32 EnYb_CanTalk(EnYb* this, PlayState* play) { - if (this->actor.xzDistToPlayer < 100.0f && Player_IsFacingActor(&this->actor, 0x3000, play) && + if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { return true; } else { @@ -296,6 +296,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) { this->actionFunc = EnYb_Disappear; SET_WEEKEVENTREG(WEEKEVENTREG_82_04); break; + case 0x147C: // Spread my dance across the world if (Player_GetMask(play) == PLAYER_MASK_KAMARO) { Message_CloseTextbox(play); @@ -311,6 +312,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) { EnYb_ReceiveMask(this, play); } break; + default: Message_CloseTextbox(play); this->actionFunc = EnYb_Idle; @@ -353,9 +355,9 @@ void EnYb_Idle(EnYb* this, PlayState* play) { Player* player = GET_PLAYER(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 && - gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) && + (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && + (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { this->actionFunc = EnYb_TeachingDance; this->teachingCutsceneTimer = 200; EnYb_ChangeCutscene(this, 0); @@ -377,8 +379,8 @@ void EnYb_Idle(EnYb* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) { this->playerOcarinaOut &= ~1; } - } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && this->actor.xzDistToPlayer < 180.0f && - fabsf(this->actor.playerHeightRel) < 50.0f) { + } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && (this->actor.xzDistToPlayer < 180.0f) && + (fabsf(this->actor.playerHeightRel) < 50.0f)) { this->playerOcarinaOut |= 1; Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); } @@ -466,8 +468,6 @@ void EnYb_Draw(Actor* thisx, PlayState* play) { } gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); - if (1) {} - POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawXlu, &this->actor, POLY_XLU_DISP); 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 bc1d543cc..f41b8057c 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -95,20 +95,20 @@ s32 func_809A4F00(ObjArmos* this, s32 arg1) { } if (temp_v0 == OBJARMOS_ROT_7_4) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (temp_v0 == OBJARMOS_ROT_7_5) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } if (temp_v0 == OBJARMOS_ROT_7_6) { if (this->unk_26E != 0) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (this->unk_270 != 0) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } return true; @@ -141,22 +141,22 @@ s32 func_809A500C(ObjArmos* this, s32 arg1) { if (temp_v0 == OBJARMOS_ROT_7_4) { temp = D_809A5BB0[arg1] + this->unk_26E; - return temp <= temp_v1 && -temp_v1 <= temp; + return (temp <= temp_v1) && (-temp_v1 <= temp); } if (temp_v0 == OBJARMOS_ROT_7_5) { temp2 = D_809A5BB8[arg1] + this->unk_270; - return temp2 <= temp_v1 && -temp_v1 <= temp2; + return (temp2 <= temp_v1) && (-temp_v1 <= temp2); } if (temp_v0 == OBJARMOS_ROT_7_6) { if ((arg1 == 0) || (arg1 == 1)) { temp = D_809A5BB0[arg1] + this->unk_26E; - return temp <= temp_v1 && -temp_v1 <= temp; + return (temp <= temp_v1) && (-temp_v1 <= temp); } temp2 = D_809A5BB8[arg1] + this->unk_270; - return temp2 <= temp_v1 && -temp_v1 <= temp2; + return (temp2 <= temp_v1) && (-temp_v1 <= temp2); } return false; 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 660d9016d..c2270f15b 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -418,6 +418,7 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) { void ObjChan_DrawFire(ObjChan* this, PlayState* play) { u32 sp4C; Gfx* dl; + OPEN_DISPS(play->state.gfxCtx); sp4C = play->gameplayFrames; 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 22a448e54..c7fbab2d6 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -284,6 +284,9 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { this->jointTable, this->morphTable, GOLD_DEKU_FLOWER_LIMB_MAX); this->collider.dim.height = 20; break; + + default: + break; } type = DEKU_FLOWER_TYPE(&this->dyna.actor); @@ -310,6 +313,9 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f; this->dyna.actor.targetMode = 3; break; + + default: + break; } } } @@ -321,7 +327,7 @@ void ObjEtcetera_Update(Actor* thisx, PlayState* play) { if (floorBgId == BGCHECK_SCENE) { floorPoly = this->dyna.actor.floorPoly; - if (floorPoly != NULL && this->burrowFlag & 1) { + if ((floorPoly != NULL) && (this->burrowFlag & 1)) { func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId)); } } diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c index 95c43a4bf..f63201966 100644 --- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c +++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c @@ -73,7 +73,8 @@ typedef enum { } ObjMureChildState; s32 func_808D78D0(ObjMure* this, PlayState* play) { - if (this->type == OBJMURE_TYPE_FISH || this->type == OBJMURE_TYPE_BUGS || this->type == OBJMURE_TYPE_BUTTERFLY) { + if ((this->type == OBJMURE_TYPE_FISH) || (this->type == OBJMURE_TYPE_BUGS) || + (this->type == OBJMURE_TYPE_BUTTERFLY)) { Actor_ProcessInitChain(&this->actor, sInitChain); } else { return false; @@ -135,6 +136,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) { switch (this->childrenStates[i]) { case OBJMURE_CHILD_STATE_DEAD: break; + case OBJMURE_CHILD_STATE_2: ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i); this->children[i] = Actor_SpawnAsChildAndCutscene( @@ -148,6 +150,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) { this->children[i]->room = this->actor.room; } break; + default: ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i); this->children[i] = Actor_SpawnAsChildAndCutscene( @@ -190,9 +193,13 @@ void ObjMure_SpawnActors(ObjMure* this, PlayState* play) { case 0: ObjMure_SpawnActors0(&this->actor, play); break; + case 1: ObjMure_SpawnActors1(this, play); break; + + default: + break; } } @@ -205,12 +212,14 @@ void ObjMure_KillActorsImpl(ObjMure* this, PlayState* play) { case OBJMURE_CHILD_STATE_DEAD: this->children[i] = NULL; break; + case OBJMURE_CHILD_STATE_2: if (this->children[i] != NULL) { Actor_Kill(this->children[i]); this->children[i] = NULL; } break; + default: if (this->children[i] != NULL) { if (Actor_HasParent(this->children[i], play)) { @@ -244,7 +253,7 @@ void ObjMure_CheckChildren(ObjMure* this, PlayState* play) { this->childrenStates[i] = OBJMURE_CHILD_STATE_DEAD; this->children[i] = NULL; } - } else if (this->childrenStates[i] == OBJMURE_CHILD_STATE_2 && this->children[i]->update == NULL) { + } else if ((this->childrenStates[i] == OBJMURE_CHILD_STATE_2) && (this->children[i]->update == NULL)) { this->childrenStates[i] = OBJMURE_CHILD_STATE_DEAD; this->children[i] = NULL; } @@ -367,7 +376,7 @@ void ObjMure_GroupBehavior1(ObjMure* this, PlayState* play) { maxChildren = ObjMure_GetMaxChildSpawns(this); for (i = 0; i < maxChildren; i++) { if (this->children[i] != NULL) { - if (this->children[i]->child != NULL && this->children[i]->child->update == NULL) { + if ((this->children[i]->child != NULL) && (this->children[i]->child->update == NULL)) { this->children[i]->child = NULL; } } @@ -380,7 +389,7 @@ static ObjMureActionFunc sTypeGroupBehaviorFunc[] = { void ObjMure_ActiveState(ObjMure* this, PlayState* play) { ObjMure_CheckChildren(this, play); - if (sZClip[this->type] + 40.0f <= fabsf(this->actor.projectedPos.z)) { + if ((sZClip[this->type] + 40.0f) <= fabsf(this->actor.projectedPos.z)) { this->actionFunc = ObjMure_CulledState; this->actor.flags &= ~ACTOR_FLAG_10; ObjMure_KillActors(this, play); 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 e06dbc30b..29a673eae 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -114,20 +114,20 @@ s32 func_809A34E0(ObjPzlblock* this, s32 arg1) { } if (temp_v0 == 4) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (temp_v0 == 5) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } if (temp_v0 == 6) { if (this->unk_176 != 0) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (this->unk_178 != 0) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } return true; } 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 690823bf8..61fa2376f 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -124,7 +124,7 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) { if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { ObjTokeidai_SetupTowerOpening(this); - } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { + } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) { this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle; this->actor.world.pos.y += this->actor.scale.y * 1900.0f; this->actor.shape.yOffset = 1500.0f; @@ -141,7 +141,7 @@ void ObjTokeidai_TowerClock_Init(ObjTokeidai* this, PlayState* play) { if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { ObjTokeidai_SetupTowerOpening(this); - } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { + } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) { this->actor.world.pos.y += (this->actor.scale.y * 5191.0f) - 50.0f; this->actor.world.pos.x += Math_SinS(this->actor.world.rot.y) * this->actor.scale.z * 1791.0f; this->actor.world.pos.z += -Math_CosS(this->actor.world.rot.y) * this->actor.scale.z * 1791.0f; @@ -178,8 +178,8 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) { if (this->actor.child == NULL) { type = OBJ_TOKEIDAI_TYPE(&this->actor); - if (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN || - type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD) { + if ((type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN) || + (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD)) { this->actor.child = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HANABI, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } @@ -192,7 +192,7 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) { this->actor.child->home.rot.x = 0x12C; } } - } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { + } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) { this->spotlightIntensity = 0; this->actor.world.pos.y += this->actor.scale.y * -2160.0f; this->actor.world.pos.x += Math_SinS(this->actor.world.rot.y) * this->actor.scale.z * 5400.0f; @@ -274,6 +274,9 @@ void ObjTokeidai_Init(Actor* thisx, PlayState* play) { this->xluDList = gClockTowerEmptyDL; this->actionFunc = ObjTokeidai_StaircaseToRooftop_Idle; break; + + default: + break; } } @@ -284,7 +287,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { s32 currentClockMinute = GET_CURRENT_CLOCK_MINUTE(this); if (currentClockMinute != this->clockMinute) { - if (this->minuteRingOrExteriorGearRotationTimer == 8 && playSfx) { + if ((this->minuteRingOrExteriorGearRotationTimer == 8) && playSfx) { Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_SECOND_HAND); } @@ -306,8 +309,8 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { this->minuteRingOrExteriorGearRotationTimer++; - if ((currentClockMinute == 15 && this->minuteRingOrExteriorGearRotation < 0) || - (currentClockMinute != 15 && + if (((currentClockMinute == 15) && (this->minuteRingOrExteriorGearRotation < 0)) || + ((currentClockMinute != 15) && this->minuteRingOrExteriorGearRotation > GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute))) { this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute); this->clockMinute = currentClockMinute; @@ -318,7 +321,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { } void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, PlayState* play) { - if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || this->actor.world.pos.y < 0.0f) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.world.pos.y < 0.0f)) { this->actionFunc = ObjTokeidai_DoNothing; } else { this->actor.shape.rot.x += 0x50; @@ -513,6 +516,9 @@ void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* pl case 2: Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_2); break; + + default: + break; } this->boundCount++; @@ -609,7 +615,7 @@ void ObjTokeidai_DoNothing(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) { - if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || CURRENT_DAY >= 4) || + if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { this->actor.draw = ObjTokeidai_Draw; } else { @@ -621,7 +627,7 @@ s32 ObjTokeidai_IsPostFirstCycleFinalHours(ObjTokeidai* this, PlayState* play) { if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { return false; } - if (CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) { + if ((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { ObjTokeidai_SetupTowerOpening(this); return true; } @@ -650,8 +656,8 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { this->clockFaceRotationTimer++; - if ((currentClockHour == 12 && this->clockFaceRotation < 0) || - (currentClockHour != 12 && this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour))) { + if (((currentClockHour == 12) && (this->clockFaceRotation < 0)) || + ((currentClockHour != 12) && (this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour)))) { this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour); this->clockHour = currentClockHour; this->clockFaceRotationalVelocity = 0; @@ -682,7 +688,7 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { - if (CURRENT_DAY == 3 && this->clockHour < 6 && gSaveContext.save.time < CLOCK_TIME(6, 0)) { + if ((CURRENT_DAY == 3) && (this->clockHour < 6) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { this->actor.draw = ObjTokeidai_Clock_Draw; ObjTokeidai_SetupTowerOpening(this); SET_WEEKEVENTREG(WEEKEVENTREG_08_40); @@ -695,8 +701,8 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { this->actor.draw = ObjTokeidai_Clock_Draw; } else { if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) && - OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD && - CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { + (OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD) && + (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) { this->actor.draw = NULL; } this->clockTime = gSaveContext.save.time; @@ -706,7 +712,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { } } - if (CURRENT_DAY != 3 || gSaveContext.save.time >= CLOCK_TIME(6, 0)) { + if ((CURRENT_DAY != 3) || (gSaveContext.save.time >= CLOCK_TIME(6, 0))) { ObjTokeidai_RotateOnMinuteChange(this, true); } ObjTokeidai_RotateOnHourChange(this, play); @@ -750,8 +756,8 @@ void ObjTokeidai_Counterweight_Idle(ObjTokeidai* this, PlayState* play) { if (this->actor.child == NULL) { type = OBJ_TOKEIDAI_TYPE(&this->actor); - if (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN || - type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD) { + if ((type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN) || + (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD)) { this->actor.child = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HANABI, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } 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 32945a2a4..c4f884694 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -304,7 +304,7 @@ s32 func_80B781DC(ObjUm* this, EnHorse* bandit1, EnHorse* bandit2, PlayState* pl if (bandit1->unk_550 == D_80B7C164[i].unk_00) { if (bandit2->unk_550 != D_80B7C164[i].unk_04) { if (D_80B7C164[i].unk_00 != 3) { - if (D_80B7C164[i].unk_04 != 3 || + if ((D_80B7C164[i].unk_04 != 3) || ((mask = Player_GetMask(play)), PLAYER_MASK_CIRCUS_LEADER != mask)) { phi_s3 = D_80B7C164[i].unk_04; phi_s4 = D_80B7C164[i].unk_08; @@ -455,13 +455,13 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi } if (this->potsLife[1] != 1) { - if ((potIndex == -1) || (potIndex == 0 && Rand_ZeroOne() < 0.3f)) { + if ((potIndex == -1) || ((potIndex == 0) && (Rand_ZeroOne() < 0.3f))) { potIndex = 1; } } if (this->potsLife[2] != 1) { - if ((potIndex == -1) || (potIndex != -1 && Rand_ZeroOne() < 0.3f)) { + if ((potIndex == -1) || ((potIndex != -1) && (Rand_ZeroOne() < 0.3f))) { potIndex = 2; } } @@ -497,8 +497,6 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi phi_v1_5 = Math_Vec3f_Yaw(&bandit1->actor.prevPos, &bandit1->actor.world.pos); } - if (1) {} - phi_v1_5 -= bandit1->actor.shape.rot.y; if (phi_v1_5 > 0x190) { bandit1->actor.shape.rot.y += 0x190; @@ -879,6 +877,9 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { Actor_ContinueText(play, &this->dyna.actor, 0x33BC); phi_v1 = false; break; + + default: + break; } return phi_v1; @@ -900,6 +901,9 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) { ret = true; } break; + + default: + break; } return ret; } @@ -1031,7 +1035,7 @@ typedef enum ObjUmPathState { /* 1 */ OBJUM_PATH_STATE_1, /* 2 */ OBJUM_PATH_STATE_FINISH, /* 3 */ OBJUM_PATH_STATE_3, - /* 4 */ OBJUM_PATH_STATE_4, + /* 4 */ OBJUM_PATH_STATE_4 } ObjUmPathState; ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) { @@ -1096,8 +1100,6 @@ ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) { this->dyna.actor.world.rot.y = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp50); Horse_RotateToPoint(&this->donkey->actor, &sp50, 0x190); - if (1) {} - yawDiff = this->donkey->actor.shape.rot.y - this->dyna.actor.shape.rot.y; if (fabsf(yawDiff) < 2730.0f) { if (fabsf(yawDiff) < 100.0f) { @@ -1336,7 +1338,7 @@ void func_80B7A614(ObjUm* this, PlayState* play) { this->flags |= OBJ_UM_FLAG_PLAYING_MINIGAME; ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_GALLOP); - if (ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_3 && this->unk_4DC == 0) { + if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_3) && (this->unk_4DC == 0)) { this->unk_4DC = 1; } else if (this->unk_4DC > 0) { if (this->unk_4DC == 1) { @@ -1471,7 +1473,7 @@ void func_80B7A860(ObjUm* this, PlayState* play) { case 0x33BF: this->unk_4D8++; - if ((fabsf(this->skelAnime.morphWeight) < 0.008f) && this->unk_4D8 >= 6) { + if ((fabsf(this->skelAnime.morphWeight) < 0.008f) && (this->unk_4D8 >= 6)) { this->unk_4CC = 0; this->mouthTexIndex = 0; } else { @@ -1632,9 +1634,9 @@ void ObjUm_DefaultAnim(ObjUm* this, PlayState* play) { } typedef struct { - /* 0x00 */ AnimationHeader* anim; - /* 0x04 */ s32 doesMove; // `true` if the animation is intended to be used while the actor is moving -} struct_80B7C25C; // size = 0x08 + /* 0x0 */ AnimationHeader* anim; + /* 0x4 */ s32 doesMove; // `true` if the animation is intended to be used while the actor is moving +} struct_80B7C25C; // size = 0x8 struct_80B7C25C sUmAnims[] = { { &gUmTrotAnim, true }, // OBJ_UM_ANIM_TROT @@ -1701,7 +1703,7 @@ void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation animIndex) { } } - if (this->wheelRot / 0x199A != this->unk_420) { + if ((this->wheelRot / 0x199A) != this->unk_420) { this->unk_420 = this->wheelRot / 0x199A; //! FAKE if (sUmAnims[0].doesMove) {} @@ -1768,18 +1770,23 @@ void ObjUm_Update(Actor* thisx, PlayState* play) { case 1: this->eyeTexIndex = 3; break; + case 2: this->eyeTexIndex = 4; break; + case 3: this->eyeTexIndex = 5; break; + case 4: this->eyeTexIndex = 2; break; + case 5: this->eyeTexIndex = 0; break; + default: this->unk_4CC = 0; this->eyeTexIndex = 0; @@ -1913,6 +1920,7 @@ void ObjUm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp80.x = 0; sp80.z = 0; sp88.x = 6800.0f; + OPEN_DISPS(gfxCtx); for (i = 0; i < ARRAY_COUNT(this->potsLife); i++) { 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 1c05a0981..2661b9cc5 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -517,6 +517,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { } OPEN_DISPS(play->state.gfxCtx); + spB4 = false; if (this->actor.params == 3) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 87db12b1e..5da69099e 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -11212,7 +11212,7 @@ void func_808442D8(PlayState* play, Player* this) { if (var_fa0 > 0.0f) { func_800B0EB0(play, &this->meleeWeaponInfo[0].tip, &D_8085D364, &D_8085D370, &D_8085D37C, &D_8085D380, (var_fa0 * 200.0f), 0, 8); - if (((play->roomCtx.curRoom.enablePosLights != 0)) || (MREG(93) != 0)) { + if (play->roomCtx.curRoom.enablePosLights || (MREG(93) != 0)) { temp_fv1 = (Rand_ZeroOne() * 30.0f) + 225.0f; Lights_PointSetColorAndRadius(&this->lightInfo, temp_fv1, temp_fv1 * 0.7f, 0, var_fa0 * 300.0f); } @@ -11581,7 +11581,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Math_StepToF(&this->unk_B10[0], var_v0, D_8085D3FC[var_v0]); } func_80832888(this, play); - if (play->roomCtx.curRoom.enablePosLights != 0) { + if (play->roomCtx.curRoom.enablePosLights) { Lights_PointSetColorAndRadius(&this->lightInfo, 255, 255, 255, 60); } else { this->lightInfo.params.point.radius = -1; @@ -15553,7 +15553,7 @@ void func_8084FD7C(PlayState* play, Player* this, Actor* actor) { } s32 func_8084FE48(Player* this) { - return this->targetedActor == NULL && !func_8082FC24(this); + return (this->targetedActor == NULL) && !func_8082FC24(this); } PlayerAnimationHeader* D_8085D688[] = { diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 26cfb7a59..daa6aff8f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -988,10 +988,10 @@ 0x801BE9F4:("sHeartsDDEnvColors","s16","[3][3]",0x12), 0x801BEA08:("sHeartsDDPrimFactors","s16","[3][3]",0x12), 0x801BEA1C:("sHeartsDDEnvFactors","s16","[3][3]",0x12), - 0x801BEA30:("HeartTextures","UNK_TYPE1","",0x1), - 0x801BEA70:("HeartDDTextures","UNK_TYPE1","",0x1), - 0x801BEAB0:("posBindFuncs","LightsPosBindFunc","[3]",0xc), - 0x801BEABC:("dirBindFuncs","LightsBindFunc","[3]",0xc), + 0x801BEA30:("sHeartTextures","UNK_TYPE1","",0x1), + 0x801BEA70:("sHeartDDTextures","UNK_TYPE1","",0x1), + 0x801BEAB0:("sPosBindFuncs","LightsPosBindFunc","[3]",0xc), + 0x801BEABC:("sDirBindFuncs","LightsBindFunc","[3]",0xc), 0x801BEAD4:("D_801BEAD4","UNK_TYPE4","",0x4), 0x801BEAD8:("D_801BEAD8","UNK_TYPE4","",0x4), 0x801BEAE0:("D_801BEAE0","UNK_TYPE1","",0x1), From cd53dd317fa1ce2958f2c6af618059a31db59076 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 4 Jun 2023 19:46:39 -0700 Subject: [PATCH 45/51] Some pathing docs (#1205) * Some pathing docs * Missed one * Uno mas * Uno mas x2 * Cleanup * fix * namefixer * NULL * More * PR * Actually remove SQ * -1 define, plus some more pathing cleanup * Actor macros instead * Format * ADDITIONAL_PATH_INDEX_NONE * Remove reliance on PATH_INDEX_NONE * Missed some PathIndex cleanup * Review * format --- include/functions.h | 2 +- include/z64scene.h | 9 ++- include/z64subs.h | 4 +- src/code/z_path.c | 4 +- src/code/z_sub_s.c | 18 +++--- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 12 ++-- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.h | 4 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 12 ++-- .../actors/ovl_Bg_Ingate/z_bg_ingate.h | 2 +- .../actors/ovl_Dm_Char09/z_dm_char09.c | 12 ++-- .../actors/ovl_Dm_Char09/z_dm_char09.h | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.h | 4 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 10 ++-- .../actors/ovl_En_Aob_01/z_en_aob_01.h | 2 + src/overlays/actors/ovl_En_Baba/z_en_baba.c | 6 +- src/overlays/actors/ovl_En_Baba/z_en_baba.h | 2 + .../actors/ovl_En_Bba_01/z_en_bba_01.c | 4 +- .../actors/ovl_En_Bba_01/z_en_bba_01.h | 4 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 6 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h | 8 +-- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 4 +- .../actors/ovl_En_Cne_01/z_en_cne_01.h | 4 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 13 ++-- src/overlays/actors/ovl_En_Daiku/z_en_daiku.h | 8 ++- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 18 +++--- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 8 ++- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 2 +- src/overlays/actors/ovl_En_Dg/z_en_dg.h | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 10 ++-- src/overlays/actors/ovl_En_Egol/z_en_egol.h | 6 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 18 +++--- src/overlays/actors/ovl_En_Famos/z_en_famos.h | 8 ++- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 2 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 4 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.h | 4 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 18 +++--- src/overlays/actors/ovl_En_Ge2/z_en_ge2.h | 6 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 18 +++--- src/overlays/actors/ovl_En_Gg2/z_en_gg2.h | 6 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 4 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 16 ++--- src/overlays/actors/ovl_En_Gm/z_en_gm.h | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 3 +- src/overlays/actors/ovl_En_Go/z_en_go.h | 3 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 6 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 7 ++- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 16 ++--- src/overlays/actors/ovl_En_Ig/z_en_ig.h | 2 +- src/overlays/actors/ovl_En_In/z_en_in.c | 6 +- src/overlays/actors/ovl_En_In/z_en_in.h | 4 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.h | 4 +- .../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_Js/z_en_js.h | 2 + .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 14 ++--- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.h | 8 ++- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 16 ++--- src/overlays/actors/ovl_En_Ma4/z_en_ma4.h | 4 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 60 +++++++++---------- .../actors/ovl_En_Pamera/z_en_pamera.h | 8 ++- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 20 +++---- src/overlays/actors/ovl_En_Pm/z_en_pm.h | 2 + src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 6 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.h | 3 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.h | 5 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.h | 2 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 9 +-- src/overlays/actors/ovl_En_Rg/z_en_rg.h | 4 +- .../ovl_En_River_Sound/z_en_river_sound.c | 2 +- .../ovl_En_River_Sound/z_en_river_sound.h | 2 + src/overlays/actors/ovl_En_Ru/z_en_ru.c | 2 +- src/overlays/actors/ovl_En_Ru/z_en_ru.h | 4 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.h | 4 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 +- src/overlays/actors/ovl_En_Rz/z_en_rz.h | 4 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 4 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.h | 4 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 6 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.h | 4 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.h | 4 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.h | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 17 +++--- .../actors/ovl_En_Suttari/z_en_suttari.h | 4 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 17 +++--- src/overlays/actors/ovl_En_Sw/z_en_sw.h | 6 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 6 +- .../z_en_syateki_dekunuts.c | 12 ++-- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.h | 15 +++-- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 6 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 10 ++-- src/overlays/actors/ovl_En_Test3/z_en_test3.h | 2 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 4 +- src/overlays/actors/ovl_En_Tk/z_en_tk.h | 2 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 6 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.h | 4 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 3 +- src/overlays/actors/ovl_En_Tru/z_en_tru.h | 4 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 4 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.h | 2 + src/overlays/actors/ovl_En_Zo/z_en_zo.c | 6 +- src/overlays/actors/ovl_En_Zo/z_en_zo.h | 4 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 20 +++---- src/overlays/actors/ovl_En_Zot/z_en_zot.h | 4 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c | 6 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h | 2 +- .../ovl_Obj_Danpeilift/z_obj_danpeilift.c | 2 +- .../ovl_Obj_Danpeilift/z_obj_danpeilift.h | 2 +- .../ovl_Obj_Lupygamelift/z_obj_lupygamelift.c | 2 +- .../ovl_Obj_Lupygamelift/z_obj_lupygamelift.h | 2 +- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c | 2 +- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.h | 2 +- src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c | 4 +- src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h | 4 +- tools/namefixer.py | 11 ++-- 125 files changed, 450 insertions(+), 347 deletions(-) diff --git a/include/functions.h b/include/functions.h index 5774ca3c6..ccf1877e0 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1503,7 +1503,7 @@ void Interface_Update(PlayState* play); void Interface_Destroy(PlayState* play); void Interface_Init(PlayState* play); -Path* Path_GetByIndex(PlayState* play, s16 index, s16 max); +Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone); f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw); void Path_CopyLastPoint(Path* path, Vec3f* dest); diff --git a/include/z64scene.h b/include/z64scene.h index 387d584f5..7f48d8740 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -469,10 +469,13 @@ typedef struct { /* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX]; } ObjectContext; // size = 0x958 +#define PATH_INDEX_NONE -1 +#define ADDITIONAL_PATH_INDEX_NONE (u8)-1 + typedef struct { - /* 0x0 */ u8 count; // number of points in the path - /* 0x1 */ u8 unk1; - /* 0x2 */ s16 unk2; + /* 0x0 */ u8 count; // Number of points in the path + /* 0x1 */ u8 additionalPathIndex; + /* 0x2 */ s16 customValue; // Path specific to help distinguish different paths /* 0x4 */ Vec3s* points; // Segment Address to the array of points } Path; // size = 0x8 diff --git a/include/z64subs.h b/include/z64subs.h index ad2b7044f..768f81079 100644 --- a/include/z64subs.h +++ b/include/z64subs.h @@ -108,7 +108,7 @@ s32 SubS_ChangeAnimationByInfoS(SkelAnime* skelAnime, AnimationInfoS* animationI s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex); -Path* SubS_GetDayDependentPath(struct PlayState* play, u8 pathIndex, u8 max, s32* startPointIndex); +Path* SubS_GetDayDependentPath(struct PlayState* play, u8 pathIndex, u8 pathIndexNone, s32* startPointIndex); s32 SubS_WeightPathing_ComputePoint(Path* path, s32 waypoint, Vec3f* point, f32 progress, s32 direction); s32 SubS_WeightPathing_Move(Actor* actor, Path* path, s32* waypoint, f32* progress, s32 direction, s32 returnStart); @@ -126,7 +126,7 @@ s32 SubS_TrackPoint(Vec3f* target, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trac s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB); -Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 max); +Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 pathIndexNone); s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst); s16 SubS_GetDistSqAndOrientPoints(Vec3f* vecA, Vec3f* vecB, f32* distSq); s32 SubS_MoveActorToPoint(Actor* actor, Vec3f* point, s16 rotStep); diff --git a/src/code/z_path.c b/src/code/z_path.c index 3c446d49a..76d7ce144 100644 --- a/src/code/z_path.c +++ b/src/code/z_path.c @@ -1,9 +1,9 @@ #include "global.h" -Path* Path_GetByIndex(PlayState* play, s16 index, s16 max) { +Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone) { Path* path; - if (index != max) { + if (index != indexNone) { path = &play->setupPathList[index]; } else { path = NULL; diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 05a3c331e..35886da18 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -489,9 +489,9 @@ Path* SubS_GetAdditionalPath(PlayState* play, u8 pathIndex, s32 limit) { if (i >= limit) { break; } - pathIndex = path->unk1; + pathIndex = path->additionalPathIndex; i++; - } while (pathIndex != 0xFF); + } while (pathIndex != ADDITIONAL_PATH_INDEX_NONE); return path; } @@ -585,7 +585,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) { return reached; } -Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 max, s32* startPointIndex) { +Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 pathIndexNone, s32* startPointIndex) { Path* path = NULL; s32 found = false; s32 time = (((s16)TIME_TO_MINUTES_F(gSaveContext.save.time) % 60) + @@ -593,17 +593,17 @@ Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 max, s32* start 30; s32 day = CURRENT_DAY; - if (pathIndex == max) { + if (pathIndex == pathIndexNone) { return NULL; } - while (pathIndex != 0xFF) { + while (pathIndex != ADDITIONAL_PATH_INDEX_NONE) { path = &play->setupPathList[pathIndex]; - if (sPathDayFlags[day] & path->unk2) { + if (path->customValue & sPathDayFlags[day]) { found = true; break; } - pathIndex = path->unk1; + pathIndex = path->additionalPathIndex; } if (found == true) { @@ -1098,8 +1098,8 @@ s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB) { return (ABS_ALT(BINANG_SUB(angleB, angleA)) <= threshold) ? true : false; } -Path* SubS_GetPathByIndex(PlayState* play, s16 pathIndex, s16 max) { - return (pathIndex != max) ? &play->setupPathList[pathIndex] : NULL; +Path* SubS_GetPathByIndex(PlayState* play, s16 pathIndex, s16 pathIndexNone) { + return (pathIndex != pathIndexNone) ? &play->setupPathList[pathIndex] : NULL; } s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst) { 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 134e7227a..97ccc907a 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 @@ -56,8 +56,8 @@ s32 func_80BC3980(BgF40Block* this, PlayState* play) { this->unk_160 = 0; this->unk_164 = 0; - if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { - this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; + if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) { + this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)]; if (this->path != NULL) { points = Lib_SegmentedToVirtual(this->path->points); @@ -78,8 +78,8 @@ s32 func_80BC3A2C(BgF40Block* this, PlayState* play) { this->unk_160 = this->path->count - 1; this->unk_164 = this->path->count - 1; - if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { - this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; + if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) { + this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)]; if (this->path != NULL) { points = Lib_SegmentedToVirtual(this->path->points); points += this->unk_164; @@ -231,8 +231,8 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerBlockCol); - if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { - this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; + if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) { + this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)]; } else { this->path = NULL; } 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 37a5c360e..228fb6bfd 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 @@ -7,9 +7,11 @@ struct BgF40Block; typedef void (*BgF40BlockActionFunc)(struct BgF40Block*, PlayState*); -#define BGF40BLOCK_GET_PATH(thisx) (((thisx)->params & 0x1FC) >> 2) +#define BGF40BLOCK_GET_PATH_INDEX(thisx) (((thisx)->params & 0x1FC) >> 2) #define BGF40BLOCK_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define BGF40BLOCK_PATH_INDEX_NONE 0x3F + typedef struct BgF40Block { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ Path* path; 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 8f86f7c12..2796aed7e 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -190,7 +190,7 @@ void func_80953F9C(BgIngate* this, PlayState* play) { if (this->unk160 & 2) { - if (this->timePath->unk1 != 0xFF) { + if (this->timePath->additionalPathIndex != ADDITIONAL_PATH_INDEX_NONE) { func_80953E38(play); func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); this->dyna.actor.textId = 0x9E4; @@ -262,7 +262,7 @@ void func_80954340(BgIngate* this, PlayState* play) { if (DECR(this->unk16A) == 0) { if (this->timePath != NULL) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); - this->timePath = &play->setupPathList[this->timePath->unk1]; + this->timePath = &play->setupPathList[this->timePath->additionalPathIndex]; func_80953F14(this, play); Environment_StopTime(); } @@ -287,7 +287,7 @@ void func_809543D4(BgIngate* this, PlayState* play) { func_8019F208(); } else { if (this->timePath != NULL) { - this->timePath = &play->setupPathList[this->timePath->unk1]; + this->timePath = &play->setupPathList[this->timePath->additionalPathIndex]; } func_80953F14(this, play); CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); @@ -328,7 +328,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { this->unk160 |= 0x8; this->unk160 |= 0x10; Actor_SetScale(&this->dyna.actor, 1.0f); - this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0); + this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), 0); this->dyna.actor.room = -1; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); @@ -350,7 +350,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { this->actionFunc = func_80953F8C; } } - this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), phi_a2); + this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), phi_a2); if (this->timePath != NULL) { sp38 = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp2C, &sp38[0]); @@ -361,7 +361,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { this->dyna.actor.world.pos.y = -15.0f; this->dyna.actor.world.pos.z = sp2C.z; } - this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0); + this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), 0); } else { Actor_Kill(&this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h index 6046fc31e..bf272f342 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h @@ -7,7 +7,7 @@ struct BgIngate; typedef void (*BgIngateActionFunc)(struct BgIngate*, PlayState*); -#define BGINGATE_GET_FF(thisx) ((thisx)->params & 0xFF) +#define BGINGATE_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) typedef struct BgIngate { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 0f53193d1..587ca059d 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -129,7 +129,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { s32 i; s32 cueChannel; s32 max = 0; - s32 pathnum; + s32 pathIndex; u8 temp = false; if (!DMCHAR09_GET_F(&this->actor)) { @@ -160,12 +160,12 @@ void func_80AB2268(DmChar09* this, PlayState* play) { } if (play->csCtx.actorCues[cueChannel]->id >= 2) { - pathnum = DMCHAR09_GET_PATH(&this->actor); - path = &play->setupPathList[pathnum]; + pathIndex = DMCHAR09_GET_PATH_INDEX(&this->actor); + path = &play->setupPathList[pathIndex]; for (i = 0; i < max; i++) { - pathnum = path->unk1; - path = &play->setupPathList[pathnum]; + pathIndex = path->additionalPathIndex; + path = &play->setupPathList[pathIndex]; } this->unk_224 = Lib_SegmentedToVirtual(path->points); @@ -175,7 +175,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { this->unk_220 = 1; this->unk_22E = true; - this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * 0.00390625f; + this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * (1.0f / 256.0f); this->actionFunc = func_80AB1FDC; } else { this->unk_22E = false; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h index cfb3523e6..cca08d079 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h @@ -4,7 +4,7 @@ #include "global.h" #include "objects/object_bee/object_bee.h" -#define DMCHAR09_GET_PATH(thisx) (((thisx)->params >> 4) & 0xF) +#define DMCHAR09_GET_PATH_INDEX(thisx) (((thisx)->params >> 4) & 0xF) #define DMCHAR09_GET_100(thisx) ((thisx)->params & 0x100) #define DMCHAR09_GET_F(thisx) ((thisx)->params & 0xF) 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 015e57008..5fcf75fdf 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -1610,7 +1610,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -1.0f; if (!ENAKINDONUTS_GET_4(&this->actor)) { - this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_PATH_INDEX(&this->actor), ENAKINDONUTS_PATH_INDEX_NONE); if (this->path == NULL) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h index 180d73ed4..4c8a4eb77 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h @@ -10,7 +10,9 @@ typedef void (*EnAkindonutsUnkFunc)(struct EnAkindonuts*, PlayState*); #define ENAKINDONUTS_GET_3(thisx) ((thisx)->params & 3) #define ENAKINDONUTS_GET_4(thisx) (((thisx)->params & 4) >> 2) -#define ENAKINDONUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENAKINDONUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENAKINDONUTS_PATH_INDEX_NONE 0x3F enum { /* 1 */ ENAKINDONUTS_3_1 = 1, 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 64adaa49b..8d3c6b23b 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 @@ -134,12 +134,12 @@ void EnAob01_InitializeDogPaths(EnAob01* this, PlayState* play) { s32 pathIndex = ENAOB01_GET_STARTING_DOG_PATH_INDEX(&this->actor); s16 i = 0; - if (pathIndex != 0x3F) { + if (pathIndex != ENAOB01_PATH_INDEX_NONE) { do { - this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, 0x3F); - pathIndex = this->dogPaths[i]->unk1; + this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, ENAOB01_PATH_INDEX_NONE); + pathIndex = this->dogPaths[i]->additionalPathIndex; i++; - } while (pathIndex != 0xFF); + } while (pathIndex != ADDITIONAL_PATH_INDEX_NONE); } } @@ -153,7 +153,7 @@ void EnAob01_SpawnDogs(EnAob01* this, PlayState* play) { EnAob01_InitializeDogPaths(this, play); for (i = 0; i < RACEDOG_COUNT; i++) { - enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->unk1, i); + enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->additionalPathIndex, i); this->dogs[i] = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_EN_DG, sDogInfo[i].pos.x, sDogInfo[i].pos.y, sDogInfo[i].pos.z, 0, diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h index a550fd0d3..5f7775368 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h @@ -29,6 +29,8 @@ typedef void (*EnAob01ActionFunc)(struct EnAob01*, PlayState*); #define ENAOB01_FLAG_SURPRISE (1 << 7) #define ENAOB01_FLAG_PLAYER_CAN_TALK (1 << 8) +#define ENAOB01_PATH_INDEX_NONE 0x3F + typedef struct EnAob01 { /* 0x000 */ Actor actor; /* 0x144 */ EnAob01ActionFunc actionFunc; 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 e303fe1c5..f41dcbd31 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -511,7 +511,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { } else if (play->sceneId == SCENE_BACKTOWN) { if ((BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE) && (gSaveContext.save.entrance != ENTRANCE(NORTH_CLOCK_TOWN, 7)) && - (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F)) { + (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != BOMB_SHOP_LADY_PATH_INDEX_NONE)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40) || (gSaveContext.save.time >= CLOCK_TIME(0, 20) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) { Actor_Kill(&this->actor); @@ -550,7 +550,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { this->animIndex = BOMB_SHOP_LADY_ANIM_SWAY; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_DoNothing; - } else if (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F) { + } else if (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != BOMB_SHOP_LADY_PATH_INDEX_NONE) { this->animIndex = BOMB_SHOP_LADY_ANIM_WALKING_HOLDING_BAG; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_Walk; @@ -728,7 +728,7 @@ void EnBaba_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->path = SubS_GetPathByIndex(play, BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor), BOMB_SHOP_LADY_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.h b/src/overlays/actors/ovl_En_Baba/z_en_baba.h index 7da0ed054..9618dd3a2 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.h +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.h @@ -12,6 +12,8 @@ typedef void (*EnBabaActionFunc)(struct EnBaba*, PlayState*); #define BOMB_SHOP_LADY_GET_PATH_INDEX(thisx) (((thisx)->params & 0x3F00) >> 8) #define BOMB_SHOP_LADY_GET_TYPE(thisx) (((thisx)->params & 0xC000) >> 0xE) +#define BOMB_SHOP_LADY_PATH_INDEX_NONE 0x3F + // Types BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE and BOMB_SHOP_LADY_TYPE_IDLE can only be used in SCENE_BACKTOWN // Type BOMB_SHOP_LADY_TYPE_SWAY can be used anywhere except SCENE_BACKTOWN and SCENE_BOMYA typedef enum { 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 223bb1b24..d124f0b77 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 @@ -162,7 +162,7 @@ void EnBba01_FinishInit(EnHy* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; this->actor.draw = EnBba01_Draw; this->waitingOnInit = false; - if (ENBBA01_GET_PATH(&this->actor) == 0x3F) { + if (ENBBA01_GET_PATH_INDEX(&this->actor) == ENBBA01_PATH_INDEX_NONE) { this->actionFunc = EnBba01_FaceFoward; } else { this->actionFunc = EnBba01_Walk; @@ -227,7 +227,7 @@ void EnBba01_Init(Actor* thisx, PlayState* play) { 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.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH(&this->enHy.actor), 0x3F); + 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); this->enHy.actionFunc = EnBba01_FinishInit; diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h index 7160594d8..0cc158f2a 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h @@ -7,7 +7,9 @@ struct EnBba01; typedef void (*EnBba01ActionFunc)(struct EnBba01*, PlayState*); -#define ENBBA01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENBBA01_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENBBA01_PATH_INDEX_NONE 0x3F typedef struct EnBba01 { /* 0x000 */ EnHy enHy; 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 8d104842a..834d5f7f7 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 @@ -93,8 +93,8 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { return; } - this->unk_29A = ENBOMBOWLMAN_GET_FF00(&this->actor); - this->path = SubS_GetPathByIndex(play, this->unk_29A, 0x3F); + this->pathIndex = ENBOMBOWLMAN_GET_PATH_INDEX(&this->actor); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENBOMBOWLMAN_PATH_INDEX_NONE); this->unk_2C8 = 80.0f; if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) && @@ -156,7 +156,7 @@ void func_809C4B50(EnBomBowlMan* this) { } void func_809C4B6C(EnBomBowlMan* this) { - if ((this->unk_29A != ENBOMBOWLMAN_FF00_MINUS1) && (this->path != NULL)) { + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) { if (!SubS_CopyPointFromPath(this->path, this->unk_298, &this->unk_2A0)) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h index e958b84a1..df515ef4f 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h @@ -9,13 +9,13 @@ typedef void (*EnBomBowlManActionFunc)(struct EnBomBowlMan*, PlayState*); #define ENBOMBOWLMAN_GET_F(thisx) ((thisx)->params & 0xF) #define ENBOMBOWLMAN_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) -#define ENBOMBOWLMAN_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) +#define ENBOMBOWLMAN_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) + +#define ENBOMBOWLMAN_PATH_INDEX_NONE 0x3F #define ENBOMBOWLMAN_F0_0 0 #define ENBOMBOWLMAN_F0_2 2 -#define ENBOMBOWLMAN_FF00_MINUS1 -1 - typedef struct EnBomBowlMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -30,7 +30,7 @@ typedef struct EnBomBowlMan { /* 0x292 */ UNK_TYPE1 unk292[2]; /* 0x294 */ Path* path; /* 0x298 */ s16 unk_298; - /* 0x29A */ s16 unk_29A; + /* 0x29A */ s16 pathIndex; /* 0x29C */ s16 unk_29C; /* 0x29E */ s16 unk_29E; /* 0x2A0 */ Vec3f unk_2A0; 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 1cda18c27..8eb9eb839 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 @@ -152,7 +152,7 @@ void EnCne01_FinishInit(EnHy* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; this->actor.draw = EnCne01_Draw; this->waitingOnInit = false; - if (ENCNE01_GET_PATH(&this->actor) == 0x3F) { + if (ENCNE01_GET_PATH_INDEX(&this->actor) == ENCNE01_PATH_INDEX_NONE) { this->actionFunc = EnCne01_FaceForward; } else { this->actionFunc = EnCne01_Walk; @@ -217,7 +217,7 @@ void EnCne01_Init(Actor* thisx, PlayState* play) { 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.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH(&this->enHy.actor), 0x3F); + 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); this->enHy.actionFunc = EnCne01_FinishInit; diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h index 253025760..feee462a9 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h @@ -7,7 +7,9 @@ struct EnCne01; typedef void (*EnCne01ActionFunc)(struct EnCne01*, PlayState*); -#define ENCNE01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENCNE01_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENCNE01_PATH_INDEX_NONE 0x3F typedef struct EnCne01 { /* 0x000 */ EnHy enHy; 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 8a8770371..2900f4d34 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -77,8 +77,8 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU_GET_FF(&this->actor); if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { - this->unk_288 = ENDAIKU_GET_FF00(&this->actor); - this->unk_258 = SubS_GetPathByIndex(play, this->unk_288, 0x3F); + this->pathIndex = ENDAIKU_GET_PATH_INDEX(&this->actor); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU_PATH_INDEX_NONE); } else if (this->unk_278 == ENDAIKU_PARAMS_FF_2) { this->unk_264 = -2000; } @@ -134,8 +134,8 @@ void func_8094373C(EnDaiku* this, s32 arg1) { } void func_809437C8(EnDaiku* this) { - if ((this->unk_288 != -1) && (this->unk_258 != 0)) { - if (!SubS_CopyPointFromPath(this->unk_258, this->unk_25C, &this->unk_26C)) { + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) { + if (!SubS_CopyPointFromPath(this->path, this->unk_25C, &this->unk_26C)) { Actor_Kill(&this->actor); } } @@ -208,9 +208,9 @@ void func_809438F8(EnDaiku* this, PlayState* play) { xzDist = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z)); yawDiff = fabsf(this->actor.world.rot.y - this->unk_282); - if ((xzDist < 4.0f) && (this->unk_258 != NULL) && (yawDiff < 10.0f)) { + if ((xzDist < 4.0f) && (this->path != NULL) && (yawDiff < 10.0f)) { this->unk_25C++; - if (this->unk_25C >= this->unk_258->count) { + if (this->unk_25C >= this->path->count) { this->unk_25C = 0; } @@ -221,6 +221,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { if (this->unk_278 != ENDAIKU_PARAMS_FF_0) { s16 angle = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y)); + this->unk_280 = this->actor.yawTowardsPlayer; if ((this->unk_278 == ENDAIKU_PARAMS_FF_1) || (this->unk_278 == ENDAIKU_PARAMS_FF_2) || (angle <= 0x2890)) { func_800B8614(&this->actor, play, 100.0f); diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h index 4a3c9b444..c75afec6e 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h @@ -8,7 +8,9 @@ struct EnDaiku; typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*); #define ENDAIKU_GET_FF(thisx) ((thisx)->params & 0xFF) -#define ENDAIKU_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) +#define ENDAIKU_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) + +#define ENDAIKU_PATH_INDEX_NONE 0x3F enum { /* 0x0 */ ENDAIKU_PARAMS_FF_0, @@ -23,7 +25,7 @@ typedef struct EnDaiku { /* 0x188 */ Vec3s jointTable[17]; /* 0x1EE */ Vec3s morphTable[17]; /* 0x254 */ EnDaikuActionFunc actionFunc; - /* 0x258 */ Path* unk_258; + /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; /* 0x25E */ s16 unk_25E; /* 0x260 */ s16 unk_260; @@ -38,7 +40,7 @@ typedef struct EnDaiku { /* 0x280 */ s16 unk_280; /* 0x282 */ s16 unk_282; /* 0x284 */ f32 unk_284; - /* 0x288 */ s16 unk_288; + /* 0x288 */ s16 pathIndex; /* 0x28A */ s16 unk_28A; /* 0x28C */ s16 unk_28C; /* 0x28E */ UNK_TYPE1 unk_28E[0xE]; 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 be45cfac6..eaf1839c6 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -69,8 +69,8 @@ static ColliderCylinderInit sCylinderInit = { }; void func_80BE61D0(EnDaiku2* this) { - if ((this->unk_27A != -1) && (this->unk_258 != 0)) { - if (!SubS_CopyPointFromPath(this->unk_258, this->unk_25C, &this->unk_268)) { + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) { + if (!SubS_CopyPointFromPath(this->path, this->unk_25C, &this->unk_268)) { Actor_Kill(&this->actor); } } @@ -87,8 +87,8 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU2_GET_7F(&this->actor); - this->unk_27A = ENDAIKU2_GET_1F80(&this->actor); - this->unk_258 = SubS_GetPathByIndex(play, this->unk_27A, 0x3F); + 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); Actor_SetScale(&this->actor, 0.01f); if (!this->unk_280) { @@ -100,7 +100,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { if (this->unk_278 == ENDAIKU2_GET_7F_127) { this->unk_278 = ENDAIKU2_GET_7F_MINUS1; } else if (Flags_GetSwitch(play, this->unk_278)) { - this->unk_25C = this->unk_258->count - 1; + this->unk_25C = this->path->count - 1; func_80BE61D0(this); Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268); } @@ -342,9 +342,9 @@ void func_80BE6D40(EnDaiku2* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.z, this->unk_268.z, 0.5f, fabsf(Math_CosS(this->actor.world.rot.y) * 6.0f)); if ((sqrtf(SQ(this->actor.world.pos.x - this->unk_268.x) + SQ(this->actor.world.pos.z - this->unk_268.z)) < 4.0f) && - (this->unk_258 != 0)) { + (this->path != NULL)) { this->unk_25C++; - if (this->unk_25C >= this->unk_258->count) { + if (this->unk_25C >= this->path->count) { func_80BE6EB0(this); return; } @@ -385,7 +385,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { fabsf(Math_CosS(this->actor.world.rot.y) * 4.0f)); if ((sqrtf(SQ(this->actor.world.pos.x - this->unk_268.x) + SQ(this->actor.world.pos.z - this->unk_268.z)) < 4.0f) && - (this->unk_258 != 0)) { + (this->path != NULL)) { if (!func_80BE64C0(this, play)) { if (this->unk_276 != 3) { func_80BE6408(this, 3); @@ -412,7 +412,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { Math_Vec3f_Copy(&sp40, &this->unk_268); var = this->unk_25C; this->unk_25C++; - if (this->unk_25C < this->unk_258->count) { + if (this->unk_25C < this->path->count) { func_80BE61D0(this); func_80BE6CFC(this); return; 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 130a06a23..775b2453f 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -8,9 +8,11 @@ struct EnDaiku2; typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); #define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F) -#define ENDAIKU2_GET_1F80(thisx) (((thisx)->params >> 7) & 0x3F) +#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 + enum { /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1, /* 0 */ ENDAIKU2_GET_7F_0, @@ -35,7 +37,7 @@ typedef struct EnDaiku2 { /* 0x188 */ Vec3s jointTable[17]; /* 0x1EE */ Vec3s morphTable[17]; /* 0x254 */ EnDaiku2ActionFunc actionFunc; - /* 0x258 */ Path* unk_258; + /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; /* 0x260 */ f32 unk_260; /* 0x264 */ f32 unk_264; @@ -43,7 +45,7 @@ typedef struct EnDaiku2 { /* 0x274 */ s16 unk_274; /* 0x276 */ s16 unk_276; /* 0x278 */ s16 unk_278; - /* 0x27A */ s16 unk_27A; + /* 0x27A */ s16 pathIndex; /* 0x27C */ UNK_TYPE1 unk_27C[0x4]; /* 0x280 */ s32 unk_280; /* 0x284 */ f32 unk_284; 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 0c84f91bc..849ae3378 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -1302,7 +1302,7 @@ void EnDg_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Actor_ProcessInitChain(&this->actor, sInitChain); - this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH(&this->actor), 0x3F); + 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.gravity = -3.0f; diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.h b/src/overlays/actors/ovl_En_Dg/z_en_dg.h index 62c01a011..9f8203987 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.h +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.h @@ -19,9 +19,11 @@ struct EnDg; typedef void (*EnDgActionFunc)(struct EnDg*, PlayState*); #define ENDG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENDG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define ENDG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) #define ENDG_PARAMS(path, index) ((path << 10) | (index << 5)) +#define ENDG_PATH_INDEX_NONE 0x3F + typedef enum { /* 0 */ ENDG_INDEX_RACETRACK_0, /* 1 */ ENDG_INDEX_RACETRACK_1, 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 2d03fccf2..bcb7c6fa2 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -394,7 +394,7 @@ void EnEgol_DestroyBlocks(EnEgol* this, PlayState* play, Vec3f pos1, Vec3f pos2) } void EnEgol_GetWaypoint(EnEgol* this) { - if ((this->pathIndex != -1) && (this->path != NULL) && + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL) && !SubS_CopyPointFromPath(this->path, this->waypoint, &this->waypointPos)) { Actor_Kill(&this->actor); } @@ -426,9 +426,9 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetJntSph(play, &this->eyeCollider, &this->actor, &sEyeJntSphInit, this->eyeElements); Collider_InitAndSetQuad(play, &this->laserCollider, &this->actor, &sLaserQuadInit); - this->pathIndex = EYEGORE_GET_PATH(&this->actor); - if (this->pathIndex == 0x3F) { - this->pathIndex = -1; + this->pathIndex = EYEGORE_GET_PATH_INDEX(&this->actor); + if (this->pathIndex == EYEGORE_PATH_INDEX_NONE) { + this->pathIndex = PATH_INDEX_NONE; Actor_Kill(&this->actor); return; } @@ -445,7 +445,7 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { this->minLaserRange = 200.0f; } - this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, EYEGORE_PATH_INDEX_NONE); EYEGORE_SET_SPH_DIM(this->eyeCollider.elements[0], 500, 0, 0, 26, 1.0f); 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 cec69e5a1..e85e4b98a 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -8,10 +8,12 @@ struct EnEgol; typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*); -#define EYEGORE_GET_PATH(thisx) ((thisx)->params & 0x3F) +#define EYEGORE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) #define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F) -#define EYEGORE_PARAMS(switch, path) ((((switch) & 0x7F) << 6) | ((path) & 0x3F)) +#define EYEGORE_PATH_INDEX_NONE 0x3F + +#define EYEGORE_PARAMS(switch, pathIndex) ((((switch) & 0x7F) << 6) | ((pathIndex) & 0x3F)) #define EYEGORE_EFFECT_COUNT 100 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 645a757a0..97d1ec357 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -166,13 +166,13 @@ void EnFamos_Init(Actor* thisx, PlayState* play) { s32 i; Actor_ProcessInitChain(&this->actor, sInitChain); - if (FAMOS_GET_PATH(thisx) != 0xFF) { - path = &play->setupPathList[this->actor.params]; + if (FAMOS_GET_PATH_INDEX(&this->actor) != FAMOS_PATH_INDEX_NONE) { + path = &play->setupPathList[FAMOS_GET_PATH_INDEX(&this->actor)]; this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathNodeCount = path->count; - if (this->pathNodeCount == 1) { + this->pathCount = path->count; + if (this->pathCount == 1) { this->pathPoints = NULL; - this->pathNodeCount = 0; + this->pathCount = 0; } } @@ -365,15 +365,15 @@ void EnFamos_StillIdle(EnFamos* this, PlayState* play) { */ void EnFamos_SetupPathingIdle(EnFamos* this) { if (this->isCalm) { - this->currentPathNode++; - if (this->currentPathNode == this->pathNodeCount) { - this->currentPathNode = 0; + this->waypointIndex++; + if (this->waypointIndex == this->pathCount) { + this->waypointIndex = 0; } } else { this->isCalm = true; } - Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->currentPathNode]); + Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->waypointIndex]); this->targetYaw = Actor_WorldYawTowardPoint(&this->actor, &this->targetDest); this->actionFunc = EnFamos_PathingIdle; this->actor.speed = 0.0f; diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.h b/src/overlays/actors/ovl_En_Famos/z_en_famos.h index 874da9034..468356376 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.h +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.h @@ -15,9 +15,11 @@ typedef struct EnFamosRock { /* 0x20 */ f32 scale; } EnFamosRock; // size = 0x24 -#define FAMOS_GET_PATH(thisx) ((thisx)->params) +#define FAMOS_GET_PATH_INDEX(thisx) ((thisx)->params) #define FAMOS_GET_AGGRO_DISTANCE(thisx) ((thisx)->shape.rot.x) +#define FAMOS_PATH_INDEX_NONE 0xFF + // stateTimer gets reused: // after spotting player, counts frames until first attack (8) // after lost aggro, measures frames looking around before returning to home (60) @@ -33,8 +35,8 @@ typedef struct EnFamos { /* 0x1D0 */ EnFamosActionFunc actionFunc; /* 0x1D4 */ u8 animatedMaterialIndex; /* 0x1D5 */ u8 hasFinishedRotating; // stable up or down - /* 0x1D6 */ u8 pathNodeCount; - /* 0x1D7 */ u8 currentPathNode; + /* 0x1D6 */ u8 pathCount; + /* 0x1D7 */ u8 waypointIndex; /* 0x1D8 */ u8 isCalm; // is NOT aware of player /* 0x1DA */ s16 hoverTimer; // start 30, decr to 0, repeat: for trig height adjustment when hovering /* 0x1DC */ s16 stateTimer; // reused for different actionFunc 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 6fe9bf291..bfc157fcb 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -171,7 +171,7 @@ void func_809619D0(EnFu* this, PlayState* play) { } for (i = 0; i < this->unk_542; i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } this->unk_520 = path->count; 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 6de6c7e75..0a8aea2fd 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -191,8 +191,8 @@ void EnGe1_SetupPath(EnGe1* this, PlayState* play) { this->curPointIndex = 0; - if (GERUDO_WHITE_GET_PATH(&this->picto.actor) != 0x3F) { - this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH(&this->picto.actor)]; + if (GERUDO_WHITE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_WHITE_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH_INDEX(&this->picto.actor)]; if (this->path != NULL) { point = Lib_SegmentedToVirtual(this->path->points); Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, point); diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h index 63a2a3c7f..f1684315b 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h @@ -6,7 +6,9 @@ #include "objects/object_ge1/object_ge1.h" #define GERUDO_WHITE_GET_TYPE(thisx) (((thisx)->params) & 0xF) -#define GERUDO_WHITE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10) +#define GERUDO_WHITE_GET_PATH_INDEX(thisx) ((((thisx)->params) & 0xFC00) >> 10) + +#define GERUDO_WHITE_PATH_INDEX_NONE 0x3F //! Only the first type is used typedef enum { 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 15c151789..facc4def2 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -200,8 +200,8 @@ s32 EnGe2_LookForPlayer(PlayState* play, Actor* actor, Vec3f* pos, s16 yaw, s16 * @return true if path is set up in reverse */ s32 EnGe2_SetupPath(EnGe2* this, PlayState* play) { - if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) { - this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)]; + if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)]; if (this->path != NULL) { Path* path = this->path; Vec3s* points = Lib_SegmentedToVirtual(path->points); @@ -228,14 +228,14 @@ void EnGe2_GetNextPath(EnGe2* this, PlayState* play) { Path* curPath; Path* nextPath; Vec3s* points; - u8 unk1; + u8 nextPathIndex; this->curPointIndex = 0; - if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) { - curPath = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)]; - unk1 = curPath->unk1; - nextPath = &play->setupPathList[unk1]; + if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) { + curPath = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)]; + nextPathIndex = curPath->additionalPathIndex; + nextPath = &play->setupPathList[nextPathIndex]; this->path = nextPath; points = Lib_SegmentedToVirtual(nextPath->points); this->picto.actor.world.pos.x = points[0].x; @@ -252,8 +252,8 @@ void EnGe2_SetupBlownAwayPath(EnGe2* this, PlayState* play) { this->curPointIndex = 0; - if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) { - this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)]; + if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)]; if (this->path != NULL) { points = Lib_SegmentedToVirtual(this->path->points); Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, points); diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h index 0a85e3bfe..ee0d99d00 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h @@ -11,12 +11,12 @@ typedef void (*EnGe2ActionFunc)(struct EnGe2*, PlayState*); #define GERUDO_PURPLE_GET_EXIT(thisx) (((thisx)->params) & 0x1F) //!< Exit to send Player to when caught #define GERUDO_PURPLE_GET_TYPE(thisx) (((thisx)->params & 0xE0) >> 5) -#define GERUDO_PURPLE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10) +#define GERUDO_PURPLE_GET_PATH_INDEX(thisx) ((((thisx)->params) & 0xFC00) >> 10) -#define GERUDO_PURPLE_PARAMS(path, type, exit) (((path) & 0x1F) | (((type) & 7) << 5) | (((exit) & 0x3F) << 10)) +#define GERUDO_PURPLE_PARAMS(exit, type, pathIndex) (((exit) & 0x1F) | (((type) & 7) << 5) | (((pathIndex) & 0x3F) << 10)) #define GERUDO_PURPLE_EXIT_NONE 0x1F -#define GERUDO_PURPLE_PATH_NONE 0x3F +#define GERUDO_PRUPLE_PATH_INDEX_NONE 0x3F typedef enum { /* 0 */ GERUDO_PURPLE_TYPE_CUTSCENE, 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 76e3d69da..e05945680 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -183,14 +183,14 @@ void func_80B3B0A0(EnGg2* this, PlayState* play) { void func_80B3B120(EnGg2* this, PlayState* play) { Vec3s sp30; - if (this->unk_1D8 != NULL) { - func_80B3B7E4(this->unk_1D8, this->unk_1DC, &this->actor.world.pos, &sp30); + if (this->path != NULL) { + func_80B3B7E4(this->path, this->unk_1DC, &this->actor.world.pos, &sp30); Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 0x3E8, 1); this->actor.shape.rot.y = this->actor.world.rot.y; Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 0x3E8, 1); this->actor.world.rot.x = -this->actor.shape.rot.x; - if (func_80B3B648(this, this->unk_1D8, this->unk_1DC) != 0) { - if (this->unk_1DC >= (this->unk_1D8->count - 2)) { + if (func_80B3B648(this, this->path, this->unk_1DC) != 0) { + if (this->unk_1DC >= (this->path->count - 2)) { this->actionFunc = func_80B3AE60; this->actor.speed = 0.0f; } else { @@ -227,15 +227,15 @@ void func_80B3B294(EnGg2* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_20_10); } - if (this->unk_1D8 != NULL) { - func_80B3B7E4(this->unk_1D8, this->unk_1DC, &this->actor.world.pos, &sp30); + if (this->path != NULL) { + func_80B3B7E4(this->path, this->unk_1DC, &this->actor.world.pos, &sp30); Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 0x3E8, 1); this->actor.shape.rot.y = this->actor.world.rot.y; Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 0x3E8, 1); this->actor.world.rot.x = -this->actor.shape.rot.x; - if (func_80B3B648(this, this->unk_1D8, this->unk_1DC)) { - if (this->unk_1DC < (this->unk_1D8->count - 1)) { + if (func_80B3B648(this, this->path, this->unk_1DC)) { + if (this->unk_1DC < (this->path->count - 1)) { this->unk_1DC++; } else { this->unk_2F1 = 1; @@ -369,7 +369,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { 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->unk_1D8 = SubS_GetPathByIndex(play, ENGG2_GET_FC00(&this->actor), 0x3F); + 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; this->unk_2F1 = 0; 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 ff7aec4a6..83b4bad42 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h @@ -7,14 +7,16 @@ struct EnGg2; typedef void (*EnGg2ActionFunc)(struct EnGg2*, PlayState*); -#define ENGG2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENGG2_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENGG2_PATH_INDEX_NONE 0x3F typedef struct EnGg2 { /* 0x000 */ Actor actor; /* 0x144 */ UNK_TYPE1 unk144[0x4C]; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnGg2ActionFunc actionFunc; - /* 0x1D8 */ Path* unk_1D8; + /* 0x1D8 */ Path* path; /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ Vec3s unk_1E0; /* 0x1E6 */ Vec3s unk_1E6; 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 edb079373..8692f937c 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -1025,7 +1025,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } else { this->csId = this->actor.csId; - this->path = SubS_GetPathByIndex(play, ENGK_GET_F0(&this->actor), 0xF); + 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) { 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 0f74c1d65..fd724cc7c 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -8,9 +8,11 @@ struct EnGk; typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*); #define ENGK_GET_F(thisx) ((thisx)->params & 0xF) -#define ENGK_GET_F0(thisx) (((thisx)->params & 0xF0) >> 4) +#define ENGK_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF0) >> 4) #define ENGK_GET_3F00(thisx) (((thisx)->params & 0x3F00) >> 8) +#define ENGK_PATH_INDEX_NONE 0xF + enum { /* 0 */ ENGK_F_0, /* 1 */ ENGK_F_1, 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 4c4aa474b..bcdb20431 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -973,7 +973,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { } s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 arg3, s16 arg4) { - u8 sp4F = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -985,7 +985,7 @@ s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u actor = func_8094DEE0(this, play, arg3, arg4); if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if ((actor != NULL) && (actor->update != NULL)) { @@ -1004,7 +1004,7 @@ s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; - u8 sp55 = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); EnDoor* door; Vec3s* sp4C; Vec3f sp40; @@ -1016,7 +1016,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { door = func_8094DF90(play, scheduleOutput->result); if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp55, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { @@ -1051,14 +1051,14 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp2E = SCHEDULE_TIME_NOW; u16 phi_v1; - u8 sp2B = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); u16 tmp; s16 pad; s32 ret = false; this->timePath = NULL; if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if ((this->timePath != NULL) && (this->timePath->count < 3)) { @@ -1152,7 +1152,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { static Vec3f D_80951D9C = { 64.0f, 0.0f, -122.0f }; - u8 sp4F = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -1162,7 +1162,7 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if (this->timePath != NULL) { 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 6eede0744..760c9d91c 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -9,7 +9,7 @@ typedef void (*EnGmActionFunc)(struct EnGm*, PlayState*); typedef s32 (*EnGmUnkFunc)(struct EnGm*, PlayState*); typedef void (*EnGmUnkFunc2)(struct EnGm*, PlayState*); -#define ENGM_GET_FF(thisx) ((thisx)->params & 0xFF) +#define ENGM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) typedef struct EnGm { /* 0x000 */ Actor actor; 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 f70628930..216d5c301 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -1883,7 +1883,8 @@ void EnGo_SetupSpectator(EnGo* this, PlayState* play) { */ void EnGo_SetupGatekeeper(EnGo* this, PlayState* play) { if (gSaveContext.save.day >= 2) { - this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH(&this->actor), 0xFF, &this->indexPathPoint); + this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH_INDEX(&this->actor), ENGO_PATH_INDEX_NONE, + &this->indexPathPoint); if (this->gatekeeperPath != NULL) { this->indexPathPoint = 1; } 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 a1c96214b..23c02a9c4 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -11,8 +11,9 @@ typedef s32 (*MsgEventFunc)(Actor*, PlayState*); #define ENGO_GET_TYPE(thisx) (((thisx)->params & 0xF) & 0xFF) #define ENGO_GET_SUBTYPE(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF) +#define ENGO_GET_PATH_INDEX(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) -#define ENGO_GET_PATH(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) +#define ENGO_PATH_INDEX_NONE 0xFF #define ENGO_SNOW_EFFECT_COUNT 16 #define ENGO_OTHER_EFFECT_COUNT 16 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 43a5895d5..e0f9301ce 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 @@ -87,7 +87,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->unk_21E = ENHIDDENNUTS_GET_F80(&this->actor); + this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor); this->switchFlag = ENHIDDENNUTS_GET_SWITCHFLAG(&this->actor); if (this->switchFlag == 0x7F) { @@ -99,12 +99,12 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { return; } - if (this->unk_21E == 0x1F) { + if (this->pathIndex == ENHIDDENNUTS_PATH_INDEX_NONE) { Actor_Kill(&this->actor); return; } - this->path = SubS_GetPathByIndex(play, this->unk_21E, 0x3F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENHIDDENNUTS_PATH_INDEX_NONE_ALT); this->csId = this->actor.csId; func_801A5080(2); func_80BDB268(this); 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 435e4662c..03a0a52b7 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,10 @@ struct EnHiddenNuts; typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); #define ENHIDDENNUTS_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) -#define ENHIDDENNUTS_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F) +#define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) + +#define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F +#define ENHIDDENNUTS_PATH_INDEX_NONE_ALT 0x3F typedef struct EnHiddenNuts { /* 0x000 */ Actor actor; @@ -23,7 +26,7 @@ typedef struct EnHiddenNuts { /* 0x218 */ s16 unk_218; /* 0x21A */ s16 unk_21A; /* 0x21C */ s16 switchFlag; - /* 0x21E */ s16 unk_21E; + /* 0x21E */ s16 pathIndex; /* 0x220 */ s32 unk_220; /* 0x224 */ s16 unk_224; /* 0x226 */ s16 csId; 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 86d6309b6..d4ccc8fd6 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -497,7 +497,7 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) { } s32 func_80BF1C44(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput, s32 arg3, s32 arg4) { - u8 sp4F = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -509,7 +509,7 @@ s32 func_80BF1C44(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput, s this->timePath = NULL; if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((sp2C != NULL) && (sp2C->update != NULL)) { @@ -541,7 +541,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; - u8 sp55 = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); EnDoor* door; Vec3s* sp4C; Vec3f sp40; @@ -553,7 +553,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { door = func_80BF1200(play, scheduleOutput->result); if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp55, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { @@ -587,7 +587,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp2E = SCHEDULE_TIME_NOW; u16 phi_v1; - u8 sp2B = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); u16 tmp; s16 pad; s32 ret = false; @@ -595,7 +595,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((this->timePath != NULL) && (this->timePath->count < 3)) { @@ -635,7 +635,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u8 sp4F = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); Vec3f sp40; Vec3f sp34; Vec3s* sp30; @@ -645,7 +645,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((this->timePath != 0) && (this->timePath->count >= 2)) { 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 c3fd0c3fb..274338a11 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h @@ -9,7 +9,7 @@ typedef void (*EnIgActionFunc)(struct EnIg*, PlayState*); typedef s32 (*EnIgUnkFunc)(struct EnIg*, PlayState*); typedef void (*EnIgUnkFunc2)(struct EnIg*, PlayState*); -#define ENIG_GET_FF(thisx) ((thisx)->params & 0xFF) +#define ENIG_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) typedef struct EnIg { /* 0x000 */ Actor actor; 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 5031d7e87..514074a8f 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -274,10 +274,10 @@ void EnIn_DoNothing(EnIn* this, PlayState* play) { } void func_808F3618(EnIn* this, PlayState* play) { - if (ENIN_GET_PATH(&this->actor) != 0x3F) { + if (ENIN_GET_PATH_INDEX(&this->actor) != ENIN_PATH_INDEX_NONE) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_9); } - if (ENIN_GET_PATH(&this->actor) != 0x3F) { + if (ENIN_GET_PATH_INDEX(&this->actor) != ENIN_PATH_INDEX_NONE) { this->actionFunc = func_808F3690; } else { this->actionFunc = EnIn_DoNothing; @@ -1517,7 +1517,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { Collider_SetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, &this->colliderJntSphElement); Actor_SetScale(&this->actor, 0.01f); this->actor.gravity = -4.0f; - this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH_INDEX(&this->actor), ENIN_PATH_INDEX_NONE); this->unk23D = 0; if ((type == ENIN_YELLOW_SHIRT) || (type == ENIN_BLUE_SHIRT)) { if ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) || 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 dd32ac9c6..c5d7500b6 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -37,7 +37,9 @@ typedef enum { } EnInAnimation; #define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) -#define ENIN_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE +#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE + +#define ENIN_PATH_INDEX_NONE 0x3F typedef struct EnIn { /* 0x000 */ Actor actor; 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 451b9e553..7479a6208 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -957,7 +957,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnJg_LullabyIntroCutsceneAction; } else { // This is the elder that appears in Mountain Village or the Path to Goron Village in winter. - this->path = SubS_GetPathByIndex(play, EN_JG_GET_PATH(thisx), 0x3F); + this->path = SubS_GetPathByIndex(play, EN_JG_GET_PATH_INDEX(thisx), EN_JG_PATH_INDEX_NONE); this->animIndex = EN_JG_ANIM_SURPRISE_START; this->action = EN_JG_ACTION_SPAWNING; this->freezeTimer = 1000; 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 ad8eee0a8..b63f34dce 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h @@ -5,7 +5,9 @@ #include "objects/object_jg/object_jg.h" #define EN_JG_IS_IN_GORON_SHRINE(thisx) ((thisx)->params & 0x1) -#define EN_JG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define EN_JG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) + +#define EN_JG_PATH_INDEX_NONE 0x3F struct EnJg; 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 25fe13064..b023bf688 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 @@ -119,7 +119,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) { this->unk_1D8[i].points = Lib_SegmentedToVirtual(path->points); this->unk_1D8[i].count = path->count; - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; if (path == NULL) { Actor_Kill(&this->actor); } @@ -128,7 +128,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) { this->unk_1F8.points = Lib_SegmentedToVirtual(path->points); this->unk_1F8.count = path->count; - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; if (path == NULL) { Actor_Kill(&this->actor); } 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 abf5e9eb4..350f4ae82 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -194,7 +194,7 @@ s32 func_80968B8C(EnJs* this, PlayState* play) { f32 sp18 = 0.0f; Vec3s* points; - if (pathIndex != 0x3F) { + if (pathIndex != ENJS_PATH_INDEX_NONE) { this->path = &play->setupPathList[pathIndex]; if (this->path != NULL) { path = this->path; diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.h b/src/overlays/actors/ovl_En_Js/z_en_js.h index c4dd3e3a2..f673a97d6 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.h +++ b/src/overlays/actors/ovl_En_Js/z_en_js.h @@ -8,6 +8,8 @@ #define ENJS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) #define ENJS_GET_EXIT_INDEX(thisx) (((thisx)->params & 0x3F0) >> 4) +#define ENJS_PATH_INDEX_NONE 0x3F + struct EnJs; typedef void (*EnJsActionFunc)(struct EnJs*, PlayState*); 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 cc333b2ae..908bbf374 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 @@ -112,7 +112,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 1; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->pathLocation = LOOKNUTS_GET_PATROL_LOCATION(&this->actor); + this->pathIndex = LOOKNUTS_GET_PATH_INDEX(&this->actor); this->switchFlag = LOOKNUTS_GET_SCENE_FLAG(&this->actor); this->spawnIndex = LOOKNUTS_GET_SPAWN_INDEX(&this->actor); @@ -123,7 +123,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - if (this->pathLocation == 0x1F) { + if (this->pathIndex == LOOKNUTS_PATH_INDEX_NONE) { Actor_Kill(&this->actor); return; } @@ -165,17 +165,17 @@ void EnLookNuts_Patrol(EnLookNuts* this, PlayState* play) { return; } - this->path = SubS_GetPathByIndex(play, this->pathLocation, 0x1F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, LOOKNUTS_PATH_INDEX_NONE); if (this->path != NULL) { - sp34 = SubS_GetDistSqAndOrientPath(this->path, this->currentPathIndex, &this->actor.world.pos, &sp30); + sp34 = SubS_GetDistSqAndOrientPath(this->path, this->waypointIndex, &this->actor.world.pos, &sp30); } //! @bug sp30 is uninitialised if path == NULL. Fix by enclosing everything in the path NULL check. if (sp30 < 10.0f) { if (this->path != NULL) { - this->currentPathIndex++; - if (this->currentPathIndex >= this->path->count) { - this->currentPathIndex = 0; + this->waypointIndex++; + if (this->waypointIndex >= this->path->count) { + this->waypointIndex = 0; } if (Rand_ZeroOne() < 0.6f) { EnLookNuts_SetupStandAndWait(this); 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 b72215ce6..92c24cfbd 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 @@ -10,7 +10,9 @@ 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_PATROL_LOCATION(thisx) (((thisx)->params >> 0x7) & 0x1F) +#define LOOKNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 0x7) & 0x1F) + +#define LOOKNUTS_PATH_INDEX_NONE 0x1F typedef struct EnLookNuts { /* 0x000 */ Actor actor; @@ -19,13 +21,13 @@ typedef struct EnLookNuts { /* 0x1CA */ Vec3s morphTable[DEKU_PALACE_GUARD_LIMB_MAX]; /* 0x20C */ EnLookNutsActionFunc actionFunc; /* 0x210 */ Path *path; - /* 0x214 */ s16 currentPathIndex; // Index for the point where the deku guard is in its path + /* 0x214 */ s16 waypointIndex; // Index for the point where the deku guard is in its path /* 0x216 */ s16 eyeState; /* 0x218 */ s16 blinkTimer; /* 0x21A */ s16 eventTimer; // Timer to trigger when another event within the actor will happen /* 0x21C */ s16 state; /* 0x21E */ s16 switchFlag; - /* 0x220 */ s16 pathLocation; // Determines path that a guard will patrol + /* 0x220 */ s16 pathIndex; // Determines path that a guard will patrol /* 0x222 */ s16 isPlayerDetected; /* 0x224 */ s16 waitTimer; // Timer for how long the deku guard will take a break for /* 0x226 */ s16 spawnIndex; 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 44bb67443..d295b1c7f 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -163,9 +163,9 @@ void EnMa4_InitPath(EnMa4* this, PlayState* play) { Path* path; Vec3f nextPoint; - path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8]; + path = &play->setupPathList[ENMA_GET_PATH_INDEX(&this->actor)]; this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathIndex = 0; + this->waypointIndex = 0; this->pathPointsCount = path->count; this->actor.home.pos.x = this->pathPoints[0].x; @@ -272,9 +272,9 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK); } - sp34.x = this->pathPoints[this->pathIndex].x; - sp34.y = this->pathPoints[this->pathIndex].y; - sp34.z = this->pathPoints[this->pathIndex].z; + sp34.x = this->pathPoints[this->waypointIndex].x; + sp34.y = this->pathPoints[this->waypointIndex].y; + sp34.z = this->pathPoints[this->waypointIndex].z; sp2E = Math_Vec3f_Yaw(&this->actor.world.pos, &sp34); if (Math_Vec3f_DistXZ(&this->actor.world.pos, &sp34) > 50.0f) { Math_SmoothStepToS(&this->actor.world.rot.y, sp2E, 10, 0x3000, 0x100); @@ -291,10 +291,10 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - if (this->pathIndex < (this->pathPointsCount - 1)) { - this->pathIndex++; + if (this->waypointIndex < (this->pathPointsCount - 1)) { + this->waypointIndex++; } else { - this->pathIndex = 0; + this->waypointIndex = 0; } } diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h index 91876c938..dfedd3330 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h @@ -8,6 +8,8 @@ struct EnMa4; typedef void (*EnMa4ActionFunc)(struct EnMa4*, PlayState*); +#define ENMA_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) + typedef struct EnMa4 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -19,7 +21,7 @@ typedef struct EnMa4 { /* 0x28E */ UNK_TYPE1 unk28E[0x6]; /* 0x294 */ Vec3s morphTable[ROMANI_LIMB_MAX]; /* 0x31E */ UNK_TYPE1 unk31E[0x6]; - /* 0x324 */ s16 pathIndex; + /* 0x324 */ s16 waypointIndex; /* 0x326 */ s16 pathPointsCount; /* 0x328 */ UNK_TYPE1 unk_328[0x2]; /* 0x32A */ s16 blinkTimer; 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 e64e09cbc..e47515c5d 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -167,9 +167,9 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { } func_80BD8700(this); } else { - this->pathIndex = this->pathPointsCount - 1; - Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathIndex]); - Math_Vec3s_ToVec3f(&sp44, &this->pathPoints[this->pathIndex - 1]); + this->waypointIndex = this->pathCount - 1; + Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->waypointIndex]); + Math_Vec3s_ToVec3f(&sp44, &this->pathPoints[this->waypointIndex - 1]); this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&sp44, &this->actor.world.pos); func_80BD8CCC(this); } @@ -195,19 +195,19 @@ s32 func_80BD84F0(EnPamera* this, PlayState* play) { } void func_80BD8588(EnPamera* this, PlayState* play) { - Path* path = &play->setupPathList[((this->actor.params & 0xFF0) >> 4)]; + Path* path = &play->setupPathList[ENPAMERA_GET_PATH_INDEX(&this->actor)]; Vec3f sp28; if (path == NULL) { Actor_Kill(&this->actor); } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathIndex = 0; - this->pathPointsCount = path->count; - this->pathId = path->unk1; + this->waypointIndex = 0; + this->pathCount = path->count; + this->additionalPathIndex = path->additionalPathIndex; Math_Vec3s_ToVec3f(&sp28, this->pathPoints); this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &sp28); } @@ -323,15 +323,15 @@ void func_80BD8B70(EnPamera* this, PlayState* play) { Vec3f vec; s16 sp32; - vec.x = this->pathPoints[this->pathIndex].x; - vec.y = this->pathPoints[this->pathIndex].y; - vec.z = this->pathPoints[this->pathIndex].z; + vec.x = this->pathPoints[this->waypointIndex].x; + vec.y = this->pathPoints[this->waypointIndex].y; + vec.z = this->pathPoints[this->waypointIndex].z; sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec); if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speed) > 10.0f) { Math_SmoothStepToS(&this->actor.shape.rot.y, sp32, 0xA, 0x3000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - } else if (this->pathIndex < (this->pathPointsCount - 1)) { - this->pathIndex++; + } else if (this->waypointIndex < (this->pathCount - 1)) { + this->waypointIndex++; } else { func_80BD8CCC(this); } @@ -356,8 +356,8 @@ void func_80BD8D1C(EnPamera* this, PlayState* play) { } void func_80BD8D80(EnPamera* this) { - if (this->pathIndex > 0) { - this->pathIndex--; + if (this->waypointIndex > 0) { + this->waypointIndex--; } this->actor.gravity = -2.0f; this->actionFunc = func_80BD8DB0; @@ -367,15 +367,15 @@ void func_80BD8DB0(EnPamera* this, PlayState* play) { Vec3f vec; s16 sp32; - vec.x = this->pathPoints[this->pathIndex].x; - vec.y = this->pathPoints[this->pathIndex].y; - vec.z = this->pathPoints[this->pathIndex].z; + vec.x = this->pathPoints[this->waypointIndex].x; + vec.y = this->pathPoints[this->waypointIndex].y; + vec.z = this->pathPoints[this->waypointIndex].z; sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec); if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speed) > 10.0f) { Math_SmoothStepToS(&this->actor.shape.rot.y, sp32, 0xA, 0x3000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - } else if (this->pathIndex > 0) { - this->pathIndex--; + } else if (this->waypointIndex > 0) { + this->waypointIndex--; } else { func_80BD9338(this, play); func_80BD8A38(this); @@ -404,9 +404,9 @@ void func_80BD8FF0(EnPamera* this) { Vec3f pameraPos; s16 pameraYaw; - this->pathIndex = this->pathPointsCount - 1; - Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathPointsCount - 1]); - Math_Vec3s_ToVec3f(&pameraPos, &this->pathPoints[this->pathPointsCount - 2]); + this->waypointIndex = this->pathCount - 1; + Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathCount - 1]); + Math_Vec3s_ToVec3f(&pameraPos, &this->pathPoints[this->pathCount - 2]); pameraYaw = Math_Vec3f_Yaw(&pameraPos, &this->actor.world.pos); this->actor.shape.rot.y = pameraYaw; this->actor.world.rot.y = pameraYaw; @@ -422,7 +422,7 @@ void func_80BD90AC(EnPamera* this, PlayState* play) { if (Player_GetMask(play) != PLAYER_MASK_STONE && (this->actionFunc != func_80BD8758) && (this->actionFunc != func_80BD8964) && (this->actionFunc != func_80BD8A7C) && - (this->actionFunc != func_80BD8F60) && ((this->actionFunc != func_80BD8B70) || (this->pathIndex != 0)) && + (this->actionFunc != func_80BD8F60) && ((this->actionFunc != func_80BD8B70) || (this->waypointIndex != 0)) && ((this->actionFunc != func_80BD8DB0) || (this->actor.speed != 3.0f)) && ((this->actor.xzDistToPlayer < 150.0f) || ((this->actionFunc == func_80BD909C) && @@ -456,14 +456,14 @@ s32 func_80BD9234(EnPamera* this, PlayState* play) { void func_80BD92D0(EnPamera* this, PlayState* play) { Path* path; - s32 pathId = this->pathId; + s32 pathIndex = this->additionalPathIndex; - path = &play->setupPathList[pathId]; - if (pathId >= 0) { + path = &play->setupPathList[pathIndex]; + if (pathIndex >= 0) { this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathIndex = 0; - this->pathPointsCount = path->count; - this->pathId = path->unk1; + this->waypointIndex = 0; + this->pathCount = path->count; + this->additionalPathIndex = path->additionalPathIndex; } } diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h index 59bf40e09..4fa3e4f5f 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h @@ -9,6 +9,8 @@ struct EnPamera; typedef void (*EnPameraActionFunc)(struct EnPamera*, PlayState*); typedef void (*EnPameraSetupFunc)(struct EnPamera*, PlayState*); +#define ENPAMERA_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF0) >> 4) + typedef struct EnPamera { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; @@ -16,9 +18,9 @@ typedef struct EnPamera { /* 0x1D4 */ EnPameraActionFunc actionFunc; /* 0x1D8 */ EnPameraSetupFunc setupFunc; /* 0x1DC */ Vec3s* pathPoints; - /* 0x1E0 */ s32 pathIndex; - /* 0x1E4 */ s32 pathPointsCount; - /* 0x1E8 */ s32 pathId; + /* 0x1E0 */ s32 waypointIndex; + /* 0x1E4 */ s32 pathCount; + /* 0x1E8 */ s32 additionalPathIndex; /* 0x1EC */ s32 unk_1EC; /* 0x1F0 */ Vec3s jointTable[PAMELA_LIMB_MAX]; /* 0x27A */ Vec3s morphTable[PAMELA_LIMB_MAX]; 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 99e301250..0627ddbf8 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1197,7 +1197,7 @@ s32 func_80AF8DD4(EnPm* this, PlayState* play) { } s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 actorCat, s16 actorId) { - u8 sp4F = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -1208,7 +1208,7 @@ s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u this->timePath = NULL; sp2C = func_80AF7CB0(this, play, actorCat, actorId); if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((sp2C != NULL) && (sp2C->update != NULL)) { @@ -1228,7 +1228,7 @@ s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; - u8 sp55 = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); EnDoor* door; Vec3s* sp4C; Vec3f sp40; @@ -1239,7 +1239,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; door = func_80AF7D60(play, scheduleOutput->result); if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp55, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { @@ -1277,7 +1277,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp2E = SCHEDULE_TIME_NOW; u16 phi_v1; - u8 sp2B = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); u16 tmp; s16 pad; s32 ret = false; @@ -1285,7 +1285,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((this->timePath != NULL) && (this->timePath->count < 3)) { @@ -1357,7 +1357,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u8 sp4F = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); Vec3f sp40; Vec3f sp34; Vec3s* sp30; @@ -1366,7 +1366,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((this->timePath != 0) && (this->timePath->count >= 2)) { @@ -1390,7 +1390,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u8 sp4F = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); Vec3f sp40; Vec3f sp34; Vec3s* sp30; @@ -1419,7 +1419,7 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; phi_a3 = D_80AFB430[scheduleOutput->result]; if (phi_a3 >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, phi_a3); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, phi_a3); } if ((this->timePath != 0) && (this->timePath->count >= 2)) { diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.h b/src/overlays/actors/ovl_En_Pm/z_en_pm.h index c7bf76e37..bf7bbe859 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.h +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.h @@ -9,6 +9,8 @@ typedef void (*EnPmActionFunc)(struct EnPm*, PlayState*); typedef s32 (*EnPmFunc)(struct EnPm*, PlayState*); typedef s32 (*EnPmFunc2)(struct EnPm*, PlayState*); +#define ENPM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) + typedef struct EnPm { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; 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 7fe6e3d26..f4747b4c6 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -151,8 +151,8 @@ void EnPr2_Init(Actor* thisx, PlayState* play) { Actor* parent = this->actor.parent; if (parent->update != NULL) { - this->unk_1C8 = ((EnEncount1*)parent)->pathIndex; - this->path = SubS_GetPathByIndex(play, this->unk_1C8, 0x3F); + this->pathIndex = ((EnEncount1*)parent)->pathIndex; + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENPR2_PATH_INDEX_NONE); this->unk_208 = parent->world.rot.z * 20.0f; if (this->unk_208 < 20.0f) { this->unk_208 = 20.0f; @@ -272,7 +272,7 @@ void func_80A745FC(EnPr2* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_EXIST - SFX_FLAG); Math_ApproachF(&this->unk_204, 0.02f, 0.1f, 0.005f); - if (this->path->unk2 < this->unk_1D0) { + if (this->path->customValue < this->unk_1D0) { Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 1.0f); } else { Math_ApproachF(&this->actor.speed, 10.0f, 0.3f, 1.0f); 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 bbcd28afd..94fb7e033 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h @@ -10,6 +10,7 @@ typedef void (*EnPr2ActionFunc)(struct EnPr2*, PlayState*); #define ENPR2_GET_F(thisx) ((thisx)->params & 0xF) #define ENPR2_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF) +#define ENPR2_PATH_INDEX_NONE 0x3F #define ENPR2_PARAMS(paramF, paramFF0) (((paramF) & 0xF) | (((paramFF0) << 4) & 0xFF0)) typedef struct EnPr2 { @@ -18,7 +19,7 @@ typedef struct EnPr2 { /* 0x188 */ Vec3s jointTable[5]; /* 0x1A6 */ Vec3s morphtable[5]; /* 0x1C4 */ EnPr2ActionFunc actionFunc; - /* 0x1C8 */ s16 unk_1C8; + /* 0x1C8 */ s16 pathIndex; /* 0x1CC */ Path* path; /* 0x1D0 */ s32 unk_1D0; /* 0x1D4 */ s16 unk_1D4; diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index 80986adf4..d08110e43 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -313,7 +313,7 @@ void EnRacedog_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Actor_ProcessInitChain(&this->actor, sInitChain); - this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH_INDEX(&this->actor), ENRACEDOG_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.0075f); this->actor.gravity = -3.0f; if (ENRACEDOG_GET_INDEX(&this->actor) < RACEDOG_COUNT) { diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h index a8cf2a9f9..a3d9afee5 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h @@ -5,7 +5,10 @@ #include "objects/object_dog/object_dog.h" #define ENRACEDOG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENRACEDOG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define ENRACEDOG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) + +#define ENRACEDOG_PATH_INDEX_NONE 0x3F + #define ENRACEDOG_PARAMS(index, path) ((index << 5) | (path)) /** 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 893062fbd..9766fe694 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -196,7 +196,7 @@ void EnRailgibud_SpawnOtherGibdosAndSetPositionAndRotation(EnRailgibud* this, Pl static s32 currentGibdoIndex = 0; s32 nextPoint; Vec3f targetPos; - Path* path = &play->setupPathList[ENRAILGIBUD_GET_PATH(&this->actor)]; + Path* path = &play->setupPathList[ENRAILGIBUD_GET_PATH_INDEX(&this->actor)]; this->points = Lib_SegmentedToVirtual(path->points); this->currentPoint = currentGibdoIndex; 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 95a2bbd7b..f9d3922c8 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h @@ -10,7 +10,7 @@ typedef void (*EnRailgibudActionFunc)(struct EnRailgibud*, PlayState*); #define ENRAILGIBUD_GET_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x7F) #define ENRAILGIBUD_IS_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x80) -#define ENRAILGIBUD_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8) +#define ENRAILGIBUD_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) typedef struct EnRailgibud { /* 0x000 */ Actor actor; 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 a3a026f2b..b6407d24b 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -373,11 +373,11 @@ s32 func_80BF43FC(EnRg* this) { f32 sp88; f32 sp84; f32 phi_f20 = 0.0f; - s32 temp_s7 = ENRG_GET_7F80(&this->actor); + s32 pathIndex = ENRG_GET_PATH_INDEX(&this->actor); s32 phi_s4 = -1; s32 temp_s5 = this->unk_344; s16 phi_s6 = 0; - s32 phi_s0 = D_80BF57E4[this->unk_344][temp_s7]; + s32 phi_s0 = D_80BF57E4[this->unk_344][pathIndex]; do { SubS_CopyPointFromPathCheckBounds(this->path, phi_s0 - 1, &sp9C); @@ -390,7 +390,7 @@ s32 func_80BF43FC(EnRg* this) { phi_s4 = phi_s0; } phi_s0++; - } while ((temp_s5 != 18) && (phi_s0 < D_80BF57E4[temp_s5 + 1][temp_s7])); + } while ((temp_s5 != 18) && (phi_s0 < D_80BF57E4[temp_s5 + 1][pathIndex])); return phi_s4; } @@ -741,7 +741,8 @@ void EnRg_Init(Actor* thisx, PlayState* play) { Effect_Add(play, &this->unk_340, EFFECT_TIRE_MARK, 0, 0, &D_80BF59F0); - this->path = SubS_GetDayDependentPath(play, ENRG_GET_7F80(&this->actor), 255, &this->unk_33C); + this->path = + SubS_GetDayDependentPath(play, ENRG_GET_PATH_INDEX(&this->actor), ENRG_PATH_INDEX_NONE, &this->unk_33C); if (this->path != NULL) { this->unk_33C = 1; } diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.h b/src/overlays/actors/ovl_En_Rg/z_en_rg.h index 4db0b58e0..14f8e3882 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.h +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.h @@ -7,7 +7,9 @@ struct EnRg; typedef void (*EnRgActionFunc)(struct EnRg*, PlayState*); -#define ENRG_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) +#define ENRG_GET_PATH_INDEX(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) + +#define ENRG_PATH_INDEX_NONE 0xFF typedef struct { /* 0x00 */ u8 unk_00; diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c index ae7da7d1b..6ea51586a 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c @@ -35,7 +35,7 @@ void EnRiverSound_Init(Actor* thisx, PlayState* play) { this->playSound = false; pathIndex = RS_GET_PATH_INDEX(&this->actor); this->actor.params = RS_GET_TYPE(&this->actor); - if (pathIndex == 0xFF) { + if (pathIndex == RS_PATH_INDEX_NONE) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h index eff4fbb47..ceef56fbe 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h @@ -8,6 +8,8 @@ struct EnRiverSound; #define RS_GET_TYPE(thisx) ((thisx)->params & 0xFF); #define RS_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF); +#define RS_PATH_INDEX_NONE 0xFF + // Any param not as one of these values will result in UB typedef enum { /* 0x00 */ RS_RIVER_STREAM, 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 b67ca2141..3a4d30516 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -235,7 +235,7 @@ void EnRu_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->path = SubS_GetPathByIndex(play, RU_GET_PATH(thisx), 0x3F); + this->path = SubS_GetPathByIndex(play, RU_GET_PATH_INDEX(thisx), RU_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = EnRu_DoNothing; this->actor.gravity = -4.0f; diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.h b/src/overlays/actors/ovl_En_Ru/z_en_ru.h index 081f3bbd8..7aeaea044 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.h +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.h @@ -4,7 +4,9 @@ #include "global.h" #include "objects/object_ru2/object_ru2.h" -#define RU_GET_PATH(thisx) ((thisx->params & 0x7E00) >> 9) +#define RU_GET_PATH_INDEX(thisx) ((thisx->params & 0x7E00) >> 9) + +#define RU_PATH_INDEX_NONE 0x3F struct EnRu; 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 fcc01b1ec..69ad52a2d 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -652,7 +652,7 @@ void EnRuppecrow_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.01f); this->actor.flags |= ACTOR_FLAG_2000000; - this->path = SubS_GetPathByIndex(play, ENRUPPECROW_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENRUPPECROW_GET_PATH_INDEX(&this->actor), ENRUPPECROW_PATH_INDEX_NONE); if (this->path != NULL) { this->actionFunc = EnRuppecrow_HandleSong; } else { diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h index 887cd8c6b..5d591258b 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h @@ -4,7 +4,9 @@ #include "global.h" #include "objects/object_crow/object_crow.h" -#define ENRUPPECROW_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENRUPPECROW_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENRUPPECROW_PATH_INDEX_NONE 0x3F #define ENRUPPECROW_RUPEE_COUNT 20 #define ENRUPPECROW_LIMB_POS_COUNT 4 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 e7eaaed99..1a43768fc 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -247,8 +247,8 @@ void func_80BFBA1C(PlayState* play, EnRz* this, s16 animIndex) { } s32 EnRz_SetupPath(EnRz* this, PlayState* play) { - if (EN_RZ_GET_PATH(&this->actor) != 0x3F) { - this->path = &play->setupPathList[EN_RZ_GET_PATH(&this->actor)]; + if (EN_RZ_GET_PATH_INDEX(&this->actor) != EN_RZ_PATH_INDEX_NONE) { + this->path = &play->setupPathList[EN_RZ_GET_PATH_INDEX(&this->actor)]; if (this->path != NULL) { Path* path = this->path; Vec3s* points = (Vec3s*)Lib_SegmentedToVirtual(path->points); diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.h b/src/overlays/actors/ovl_En_Rz/z_en_rz.h index c6d8fe3c8..a29f6d5c2 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.h +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.h @@ -6,7 +6,9 @@ #define EN_RZ_GET_SISTER(thisx) ((thisx)->params & 0x8000) #define EN_RZ_GET_TYPE(thisx) ((thisx)->params & 0xF) -#define EN_RZ_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define EN_RZ_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define EN_RZ_PATH_INDEX_NONE 0x3F typedef enum { /* 0 */ EN_RZ_JUDO, // in red diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index 525696ead..9779de80c 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -276,7 +276,7 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) { } if (func_80BCD09C(this->unk_260)) { - this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH_INDEX(&this->actor), ENSCOPECROW_PATH_INDEX_NONE); this->unk_262 = ENSCOPECROW_GET_3E0(&this->actor); if (this->path != NULL) { @@ -316,7 +316,7 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) { this->collider.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius; Actor_SetScale(&this->actor, 0.03f); - this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH_INDEX(&this->actor), ENSCOPECROW_PATH_INDEX_NONE); this->unk_262 = ENSCOPECROW_GET_3E0(&this->actor); if (this->path != NULL) { diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h index 30f002fb5..523d28804 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h @@ -10,7 +10,9 @@ typedef void (*EnScopecrowActionFunc)(struct EnScopecrow*, PlayState*); #define ENSCOPECROW_GET_1F(thisx) ((thisx)->params & 0x1F) #define ENSCOPECROW_GET_3E0(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENSCOPECROW_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENSCOPECROW_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENSCOPECROW_PATH_INDEX_NONE 0x3F typedef struct EnScopecrow { /* 0x000 */ Actor actor; 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 46add654a..08b4b2817 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -708,7 +708,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) { Actor_Kill(&this->actor); } else if (play->actorCtx.flags & ACTORCTX_FLAG_1) { - this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F); + this->path = + SubS_GetPathByIndex(play, ENSCOPENUTS_GET_PATH_INDEX(&this->actor), ENSCOPENUTS_PATH_INDEX_NONE); this->actor.draw = NULL; this->actionFunc = func_80BCAFA8; this->actor.gravity = 0.0f; @@ -717,7 +718,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { } } else if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_1) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) { - this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F); + this->path = + SubS_GetPathByIndex(play, ENSCOPENUTS_GET_PATH_INDEX(&this->actor), ENSCOPENUTS_PATH_INDEX_NONE); if (this->path == NULL) { Actor_Kill(&this->actor); } else { diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h index ef2ea74d8..3f1b8b84e 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h @@ -8,7 +8,9 @@ struct EnScopenuts; typedef void (*EnScopenutsActionFunc)(struct EnScopenuts*, PlayState*); #define ENSCOPENUTS_GET_3E0(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENSCOPENUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENSCOPENUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENSCOPENUTS_PATH_INDEX_NONE 0x3F #define ENSCOPENUTS_3E0_0 0 #define ENSCOPENUTS_3E0_1 1 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 5dcdeaa8e..e22791c82 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -958,7 +958,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); - this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_PATH_INDEX(&this->actor), ENSELLNUTS_PATH_INDEX_NONE); this->csId = this->actor.csId; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.cylRadius = 0; diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h index 3acf7a3e0..d56c04f9e 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h @@ -8,7 +8,9 @@ struct EnSellnuts; typedef void (*EnSellnutsActionFunc)(struct EnSellnuts*, PlayState*); #define ENSELLNUTS_GET_1(thisx) ((thisx)->params & 1) -#define ENSELLNUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENSELLNUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENSELLNUTS_PATH_INDEX_NONE 0x3F typedef struct EnSellnuts { /* 0x000 */ Actor actor; 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 bde455986..3cd33653b 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -1416,7 +1416,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->waypoint = 0; if (this->shopType == BOMB_SHOP) { - this->path = SubS_GetPathByIndex(play, ENSOB1_GET_PATH(&this->actor), 0x1F); + this->path = SubS_GetPathByIndex(play, ENSOB1_GET_PATH_INDEX(&this->actor), ENSOB1_PATH_INDEX_NONE); } if (this->shopType == BOMB_SHOP) { EnSob1_SetupAction(this, EnSob1_SetupWalk); 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 1509868ee..12c14301b 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h @@ -15,7 +15,9 @@ typedef void (*EnSob1ActionFunc)(struct EnSob1*, PlayState*); typedef void (*EnSob1BlinkFunc)(struct EnSob1*); #define ENSOB1_GET_SHOPTYPE(thisx) ((thisx)->params & 0x1F) -#define ENSOB1_GET_PATH(thisx) (((thisx)->params & 0x3E0) >> 5) +#define ENSOB1_GET_PATH_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) + +#define ENSOB1_PATH_INDEX_NONE 0x1F typedef struct EnSob1XZRange { /* 0x0 */ f32 xMin; 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 74258058f..e86d1e1bd 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -549,8 +549,9 @@ void func_80BAB434(EnSuttari* this) { } void EnSuttari_GetPaths(EnSuttari* this, PlayState* play) { - this->paths[0] = SubS_GetPathByIndex(play, ENSUTTARI_GET_PATH(&this->actor), 0x3F); - this->paths[1] = SubS_GetPathByIndex(play, this->paths[0]->unk1, 0x3F); + this->paths[0] = SubS_GetPathByIndex(play, ENSUTTARI_GET_PATH_INDEX(&this->actor), ENSUTTARI_PATH_INDEX_NONE); + //! @bug: the additional path shouldn't use `ENSUTTARI_PATH_INDEX_NONE`, but `ADDITIONAL_PATH_INDEX_NONE` + this->paths[1] = SubS_GetPathByIndex(play, this->paths[0]->additionalPathIndex, ENSUTTARI_PATH_INDEX_NONE); } void func_80BAB4F0(EnSuttari* this, PlayState* play) { @@ -712,11 +713,11 @@ void func_80BABB90(EnSuttari* this, s32 arg1) { s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp26 = SCHEDULE_TIME_NOW; u16 phi_a0; - u8 sp23 = ENSUTTARI_GET_PATH(&this->actor); + u8 pathIndex = ENSUTTARI_GET_PATH_INDEX(&this->actor); u16 tmp; if (D_80BAE8F8[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp23, D_80BAE8F8[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BAE8F8[scheduleOutput->result]); } if (this->timePath == NULL) { return 0; @@ -743,7 +744,7 @@ s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 pad; EnDoor* sp48; - u8 sp47 = ENSUTTARI_GET_PATH(&this->actor); + u8 pathIndex = ENSUTTARI_GET_PATH_INDEX(&this->actor); u16 sp44 = SCHEDULE_TIME_NOW; Vec3f sp38; Vec3f sp2C; @@ -756,7 +757,7 @@ s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp sp48 = (EnDoor*)SubS_FindNearestActor(&this->actor, play, ACTORCAT_DOOR, ACTOR_EN_DOOR); sp24 = D_80BAE8F8[scheduleOutput->result]; if ((sp48 != NULL) && (sp24 >= 0)) { - this->timePath = SubS_GetAdditionalPath(play, sp47, sp24); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, sp24); } if ((sp48 == NULL) || (this->timePath == NULL)) { return false; @@ -1313,7 +1314,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); - if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) { + if ((this->unk430 == 1) && (this->timePath->additionalPathIndex == ADDITIONAL_PATH_INDEX_NONE)) { Actor_Kill(&this->actor); return; } @@ -1351,7 +1352,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); - if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) { + if ((this->unk430 == 1) && (this->timePath->additionalPathIndex == ADDITIONAL_PATH_INDEX_NONE)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h index 071000763..8da01b67e 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h @@ -8,7 +8,9 @@ struct EnSuttari; typedef void (*EnSuttariActionFunc)(struct EnSuttari*, PlayState*); -#define ENSUTTARI_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENSUTTARI_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENSUTTARI_PATH_INDEX_NONE 0x3F typedef struct EnSuttari { /* 0x000 */ Actor actor; 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 3f32564bb..a705a8546 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -901,13 +901,13 @@ void func_808DA89C(EnSw* this, PlayState* play) { } void func_808DAA60(EnSw* this, PlayState* play) { - Vec3s* sp44; + Vec3s* points; s16 temp_v0; s16 sp40; Vec3f sp34; f32 temp_f16; - sp44 = Lib_SegmentedToVirtual(this->unk_1E4->points); + points = Lib_SegmentedToVirtual(this->path->points); sp40 = 0; if (DECR(this->unk_454) == 0) { @@ -915,13 +915,13 @@ void func_808DAA60(EnSw* this, PlayState* play) { temp_f16 = this->skelAnime.endFrame - this->skelAnime.curFrame; sp40 = 80.0f * temp_f16; if (this->unk_45E == 0) { - Math_Vec3s_ToVec3f(&sp34, &sp44[this->unk_4A0]); + Math_Vec3s_ToVec3f(&sp34, &points[this->unk_4A0]); func_808D9894(this, &sp34); temp_v0 = Math_Atan2S_XY(sp34.z, sp34.x); if (ABS_ALT(temp_v0) < sp40) { this->skelAnime.curFrame = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH); - Math_Vec3s_ToVec3f(&this->unk_374, &sp44[this->unk_4A0]); + Math_Vec3s_ToVec3f(&this->unk_374, &points[this->unk_4A0]); this->actionFunc = func_808DACF4; this->unk_414 = 0.0f; sp40 = ABS_ALT(temp_v0); @@ -981,7 +981,7 @@ void func_808DACF4(EnSw* this, PlayState* play) { if (((s32)this->unk_414 != 0) && ((s32)this->unk_414 < (s32)sp4C)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_374); this->unk_4A0 += this->unk_49C; - if ((this->unk_4A0 >= this->unk_1E4->count) || (this->unk_4A0 < 0)) { + if ((this->unk_4A0 >= this->path->count) || (this->unk_4A0 < 0)) { this->unk_49C = -this->unk_49C; this->unk_4A0 += this->unk_49C * 2; } @@ -1154,8 +1154,9 @@ void EnSw_Init(Actor* thisx, PlayState* play) { this->collider.info.toucher.damage = 16; } - this->unk_1E4 = SubS_GetDayDependentPath(play, ENSW_GET_FF00(&this->actor), 255, &this->unk_4A0); - if (this->unk_1E4 != NULL) { + this->path = + SubS_GetDayDependentPath(play, ENSW_GET_PATH_INDEX(&this->actor), ENSW_PATH_INDEX_NONE, &this->unk_4A0); + if (this->path != NULL) { this->unk_4A0 = 1; } @@ -1201,7 +1202,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) { } func_808D9F78(this, play, 1); - if (this->unk_1E4 != NULL) { + if (this->path != NULL) { this->unk_49C = 1; func_808D9F08(this); this->actionFunc = func_808DAA60; diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.h b/src/overlays/actors/ovl_En_Sw/z_en_sw.h index 4544346a0..f77d12267 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.h +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.h @@ -11,14 +11,16 @@ typedef void (*EnSwActionFunc)(struct EnSw*, PlayState*); #define ENSW_GET_3(thisx) (ENSW_GETS_3((thisx)->params)) #define ENSW_GETS_3FC(params) (((params & 0x3FC) >> 2) & 0xFF) #define ENSW_GET_3FC(thisx) (ENSW_GETS_3FC((thisx)->params)) -#define ENSW_GET_FF00(thisx) ((((thisx)->params & 0xFF00) >> 8) & 0xFF) +#define ENSW_GET_PATH_INDEX(thisx) ((((thisx)->params & 0xFF00) >> 8) & 0xFF) + +#define ENSW_PATH_INDEX_NONE 0xFF typedef struct EnSw { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnSwActionFunc actionFunc; /* 0x18C */ ColliderSphere collider; - /* 0x1E4 */ Path* unk_1E4; + /* 0x1E4 */ Path* path; /* 0x1E8 */ Vec3s jointTable[30]; /* 0x29C */ Vec3s morphTable[30]; /* 0x350 */ Vec3f unk_350; diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index ae4716172..5f5194523 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -79,12 +79,12 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) { s32 i; path = syatekiMan->path; - while (path->unk2 != 0) { - path = &play->setupPathList[path->unk1]; + while (path->customValue != SG_PATH_TYPE_CROW) { + path = &play->setupPathList[path->additionalPathIndex]; } for (i = 0; i < EN_SYATEKI_CROW_GET_INDEX(&this->actor); i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } Actor_ProcessInitChain(&this->actor, sInitChain); diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index 6fefd906a..b8c5eda14 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -103,7 +103,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) { static s32 sDrawFlowers = true; // This makes it so only one EnSyatekiDekunuts draws all the flowers. EnSyatekiDekunuts* this = THIS; PlayState* play = play2; - s32 unkPathComparison; + s32 pathType; Path* path; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; s32 i; @@ -115,18 +115,18 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) { if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { Actor_SetScale(&this->actor, 0.01f); this->collider.dim = sBonusDekuScrubColliderDimensions[0]; - unkPathComparison = 3; + pathType = SG_PATH_TYPE_SCRUB_BONUS; } else { Actor_SetScale(&this->actor, 0.02f); - unkPathComparison = 1; + pathType = SG_PATH_TYPE_SCRUB_NORMAL; } - while (path->unk2 != unkPathComparison) { - path = &play->setupPathList[path->unk1]; + while (path->customValue != pathType) { + path = &play->setupPathList[path->additionalPathIndex]; } for (i = 0; i < EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(&this->actor); i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } if (sDrawFlowers == true) { 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 2a1ea5357..a58425737 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 @@ -183,7 +183,7 @@ void EnSyatekiMan_Swamp_SpawnTargetActors(EnSyatekiMan* this, PlayState* play2, void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { EnSyatekiMan* this = THIS; s32 pad; - Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH(&this->actor)]; + Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH_INDEX(&this->actor)]; s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex]; this->actor.targetMode = 1; diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h index 0b637fecf..468cb981c 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h @@ -8,7 +8,7 @@ struct EnSyatekiMan; typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*); -#define EN_SYATEKI_MAN_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8) +#define EN_SYATEKI_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) typedef enum { /* 0 */ SG_GAME_STATE_NONE, // None of the states below apply. @@ -18,22 +18,29 @@ typedef enum { /* 4 */ SG_GAME_STATE_ONE_MORE_GAME, // The player failed to get a new high score (Town) and/or perfect score (Swamp and Town). /* 5 */ SG_GAME_STATE_GIVING_BONUS, // The player gets bonus points at the end of the Swamp game if they get a perfect score. /* 6 */ SG_GAME_STATE_ENDED, // The player got a new high score and/or perfect score (Town), or the game is over (Swamp). - /* 7 */ SG_GAME_STATE_MOVING_PLAYER, // The player is automatically moving towards the spot to play the game. + /* 7 */ SG_GAME_STATE_MOVING_PLAYER // The player is automatically moving towards the spot to play the game. } ShootingGalleryGameState; typedef enum { /* 0 */ SG_OCTO_STATE_SPAWNING, /* 1 */ SG_OCTO_STATE_SPAWNED, /* 70 */ SG_OCTO_STATE_INITIAL = 70, - /* 80 */ SG_OCTO_STATE_HIDING = 80, + /* 80 */ SG_OCTO_STATE_HIDING = 80 } ShootingGalleryOctorokState; typedef enum { /* 0 */ SG_OCTO_HIT_TYPE_NONE, /* 1 */ SG_OCTO_HIT_TYPE_RED, - /* 2 */ SG_OCTO_HIT_TYPE_BLUE, + /* 2 */ SG_OCTO_HIT_TYPE_BLUE } ShootingGalleryoctorokHitType; +typedef enum { + /* 0 */ SG_PATH_TYPE_CROW, + /* 1 */ SG_PATH_TYPE_SCRUB_NORMAL, + /* 2 */ SG_PATH_TYPE_WOLFOS, + /* 3 */ SG_PATH_TYPE_SCRUB_BONUS +} ShootingGalleryPathType; + typedef struct EnSyatekiMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index f582063b7..7b885c5e8 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -146,12 +146,12 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) { s32 i; path = syatekiMan->path; - while (path->unk2 != 2) { - path = &play->setupPathList[path->unk1]; + while (path->customValue != SG_PATH_TYPE_WOLFOS) { + path = &play->setupPathList[path->additionalPathIndex]; } for (i = 0; i < EN_SYATEKI_WF_GET_INDEX(&this->actor); i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } if (path == NULL) { 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 3987f9d12..6711fcde6 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -533,17 +533,17 @@ void func_80A3F114(EnTest3* this, PlayState* play) { } s32 func_80A3F15C(EnTest3* this, PlayState* play, struct_80A41828* arg2) { - s32 pathIndex; + s32 limit; Path* path; Vec3s* curPathPoint; Vec3s* nextPathPoint; Vec3f curPathPos; Vec3f nextPathPos; - pathIndex = ABS_ALT(arg2->unk_1_0) - 1; + limit = ABS_ALT(arg2->unk_1_0) - 1; - if (pathIndex >= 0) { - path = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), pathIndex); + if (limit >= 0) { + path = SubS_GetAdditionalPath(play, KAFEI_GET_PATH_INDEX(&this->player.actor), limit); curPathPoint = Lib_SegmentedToVirtual(path->points); if (arg2->unk_1_0 > 0) { @@ -868,7 +868,7 @@ s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul u16 numWaypoints; func_80A3F15C(this, play, arg2); - this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1); + this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PATH_INDEX(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1); if ((this->unk_D88 < 7) && (this->unk_D88 != 0) && (this->unk_D80 >= 0)) { startTime = now; } else { diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.h b/src/overlays/actors/ovl_En_Test3/z_en_test3.h index 36cd15c27..17c704129 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.h +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.h @@ -7,7 +7,7 @@ struct EnTest3; typedef void (*EnTest3ActionFunc)(struct EnTest3*, PlayState*); -#define KAFEI_GET_PARAM_1F(thisx) ((thisx)->params & 0x1F) +#define KAFEI_GET_PATH_INDEX(thisx) ((thisx)->params & 0x1F) #define KAFEI_GET_PARAM_1E0(thisx) (((thisx)->params >> 5) & 0xF) typedef struct { 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 01ec414e5..341f0a89d 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -503,12 +503,12 @@ s32 func_80AED354(EnTk* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80AED38C(EnTk* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp1E = SCHEDULE_TIME_NOW; - u8 params = ENTK_GET_F800(&this->actor); + u8 pathIndex = ENTK_GET_PATH_INDEX(&this->actor); u16 phi_a1; s32 index = scheduleOutput->result - 1; u16 tmp; - this->timePath = SubS_GetAdditionalPath(play, params, D_80AEF8E8[index + 1]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AEF8E8[index + 1]); if (this->timePath == NULL) { return false; } 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 9604133e7..aa15c6fc6 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h @@ -10,7 +10,7 @@ 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_F800(thisx) ((((thisx)->params >> 0xB) & 0x1F) & 0xFF) +#define ENTK_GET_PATH_INDEX(thisx) (((thisx)->params >> 0xB) & 0x1F) typedef struct EnTk { /* 0x000 */ Actor actor; 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 951724668..bf0f9cc31 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -216,7 +216,7 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) { this->unk_1E4 = 0; this->unk_3D9 = 1; this->actor.velocity.y = 0.0f; - this->path = SubS_GetPathByIndex(play, this->path->unk1, -1); + this->path = SubS_GetPathByIndex(play, this->path->additionalPathIndex, PATH_INDEX_NONE); CutsceneManager_Stop(this->csId); this->csId = CutsceneManager_GetAdditionalCsId(this->csId); CutsceneManager_Queue(this->csId); @@ -450,7 +450,7 @@ void func_80AD417C(EnTrt2* this, PlayState* play) { play->msgCtx.stateTimer = 4; if (this->unk_3A8 == 0x84C) { EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER); - this->path = SubS_GetPathByIndex(play, ENTRT2_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRT2_GET_PATH_INDEX(&this->actor), ENTRT2_PATH_INDEX_NONE); this->unk_3B2 = 18; } else if (this->unk_3A8 == 0x88F) { this->unk_3A8 = 0x88E; @@ -722,7 +722,7 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10; Actor_SetObjectDependency(play, &this->actor); Actor_SetScale(&this->actor, 0.008f); - this->path = SubS_GetPathByIndex(play, ENTRT2_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRT2_GET_PATH_INDEX(&this->actor), ENTRT2_PATH_INDEX_NONE); this->unk_3AE = Rand_S16Offset(100, 50); this->unk_3B0 = 10; this->unk_3A8 = 0; diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h index f30f41d80..f9e2b4fc8 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h @@ -9,7 +9,9 @@ typedef void (*EnTrt2ActionFunc)(struct EnTrt2*, PlayState*); typedef void (*EnTrt2UnkFunc)(struct EnTrt2*); typedef void (*EnTrt2UnkFunc2)(struct EnTrt2*, PlayState*); -#define ENTRT2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENTRT2_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENTRT2_PATH_INDEX_NONE 0x3F typedef struct EnTrt2 { /* 0x000 */ Actor actor; 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 a3c267846..a11d00cdb 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -1138,7 +1138,8 @@ void EnTru_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); this->animIndex = -1; EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN); - this->path = SubS_GetDayDependentPath(play, ENTRU_GET_PATH(&this->actor), 255, &this->unk_384); + this->path = + SubS_GetDayDependentPath(play, ENTRU_GET_PATH_INDEX(&this->actor), ENTRU_PATH_INDEX_NONE, &this->unk_384); if (this->path != NULL) { this->unk_384 = 1; } diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.h b/src/overlays/actors/ovl_En_Tru/z_en_tru.h index c6d2af00c..e7c06e127 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.h +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.h @@ -9,7 +9,9 @@ struct EnTru; typedef void (*EnTruActionFunc)(struct EnTru*, PlayState*); typedef s32 (*EnTruUnkFunc)(Actor*, PlayState*); -#define ENTRU_GET_PATH(thisx) ((thisx)->params & 0xFF) +#define ENTRU_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) + +#define ENTRU_PATH_INDEX_NONE 0xFF typedef struct { /* 0x00 */ u8 unk_00; 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 2c8e4ed8a..6cd2641a1 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 @@ -431,7 +431,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), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), ENTRUMT_PATH_INDEX_NONE); this->actor.targetMode = 0; Actor_SetScale(&this->actor, 0.008f); @@ -439,7 +439,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { this->unk_328 = 0; this->actor.room = -1; - this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FC00(&this->actor), ENTRUMT_PATH_INDEX_NONE); EnTruMt_ChangeAnim(&this->skelAnime, KOUME_MT_ANIM_FLY); this->actionFunc = func_80B76A64; } diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h index b114804d7..d25d54a24 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h @@ -11,6 +11,8 @@ typedef void (*EnTruMtActionFunc)(struct EnTruMt*, PlayState*); #define ENTRUMT_GET_FF(thisx) ((thisx)->params & 0xFF) #define ENTRUMT_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENTRUMT_PATH_INDEX_NONE 0x3F + typedef struct EnTruMt { /* 0x000 */ Actor actor; /* 0x144 */ EnTruMtActionFunc actionFunc; 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 a732f0124..ba71bbd7f 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -206,11 +206,11 @@ void EnZo_LookAtPlayer(EnZo* this, PlayState* play) { } void EnZo_Walk(EnZo* this, PlayState* play) { - if (ENZO_GET_PATH(&this->actor) != 0x3F) { + if (ENZO_GET_PATH_INDEX(&this->actor) != ENZO_PATH_INDEX_NONE) { EnZo_ChangeAnim(&this->skelAnime, 6); } - if (ENZO_GET_PATH(&this->actor) != 0x3F) { + if (ENZO_GET_PATH_INDEX(&this->actor) != ENZO_PATH_INDEX_NONE) { this->actionFunc = EnZo_FollowPath; } else { this->actionFunc = EnZo_DoNothing; @@ -264,7 +264,7 @@ void EnZo_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->path = SubS_GetPathByIndex(play, ENZO_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENZO_GET_PATH_INDEX(&this->actor), ENZO_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = EnZo_Walk; diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.h b/src/overlays/actors/ovl_En_Zo/z_en_zo.h index bfd0c79dd..9d32f63e5 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.h +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.h @@ -8,7 +8,9 @@ struct EnZo; typedef void (*EnZoActionFunc)(struct EnZo*, PlayState*); -#define ENZO_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENZO_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENZO_PATH_INDEX_NONE 0x3F typedef struct EnZo { /* 0x000 */ Actor actor; 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 ab97962de..1493759a5 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -111,8 +111,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { for (i = 0; i < ARRAY_COUNT(this->unk_2D8); i++) { this->unk_2D8[i] = NULL; } - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; this->unk_2D4 = 0; func_80B965D0(this, play); } else { @@ -124,8 +124,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 3: case 4: this->actionFunc = func_80B97B5C; - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } @@ -134,8 +134,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 5: this->unk_2F2 |= 4; this->actionFunc = func_80B97FD0; - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } @@ -167,8 +167,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 10: this->actionFunc = func_80B992C0; func_80B96BEC(this, 1, ANIMMODE_LOOP); - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } @@ -211,8 +211,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 22: this->actionFunc = func_80B980FC; - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } 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 1bab43ae3..e2c43baa3 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h @@ -8,7 +8,9 @@ struct EnZot; typedef void (*EnZotActionFunc)(struct EnZot*, PlayState*); #define ENZOT_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENZOT_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENZOT_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENZOT_PATH_INDEX_NONE 0x3F typedef struct EnZot { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c index 43f137326..6c81e8de6 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c @@ -66,7 +66,7 @@ void ObjBoat_Init(Actor* thisx, PlayState* play) { if (thisx->params < 0) { this->dyna.actor.update = ObjBoat_UpdateCutscene; } else { - path = &play->setupPathList[OBJBOAT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJBOAT_GET_PATH_INDEX(thisx)]; this->maxPointIndex = path->count - 1; this->points = Lib_SegmentedToVirtual(path->points); this->direction = 1; @@ -157,10 +157,10 @@ void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) { if (this->cueId != cue->id) { this->dyna.actor.shape.rot.x = cue->rot.x; if (cue->id != 1) { - Path* path = &play->setupPathList[OBJBOAT_GET_PATH(&this->dyna.actor)]; + Path* path = &play->setupPathList[OBJBOAT_GET_PATH_INDEX(&this->dyna.actor)]; if (cue->id == 3) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } this->maxPointIndex = path->count; diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h index bfc7c7c2b..00cb936d7 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJBOAT_GET_PATH(thisx) (((thisx)->params >> 7) & 0x1F) +#define OBJBOAT_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJBOAT_GET_4000(thisx) ((thisx)->params & 0x4000) struct ObjBoat; diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c index a33bf2a43..9d468d834 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c @@ -68,7 +68,7 @@ void ObjDanpeilift_Init(Actor* thisx, PlayState* play) { if (this->speed < 0.01f) { this->actionFunc = ObjDanpeilift_DoNothing; } else { - path = &play->setupPathList[OBJDANPEILIFT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJDANPEILIFT_GET_PATH_INDEX(thisx)]; this->curPoint = OBJDANPEILIFT_GET_STARTING_POINT(thisx); this->endPoint = path->count - 1; this->direction = 1; diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h index 9c0d023c7..8ad582dd4 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h @@ -10,7 +10,7 @@ typedef void (*ObjDanpeiliftActionFunc)(struct ObjDanpeilift*, PlayState*); #define OBJDANPEILIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1) #define OBJDANPEILIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F) -#define OBJDANPEILIFT_GET_PATH(thisx) ((thisx)->params & 0x7F) +#define OBJDANPEILIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJDANPEILIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1) #define OBJDANPEILIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) #define OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1) diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c index cb957b839..7cace2621 100644 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c +++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c @@ -65,7 +65,7 @@ void ObjLupygamelift_Init(Actor* thisx, PlayState* play) { this->dyna.actor.home.rot.y = 0; this->dyna.actor.home.rot.z = 0; - path = &play->setupPathList[OBJLUPYGAMELIFT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJLUPYGAMELIFT_GET_PATH_INDEX(thisx)]; this->pointIndex = OBJLUPYGAMELIFT_GET_7(thisx); this->count = path->count; if (this->pointIndex >= this->count) { diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h index e25f9cd6d..a1928c473 100644 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h +++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJLUPYGAMELIFT_GET_PATH(thisx) ((thisx)->params & 0x7F) +#define OBJLUPYGAMELIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJLUPYGAMELIFT_GET_7(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJLUPYGAMELIFT_GET_C(thisx) (((thisx)->params >> 0xC) & 1) 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 bb7d30f69..bcef92843 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c @@ -61,7 +61,7 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play) { Path* path; s32 childPointIndex; - path = &play->setupPathList[OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(&this->actor)]; + path = &play->setupPathList[OBJMAKEOSHIHIKI_GET_PATH_INDEX(&this->actor)]; this->pathPoints = Lib_SegmentedToVirtual(path->points); this->pathCount = path->count; childPointIndex = ObjMakeoshihiki_GetChildSpawnPointIndex(this, play); 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 47fbe831b..fbe8c1283 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h @@ -5,7 +5,7 @@ struct ObjMakeoshihiki; -#define OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(thisx) (((thisx)->params >> 7) & 0x7F) +#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) 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 d224125dd..1a63e89cb 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -86,7 +86,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) { if (this->speed < 0.01f) { this->actionFunc = ObjRaillift_DoNothing; } else { - path = &play->setupPathList[OBJRAILLIFT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJRAILLIFT_GET_PATH_INDEX(thisx)]; this->curPoint = OBJRAILLIFT_GET_STARTING_POINT(thisx); this->endPoint = path->count - 1; this->direction = 1; 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 b921b0e5a..dc197432f 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h @@ -10,7 +10,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_PATH(thisx) ((thisx)->params & 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) #define OBJRAILLIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1) diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c index c6ed2cc2c..cecb80832 100644 --- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c +++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c @@ -131,12 +131,12 @@ void ObjToge_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); - if (OBJTOGE_GET_PATH(thisx) == 0xFF) { + if (OBJTOGE_GET_PATH_INDEX(thisx) == OBJTOGE_PATH_INDEX_NONE) { Actor_Kill(thisx); return; } - path = &play->setupPathList[OBJTOGE_GET_PATH(thisx)]; + path = &play->setupPathList[OBJTOGE_GET_PATH_INDEX(thisx)]; if (path->count != 2) { Actor_Kill(thisx); return; diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h index 8259e62c8..54cf02bf4 100644 --- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h +++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h @@ -7,11 +7,13 @@ struct ObjToge; typedef void (*ObjTogeActionFunc)(struct ObjToge*, PlayState*); -#define OBJTOGE_GET_PATH(thisx) ((thisx)->params & 0xFF) +#define OBJTOGE_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) #define OBJTOGE_GET_700(thisx) (((thisx)->params >> 8) & 7) #define OBJTOGE_GET_3800(thisx) (((thisx)->params >> 0xB) & 7) #define OBJTOGE_GET_4000(thisx) (((thisx)->params >> 0xE) & 1) +#define OBJTOGE_PATH_INDEX_NONE 0xFF + typedef struct ObjToge { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; diff --git a/tools/namefixer.py b/tools/namefixer.py index 901d6dbf6..286653e13 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1037,6 +1037,9 @@ wordReplace = { "play->nextEntranceIndex": "play->nextEntrance", "play->sceneNum": "play->sceneId", "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen", + "play->sceneLoadFlag": "play->transitionTrigger", + "play->unk_18B4A": "play->transitionMode", + "play->unk_1887F": "play->transitionType", "play->playerActorCsIds": "play->playerCsIds", "play->envFlags": "play->cutsceneFlags", "play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1", @@ -1061,16 +1064,14 @@ wordReplace = { "gSaveContext.unk_3E50": "gSaveContext.timerStartOsTimes", "gSaveContext.unk_3E88": "gSaveContext.timerStopTimes", "gSaveContext.unk_3EC0": "gSaveContext.timerPausedOsTimes", - - "play->sceneLoadFlag": "play->transitionTrigger", - "play->unk_18B4A": "play->transitionMode", - "play->unk_1887F": "play->transitionType", - "play->roomCtx.currRoom": "play->roomCtx.curRoom", "gSaveContext.nextTransition": "gSaveContext.nextTransitionType", "gSaveContext.unk_3F48": "gSaveContext.cutsceneTransitionControl", "gSaveContext.fadeDuration": "gSaveContext.transFadeDuration", "gSaveContext.fadeSpeed": "gSaveContext.transWipeSpeed", + "path->unk1": "path->additionalPathIndex", + "path->unk2": "path->customValue", + "D_801D15B0": "gZeroVec3f", "D_801D15BC": "gZeroVec3s", "D_801D1DE0": "gIdentityMtx", From 8cabbb1a2bd282e0a757385aa8d23d710aaafb13 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 6 Jun 2023 05:03:02 +1000 Subject: [PATCH 46/51] File Select (1 Non-Matching) (#1158) * Everything below Main OK, and some small ones at the top * 3 more short ones * FileChoose_Main * SelectModeUpdate/Draw * SelectMode update functions done * 2 more small ones * ConfigModeDraw * SetWindowVtx * FileChoose_FadeInMenuElements * Rest of the Config Mode Update Functions * Minor cleanup * FileChoose_UpdateMainMenu * Make xml for title_static * Minor correction * One nasty draw, thanks Synray Co-Authored-By: Synray <31429825+Synray@users.noreply.github.com> * import data * some cleanup * import OoT docs * missed some docs * some progress * FileSelect_SetWindowContentVtx WIP * improve FileSelect_SetWindowContentVtx * match z_file_nameset_NES * cleanup and docs * title static * a few more functions * even more functions * small cleanup * Data Cleanup * 2 more matches * z_file_choose_80807940 OK * cleanup * fix merge master * FileSelect_DrawFileInfo wip * small cleanup * minor * fix merge * match FileSelect_DrawFileInfo * cleanup * fix merge * fix merge * sram cleanup * document select mode * many docs * more docs * more cleanup * small nitpick * consistency * more cleanup * more cleanup * small * small typos * octal bad * pr review * noop * elliptic review * more review * non-matching * oops * more suggestions * keyboard formatting * fix master * sound * padding --------- Co-authored-by: Elliptic Ellipsis Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> --- assets/xml/misc/title_static.xml | 126 + assets/xml/overlays/ovl_file_choose.xml | 19 + include/functions.h | 3 +- include/z64.h | 46 +- include/z64save.h | 59 +- include/z64scene.h | 6 +- spec | 14 +- src/code/graph.c | 2 +- src/code/z_common_data.c | 6 +- src/code/z_demo.c | 21 +- src/code/z_game_dlftbls.c | 2 +- src/code/z_game_over.c | 2 +- src/code/z_lifemeter.c | 4 +- src/code/z_parameter.c | 2 +- src/code/z_play.c | 12 +- src/code/z_scene.c | 4 +- src/code/z_sram_NES.c | 617 ++-- src/code/z_vr_box.c | 4 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 4 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 8 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 2 +- .../actors/ovl_En_Viewer/z_en_viewer.c | 6 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 67 +- .../actors/ovl_Obj_Grass/z_obj_grass.c | 1 + .../actors/ovl_player_actor/z_player.c | 4 +- .../ovl_file_choose/z_file_choose.h | 115 - .../ovl_file_choose/z_file_choose_80807940.c | 46 - .../ovl_file_choose/z_file_choose_NES.c | 2547 ++++++++++++++++- .../ovl_file_choose/z_file_copy_erase.c | 1253 ++++++++ .../ovl_file_choose/z_file_nameset_NES.c | 1061 ++++++- .../ovl_file_choose/z_file_nameset_data.c | 17 + .../ovl_file_choose/z_file_select.h | 327 +++ src/overlays/gamestates/ovl_title/z_title.c | 2 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 15 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 15 +- tools/disasm/functions.txt | 178 +- tools/disasm/variables.txt | 106 +- tools/sizes/code_functions.csv | 20 +- 38 files changed, 5951 insertions(+), 792 deletions(-) create mode 100644 assets/xml/misc/title_static.xml create mode 100644 assets/xml/overlays/ovl_file_choose.xml delete mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_choose.h delete mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c create mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c create mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c create mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_select.h diff --git a/assets/xml/misc/title_static.xml b/assets/xml/misc/title_static.xml new file mode 100644 index 000000000..5e6cea55f --- /dev/null +++ b/assets/xml/misc/title_static.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/overlays/ovl_file_choose.xml b/assets/xml/overlays/ovl_file_choose.xml new file mode 100644 index 000000000..cac6f3d9d --- /dev/null +++ b/assets/xml/overlays/ovl_file_choose.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/include/functions.h b/include/functions.h index ccf1877e0..7d64745f6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2218,7 +2218,8 @@ s32 SysFlashrom_IsBusy(void); s32 SysFlashrom_AwaitResult(void); void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount); -s32 func_80185F90(u32 param_1); +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); diff --git a/include/z64.h b/include/z64.h index b5597f58c..a83001a01 100644 --- a/include/z64.h +++ b/include/z64.h @@ -273,45 +273,45 @@ typedef struct { /* 0x00 */ u16 unk_0; /* 0x02 */ u16 sceneTimeSpeed; /* 0x04 */ Vec3f sunPos; - /* 0x10 */ u8 unk_10; - /* 0x11 */ u8 unk_11; + /* 0x10 */ u8 skybox1Index; + /* 0x11 */ u8 skybox2Index; /* 0x12 */ u8 unk_12; - /* 0x13 */ u8 unk_13; + /* 0x13 */ u8 skyboxBlend; /* 0x14 */ u8 unk_14; /* 0x15 */ u8 skyboxDisabled; /* 0x16 */ u8 sunMoonDisabled; - /* 0x17 */ u8 unk_17; - /* 0x18 */ u8 unk_18; - /* 0x19 */ u8 unk_19; - /* 0x1A */ u16 unk_1A; + /* 0x17 */ u8 skyboxConfig; + /* 0x18 */ u8 changeSkyboxNextConfig; + /* 0x19 */ u8 changeSkyboxState; + /* 0x1A */ u16 changeSkyboxTimer; /* 0x1C */ u16 unk_1C; - /* 0x1E */ u8 unk_1E; - /* 0x1F */ u8 unk_1F; - /* 0x20 */ u8 unk_20; - /* 0x21 */ u8 unk_21; - /* 0x22 */ u16 unk_22; - /* 0x24 */ u16 unk_24; + /* 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 unk_44; - /* 0x48 */ DmaRequest unk_48; - /* 0x68 */ OSMesgQueue unk_68; - /* 0x80 */ OSMesg unk_80; - /* 0x84 */ f32 unk_84; - /* 0x88 */ f32 unk_88; + /* 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 unk_C0; - /* 0xC1 */ u8 unk_C1; - /* 0xC2 */ u8 unk_C2; + /* 0xC0 */ u8 lightBlendEnabled; + /* 0xC1 */ u8 lightSetting; + /* 0xC2 */ u8 prevLightSetting; /* 0xC3 */ u8 lightSettingOverride; /* 0xC4 */ LightSettings unk_C4; - /* 0xDA */ u16 unk_DA; + /* 0xDA */ u16 lightBlendRateOverride; /* 0xDC */ f32 lightBlend; /* 0xE0 */ u8 unk_E0; /* 0xE1 */ u8 unk_E1; diff --git a/include/z64save.h b/include/z64save.h index fdb99fea0..cea6ffa46 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -10,6 +10,13 @@ struct GameState; struct PlayState; struct FileSelectState; +typedef enum { + /* 0 */ SAVE_AUDIO_STEREO, + /* 1 */ SAVE_AUDIO_MONO, + /* 2 */ SAVE_AUDIO_HEADSET, + /* 3 */ SAVE_AUDIO_SURROUND +} AudioOption; + // TODO: properly name DOWN, RETURN and TOP typedef enum RespawnMode { /* 0 */ RESPAWN_MODE_DOWN, // "RESTART_MODE_DOWN" @@ -157,13 +164,13 @@ typedef enum { #define PICTO_PHOTO_COMPRESSED_SIZE (PICTO_PHOTO_SIZE * 5 / 8) typedef struct SramContext { - /* 0x00 */ u8* readBuff; - /* 0x04 */ u8 *saveBuf; + /* 0x00 */ u8* noFlashSaveBuf; // Never allocated memory + /* 0x04 */ u8* saveBuf; /* 0x08 */ char unk_08[4]; /* 0x0C */ s16 status; /* 0x10 */ u32 curPage; /* 0x14 */ u32 numPages; - /* 0x18 */ OSTime unk_18; + /* 0x18 */ OSTime startWriteOsTime; /* 0x20 */ s16 unk_20; /* 0x22 */ s16 unk_22; /* 0x24 */ s16 unk_24; @@ -226,14 +233,14 @@ typedef struct CycleSceneFlags { typedef struct SaveOptions { /* 0x0 */ u16 optionId; // "option_id" /* 0x2 */ u8 language; // "j_n" - /* 0x3 */ s8 audioSetting; // "s_sound" + /* 0x3 */ u8 audioSetting; // "s_sound" /* 0x4 */ u8 languageSetting; // "language" /* 0x5 */ u8 zTargetSetting; // "z_attention", 0: Switch; 1: Hold } SaveOptions; // size = 0x6 typedef struct SavePlayerData { /* 0x00 */ char newf[6]; // "newf" Will always be "ZELDA3 for a valid save - /* 0x06 */ u16 deaths; // "savect" + /* 0x06 */ u16 threeDayResetCount; // "savect" /* 0x08 */ char playerName[8]; // "player_name" /* 0x10 */ s16 healthCapacity; // "max_life" /* 0x12 */ s16 health; // "now_life" @@ -337,11 +344,11 @@ typedef struct SaveContext { /* 0x3DB4 */ f32 entranceSpeed; // "player_wipe_speedF" /* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE" /* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item" - /* 0x3DBB */ u8 unk_3DBB; // "next_walk" + /* 0x3DBB */ u8 retainWeatherMode; // "next_walk" /* 0x3DBC */ s16 dogParams; // OoT leftover. "dog_flag" /* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status" /* 0x3DBF */ u8 showTitleCard; // "name_display" - /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer" + /* 0x3DC0 */ s16 nayrusLoveTimer; // remnant of OoT, "shield_magic_timer" /* 0x3DC2 */ u8 unk_3DC2; // "pad1" /* 0x3DC8 */ OSTime postmanTimerStopOsTime; // The osTime when the timer stops for the postman minigame. "get_time" /* 0x3DD0 */ u8 timerStates[TIMER_ID_MAX]; // See the `TimerState` enum. "event_fg" @@ -374,13 +381,13 @@ typedef struct SaveContext { /* 0x3F3A */ u16 minigameScore; // "yabusame_total" /* 0x3F3C */ u16 minigameHiddenScore; // "yabusame_out_ct" /* 0x3F3E */ u8 unk_3F3E; // "no_save" - /* 0x3F3F */ u8 unk_3F3F; // "flash_flag" + /* 0x3F3F */ u8 flashSaveAvailable; // "flash_flag" /* 0x3F40 */ SaveOptions options; - /* 0x3F46 */ u16 unk_3F46; // "NottoriBgm" + /* 0x3F46 */ u16 forcedSeqId; // "NottoriBgm" /* 0x3F48 */ u8 cutsceneTransitionControl; // "fade_go" /* 0x3F4A */ u16 nextCutsceneIndex; // "next_daytime" /* 0x3F4C */ u8 cutsceneTrigger; // "doukidemo" - /* 0x3F4D */ u8 unk_3F4D; // "Kenjya_no" + /* 0x3F4D */ u8 chamberCutsceneNum; // remnant of OoT "Kenjya_no" /* 0x3F4E */ u16 nextDayTime; // "next_zelda_time" /* 0x3F50 */ u8 transFadeDuration; // "fade_speed" /* 0x3F51 */ u8 transWipeSpeed; // "wipe_speed" transition related @@ -1575,28 +1582,28 @@ void Sram_InitDebugSave(void); void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx); void Sram_OpenSave(struct FileSelectState* fileSelect, SramContext* sramCtx); void func_8014546C(SramContext* sramCtx); -void func_801457CC(struct FileSelectState* fileSelect, SramContext* sramCtx); -void func_80146580(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum); -void func_80146628(struct FileSelectState* fileSelect2, SramContext* sramCtx); +void func_801457CC(struct GameState* gameState, SramContext* sramCtx); +void Sram_EraseSave(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum); +void Sram_CopySave(struct FileSelectState* fileSelect2, SramContext* sramCtx); void Sram_InitSave(struct FileSelectState* fileSelect2, SramContext* sramCtx); -void func_80146DF8(SramContext* sramCtx); +void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx); void Sram_InitSram(struct GameState* gameState, SramContext* sramCtx); void Sram_Alloc(struct GameState* gameState, SramContext* sramCtx); void Sram_SaveSpecialEnterClockTown(struct PlayState* play); void Sram_SaveSpecialNewDay(struct PlayState* play); -void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages); -void func_80147020(SramContext* sramCtx); -void func_80147068(SramContext* sramCtx); -void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages); -void func_80147150(SramContext* sramCtx); -void func_80147198(SramContext* sramCtx); +void Sram_SetFlashPagesDefault(SramContext* sramCtx, u32 curPage, u32 numPages); +void Sram_StartWriteToFlashDefault(SramContext* sramCtx); +void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx); +void Sram_SetFlashPagesOwlSave(SramContext* sramCtx, s32 curPage, s32 numPages); +void Sram_StartWriteToFlashOwlSave(SramContext* sramCtx); +void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx); -extern s32 D_801C6798[]; +extern u32 gSramSlotOffsets[]; extern u8 gAmmoItems[]; -extern s32 D_801C67C8[]; -extern s32 D_801C67F0[]; -extern s32 D_801C6818[]; -extern s32 D_801C6840[]; -extern s32 D_801C6850[]; +extern s32 gFlashSaveStartPages[]; +extern s32 gFlashSaveNumPages[]; +extern s32 gFlashSpecialSaveNumPages[]; +extern s32 gFlashOwlSaveStartPages[]; +extern s32 gFlashOwlSaveNumPages[]; #endif diff --git a/include/z64scene.h b/include/z64scene.h index 7f48d8740..5505f08e3 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -130,8 +130,8 @@ typedef struct { /* 0x1 */ u8 data1; /* 0x2 */ UNK_TYPE1 pad2[2]; /* 0x4 */ u8 skyboxId; - /* 0x5 */ u8 unk5; - /* 0x6 */ u8 unk6; + /* 0x5 */ u8 skyboxConfig; + /* 0x6 */ u8 envLightMode; } SCmdSkyboxSettings; // size = 0x7 typedef struct { @@ -719,6 +719,8 @@ typedef enum { */ #define ENTRANCE(scene, spawn) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4)) +#define ENTR_LOAD_OPENING -1 + /* * Entrances used in cutscene destination. Includes scene layer that's immediately applied to `nextCutsceneIndex` and removed. * See `CutsceneScriptEntry.nextEntrance` diff --git a/spec b/spec index 601a46f40..a3cde9e58 100644 --- a/spec +++ b/spec @@ -664,12 +664,15 @@ endseg beginseg name "ovl_file_choose" compress + include "build/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.o" + include "build/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.o" include "build/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.o" - include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.o" include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.o" - include "build/data/ovl_file_choose/ovl_file_choose.data.o" - include "build/data/ovl_file_choose/ovl_file_choose.bss.o" - include "build/data/ovl_file_choose/ovl_file_choose.reloc.o" + #ifdef NON_MATCHING + include "build/src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc.o" + #else + include "build/data/ovl_file_choose/ovl_file_choose.reloc.o" + #endif endseg beginseg @@ -8824,7 +8827,8 @@ beginseg name "title_static" compress romalign 0x1000 - include "build/baserom/title_static.o" + include "build/assets/misc/title_static/title_static.o" + number 1 endseg beginseg diff --git a/src/code/graph.c b/src/code/graph.c index bf9067b69..2e104234e 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -2,7 +2,7 @@ #include "buffers.h" #include "system_malloc.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_select/z_select.h" #include "overlays/gamestates/ovl_title/z_title.h" diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index 0e682231f..46dfe189e 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -8,10 +8,10 @@ void SaveContext_Init(void) { gSaveContext.save.playerForm = 0; gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - gSaveContext.unk_3F46 = NA_BGM_GENERAL_SFX; + gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX; gSaveContext.nextCutsceneIndex = 0xFFEF; gSaveContext.cutsceneTrigger = 0; - gSaveContext.unk_3F4D = 0; + gSaveContext.chamberCutsceneNum = 0; gSaveContext.nextDayTime = 0xFFFF; gSaveContext.skyboxTime = 0; gSaveContext.dogIsLost = true; @@ -19,6 +19,6 @@ void SaveContext_Init(void) { gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; gSaveContext.options.language = 1; - gSaveContext.options.audioSetting = 0; + 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 733ec4bc1..00ee877e9 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -171,15 +171,15 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_CLOUDY_SKY: if (isFirstFrame) { - play->envCtx.unk_19 = 1; - play->envCtx.unk_17 = 1; - play->envCtx.unk_18 = 0; - play->envCtx.unk_1A = 0x3C; - play->envCtx.unk_21 = 1; - play->envCtx.unk_1F = 0; - play->envCtx.unk_20 = 1; - play->envCtx.unk_24 = 0x3C; - play->envCtx.unk_22 = play->envCtx.unk_24; + play->envCtx.changeSkyboxState = 1; + play->envCtx.skyboxConfig = 1; + play->envCtx.changeSkyboxNextConfig = 0; + play->envCtx.changeSkyboxTimer = 60; + play->envCtx.changeLightEnabled = true; + play->envCtx.lightConfig = 0; + play->envCtx.changeLightNextConfig = 1; + play->envCtx.changeDuration = 60; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; } break; @@ -327,8 +327,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_MOON_CRASH_SKYBOX: if (isFirstFrame) { - // skyboxConfig - play->envCtx.unk_17 = 0xD; + play->envCtx.skyboxConfig = 0xD; } break; diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c index 1b82705f5..7336b01f6 100644 --- a/src/code/z_game_dlftbls.c +++ b/src/code/z_game_dlftbls.c @@ -1,6 +1,6 @@ #include "global.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_select/z_select.h" #include "overlays/gamestates/ovl_title/z_title.h" diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index d0e5e45f2..c3c6819be 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -49,7 +49,7 @@ void GameOver_Update(PlayState* play) { } } - gSaveContext.unk_3DC0 = 2000; + gSaveContext.nayrusLoveTimer = 2000; gSaveContext.save.saveInfo.playerData.tatlTimer = 0; gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index c9bea1669..7226a6719 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -16,14 +16,14 @@ s16 sBeatingHeartsDDEnv[3]; s16 sHeartsDDPrim[2][3]; s16 sHeartsDDEnv[2][3]; -TexturePtr sHeartTextures[] = { +static TexturePtr sHeartTextures[] = { gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, }; -TexturePtr sHeartDDTextures[] = { +static TexturePtr sHeartDDTextures[] = { gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 9672b8804..f8f28f4b8 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -147,7 +147,7 @@ s16 D_801BF97C = 255; f32 D_801BF980 = 1.0f; s32 D_801BF984 = 0; -Gfx sScreenFillSetupDL[] = { +static Gfx sScreenFillSetupDL[] = { gsDPPipeSync(), gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), diff --git a/src/code/z_play.c b/src/code/z_play.c index dade44cf6..dd9b6c561 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -7,7 +7,7 @@ #include "z64view.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_opening/z_opening.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" s32 gDbgCamEnabled = false; @@ -1036,9 +1036,9 @@ void Play_UpdateMain(PlayState* this) { if (this->sramCtx.status != 0) { if (gSaveContext.save.isOwlSave) { - func_80147198(&this->sramCtx); + Sram_UpdateWriteToFlashOwlSave(&this->sramCtx); } else { - func_80147068(&this->sramCtx); + Sram_UpdateWriteToFlashDefault(&this->sramCtx); } } } @@ -1272,8 +1272,8 @@ void Play_DrawMain(PlayState* this) { if ((this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) { if ((this->skyboxId == SKYBOX_NORMAL_SKY) || (this->skyboxId == SKYBOX_3)) { Environment_UpdateSkybox(this->skyboxId, &this->envCtx, &this->skyboxCtx); - Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.unk_13, this->view.eye.x, - this->view.eye.y, this->view.eye.z); + Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.skyboxBlend, + this->view.eye.x, this->view.eye.y, this->view.eye.z); } else if (!this->skyboxCtx.skyboxShouldDraw) { Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x, this->view.eye.y, this->view.eye.z); @@ -2217,7 +2217,7 @@ void Play_Init(GameState* thisx) { if (((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN)) || (gSaveContext.save.cutsceneIndex >= 0xFFF0)) { - gSaveContext.unk_3DC0 = 0; + gSaveContext.nayrusLoveTimer = 0; Magic_Reset(this); gSaveContext.sceneLayer = (gSaveContext.save.cutsceneIndex & 0xF) + 1; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 623db6b24..368b4509e 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -365,8 +365,8 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) { // SceneTableEntry Header Command 0x11: Skybox Settings void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) { play->skyboxId = cmd->skyboxSettings.skyboxId & 3; - play->envCtx.unk_17 = play->envCtx.unk_18 = cmd->skyboxSettings.unk5; - play->envCtx.unk_1E = cmd->skyboxSettings.unk6; + play->envCtx.skyboxConfig = play->envCtx.changeSkyboxNextConfig = cmd->skyboxSettings.skyboxConfig; + play->envCtx.lightMode = cmd->skyboxSettings.envLightMode; Scene_LoadAreaTextures(play, cmd->skyboxSettings.data1); } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index f47a8e201..21bfaf7ef 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1,9 +1,9 @@ #include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" -void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages); +void Sram_SyncWriteToFlash(SramContext* sramCtx, s32 curPage, s32 numPages); void func_80147314(SramContext* sramCtx, s32 fileNum); void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2); @@ -140,9 +140,21 @@ u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { /* 99 */ 0, }; +// Unused remnant values from OoT. Not the correct sizes in MM. +#define OOT_SAVECONTEXT_SIZE 0x1428 +#define OOT_SLOT_SIZE (OOT_SAVECONTEXT_SIZE + 0x28) +#define OOT_SRAM_HEADER_SIZE 0x10 +#define OOT_SLOT_OFFSET(index) (OOT_SRAM_HEADER_SIZE + 0x10 + (index * OOT_SLOT_SIZE)) + // used in other files -s32 D_801C6798[] = { - 0x00000020, 0x00001470, 0x000028C0, 0x00003D10, 0x00005160, 0x000065B0, +u32 gSramSlotOffsets[] = { + OOT_SLOT_OFFSET(0), + OOT_SLOT_OFFSET(1), + OOT_SLOT_OFFSET(2), + // the latter three saves are backup saves for the former saves (in OoT) + OOT_SLOT_OFFSET(3), + OOT_SLOT_OFFSET(4), + OOT_SLOT_OFFSET(5), }; u8 gAmmoItems[] = { @@ -172,28 +184,89 @@ u8 gAmmoItems[] = { ITEM_NONE, // SLOT_BOTTLE_6 }; -s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380 }; - -s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 1, 1 }; - -s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 1, 1 }; - -s32 D_801C6840[] = { 0x100, 0x180, 0x200, 0x280 }; - -s32 D_801C6850[] = { 0x80, 0x80, 0x80, 0x80, 0x300, 0x380, 1, 1 }; - -s32 D_801C6870[] = { - sizeof(Save), - sizeof(Save), - sizeof(Save), - sizeof(Save), - offsetof(SaveContext, fileNum), - offsetof(SaveContext, fileNum), - offsetof(SaveContext, fileNum), - offsetof(SaveContext, fileNum), +// Stores flash start page number +s32 gFlashSaveStartPages[] = { + 0, // File 1 New Cycle Save + 0x40, // File 1 New Cycle Save Backup + 0x80, // File 2 New Cycle Save + 0xC0, // File 2 New Cycle Save Backup + 0x100, // File 1 Owl Save + 0x180, // File 1 Owl Save Backup + 0x200, // File 2 Owl Save + 0x280, // File 2 Owl Save Backup + 0x300, // Sram Header (SaveOptions) + 0x380, // Sram Header Backup (SaveOptions) }; -u8 D_801C6890[8] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80 }; +// Flash rom number of pages +s32 gFlashSaveNumPages[] = { + 0x40, // File 1 New Cycle Save + 0x40, // File 1 New Cycle Save Backup + 0x40, // File 2 New Cycle Save + 0x40, // File 2 New Cycle Save Backup + 0x80, // File 1 Owl Save + 0x80, // File 1 Owl Save Backup + 0x80, // File 2 Owl Save + 0x80, // File 2 Owl Save Backup + 1, // Sram Header (SaveOptions) + 1, // Sram Header Backup (SaveOptions) +}; + +// Flash rom number of pages on very first time Player enters South Clock Town from the Clock Tower +s32 gFlashSpecialSaveNumPages[] = { + 0x80, // File 1 New Cycle Save + 0x80, // File 1 New Cycle Save Backup + 0x80, // File 2 New Cycle Save + 0x80, // File 2 New Cycle Save Backup + 0x80, // File 1 Owl Save + 0x80, // File 1 Owl Save Backup + 0x80, // File 2 Owl Save + 0x80, // File 2 Owl Save Backup + 1, // Sram Header (SaveOptions) + 1, // Sram Header Backup (SaveOptions) +}; + +// Owl Save flash rom start page number +s32 gFlashOwlSaveStartPages[] = { + 0x100, // File 1 Owl Save + 0x180, // File 1 Owl Save Backup + 0x200, // File 2 Owl Save + 0x280, // File 2 Owl Save Backup +}; + +// Owl Save flash rom number of pages +s32 gFlashOwlSaveNumPages[] = { + 0x80, // File 1 Owl Save + 0x80, // File 1 Owl Save Backup + 0x80, // File 2 Owl Save + 0x80, // File 2 Owl Save Backup +}; + +// Save Options Sram Header flash rom start page number +s32 gFlashOptionsSaveStartPages[] = { + 0x300, // Sram Header (SaveOptions) + 0x380, // Sram Header Backup (SaveOptions) +}; + +// Save Options Sram Header flash rom number of pages +s32 gFlashOptionsSaveNumPages[] = { + 1, // Sram Header (SaveOptions) + 1, // Sram Header Backup (SaveOptions) +}; + +// Flash rom actual size needed +s32 gFlashSaveSizes[] = { + sizeof(Save), // size = 0x100C - File 1 New Cycle Save + sizeof(Save), // size = 0x100C - File 1 New Cycle Save Backup + sizeof(Save), // size = 0x100C - File 2 New Cycle Save + sizeof(Save), // size = 0x100C - File 2 New Cycle Save Backup + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 1 Owl Save + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 1 Owl Save Backup + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save Backup +}; + +u8 D_801C6890[8] = { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 }; u16 D_801F6AF0; u8 D_801F6AF2; @@ -245,9 +318,9 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; - gSaveContext.save.saveInfo.playerData.deaths++; - if (gSaveContext.save.saveInfo.playerData.deaths > 999) { - gSaveContext.save.saveInfo.playerData.deaths = 999; + gSaveContext.save.saveInfo.playerData.threeDayResetCount++; + if (gSaveContext.save.saveInfo.playerData.threeDayResetCount > 999) { + gSaveContext.save.saveInfo.playerData.threeDayResetCount = 999; } sceneId = Play_GetOriginalSceneId(play->sceneId); @@ -577,7 +650,7 @@ void Sram_GenerateRandomSaveFields(void) { SavePlayerData sSaveDefaultPlayerData = { { '\0', '\0', '\0', '\0', '\0', '\0' }, // newf - 0, // deaths + 0, // threeDayResetCount { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName " " 0x30, // healthCapacity 0x30, // health @@ -678,7 +751,7 @@ void Sram_InitNewSave(void) { SavePlayerData sSaveDebugPlayerData = { { 'Z', 'E', 'L', 'D', 'A', '3' }, // newf - 0x0000, // deaths + 0, // threeDayResetCount { 0x15, 0x12, 0x17, 0x14, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName "LINK " 0x80, // healthCapacity 0x80, // health @@ -775,7 +848,18 @@ Inventory sSaveDebugInventory = { (1 << QUEST_SONG_SOARING) | (1 << QUEST_SONG_STORMS) | (1 << QUEST_BOMBERS_NOTEBOOK) | (1 << QUEST_SONG_LULLABY_INTRO), // dungeonItems - { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, + { + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + }, // dungeonKeys { 8, 8, 8, 8, 8, 8, 8, 8, 8 }, // defenseHearts @@ -851,15 +935,15 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], - D_801C67F0[gSaveContext.fileNum * 2]) != 0) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSaveNumPages[gSaveContext.fileNum * 2]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2 + 1], + gFlashSaveNumPages[gSaveContext.fileNum * 2 + 1]); } Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2 + 1], + gFlashSaveNumPages[gSaveContext.fileNum * 2 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } gSaveContext.save.cutsceneIndex = cutsceneIndex; @@ -907,32 +991,34 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { s32 pad1; s32 fileNum; - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); if (gSaveContext.fileNum == 0xFF) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]); - } else if (fileSelect->unk_2446A[gSaveContext.fileNum] != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[0], gFlashSaveNumPages[0]); + } else if (fileSelect->isOwlSave[gSaveContext.fileNum + 2]) { phi_t1 = gSaveContext.fileNum + 2; phi_t1 *= 2; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1], gFlashSaveNumPages[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], + gFlashSaveNumPages[phi_t1 + 1]); } } else { phi_t1 = gSaveContext.fileNum; phi_t1 *= 2; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1], gFlashSaveNumPages[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], + gFlashSaveNumPages[phi_t1 + 1]); } } - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[phi_t1]); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], gFlashSaveNumPages[phi_t1 + 1]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[phi_t1]); } } @@ -963,7 +1049,7 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { if (gSaveContext.save.isFirstCycle) { gSaveContext.save.entrance = ENTRANCE(SOUTH_CLOCK_TOWN, 0); gSaveContext.save.day = 0; - gSaveContext.save.time = 0x3FFF; + gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; } else { gSaveContext.save.entrance = ENTRANCE(CUTSCENE, 0); gSaveContext.nextCutsceneIndex = 0; @@ -1028,7 +1114,7 @@ void func_8014546C(SramContext* sramCtx) { gSaveContext.save.saveInfo.checksum = 0; gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); } @@ -1051,7 +1137,7 @@ void func_80145698(SramContext* sramCtx) { gSaveContext.save.saveInfo.checksum = 0; gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); } @@ -1059,31 +1145,21 @@ void func_80145698(SramContext* sramCtx) { // Verifies save and use backup if corrupted? #ifdef NON_EQUIVALENT -void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { - FileSelectState* fileSelect = fileSelect2; +void func_801457CC(GameState* gameState, SramContext* sramCtx) { + FileSelectState* fileSelect = (FileSelectState*)gameState; u16 sp7A; - // u16 sp78; + u16 oldCheckSum; // s2 u16 sp76; - // u16 sp74; - u16 sp6E; //! - // s32 sp68; - // u16 sp66; - u16 phi_s2; //! - u16 sp64; - // s32 sp60; - // s32 sp5C; - // s32 sp58; - // u32 new_var; - u16 phi_s2_3; - // s16 fakevar; + u16 sp64; // sp74? + u16 phi_s2; + u16 phi_s7; + u16 sp6E; + u16 newCheckSum; // v0 + u16 phi_a0; // maskCount - u16 temp_s2; - u16 temp_v0_2; - u16 phi_a0; // maskCount - - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { D_801F6AF0 = gSaveContext.save.time; - D_801F6AF2 = gSaveContext.unk_3F3F; + D_801F6AF2 = gSaveContext.flashSaveAvailable; sp64 = 0; for (sp76 = 0; sp76 < 5; sp76++, sp64 += 2) { @@ -1091,40 +1167,65 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { phi_s2 = false; sp6E = 0; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) { + // read main save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]) != 0) { + // main save didn't work sp6E = 1; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + // read backup save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]) != 0) { + // backup save didn't work phi_s2 = true; } } if (sp76 < 2) { - fileSelect->unk_24468[sp76] = 0; + // Non-owl save + // sp76 = 0: main save + // sp76 = 1: backup save + + fileSelect->isOwlSave[sp76] = 0; if (phi_s2) { + // both main save and backup save failed bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); } else { - // Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + + // test checksum of main save + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; - temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); - gSaveContext.save.saveInfo.checksum = temp_s2; + newCheckSum = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]); + gSaveContext.save.saveInfo.checksum = oldCheckSum; - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) { + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != newCheckSum)) { + // checksum didnt match, try backup save sp6E = 1; - if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {} - phi_s2 = false; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') && + (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) { + phi_s2 = false; + } + + // phi_s2 = false; + + // read backup save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]) != 0) { + // backup save didn't work phi_s2 = true; } - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + + // test checksum of backup save + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; + + //! FAKE: (s32)sp64 if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || - (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) { + (oldCheckSum != Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[(s32)sp64]))) { + // backup save didn't work bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); sp6E = 999; @@ -1133,29 +1234,30 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } gSaveContext.save.saveInfo.checksum = 0; + // FAKE: Needed? gSaveContext.save.saveInfo.checksum = - Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed? + Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64 & 0xFFFFFFFF]); for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) { fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A]; } if (!CHECK_NEWF(fileSelect->newf[sp76])) { - fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[sp76] = gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) { - fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; + fileSelect->fileNames[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; } fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity; fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[sp76] = gSaveContext.save.time; - fileSelect->unk_24460[sp76] = gSaveContext.save.day; - fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave; + fileSelect->defenseHearts[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[sp76] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[sp76] = gSaveContext.save.time; + fileSelect->day[sp76] = gSaveContext.save.day; + fileSelect->isOwlSave[sp76] = gSaveContext.save.isOwlSave; fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees; - fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4); + fileSelect->walletUpgrades[sp76] = CUR_UPG_VALUE(UPG_WALLET); for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) { if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) { @@ -1168,90 +1270,106 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } if (sp6E == 1) { + // backup save Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); - } else if (sp6E == 0) { // TODO: == 0? - temp_s2 = gSaveContext.save.saveInfo.checksum; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { - phi_s2_3 = 1; + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSpecialSaveNumPages[sp64]); + } else if (!sp6E) { + // main save + phi_s7 = gSaveContext.save.saveInfo.checksum; + + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]) != 0) { + oldCheckSum = 1; } else { Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - phi_s2_3 = gSaveContext.save.saveInfo.checksum; + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; sp7A = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); } - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || - (phi_s2_3 != temp_s2)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != sp7A) || + (oldCheckSum != phi_s7)) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSpecialSaveNumPages[sp64]); } } } else if (sp76 < 4) { - fileSelect->unk_24468[sp76] = 0; + // Owl Save: + // sp76 = 3: main owl save + // sp76 = 4: backup owl save + fileSelect->isOwlSave[sp76] = 0; - if (!CHECK_NEWF(fileSelect->newf2[(s32)sp76])) { // TODO: Needed? + if (!CHECK_NEWF(fileSelect->newf[sp76 - 2])) { if (phi_s2) { + // both main save and backup save failed bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, - D_801C6870[sp64]); // TODO: Needed? + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); } else { - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + oldCheckSum = gSaveContext.save.saveInfo.checksum; + // test checksum of main save gSaveContext.save.saveInfo.checksum = 0; - temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); - gSaveContext.save.saveInfo.checksum = temp_s2; - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) { + newCheckSum = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]); + gSaveContext.save.saveInfo.checksum = oldCheckSum; + + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != newCheckSum)) { + // checksum didnt match, try backup save sp6E = 1; if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') && (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) { phi_s2 = false; } - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + // read backup save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1])) { + // backup save didn't work phi_s2 = true; } - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + + // test checksum of backup save + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; + if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || - (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) { + (oldCheckSum != Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]))) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); sp6E = 999; } } } gSaveContext.save.saveInfo.checksum = 0; + // FAKE: Needed? gSaveContext.save.saveInfo.checksum = - Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed? + Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64 & 0xFFFFFFFF]); for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) { fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A]; } if (!CHECK_NEWF(fileSelect->newf[sp76])) { - fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[sp76] = gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) { - phi_s2 += 0; // TODO: Needed? - fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; + fileSelect->fileNames[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; } fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity; fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[sp76] = gSaveContext.save.time; - fileSelect->unk_24460[sp76] = gSaveContext.save.day; - fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave; + fileSelect->defenseHearts[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[sp76] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[sp76] = gSaveContext.save.time; + fileSelect->day[sp76] = gSaveContext.save.day; + fileSelect->isOwlSave[sp76] = gSaveContext.save.isOwlSave; fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees; - fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4); + fileSelect->walletUpgrades[sp76] = CUR_UPG_VALUE(UPG_WALLET); for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) { if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) { @@ -1264,39 +1382,44 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } if (sp6E == 1) { - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); - } else if (!sp6E) { // TODO: == 0? - temp_s2 = gSaveContext.save.saveInfo.checksum; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { - phi_s2_3 = 1; + // backup save + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], gFlashSaveNumPages[sp64 + 1]); + } else if (!sp6E) { + // main save + phi_s7 = gSaveContext.save.saveInfo.checksum; + + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1])) { + oldCheckSum = 1; } else { - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - phi_s2_3 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; - // phi_s2_3 = gSaveContext.save.saveInfo.checksum; - sp7A = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); + sp7A = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]); } - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || - (phi_s2_3 != temp_s2)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != sp7A) || + (oldCheckSum != phi_s7)) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], + gFlashSaveNumPages[sp64]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]); } } } else { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], gFlashSaveNumPages[sp64 + 1]); } } else { if (phi_s2) { gSaveContext.options.optionId = 0xA51D; gSaveContext.options.language = 1; - gSaveContext.options.audioSetting = 0; + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; } else { @@ -1304,7 +1427,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (gSaveContext.options.optionId != 0xA51D) { gSaveContext.options.optionId = 0xA51D; gSaveContext.options.language = 1; - gSaveContext.options.audioSetting = 0; + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; } @@ -1314,7 +1437,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } gSaveContext.options.language = 1; @@ -1323,50 +1446,52 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s") #endif -void func_80146580(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) { +void Sram_EraseSave(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) { FileSelectState* fileSelect = fileSelect2; s32 pad; - if (gSaveContext.unk_3F3F) { - if (fileSelect->unk_2446A[fileNum]) { + if (gSaveContext.flashSaveAvailable) { + if (fileSelect->isOwlSave[fileNum + 2]) { func_80147314(sramCtx, fileNum); - fileSelect->unk_2446A[fileNum] = 0; + fileSelect->isOwlSave[fileNum + 2] = false; } bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } #ifdef NON_MATCHING // v0/v1 -void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { +void Sram_CopySave(FileSelectState* fileSelect2, SramContext* sramCtx) { FileSelectState* fileSelect = fileSelect2; u16 i; s16 maskCount; - if (gSaveContext.unk_3F3F) { - if (fileSelect->unk_2446A[fileSelect->unk_2448E]) { - func_80147414(sramCtx, fileSelect->unk_2448E, fileSelect->fileNum); - fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths; + if (gSaveContext.flashSaveAvailable) { + if (fileSelect->isOwlSave[fileSelect->selectedFileIndex + 2]) { + func_80147414(sramCtx, fileSelect->selectedFileIndex, fileSelect->copyDestFileIndex); + fileSelect->threeDayResetCount[fileSelect->copyDestFileIndex + 2] = + gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { - fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + fileSelect->fileNames[fileSelect->copyDestFileIndex + 2][i] = + gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->unk_24438[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity; - fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_2445C[fileSelect->fileNum] = gSaveContext.save.time; - fileSelect->unk_24464[fileSelect->fileNum] = gSaveContext.save.day; - fileSelect->unk_2446A[fileSelect->fileNum] = gSaveContext.save.isOwlSave; - fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees; - // = CUR_UPG_VALUE(UPG_WALLET); - fileSelect->unk_24476[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; + fileSelect->healthCapacity[fileSelect->copyDestFileIndex + 2] = + gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->defenseHearts[fileSelect->copyDestFileIndex + 2] = + gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.time; + fileSelect->day[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.day; + fileSelect->isOwlSave[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.isOwlSave; + fileSelect->rupees[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.playerData.rupees; + fileSelect->walletUpgrades[fileSelect->copyDestFileIndex + 2] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { @@ -1374,42 +1499,42 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - fileSelect->unk_2447A[fileSelect->fileNum] = maskCount; - fileSelect->unk_2447E[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->maskCount[fileSelect->copyDestFileIndex + 2] = maskCount; + fileSelect->heartPieceCount[fileSelect->copyDestFileIndex + 2] = GET_QUEST_HEART_PIECE_COUNT; } // clear buffer bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // read to buffer - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], - D_801C67F0[fileSelect->unk_2448E * 2]); - + SysFlashrom_ReadData(&sramCtx->saveBuf[0], gFlashSaveStartPages[fileSelect->selectedFileIndex * 2], + gFlashSaveNumPages[fileSelect->selectedFileIndex * 2]); if (1) {} - SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1], - D_801C67F0[fileSelect->unk_2448E * 2 + 1]); + + SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], gFlashSaveStartPages[fileSelect->selectedFileIndex * 2 + 1], + gFlashSaveNumPages[fileSelect->selectedFileIndex * 2 + 1]); if (1) {} // copy buffer to save context Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[fileSelect->copyDestFileIndex] = + gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { - fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + fileSelect->fileNames[fileSelect->copyDestFileIndex][i] = + gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->healthCapacity[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity; - fileSelect->health[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[fileSelect->fileNum] = gSaveContext.save.time; - fileSelect->unk_24460[fileSelect->fileNum] = gSaveContext.save.day; - fileSelect->unk_24468[fileSelect->fileNum] = gSaveContext.save.isOwlSave; - fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees; - // = CUR_UPG_VALUE(UPG_WALLET); - fileSelect->unk_24474[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; + fileSelect->healthCapacity[fileSelect->copyDestFileIndex] = + gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->defenseHearts[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[fileSelect->copyDestFileIndex] = gSaveContext.save.time; + fileSelect->day[fileSelect->copyDestFileIndex] = gSaveContext.save.day; + fileSelect->isOwlSave[fileSelect->copyDestFileIndex] = gSaveContext.save.isOwlSave; + fileSelect->rupees[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.rupees; + fileSelect->walletUpgrades[fileSelect->copyDestFileIndex] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { @@ -1417,16 +1542,15 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - fileSelect->maskCount[fileSelect->fileNum] = maskCount; - fileSelect->heartPieceCount[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->maskCount[fileSelect->copyDestFileIndex] = maskCount; + fileSelect->heartPieceCount[fileSelect->copyDestFileIndex] = GET_QUEST_HEART_PIECE_COUNT; } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } #else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_80146628.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/Sram_CopySave.s") #endif void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { @@ -1435,15 +1559,15 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { FileSelectState* fileSelect = fileSelect2; s16 maskCount; - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { Sram_InitNewSave(); - if (fileSelect->unk_24480 == 0) { + if (fileSelect->buttonIndex == 0) { gSaveContext.save.cutsceneIndex = 0xFFF0; } for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); phi_v0++) { gSaveContext.save.saveInfo.playerData.playerName[phi_v0] = - fileSelect->unk_24414[fileSelect->unk_24480][phi_v0]; + fileSelect->fileNames[fileSelect->buttonIndex][phi_v0]; } gSaveContext.save.saveInfo.playerData.newf[0] = 'Z'; @@ -1459,24 +1583,25 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); i++) { - fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.newf[i]; + fileSelect->newf[fileSelect->buttonIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i]; } - fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[fileSelect->buttonIndex] = + gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { - fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + fileSelect->fileNames[fileSelect->buttonIndex][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.healthCapacity; - fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[fileSelect->unk_24480] = gSaveContext.save.time; - fileSelect->unk_24460[fileSelect->unk_24480] = gSaveContext.save.day; - fileSelect->unk_24468[fileSelect->unk_24480] = gSaveContext.save.isOwlSave; - fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.rupees; - fileSelect->unk_24474[fileSelect->unk_24480] = CUR_UPG_VALUE(UPG_WALLET); + fileSelect->healthCapacity[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->defenseHearts[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[fileSelect->buttonIndex] = gSaveContext.save.time; + fileSelect->day[fileSelect->buttonIndex] = gSaveContext.save.day; + fileSelect->isOwlSave[fileSelect->buttonIndex] = gSaveContext.save.isOwlSave; + fileSelect->rupees[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.rupees; + fileSelect->walletUpgrades[fileSelect->buttonIndex] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { @@ -1484,17 +1609,19 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - fileSelect->maskCount[fileSelect->unk_24480] = maskCount; - fileSelect->heartPieceCount[fileSelect->unk_24480] = - (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->maskCount[fileSelect->buttonIndex] = maskCount; + fileSelect->heartPieceCount[fileSelect->buttonIndex] = GET_QUEST_HEART_PIECE_COUNT; } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } -void func_80146DF8(SramContext* sramCtx) { - if (gSaveContext.unk_3F3F) { +/** + * Write the SaveOptions of SaveContext to the save buffer + */ +void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx) { + if (gSaveContext.flashSaveAvailable) { // TODO: macros for languages gSaveContext.options.language = 1; Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.options, sizeof(SaveOptions)); @@ -1508,7 +1635,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) { } void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE); sramCtx->status = 0; } @@ -1517,7 +1644,7 @@ void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { /** * Synchronous flash write */ -void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages) { +void Sram_SyncWriteToFlash(SramContext* sramCtx, s32 curPage, s32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; SysFlashrom_WriteDataSync(sramCtx->saveBuf, curPage, numPages); @@ -1533,8 +1660,8 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) { gSaveContext.save.isFirstCycle = true; gSaveContext.save.isOwlSave = false; func_80145698(sramCtx); - SysFlashrom_WriteDataSync(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], - D_801C6818[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSpecialSaveNumPages[gSaveContext.fileNum * 2]); } /** @@ -1555,25 +1682,25 @@ void Sram_SaveSpecialNewDay(PlayState* play) { gSaveContext.save.day = day; gSaveContext.save.time = time; gSaveContext.save.cutsceneIndex = cutsceneIndex; - SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], - D_801C67F0[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSaveNumPages[gSaveContext.fileNum * 2]); } -void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) { +void Sram_SetFlashPagesDefault(SramContext* sramCtx, u32 curPage, u32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; sramCtx->status = 1; } -void func_80147020(SramContext* sramCtx) { +void Sram_StartWriteToFlashDefault(SramContext* sramCtx) { // async flash write SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); - sramCtx->unk_18 = osGetTime(); + sramCtx->startWriteOsTime = osGetTime(); sramCtx->status = 2; } -void func_80147068(SramContext* sramCtx) { +void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx) { if (sramCtx->status == 2) { if (SysFlashrom_IsBusy() != 0) { // if task running if (SysFlashrom_AwaitResult() == 0) { // wait for task done @@ -1584,25 +1711,26 @@ void func_80147068(SramContext* sramCtx) { sramCtx->status = 4; } } - } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->unk_18) >= SECONDS_TO_TIMER(2)) { + } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= SECONDS_TO_TIMER(2)) { + // Finished status is hardcoded to 2 seconds instead of when the task finishes sramCtx->status = 0; } } -void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages) { +void Sram_SetFlashPagesOwlSave(SramContext* sramCtx, s32 curPage, s32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; sramCtx->status = 6; } -void func_80147150(SramContext* sramCtx) { +void Sram_StartWriteToFlashOwlSave(SramContext* sramCtx) { SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); - sramCtx->unk_18 = osGetTime(); + sramCtx->startWriteOsTime = osGetTime(); sramCtx->status = 7; } -void func_80147198(SramContext* sramCtx) { +void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx) { if (sramCtx->status == 7) { if (SysFlashrom_IsBusy() != 0) { // Is task running if (SysFlashrom_AwaitResult() == 0) { // Wait for task done @@ -1621,7 +1749,8 @@ void func_80147198(SramContext* sramCtx) { sramCtx->status = 4; } } - } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->unk_18) >= SECONDS_TO_TIMER(2)) { + } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= SECONDS_TO_TIMER(2)) { + // Finished status is hardcoded to 2 seconds instead of when the task finishes sramCtx->status = 0; bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); gSaveContext.save.isOwlSave = false; @@ -1648,8 +1777,9 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) { gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum)); Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, offsetof(SaveContext, fileNum)); - func_80146EBC(sramCtx, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]); - func_80146EBC(sramCtx, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2]); + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[fileNum * 2], gFlashOwlSaveNumPages[fileNum * 2]); + //! Note: should be `gFlashOwlSaveNumPages[fileNum * 2 + 1]`? + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[fileNum * 2 + 1], gFlashOwlSaveNumPages[fileNum * 2]); gSaveContext.save.isOwlSave = true; @@ -1661,6 +1791,7 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) { gSaveContext.save.saveInfo.playerData.newf[5] = '3'; } +// Used by `Sram_CopySave` with `isOwlSave` set void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { s32 pad; @@ -1668,16 +1799,18 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // Read save file - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashOwlSaveStartPages[fileNum * 2], + gFlashOwlSaveNumPages[fileNum * 2]) != 0) { // If failed, read backup save file - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashOwlSaveStartPages[fileNum * 2 + 1], + gFlashOwlSaveNumPages[fileNum * 2 + 1]); } // Copy buffer to save context Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum)); - func_80146EBC(sramCtx, D_801C6840[arg2 * 2], D_801C6850[arg2 * 2]); - func_80146EBC(sramCtx, D_801C6840[arg2 * 2 + 1], D_801C6850[arg2 * 2]); + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[arg2 * 2], gFlashOwlSaveNumPages[arg2 * 2]); + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[arg2 * 2 + 1], gFlashOwlSaveNumPages[arg2 * 2]); } void Sram_nop8014750C(UNK_TYPE4 arg0) { diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index 911e3e757..dd0785d94 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -239,7 +239,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) { case SKYBOX_NORMAL_SKY: osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - if (play->envCtx.unk_10 == 0) { + if (play->envCtx.skybox1Index == 0) { // Send a DMA request for the clear sky texture size = SEGMENT_ROM_SIZE(d2_fine_static); @@ -256,7 +256,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) { osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - if (play->envCtx.unk_11 == 0) { + if (play->envCtx.skybox2Index == 0) { // Send a DMA request for the clear sky texture size = SEGMENT_ROM_SIZE(d2_fine_static); 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 767d4c827..33c6eed8f 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -74,8 +74,8 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { } if (gSaveContext.sceneLayer == 0) { - play->envCtx.unk_1F = 5; - play->envCtx.unk_20 = 5; + play->envCtx.lightConfig = 5; + play->envCtx.changeLightNextConfig = 5; } this->unk_348 = 255.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 36415d7db..01a5b8c82 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1129,8 +1129,8 @@ void DmStk_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) { - play->envCtx.unk_17 = 15; - play->envCtx.unk_18 = 15; + play->envCtx.skyboxConfig = 15; + play->envCtx.changeSkyboxNextConfig = 15; } } @@ -1826,8 +1826,8 @@ void DmStk_Update(Actor* thisx, PlayState* play) { } if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) { - play->envCtx.unk_17 = 15; - play->envCtx.unk_18 = 15; + play->envCtx.skyboxConfig = 15; + play->envCtx.changeSkyboxNextConfig = 15; } } diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index 9b196c2fc..ed3fe65b9 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -191,7 +191,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) { } } else if (this->type == EN_HOLL_TYPE_SCENE_CHANGER) { play->nextEntrance = play->setupExitList[EN_HOLL_GET_EXIT_LIST_INDEX(&this->actor)]; - gSaveContext.unk_3DBB = 1; + gSaveContext.retainWeatherMode = true; Scene_SetExitFade(play); play->transitionTrigger = TRANS_TRIGGER_START; play->unk_1878C(play); 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 34551dac9..79bee615a 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -78,8 +78,8 @@ void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) { } play->envCtx.lightSettingOverride = 0; play->envCtx.unk_E0 = 2; - play->envCtx.unk_C1 = this->actor.world.rot.x; - play->envCtx.unk_C2 = this->actor.world.rot.z; + play->envCtx.lightSetting = this->actor.world.rot.x; + play->envCtx.prevLightSetting = this->actor.world.rot.z; play->envCtx.lightBlend = arg2; } @@ -94,7 +94,7 @@ void func_8089F0A0(EnViewer* this, PlayState* play) { func_800FAAB4( play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)); play->envCtx.lightBlend = 1.0f; - play->envCtx.unk_C2 = play->envCtx.unk_C1; + 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 10be4ec3c..84f621915 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 @@ -99,8 +99,8 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { case WEATHERTAG_TYPE_UNK5: func_800BC154(play, &play->actorCtx, &this->actor, 7); play->skyboxId = SKYBOX_3; - play->envCtx.unk_1F = 5; - play->envCtx.unk_20 = 5; + play->envCtx.lightConfig = 5; + play->envCtx.changeLightNextConfig = 5; D_801F4E74 = 1.0f; EnWeatherTag_SetupAction(this, func_80966BF4); break; @@ -124,25 +124,26 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { // matches but unused params is suspicious // called WeatherTag_CheckEnableWeatherEffect in OOT, that's where "weatherMode" came from -u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 new1F, u8 new20, u16 new24, - u8 weatherMode) { +u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 lightConfig, + u8 changeLightNextConfig, u16 changeDuration, u8 weatherMode) { Player* player = GET_PLAYER(play); u8 returnVal = 0; if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) { - if (play->envCtx.unk_1F == play->envCtx.unk_20) { + if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { D_801BDBB8 = 1; - if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) { + if (!(play->envCtx.lightMode == 0) || + ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { D_801BDBB8 = 0; if (gWeatherMode != weatherMode) { gWeatherMode = weatherMode; - play->envCtx.unk_21 = 1; - play->envCtx.unk_1F = new1F; - play->envCtx.unk_20 = new20; - D_801BDBB4 = new20; - play->envCtx.unk_24 = new24; - play->envCtx.unk_22 = play->envCtx.unk_24; + play->envCtx.changeLightEnabled = true; + play->envCtx.lightConfig = lightConfig; + play->envCtx.changeLightNextConfig = changeLightNextConfig; + D_801BDBB4 = changeLightNextConfig; + play->envCtx.changeDuration = changeDuration; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; } returnVal = 1; } @@ -153,23 +154,25 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, // again with the unused parameters // called WeatherTag_CheckRestoreWeather in OOT -u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 new1F, u8 new20, u16 new24) { +u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 lightConfig, + u8 changeLightNextConfig, u16 changeDuration) { Player* player = GET_PLAYER(play); u8 returnVal = 0; if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) { - if (play->envCtx.unk_1F == play->envCtx.unk_20) { + if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { D_801BDBB8 = 1; - if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) { + if (!(play->envCtx.lightMode == 0) || + ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { D_801BDBB8 = 0; gWeatherMode = 0; - play->envCtx.unk_21 = 1; - play->envCtx.unk_1F = new1F; - play->envCtx.unk_20 = new20; - D_801BDBB4 = new20; - play->envCtx.unk_24 = new24; - play->envCtx.unk_22 = play->envCtx.unk_24; + play->envCtx.changeLightEnabled = true; + play->envCtx.lightConfig = lightConfig; + play->envCtx.changeLightNextConfig = changeLightNextConfig; + D_801BDBB4 = changeLightNextConfig; + play->envCtx.changeDuration = changeDuration; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; returnVal = 1; } } @@ -240,7 +243,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.unk_1F, 5, 100, 2) || (gWeatherMode == 2)) { + if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == 2)) { play->skyboxId = SKYBOX_3; EnWeatherTag_SetupAction(this, func_80966D20); } else if (D_801F4E74 <= 0.01f) { @@ -253,7 +256,7 @@ void func_80966B08(EnWeatherTag* this, PlayState* play) { // WEATHERTAG_TYPE_UNK5: only one in ikana canyon, corner of cliff right outside of stone tower entrance // because it uses cutsecnes.. is this the clear ikana cutcsene? void func_80966BF4(EnWeatherTag* this, PlayState* play) { - u8 newUnk20; + u8 changeLightNextConfig; CsCmdActorCue* cue; if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_567)) { @@ -263,25 +266,25 @@ void func_80966BF4(EnWeatherTag* this, PlayState* play) { case 0: case 1: default: - - newUnk20 = 0; + changeLightNextConfig = 0; break; + case 2: - newUnk20 = 3; + changeLightNextConfig = 3; break; case 3: - newUnk20 = 4; + changeLightNextConfig = 4; break; } Math_SmoothStepToF(&D_801F4E74, 0.0f, 0.2f, 0.02f, 0.001f); - if (play->envCtx.unk_20 != newUnk20) { - play->envCtx.unk_21 = 1; - play->envCtx.unk_20 = newUnk20; - play->envCtx.unk_24 = 100; - play->envCtx.unk_22 = play->envCtx.unk_24; + if (play->envCtx.changeLightNextConfig != changeLightNextConfig) { + play->envCtx.changeLightEnabled = true; + play->envCtx.changeLightNextConfig = changeLightNextConfig; + play->envCtx.changeDuration = 100; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; } } } 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 6431a558b..a17f853df 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -4,6 +4,7 @@ * Description: "Master" instance of grass for unit spawned by Obj_Grass_Unit */ +#include "prevent_bss_reordering.h" #include "z_obj_grass.h" #include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.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 5da69099e..41cf34318 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -5734,7 +5734,7 @@ void func_808354A4(PlayState* play, s32 arg1, s32 arg2) { gSaveContext.respawnFlag = -2; } - gSaveContext.unk_3DBB = 1; + gSaveContext.retainWeatherMode = 1; Scene_SetExitFade(play); } @@ -16454,7 +16454,7 @@ void func_8085269C(Player* this, PlayState* play) { (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) { if (play->msgCtx.ocarinaMode == 0x16) { if (!func_8082DA90(play)) { - if (gSaveContext.save.saveInfo.playerData.deaths == 1) { + if (gSaveContext.save.saveInfo.playerData.threeDayResetCount == 1) { play->nextEntrance = ENTRANCE(CUTSCENE, 1); } else { play->nextEntrance = ENTRANCE(CUTSCENE, 0); diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.h b/src/overlays/gamestates/ovl_file_choose/z_file_choose.h deleted file mode 100644 index f3231ec56..000000000 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef Z64_FILE_CHOOSE_H -#define Z64_FILE_CHOOSE_H - -#include "global.h" - -void FileSelect_Init(GameState* thisx); -void FileSelect_Destroy(GameState* thisx); - -typedef struct FileSelectState { - /* 0x00000 */ GameState state; - /* 0x000A4 */ Vtx* unk_A4; - /* 0x000A8 */ u8* staticSegment; - /* 0x000AC */ u8* parameterSegment; - /* 0x000B0 */ u8* titleSegment; - /* 0x000B8 */ View view; - /* 0x00220 */ SramContext sramCtx; - /* 0x00248 */ SkyboxContext skyboxCtx; - /* 0x00470 */ MessageContext msgCtx; - /* 0x12550 */ Font font; - /* 0x242E0 */ EnvironmentContext envCtx; - /* 0x243E0 */ Vtx* unk_243E0; - /* 0x243E4 */ Vtx* unk_243E4; - /* 0x243E8 */ u8 newf2[2][6]; - /* 0x243F4 */ u8 newf[2][6]; - /* 0x24400 */ UNK_TYPE1 unk_24400[0xC]; - /* 0x2440C */ u16 unk_2440C[2]; - /* 0x24410 */ u16 unk_24410[2]; - /* 0x24414 */ u8 unk_24414[2][8]; // playername - /* 0x24424 */ u8 unk_24424[2][8]; // playername - /* 0x24434 */ s16 healthCapacity[2]; - /* 0x24438 */ u16 unk_24438[2]; - /* 0x2443C */ s16 health[2]; - /* 0x24440 */ u16 unk_24440[2]; - /* 0x24444 */ u32 unk_24444[2]; - /* 0x2444C */ u32 unk_2444C[2]; - /* 0x24454 */ s8 unk_24454[2]; - /* 0x24456 */ u8 unk_24456[2]; - /* 0x24458 */ u16 unk_24458[2]; - /* 0x2445C */ u16 unk_2445C[2]; - /* 0x24460 */ s16 unk_24460[2]; - /* 0x24464 */ s16 unk_24464[2]; - /* 0x24468 */ u8 unk_24468[2]; - /* 0x2446A */ u8 unk_2446A[2]; - /* 0x2446C */ s16 rupees[2]; - /* 0x24470 */ s16 unk_24470[2]; - /* 0x24474 */ s8 unk_24474[2]; - /* 0x24476 */ s8 unk_24476[2]; - /* 0x24478 */ s8 maskCount[2]; - /* 0x2447A */ s8 unk_2447A[2]; - /* 0x2447C */ s8 heartPieceCount[2]; - /* 0x2447E */ s8 unk_2447E[2]; - /* 0x24480 */ s16 unk_24480; - /* 0x24482 */ s16 unk_24482; - /* 0x24484 */ s16 unk_24484; - /* 0x24486 */ s16 unk_24486; - /* 0x24488 */ s16 unk_24488; - /* 0x2448A */ s16 unk_2448A; - /* 0x2448C */ s16 unk_2448C; - /* 0x2448E */ s16 unk_2448E; - /* 0x24490 */ s16 unk_24490; - /* 0x24492 */ s16 unk_24492[3]; - /* 0x24498 */ s16 unk_24498; - /* 0x2449A */ s16 unk_2449A[6]; - /* 0x244A6 */ s16 fileNum; - /* 0x244A8 */ s16 unk_244A8; - /* 0x244AA */ s16 unk_244AA; - /* 0x244AC */ s16 unk_244AC; - /* 0x244AE */ s16 unk_244AE; - /* 0x244B0 */ s16 unk_244B0[3]; - /* 0x244B6 */ s16 unk_244B6[2]; - /* 0x244BA */ s16 unk_244BA; - /* 0x244BC */ s16 unk_244BC[3]; - /* 0x244C2 */ s16 unk_244C2[3]; - /* 0x244C8 */ s16 unk_244C8[3]; - /* 0x244CE */ s16 unk_244CE[3]; - /* 0x244D4 */ s16 unk_244D4[3]; - /* 0x244DA */ s16 unk_244DA[4]; - /* 0x244E2 */ s16 unk_244E2; - /* 0x244E4 */ s16 unk_244E4; - /* 0x244E6 */ s16 unk_244E6; - /* 0x244E8 */ s16 unk_244E8; - /* 0x244EA */ s16 unk_244EA[4]; - /* 0x244F2 */ s16 unk_244F2; - /* 0x244F4 */ s16 unk_244F4; - /* 0x244F6 */ s16 unk_244F6[2]; - /* 0x244FA */ s16 unk_244FA; - /* 0x244FC */ s16 unk_244FC; - /* 0x244FE */ s16 unk_244FE; - /* 0x24500 */ s16 unk_24500; - /* 0x24502 */ s16 unk_24502; - /* 0x24504 */ s16 unk_24504; - /* 0x24506 */ s16 unk_24506; - /* 0x24508 */ s16 unk_24508; - /* 0x2450A */ s16 unk_2450A; - /* 0x2450C */ f32 unk_2450C; - /* 0x24510 */ s16 unk_24510; - /* 0x24512 */ s16 unk_24512; - /* 0x24514 */ s16 unk_24514; - /* 0x24516 */ s16 unk_24516; - /* 0x24518 */ s16 unk_24518; - /* 0x2451A */ s16 unk_2451A; - /* 0x2451C */ s16 unk_2451C; - /* 0x2451E */ s16 unk_2451E[5]; - /* 0x24528 */ s16 unk_24528; - /* 0x2452A */ s16 unk_2452A; - /* 0x2452C */ s16 unk_2452C[4]; - /* 0x24534 */ s16 unk_24534[4]; - /* 0x2453C */ s16 unk_2453C[4]; - /* 0x24544 */ s16 unk_24544[4]; - /* 0x2454C */ s16 unk_2454C; - /* 0x2454E */ s16 unk_2454E; - /* 0x24550 */ s16 unk_24550; -} FileSelectState; // size = 0x24558 - -#endif diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c deleted file mode 100644 index 2e0e9a0d4..000000000 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * File: z_file_choose_80807940.c - * Overlay: ovl_file_choose - * Description: - */ - -#include "z_file_choose.h" -#include "z64rumble.h" - -extern UNK_TYPE D_01002800; -extern UNK_TYPE D_01007980; -extern UNK_TYPE D_0102A6B0; -extern UNK_TYPE D_0102B170; -extern UNK_TYPE D_010310F0; -extern UNK_TYPE D_010311F0; - -// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file -extern GfxMasterList D_0E000000; - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807940.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807A78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807C58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808214.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808D30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808F1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80809DF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80809EA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A3CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A418.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A4A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A6BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A708.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BBFC.s") 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 da9144e7c..0cc43ad50 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 @@ -4,96 +4,2545 @@ * Description: */ -#include "z_file_choose.h" +#include "z_file_select.h" +#include "overlays/gamestates/ovl_opening/z_opening.h" #include "z64rumble.h" +#include "z64save.h" #include "z64shrink_window.h" #include "z64view.h" +#include "interface/parameter_static/parameter_static.h" +#include "misc/title_static/title_static.h" -extern UNK_TYPE D_01002800; -extern UNK_TYPE D_01007980; -extern UNK_TYPE D_0102A6B0; -extern UNK_TYPE D_0102B170; -extern UNK_TYPE D_010310F0; -extern UNK_TYPE D_010311F0; +s32 D_808144F10 = 100; +f32 D_808144F14 = 8.0f; +f32 D_808144F18 = 100.0f; +s32 D_808144F1C = 0; -// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file -extern GfxMasterList D_0E000000; +static Gfx sScreenFillSetupDL[] = { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_1PRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPEndDisplayList(), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BC20.s") +s16 sFileInfoBoxPartWidths[] = { + 36, 36, 36, 36, 24, 28, 28, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_nop8080bc44.s") +s16 sWindowContentColors[] = { 100, 150, 255 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_nop8080BC4C.s") +s16 sFileSelectSkyboxRotation = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BC58.s") +s16 sWalletFirstDigit[] = { + 1, // tens (Default Wallet) + 0, // hundreds (Adult Wallet) + 0, // hundreds (Giant Wallet) +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BDAC.s") +void FileSelect_IncrementConfigMode(FileSelectState* this) { + this->configMode++; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_RenderView.s") +void FileSelect_Noop1(void) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BE60.s") +void FileSelect_Noop2(FileSelectState* this) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C040.s") +void FileSelect_InitModeUpdate(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C228.s") + if (this->configMode == CM_FADE_IN_START) { + if (gSaveContext.options.optionId != 0xA51D) { // Magic number? + this->configMode++; + } else { + this->menuMode = FS_MENU_MODE_CONFIG; + this->configMode = CM_FADE_IN_START; + this->titleLabel = FS_TITLE_SELECT_FILE; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C29C.s") + if (this->configMode == CM_FADE_IN_END) { + this->screenFillAlpha -= 40; + if (this->screenFillAlpha <= 0) { + this->screenFillAlpha = 0; + this->configMode++; // CM_MAIN_MENU + } + } else if (this->configMode == CM_MAIN_MENU) { + FileSelect_IncrementConfigMode(this); // CM_SETUP_COPY_SOURCE + } else { + this->screenFillAlpha += 40; + if (this->screenFillAlpha >= 255) { + this->screenFillAlpha = 255; + this->menuMode = FS_MENU_MODE_CONFIG; + this->configMode = CM_FADE_IN_START; + this->titleLabel = FS_TITLE_SELECT_FILE; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C324.s") +void FileSelect_InitModeDraw(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C3A8.s") + Gfx_SetupDL39_Opa(this->state.gfxCtx); + FileSelect_Noop2(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D164.s") +void FileSelect_SetView(FileSelectState* this, f32 eyeX, f32 eyeY, f32 eyeZ) { + Vec3f eye; + Vec3f lookAt; + Vec3f up; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D170.s") + eye.x = eyeX; + eye.y = eyeY; + eye.z = eyeZ; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D1BC.s") + lookAt.x = lookAt.y = lookAt.z = 0.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D220.s") + up.x = up.z = 0.0f; + up.y = 1.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D284.s") + View_LookAt(&this->view, &eye, &lookAt, &up); + View_Apply(&this->view, VIEW_ALL | VIEW_FORCE_VIEWING | VIEW_FORCE_VIEWPORT | VIEW_FORCE_PROJECTION_PERSPECTIVE); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D2EC.s") +Gfx* FileSelect_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 width, s16 height, s16 point) { + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 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); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D3D0.s") + gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D40C.s") + return gfx; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D6D4.s") +/** + * Fade in the menu window and title label. + * If a file is occupied fade in the name, name box, and connector. + * Fade in the copy erase and options button according to the window alpha. + */ +void FileSelect_FadeInMenuElements(FileSelectState* this) { + SramContext* sramCtx = &this->sramCtx; + s16 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080F25C.s") + this->titleAlpha[FS_TITLE_CUR] += 20; + this->windowAlpha += 16; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808108DC.s") + for (i = 0; i < 3; i++) { + this->fileButtonAlpha[i] = this->windowAlpha; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80811CB8.s") + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->windowAlpha; + this->connectorAlpha[i] += 20; + if (this->connectorAlpha[i] >= 255) { + this->connectorAlpha[i] = 255; + } + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->windowAlpha; + this->connectorAlpha[i] += 20; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812460.s") + if (this->connectorAlpha[i] >= 255) { + this->connectorAlpha[i] = 255; + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812668.s") + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = this->windowAlpha; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812760.s") +/** + * Converts a numerical value to hundreds-tens-ones digits + */ +void FileSelect_SplitNumber(u16 value, u16* hundreds, u16* tens, u16* ones) { + *hundreds = 0; + *tens = 0; + *ones = value; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812840.s") + do { + if ((*ones - 100) < 0) { + break; + } + (*hundreds)++; + *ones -= 100; + } while (true); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812980.s") + do { + if ((*ones - 10) < 0) { + break; + } + (*tens)++; + *ones -= 10; + } while (true); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812A6C.s") +// Start of Config Mode Update Functions -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812D44.s") +/** + * Reduce the alpha of the black screen fill to create a fade in effect. + * Additionally, slide the window from the right to the center of the screen. + * Update function for `CM_FADE_IN_START` + */ +void FileSelect_StartFadeIn(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812D94.s") + FileSelect_FadeInMenuElements(this); + this->screenFillAlpha -= 40; + this->windowPosX -= 20; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812E94.s") + if (this->windowPosX <= -94) { + this->windowPosX = -94; + this->configMode = CM_FADE_IN_END; + this->screenFillAlpha = 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812ED0.s") +/** + * Finish fading in the remaining menu elements. + * Fade in the controls text at the bottom of the screen. + * Update function for `CM_FADE_IN_END` + */ +void FileSelect_FinishFadeIn(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_UpdateAndDrawSkybox.s") + this->controlsAlpha += 20; + FileSelect_FadeInMenuElements(this); -void FileSelect_Main(GameState* thisx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Main.s") + if (this->titleAlpha[FS_TITLE_CUR] >= 255) { + this->titleAlpha[FS_TITLE_CUR] = 255; + this->controlsAlpha = 255; + this->windowAlpha = 200; + this->configMode = CM_MAIN_MENU; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80813908.s") +u8 sEmptyName[] = { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Destroy.s") +/** + * Update the cursor and wait for the player to select a button to change menus accordingly. + * If an empty file is selected, enter the name entry config mode. + * If an occupied file is selected, enter the `Select` menu mode. + * If copy, erase, or options is selected, set config mode accordingly. + * Lastly, set any warning labels if appropriate. + * Update function for `CM_MAIN_MENU` + */ +void FileSelect_UpdateMainMenu(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Init.s") + if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_A)) { + if (this->buttonIndex <= FS_BTN_MAIN_FILE_3) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->configMode = CM_ROTATE_TO_NAME_ENTRY; + this->kbdButton = FS_KBD_BTN_NONE; + this->charPage = FS_CHAR_PAGE_HIRA; + if (gSaveContext.options.language != 0) { + this->charPage = FS_CHAR_PAGE_ENG; + } + this->kbdX = 0; + this->kbdY = 0; + this->charIndex = 0; + this->charBgAlpha = 0; + this->newFileNameCharCount = 0; + this->nameEntryBoxPosX = 120; + this->nameEntryBoxAlpha = 0; + Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName)); + } else { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->actionTimer = 4; + this->selectMode = SM_FADE_MAIN_TO_SELECT; + this->selectedFileIndex = this->buttonIndex; + this->menuMode = FS_MENU_MODE_SELECT; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->configMode = CM_ROTATE_TO_NAME_ENTRY; + this->kbdButton = FS_KBD_BTN_NONE; + this->charPage = FS_CHAR_PAGE_HIRA; + if (gSaveContext.options.language != 0) { + this->charPage = FS_CHAR_PAGE_ENG; + } + this->kbdX = 0; + this->kbdY = 0; + this->charIndex = 0; + this->charBgAlpha = 0; + this->newFileNameCharCount = 0; + this->nameEntryBoxPosX = 120; + this->nameEntryBoxAlpha = 0; + Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName)); + } else { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->actionTimer = 4; + this->selectMode = SM_FADE_MAIN_TO_SELECT; + this->selectedFileIndex = this->buttonIndex; + this->menuMode = FS_MENU_MODE_SELECT; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } else if (this->warningLabel == FS_WARNING_NONE) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->prevConfigMode = this->configMode; + + if (this->buttonIndex == FS_BTN_MAIN_COPY) { + this->configMode = CM_SETUP_COPY_SOURCE; + this->nextTitleLabel = FS_TITLE_COPY_FROM; + } else if (this->buttonIndex == FS_BTN_MAIN_ERASE) { + this->configMode = CM_SETUP_ERASE_SELECT; + this->nextTitleLabel = FS_TITLE_ERASE_FILE; + } else { + this->configMode = CM_MAIN_TO_OPTIONS; + this->kbdButton = FS_KBD_BTN_HIRA; + this->kbdX = 0; + this->kbdY = 0; + this->charBgAlpha = 0; + this->newFileNameCharCount = 0; + this->nameEntryBoxPosX = 120; + } + this->actionTimer = 4; + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); + } else { + if (ABS_ALT(this->stickAdjY) > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + if (this->stickAdjY > 30) { + this->buttonIndex--; + if (this->buttonIndex == FS_BTN_MAIN_FILE_3) { + this->buttonIndex = FS_BTN_MAIN_FILE_2; + } + if (this->buttonIndex < FS_BTN_MAIN_FILE_1) { + this->buttonIndex = FS_BTN_MAIN_OPTIONS; + } + } else { + this->buttonIndex++; + if (this->buttonIndex == FS_BTN_MAIN_FILE_3) { + this->buttonIndex = FS_BTN_MAIN_COPY; + } + if (this->buttonIndex > FS_BTN_MAIN_OPTIONS) { + this->buttonIndex = FS_BTN_MAIN_FILE_1; + } + } + } + + if (this->buttonIndex == FS_BTN_MAIN_COPY) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && !NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) && + !NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_COPY; + this->emptyFileTextAlpha = 255; + } else if (NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) && + NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_EMPTY_FILES; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else { + if (!SLOT_OCCUPIED(this, 0) && !SLOT_OCCUPIED(this, 1) && !SLOT_OCCUPIED(this, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_COPY; + this->emptyFileTextAlpha = 255; + } else if (SLOT_OCCUPIED(this, 0) && SLOT_OCCUPIED(this, 1) && SLOT_OCCUPIED(this, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_EMPTY_FILES; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } else if (this->buttonIndex == FS_BTN_MAIN_ERASE) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && !NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) && + !NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_ERASE; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else { + if (!SLOT_OCCUPIED(this, 0) && !SLOT_OCCUPIED(this, 1) && !SLOT_OCCUPIED(this, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_ERASE; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } else { + this->warningLabel = FS_WARNING_NONE; + } + } +} + +/** + * Update function for `CM_UNUSED_31` + */ +void FileSelect_UnusedCM31(GameState* thisx) { +} + +/** + * Delay the next config mode from running until `D_80814564` reaches 254. + * Because the timer increments by 2, the delay is 127 frames (assuming the value was not changed by reg editor). + * Unused in the final game, was possibly used for debugging. + * Update function for `CM_UNUSED_DELAY` + */ +void FileSelect_UnusedCMDelay(GameState* thisx) { + static s16 D_80814564 = 0; + FileSelectState* this = (FileSelectState*)thisx; + + D_80814564 += 2; + + if (D_80814564 == 254) { + this->configMode = this->nextConfigMode; + D_80814564 = 0; + } +} + +/** + * Rotate the window from the main menu to the name entry menu. + * Update function for `CM_ROTATE_TO_NAME_ENTRY` + */ +void FileSelect_RotateToNameEntry(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->windowRot += 50.0f; + + if (this->windowRot >= 314.0f) { + this->windowRot = 314.0f; + this->configMode = CM_START_NAME_ENTRY; + } +} + +/** + * Rotate the window from the main menu to the options menu. + * Update function for `CM_MAIN_TO_OPTIONS` + */ +void FileSelect_RotateToOptions(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->windowRot += 50.0f; + + if (this->windowRot >= 314.0f) { + this->windowRot = 314.0f; + this->configMode = CM_START_OPTIONS; + } +} + +/** + * Rotate the window from the options menu to the main menu. + * Update function for `CM_NAME_ENTRY_TO_MAIN` and `CM_OPTIONS_TO_MAIN` + */ +void FileSelect_RotateToMain(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->windowRot += 50.0f; + + if (this->windowRot >= 628.0f) { + this->windowRot = 0.0f; + this->configMode = CM_MAIN_MENU; + } +} + +void (*sConfigModeUpdateFuncs[])(GameState*) = { + // Main Menu + FileSelect_StartFadeIn, // CM_FADE_IN_START + FileSelect_FinishFadeIn, // CM_FADE_IN_END + FileSelect_UpdateMainMenu, // CM_MAIN_MENU + // Copy File + FileSelect_SetupCopySource, // CM_SETUP_COPY_SOURCE + FileSelect_SelectCopySource, // CM_SELECT_COPY_SOURCE + FileSelect_SetupCopyDest1, // CM_SETUP_COPY_DEST_1 + FileSelect_SetupCopyDest2, // CM_SETUP_COPY_DEST_2 + FileSelect_SelectCopyDest, // CM_SELECT_COPY_DEST + FileSelect_ExitToCopySource1, // CM_EXIT_TO_COPY_SOURCE_1 + FileSelect_ExitToCopySource2, // CM_EXIT_TO_COPY_SOURCE_2 + FileSelect_SetupCopyConfirm1, // CM_SETUP_COPY_CONFIRM_1 + FileSelect_SetupCopyConfirm2, // CM_SETUP_COPY_CONFIRM_2 + FileSelect_CopyConfirm, // CM_COPY_CONFIRM + FileSelect_CopyWaitForFlashSave, // CM_COPY_WAIT_FOR_FLASH_SAVE + FileSelect_ReturnToCopyDest, // CM_RETURN_TO_COPY_DEST + FileSelect_CopyAnim1, // CM_COPY_ANIM_1 + FileSelect_CopyAnim2, // CM_COPY_ANIM_2 + FileSelect_CopyAnim3, // CM_COPY_ANIM_3 + FileSelect_CopyAnim4, // CM_COPY_ANIM_4 + FileSelect_CopyAnim5, // CM_COPY_ANIM_5 + FileSelect_ExitCopyToMain, // CM_COPY_RETURN_MAIN + // Erase File + FileSelect_SetupEraseSelect, // CM_SETUP_ERASE_SELECT + FileSelect_EraseSelect, // CM_ERASE_SELECT + FileSelect_SetupEraseConfirm1, // CM_SETUP_ERASE_CONFIRM_1 + FileSelect_SetupEraseConfirm2, // CM_SETUP_ERASE_CONFIRM_2 + FileSelect_EraseConfirm, // CM_ERASE_CONFIRM + FileSelect_ExitToEraseSelect1, // CM_EXIT_TO_ERASE_SELECT_1 + FileSelect_ExitToEraseSelect2, // CM_EXIT_TO_ERASE_SELECT_2 + FileSelect_EraseAnim1, // CM_ERASE_ANIM_1 + FileSelect_EraseWaitForFlashSave, // CM_ERASE_WAIT_FOR_FLASH_SAVE + FileSelect_EraseAnim2, // CM_ERASE_ANIM_2 + FileSelect_EraseAnim3, // CM_ERASE_ANIM_3 + FileSelect_ExitEraseToMain, // CM_EXIT_ERASE_TO_MAIN + FileSelect_UnusedCM31, // CM_UNUSED_31 + // New File Name Entry + FileSelect_RotateToNameEntry, // CM_ROTATE_TO_NAME_ENTRY + FileSelect_StartNameEntry, // CM_START_NAME_ENTRY + FileSelect_UpdateKeyboardCursor, // CM_NAME_ENTRY + FileSelect_NameEntryWaitForFlashSave, // CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE + FileSelect_RotateToMain, // CM_NAME_ENTRY_TO_MAIN + // Options + FileSelect_RotateToOptions, // CM_MAIN_TO_OPTIONS + FileSelect_StartOptions, // CM_START_OPTIONS + FileSelect_UpdateOptionsMenu, // CM_OPTIONS_MENU + FileSelect_OptionsWaitForFlashSave, // CM_OPTIONS_WAIT_FOR_FLASH_SAVE + FileSelect_RotateToMain, // CM_OPTIONS_TO_MAIN + // Possible Debug + FileSelect_UnusedCMDelay, // CM_UNUSED_DELAY +}; + +s16 sCursorAlphaTargets[] = { 70, 200 }; + +/** + * Updates the alpha of the cursor to make it pulsate. + */ +void FileSelect_PulsateCursor(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 alphaStep = + ABS_ALT(this->highlightColor[3] - sCursorAlphaTargets[this->highlightPulseDir]) / this->highlightTimer; + + if (this->highlightColor[3] >= sCursorAlphaTargets[this->highlightPulseDir]) { + this->highlightColor[3] -= alphaStep; + } else { + this->highlightColor[3] += alphaStep; + } + + this->highlightTimer--; + + if (this->highlightTimer == 0) { + this->highlightColor[3] = sCursorAlphaTargets[this->highlightPulseDir]; + this->highlightTimer = 20; + this->highlightPulseDir ^= 1; + } +} + +void FileSelect_ConfigModeUpdate(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + sConfigModeUpdateFuncs[this->configMode](&this->state); +} + +void FileSelect_SetWindowVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s16 j; + s16 x; + s32 tmp; + s32 tmp2; + s32 tmp3; + + this->windowVtx = GRAPH_ALLOC(this->state.gfxCtx, 80 * sizeof(Vtx)); + tmp = this->windowPosX - 90; + + for (x = 0, i = 0; i < 4; i++) { + tmp += 0x40; + tmp2 = (i == 3) ? 0x30 : 0x40; + + for (j = 0, tmp3 = 0x50; j < 5; j++, x += 4, tmp3 -= 0x20) { + this->windowVtx[x].v.ob[0] = this->windowVtx[x + 2].v.ob[0] = tmp; + + this->windowVtx[x + 1].v.ob[0] = this->windowVtx[x + 3].v.ob[0] = tmp2 + tmp; + + this->windowVtx[x].v.ob[1] = this->windowVtx[x + 1].v.ob[1] = tmp3; + + this->windowVtx[x + 2].v.ob[1] = this->windowVtx[x + 3].v.ob[1] = tmp3 - 0x20; + + this->windowVtx[x].v.ob[2] = this->windowVtx[x + 1].v.ob[2] = this->windowVtx[x + 2].v.ob[2] = + this->windowVtx[x + 3].v.ob[2] = 0; + + this->windowVtx[x].v.flag = this->windowVtx[x + 1].v.flag = this->windowVtx[x + 2].v.flag = + this->windowVtx[x + 3].v.flag = 0; + + this->windowVtx[x].v.tc[0] = this->windowVtx[x].v.tc[1] = this->windowVtx[x + 1].v.tc[1] = + this->windowVtx[x + 2].v.tc[0] = 0; + + this->windowVtx[x + 1].v.tc[0] = this->windowVtx[x + 3].v.tc[0] = tmp2 << 5; + + this->windowVtx[x + 2].v.tc[1] = this->windowVtx[x + 3].v.tc[1] = 32 << 5; + + this->windowVtx[x].v.cn[0] = this->windowVtx[x + 2].v.cn[0] = this->windowVtx[x].v.cn[1] = + this->windowVtx[x + 2].v.cn[1] = this->windowVtx[x].v.cn[2] = this->windowVtx[x + 2].v.cn[2] = + this->windowVtx[x + 1].v.cn[0] = this->windowVtx[x + 3].v.cn[0] = this->windowVtx[x + 1].v.cn[1] = + this->windowVtx[x + 3].v.cn[1] = this->windowVtx[x + 1].v.cn[2] = + this->windowVtx[x + 3].v.cn[2] = this->windowVtx[x].v.cn[3] = + this->windowVtx[x + 2].v.cn[3] = this->windowVtx[x + 1].v.cn[3] = + this->windowVtx[x + 3].v.cn[3] = 255; + } + } +} + +s16 D_80814620[] = { 8, 8, 8, 0 }; +s16 D_80814628[] = { 12, 12, 12, 0 }; +s16 D_80814630[] = { 12, 12, 12, 0 }; +s16 D_80814638[] = { + 88, 104, 120, 940, 944, 948, +}; +s16 D_80814644[] = { 88, 104, 120, 944 }; +s16 D_8081464C[] = { 940, 944 }; +s16 D_80814650[] = { 940, 944 }; + +/* + * fileSelect->windowContentVtx[0] -> Title Label (4) + * + * fileSelect->windowContentVtx[4] -> File 1 InfoBox (28) + * fileSelect->windowContentVtx[32] -> File 2 InfoBox (28) + * fileSelect->windowContentVtx[60] -> File 3 InfoBox (28) + * + * ** FILE 1 ** + * + * fileSelect->windowContentVtx[88] -> File Button + * fileSelect->windowContentVtx[92] -> File Name Box + * fileSelect->windowContentVtx[96] -> Connectors + * fileSelect->windowContentVtx[100] -> Blank Button (Owl Save) + * + * ** FILE 2 ** + * + * fileSelect->windowContentVtx[104] -> Repeat of File 1 above + * + * ** FILE 3 ** + * + * fileSelect->windowContentVtx[120] -> Repeat of File 1 above + * + * ** FILE 1 Info ** + * + * fileSelect->windowContentVtx[136] -> File Name (32) + * fileSelect->windowContentVtx[168] -> File Name Shadow (32) + * fileSelect->windowContentVtx[200] -> Rupee Digits (12) + * fileSelect->windowContentVtx[212] -> Rupee Digits Shadow (12) + * fileSelect->windowContentVtx[224] -> Mask Count (8) + * fileSelect->windowContentVtx[232] -> Mask Count Shadow (8) + * fileSelect->windowContentVtx[240] -> Hearts (80) + * fileSelect->windowContentVtx[320] -> Remains (16) + * fileSelect->windowContentVtx[336] -> Rupee Icon (4) + * fileSelect->windowContentVtx[340] -> Heart Piece Count (4) + * fileSelect->windowContentVtx[344] -> Mask Text (8) + * fileSelect->windowContentVtx[352] -> Owl Save Icon (4) + * fileSelect->windowContentVtx[356] -> Day Text (8) + * fileSelect->windowContentVtx[364] -> Time Digits (20) + * fileSelect->windowContentVtx[384] -> Time Digits Shadow (20) + * + * ** FILE 2 Info ** + * + * fileSelect->windowContentVtx[404] -> Repeat of File 1 above + * + * ** FILE 3 Info ** + * + * fileSelect->windowContentVtx[672] -> Repeat of File 1 above + * + * fileSelect->windowContentVtx[940] -> Action buttons (copy/erase/yes/quit) + * fileSelect->windowContentVtx[944] -> Action buttons (copy/erase/yes/quit) + * fileSelect->windowContentVtx[948] -> Option Button + * fileSelect->windowContentVtx[952] -> Highlight over currently selected button + * fileSelect->windowContentVtx[956] -> Warning labels + */ + +#ifdef NON_MATCHING +// regalloc at the beginning is fixed by removing FAKE: labelled code +void FileSelect_SetWindowContentVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + u16 vtxId; + s16 j; + s16 index; + s16 spAC; + s16 i; // a3 + u16 spA4[3]; + u16* ptr; + s32 posY; // sp9C + s32 relPosY; // sp98 + s32 tempPosY; + s32 posX; // s1 + s32 temp_t5; + + this->windowContentVtx = GRAPH_ALLOC(this->state.gfxCtx, 960 * sizeof(Vtx)); + + // Initialize all windowContentVtx + for (vtxId = 0; vtxId < 960; vtxId += 4) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = 0x12C; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 16; + + // y-coord (top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = 0; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 16; + + // z-coordinate + this->windowContentVtx[vtxId + 0].v.ob[2] = this->windowContentVtx[vtxId + 1].v.ob[2] = + this->windowContentVtx[vtxId + 2].v.ob[2] = this->windowContentVtx[vtxId + 3].v.ob[2] = 0; + + //! FAKE: + if (index && index && index) {} + + // flag + this->windowContentVtx[vtxId + 0].v.flag = this->windowContentVtx[vtxId + 1].v.flag = + this->windowContentVtx[vtxId + 2].v.flag = this->windowContentVtx[vtxId + 3].v.flag = 0; + + // texture coordinates + this->windowContentVtx[vtxId + 0].v.tc[0] = this->windowContentVtx[vtxId + 0].v.tc[1] = + this->windowContentVtx[vtxId + 1].v.tc[1] = this->windowContentVtx[vtxId + 2].v.tc[0] = 0; + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 2].v.tc[1] = + this->windowContentVtx[vtxId + 3].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + // alpha + this->windowContentVtx[vtxId + 0].v.cn[0] = this->windowContentVtx[vtxId + 1].v.cn[0] = + this->windowContentVtx[vtxId + 2].v.cn[0] = this->windowContentVtx[vtxId + 3].v.cn[0] = + this->windowContentVtx[vtxId + 0].v.cn[1] = this->windowContentVtx[vtxId + 1].v.cn[1] = + this->windowContentVtx[vtxId + 2].v.cn[1] = this->windowContentVtx[vtxId + 3].v.cn[1] = + this->windowContentVtx[vtxId + 0].v.cn[2] = this->windowContentVtx[vtxId + 1].v.cn[2] = + this->windowContentVtx[vtxId + 2].v.cn[2] = this->windowContentVtx[vtxId + 3].v.cn[2] = + this->windowContentVtx[vtxId + 0].v.cn[3] = this->windowContentVtx[vtxId + 1].v.cn[3] = + this->windowContentVtx[vtxId + 2].v.cn[3] = + this->windowContentVtx[vtxId + 3].v.cn[3] = 255; + } + + /** Title Label **/ + + // x-coord (left) + this->windowContentVtx[0].v.ob[0] = this->windowContentVtx[2].v.ob[0] = this->windowPosX; + // x-coord (right) + this->windowContentVtx[1].v.ob[0] = this->windowContentVtx[3].v.ob[0] = this->windowContentVtx[0].v.ob[0] + 0x80; + // y-coord (top) + this->windowContentVtx[0].v.ob[1] = this->windowContentVtx[1].v.ob[1] = 0x48; + // y-coord (bottom) + this->windowContentVtx[2].v.ob[1] = this->windowContentVtx[3].v.ob[1] = this->windowContentVtx[0].v.ob[1] - 0x10; + // texture coordinates + this->windowContentVtx[1].v.tc[0] = this->windowContentVtx[3].v.tc[0] = 0x1000; + + /** File InfoBox **/ + + // Loop through 3 files + for (vtxId = 4, i = 0; i < 3; i++) { + posX = this->windowPosX - 6; + + // Loop through 7 textures + for (j = 0; j < 7; j++, vtxId += 4) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + sFileInfoBoxPartWidths[j]; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->fileNamesY[i] + 0x2C; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x38; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = + sFileInfoBoxPartWidths[j] << 5; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x700; + + // Update X position + posX += sFileInfoBoxPartWidths[j]; + } + } + + // File Buttons + + posX = this->windowPosX - 6; + posY = 44; + + // Loop through 3 files + for (j = 0; j < 3; j++, vtxId += 16, posY -= 0x10) { + + /* File Button */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + + /* File Name Box */ + + // x-coord (left) + this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = posX + 0x40; + // x-coord (right) + this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] = + this->windowContentVtx[vtxId + 4].v.ob[0] + 0x6C; + + // y-coord(top) + this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] = + this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0xD80; + + /* Connectors */ + + // x-coord (left) + this->windowContentVtx[vtxId + 8].v.ob[0] = this->windowContentVtx[vtxId + 10].v.ob[0] = posX + 0x34; + // x-coord (right) + this->windowContentVtx[vtxId + 9].v.ob[0] = this->windowContentVtx[vtxId + 11].v.ob[0] = + this->windowContentVtx[vtxId + 8].v.ob[0] + 0x18; + + // y-coord(top) + this->windowContentVtx[vtxId + 8].v.ob[1] = this->windowContentVtx[vtxId + 9].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 10].v.ob[1] = this->windowContentVtx[vtxId + 11].v.ob[1] = + this->windowContentVtx[vtxId + 8].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 9].v.tc[0] = this->windowContentVtx[vtxId + 11].v.tc[0] = 0x300; + + /* Blank Button (Owl Save) */ + + // x-coord (left) + this->windowContentVtx[vtxId + 12].v.ob[0] = this->windowContentVtx[vtxId + 14].v.ob[0] = posX + 0xA9; + // x-coord (right) + this->windowContentVtx[vtxId + 13].v.ob[0] = this->windowContentVtx[vtxId + 15].v.ob[0] = + this->windowContentVtx[vtxId + 12].v.ob[0] + 0x34; + + // y-coord(top) + this->windowContentVtx[vtxId + 12].v.ob[1] = this->windowContentVtx[vtxId + 13].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 14].v.ob[1] = this->windowContentVtx[vtxId + 15].v.ob[1] = + this->windowContentVtx[vtxId + 12].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 13].v.tc[0] = this->windowContentVtx[vtxId + 15].v.tc[0] = 0x680; + } + + posY = 44; + + // Loop through 3 files + for (j = 0; j < 3; j++, posY -= 16) { + if (!gSaveContext.flashSaveAvailable) { + // Should skip vtxId + // vtxId += 268; + continue; + } + + // Account for owl-save offset + + spAC = j; + if (this->isOwlSave[j + 2]) { + spAC = j + 2; + } + + /* File name */ + + posX = this->windowPosX - 6; + + if ((this->configMode == 0x10) && (j == this->copyDestFileIndex)) { + relPosY = this->fileNamesY[j] + 0x2C; + } else if (((this->configMode == 0x11) || (this->configMode == 0x12)) && (j == this->copyDestFileIndex)) { + relPosY = this->buttonYOffsets[j] + posY; + } else { + relPosY = posY + this->buttonYOffsets[j] + this->fileNamesY[j]; + } + + tempPosY = relPosY - 2; + + // Loop through 8 characters of file name + for (i = 0; i < 8; i++, vtxId += 4) { + + index = this->fileNames[j][i]; + + /* File Name */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = + D_80814280[index] + posX + 0x4E; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0xB; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC; + + /* File Name Shadow */ + + // x-coord (left) + this->windowContentVtx[vtxId + 32].v.ob[0] = this->windowContentVtx[vtxId + 34].v.ob[0] = + D_80814280[index] + posX + 0x4F; + // x-coord (right) + this->windowContentVtx[vtxId + 33].v.ob[0] = this->windowContentVtx[vtxId + 35].v.ob[0] = + this->windowContentVtx[vtxId + 32].v.ob[0] + 0xB; + + // y-coord(top) + this->windowContentVtx[vtxId + 32].v.ob[1] = this->windowContentVtx[vtxId + 33].v.ob[1] = tempPosY - 1; + // y-coord (bottom) + this->windowContentVtx[vtxId + 34].v.ob[1] = this->windowContentVtx[vtxId + 35].v.ob[1] = + this->windowContentVtx[vtxId + 32].v.ob[1] - 0xC; + + // Update X position + posX += 10; + } + // Account for the shadow + vtxId += 32; + + /* Rupee Digits */ + + posX = this->windowPosX + 14; + tempPosY = relPosY - 0x18; + + FileSelect_SplitNumber(this->rupees[spAC], &spA4[0], &spA4[1], &spA4[2]); + + index = sWalletFirstDigit[this->walletUpgrades[spAC]]; + + ptr = &spA4[index]; + + for (i = 0; i < 3; i++, vtxId += 4, ptr++) { + + /* Rupee Digits */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = + D_80814280[*ptr] + posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - D_80814630[i]; + + /* Rupee Digits Shadow */ + + // x-coord (left) + this->windowContentVtx[vtxId + 12].v.ob[0] = this->windowContentVtx[vtxId + 14].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 1; + // x-coord (right) + this->windowContentVtx[vtxId + 13].v.ob[0] = this->windowContentVtx[vtxId + 15].v.ob[0] = + this->windowContentVtx[vtxId + 12].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 12].v.ob[1] = this->windowContentVtx[vtxId + 13].v.ob[1] = tempPosY - 1; + // y-coord (bottom) + this->windowContentVtx[vtxId + 14].v.ob[1] = this->windowContentVtx[vtxId + 15].v.ob[1] = + this->windowContentVtx[vtxId + 12].v.ob[1] - D_80814630[i]; + + // Update X position + posX += D_80814620[i]; + } + + // Account for the shadow + vtxId += 12; + + /* Mask Count */ + + posX = this->windowPosX + 42; + tempPosY = relPosY - 0x2A; + + FileSelect_SplitNumber(this->maskCount[spAC], &spA4[0], &spA4[1], &spA4[2]); + + for (i = 1; i < 3; i++, vtxId += 4) { + + /* Mask Count */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = + D_80814280[spA4[i]] + posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - D_80814630[i]; + + /* Mask Count Shadow */ + + // x-coord (left) + this->windowContentVtx[vtxId + 8].v.ob[0] = this->windowContentVtx[vtxId + 10].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 1; + // x-coord (right) + this->windowContentVtx[vtxId + 9].v.ob[0] = this->windowContentVtx[vtxId + 11].v.ob[0] = + this->windowContentVtx[vtxId + 8].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 8].v.ob[1] = this->windowContentVtx[vtxId + 9].v.ob[1] = tempPosY - 1; + // y-coord (bottom) + this->windowContentVtx[vtxId + 10].v.ob[1] = this->windowContentVtx[vtxId + 11].v.ob[1] = + this->windowContentVtx[vtxId + 8].v.ob[1] - D_80814630[i]; + + // Update X position + posX += D_80814620[i]; + } + + // Account for the shadow + vtxId += 8; + + /* Hearts */ + + posX = this->windowPosX + 63; + tempPosY = relPosY - 0x10; + + // Loop through 20 hearts + for (i = 0; i < 20; i++, vtxId += 4, posX += 9) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0xA; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xA; + + // New row of hearts next iteration + if (i == 9) { + posX = this->windowPosX + (63 - 9); + tempPosY -= 8; + } + } + + /* Quest Remains */ + + posX = this->windowPosX + 64; + tempPosY = relPosY - 0x20; + + // Loop through 4 Remains + for (i = 0; i < 4; i++, vtxId += 4, posX += 0x18) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x14; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x14; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 2].v.tc[1] = + this->windowContentVtx[vtxId + 3].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x400; + } + + /* Rupee Icon */ + + // posX = this->windowPosX - 1; + tempPosY = relPosY - 0x15; + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 1; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x10; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x200; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + vtxId += 4; + + /* Heart Piece Count */ + + // posX = this->windowPosX + 0x27; + tempPosY = relPosY - 0x15; + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX + 0x27; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x18; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x300; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + vtxId += 4; + + /* Mask Text */ + + // posX = this->windowPosX - 10; + tempPosY = relPosY - 0x27; + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 10; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 1; + + this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] = + this->windowContentVtx[vtxId + 4].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = tempPosY - 1; + + this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] = + this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0x800; + this->windowContentVtx[vtxId + 6].v.tc[1] = this->windowContentVtx[vtxId + 7].v.tc[1] = 0x200; + + vtxId += 8; + + /* Owl Save Icon */ + + posX = this->windowPosX + 0xA3; + + if ((this->configMode == 0x10) && (j == this->copyDestFileIndex)) { + tempPosY = this->fileNamesY[j] + 0x2C; + } else if (((this->configMode == 0x11) || (this->configMode == 0x12)) && (j == this->copyDestFileIndex)) { + tempPosY = this->buttonYOffsets[j] + posY; + } else { + tempPosY = posY + this->buttonYOffsets[j] + this->fileNamesY[j]; + } + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX + 0xE; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x18; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - 2; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x300; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x180; + + vtxId += 4; + + /* Day Text */ + + for (i = 0; i < 2; i++, vtxId += 4) { + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = 2 + posX + i; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x30; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - i - 0x12; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x18; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x600; + + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x300; + } + + /* Time Digits */ + + posX += 6; + temp_t5 = vtxId; + + for (i = 0; i < 5; i++, vtxId += 4, posX += 8) { + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0xC; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - 0x2A; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC; + + this->windowContentVtx[vtxId + 0x14].v.ob[0] = this->windowContentVtx[vtxId + 0x16].v.ob[0] = posX + 1; + + this->windowContentVtx[vtxId + 0x15].v.ob[0] = this->windowContentVtx[vtxId + 0x17].v.ob[0] = + this->windowContentVtx[vtxId + 0x14].v.ob[0] + 0xC; + + this->windowContentVtx[vtxId + 0x14].v.ob[1] = this->windowContentVtx[vtxId + 0x15].v.ob[1] = + tempPosY - 0x2B; + + this->windowContentVtx[vtxId + 0x16].v.ob[1] = this->windowContentVtx[vtxId + 0x17].v.ob[1] = + this->windowContentVtx[vtxId + 0x14].v.ob[1] - 0xC; + } + + // Adjust the colon to the right + this->windowContentVtx[temp_t5 + 8].v.ob[0] = this->windowContentVtx[temp_t5 + 10].v.ob[0] = + this->windowContentVtx[temp_t5 + 8].v.ob[0] + 3; + + this->windowContentVtx[temp_t5 + 9].v.ob[0] = this->windowContentVtx[temp_t5 + 11].v.ob[0] = + this->windowContentVtx[temp_t5 + 8].v.ob[0] + 0xC; + + this->windowContentVtx[temp_t5 + 0x1C].v.ob[0] = this->windowContentVtx[temp_t5 + 0x1E].v.ob[0] = + this->windowContentVtx[temp_t5 + 8].v.ob[0] + 1; + + this->windowContentVtx[temp_t5 + 0x1D].v.ob[0] = this->windowContentVtx[temp_t5 + 0x1F].v.ob[0] = + this->windowContentVtx[temp_t5 + 0x1C].v.ob[0] + 0xC; + + vtxId += 20; + } + + posX = this->windowPosX - 6; + posY = -0xC; + + for (j = 0; j < 2; j++, vtxId += 4, posY -= 0x10) { + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->buttonYOffsets[j + 3] + posY; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + } + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->buttonYOffsets[5] - 0x34; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + + vtxId += 4; + + if (((this->menuMode == FS_MENU_MODE_CONFIG) && (this->configMode >= 2)) || + ((this->menuMode == FS_MENU_MODE_SELECT) && (this->selectMode == 3))) { + if (this->menuMode == FS_MENU_MODE_CONFIG) { + if ((this->configMode == 4) || (this->configMode == 7) || (this->configMode == 0x16)) { + j = D_80814644[this->buttonIndex]; + } else if ((this->configMode == 0x19) || (this->configMode == 0xC)) { + j = D_8081464C[this->buttonIndex]; + } else { + j = D_80814638[this->buttonIndex]; + } + } else { + j = D_80814650[this->confirmButtonIndex]; + } + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 0xA; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x48; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->windowContentVtx[j].v.ob[1] + 4; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x18; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x900; + + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x300; + } + + this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = this->windowPosX + 0x3A; + + this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] = + this->windowContentVtx[vtxId + 4].v.ob[0] + 0x80; + + this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = + this->windowContentVtx[D_80814638[this->warningButtonIndex]].v.ob[1]; + + this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] = + this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0x1000; +} +#else +void FileSelect_SetWindowContentVtx(GameState* thisx); +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_SetWindowContentVtx.s") +#endif + +u16 D_80814654[] = { + 0x88, + 0x194, + 0x2A0, +}; +TexturePtr sFileSelRemainsTextures[] = { + gFileSelOdolwasRemainsTex, + gFileSelGohtsRemainsTex, + gFileSelGyorgsRemainsTex, + gFileSelTwinmoldsRemainsTex, +}; +TexturePtr sFileSelDayENGTextures[] = { + gFileSelFirstDayENGTex, + gFileSelFirstDayENGTex, + gFileSelSecondDayENGTex, + gFileSelFinalDayENGTex, +}; +TexturePtr sFileSelHeartPieceTextures[] = { + gFileSel0QuarterHeartENGTex, + gFileSel1QuarterHeartENGTex, + gFileSel2QuarterHeartENGTex, + gFileSel3QuarterHeartENGTex, +}; +static TexturePtr sHeartTextures[2][5] = { + { + gHeartEmptyTex, + gHeartQuarterTex, + gHeartHalfTex, + gHeartThreeQuarterTex, + gHeartFullTex, + }, + { + gDefenseHeartEmptyTex, + gDefenseHeartQuarterTex, + gDefenseHeartHalfTex, + gDefenseHeartThreeQuarterTex, + gDefenseHeartFullTex, + }, +}; +u8 sHealthToQuarterHeartCount[] = { + 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, +}; +s16 sFileSelRupeePrimColors[3][3] = { + { 200, 255, 100 }, // Default Wallet + { 170, 170, 255 }, // Adult Wallet + { 255, 105, 105 }, // Giant Wallet +}; +s16 sFileSelRupeeEnvColors[3][3] = { + { 0, 80, 0 }, // Default Wallet + { 10, 10, 80 }, // Adult Wallet + { 40, 10, 0 }, // Giant Wallet +}; +static s16 sHeartPrimColors[2][3] = { + { 255, 70, 50 }, + { 200, 0, 0 }, +}; +static s16 sHeartEnvColors[2][3] = { + { 50, 40, 60 }, + { 255, 255, 255 }, +}; + +void FileSelect_DrawFileInfo(GameState* thisx, s16 fileIndex) { + FileSelectState* this = (FileSelectState*)thisx; + Font* font = &this->font; + s16 j; + s16 vtxOffset; + s32 heartType; + s16 i; + s16 sp20C; + s16 health; + s16 timeDigits[5]; + u16 digits[3]; // rupees and mask count + u8 quarterHeartCount; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + sp20C = fileIndex; + + // draw file name + if (this->nameAlpha[fileIndex] != 0) { + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + (4 * 8)], 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->nameAlpha[fileIndex]); + + for (vtxOffset = 0, i = 0; vtxOffset < (4 * 8); i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, + font->fontBuf + this->fileNames[fileIndex][i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex]], 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->nameAlpha[fileIndex]); + + for (vtxOffset = 0, i = 0; vtxOffset < (4 * 8); i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, + font->fontBuf + this->fileNames[fileIndex][i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + } + + if ((fileIndex == this->selectedFileIndex) || (fileIndex == this->copyDestFileIndex)) { + if (this->isOwlSave[fileIndex + 2]) { + sp20C = fileIndex + 2; + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][0], + sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][1], + sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][2], this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][0], + sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][1], + sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][2], 255); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xC8], 4, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelRupeeTex, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x4C], 12, 0); + + FileSelect_SplitNumber((u16)this->rupees[sp20C], &digits[0], &digits[1], &digits[2]); + + for (vtxOffset = 0, i = sWalletFirstDigit[this->walletUpgrades[sp20C]]; i < 3; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + if (this->rupees[sp20C] == gUpgradeCapacities[4][this->walletUpgrades[sp20C]]) { + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 120, 255, 0, this->fileInfoAlpha[fileIndex]); + } else if (this->rupees[sp20C] != 0) { + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 100, 100, 100, this->fileInfoAlpha[fileIndex]); + } + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x40], 12, 0); + + for (vtxOffset = 0, i = sWalletFirstDigit[this->walletUpgrades[sp20C]]; i < 3; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 0, 0, this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xCC], 4, 0); + + POLY_OPA_DISP = FileSelect_DrawTexQuadIA8( + POLY_OPA_DISP, sFileSelHeartPieceTextures[this->heartPieceCount[sp20C]], 0x18, 0x10, (s16)0); + + if (this->defenseHearts[sp20C] == 0) { + heartType = 0; + } else { + heartType = 1; + } + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, sHeartPrimColors[heartType][0], sHeartPrimColors[heartType][1], + sHeartPrimColors[heartType][2], this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, sHeartEnvColors[heartType][0], sHeartEnvColors[heartType][1], + sHeartEnvColors[heartType][2], 255); + + i = this->healthCapacity[sp20C] / 0x10; + + health = this->health[sp20C]; + if (health <= 0x30) { + health = 0x30; + } + + quarterHeartCount = 4; + for (vtxOffset = 0, j = 0; j < i; j++, vtxOffset += 4) { + if (health < 0x10) { + if (health != 0) { + quarterHeartCount = sHealthToQuarterHeartCount[health]; + health = 0; + } else { + quarterHeartCount = 0; + } + } else { + health -= 0x10; + } + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x68 + vtxOffset], 4, 0); + POLY_OPA_DISP = + FileSelect_DrawTexQuadIA8(POLY_OPA_DISP, sHeartTextures[heartType][quarterHeartCount], 0x10, 0x10, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + + for (vtxOffset = 0, j = 0; j < 4; j++, vtxOffset += 4) { + if (this->questItems[sp20C] & gBitFlags[j]) { + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xB8 + vtxOffset], 4, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sFileSelRemainsTextures[j], 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + } + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xD0], 8, 0); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelMASKSENGTex, G_IM_FMT_I, 64, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x60], 8, 0); + + FileSelect_SplitNumber(this->maskCount[sp20C], &digits[0], &digits[1], &digits[2]); + + for (vtxOffset = 0, i = 1; i < 3; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x58], 8, 0); + + for (vtxOffset = 0, i = 1; i < 3; i++, vtxOffset += 4) { + + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + } + + if (this->isOwlSave[fileIndex + 2]) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->nameAlpha[fileIndex]); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xD8], 4, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelOwlSaveIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 12, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xDC], 8, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, sFileSelDayENGTextures[this->day[sp20C]], G_IM_FMT_I, 48, 24, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + timeDigits[0] = 0; + timeDigits[1] = TIME_TO_MINUTES_F(this->time[sp20C]) / 60.0f; + + while (timeDigits[1] >= 10) { + timeDigits[0]++; + timeDigits[1] -= 10; + } + + timeDigits[3] = 0; + timeDigits[4] = (s32)TIME_TO_MINUTES_F(this->time[sp20C]) % 60; + + while (timeDigits[4] >= 10) { + timeDigits[3]++; + timeDigits[4] -= 10; + } + timeDigits[2] = 0x41; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xF8], 20, 0); + + for (i = 0, vtxOffset = 0; i < 5; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + timeDigits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xE4], 20, 0); + + for (i = 0, vtxOffset = 0; i < 5; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + timeDigits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + } + + gDPPipeSync(POLY_OPA_DISP++); + + CLOSE_DISPS(this->state.gfxCtx); +} + +TexturePtr sFileInfoBoxTextures[] = { + gFileSelFileInfoBox0Tex, gFileSelFileInfoBox1Tex, gFileSelFileInfoBox2Tex, gFileSelFileInfoBox3Tex, + gFileSelFileInfoBox4Tex, gFileSelFileExtraInfoBox0Tex, gFileSelFileExtraInfoBox1Tex, +}; + +TexturePtr sTitleLabels[] = { + gFileSelPleaseSelectAFileENGTex, gFileSelOpenThisFileENGTex, gFileSelCopyWhichFileENGTex, + gFileSelCopyToWhichFileENGTex, gFileSelAreYouSureCopyENGTex, gFileSelFileCopiedENGTex, + gFileSelEraseWhichFileENGTex, gFileSelAreYouSureEraseENGTex, gFileSelFileErasedENGTex, +}; + +TexturePtr sWarningLabels[] = { + gFileSelNoFileToCopyENGTex, gFileSelNoFileToEraseENGTex, gFileSelNoEmptyFileENGTex, + gFileSelFileEmptyENGTex, gFileSelFileInUseENGTex, +}; + +TexturePtr sFileButtonTextures[] = { + gFileSelFile1ButtonENGTex, + gFileSelFile2ButtonENGTex, + gFileSelFile3ButtonENGTex, +}; + +TexturePtr sActionButtonTextures[] = { + gFileSelCopyButtonENGTex, + gFileSelEraseButtonENGTex, + gFileSelYesButtonENGTex, + gFileSelQuitButtonENGTex, +}; + +/** + * Draw most window contents including buttons, labels, and icons. + * Does not include anything from the keyboard and settings windows. + */ +void FileSelect_DrawWindowContents(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 fileIndex; + s16 temp; + s16 i; + s16 quadVtxIndex; + + if (1) {} + + OPEN_DISPS(this->state.gfxCtx); + + // draw title label + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[0], 4, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sTitleLabels[this->titleLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + // draw next title label + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_NEXT]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sTitleLabels[this->nextTitleLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + temp = 4; + + gDPPipeSync(POLY_OPA_DISP++); + + // draw file info box (large box when a file is selected) + for (fileIndex = 0; fileIndex < 3; fileIndex++, temp += 28) { + if (fileIndex < 2) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[temp], 28, 0); + + for (quadVtxIndex = 0, i = 0; i < 7; i++, quadVtxIndex += 4) { + if ((i < 5) || (this->isOwlSave[fileIndex + 2] && (i >= 5))) { + gDPLoadTextureBlock(POLY_OPA_DISP++, sFileInfoBoxTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, + sFileInfoBoxPartWidths[i], 56, 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); + gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, + 0); + } + } + } + } + + gDPPipeSync(POLY_OPA_DISP++); + + for (i = 0; i < 3; i++, temp += 16) { + if (i < 2) { + // draw file button + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[temp], 16, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->fileButtonAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sFileButtonTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + // draw file name box + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->nameBoxAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelFileNameBoxTex, G_IM_FMT_IA, G_IM_SIZ_16b, 108, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->connectorAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelConnectorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0); + + if (this->isOwlSave[i + 2]) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->nameBoxAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelBlankButtonTex, G_IM_FMT_IA, G_IM_SIZ_16b, 52, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 12, 14, 15, 13, 0); + } + } + } + + // draw file info + for (fileIndex = 0; fileIndex < 2; fileIndex++) { + FileSelect_DrawFileInfo(&this->state, fileIndex); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[0x3AC], 20, 0); + + // draw primary action buttons (copy/erase) + for (quadVtxIndex = 0, i = 0; i < 2; i++, quadVtxIndex += 4) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->actionButtonAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sActionButtonTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 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); + gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + + // draw confirm buttons (yes/quit) + for (quadVtxIndex = 0, i = FS_BTN_CONFIRM_YES; i <= FS_BTN_CONFIRM_QUIT; i++, quadVtxIndex += 4) { + temp = this->confirmButtonTexIndices[i]; + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->confirmButtonAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sActionButtonTextures[temp], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 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); + gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, 0); + } + + // draw options button + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->optionButtonAlpha); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelOptionsButtonENGTex, G_IM_FMT_IA, G_IM_SIZ_16b, 64, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0); + + // draw highlight over currently selected button + if (((this->menuMode == FS_MENU_MODE_CONFIG) && + ((this->configMode == CM_MAIN_MENU) || (this->configMode == CM_SELECT_COPY_SOURCE) || + (this->configMode == CM_SELECT_COPY_DEST) || (this->configMode == CM_COPY_CONFIRM) || + (this->configMode == CM_ERASE_SELECT) || (this->configMode == CM_ERASE_CONFIRM))) || + ((this->menuMode == FS_MENU_MODE_SELECT) && (this->selectMode == SM_CONFIRM_FILE))) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->highlightColor[0], this->highlightColor[1], + this->highlightColor[2], this->highlightColor[3]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelBigButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 72, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 12, 14, 15, 13, 0); + } + + // draw warning labels + if (this->warningLabel > FS_WARNING_NONE) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->emptyFileTextAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sWarningLabels[this->warningLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 16, 18, 19, 17, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_ConfigModeDraw(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + Gfx_SetupDL42_Opa(this->state.gfxCtx); + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + FileSelect_SetWindowVtx(&this->state); + FileSelect_SetWindowContentVtx(&this->state); + + if ((this->configMode != CM_NAME_ENTRY) && (this->configMode != CM_START_NAME_ENTRY)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + + if (this->windowRot != 0) { + Matrix_RotateXFApply(this->windowRot / 100.0f); + } + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_DrawWindowContents(&this->state); + } + + // draw name entry menu + if ((this->configMode >= CM_ROTATE_TO_NAME_ENTRY) && (this->configMode <= CM_NAME_ENTRY_TO_MAIN)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply((this->windowRot - 314.0f) / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_DrawNameEntry(&this->state); + } + + // draw options menu + if ((this->configMode >= CM_MAIN_TO_OPTIONS) && (this->configMode <= CM_OPTIONS_TO_MAIN)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply((this->windowRot - 314.0f) / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_DrawOptions(&this->state); + } + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + + CLOSE_DISPS(this->state.gfxCtx); +} + +/** + * Fade out the main menu elements to transition to select mode. + * Update function for `SM_FADE_MAIN_TO_SELECT` + */ +void FileSelect_FadeMainToSelect(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] -= 50; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = this->fileButtonAlpha[i]; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameAlpha[i] = this->nameBoxAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] -= 255 / 4; + } + } else { + if (SLOT_OCCUPIED(this, i)) { + this->nameAlpha[i] = this->nameBoxAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] -= 255 / 4; + } + } + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + this->selectMode++; // SM_MOVE_FILE_TO_TOP + this->confirmButtonIndex = FS_BTN_CONFIRM_YES; + } +} + +// Amount to move by to reach the top of the screen +s16 sFileYOffsets[] = { 0, 16, 32 }; + +/** + * Moves the selected file to the top of the window. + * Update function for `SM_MOVE_FILE_TO_TOP` + */ +void FileSelect_MoveSelectedFileToTop(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + + yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex] - sFileYOffsets[this->buttonIndex]) / this->actionTimer; + this->buttonYOffsets[this->buttonIndex] += yStep; + this->actionTimer--; + + if ((this->actionTimer == 0) || (this->buttonYOffsets[this->buttonIndex] == sFileYOffsets[this->buttonIndex])) { + this->buttonYOffsets[FS_BTN_SELECT_YES] = this->buttonYOffsets[FS_BTN_SELECT_QUIT] = -24; + this->actionTimer = 4; + this->selectMode++; // SM_FADE_IN_FILE_INFO + } +} + +/** + * Fade in the file info for the selected file. + * Update function for `SM_FADE_IN_FILE_INFO` + */ +void FileSelect_FadeInFileInfo(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] += 50; + this->nameBoxAlpha[this->buttonIndex] -= 100; + + if (this->nameBoxAlpha[this->buttonIndex] <= 0) { + this->nameBoxAlpha[this->buttonIndex] = 0; + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->fileInfoAlpha[this->buttonIndex] = 200; + this->actionTimer = 4; + this->selectMode++; // SM_CONFIRM_FILE + } + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = + this->fileInfoAlpha[this->buttonIndex]; +} + +/** + * Update the cursor and handle the option that the player picks for confirming the selected file. + * Update function for `SM_CONFIRM_FILE` + */ +void FileSelect_ConfirmFile(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + + if (CHECK_BTN_ALL(input->press.button, BTN_START) || (CHECK_BTN_ALL(input->press.button, BTN_A))) { + if (this->confirmButtonIndex == FS_BTN_CONFIRM_YES) { + Rumble_Request(300.0f, 180, 20, 100); + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->selectMode = SM_FADE_OUT; + func_801A4058(0xF); + } else { // FS_BTN_CONFIRM_QUIT + play_sound(NA_SE_SY_FSEL_CLOSE); + this->selectMode++; // SM_FADE_OUT_FILE_INFO + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + play_sound(NA_SE_SY_FSEL_CLOSE); + this->selectMode++; // SM_FADE_OUT_FILE_INFO + } else if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->confirmButtonIndex ^= 1; + } +} + +/** + * Fade out the file info for the selected file before returning to the main menu. + * Update function for `SM_FADE_OUT_FILE_INFO` + */ +void FileSelect_FadeOutFileInfo(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] -= 200 / 4; + this->nameBoxAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->buttonYOffsets[FS_BTN_SELECT_YES] = this->buttonYOffsets[FS_BTN_SELECT_QUIT] = 0; + this->nameBoxAlpha[this->buttonIndex] = 200; + this->fileInfoAlpha[this->buttonIndex] = 0; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->actionTimer = 4; + this->selectMode++; + } + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = + this->fileInfoAlpha[this->buttonIndex]; +} + +/** + * Move the selected file back to the slot position then go to config mode for the main menu. + * Update function for `SM_MOVE_FILE_TO_SLOT` + */ +void FileSelect_MoveSelectedFileToSlot(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s32 yStep; + s16 i; + + yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex]) / this->actionTimer; + this->buttonYOffsets[this->buttonIndex] -= yStep; + + if (this->buttonYOffsets[this->buttonIndex] <= 0) { + this->buttonYOffsets[this->buttonIndex] = 0; + } + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] += 200 / 4; + + if (this->fileButtonAlpha[i] >= 200) { + this->fileButtonAlpha[i] = 200; + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = this->fileButtonAlpha[i]; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else { + if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->titleLabel = this->nextTitleLabel; + this->actionTimer = 4; + this->menuMode = FS_MENU_MODE_CONFIG; + this->configMode = CM_MAIN_MENU; + this->nextConfigMode = CM_MAIN_MENU; + this->selectMode = SM_FADE_MAIN_TO_SELECT; + } +} + +/** + * Fill the screen with black to fade out. + * Update function for `SM_FADE_OUT` + */ +void FileSelect_FadeOut(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->screenFillAlpha += 40; + + if (this->screenFillAlpha >= 255) { + this->screenFillAlpha = 255; + this->selectMode++; // SM_LOAD_GAME + } +} + +/** + * Load the save for the appropriate file and start the game. + * Update function for `SM_LOAD_GAME` + */ +void FileSelect_LoadGame(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + u16 i; + + gSaveContext.fileNum = this->buttonIndex; + Sram_OpenSave(this, &this->sramCtx); + + gSaveContext.gameMode = GAMEMODE_NORMAL; + + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); + + gSaveContext.respawnFlag = 0; + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTR_LOAD_OPENING; + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + gSaveContext.showTitleCard = true; + gSaveContext.dogParams = 0; + + for (i = 0; i < TIMER_ID_MAX; i++) { + gSaveContext.timerStates[i] = TIMER_STATE_OFF; + } + + gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; + gSaveContext.nayrusLoveTimer = 0; + gSaveContext.healthAccumulator = 0; + gSaveContext.magicFlag = 0; + gSaveContext.forcedSeqId = 0; + gSaveContext.skyboxTime = CLOCK_TIME(0, 0); + gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; + gSaveContext.cutsceneTrigger = 0; + gSaveContext.chamberCutsceneNum = 0; + gSaveContext.nextDayTime = 0xFFFF; + gSaveContext.retainWeatherMode = false; + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; + + gSaveContext.hudVisibilityForceButtonAlphasByStatus = false; + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + gSaveContext.hudVisibilityTimer = 0; + + gSaveContext.save.saveInfo.playerData.tatlTimer = 0; +} + +void (*sSelectModeUpdateFuncs[])(GameState*) = { + FileSelect_FadeMainToSelect, // SM_FADE_MAIN_TO_SELECT + FileSelect_MoveSelectedFileToTop, // SM_MOVE_FILE_TO_TOP + FileSelect_FadeInFileInfo, // SM_FADE_IN_FILE_INFO + FileSelect_ConfirmFile, // SM_CONFIRM_FILE + FileSelect_FadeOutFileInfo, // SM_FADE_OUT_FILE_INFO + FileSelect_MoveSelectedFileToSlot, // SM_MOVE_FILE_TO_SLOT + FileSelect_FadeOut, // SM_FADE_OUT + FileSelect_LoadGame, // SM_LOAD_GAME +}; + +void FileSelect_SelectModeUpdate(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + sSelectModeUpdateFuncs[this->selectMode](&this->state); +} + +void FileSelect_SelectModeDraw(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + Gfx_SetupDL42_Opa(this->state.gfxCtx); + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + FileSelect_SetWindowVtx(&this->state); + FileSelect_SetWindowContentVtx(&this->state); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(this->windowRot / 100.0f); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + FileSelect_DrawWindowContents(&this->state); + gDPPipeSync(POLY_OPA_DISP++); + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_UpdateAndDrawSkybox(FileSelectState* this) { + s32 pad; + f32 eyeX; + f32 eyeY; + f32 eyeZ; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + eyeX = 1000.0f * Math_CosS(sFileSelectSkyboxRotation) - 1000.0f * Math_SinS(sFileSelectSkyboxRotation); + eyeY = -700.0f; + eyeZ = 1000.0f * Math_SinS(sFileSelectSkyboxRotation) + 1000.0f * Math_CosS(sFileSelectSkyboxRotation); + + FileSelect_SetView(this, eyeX, eyeY, eyeZ); + Skybox_Draw(&this->skyboxCtx, this->state.gfxCtx, SKYBOX_NORMAL_SKY, this->envCtx.skyboxBlend, eyeX, eyeY, eyeZ); + + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + + sFileSelectSkyboxRotation += -0xA; + + CLOSE_DISPS(this->state.gfxCtx); +} + +void (*gFileSelectDrawFuncs[])(GameState*) = { + FileSelect_InitModeDraw, // FS_MENU_MODE_INIT + FileSelect_ConfigModeDraw, // FS_MENU_MODE_CONFIG + FileSelect_SelectModeDraw, // FS_MENU_MODE_SELECT +}; +void (*gFileSelectUpdateFuncs[])(GameState*) = { + FileSelect_InitModeUpdate, // FS_MENU_MODE_INIT + FileSelect_ConfigModeUpdate, // FS_MENU_MODE_CONFIG + FileSelect_SelectModeUpdate, // FS_MENU_MODE_SELECT +}; + +TexturePtr D_808147B4[] = { gFileSelPleaseWaitENGTex, gFileSelDecideCancelENGTex, gFileSelDecideSaveENGTex }; +s16 D_808147C0[] = { 144, 144, 152 }; +s16 D_808147C8[] = { 90, 90, 86 }; + +void FileSelect_Main(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + s32 texIndex; + s32 pad; + + func_8012CF0C(this->state.gfxCtx, 0, 1, 0, 0, 0); + + OPEN_DISPS(this->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment); + gSPSegment(POLY_OPA_DISP++, 0x02, this->parameterSegment); + gSPSegment(POLY_OPA_DISP++, 0x06, this->titleSegment); + + this->stickAdjX = input->rel.stick_x; + this->stickAdjY = input->rel.stick_y; + + if (this->stickAdjX < -30) { + if (this->stickXDir == -1) { + this->inputTimerX--; + if (this->inputTimerX < 0) { + this->inputTimerX = 2; + } else { + this->stickAdjX = 0; + } + } else { + this->inputTimerX = 10; + this->stickXDir = -1; + } + } else if (this->stickAdjX > 30) { + if (this->stickXDir == 1) { + this->inputTimerX--; + if (this->inputTimerX < 0) { + this->inputTimerX = 2; + } else { + this->stickAdjX = 0; + } + } else { + this->inputTimerX = 10; + this->stickXDir = 1; + } + } else { + this->stickXDir = 0; + } + + if (this->stickAdjY < -30) { + if (this->stickYDir == -1) { + this->inputTimerY--; + if (this->inputTimerY < 0) { + this->inputTimerY = 2; + } else { + this->stickAdjY = 0; + } + } else { + this->inputTimerY = 10; + this->stickYDir = -1; + } + } else if (this->stickAdjY > 30) { + if (this->stickYDir == 1) { + this->inputTimerY--; + if (this->inputTimerY < 0) { + this->inputTimerY = 2; + } else { + this->stickAdjY = 0; + } + } else { + this->inputTimerY = 10; + this->stickYDir = 1; + } + } else { + this->stickYDir = 0; + } + + this->emptyFileTextAlpha = 0; + + FileSelect_PulsateCursor(&this->state); + gFileSelectUpdateFuncs[this->menuMode](&this->state); + FileSelect_UpdateAndDrawSkybox(this); + gFileSelectDrawFuncs[this->menuMode](&this->state); + + Gfx_SetupDL39_Opa(this->state.gfxCtx); + + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 255, this->controlsAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + if (this->sramCtx.status > 0) { + texIndex = 0; + } else if ((this->configMode >= CM_MAIN_TO_OPTIONS) && (this->configMode <= CM_OPTIONS_TO_MAIN)) { + texIndex = 2; + } else { + texIndex = 1; + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, D_808147B4[texIndex], G_IM_FMT_IA, G_IM_SIZ_8b, D_808147C0[texIndex], 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); + + gSPTextureRectangle(POLY_OPA_DISP++, D_808147C8[texIndex] << 2, 204 << 2, + (D_808147C8[texIndex] + D_808147C0[texIndex]) << 2, (204 + 16) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(POLY_OPA_DISP++); + gSPDisplayList(POLY_OPA_DISP++, sScreenFillSetupDL); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, this->screenFillAlpha); + gSPDisplayList(POLY_OPA_DISP++, D_0E000000.fillRect); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_InitContext(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + EnvironmentContext* envCtx = &this->envCtx; + + Sram_Alloc(&this->state, &this->sramCtx); + func_801457CC(&this->state, &this->sramCtx); + + this->menuMode = FS_MENU_MODE_INIT; + + this->buttonIndex = this->selectMode = this->selectedFileIndex = this->copyDestFileIndex = + this->confirmButtonIndex = 0; + + this->confirmButtonTexIndices[0] = 2; + this->confirmButtonTexIndices[1] = 3; + this->titleLabel = FS_TITLE_SELECT_FILE; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + + this->screenFillAlpha = 255; + this->highlightPulseDir = 1; + this->unk_244F4 = 0xC; + this->highlightColor[0] = 155; + this->highlightColor[1] = 255; + this->highlightColor[2] = 255; + this->highlightColor[3] = 70; + this->configMode = CM_FADE_IN_START; + this->windowRot = 0.0f; + + this->stickXDir = this->inputTimerX = 0; + this->stickYDir = this->inputTimerY = 0; + + this->kbdX = this->kbdY = this->charIndex = 0; + + this->kbdButton = FS_KBD_BTN_NONE; + + this->windowColor[0] = 100; + this->windowColor[1] = 150; + this->windowColor[2] = 255; + + this->windowAlpha = this->titleAlpha[FS_TITLE_CUR] = this->titleAlpha[FS_TITLE_NEXT] = this->fileButtonAlpha[0] = + this->fileButtonAlpha[1] = this->fileButtonAlpha[2] = this->nameBoxAlpha[0] = this->nameBoxAlpha[1] = + this->nameBoxAlpha[2] = this->nameAlpha[0] = this->nameAlpha[1] = this->nameAlpha[2] = + this->connectorAlpha[0] = this->connectorAlpha[1] = this->connectorAlpha[2] = this->fileInfoAlpha[0] = + this->fileInfoAlpha[1] = this->fileInfoAlpha[2] = this->actionButtonAlpha[FS_BTN_ACTION_COPY] = + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = this->actionButtonAlpha[2] = + this->actionButtonAlpha[3] = this->optionButtonAlpha = this->nameEntryBoxAlpha = + this->controlsAlpha = this->emptyFileTextAlpha = 0; + + this->windowPosX = 6; + this->actionTimer = 4; + this->warningLabel = FS_WARNING_NONE; + + this->warningButtonIndex = this->buttonYOffsets[0] = this->buttonYOffsets[1] = this->buttonYOffsets[2] = + this->buttonYOffsets[3] = this->buttonYOffsets[4] = this->buttonYOffsets[5] = this->fileNamesY[0] = + this->fileNamesY[1] = this->fileNamesY[2] = 0; + + this->unk_2451E[0] = 0; + this->unk_2451E[1] = 3; + this->unk_2451E[2] = 6; + this->unk_2451E[3] = 8; + this->unk_2451E[4] = 10; + this->highlightTimer = 20; + + ShrinkWindow_Letterbox_SetSizeTarget(0); + + gSaveContext.skyboxTime = 0; + gSaveContext.save.time = 0; + + Skybox_Init(&this->state, &this->skyboxCtx, 1); + R_TIME_SPEED = 10; + + envCtx->changeSkyboxState = 0; + envCtx->changeSkyboxTimer = 0; + envCtx->changeLightEnabled = false; + envCtx->changeLightTimer = 0; + envCtx->skyboxDmaState = 0; + envCtx->skybox1Index = 99; + envCtx->skybox2Index = 99; + envCtx->lightConfig = 0; + envCtx->changeLightNextConfig = 0; + envCtx->lightSetting = 0; + envCtx->skyboxConfig = 2; + envCtx->skyboxDisabled = 0; + envCtx->skyboxBlend = 0; + envCtx->glareAlpha = 0.0f; + envCtx->lensFlareAlphaScale = 0.0f; + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; +} + +void FileSelect_Destroy(GameState* this) { + ShrinkWindow_Destroy(); +} + +void FileSelect_Init(GameState* thisx) { + s32 pad; + FileSelectState* this = (FileSelectState*)thisx; + size_t size; + + Game_SetFramerateDivisor(&this->state, 1); + Matrix_Init(&this->state); + ShrinkWindow_Init(); + View_Init(&this->view, this->state.gfxCtx); + this->state.main = FileSelect_Main; + this->state.destroy = FileSelect_Destroy; + FileSelect_InitContext(&this->state); + Font_LoadOrderedFont(&this->font); + + size = SEGMENT_ROM_SIZE(title_static); + this->staticSegment = THA_AllocTailAlign16(&this->state.heap, 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); + 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); + DmaMgr_SendRequest0(this->titleSegment, gObjectTable[OBJECT_MAG].vromStart, size); + + Audio_SetSpec(0xA); + // Setting ioData to 1 and writing it to ioPort 7 will skip the harp intro + Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, NA_BGM_FILE_SELECT, 0, 7, 1); +} diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c new file mode 100644 index 000000000..7f8e5789c --- /dev/null +++ b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c @@ -0,0 +1,1253 @@ +/* + * File: z_file_copy_erase.c + * Overlay: ovl_file_choose + * Description: Copying and Erasing Files + */ + +#include "z_file_select.h" +#include "z64rumble.h" + +// When choosing a file to copy or erase, the 6 main menu buttons are placed at these offsets +s16 sChooseFileYOffsets[] = { -48, -48, -48, -24, -24, 0 }; + +s16 D_8081424C[3][3] = { + { 0, -48, -48 }, + { -64, 16, -48 }, + { -64, -64, 32 }, +}; + +s16 sEraseDelayTimer = 15; + +/** + * Move buttons into place for the select source screen and fade in the proper labels. + * Update function for `CM_SETUP_COPY_SOURCE` + */ +void FileSelect_SetupCopySource(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + s16 i; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 200 / 4; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 200 / 4; + this->optionButtonAlpha -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = 0; + + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200; + this->titleLabel = this->nextTitleLabel; + + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->configMode++; // CM_SELECT_COPY_SOURCE + } +} + +/** + * Allow the player to select a file to copy or exit back to the main menu. + * Update function for `CM_SELECT_COPY_SOURCE` + */ +void FileSelect_SelectCopySource(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->actionTimer = 4; + this->buttonIndex = FS_BTN_MAIN_COPY; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->configMode = CM_COPY_RETURN_MAIN; + this->warningLabel = FS_WARNING_NONE; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_COPY_DEST_1; + this->nextTitleLabel = FS_TITLE_COPY_TO; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_COPY_DEST_1; + this->nextTitleLabel = FS_TITLE_COPY_TO; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else { + if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + if (this->stickAdjY >= 30) { + this->buttonIndex--; + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_FILE_2; + } + if (this->buttonIndex < FS_BTN_COPY_FILE_1) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + } else { + this->buttonIndex++; + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + if (this->buttonIndex > FS_BTN_COPY_QUIT) { + this->buttonIndex = FS_BTN_COPY_FILE_1; + } + } + } + + if (this->buttonIndex != FS_BTN_COPY_QUIT) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } +} + +/** + * Move the menu buttons into place for the copy destination selection and switch titles. + * Update function for `CM_SETUP_COPY_DEST_1` + */ +void FileSelect_SetupCopyDest1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + s16 i; + + for (i = 0; i < 3; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - D_8081424C[this->buttonIndex][i]) / this->actionTimer; + + if (D_8081424C[this->buttonIndex][i] >= this->buttonYOffsets[i]) { + this->buttonYOffsets[i] += yStep; + } else { + this->buttonYOffsets[i] -= yStep; + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->nameBoxAlpha[this->buttonIndex] -= 200 / 4; + + this->actionTimer--; + if (this->actionTimer == 0) { + this->buttonYOffsets[this->buttonIndex] = D_8081424C[this->buttonIndex][this->buttonIndex]; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->actionTimer = 4; + this->configMode++; // CM_SETUP_COPY_DEST_2 + } +} + +/** + * Show the file info of the file selected to copy from. + * Update function for `CM_SETUP_COPY_DEST_2` + */ +void FileSelect_SetupCopyDest2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->nameBoxAlpha[this->buttonIndex] -= 200 / 4; + this->fileInfoAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->nameBoxAlpha[this->buttonIndex] = 0; + this->fileInfoAlpha[this->buttonIndex] = 200; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->actionTimer = 4; + this->configMode = CM_SELECT_COPY_DEST; + } +} + +/** + * Allow the player to select a slot to copy to or exit to the copy select screen. + * Update function for `CM_SELECT_COPY_DEST` + */ +void FileSelect_SelectCopyDest(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->buttonIndex = this->selectedFileIndex; + this->nextTitleLabel = FS_TITLE_COPY_FROM; + this->actionTimer = 4; + this->configMode = CM_EXIT_TO_COPY_SOURCE_1; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->copyDestFileIndex = this->buttonIndex; + this->nextTitleLabel = FS_TITLE_COPY_CONFIRM; + this->actionTimer = 4; + this->configMode = CM_SETUP_COPY_CONFIRM_1; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + this->copyDestFileIndex = this->buttonIndex; + this->nextTitleLabel = FS_TITLE_COPY_CONFIRM; + this->actionTimer = 4; + this->configMode = CM_SETUP_COPY_CONFIRM_1; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else { + if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + if (this->stickAdjY >= 30) { + this->buttonIndex--; + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_FILE_2; + } + if (this->buttonIndex == this->selectedFileIndex) { + this->buttonIndex--; + if (this->buttonIndex < FS_BTN_COPY_FILE_1) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_FILE_2; + } + } else if (this->buttonIndex < FS_BTN_COPY_FILE_1) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + } else { + this->buttonIndex++; + if (this->buttonIndex > FS_BTN_COPY_QUIT) { + this->buttonIndex = FS_BTN_COPY_FILE_1; + } + if (this->buttonIndex == this->selectedFileIndex) { + this->buttonIndex++; + } + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + } + } + if (this->buttonIndex != FS_BTN_COPY_QUIT) { + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_IN_USE; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_IN_USE; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } +} + +/** + * Fade out file info, bring back the name box, and get ready to return to copy source screen. + * Update function for `CM_EXIT_TO_COPY_SOURCE_1` + */ +void FileSelect_ExitToCopySource1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] -= 200 / 4; + this->nameBoxAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->nextTitleLabel = FS_TITLE_COPY_FROM; + this->nameBoxAlpha[this->buttonIndex] = 200; + this->fileInfoAlpha[this->buttonIndex] = 0; + this->actionTimer = 4; + this->configMode++; // CM_EXIT_TO_COPY_SOURCE_2 + } +} + +/** + * Move the buttons back into place and return to copy source select. + * Update function for `CM_EXIT_TO_COPY_SOURCE_2` + */ +void FileSelect_ExitToCopySource2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 3; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->configMode = CM_SELECT_COPY_SOURCE; + } +} + +s16 D_80814264[] = { -56, -40, -24, 0 }; + +/** + * Rearrange buttons on the screen to prepare for copy confirmation. + * Update function for `CM_SETUP_COPY_CONFIRM_1` + */ +void FileSelect_SetupCopyConfirm1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + + for (i = 0; i < 3; i++) { + if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) { + this->fileButtonAlpha[i] -= 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else if (i == this->copyDestFileIndex) { + yStep = ABS_ALT(this->buttonYOffsets[i] - D_80814264[i]) / this->actionTimer; + this->buttonYOffsets[i] += yStep; + + if (this->buttonYOffsets[i] >= D_80814264[i]) { + this->buttonYOffsets[i] = D_80814264[i]; + } + } + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->actionTimer = 4; + this->configMode++; + } +} + +/** + * Fade in the 'Yes' button before allowing the player to decide. + * Update function for `CM_SETUP_COPY_CONFIRM_2` + */ +void FileSelect_SetupCopyConfirm2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->configMode = CM_COPY_CONFIRM; + this->buttonIndex = FS_BTN_CONFIRM_QUIT; + } +} + +/** + * Allow the player to confirm the copy, or quit back to the destination select. + * If yes is selected, the actual copy occurs in this function before moving on to the animation. + * Update function for `CM_COPY_CONFIRM` + */ +void FileSelect_CopyConfirm(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + u16 dayTime; + + if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_COPY_TO; + this->configMode = CM_RETURN_TO_COPY_DEST; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + dayTime = gSaveContext.save.time; + gSaveContext.save.time = dayTime; + this->nameAlpha[this->copyDestFileIndex] = 0; + this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex]; + this->nextTitleLabel = FS_TITLE_COPY_COMPLETE; + this->actionTimer = 4; + Sram_CopySave(this, sramCtx); + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_COPY_ANIM_1; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->copyDestFileIndex * 2], + gFlashSpecialSaveNumPages[this->copyDestFileIndex * 2]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_COPY_WAIT_FOR_FLASH_SAVE; + } + Rumble_Request(300.0f, 180, 20, 100); + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->buttonIndex ^= 1; + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_COPY_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_CopyWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + u16 i; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_COPY_ANIM_1; + + for (i = 0; i < 6; i++) { + this->newf[this->copyDestFileIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i]; + } + + this->threeDayResetCount[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.threeDayResetCount; + + for (i = 0; i < 8; i++) { + this->fileNames[this->copyDestFileIndex][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + } + + this->healthCapacity[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.healthCapacity; + this->health[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.health; + this->defenseHearts[this->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts; + } +} + +/** + * Move buttons back in place and return to copy destination select. + * Update function for `CM_RETURN_TO_COPY_DEST` + */ +void FileSelect_ReturnToCopyDest(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + + for (i = 0; i < 3; i++) { + if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + + yStep = ABS_ALT(this->buttonYOffsets[i] - D_8081424C[this->selectedFileIndex][i]) / this->actionTimer; + + if (D_8081424C[this->selectedFileIndex][i] >= this->buttonYOffsets[i]) { + this->buttonYOffsets[i] += yStep; + } else { + this->buttonYOffsets[i] -= yStep; + } + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->actionTimer = 4; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->configMode = CM_SELECT_COPY_DEST; + } +} + +/** + * Hide title + * Update function for `CM_COPY_ANIM_1` + */ +void FileSelect_CopyAnim1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleAlpha[FS_TITLE_CUR] = 0; + this->actionTimer = 4; + this->configMode++; // CM_COPY_ANIM_2 + } +} + +/** + * Move a copy of the file window down and fade in the file info. + * Update function for `CM_COPY_ANIM_2` + */ +void FileSelect_CopyAnim2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + + this->fileInfoAlpha[this->copyDestFileIndex] += 200 / 4; + this->nameAlpha[this->copyDestFileIndex] += 200 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + yStep = ABS_ALT(this->fileNamesY[this->copyDestFileIndex] + 56) / this->actionTimer; + this->fileNamesY[this->copyDestFileIndex] -= yStep; + + if (this->fileNamesY[this->copyDestFileIndex] <= -56) { + this->fileNamesY[this->copyDestFileIndex] = -56; + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 45; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode++; // CM_COPY_ANIM_3 + } +} + +/** + * Play a sound effect to indicate that the copy has completed. Wait for a timer or for + * the player to press a button before moving on. + * Update function for `CM_COPY_ANIM_3` + */ +void FileSelect_CopyAnim3(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + + if (this->actionTimer == 38) { + this->connectorAlpha[this->copyDestFileIndex] = 255; + play_sound(NA_SE_EV_DIAMOND_SWITCH); + } + + this->actionTimer--; + + if (this->actionTimer < 37) { + if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (this->actionTimer == 0)) { + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->configMode = CM_COPY_ANIM_4; + } + } +} + +/** + * Fade out the info boxes for both files and bring in their name boxes. Fade out title. + * Update function for `CM_COPY_ANIM_4` + */ +void FileSelect_CopyAnim4(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->selectedFileIndex] -= 200 / 4; + this->fileInfoAlpha[this->copyDestFileIndex] -= 200 / 4; + this->nameBoxAlpha[this->selectedFileIndex] += 200 / 4; + this->nameBoxAlpha[this->copyDestFileIndex] += 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->fileNamesY[this->copyDestFileIndex] = this->buttonYOffsets[3] = 0; + this->actionTimer = 4; + this->titleAlpha[FS_TITLE_CUR] = 0; + this->configMode++; + } +} + +/** + * Restore all buttons and labels back to their original place and go back to the main menu. + * Update function for `CM_COPY_ANIM_5` + */ +void FileSelect_CopyAnim5(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 200 / 4; + this->optionButtonAlpha += 200 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + for (i = 0; i < 3; i++) { + this->connectorAlpha[i] = 0; + this->fileButtonAlpha[i] = 200; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->connectorAlpha[i]; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] = 255; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] = 255; + } + } + + this->fileNamesY[this->selectedFileIndex] = 0; + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } +} + +/** + * Exit from the copy source screen to the main menu. Return all buttons and labels to their original place. + * Update function for `CM_COPY_RETURN_MAIN` + */ +void FileSelect_ExitCopyToMain(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } + + this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->actionButtonAlpha[FS_BTN_ACTION_COPY]; +} + +/** + * Move buttons into place for the erase select screen and fade in the proper labels. + * Update function for `CM_SETUP_ERASE_SELECT` + */ +void FileSelect_SetupEraseSelect(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 100; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 100; + this->optionButtonAlpha -= 100; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 200 / 4; + + if (this->actionButtonAlpha[FS_BTN_ACTION_COPY] <= 0) { + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = 0; + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = 0; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->buttonIndex = FS_BTN_ERASE_QUIT; + this->configMode++; // CM_ERASE_SELECT + } +} + +/** + * Allow the player to select a file to erase or exit back to the main menu. + * Update function for `CM_ERASE_SELECT` + */ +void FileSelect_EraseSelect(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->buttonIndex = FS_BTN_MAIN_ERASE; + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->configMode = CM_EXIT_ERASE_TO_MAIN; + this->warningLabel = FS_WARNING_NONE; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_ERASE_CONFIRM_1; + this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_ERASE_CONFIRM_1; + this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else { + if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + if (this->stickAdjY >= 30) { + this->buttonIndex--; + if (this->buttonIndex == FS_BTN_ERASE_FILE_3) { + this->buttonIndex = FS_BTN_ERASE_FILE_2; + } + if (this->buttonIndex < FS_BTN_ERASE_FILE_1) { + this->buttonIndex = FS_BTN_ERASE_QUIT; + } + } else { + this->buttonIndex++; + if (this->buttonIndex == FS_BTN_ERASE_FILE_3) { + this->buttonIndex = FS_BTN_ERASE_QUIT; + } + if (this->buttonIndex > FS_BTN_ERASE_QUIT) { + this->buttonIndex = FS_BTN_ERASE_FILE_1; + } + } + } + + if (this->buttonIndex != FS_BTN_ERASE_QUIT) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else { + this->warningLabel = FS_WARNING_NONE; + } + } +} + +s16 D_8081426C[] = { 0, 16, 32 }; + +/** + * Update function for `CM_SETUP_ERASE_CONFIRM_1` + */ +void FileSelect_SetupEraseConfirm1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] -= 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else { + this->nameBoxAlpha[i] -= 200 / 4; + } + } + this->titleAlpha[FS_TITLE_CUR] -= 255 / 8; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 8; + + yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex] - D_8081426C[this->buttonIndex]) / this->actionTimer; + + if (this->buttonYOffsets[this->buttonIndex] >= D_8081426C[this->buttonIndex]) { + this->buttonYOffsets[this->buttonIndex] -= yStep; + } else { + this->buttonYOffsets[this->buttonIndex] += yStep; + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] = 0; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->connectorAlpha[i] = 0; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->connectorAlpha[i] = 0; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0; + } + } else { + this->nameBoxAlpha[i] = 0; + } + } + + this->buttonYOffsets[this->buttonIndex] = D_8081426C[this->buttonIndex]; + this->actionTimer = 4; + this->configMode++; + } +} + +/** + * Show the file info of the file selected to erase. + * Update function for `CM_SETUP_ERASE_CONFIRM_2` + */ +void FileSelect_SetupEraseConfirm2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 8; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 8; + this->fileInfoAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + this->titleLabel = this->nextTitleLabel; + this->fileInfoAlpha[this->buttonIndex] = this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = 200; + this->buttonIndex = FS_BTN_CONFIRM_QUIT; + this->configMode = CM_ERASE_CONFIRM; + } +} + +/** + * Allow the player to confirm their choice to erase or return back to erase select. + * Update function for `CM_ERASE_CONFIRM` + */ +void FileSelect_EraseConfirm(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->buttonIndex = this->selectedFileIndex; + this->nextTitleLabel = FS_TITLE_ERASE_FILE; + this->configMode = CM_EXIT_TO_ERASE_SELECT_1; + this->actionTimer = 4; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + Sram_EraseSave(this, sramCtx, this->selectedFileIndex); + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_ERASE_ANIM_1; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->selectedFileIndex * 2], + gFlashSpecialSaveNumPages[this->selectedFileIndex * 2]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_ERASE_WAIT_FOR_FLASH_SAVE; + } + this->connectorAlpha[this->selectedFileIndex] = 0; + play_sound(NA_SE_EV_DIAMOND_SWITCH); + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_ERASE_COMPLETE; + Rumble_Request(200.0f, 255, 20, 150); + sEraseDelayTimer = 15; + } else if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->buttonIndex ^= 1; + } +} + +/** + * Fade out file info, bring back the name box, and get ready to return to erase select screen. + * Update function for `CM_EXIT_TO_ERASE_SELECT_1` + */ +void FileSelect_ExitToEraseSelect1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] -= 200 / 4; + this->nameBoxAlpha[this->buttonIndex] += 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + this->fileInfoAlpha[this->buttonIndex] = 0; + this->configMode++; // CM_EXIT_TO_ERASE_SELECT_2 + } +} + +/** + * Move the buttons back into place and return to erase select. + * Update function for `CM_EXIT_TO_ERASE_SELECT_2` + */ +void FileSelect_ExitToEraseSelect2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + yStep = + ABS_ALT(this->buttonYOffsets[this->buttonIndex] - sChooseFileYOffsets[this->buttonIndex]) / this->actionTimer; + + if (this->buttonYOffsets[this->buttonIndex] >= sChooseFileYOffsets[this->buttonIndex]) { + this->buttonYOffsets[this->buttonIndex] -= yStep; + } else { + this->buttonYOffsets[this->buttonIndex] += yStep; + } + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->buttonYOffsets[this->buttonIndex] = sChooseFileYOffsets[this->buttonIndex]; + this->actionTimer = 4; + this->buttonIndex = FS_BTN_ERASE_QUIT; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_ERASE_SELECT; + } +} + +/** + * Wait for an initial delay, then start fading out the selected file. + * The actual file deletion occurs in this function. + * Update function for `CM_ERASE_ANIM_1` + */ +void FileSelect_EraseAnim1(GameState* thisx) { + static s16 D_80814E80; + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + + if (sEraseDelayTimer == 0) { + if (this->actionTimer == 4) { + D_80814E80 = 1; + } + + if (this->actionTimer != 0) { + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->fileInfoAlpha[this->selectedFileIndex] -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4; + } + + this->fileNamesY[this->selectedFileIndex] -= D_80814E80; + D_80814E80 += 2; + + this->actionTimer--; + if (this->actionTimer == 0) { + this->configMode = CM_ERASE_ANIM_2; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = this->connectorAlpha[this->selectedFileIndex] = 0; + + //! FAKE: there should be a better chained assignment + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + if (1) {} + if (0) {} + this->fileInfoAlpha[this->selectedFileIndex] = this->nameAlpha[this->selectedFileIndex] = + this->nameBoxAlpha[this->selectedFileIndex] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT]; + + this->actionTimer = 45; + } + } else { + sEraseDelayTimer--; + + if (sEraseDelayTimer == 0) { + play_sound(NA_SE_OC_ABYSS); + } + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_ERASE_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_EraseWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + u16 i; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_ERASE_ANIM_1; + for (i = 0; i < 6; i++) { + this->newf[this->selectedFileIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i]; + } + } +} + +/** + * Wait for a delay timer or for the palyer to press a button before returning to the main menu. + * Update function for `CM_ERASE_ANIM_2` + */ +void FileSelect_EraseAnim2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + + if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (--this->actionTimer == 0)) { + this->buttonYOffsets[3] = 0; + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->configMode++; // CM_ERASE_ANIM_3 + play_sound(NA_SE_SY_FSEL_CLOSE); + } +} + +/** + * Exit from the erase animation to the main menu. Return all buttons and labels to their original place. + * Update function for `CM_ERASE_ANIM_3` + */ +void FileSelect_EraseAnim3(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + for (i = 0; i < 3; i++) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + + if (this->fileButtonAlpha[this->selectedFileIndex] >= 200) { + this->fileButtonAlpha[this->selectedFileIndex] = 200; + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->fileNamesY[this->selectedFileIndex] = 0; + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } + + this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->actionButtonAlpha[FS_BTN_ACTION_COPY]; +} + +/** + * Exit from the erase select screen to the main menu. Return all buttons and labels to their original place. + * Update function for `CM_EXIT_ERASE_TO_MAIN` + */ +void FileSelect_ExitEraseToMain(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 200 / 4; + this->optionButtonAlpha += 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 2; + + if (this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] <= 0) { + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } + + this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->actionButtonAlpha[FS_BTN_ACTION_COPY]; +} 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 c6e3983d8..02236002a 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 @@ -1,78 +1,1059 @@ /* * File: z_file_nameset_NES.c * Overlay: ovl_file_choose - * Description: + * Description: Entering name on a new file, selecting options from the options menu */ -#include "z_file_choose.h" +#include "prevent_bss_reordering.h" +#include "z_file_select.h" #include "z64rumble.h" +#include "misc/title_static/title_static.h" +#include "overlays/ovl_file_choose/ovl_file_choose.h" -extern UNK_TYPE D_01002800; -extern UNK_TYPE D_01007980; -extern UNK_TYPE D_0102A6B0; -extern UNK_TYPE D_0102B170; -extern UNK_TYPE D_010310F0; -extern UNK_TYPE D_010311F0; +void FileSelect_DrawTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture, s16 point) { + OPEN_DISPS(gfxCtx); -// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file -extern GfxMasterList D_0E000000; + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, 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); + gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804010.s") + CLOSE_DISPS(gfxCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808041A0.s") +void FileSelect_DrawMultiTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture1, TexturePtr texture2, s16 point) { + OPEN_DISPS(gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804654.s") + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture1, G_IM_FMT_I, 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); + gDPLoadMultiBlock_4b(POLY_OPA_DISP++, texture2, 0x0080, 1, G_IM_FMT_I, 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); + gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808047D8.s") + CLOSE_DISPS(gfxCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080489C.s") +s16 D_80814280[] = { + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 4, 3, 2, 4, 1, 2, 2, 1, 1, 2, 2, 3, 2, 2, 0, 2, 2, 2, 0, 3, 1, 0, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804DAC.s") +s16 D_80814304[] = { + 1, 2, 0, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 2, 2, 4, 3, 2, 4, 1, 2, 2, 1, 1, 2, 2, 3, 2, 2, 0, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804E74.s") +s16 D_80814384[] = { + 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804F98.s") +s16 D_80814404[] = { + -94, -96, -48, 0, 32, 64, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080525C.s") +s16 D_80814410[] = { + 56, 44, 44, 28, 28, 44, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808052B0.s") +s16 D_8081441C[] = { + 72, -48, -48, -48, -48, -48, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808054A4.s") +void FileSelect_SetKeyboardVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 phi_t2; + s16 phi_t0; + s16 phi_t3; + s16 phi_s1; + s16 phi_t1; + s16 phi_s2; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808055D0.s") + this->keyboardVtx = GRAPH_ALLOC(this->state.gfxCtx, sizeof(Vtx) * 4 * 5 * 13); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808058A4.s") + phi_s1 = 0x26; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805918.s") + for (phi_t2 = 0, phi_s2 = 0, phi_t3 = 0; phi_s2 < 5; phi_s2++) { + phi_t0 = -0x60; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805A58.s") + for (phi_t1 = 0; phi_t1 < 13; phi_t1++, phi_t3 += 4, phi_t2++) { + //! @bug D_80814304 is accessed out of bounds when drawing the empty space character (value of 64). Under + //! normal circumstances it reads a halfword from D_80814384. + this->keyboardVtx[phi_t3].v.ob[0] = this->keyboardVtx[phi_t3 + 2].v.ob[0] = D_80814304[phi_t2] + phi_t0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805B30.s") + this->keyboardVtx[phi_t3 + 1].v.ob[0] = this->keyboardVtx[phi_t3 + 3].v.ob[0] = + D_80814304[phi_t2] + phi_t0 + 12; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805C1C.s") + this->keyboardVtx[phi_t3].v.ob[1] = this->keyboardVtx[phi_t3 + 1].v.ob[1] = phi_s1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806014.s") + this->keyboardVtx[phi_t3 + 2].v.ob[1] = this->keyboardVtx[phi_t3 + 3].v.ob[1] = phi_s1 - 12; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806148.s") + this->keyboardVtx[phi_t3].v.ob[2] = this->keyboardVtx[phi_t3 + 1].v.ob[2] = + this->keyboardVtx[phi_t3 + 2].v.ob[2] = this->keyboardVtx[phi_t3 + 3].v.ob[2] = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806310.s") + this->keyboardVtx[phi_t3].v.flag = this->keyboardVtx[phi_t3 + 1].v.flag = + this->keyboardVtx[phi_t3 + 2].v.flag = this->keyboardVtx[phi_t3 + 3].v.flag = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808067E0.s") + this->keyboardVtx[phi_t3].v.tc[0] = this->keyboardVtx[phi_t3].v.tc[1] = + this->keyboardVtx[phi_t3 + 1].v.tc[1] = this->keyboardVtx[phi_t3 + 2].v.tc[0] = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806BC8.s") + this->keyboardVtx[phi_t3 + 1].v.tc[0] = this->keyboardVtx[phi_t3 + 2].v.tc[1] = + this->keyboardVtx[phi_t3 + 3].v.tc[0] = this->keyboardVtx[phi_t3 + 3].v.tc[1] = 16 << 5; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806CA0.s") + this->keyboardVtx[phi_t3].v.cn[0] = this->keyboardVtx[phi_t3 + 1].v.cn[0] = + this->keyboardVtx[phi_t3 + 2].v.cn[0] = this->keyboardVtx[phi_t3 + 3].v.cn[0] = + this->keyboardVtx[phi_t3].v.cn[1] = this->keyboardVtx[phi_t3 + 1].v.cn[1] = + this->keyboardVtx[phi_t3 + 2].v.cn[1] = this->keyboardVtx[phi_t3 + 3].v.cn[1] = + this->keyboardVtx[phi_t3].v.cn[2] = this->keyboardVtx[phi_t3 + 1].v.cn[2] = + this->keyboardVtx[phi_t3 + 2].v.cn[2] = this->keyboardVtx[phi_t3 + 3].v.cn[2] = + this->keyboardVtx[phi_t3].v.cn[3] = this->keyboardVtx[phi_t3 + 1].v.cn[3] = + this->keyboardVtx[phi_t3 + 2].v.cn[3] = this->keyboardVtx[phi_t3 + 3].v.cn[3] = + 255; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806E84.s") + phi_t0 += 0x10; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806F30.s") + phi_s1 -= 0x10; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808071E4.s") + this->keyboard2Vtx = GRAPH_ALLOC(this->state.gfxCtx, sizeof(Vtx) * 24); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807390.s") + for (phi_t1 = 0, phi_t3 = 0; phi_t3 < 6; phi_t3++, phi_t1 += 4) { -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080742C.s") + this->keyboard2Vtx[phi_t1 + 0].v.ob[0] = this->keyboard2Vtx[phi_t1 + 2].v.ob[0] = D_80814404[phi_t3] + 1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808074B4.s") + this->keyboard2Vtx[phi_t1 + 1].v.ob[0] = this->keyboard2Vtx[phi_t1 + 3].v.ob[0] = + this->keyboard2Vtx[phi_t1 + 0].v.ob[0] + D_80814410[phi_t3] - 2; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808077AC.s") + this->keyboard2Vtx[phi_t1 + 0].v.ob[1] = this->keyboard2Vtx[phi_t1 + 1].v.ob[1] = D_8081441C[phi_t3] - 1; + + this->keyboard2Vtx[phi_t1 + 2].v.ob[1] = this->keyboard2Vtx[phi_t1 + 3].v.ob[1] = + this->keyboard2Vtx[phi_t1 + 0].v.ob[1] - 0xE; + + this->keyboard2Vtx[phi_t1 + 0].v.ob[2] = this->keyboard2Vtx[phi_t1 + 1].v.ob[2] = + this->keyboard2Vtx[phi_t1 + 2].v.ob[2] = this->keyboard2Vtx[phi_t1 + 3].v.ob[2] = 0; + + this->keyboard2Vtx[phi_t1 + 0].v.flag = this->keyboard2Vtx[phi_t1 + 1].v.flag = + this->keyboard2Vtx[phi_t1 + 2].v.flag = this->keyboard2Vtx[phi_t1 + 3].v.flag = 0; + + this->keyboard2Vtx[phi_t1 + 0].v.tc[0] = this->keyboard2Vtx[phi_t1 + 0].v.tc[1] = + this->keyboard2Vtx[phi_t1 + 1].v.tc[1] = this->keyboard2Vtx[phi_t1 + 2].v.tc[0] = 0; + + this->keyboard2Vtx[phi_t1 + 1].v.tc[0] = this->keyboard2Vtx[phi_t1 + 3].v.tc[0] = D_80814410[phi_t3] << 5; + + this->keyboard2Vtx[phi_t1 + 2].v.tc[1] = this->keyboard2Vtx[phi_t1 + 3].v.tc[1] = 16 << 5; + + this->keyboard2Vtx[phi_t1 + 0].v.cn[0] = this->keyboard2Vtx[phi_t1 + 1].v.cn[0] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[0] = this->keyboard2Vtx[phi_t1 + 3].v.cn[0] = + this->keyboard2Vtx[phi_t1 + 0].v.cn[1] = this->keyboard2Vtx[phi_t1 + 1].v.cn[1] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[1] = this->keyboard2Vtx[phi_t1 + 3].v.cn[1] = + this->keyboard2Vtx[phi_t1 + 0].v.cn[2] = this->keyboard2Vtx[phi_t1 + 1].v.cn[2] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[2] = this->keyboard2Vtx[phi_t1 + 3].v.cn[2] = + this->keyboard2Vtx[phi_t1 + 0].v.cn[3] = this->keyboard2Vtx[phi_t1 + 1].v.cn[3] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[3] = this->keyboard2Vtx[phi_t1 + 3].v.cn[3] = + 255; + } +} + +TexturePtr sBackspaceEndTextures[] = { + gFileSelBackspaceButtonTex, + gFileSelENDButtonENGTex, +}; + +u16 sBackspaceEndWidths[] = { 28, 44 }; + +s16 D_80814434[] = { + -30, -16, -6, 4, 14, 24, 34, 44, 54, -16, -16, 0, +}; + +s16 D_8081444C[] = { + 72, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, +}; + +/** + * Set vertices used by all elements of the name entry screen that are NOT the keyboard. + * This includes the cursor highlight, the name entry plate and characters, and the buttons. + */ +void FileSelect_SetNameEntryVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Font* font = &this->font; + u8 temp; + s16 var_s0; + s16 var_t1; + s16 sp108; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gSPVertex(POLY_OPA_DISP++, this->keyboard2Vtx, 24, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelNameENGTex, G_IM_FMT_IA, G_IM_SIZ_8b, 56, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + gDPPipeSync(POLY_OPA_DISP++); + + for (var_t1 = 0, var_s0 = 0x10; var_t1 < 2; var_t1++, var_s0 += 4) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], 255); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sBackspaceEndTextures[var_t1], G_IM_FMT_IA, G_IM_SIZ_16b, + sBackspaceEndWidths[var_t1], 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); + gSP1Quadrangle(POLY_OPA_DISP++, var_s0, var_s0 + 2, var_s0 + 3, var_s0 + 1, 0); + } + + this->nameEntryVtx = GRAPH_ALLOC(this->state.gfxCtx, 44 * sizeof(Vtx)); + + for (var_s0 = 0, var_t1 = 0; var_t1 < 44; var_t1 += 4, var_s0++) { + if ((var_s0 > 0) && (var_s0 < 9)) { + temp = this->fileNames[this->buttonIndex][var_s0 - 1]; + + this->nameEntryVtx[var_t1 + 0].v.ob[0] = this->nameEntryVtx[var_t1 + 2].v.ob[0] = + D_80814434[var_s0] + this->nameEntryBoxPosX + D_80814280[temp]; + + this->nameEntryVtx[var_t1 + 1].v.ob[0] = this->nameEntryVtx[var_t1 + 3].v.ob[0] = + this->nameEntryVtx[var_t1 + 0].v.ob[0] + 10; + } else { + this->nameEntryVtx[var_t1 + 0].v.ob[0] = this->nameEntryVtx[var_t1 + 2].v.ob[0] = + D_80814434[var_s0] + this->nameEntryBoxPosX; + + this->nameEntryVtx[var_t1 + 1].v.ob[0] = this->nameEntryVtx[var_t1 + 3].v.ob[0] = + this->nameEntryVtx[var_t1 + 0].v.ob[0] + 10; + } + + this->nameEntryVtx[var_t1 + 0].v.ob[1] = this->nameEntryVtx[var_t1 + 1].v.ob[1] = D_8081444C[var_s0]; + + this->nameEntryVtx[var_t1 + 2].v.ob[1] = this->nameEntryVtx[var_t1 + 3].v.ob[1] = + this->nameEntryVtx[var_t1 + 0].v.ob[1] - 10; + + this->nameEntryVtx[var_t1 + 0].v.ob[2] = this->nameEntryVtx[var_t1 + 1].v.ob[2] = + this->nameEntryVtx[var_t1 + 2].v.ob[2] = this->nameEntryVtx[var_t1 + 3].v.ob[2] = 0; + + this->nameEntryVtx[var_t1 + 0].v.flag = this->nameEntryVtx[var_t1 + 1].v.flag = + this->nameEntryVtx[var_t1 + 2].v.flag = this->nameEntryVtx[var_t1 + 3].v.flag = 0; + + this->nameEntryVtx[var_t1 + 0].v.tc[0] = this->nameEntryVtx[var_t1 + 0].v.tc[1] = + this->nameEntryVtx[var_t1 + 1].v.tc[1] = this->nameEntryVtx[var_t1 + 2].v.tc[0] = 0; + + this->nameEntryVtx[var_t1 + 1].v.tc[0] = this->nameEntryVtx[var_t1 + 2].v.tc[1] = + this->nameEntryVtx[var_t1 + 3].v.tc[0] = this->nameEntryVtx[var_t1 + 3].v.tc[1] = 16 << 5; + + this->nameEntryVtx[var_t1 + 0].v.cn[0] = this->nameEntryVtx[var_t1 + 1].v.cn[0] = + this->nameEntryVtx[var_t1 + 2].v.cn[0] = this->nameEntryVtx[var_t1 + 3].v.cn[0] = + this->nameEntryVtx[var_t1 + 0].v.cn[1] = this->nameEntryVtx[var_t1 + 1].v.cn[1] = + this->nameEntryVtx[var_t1 + 2].v.cn[1] = this->nameEntryVtx[var_t1 + 3].v.cn[1] = + this->nameEntryVtx[var_t1 + 0].v.cn[2] = this->nameEntryVtx[var_t1 + 1].v.cn[2] = + this->nameEntryVtx[var_t1 + 2].v.cn[2] = this->nameEntryVtx[var_t1 + 3].v.cn[2] = + this->nameEntryVtx[var_t1 + 0].v.cn[3] = this->nameEntryVtx[var_t1 + 1].v.cn[3] = + this->nameEntryVtx[var_t1 + 2].v.cn[3] = this->nameEntryVtx[var_t1 + 3].v.cn[3] = + 255; + } + + this->nameEntryVtx[1].v.ob[0] = this->nameEntryVtx[3].v.ob[0] = this->nameEntryVtx[0].v.ob[0] + 0x6C; + this->nameEntryVtx[2].v.ob[1] = this->nameEntryVtx[3].v.ob[1] = this->nameEntryVtx[0].v.ob[1] - 0x10; + this->nameEntryVtx[1].v.tc[0] = this->nameEntryVtx[3].v.tc[0] = 108 << 5; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->nameEntryBoxAlpha); + gSPVertex(POLY_OPA_DISP++, this->nameEntryVtx, 4, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelFileNameBoxTex, G_IM_FMT_IA, G_IM_SIZ_16b, 108, 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); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + gSPVertex(POLY_OPA_DISP++, this->nameEntryVtx + 4, 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->nameEntryBoxAlpha); + + for (sp108 = 0, var_s0 = 0; var_s0 < 0x20; var_s0 += 4, sp108++) { + FileSelect_DrawTexQuadI4( + this->state.gfxCtx, font->fontBuf + this->fileNames[this->buttonIndex][sp108] * FONT_CHAR_TEX_SIZE, var_s0); + } + + this->nameEntryVtx[37].v.tc[0] = this->nameEntryVtx[38].v.tc[1] = this->nameEntryVtx[39].v.tc[0] = + this->nameEntryVtx[39].v.tc[1] = this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[42].v.tc[1] = + this->nameEntryVtx[43].v.tc[0] = this->nameEntryVtx[43].v.tc[1] = 24 << 5; + + if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) || + (this->kbdButton == FS_KBD_BTN_END)) { + this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[43].v.tc[0] = 56 << 5; + } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) { + this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[43].v.tc[0] = 40 << 5; + } + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_DrawKeyboard(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Font* font = &this->font; + s16 i; + s16 tmp; + s16 vtx; + + OPEN_DISPS(this->state.gfxCtx); + + Gfx_SetupDL42_Opa(this->state.gfxCtx); + gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, COMBINED, 0, + 0, 0, COMBINED); + gDPSetPrimColor(POLY_OPA_DISP++, 0, this->charBgAlpha, 255, 255, 255, 255); + + for (i = 0, vtx = 0; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + D_808141F0[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + D_808141F0[i] * FONT_CHAR_TEX_SIZE, 0); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_DrawNameEntry(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Font* font = &this->font; + Input* input = CONTROLLER1(&this->state); + s16 i; + s16 tmp; + u16 time; + s16 validName; + + OPEN_DISPS(this->state.gfxCtx); + + FileSelect_SetKeyboardVtx(&this->state); + FileSelect_SetNameEntryVtx(&this->state); + FileSelect_PulsateCursor(&this->state); + + tmp = (this->newFileNameCharCount * 4) + 4; + this->nameEntryVtx[36].v.ob[0] = this->nameEntryVtx[38].v.ob[0] = this->nameEntryVtx[tmp].v.ob[0] - 6; + this->nameEntryVtx[37].v.ob[0] = this->nameEntryVtx[39].v.ob[0] = this->nameEntryVtx[36].v.ob[0] + 24; + this->nameEntryVtx[36].v.ob[1] = this->nameEntryVtx[37].v.ob[1] = this->nameEntryVtx[tmp].v.ob[1] + 7; + this->nameEntryVtx[38].v.ob[1] = this->nameEntryVtx[39].v.ob[1] = this->nameEntryVtx[36].v.ob[1] - 24; + + if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) || + (this->kbdButton == FS_KBD_BTN_END)) { + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[0] - 4; + this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 52; + this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[1] + 4; + } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) { + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[0] - 4; + this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 40; + this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[1] + 4; + } else { + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboardVtx[this->charIndex * 4].v.ob[0] - D_80814304[this->charIndex] - 6; + this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 24; + this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = + this->keyboardVtx[this->charIndex * 4].v.ob[1] + 6; + } + + this->nameEntryVtx[42].v.ob[1] = this->nameEntryVtx[43].v.ob[1] = this->nameEntryVtx[40].v.ob[1] - 24; + + gSPVertex(POLY_OPA_DISP++, &this->nameEntryVtx[36], 8, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->highlightColor[0], this->highlightColor[1], this->highlightColor[2], + this->highlightColor[3]); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelCharHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 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); + + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) || + (this->kbdButton == FS_KBD_BTN_END)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelMediumButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 56, 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 ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelSmallButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 40, 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); + } + + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + + FileSelect_DrawKeyboard(&this->state); + gDPPipeSync(POLY_OPA_DISP++); + Gfx_SetupDL42_Opa(this->state.gfxCtx); + + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + if (this->configMode == CM_NAME_ENTRY) { + if (CHECK_BTN_ALL(input->press.button, BTN_START)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + // place cursor on END button + this->kbdY = 5; + this->kbdX = 4; + } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + if ((this->newFileNameCharCount == 7) && (this->fileNames[this->buttonIndex][7] != 0x3E)) { + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else { + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + this->configMode = CM_NAME_ENTRY_TO_MAIN; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else { + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } + } + } else { + if (this->charPage <= FS_CHAR_PAGE_ENG) { + if (this->kbdY != 5) { + // draw the character the cursor is hovering over in yellow + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, 255); + + //! @bug D_80814384 is accessed out of bounds when drawing the empty space character (value of 64). + //! Under normal circumstances it reads a halfword from D_80814404. + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 2].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] + D_80814384[this->charIndex] - 2; + + this->keyboardVtx[(this->charIndex * 4) + 1].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 3].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] + 0x10; + + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 1].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] + 2; + + this->keyboardVtx[(this->charIndex * 4) + 2].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 3].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] - 0x10; + + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[this->charIndex * 4], 4, 0); + + FileSelect_DrawTexQuadI4(this->state.gfxCtx, + font->fontBuf + D_808141F0[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); + + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + play_sound(NA_SE_SY_FSEL_DECIDE_S); + this->fileNames[this->buttonIndex][this->newFileNameCharCount] = D_808141F0[this->charIndex]; + + this->newFileNameCharCount++; + + if (this->newFileNameCharCount > 7) { + this->newFileNameCharCount = 7; + } + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + if (this->charPage != this->kbdButton) { + if (this->kbdButton == FS_KBD_BTN_BACKSPACE) { + if ((this->newFileNameCharCount == 7) && (this->fileNames[this->buttonIndex][7] != 0x3E)) { + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else { + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + } + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } + } else if (this->kbdButton == FS_KBD_BTN_END) { + validName = false; + + for (i = 0; i < 8; i++) { + if (this->fileNames[this->buttonIndex][i] != 0x3E) { + validName = true; + break; + } + } + + if (validName) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + gSaveContext.fileNum = this->buttonIndex; + time = ((void)0, gSaveContext.save.time); + Sram_InitSave(this, sramCtx); + gSaveContext.save.time = time; + + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_NAME_ENTRY_TO_MAIN; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->buttonIndex * 2], + gFlashSpecialSaveNumPages[this->buttonIndex * 2]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE; + } + + this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200; + this->connectorAlpha[this->buttonIndex] = 255; + Rumble_Request(300.0f, 180, 20, 100); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } + } + } + + if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->newFileNameCharCount++; + + if (this->newFileNameCharCount > 7) { + this->newFileNameCharCount = 7; + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + } + } + } + } + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + + CLOSE_DISPS(this->state.gfxCtx); +} + +/** + * Fade in the name entry box and slide it to the center of the screen from the right side. + * After the name entry box is in place, init the keyboard/cursor and change modes. + * Update function for `CM_START_NAME_ENTRY` + */ +void FileSelect_StartNameEntry(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->nameEntryBoxAlpha += 25; + + if (this->nameEntryBoxAlpha >= 255) { + this->nameEntryBoxAlpha = 255; + } + + this->nameEntryBoxPosX -= 30; + + if (this->nameEntryBoxPosX <= 0) { + this->nameEntryBoxPosX = 0; + this->nameEntryBoxAlpha = 255; + this->kbdX = 0; + this->kbdY = 0; + this->kbdButton = FS_KBD_BTN_NONE; + this->configMode = CM_NAME_ENTRY; + } +} + +/** + * Update the keyboard cursor and play sound effects at the appropriate times. + * There are many special cases for warping the cursor depending on where + * the cursor currently is. + * Update function for `CM_NAME_ENTRY` + */ +void FileSelect_UpdateKeyboardCursor(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 prevKbdX; + + this->kbdButton = FS_KBD_BTN_NONE; + + if (this->kbdY != 5) { + if (this->stickAdjX < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->charIndex--; + this->kbdX--; + if (this->kbdX < 0) { + this->kbdX = 12; + this->charIndex = (this->kbdY * 13) + this->kbdX; + } + } else if (this->stickAdjX > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->charIndex++; + this->kbdX++; + if (this->kbdX > 12) { + this->kbdX = 0; + this->charIndex = (this->kbdY * 13) + this->kbdX; + } + } + } else { + if (this->stickAdjX < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->kbdX--; + if (this->kbdX < 3) { + this->kbdX = 4; + } + } else if (this->stickAdjX > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->kbdX++; + if (this->kbdX > 4) { + this->kbdX = 3; + } + } + } + + if (this->stickAdjY > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + this->kbdY--; + + if (this->kbdY < 0) { + // Don't go to bottom row + if (this->kbdX < 8) { + this->kbdY = 4; + this->charIndex = (s32)(this->kbdX + 52); + } else { + this->kbdY = 5; + this->charIndex += 52; + prevKbdX = this->kbdX; + + if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + this->unk_2451E[this->kbdX] = prevKbdX; + } + } else { + this->charIndex -= 13; + + if (this->kbdY == 4) { + this->charIndex = 52; + this->kbdX = this->unk_2451E[this->kbdX]; + this->charIndex += this->kbdX; + } + } + } else if (this->stickAdjY < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->kbdY++; + + if (this->kbdY > 5) { + this->kbdY = 0; + this->kbdX = this->unk_2451E[this->kbdX]; + this->charIndex = this->kbdX; + } else { + this->charIndex += 13; + + if (this->kbdY == 5) { + if (this->kbdX < 8) { + this->kbdY = 0; + this->charIndex = this->kbdX; + } else { + prevKbdX = this->kbdX; + + if (this->kbdX < 3) { + this->kbdX = 0; + } else if (this->kbdX < 6) { + this->kbdX = 1; + } else if (this->kbdX < 8) { + this->kbdX = 2; + } else if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + this->unk_2451E[this->kbdX] = prevKbdX; + } + } + } + } + if (this->kbdY == 5) { + this->kbdButton = this->kbdX; + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_NameEntryWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_NAME_ENTRY_TO_MAIN; + } +} + +/** + * This function is mostly a copy paste of `FileSelect_StartNameEntry`. + * The name entry box fades and slides in even though it is not visible. + * After this is complete, change to the options config mode. + * Update function for `CM_START_OPTIONS` + */ +void FileSelect_StartOptions(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->nameEntryBoxAlpha += 25; + + if (this->nameEntryBoxAlpha >= 255) { + this->nameEntryBoxAlpha = 255; + } + + this->nameEntryBoxPosX -= 30; + + if (this->nameEntryBoxPosX <= 0) { + this->nameEntryBoxPosX = 0; + this->nameEntryBoxAlpha = 255; + this->configMode = CM_OPTIONS_MENU; + } +} + +u8 sSelectedSetting; +// bss padding +s32 D_80814E94; +s32 D_80814E98; +s32 D_80814E9C; +s32 D_80814EA0; + +/** + * Update the cursor and appropriate settings for the options menu. + * If the player presses B, write the selected options to the SRAM header + * and set config mode to rotate back to the main menu. + * Update function for `CM_OPTIONS_MENU` + */ +void FileSelect_UpdateOptionsMenu(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + Sram_WriteSaveOptionsToBuffer(sramCtx); + + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_OPTIONS_TO_MAIN; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[8], gFlashSpecialSaveNumPages[8]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_OPTIONS_WAIT_FOR_FLASH_SAVE; + } + func_801A3D98(gSaveContext.options.audioSetting); + return; + } + + if (this->stickAdjX < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + if (sSelectedSetting == FS_SETTING_AUDIO) { + gSaveContext.options.audioSetting--; + + // because audio setting is unsigned, can't check for < 0 + if (gSaveContext.options.audioSetting > 0xF0) { + gSaveContext.options.audioSetting = SAVE_AUDIO_SURROUND; + } + } else { + gSaveContext.options.zTargetSetting ^= 1; + } + } else if (this->stickAdjX > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + if (sSelectedSetting == FS_SETTING_AUDIO) { + gSaveContext.options.audioSetting++; + if (gSaveContext.options.audioSetting > SAVE_AUDIO_SURROUND) { + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; + } + } else { + gSaveContext.options.zTargetSetting ^= 1; + } + } + + if ((this->stickAdjY < -30) || (this->stickAdjY > 30)) { + play_sound(NA_SE_SY_FSEL_CURSOR); + sSelectedSetting ^= 1; + return; + } + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + sSelectedSetting ^= 1; + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_OPTIONS_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_OptionsWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_OPTIONS_TO_MAIN; + } +} + +typedef struct { + /* 0x0 */ TexturePtr texture; + /* 0x4 */ u16 width; + /* 0x6 */ u16 height; +} OptionsMenuTextureInfo; // size = 0x8 + +OptionsMenuTextureInfo gOptionsMenuHeaders[] = { + { gFileSelOptionsENGTex, 128, 16 }, { gFileSelSoundENGTex, 64, 16 }, + { gFileSelTargetingENGTex, 64, 16 }, { gFileSelCheckBrightnessENGTex, 96, 16 }, + { gFileSelDolbySurroundLogoENGTex, 48, 17 }, +}; + +OptionsMenuTextureInfo gOptionsMenuSettings[] = { + { gFileSelStereoENGTex, 48, 16 }, { gFileSelMonoENGTex, 48, 16 }, { gFileSelHeadsetENGTex, 48, 16 }, + { gFileSelSurroundENGTex, 48, 16 }, { gFileSelSwitchENGTex, 48, 16 }, { gFileSelHoldENGTex, 48, 16 }, +}; + +void FileSelect_DrawOptionsImpl(GameState* thisx) { + static s16 sCursorPrimRed = 255; + static s16 sCursorPrimGreen = 255; + static s16 sCursorPrimBlue = 255; + static s16 sCursorEnvRed = 0; + static s16 sCursorEnvGreen = 0; + static s16 sCursorEnvBlue = 0; + static s16 sCursorPulseDir = 1; + static s16 sCursorFlashTimer = 20; + static s16 sCursorPrimColors[][3] = { + { 255, 255, 255 }, + { 0, 255, 255 }, + }; + static s16 sCursorEnvColors[][3] = { + { 0, 0, 0 }, + { 0, 150, 150 }, + }; + FileSelectState* this = (FileSelectState*)thisx; + s16 cursorRedStep; + s16 cursorGreenStep; + s16 cursorBlueStep; + s16 i; + s16 j; + s16 vtx; + + OPEN_DISPS(this->state.gfxCtx); + + cursorRedStep = ABS_ALT(sCursorPrimRed - sCursorPrimColors[sCursorPulseDir][0]) / sCursorFlashTimer; + cursorGreenStep = ABS_ALT(sCursorPrimGreen - sCursorPrimColors[sCursorPulseDir][1]) / sCursorFlashTimer; + cursorBlueStep = ABS_ALT(sCursorPrimBlue - sCursorPrimColors[sCursorPulseDir][2]) / sCursorFlashTimer; + + if (sCursorPrimRed >= sCursorPrimColors[sCursorPulseDir][0]) { + sCursorPrimRed -= cursorRedStep; + } else { + sCursorPrimRed += cursorRedStep; + } + + if (sCursorPrimGreen >= sCursorPrimColors[sCursorPulseDir][1]) { + sCursorPrimGreen -= cursorGreenStep; + } else { + sCursorPrimGreen += cursorGreenStep; + } + + if (sCursorPrimBlue >= sCursorPrimColors[sCursorPulseDir][2]) { + sCursorPrimBlue -= cursorBlueStep; + } else { + sCursorPrimBlue += cursorBlueStep; + } + + cursorRedStep = ABS_ALT(sCursorEnvRed - sCursorEnvColors[sCursorPulseDir][0]) / sCursorFlashTimer; + cursorGreenStep = ABS_ALT(sCursorEnvGreen - sCursorEnvColors[sCursorPulseDir][1]) / sCursorFlashTimer; + cursorBlueStep = ABS_ALT(sCursorEnvBlue - sCursorEnvColors[sCursorPulseDir][2]) / sCursorFlashTimer; + + if (sCursorEnvRed >= sCursorEnvColors[sCursorPulseDir][0]) { + sCursorEnvRed -= cursorRedStep; + } else { + sCursorEnvRed += cursorRedStep; + } + + if (sCursorEnvGreen >= sCursorEnvColors[sCursorPulseDir][1]) { + sCursorEnvGreen -= cursorGreenStep; + } else { + sCursorEnvGreen += cursorGreenStep; + } + + if (sCursorEnvBlue >= sCursorEnvColors[sCursorPulseDir][2]) { + sCursorEnvBlue -= cursorBlueStep; + } else { + sCursorEnvBlue += cursorBlueStep; + } + + if (--sCursorFlashTimer == 0) { + sCursorPrimRed = sCursorPrimColors[sCursorPulseDir][0]; + sCursorPrimGreen = sCursorPrimColors[sCursorPulseDir][1]; + sCursorPrimBlue = sCursorPrimColors[sCursorPulseDir][2]; + + sCursorEnvRed = sCursorEnvColors[sCursorPulseDir][0]; + sCursorEnvGreen = sCursorEnvColors[sCursorPulseDir][1]; + sCursorEnvBlue = sCursorEnvColors[sCursorPulseDir][2]; + + sCursorFlashTimer = 20; + + if (++sCursorPulseDir > 1) { + sCursorPulseDir = 0; + } + } + + // blue divider lines + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelOptionsDividerTex, G_IM_FMT_IA, 256, 2, 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); + + Matrix_Push(); + Matrix_Translate(0.0f, 0.1f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_OPA_DISP++, gOptionsDividerTopVtx, 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + + Matrix_Push(); + Matrix_Translate(0.0f, 0.2f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_OPA_DISP++, gOptionsDividerMiddleVtx, 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + + Matrix_Push(); + Matrix_Translate(0.0f, 0.4f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_OPA_DISP++, gOptionsDividerBottomVtx, 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + + gSPVertex(POLY_OPA_DISP++, D_80813DF0, 32, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + + for (i = 0, vtx = 0; i < 5; i++, vtx += 4) { + if (i == 4) { + gDPPipeSync(POLY_OPA_DISP++); + if (gSaveContext.options.audioSetting == SAVE_AUDIO_SURROUND) { + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuHeaders[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b, + gOptionsMenuHeaders[i].width, gOptionsMenuHeaders[i].height, 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); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gSPVertex(POLY_OPA_DISP++, D_80813F30, 32, 0); + + for (i = 0, vtx = 0; i < 4; i++, vtx += 4) { + gDPPipeSync(POLY_OPA_DISP++); + if (i == gSaveContext.options.audioSetting) { + if (sSelectedSetting == FS_SETTING_AUDIO) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimRed, sCursorPrimGreen, sCursorPrimBlue, + this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvRed, sCursorEnvGreen, sCursorEnvBlue, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 120, 120, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuSettings[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b, + gOptionsMenuSettings[i].width, gOptionsMenuHeaders[i].height, 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); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + } + + for (; i < 6; i++, vtx += 4) { + gDPPipeSync(POLY_OPA_DISP++); + + if (i == (gSaveContext.options.zTargetSetting + 4)) { + if (sSelectedSetting == FS_SETTING_ZTARGET) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimRed, sCursorPrimGreen, sCursorPrimBlue, + this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvRed, sCursorEnvGreen, sCursorEnvBlue, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 120, 120, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuSettings[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b, + gOptionsMenuSettings[i].width, gOptionsMenuHeaders[i].height, 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); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + + // check brightness bars + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelBrightnessCheckTex, G_IM_FMT_IA, 96, 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); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 55, 55, 55, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 40, 40, 40, 255); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + + vtx += 4; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 30, 30, 30, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_DrawOptions(GameState* thisx) { + FileSelect_DrawOptionsImpl(thisx); +} diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c new file mode 100644 index 000000000..47619b66d --- /dev/null +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c @@ -0,0 +1,17 @@ +#include "z_file_select.h" + +// Vtx Data +#include "overlays/ovl_file_choose/ovl_file_choose.c" + +u8 D_808141F0[] = { + // 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' + /* Row 0 */ 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + // 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' + /* Row 1 */ 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, + // 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' + /* Row 2 */ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, + // 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' + /* Row 3 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, + // '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' '.' '-' ' ' + /* Row 4 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x40, 0x3F, 0x3E +}; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_select.h b/src/overlays/gamestates/ovl_file_choose/z_file_select.h new file mode 100644 index 000000000..7dcc72a9d --- /dev/null +++ b/src/overlays/gamestates/ovl_file_choose/z_file_select.h @@ -0,0 +1,327 @@ +#ifndef FILE_SELECT_H +#define FILE_SELECT_H + +#include "global.h" + +// `sramCtx->noFlashSaveBuf` is never allocated space, so should never be used +// Slot offsets are also based on OoT SaveContext sizes, and contains incorrect sizes from MM +// Macros appear to be remnant from OoT +#define NO_FLASH_GET_NEWF(sramCtx, slotNum, index) \ + (sramCtx->noFlashSaveBuf[gSramSlotOffsets[slotNum] + offsetof(SaveContext, save.saveInfo.playerData.newf[index])]) +#define NO_FLASH_SLOT_OCCUPIED(sramCtx, slotNum) \ + ((NO_FLASH_GET_NEWF(sramCtx, slotNum, 0) == 'Z') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 1) == 'E') || \ + (NO_FLASH_GET_NEWF(sramCtx, slotNum, 2) == 'L') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 3) == 'D') || \ + (NO_FLASH_GET_NEWF(sramCtx, slotNum, 4) == 'A') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 5) == '3')) + +#define GET_NEWF(fileSelect, slotNum, index) (fileSelect->newf[slotNum][index]) +#define SLOT_OCCUPIED(fileSelect, slotNum) \ + ((GET_NEWF(fileSelect, slotNum, 0) == 'Z') && (GET_NEWF(fileSelect, slotNum, 1) == 'E') && \ + (GET_NEWF(fileSelect, slotNum, 2) == 'L') && (GET_NEWF(fileSelect, slotNum, 3) == 'D') && \ + (GET_NEWF(fileSelect, slotNum, 4) == 'A') && (GET_NEWF(fileSelect, slotNum, 5) == '3')) + +// Init mode: Initial setup as the file select is starting up, fades and slides in various menu elements +// Config mode: Handles the bulk of the file select, various configuration tasks like picking a file, copy/erase, and the options menu +// Select mode: Displays the selected file with various details about it, and allows the player to confirm and open it +typedef enum { + /* 0 */ FS_MENU_MODE_INIT, + /* 1 */ FS_MENU_MODE_CONFIG, + /* 2 */ FS_MENU_MODE_SELECT +} MenuMode; + +typedef enum { + /* 0x00 */ CM_FADE_IN_START, + /* 0x01 */ CM_FADE_IN_END, + /* 0x02 */ CM_MAIN_MENU, + /* 0x03 */ CM_SETUP_COPY_SOURCE, + /* 0x04 */ CM_SELECT_COPY_SOURCE, + /* 0x05 */ CM_SETUP_COPY_DEST_1, + /* 0x06 */ CM_SETUP_COPY_DEST_2, + /* 0x07 */ CM_SELECT_COPY_DEST, + /* 0x08 */ CM_EXIT_TO_COPY_SOURCE_1, + /* 0x09 */ CM_EXIT_TO_COPY_SOURCE_2, + /* 0x0A */ CM_SETUP_COPY_CONFIRM_1, + /* 0x0B */ CM_SETUP_COPY_CONFIRM_2, + /* 0x0C */ CM_COPY_CONFIRM, + /* 0x0D */ CM_COPY_WAIT_FOR_FLASH_SAVE, + /* 0x0E */ CM_RETURN_TO_COPY_DEST, + /* 0x0F */ CM_COPY_ANIM_1, + /* 0x10 */ CM_COPY_ANIM_2, + /* 0x11 */ CM_COPY_ANIM_3, + /* 0x12 */ CM_COPY_ANIM_4, + /* 0x13 */ CM_COPY_ANIM_5, + /* 0x14 */ CM_COPY_RETURN_MAIN, + /* 0x15 */ CM_SETUP_ERASE_SELECT, + /* 0x16 */ CM_ERASE_SELECT, + /* 0x17 */ CM_SETUP_ERASE_CONFIRM_1, + /* 0x18 */ CM_SETUP_ERASE_CONFIRM_2, + /* 0x19 */ CM_ERASE_CONFIRM, + /* 0x1A */ CM_EXIT_TO_ERASE_SELECT_1, + /* 0x1B */ CM_EXIT_TO_ERASE_SELECT_2, + /* 0x1C */ CM_ERASE_ANIM_1, + /* 0x1D */ CM_ERASE_WAIT_FOR_FLASH_SAVE, + /* 0x1E */ CM_ERASE_ANIM_2, + /* 0x1F */ CM_ERASE_ANIM_3, + /* 0x20 */ CM_EXIT_ERASE_TO_MAIN, + /* 0x21 */ CM_UNUSED_31, + /* 0x22 */ CM_ROTATE_TO_NAME_ENTRY, + /* 0x23 */ CM_START_NAME_ENTRY, + /* 0x24 */ CM_NAME_ENTRY, + /* 0x25 */ CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE, + /* 0x26 */ CM_NAME_ENTRY_TO_MAIN, + /* 0x27 */ CM_MAIN_TO_OPTIONS, + /* 0x28 */ CM_START_OPTIONS, + /* 0x29 */ CM_OPTIONS_MENU, + /* 0x2A */ CM_OPTIONS_WAIT_FOR_FLASH_SAVE, + /* 0x2B */ CM_OPTIONS_TO_MAIN, + /* 0x2C */ CM_UNUSED_DELAY +} ConfigMode; + +typedef enum { + /* 0 */ SM_FADE_MAIN_TO_SELECT, + /* 1 */ SM_MOVE_FILE_TO_TOP, + /* 2 */ SM_FADE_IN_FILE_INFO, + /* 3 */ SM_CONFIRM_FILE, + /* 4 */ SM_FADE_OUT_FILE_INFO, + /* 5 */ SM_MOVE_FILE_TO_SLOT, + /* 6 */ SM_FADE_OUT, + /* 7 */ SM_LOAD_GAME +} SelectMode; + +typedef enum { + /* 0 */ FS_TITLE_SELECT_FILE, // "Please select a file." + /* 1 */ FS_TITLE_OPEN_FILE, // "Open this file?" + /* 2 */ FS_TITLE_COPY_FROM, // "Copy which file?" + /* 3 */ FS_TITLE_COPY_TO, // "Copy to which file?" + /* 4 */ FS_TITLE_COPY_CONFIRM, // "Are you sure?" + /* 5 */ FS_TITLE_COPY_COMPLETE, // "File copied." + /* 6 */ FS_TITLE_ERASE_FILE, // "Erase which file?" + /* 7 */ FS_TITLE_ERASE_CONFIRM, // "Are you sure?" + /* 8 */ FS_TITLE_ERASE_COMPLETE // "File erased." +} TitleLabel; + +typedef enum { + /* 0 */ FS_TITLE_CUR, + /* 1 */ FS_TITLE_NEXT +} TitleIndex; + +typedef enum { + /* -1 */ FS_WARNING_NONE = -1, + /* 0 */ FS_WARNING_NO_FILE_COPY, // "No file to copy." + /* 1 */ FS_WARNING_NO_FILE_ERASE, // "No file to erase." + /* 2 */ FS_WARNING_NO_EMPTY_FILES, // "There is no empty file." + /* 3 */ FS_WARNING_FILE_EMPTY, // "This is an empty file." + /* 4 */ FS_WARNING_FILE_IN_USE // "This file is in use." +} WarningLabel; + +typedef enum { + /* 0 */ FS_BTN_MAIN_FILE_1, + /* 1 */ FS_BTN_MAIN_FILE_2, + /* 2 */ FS_BTN_MAIN_FILE_3, + /* 3 */ FS_BTN_MAIN_COPY, + /* 4 */ FS_BTN_MAIN_ERASE, + /* 5 */ FS_BTN_MAIN_OPTIONS +} MainMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_COPY_FILE_1, + /* 1 */ FS_BTN_COPY_FILE_2, + /* 2 */ FS_BTN_COPY_FILE_3, + /* 3 */ FS_BTN_COPY_QUIT +} CopyMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_ERASE_FILE_1, + /* 1 */ FS_BTN_ERASE_FILE_2, + /* 2 */ FS_BTN_ERASE_FILE_3, + /* 3 */ FS_BTN_ERASE_QUIT +} EraseMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_SELECT_FILE_1, + /* 1 */ FS_BTN_SELECT_FILE_2, + /* 2 */ FS_BTN_SELECT_FILE_3, + /* 3 */ FS_BTN_SELECT_YES, + /* 4 */ FS_BTN_SELECT_QUIT +} SelectMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_CONFIRM_YES, + /* 1 */ FS_BTN_CONFIRM_QUIT +} ConfirmButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_ACTION_COPY, + /* 1 */ FS_BTN_ACTION_ERASE +} ActionButtonIndex; + +typedef enum { + /* 0 */ FS_SETTING_AUDIO, + /* 1 */ FS_SETTING_ZTARGET +} SettingIndex; + +typedef enum { + /* 0 */ FS_CHAR_PAGE_HIRA, + /* 1 */ FS_CHAR_PAGE_KATA, + /* 2 */ FS_CHAR_PAGE_ENG +} CharPage; + +typedef enum { + /* 0 */ FS_KBD_BTN_HIRA, + /* 1 */ FS_KBD_BTN_KATA, + /* 2 */ FS_KBD_BTN_ENG, + /* 3 */ FS_KBD_BTN_BACKSPACE, + /* 4 */ FS_KBD_BTN_END, + /* 99 */ FS_KBD_BTN_NONE = 99 +} KeyboardButton; + +typedef struct FileSelectState { + /* 0x00000 */ GameState state; + /* 0x000A4 */ Vtx* windowVtx; + /* 0x000A8 */ u8* staticSegment; + /* 0x000AC */ u8* parameterSegment; + /* 0x000B0 */ u8* titleSegment; + /* 0x000B8 */ View view; + /* 0x00220 */ SramContext sramCtx; + /* 0x00248 */ SkyboxContext skyboxCtx; + /* 0x00470 */ MessageContext msgCtx; + /* 0x12550 */ Font font; + /* 0x242E0 */ EnvironmentContext envCtx; + /* 0x243E0 */ UNK_TYPE1 pad243E0[0x4]; + /* 0x243E4 */ Vtx* windowContentVtx; + /* 0x243E8 */ Vtx* keyboardVtx; + /* 0x243EC */ Vtx* nameEntryVtx; + /* 0x243F0 */ Vtx* keyboard2Vtx; + /* 0x243F4 */ u8 newf[4][6]; + /* 0x2440C */ u16 threeDayResetCount[4]; + /* 0x24414 */ char fileNames[4][8]; + /* 0x24434 */ s16 healthCapacity[4]; + /* 0x2443C */ s16 health[4]; + /* 0x24444 */ u32 questItems[4]; + /* 0x24454 */ s8 defenseHearts[4]; + /* 0x24458 */ u16 time[4]; + /* 0x24460 */ s16 day[4]; + /* 0x24468 */ u8 isOwlSave[4]; + /* 0x2446C */ s16 rupees[4]; + /* 0x24474 */ u8 walletUpgrades[4]; + /* 0x24478 */ u8 maskCount[4]; + /* 0x2447C */ u8 heartPieceCount[4]; + /* 0x24480 */ s16 buttonIndex; // enum will depend on `ConfigMode` + /* 0x24482 */ s16 confirmButtonIndex; // see `ConfirmButtonIndex` enum + /* 0x24484 */ s16 menuMode; // see `MenuMode` enum + /* 0x24486 */ s16 configMode; // see `ConfigMode` enum + /* 0x24488 */ s16 prevConfigMode; // see `ConfigMode` enum + /* 0x2448A */ s16 nextConfigMode; // see `ConfigMode` enum + /* 0x2448C */ s16 selectMode; // see `SelectMode` enum + /* 0x2448E */ s16 selectedFileIndex; + /* 0x24490 */ UNK_TYPE1 pad24490[0x2]; + /* 0x24492 */ s16 fileNamesY[3]; + /* 0x24498 */ s16 actionTimer; + /* 0x2449A */ s16 buttonYOffsets[6]; + /* 0x244A6 */ s16 copyDestFileIndex; + /* 0x244A8 */ s16 warningLabel; + /* 0x244AA */ s16 warningButtonIndex; + /* 0x244AC */ s16 titleLabel; // see `TitleLabel` enum + /* 0x244AE */ s16 nextTitleLabel; // see `TitleLabel` enum + /* 0x244B0 */ s16 windowColor[3]; + /* 0x244B6 */ s16 titleAlpha[2]; // see `TitleIndex` enum + /* 0x244BA */ s16 windowAlpha; + /* 0x244BC */ s16 fileButtonAlpha[3]; + /* 0x244C2 */ s16 nameBoxAlpha[3]; + /* 0x244C8 */ s16 nameAlpha[3]; + /* 0x244CE */ s16 connectorAlpha[3]; + /* 0x244D4 */ s16 fileInfoAlpha[3]; + /* 0x244DA */ s16 actionButtonAlpha[2]; + /* 0x244DA */ s16 confirmButtonAlpha[2]; + /* 0x244E2 */ s16 optionButtonAlpha; + /* 0x244E4 */ s16 nameEntryBoxAlpha; + /* 0x244E6 */ s16 controlsAlpha; + /* 0x244E8 */ s16 emptyFileTextAlpha; + /* 0x244EA */ s16 highlightColor[4]; + /* 0x244F2 */ s16 highlightPulseDir; + /* 0x244F4 */ s16 unk_244F4; + /* 0x244F6 */ s16 confirmButtonTexIndices[2]; + /* 0x244FA */ s16 inputTimerX; + /* 0x244FC */ s16 inputTimerY; + /* 0x244FE */ s16 stickXDir; + /* 0x24500 */ s16 stickYDir; + /* 0x24502 */ s16 stickAdjX; + /* 0x24504 */ s16 stickAdjY; + /* 0x24506 */ s16 nameEntryBoxPosX; + /* 0x24508 */ s16 windowPosX; + /* 0x2450A */ s16 screenFillAlpha; + /* 0x2450C */ f32 windowRot; + /* 0x24510 */ s16 kbdButton; + /* 0x24512 */ s16 charPage; + /* 0x24514 */ s16 charBgAlpha; + /* 0x24516 */ s16 charIndex; + /* 0x24518 */ s16 kbdX; + /* 0x2451A */ s16 kbdY; + /* 0x2451C */ s16 newFileNameCharCount; + /* 0x2451E */ s16 unk_2451E[5]; + /* 0x24528 */ s16 highlightTimer; + /* 0x2452A */ s16 unk_2452A; + /* 0x2452C */ s16 unk_2452C[4]; + /* 0x24534 */ s16 unk_24534[4]; + /* 0x2453C */ s16 unk_2453C[4]; + /* 0x24544 */ s16 unk_24544[4]; + /* 0x2454C */ s16 unk_2454C; + /* 0x2454E */ s16 unk_2454E; + /* 0x24550 */ s16 unk_24550; +} FileSelectState; // size = 0x24558 + +void FileSelect_Init(GameState* thisx); +void FileSelect_Destroy(GameState* thisx); + +void FileSelect_PulsateCursor(GameState* thisx); +void FileSelect_DrawNameEntry(GameState* thisx); +void FileSelect_DrawOptions(GameState* thisx); +void FileSelect_DrawTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture, s16 point); + +// Copying Files +void FileSelect_SetupCopySource(GameState* thisx); +void FileSelect_SelectCopySource(GameState* thisx); +void FileSelect_SetupCopyDest1(GameState* thisx); +void FileSelect_SetupCopyDest2(GameState* thisx); +void FileSelect_SelectCopyDest(GameState* thisx); +void FileSelect_ExitToCopySource1(GameState* thisx); +void FileSelect_ExitToCopySource2(GameState* thisx); +void FileSelect_SetupCopyConfirm1(GameState* thisx); +void FileSelect_SetupCopyConfirm2(GameState* thisx); +void FileSelect_CopyConfirm(GameState* thisx); +void FileSelect_CopyWaitForFlashSave(GameState* thisx); +void FileSelect_ReturnToCopyDest(GameState* thisx); +void FileSelect_CopyAnim1(GameState* thisx); +void FileSelect_CopyAnim2(GameState* thisx); +void FileSelect_CopyAnim3(GameState* thisx); +void FileSelect_CopyAnim4(GameState* thisx); +void FileSelect_CopyAnim5(GameState* thisx); +void FileSelect_ExitCopyToMain(GameState* thisx); + +// Erasing Files +void FileSelect_SetupEraseSelect(GameState* thisx); +void FileSelect_EraseSelect(GameState* thisx); +void FileSelect_SetupEraseConfirm1(GameState* thisx); +void FileSelect_SetupEraseConfirm2(GameState* thisx); +void FileSelect_EraseConfirm(GameState* thisx); +void FileSelect_ExitToEraseSelect1(GameState* thisx); +void FileSelect_ExitToEraseSelect2(GameState* thisx); +void FileSelect_EraseAnim1(GameState* thisx); +void FileSelect_EraseWaitForFlashSave(GameState* thisx); +void FileSelect_EraseAnim2(GameState* thisx); +void FileSelect_EraseAnim3(GameState* thisx); +void FileSelect_ExitEraseToMain(GameState* thisx); + +// Entering Name +void FileSelect_StartNameEntry(GameState* thisx); +void FileSelect_UpdateKeyboardCursor(GameState* thisx); +void FileSelect_NameEntryWaitForFlashSave(GameState* thisx); + +// Selecting Options +void FileSelect_StartOptions(GameState* thisx); +void FileSelect_UpdateOptionsMenu(GameState* thisx); +void FileSelect_OptionsWaitForFlashSave(GameState* thisx); + +extern u8 D_808141F0[]; +extern s16 D_80814280[]; + +#endif diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 8e270b836..abde294e5 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -171,7 +171,7 @@ void ConsoleLogo_Init(GameState* thisx) { gSaveContext.fileNum = 0xFF; } - gSaveContext.unk_3F3F = true; + gSaveContext.flashSaveAvailable = true; Sram_Alloc(thisx, &this->sramCtx); this->ult = 0; this->timer = 20; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 1eb46728f..8517fdf20 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -285,7 +285,7 @@ void KaleidoScope_DrawInventoryEditorText(Gfx** gfxp) { GfxPrint_SetPos(&printer, 23, 22); GfxPrint_Printf(&printer, "%s", "セイ"); - // Life (double defence) + // Life (double defense) GfxPrint_SetPos(&printer, 4, 25); GfxPrint_Printf(&printer, "%s", "イ"); GfxPrint_SetPos(&printer, 4, 26); @@ -601,7 +601,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { counterDigits[1] += 21; } - // Double Defence + // Double Defense KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202); // Magic @@ -1048,16 +1048,13 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { // Dungeon Items slot = sCurSection - INV_EDITOR_SECTION_DUNGEON_ITEMS; if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - // Map - gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 4; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_MAP); } if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { - // Compass - gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 2; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_COMPASS); } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - // Boss Key - gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 1; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_BOSS_KEY); } } else if (sCurSection < INV_EDITOR_SECTION_DOUBLE_DEFENSE) { @@ -1077,7 +1074,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { } } else { - // Double Defence + // Double Defense if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT) || CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { gSaveContext.save.saveInfo.playerData.doubleDefense ^= 1; 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 9d210a728..64da25451 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 @@ -3060,12 +3060,12 @@ void KaleidoScope_Update(PlayState* play) { Play_SaveCycleSceneFlags(&play->state); gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; func_8014546C(sramCtx); - if (gSaveContext.unk_3F3F == 0) { + if (!gSaveContext.flashSaveAvailable) { pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5; } else { - func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum], - D_801C67F0[gSaveContext.fileNum]); - func_80147020(sramCtx); + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum], + gFlashSaveNumPages[gSaveContext.fileNum]); + Sram_StartWriteToFlashDefault(sramCtx); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_4; } sDelayTimer = 90; @@ -3327,11 +3327,12 @@ void KaleidoScope_Update(PlayState* play) { gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; gSaveContext.save.saveInfo.playerData.health = 0x30; func_8014546C(sramCtx); - if (gSaveContext.unk_3F3F == 0) { + if (!gSaveContext.flashSaveAvailable) { pauseCtx->state = PAUSE_STATE_GAMEOVER_8; } else { - func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum], D_801C67F0[gSaveContext.fileNum]); - func_80147020(sramCtx); + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum], + gFlashSaveNumPages[gSaveContext.fileNum]); + Sram_StartWriteToFlashDefault(sramCtx); pauseCtx->state = PAUSE_STATE_GAMEOVER_7; } sDelayTimer = 90; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4c65de06c..e4f96e594 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2802,21 +2802,21 @@ 0x8014546C:("func_8014546C",), 0x80145698:("func_80145698",), 0x801457CC:("func_801457CC",), - 0x80146580:("func_80146580",), - 0x80146628:("func_80146628",), + 0x80146580:("Sram_EraseSave",), + 0x80146628:("Sram_CopySave",), 0x80146AA0:("Sram_InitSave",), - 0x80146DF8:("func_80146DF8",), + 0x80146DF8:("Sram_WriteSaveOptionsToBuffer",), 0x80146E40:("Sram_InitSram",), 0x80146E70:("Sram_Alloc",), - 0x80146EBC:("func_80146EBC",), + 0x80146EBC:("Sram_SyncWriteToFlash",), 0x80146EE8:("Sram_SaveSpecialEnterClockTown",), 0x80146F5C:("Sram_SaveSpecialNewDay",), - 0x80147008:("func_80147008",), - 0x80147020:("func_80147020",), - 0x80147068:("func_80147068",), - 0x80147138:("func_80147138",), - 0x80147150:("func_80147150",), - 0x80147198:("func_80147198",), + 0x80147008:("Sram_SetFlashPagesDefault",), + 0x80147020:("Sram_StartWriteToFlashDefault",), + 0x80147068:("Sram_UpdateWriteToFlashDefault",), + 0x80147138:("Sram_SetFlashPagesOwlSave",), + 0x80147150:("Sram_StartWriteToFlashOwlSave",), + 0x80147198:("Sram_UpdateWriteToFlashOwlSave",), 0x80147314:("func_80147314",), 0x80147414:("func_80147414",), 0x8014750C:("Sram_nop8014750C",), @@ -4107,87 +4107,87 @@ 0x80803EC0:("TitleSetup_Main",), 0x80803F0C:("TitleSetup_Destroy",), 0x80803F30:("TitleSetup_Init",), - 0x80804010:("func_80804010",), - 0x808041A0:("func_808041A0",), - 0x80804654:("func_80804654",), - 0x808047D8:("func_808047D8",), - 0x8080489C:("func_8080489C",), - 0x80804DAC:("func_80804DAC",), - 0x80804E74:("func_80804E74",), - 0x80804F98:("func_80804F98",), - 0x8080525C:("func_8080525C",), - 0x808052B0:("func_808052B0",), - 0x808054A4:("func_808054A4",), - 0x808055D0:("func_808055D0",), - 0x808058A4:("func_808058A4",), - 0x80805918:("func_80805918",), - 0x80805A58:("func_80805A58",), - 0x80805B30:("func_80805B30",), - 0x80805C1C:("func_80805C1C",), - 0x80806014:("func_80806014",), - 0x80806148:("func_80806148",), - 0x80806310:("func_80806310",), - 0x808067E0:("func_808067E0",), - 0x80806BC8:("func_80806BC8",), - 0x80806CA0:("func_80806CA0",), - 0x80806E84:("func_80806E84",), - 0x80806F30:("func_80806F30",), - 0x808071E4:("func_808071E4",), - 0x80807390:("func_80807390",), - 0x8080742C:("func_8080742C",), - 0x808074B4:("func_808074B4",), - 0x808077AC:("func_808077AC",), - 0x80807940:("func_80807940",), - 0x80807A78:("func_80807A78",), - 0x80807C58:("func_80807C58",), - 0x80808214:("func_80808214",), - 0x80808D30:("func_80808D30",), - 0x80808F1C:("func_80808F1C",), - 0x80809DF0:("func_80809DF0",), - 0x80809EA0:("func_80809EA0",), - 0x8080A3CC:("func_8080A3CC",), - 0x8080A418:("func_8080A418",), - 0x8080A4A0:("func_8080A4A0",), - 0x8080A6BC:("func_8080A6BC",), - 0x8080A708:("func_8080A708",), - 0x8080BBFC:("func_8080BBFC",), - 0x8080BC20:("func_8080BC20",), - 0x8080BC44:("FileSelect_nop8080bc44",), - 0x8080BC4C:("FileSelect_nop8080BC4C",), - 0x8080BC58:("func_8080BC58",), - 0x8080BDAC:("func_8080BDAC",), - 0x8080BDDC:("FileSelect_RenderView",), - 0x8080BE60:("func_8080BE60",), - 0x8080C040:("func_8080C040",), - 0x8080C228:("func_8080C228",), - 0x8080C29C:("func_8080C29C",), - 0x8080C324:("func_8080C324",), - 0x8080C3A8:("func_8080C3A8",), - 0x8080D164:("func_8080D164",), - 0x8080D170:("func_8080D170",), - 0x8080D1BC:("func_8080D1BC",), - 0x8080D220:("func_8080D220",), - 0x8080D284:("func_8080D284",), - 0x8080D2EC:("func_8080D2EC",), - 0x8080D3D0:("func_8080D3D0",), - 0x8080D40C:("func_8080D40C",), - 0x8080D6D4:("func_8080D6D4",), - 0x8080F25C:("func_8080F25C",), - 0x808108DC:("func_808108DC",), - 0x80811CB8:("func_80811CB8",), - 0x80812460:("func_80812460",), - 0x80812668:("func_80812668",), - 0x80812760:("func_80812760",), - 0x80812840:("func_80812840",), - 0x80812980:("func_80812980",), - 0x80812A6C:("func_80812A6C",), - 0x80812D44:("func_80812D44",), - 0x80812D94:("func_80812D94",), - 0x80812E94:("func_80812E94",), - 0x80812ED0:("func_80812ED0",), + 0x80804010:("FileSelect_SetupCopySource",), + 0x808041A0:("FileSelect_SelectCopySource",), + 0x80804654:("FileSelect_SetupCopyDest1",), + 0x808047D8:("FileSelect_SetupCopyDest2",), + 0x8080489C:("FileSelect_SelectCopyDest",), + 0x80804DAC:("FileSelect_ExitToCopySource1",), + 0x80804E74:("FileSelect_ExitToCopySource2",), + 0x80804F98:("FileSelect_SetupCopyConfirm1",), + 0x8080525C:("FileSelect_SetupCopyConfirm2",), + 0x808052B0:("FileSelect_CopyConfirm",), + 0x808054A4:("FileSelect_CopyWaitForFlashSave",), + 0x808055D0:("FileSelect_ReturnToCopyDest",), + 0x808058A4:("FileSelect_CopyAnim1",), + 0x80805918:("FileSelect_CopyAnim2",), + 0x80805A58:("FileSelect_CopyAnim3",), + 0x80805B30:("FileSelect_CopyAnim4",), + 0x80805C1C:("FileSelect_CopyAnim5",), + 0x80806014:("FileSelect_ExitCopyToMain",), + 0x80806148:("FileSelect_SetupEraseSelect",), + 0x80806310:("FileSelect_EraseSelect",), + 0x808067E0:("FileSelect_SetupEraseConfirm1",), + 0x80806BC8:("FileSelect_SetupEraseConfirm2",), + 0x80806CA0:("FileSelect_EraseConfirm",), + 0x80806E84:("FileSelect_ExitToEraseSelect1",), + 0x80806F30:("FileSelect_ExitToEraseSelect2",), + 0x808071E4:("FileSelect_EraseAnim1",), + 0x80807390:("FileSelect_EraseWaitForFlashSave",), + 0x8080742C:("FileSelect_EraseAnim2",), + 0x808074B4:("FileSelect_EraseAnim3",), + 0x808077AC:("FileSelect_ExitEraseToMain",), + 0x80807940:("FileSelect_DrawTexQuadI4",), + 0x80807A78:("FileSelect_DrawMultiTexQuadI4",), + 0x80807C58:("FileSelect_SetKeyboardVtx",), + 0x80808214:("FileSelect_SetNameEntryVtx",), + 0x80808D30:("FileSelect_DrawKeyboard",), + 0x80808F1C:("FileSelect_DrawNameEntry",), + 0x80809DF0:("FileSelect_StartNameEntry",), + 0x80809EA0:("FileSelect_UpdateKeyboardCursor",), + 0x8080A3CC:("FileSelect_NameEntryWaitForFlashSave",), + 0x8080A418:("FileSelect_StartOptions",), + 0x8080A4A0:("FileSelect_UpdateOptionsMenu",), + 0x8080A6BC:("FileSelect_OptionsWaitForFlashSave",), + 0x8080A708:("FileSelect_DrawOptionsImpl",), + 0x8080BBFC:("FileSelect_DrawOptions",), + 0x8080BC20:("FileSelect_IncrementConfigMode",), + 0x8080BC44:("FileSelect_Noop1",), + 0x8080BC4C:("FileSelect_Noop2",), + 0x8080BC58:("FileSelect_InitModeUpdate",), + 0x8080BDAC:("FileSelect_InitModeDraw",), + 0x8080BDDC:("FileSelect_SetView",), + 0x8080BE60:("FileSelect_DrawTexQuadIA8",), + 0x8080C040:("FileSelect_FadeInMenuElements",), + 0x8080C228:("FileSelect_SplitNumber",), + 0x8080C29C:("FileSelect_StartFadeIn",), + 0x8080C324:("FileSelect_FinishFadeIn",), + 0x8080C3A8:("FileSelect_UpdateMainMenu",), + 0x8080D164:("FileSelect_UnusedCM31",), + 0x8080D170:("FileSelect_UnusedCMDelay",), + 0x8080D1BC:("FileSelect_RotateToNameEntry",), + 0x8080D220:("FileSelect_RotateToOptions",), + 0x8080D284:("FileSelect_RotateToMain",), + 0x8080D2EC:("FileSelect_PulsateCursor",), + 0x8080D3D0:("FileSelect_ConfigModeUpdate",), + 0x8080D40C:("FileSelect_SetWindowVtx",), + 0x8080D6D4:("FileSelect_SetWindowContentVtx",), + 0x8080F25C:("FileSelect_DrawFileInfo",), + 0x808108DC:("FileSelect_DrawWindowContents",), + 0x80811CB8:("FileSelect_ConfigModeDraw",), + 0x80812460:("FileSelect_FadeMainToSelect",), + 0x80812668:("FileSelect_MoveSelectedFileToTop",), + 0x80812760:("FileSelect_FadeInFileInfo",), + 0x80812840:("FileSelect_ConfirmFile",), + 0x80812980:("FileSelect_FadeOutFileInfo",), + 0x80812A6C:("FileSelect_MoveSelectedFileToSlot",), + 0x80812D44:("FileSelect_FadeOut",), + 0x80812D94:("FileSelect_LoadGame",), + 0x80812E94:("FileSelect_SelectModeUpdate",), + 0x80812ED0:("FileSelect_SelectModeDraw",), 0x8081313C:("FileSelect_UpdateAndDrawSkybox",), 0x80813268:("FileSelect_Main",), - 0x80813908:("func_80813908",), + 0x80813908:("FileSelect_InitContext",), 0x80813C74:("FileSelect_Destroy",), 0x80813C98:("FileSelect_Init",), 0x80814EB0:("DayTelop_Update",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index daa6aff8f..3a14118c5 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1927,14 +1927,14 @@ 0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4), 0x801C5FC0:("sPersistentCycleFlags","u32","[452]",0x710), 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2), - 0x801C6798:("D_801C6798","UNK_TYPE4","",0x4), + 0x801C6798:("gSramSlotOffsets","UNK_TYPE4","",0x4), 0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1), - 0x801C67C8:("D_801C67C8","s32","[10]",0x28), - 0x801C67F0:("D_801C67F0","s32","[10]",0x28), - 0x801C6818:("D_801C6818","s32","[10]",0x28), - 0x801C6840:("D_801C6840","UNK_TYPE1","",0x1), - 0x801C6850:("D_801C6850","UNK_TYPE1","",0x1), - 0x801C6870:("D_801C6870","UNK_TYPE1","",0x1), + 0x801C67C8:("gFlashSaveStartPages","s32","[10]",0x28), + 0x801C67F0:("gFlashSaveNumPages","s32","[10]",0x28), + 0x801C6818:("gFlashSpecialSaveNumPages","s32","[10]",0x28), + 0x801C6840:("gFlashOwlSaveStartPages","UNK_TYPE1","",0x1), + 0x801C6850:("gFlashOwlSaveNumPages","UNK_TYPE1","",0x1), + 0x801C6870:("gFlashSaveSizes","UNK_TYPE1","",0x1), 0x801C6890:("D_801C6890","UNK_TYPE1","",0x1), 0x801C6898:("sSaveDefaultPlayerData","SavePlayerData","",0x28), 0x801C68C0:("sSaveDefaultItemEquips","ItemEquips","",0x22), @@ -4544,13 +4544,13 @@ 0x80803FC8:("openingCutscenes","u32","[2]",0x8), 0x80813DF0:("D_80813DF0","UNK_TYPE1","",0x1), 0x80813F30:("D_80813F30","UNK_TYPE1","",0x1), - 0x80814130:("D_80814130","UNK_TYPE1","",0x1), - 0x80814170:("D_80814170","UNK_TYPE1","",0x1), - 0x808141B0:("D_808141B0","UNK_TYPE1","",0x1), + 0x80814130:("gOptionsDividerTopVtx","UNK_TYPE1","",0x1), + 0x80814170:("gOptionsDividerMiddleVtx","UNK_TYPE1","",0x1), + 0x808141B0:("gOptionsDividerBottomVtx","UNK_TYPE1","",0x1), 0x808141F0:("D_808141F0","UNK_TYPE1","",0x1), - 0x80814240:("D_80814240","UNK_TYPE2","",0x2), + 0x80814240:("sChooseFileYOffsets","UNK_TYPE2","",0x2), 0x8081424C:("D_8081424C","UNK_TYPE2","",0x2), - 0x80814260:("D_80814260","UNK_TYPE2","",0x2), + 0x80814260:("sEraseDelayTimer","UNK_TYPE2","",0x2), 0x80814264:("D_80814264","UNK_TYPE2","",0x2), 0x8081426C:("D_8081426C","UNK_TYPE1","",0x1), 0x80814280:("D_80814280","UNK_TYPE1","",0x1), @@ -4559,31 +4559,31 @@ 0x80814404:("D_80814404","UNK_TYPE2","",0x2), 0x80814410:("D_80814410","UNK_TYPE2","",0x2), 0x8081441C:("D_8081441C","UNK_TYPE2","",0x2), - 0x80814428:("D_80814428","UNK_TYPE4","",0x4), - 0x80814430:("D_80814430","UNK_TYPE2","",0x2), + 0x80814428:("sBackspaceEndTextures","UNK_TYPE4","",0x4), + 0x80814430:("sBackspaceEndWidths","UNK_TYPE2","",0x2), 0x80814434:("D_80814434","UNK_TYPE2","",0x2), 0x8081444C:("D_8081444C","UNK_TYPE1","",0x1), - 0x80814464:("D_80814464","UNK_TYPE4","",0x4), - 0x8081448C:("D_8081448C","UNK_TYPE4","",0x4), - 0x808144BC:("D_808144BC","UNK_TYPE2","",0x2), - 0x808144C0:("D_808144C0","UNK_TYPE2","",0x2), - 0x808144C4:("D_808144C4","UNK_TYPE2","",0x2), - 0x808144C8:("D_808144C8","UNK_TYPE2","",0x2), - 0x808144CC:("D_808144CC","UNK_TYPE2","",0x2), - 0x808144D0:("D_808144D0","UNK_TYPE2","",0x2), - 0x808144D4:("D_808144D4","UNK_TYPE2","",0x2), - 0x808144D8:("D_808144D8","UNK_TYPE2","",0x2), - 0x808144DC:("D_808144DC","UNK_TYPE1","",0x1), - 0x808144E8:("D_808144E8","UNK_TYPE1","",0x1), - 0x80814510:("D_80814510","Gfx","[5]",0x28), - 0x80814538:("D_80814538","UNK_TYPE2","",0x2), - 0x80814548:("D_80814548","UNK_TYPE2","",0x2), - 0x80814550:("fileChooseSkyboxRotation","s16","",0x2), - 0x80814554:("D_80814554","UNK_TYPE1","",0x1), - 0x8081455C:("D_8081455C","UNK_TYPE1","",0x1), + 0x80814464:("gOptionsMenuHeaders","UNK_TYPE4","",0x4), + 0x8081448C:("gOptionsMenuSettings","UNK_TYPE4","",0x4), + 0x808144BC:("sCursorPrimRed","UNK_TYPE2","",0x2), + 0x808144C0:("sCursorPrimGreen","UNK_TYPE2","",0x2), + 0x808144C4:("sCursorPrimBlue","UNK_TYPE2","",0x2), + 0x808144C8:("sCursorEnvRed","UNK_TYPE2","",0x2), + 0x808144CC:("sCursorEnvGreen","UNK_TYPE2","",0x2), + 0x808144D0:("sCursorEnvBlue","UNK_TYPE2","",0x2), + 0x808144D4:("sCursorPulseDir","UNK_TYPE2","",0x2), + 0x808144D8:("sCursorFlashTimer","UNK_TYPE2","",0x2), + 0x808144DC:("sCursorPrimColors","UNK_TYPE1","",0x1), + 0x808144E8:("sCursorEnvColors","UNK_TYPE1","",0x1), + 0x80814510:("sScreenFillSetupDL","Gfx","[5]",0x28), + 0x80814538:("sFileInfoBoxPartWidths","UNK_TYPE2","",0x2), + 0x80814548:("sWindowContentColors","UNK_TYPE2","",0x2), + 0x80814550:("sFileSelectSkyboxRotation","s16","",0x2), + 0x80814554:("sWalletFirstDigit","UNK_TYPE1","",0x1), + 0x8081455C:("sEmptyName","UNK_TYPE1","",0x1), 0x80814564:("D_80814564","UNK_TYPE2","",0x2), - 0x80814568:("D_80814568","UNK_TYPE","[45]",0xb4), - 0x8081461C:("D_8081461C","s16","[2]",0x4), + 0x80814568:("sConfigModeUpdateFuncs","UNK_TYPE","[45]",0xb4), + 0x8081461C:("sCursorAlphaTargets","s16","[2]",0x4), 0x80814620:("D_80814620","UNK_TYPE2","",0x2), 0x80814628:("D_80814628","UNK_TYPE2","",0x2), 0x80814630:("D_80814630","UNK_TYPE2","",0x2), @@ -4592,24 +4592,24 @@ 0x8081464C:("D_8081464C","UNK_TYPE1","",0x1), 0x80814650:("D_80814650","UNK_TYPE1","",0x1), 0x80814654:("D_80814654","UNK_TYPE1","",0x1), - 0x8081465C:("D_8081465C","UNK_TYPE4","",0x4), - 0x8081466C:("D_8081466C","UNK_TYPE1","",0x1), - 0x8081467C:("D_8081467C","UNK_TYPE1","",0x1), - 0x8081468C:("D_8081468C","UNK_TYPE4","",0x4), - 0x808146B4:("D_808146B4","UNK_TYPE1","",0x1), - 0x808146C4:("D_808146C4","UNK_TYPE1","",0x1), - 0x808146D8:("D_808146D8","UNK_TYPE1","",0x1), - 0x808146EC:("D_808146EC","UNK_TYPE2","",0x2), - 0x808146F8:("D_808146F8","UNK_TYPE2","",0x2), - 0x80814704:("D_80814704","UNK_TYPE4","",0x4), - 0x80814720:("D_80814720","UNK_TYPE1","",0x1), - 0x80814744:("D_80814744","UNK_TYPE1","",0x1), - 0x80814758:("D_80814758","UNK_TYPE4","",0x4), - 0x80814764:("D_80814764","UNK_TYPE4","",0x4), - 0x80814774:("D_80814774","UNK_TYPE1","",0x1), - 0x8081477C:("D_8081477C","UNK_TYPE","[8]",0x20), - 0x8081479C:("D_8081479C","UNK_TYPE","[3]",0xc), - 0x808147A8:("D_808147A8","UNK_TYPE","[3]",0xc), + 0x8081465C:("sFileSelRemainsTextures","UNK_TYPE4","",0x4), + 0x8081466C:("sFileSelDayENGTextures","UNK_TYPE1","",0x1), + 0x8081467C:("sFileSelHeartPieceTextures","UNK_TYPE1","",0x1), + 0x8081468C:("sHeartTextures","UNK_TYPE4","",0x4), + 0x808146B4:("sHealthToQuarterHeartCount","UNK_TYPE1","",0x1), + 0x808146C4:("sFileSelRupeePrimColors","UNK_TYPE1","",0x1), + 0x808146D8:("sFileSelRupeeEnvColors","UNK_TYPE1","",0x1), + 0x808146EC:("sHeartPrimColors","UNK_TYPE2","",0x2), + 0x808146F8:("sHeartEnvColors","UNK_TYPE2","",0x2), + 0x80814704:("sFileInfoBoxTextures","UNK_TYPE4","",0x4), + 0x80814720:("sTitleLabels","UNK_TYPE1","",0x1), + 0x80814744:("sWarningLabels","UNK_TYPE1","",0x1), + 0x80814758:("sFileButtonTextures","UNK_TYPE4","",0x4), + 0x80814764:("sActionButtonTextures","UNK_TYPE4","",0x4), + 0x80814774:("sFileYOffsets","UNK_TYPE1","",0x1), + 0x8081477C:("sSelectModeUpdateFuncs","UNK_TYPE","[8]",0x20), + 0x8081479C:("gFileSelectDrawFuncs","UNK_TYPE","[3]",0xc), + 0x808147A8:("gFileSelectUpdateFuncs","UNK_TYPE","[3]",0xc), 0x808147B4:("D_808147B4","UNK_TYPE4","",0x4), 0x808147C0:("D_808147C0","UNK_TYPE2","",0x2), 0x808147C8:("D_808147C8","UNK_TYPE2","",0x2), @@ -4622,7 +4622,7 @@ 0x808147EC:("D_808147EC","f32","",0x4), 0x808147F0:("D_808147F0","f32","",0x4), 0x80814E80:("D_80814E80","UNK_TYPE1","",0x1), - 0x80814E90:("D_80814E90","UNK_TYPE1","",0x1), + 0x80814E90:("sSelectedSetting","UNK_TYPE1","",0x1), 0x80815FF0:("D_80815FF0","u8","",0x1), 0x80815FF4:("sDayLeftTextures","TexturePtr","[4]",0x10), 0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 6713041f7..3d5839a69 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2316,21 +2316,21 @@ asm/non_matchings/code/z_sram_NES/Sram_OpenSave.s,Sram_OpenSave,0x80144E78,0x17D asm/non_matchings/code/z_sram_NES/func_8014546C.s,func_8014546C,0x8014546C,0x8B asm/non_matchings/code/z_sram_NES/func_80145698.s,func_80145698,0x80145698,0x4D asm/non_matchings/code/z_sram_NES/func_801457CC.s,func_801457CC,0x801457CC,0x36D -asm/non_matchings/code/z_sram_NES/func_80146580.s,func_80146580,0x80146580,0x2A -asm/non_matchings/code/z_sram_NES/func_80146628.s,func_80146628,0x80146628,0x11E +asm/non_matchings/code/z_sram_NES/Sram_EraseSave.s,Sram_EraseSave,0x80146580,0x2A +asm/non_matchings/code/z_sram_NES/Sram_CopySave.s,Sram_CopySave,0x80146628,0x11E asm/non_matchings/code/z_sram_NES/Sram_InitSave.s,Sram_InitSave,0x80146AA0,0xD6 -asm/non_matchings/code/z_sram_NES/func_80146DF8.s,func_80146DF8,0x80146DF8,0x12 +asm/non_matchings/code/z_sram_NES/Sram_WriteSaveOptionsToBuffer.s,Sram_WriteSaveOptionsToBuffer,0x80146DF8,0x12 asm/non_matchings/code/z_sram_NES/Sram_InitSram.s,Sram_InitSram,0x80146E40,0xC asm/non_matchings/code/z_sram_NES/Sram_Alloc.s,Sram_Alloc,0x80146E70,0x13 -asm/non_matchings/code/z_sram_NES/func_80146EBC.s,func_80146EBC,0x80146EBC,0xB +asm/non_matchings/code/z_sram_NES/Sram_SyncWriteToFlash.s,Sram_SyncWriteToFlash,0x80146EBC,0xB asm/non_matchings/code/z_sram_NES/Sram_SaveSpecialEnterClockTown.s,Sram_SaveSpecialEnterClockTown,0x80146EE8,0x1D asm/non_matchings/code/z_sram_NES/Sram_SaveSpecialNewDay.s,Sram_SaveSpecialNewDay,0x80146F5C,0x2B -asm/non_matchings/code/z_sram_NES/func_80147008.s,func_80147008,0x80147008,0x6 -asm/non_matchings/code/z_sram_NES/func_80147020.s,func_80147020,0x80147020,0x12 -asm/non_matchings/code/z_sram_NES/func_80147068.s,func_80147068,0x80147068,0x34 -asm/non_matchings/code/z_sram_NES/func_80147138.s,func_80147138,0x80147138,0x6 -asm/non_matchings/code/z_sram_NES/func_80147150.s,func_80147150,0x80147150,0x12 -asm/non_matchings/code/z_sram_NES/func_80147198.s,func_80147198,0x80147198,0x5F +asm/non_matchings/code/z_sram_NES/Sram_SetFlashPagesDefault.s,Sram_SetFlashPagesDefault,0x80147008,0x6 +asm/non_matchings/code/z_sram_NES/Sram_StartWriteToFlashDefault.s,Sram_StartWriteToFlashDefault,0x80147020,0x12 +asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashDefault.s,Sram_UpdateWriteToFlashDefault,0x80147068,0x34 +asm/non_matchings/code/z_sram_NES/Sram_SetFlashPagesOwlSave.s,Sram_SetFlashPagesOwlSave,0x80147138,0x6 +asm/non_matchings/code/z_sram_NES/Sram_StartWriteToFlashOwlSave.s,Sram_StartWriteToFlashOwlSave,0x80147150,0x12 +asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashOwlSave.s,Sram_UpdateWriteToFlashOwlSave,0x80147198,0x5F 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 From f92a61db27ed8ee213072df11169777c6794bc1b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 6 Jun 2023 08:57:45 +1000 Subject: [PATCH 47/51] Misc Cleanup 3 (#1268) * begin more cleanup * more enums * typo * == * fix go.h * fix RaceDogInfo struct * PR Review * PR Suggestions * missed one * missed even more * fix params * fix number --- Makefile | 4 +-- include/z64.h | 18 +++++----- include/z64actor.h | 2 +- include/z64audio.h | 2 +- include/z64camera.h | 2 +- include/z64item.h | 2 +- include/z64math.h | 4 +-- include/z64player.h | 2 +- include/z64save.h | 4 +-- include/z64schedule.h | 4 +-- include/z64transition.h | 2 +- include/z_fireobj.h | 2 +- src/audio/code_8019AF00.c | 6 ++-- src/audio/lib/heap.c | 10 +++--- src/audio/lib/load.c | 8 ++--- src/boot_O2_g3/yaz0.c | 10 +++--- src/code/sys_cmpdma.c | 4 +-- src/code/z_draw.c | 6 ++-- src/code/z_eventmgr.c | 2 +- src/code/z_fbdemo_circle.c | 2 +- src/code/z_parameter.c | 10 +++--- src/code/z_player_lib.c | 8 ++--- src/code/z_room.c | 8 ++--- src/libultra/flash/osFlash.c | 4 +-- src/libultra/os/initialize.c | 10 +++--- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.h | 6 ++-- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h | 8 ++--- .../ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h | 2 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 6 ++-- .../actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h | 6 ++-- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 6 ++-- .../z_bg_hakugin_switch.c | 2 +- .../z_bg_ikana_rotaryroom.c | 6 ++-- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h | 10 +++--- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.h | 2 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.h | 4 +-- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h | 2 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 4 +-- .../actors/ovl_Bg_Umajump/z_bg_umajump.h | 12 +++---- src/overlays/actors/ovl_Boss_02/z_boss_02.h | 6 ++-- src/overlays/actors/ovl_Boss_03/z_boss_03.h | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.h | 4 +-- .../actors/ovl_Demo_Moonend/z_demo_moonend.c | 4 +-- .../actors/ovl_Demo_Moonend/z_demo_moonend.h | 2 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.h | 4 +-- .../actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 14 ++++---- src/overlays/actors/ovl_Dm_Al/z_dm_al.h | 4 +-- .../actors/ovl_Dm_Char01/z_dm_char01.h | 6 ++-- .../actors/ovl_Dm_Char02/z_dm_char02.c | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.h | 6 ++-- .../actors/ovl_Dm_Char08/z_dm_char08.c | 6 ++-- .../actors/ovl_Dm_Opstage/z_dm_opstage.h | 2 +- .../actors/ovl_Dm_Ravine/z_dm_ravine.h | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 10 +++--- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h | 2 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 8 ++--- .../actors/ovl_Door_Shutter/z_door_shutter.c | 10 +++--- .../actors/ovl_Door_Warp1/z_door_warp1.h | 6 ++-- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h | 12 +++---- .../z_eff_kamejima_wave.c | 2 +- .../z_eff_kamejima_wave.h | 8 ++--- .../actors/ovl_Eff_Lastday/z_eff_lastday.c | 26 +++++++------- .../actors/ovl_Eff_Lastday/z_eff_lastday.h | 12 +++---- .../ovl_En_Akindonuts/z_en_akindonuts.h | 6 ++-- src/overlays/actors/ovl_En_Ani/z_en_ani.h | 8 ++--- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 4 +-- src/overlays/actors/ovl_En_Az/z_en_az.c | 2 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 12 +++---- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 4 +-- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +-- src/overlays/actors/ovl_En_Bee/z_en_bee.h | 4 +-- .../actors/ovl_En_Bigpamet/z_en_bigpamet.h | 6 ++-- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 10 +++--- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 2 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 8 ++--- .../actors/ovl_En_Bombers/z_en_bombers.h | 6 ++-- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 6 ++-- .../actors/ovl_En_Bomjimb/z_en_bomjimb.h | 12 +++---- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 2 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.h | 2 +- src/overlays/actors/ovl_En_Cow/z_en_cow.h | 6 ++-- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 30 ++++++++-------- src/overlays/actors/ovl_En_Daiku/z_en_daiku.h | 12 +++---- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 6 ++-- .../actors/ovl_En_Dekunuts/z_en_dekunuts.h | 4 +-- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 10 +++--- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 12 +++---- src/overlays/actors/ovl_En_Dg/z_en_dg.h | 4 +-- src/overlays/actors/ovl_En_Dnk/z_en_dnk.h | 14 ++++---- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 2 +- src/overlays/actors/ovl_En_Dno/z_en_dno.h | 4 +-- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 2 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.h | 6 ++-- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.h | 12 +++---- src/overlays/actors/ovl_En_Door/z_en_door.c | 10 +++--- src/overlays/actors/ovl_En_Door/z_en_door.h | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 6 ++-- .../actors/ovl_En_Dragon/z_en_dragon.h | 2 +- .../actors/ovl_En_Egblock/z_en_egblock.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 10 +++--- src/overlays/actors/ovl_En_Elf/z_en_elf.h | 16 ++++----- .../actors/ovl_En_Elfgrp/z_en_elfgrp.h | 6 ++-- .../actors/ovl_En_Encount1/z_en_encount1.h | 2 +- .../actors/ovl_En_Encount4/z_en_encount4.c | 6 ++-- .../actors/ovl_En_Estone/z_en_estone.h | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 10 +++--- src/overlays/actors/ovl_En_Fall/z_en_fall.h | 2 +- src/overlays/actors/ovl_En_Fg/z_en_fg.h | 24 ++++++------- src/overlays/actors/ovl_En_Fish/z_en_fish.h | 6 ++-- .../actors/ovl_En_Fishing/z_en_fishing.c | 36 +++++++++---------- .../actors/ovl_En_Floormas/z_en_floormas.h | 6 ++-- src/overlays/actors/ovl_En_Fz/z_en_fz.h | 6 ++-- .../actors/ovl_En_Gakufu/z_en_gakufu.h | 4 +-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 6 ++-- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 4 +-- src/overlays/actors/ovl_En_Gg/z_en_gg.h | 2 +- src/overlays/actors/ovl_En_Giant/z_en_giant.h | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 2 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.h | 20 +++++------ src/overlays/actors/ovl_En_Gk/z_en_gk.h | 6 ++-- src/overlays/actors/ovl_En_Go/z_en_go.h | 6 ++-- .../actors/ovl_En_Goroiwa/z_en_goroiwa.h | 24 ++++++------- .../ovl_En_Grasshopper/z_en_grasshopper.c | 10 +++--- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 6 ++-- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 4 +-- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 2 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 24 ++++++------- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 2 +- .../z_en_horse_game_check.h | 6 ++-- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 3 +- src/overlays/actors/ovl_En_In/z_en_in.h | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 10 +++--- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 18 +++++----- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 10 +++--- .../actors/ovl_En_Karebaba/z_en_karebaba.h | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 4 +-- src/overlays/actors/ovl_En_Kusa/z_en_kusa.h | 4 +-- src/overlays/actors/ovl_En_Light/z_en_light.c | 6 ++-- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 4 +-- .../actors/ovl_En_Minifrog/z_en_minifrog.h | 6 ++-- .../actors/ovl_En_Minislime/z_en_minislime.c | 2 +- .../actors/ovl_En_Minislime/z_en_minislime.h | 8 ++--- .../actors/ovl_En_Mt_tag/z_en_mt_tag.c | 6 ++-- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.h | 2 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 2 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 6 ++-- src/overlays/actors/ovl_En_Niw/z_en_niw.h | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 16 ++++----- 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_Pametfrog/z_en_pametfrog.c | 12 +++---- .../actors/ovl_En_Pametfrog/z_en_pametfrog.h | 20 +++++------ src/overlays/actors/ovl_En_Part/z_en_part.h | 10 +++--- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.h | 10 +++--- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 8 ++--- src/overlays/actors/ovl_En_Pp/z_en_pp.h | 2 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 2 +- src/overlays/actors/ovl_En_Pst/z_en_pst.h | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 14 ++++---- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 4 +-- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 8 ++--- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 4 +-- src/overlays/actors/ovl_En_Rat/z_en_rat.h | 2 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 4 +-- src/overlays/actors/ovl_En_Rd/z_en_rd.h | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.h | 6 ++-- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 10 +++--- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c | 2 +- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.h | 4 +-- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.h | 2 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 4 +-- .../actors/ovl_En_Snowman/z_en_snowman.h | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.h | 4 +-- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 6 ++-- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../actors/ovl_En_Stream/z_en_stream.h | 4 +-- .../z_en_syateki_dekunuts.c | 4 +-- .../z_en_syateki_dekunuts.h | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 14 ++++---- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 6 ++-- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 2 +- src/overlays/actors/ovl_En_Test2/z_en_test2.h | 6 ++-- src/overlays/actors/ovl_En_Test6/z_en_test6.h | 6 ++-- .../actors/ovl_En_Time_Tag/z_en_time_tag.h | 2 +- src/overlays/actors/ovl_En_Tite/z_en_tite.h | 6 ++-- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 6 ++-- .../actors/ovl_En_Torch2/z_en_torch2.h | 4 +-- .../actors/ovl_En_Viewer/z_en_viewer.c | 6 ++-- .../actors/ovl_En_Viewer/z_en_viewer.h | 8 ++--- .../actors/ovl_En_Wallmas/z_en_wallmas.h | 6 ++-- .../ovl_En_Water_Effect/z_en_water_effect.h | 2 +- .../ovl_En_Weather_Tag/z_en_weather_tag.h | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 18 +++++----- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 +- .../actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h | 2 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.h | 6 ++-- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 4 +-- src/overlays/actors/ovl_En_Zod/z_en_zod.h | 8 ++--- .../actors/ovl_En_Zoraegg/z_en_zoraegg.h | 6 ++-- src/overlays/actors/ovl_En_Zos/z_en_zos.h | 6 ++-- .../actors/ovl_Item_B_Heart/z_item_b_heart.h | 6 ++-- src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h | 4 +-- .../actors/ovl_Obj_Armos/z_obj_armos.h | 6 ++-- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h | 10 +++--- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 10 +++--- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.h | 2 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 4 +-- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 10 +++--- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.h | 6 ++-- .../ovl_Obj_Jgame_Light/z_obj_jgame_light.c | 6 ++-- .../ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c | 2 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 10 +++--- .../actors/ovl_Obj_Mure3/z_obj_mure3.c | 10 +++--- .../actors/ovl_Obj_Mure3/z_obj_mure3.h | 4 +-- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 12 +++---- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.h | 8 ++--- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h | 6 ++-- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Rotlift/z_obj_rotlift.h | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 8 ++--- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 4 +-- .../ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 3 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.h | 6 ++-- .../ovl_Obj_Y2shutter/z_obj_y2shutter.h | 4 +-- .../actors/ovl_Oceff_Storm/z_oceff_storm.h | 2 +- .../actors/ovl_player_actor/z_player.c | 2 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c | 2 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h | 2 +- .../z_eff_ss_fhg_flash.h | 36 +++++++++---------- .../ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c | 8 ++--- .../ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h | 4 +-- src/overlays/gamestates/ovl_select/z_select.h | 6 ++-- .../ovl_kaleido_scope/z_kaleido_collect.c | 2 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 2 +- 254 files changed, 765 insertions(+), 767 deletions(-) diff --git a/Makefile b/Makefile index 8782c02ad..89eeb21d2 100644 --- a/Makefile +++ b/Makefile @@ -122,8 +122,8 @@ OPTFLAGS := -O2 -g3 ASFLAGS := -march=vr4300 -32 -Iinclude MIPS_VERSION := -mips2 -# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Surpress the warnings with -woff. -CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(IINC) -nostdinc -Wab,-r4300_mul -woff 624,649,838,712,516 +# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Suppress the warnings with -woff. +CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(IINC) -nostdinc -Wab,-r4300_mul -woff 649,838,712,516 # Use relocations and abi fpr names in the dump OBJDUMP_FLAGS := --disassemble --reloc --disassemble-zeroes -Mreg-names=32 diff --git a/include/z64.h b/include/z64.h index a83001a01..6418b43ca 100644 --- a/include/z64.h +++ b/include/z64.h @@ -657,7 +657,7 @@ typedef struct { #define FLASHROM_REQUEST_WRITE 1 #define FLASHROM_REQUEST_READ 2 -enum fram_command { +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 @@ -681,15 +681,15 @@ enum fram_command { FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000, /* unk */ FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000 -}; +} framCommand; -enum fram_mode { - FRAM_MODE_NOP = 0, - FRAM_MODE_ERASE, - FRAM_MODE_WRITE, - FRAM_MODE_READ, - FRAM_MODE_STATUS -}; +typedef enum framMode { + /* 0 */ FRAM_MODE_NOP, + /* 1 */ FRAM_MODE_ERASE, + /* 2 */ FRAM_MODE_WRITE, + /* 3 */ FRAM_MODE_READ, + /* 4 */ FRAM_MODE_STATUS +} framMode; typedef enum { /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, diff --git a/include/z64actor.h b/include/z64actor.h index f58716401..3051f2c6e 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -317,7 +317,7 @@ typedef struct EnAObj { typedef enum { /* 0 */ AOBJ_SIGNPOST_OBLONG, - /* 1 */ AOBJ_SIGNPOST_ARROW, + /* 1 */ AOBJ_SIGNPOST_ARROW } AObjType; #define AOBJ_GET_TEXTID(thisx) ((((thisx)->params >> 8) & 0xFF) | 0x300) diff --git a/include/z64audio.h b/include/z64audio.h index a37760566..9b077cf1a 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -105,7 +105,7 @@ typedef enum { /* 1 */ SOUNDMODE_HEADSET, /* 2 */ SOUNDMODE_SURROUND_EXTERNAL, /* 3 */ SOUNDMODE_MONO, - /* 4 */ SOUNDMODE_SURROUND, + /* 4 */ SOUNDMODE_SURROUND } SoundMode; typedef enum { diff --git a/include/z64camera.h b/include/z64camera.h index 54cf748ac..ccdee8811 100644 --- a/include/z64camera.h +++ b/include/z64camera.h @@ -361,7 +361,7 @@ typedef enum { /* 0x12 */ CAM_DATA_18, /* 0x13 */ CAM_DATA_19, /* 0x14 */ CAM_DATA_20, - /* 0x15 */ CAM_DATA_21, + /* 0x15 */ CAM_DATA_21 } CameraDataType; /*================================ diff --git a/include/z64item.h b/include/z64item.h index 345a22897..55cbb337f 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -19,7 +19,7 @@ typedef enum { /* 2 */ EQUIP_VALUE_SWORD_RAZOR, /* 3 */ EQUIP_VALUE_SWORD_GILDED, /* 4 */ EQUIP_VALUE_SWORD_DIETY, - /* 5 */ EQUIP_VALUE_SWORD_MAX, + /* 5 */ EQUIP_VALUE_SWORD_MAX } EquipValueSword; typedef enum { diff --git a/include/z64math.h b/include/z64math.h index 8df81454a..cd5c1db20 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -105,13 +105,13 @@ typedef VecSphGeo VecGeo; typedef enum { /* 0 */ OLIB_ADD_COPY, // Copy `b` to dest /* 1 */ OLIB_ADD_OFFSET, // Add `a` and `b` to dest, and also add the yaw of `a` to the dest - /* 2 */ OLIB_ADD, // Add `a` and `b` to dest + /* 2 */ OLIB_ADD // Add `a` and `b` to dest } OlibVec3fAdd; typedef enum { /* 0 */ OLIB_DIFF_COPY, // Copy `b` to dest /* 1 */ OLIB_DIFF_OFFSET, // Sub `a` and `b` to dest, and also subs the yaw of `a` to the dest - /* 2 */ OLIB_DIFF, // Sub `a` and `b` to dest + /* 2 */ OLIB_DIFF // Sub `a` and `b` to dest } OlibVec3fDiff; #define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t))) diff --git a/include/z64player.h b/include/z64player.h index d9c80384f..f10984216 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -962,7 +962,7 @@ typedef enum PlayerUnkAA5 { /* 2 */ PLAYER_UNKAA5_2, /* 3 */ PLAYER_UNKAA5_3, /* 4 */ PLAYER_UNKAA5_4, - /* 5 */ PLAYER_UNKAA5_5, + /* 5 */ PLAYER_UNKAA5_5 } PlayerUnkAA5; typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play); diff --git a/include/z64save.h b/include/z64save.h index cea6ffa46..805b62e5a 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -87,7 +87,7 @@ typedef enum { /* 5 */ TIMER_ID_ENV_HAZARD, // environmental hazard timer (underwater or hot room) /* 6 */ TIMER_ID_GORON_RACE_UNUSED, /* 7 */ TIMER_ID_MAX, - /* 99 */ TIMER_ID_NONE = 99, + /* 99 */ TIMER_ID_NONE = 99 } TimerId; typedef enum { @@ -1569,7 +1569,7 @@ typedef enum { /* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE, /* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE, /* 2 */ DUNGEON_INDEX_GREAT_BAY_TEMPLE, - /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE, // Also applies to Inverted Stone Tower Temple + /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE // Also applies to Inverted Stone Tower Temple } DungeonIndex; void Sram_ActivateOwl(u8 owlId); diff --git a/include/z64schedule.h b/include/z64schedule.h index f3a703f3c..07a942e90 100644 --- a/include/z64schedule.h +++ b/include/z64schedule.h @@ -50,13 +50,13 @@ typedef enum { /* 0x0F */ SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S, // Branches if the current time is less than the command time, short range branch /* 0x10 */ SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L, // Branches if the current time is less than the command time, long range branch /* 0x11 */ SCHEDULE_CMD_ID_BRANCH_S, // Always branch, short range branch - /* 0x12 */ SCHEDULE_CMD_ID_BRANCH_L, // Always branch, long range branch + /* 0x12 */ SCHEDULE_CMD_ID_BRANCH_L // Always branch, long range branch } ScheduleCommandId; typedef enum { /* 0 */ SCHEDULE_CHECK_MISC_ROOM_KEY, /* 1 */ SCHEDULE_CHECK_MISC_LETTER_TO_KAFEI, - /* 2 */ SCHEDULE_CHECK_MISC_MASK_ROMANI, + /* 2 */ SCHEDULE_CHECK_MISC_MASK_ROMANI } ScheduleCheckMisc; typedef struct { diff --git a/include/z64transition.h b/include/z64transition.h index e223d9b58..fe6027a9f 100644 --- a/include/z64transition.h +++ b/include/z64transition.h @@ -68,7 +68,7 @@ typedef struct { typedef enum { /* 1 */ TRANS_INSTANCE_TYPE_FILL_OUT = 1, - /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN, + /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN } TransitionInstanceType; #define TRANS_INSTANCE_TYPE_FADE_FLASH 3 diff --git a/include/z_fireobj.h b/include/z_fireobj.h index 7bd58d80a..6fe0639bc 100644 --- a/include/z_fireobj.h +++ b/include/z_fireobj.h @@ -61,7 +61,7 @@ typedef enum FireState { /* 0 */ FIRE_STATE_GROWING, /* 1 */ FIRE_STATE_SHRINKING, /* 2 */ FIRE_STATE_FULLY_LIT, - /* 3 */ FIRE_STATE_NOT_LIT, + /* 3 */ FIRE_STATE_NOT_LIT } FireState; #define FIRE_FLAG_WATER_EXTINGUISHABLE (1 << 0) diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index e88135b8d..40c457cb3 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -9,7 +9,7 @@ typedef struct { /* 0x0 */ Vec3f* pos; /* 0x4 */ f32 freqScale; /* 0x8 */ s8 reverbAdd; -} SfxSettings; // size = 0x9 +} SfxSettings; // size = 0xC typedef struct { /* 0x0 */ f32 volume; @@ -20,7 +20,7 @@ typedef struct { /* 0xB */ u8 filter; /* 0xC */ u8 combFilterGain; /* 0xD */ u8 zVolume; -} SfxChannelState; // size = 0xE +} SfxChannelState; // size = 0x10 typedef enum { /* 0x0 */ SFX_CHANNEL_PLAYER0, // SfxPlayerBank @@ -50,7 +50,7 @@ typedef enum { /* 0x4 */ SEQ_PLAYER_IO_PORT_4, /* 0x5 */ SEQ_PLAYER_IO_PORT_5, /* 0x6 */ SEQ_PLAYER_IO_PORT_6, - /* 0x7 */ SEQ_PLAYER_IO_PORT_7, + /* 0x7 */ SEQ_PLAYER_IO_PORT_7 } SeqPlayerIOPort; typedef struct { diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 1ea26952b..52533da4d 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1386,11 +1386,11 @@ void AudioHeap_DiscardSampleCaches(void) { } typedef struct { - uintptr_t oldAddr; - uintptr_t newAddr; - size_t size; - u8 newMedium; -} StorageChange; + /* 0x0 */ uintptr_t oldAddr; + /* 0x4 */ uintptr_t newAddr; + /* 0x8 */ size_t size; + /* 0xC */ u8 newMedium; +} StorageChange; // size = 0x10 void AudioHeap_ChangeStorage(StorageChange* change, Sample* sample) { if ((sample != NULL) && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) && diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index 7df46952b..8016e9b6a 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -80,10 +80,10 @@ typedef enum { #define OS_MESG_PRI_HIGH 1 typedef struct { - u16 numInstruments; - u16 numDrums; - u16 numSfx; -} UnloadedFonts; + /* 0x0 */ u16 numInstruments; + /* 0x2 */ u16 numDrums; + /* 0x4 */ u16 numSfx; +} UnloadedFonts; // size = 0x6 OSMesgQueue sScriptLoadQueue; OSMesg sScriptLoadMesgBuf[0x10]; diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index aa7ecdfe1..76f990659 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -58,11 +58,11 @@ void* Yaz0_NextDMA(void* curSrcPos) { } typedef struct { - /* 0x00 */ u32 magic; // Yaz0 - /* 0x04 */ u32 decSize; - /* 0x08 */ u32 compInfoOffset; // only used in mio0 - /* 0x0C */ u32 uncompDataOffset; // only used in mio0 -} Yaz0Header; // size = 0x10 + /* 0x0 */ u32 magic; // Yaz0 + /* 0x4 */ u32 decSize; + /* 0x8 */ u32 compInfoOffset; // only used in mio0 + /* 0xC */ u32 uncompDataOffset; // only used in mio0 +} Yaz0Header; // size = 0x10 #define YAZ0_MAGIC 0x59617A30 // "Yaz0" diff --git a/src/code/sys_cmpdma.c b/src/code/sys_cmpdma.c index b2a17d547..715892b49 100644 --- a/src/code/sys_cmpdma.c +++ b/src/code/sys_cmpdma.c @@ -2,7 +2,7 @@ #include "system_malloc.h" typedef struct { - union { + /* 0x0 */ union { u32 dmaWord[2]; u32 dataStart; u32 dataSize; @@ -11,7 +11,7 @@ typedef struct { u32 end; } offset; }; -} CmpDmaBuffer; +} CmpDmaBuffer; // size = 0x8 CmpDmaBuffer sDmaBuffer; diff --git a/src/code/z_draw.c b/src/code/z_draw.c index ace56a965..e6a814e2a 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -115,9 +115,9 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId); void GetItem_DrawRemains(PlayState* play, s16 drawId); typedef struct { - /* 0x00 */ void (*drawFunc)(PlayState*, s16); - /* 0x04 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*) -} DrawItemTableEntry; // size = 0x24 + /* 0x0 */ void (*drawFunc)(PlayState*, s16); + /* 0x4 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*) +} DrawItemTableEntry; // size = 0x24 static DrawItemTableEntry sDrawItemTable[] = { // GID_BOTTLE, OBJECT_GI_BOTTLE diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index e3defb402..121957396 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -36,7 +36,7 @@ ActorCutscene sGlobalCutsceneList[] = { typedef enum { /* 0 */ CS_START_0, /* 1 */ CS_START_1, - /* 2 */ CS_START_2, + /* 2 */ CS_START_2 } ActorCutsceneStartMethod; typedef struct { diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index addfe6b67..185373e06 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -2,7 +2,7 @@ typedef enum { /* 0 */ TRANS_CIRCLE_DIR_IN, - /* 1 */ TRANS_CIRCLE_DIR_OUT, + /* 1 */ TRANS_CIRCLE_DIR_OUT } TransitionCircleDirection; Gfx sTransCircleSetupDL[] = { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index f8f28f4b8..e63c9d8e5 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -23,11 +23,11 @@ typedef enum { #define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex)) typedef struct { - /* 0x00 */ u8 scene; - /* 0x01 */ u8 flags1; - /* 0x02 */ u8 flags2; - /* 0x03 */ u8 flags3; -} RestrictionFlags; + /* 0x0 */ u8 scene; + /* 0x1 */ u8 flags1; + /* 0x2 */ u8 flags2; + /* 0x3 */ u8 flags3; +} RestrictionFlags; // size = 0x4 Input sPostmanTimerInput[MAXCONTROLLERS]; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 44b1fd986..2c0a79d21 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -270,7 +270,7 @@ void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) { typedef struct { /* 0x0 */ Color_RGB8 color; /* 0x4 */ Gfx* dList; -} struct_801BFDD0; // size = 0x08 +} struct_801BFDD0; // size = 0x8 struct_801BFDD0 D_801BFDD0[] = { { { 180, 200, 255 }, gLinkGoronCurledDL }, @@ -1643,9 +1643,9 @@ TexturePtr sPlayerMouthTextures[PLAYER_MOUTH_MAX] = { }; typedef struct PlayerFaceIndices { - /* 0x00 */ u8 eyeIndex; - /* 0x01 */ u8 mouthIndex; -} PlayerFaceIndices; // size = 0x02 + /* 0x0 */ u8 eyeIndex; + /* 0x1 */ u8 mouthIndex; +} PlayerFaceIndices; // size = 0x2 PlayerFaceIndices sPlayerFaces[] = { { PLAYER_EYES_OPEN, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_0 diff --git a/src/code/z_room.c b/src/code/z_room.c index 9bc6e12ee..78eb5f98e 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -53,10 +53,10 @@ typedef enum { } RoomCullableDebugMode; typedef struct RoomShapeCullableEntryLinked { - /* 0x00 */ RoomShapeCullableEntry* entry; - /* 0x04 */ f32 boundsNearZ; - /* 0x08 */ struct RoomShapeCullableEntryLinked* prev; - /* 0x0C */ struct RoomShapeCullableEntryLinked* next; + /* 0x0 */ RoomShapeCullableEntry* entry; + /* 0x4 */ f32 boundsNearZ; + /* 0x8 */ struct RoomShapeCullableEntryLinked* prev; + /* 0xC */ struct RoomShapeCullableEntryLinked* next; } RoomShapeCullableEntryLinked; // size = 0x10 #define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 128 diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index cd4420c4a..f8649f4fd 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -10,8 +10,8 @@ s32 __osFlashVersion; UNK_TYPE1 D_801FD0FC[0x14]; typedef enum { - FLASH_OLD, - FLASH_NEW, + /* 0 */ FLASH_OLD, + /* 1 */ FLASH_NEW } FlashVersion; u32 osFlashGetAddr(u32 pageNum) { diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 776191227..4fabb4c4d 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -3,11 +3,11 @@ #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; + /* 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 u64 osClockRate = OS_CLOCK_RATE; s32 osViClock = VI_NTSC_CLOCK; 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 ef35a34ed..737d480ad 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -60,7 +60,7 @@ typedef struct { /* 0x14 */ BgBreakwallUnkFunc unk_14; /* 0x18 */ BgBreakwallUnkFunc2 unk_18; /* 0x1C */ ActorFunc unk_1C; -} BgBreakwallStruct; +} BgBreakwallStruct; // size = 0x20 BgBreakwallStruct D_808B8140[] = { { OBJECT_OMOYA_OBJ, object_omoya_obj_DL_0001A0, NULL, NULL, NULL, func_808B7380, func_808B77D0, NULL }, 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 bcdda2327..c332fe82c 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h @@ -12,11 +12,11 @@ typedef void (*BgBreakwallUnkFunc2)(struct BgBreakwall*, PlayState*); #define BGBREAKWALL_GET_F(thisx) ((thisx)-> params & 0xF) #define BGBREAKWALL_SWITCHFLAG(thisx) (((thisx)-> params & 0xFE00) >> 9) -enum { +typedef enum { /* 7 */ BGBREAKWALL_F_7 = 7, /* 9 */ BGBREAKWALL_F_9 = 9, - /* 11 */ BGBREAKWALL_F_11 = 11, -}; + /* 11 */ BGBREAKWALL_F_11 = 11 +} BgBreakwallParam; typedef struct BgBreakwall { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h index afea1bf0d..d59bfd3ea 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h @@ -9,10 +9,10 @@ struct BgCtowerGear; #define BGCTOWERGEAR_GET_TYPE(thisx) ((thisx)->params & 3) typedef enum { - /* 0x0 */ BGCTOWERGEAR_CEILING_COG, - /* 0x1 */ BGCTOWERGEAR_CENTER_COG, - /* 0x2 */ BGCTOWERGEAR_WATER_WHEEL, - /* 0x3 */ BGCTOWERGEAR_ORGAN + /* 0 */ BGCTOWERGEAR_CEILING_COG, + /* 1 */ BGCTOWERGEAR_CENTER_COG, + /* 2 */ BGCTOWERGEAR_WATER_WHEEL, + /* 3 */ BGCTOWERGEAR_ORGAN } BgCtowerGearType; typedef struct BgCtowerGear { diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h index 52a905ed5..a06934669 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h +++ b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h @@ -11,7 +11,7 @@ typedef enum { /* 0 */ BGCTOWERROT_CORRIDOR, /* 1 */ BGCTOWERROT_STONE_DOOR_MAIN, // Main door controls cutscene flow (updating Link fields and playing sounds). // It is the one on the left when entering from the Lost Woods - /* 2 */ BGCTOWERROT_STONE_DOOR, + /* 2 */ BGCTOWERROT_STONE_DOOR } BgCtowerRotType; typedef struct BgCtowerRot { 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 de7e7eb32..6d13f4ac3 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 @@ -34,9 +34,9 @@ void func_80A2B308(Actor* thisx, PlayState* play); BgDblueMovebg* D_80A2BBF0; typedef struct { - u8 unk_00; - u8 unk_01; -} BgDblueMovebgUnkStruct; + /* 0x0 */ u8 unk_00; + /* 0x1 */ u8 unk_01; +} BgDblueMovebgUnkStruct; // size = 0x2 BgDblueMovebgUnkStruct D_80A2BBF4; diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h index af5a29923..bf5300758 100644 --- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h +++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h @@ -8,9 +8,9 @@ struct BgFireWall; typedef void (*BgFireWallActionFunc)(struct BgFireWall*, PlayState*); typedef enum { - /* 0 */ BGFIREWALL_PARAMS_0, - /* 1 */ BGFIREWALL_PARAMS_1, -} BgFireWallParams; + /* 0 */ BGFIREWALL_PARAM_0, + /* 1 */ BGFIREWALL_PARAM_1 +} BgFireWallParam; typedef struct BgFireWall { /* 0x000 */ Actor actor; 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 942a544ff..66666b82b 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 @@ -52,9 +52,9 @@ ActorInit Bg_Hakugin_Post_InitVars = { }; typedef struct { - f32 unk_00; - u8 unk_04; -} BgHakuginPostUnkStruct3; + /* 0x0 */ f32 unk_00; + /* 0x4 */ u8 unk_04; +} BgHakuginPostUnkStruct3; // size = 0x8 static BgHakuginPostUnkStruct3 D_80A9D880[] = { { 1200.0f, false }, { 600.0f, false }, { 900.0f, false }, { 870.0f, false }, 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 bcc662c9f..2d8fc2683 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 @@ -78,7 +78,7 @@ typedef struct { /* 0x0C */ f32 unk_C; /* 0x10 */ Gfx* unk_10; /* 0x14 */ u8 unk_14; -} BgHakuginSwitchStruct; +} BgHakuginSwitchStruct; // size = 0x18 BgHakuginSwitchStruct D_80B1688C[] = { { -156.0f, -178.0f, 6.0f, 10.0f, object_goronswitch_DL_000268, 0xB4 }, 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 8a90a6809..ad2d9fbdd 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 @@ -116,9 +116,9 @@ Vec3f D_80B8216C = { 225.0f, -280.0f, -210.0f }; Vec3f D_80B82178 = { -255.0f, -280.0f, 210.0f }; typedef struct { - /* 0x00 */ s8 unk_00; - /* 0x01 */ s8 unk_01; - /* 0x04 */ Vec3f unk_04; + /* 0x0 */ s8 unk_00; + /* 0x1 */ s8 unk_01; + /* 0x4 */ Vec3f unk_04; } BgIkanaRotaryroomStruct4; // size = 0x10 BgIkanaRotaryroomStruct4 D_80B82184[2][2] = { diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h index beeeb0b81..643be076c 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h @@ -9,11 +9,11 @@ typedef void (*BgIknvDoukutuActionFunc)(struct BgIknvDoukutu*, PlayState*); #define BGIKNVDOUKUTU_GET_F(thisx) ((thisx)->params & 0xF) -enum { - BGIKNVDOUKUTU_F_0, - BGIKNVDOUKUTU_F_1, - BGIKNVDOUKUTU_F_2, -}; +typedef enum { + /* 0 */ BGIKNVDOUKUTU_F_0, + /* 1 */ BGIKNVDOUKUTU_F_1, + /* 2 */ BGIKNVDOUKUTU_F_2 +} BgIknvDoukutuParam; typedef struct BgIknvDoukutu { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h index a5c01165d..266ec81f2 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h @@ -19,7 +19,7 @@ typedef struct BgIknvObj { typedef enum { /* 0 */ IKNV_OBJ_WATERWHEEL, /* 1 */ IKNV_OBJ_RAISED_DOOR, // defunct door covering entrance to Stone Tower - /* 2 */ IKNV_OBJ_SAKON_DOOR, // door to Sakon's Hideout + /* 2 */ IKNV_OBJ_SAKON_DOOR // door to Sakon's Hideout } BgIknvObjType; #endif // Z_BG_IKNV_OBJ_H 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 e4cd15c15..f920c18eb 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h @@ -21,7 +21,7 @@ typedef enum { /* 0 */ LADDER_SIZE_12RUNG, /* 1 */ LADDER_SIZE_16RUNG, /* 2 */ LADDER_SIZE_20RUNG, - /* 3 */ LADDER_SIZE_24RUNG, + /* 3 */ LADDER_SIZE_24RUNG } BgLadderSize; #endif // Z_BG_LADDER_H 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 e6d752c28..cae36be27 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 @@ -12,8 +12,8 @@ typedef void (*BgLastBwallActionFunc)(struct BgLastBwall*, PlayState*); #define BGLASTBWALL_GET_TYPE(thisx) (((thisx)->params >> 0xC) & 0xF) typedef enum { - BGLASTBWALL_TYPE_0 = 0, - BGLASTBWALL_TYPE_1 = 1, + /* 0 */ BGLASTBWALL_TYPE_0, + /* 1 */ BGLASTBWALL_TYPE_1 } BgLastBwallType; typedef struct BgLastBwall { 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 0e377f539..d9f4a1ece 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 @@ -9,7 +9,7 @@ typedef enum { /* 0 */ BG_NUMA_HANA_TYPE_NORMAL, - /* 1 */ BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION, + /* 1 */ BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION } BgNumaHanaType; struct BgNumaHana; diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 119c3854a..e23504231 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -23,8 +23,8 @@ void func_80ACAE5C(BgOpenShutter* this, PlayState* play); void func_80ACAEF0(BgOpenShutter* this, PlayState* play); typedef enum { - /* 0x1 */ BGOPENSHUTTER_DOOR_OPEN = 1, - /* 0x2 */ BGOPENSHUTTER_DOOR_CLOSED, + /* 1 */ BGOPENSHUTTER_DOOR_OPEN = 1, + /* 2 */ BGOPENSHUTTER_DOOR_CLOSED } BGOpenShutterDoorState; ActorInit Bg_Open_Shutter_InitVars = { 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 fe29e34cb..ae35ac98c 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h @@ -7,12 +7,12 @@ #define BG_UMAJUMP_GET_TYPE(thisx) ((thisx)->params & 0xFF) typedef enum { - BG_UMAJUMP_TYPE_1 = 1, - BG_UMAJUMP_TYPE_2, - BG_UMAJUMP_TYPE_3, - BG_UMAJUMP_TYPE_4, - BG_UMAJUMP_TYPE_5, - BG_UMAJUMP_TYPE_6, + /* 1 */ BG_UMAJUMP_TYPE_1 = 1, + /* 2 */ BG_UMAJUMP_TYPE_2, + /* 3 */ BG_UMAJUMP_TYPE_3, + /* 4 */ BG_UMAJUMP_TYPE_4, + /* 5 */ BG_UMAJUMP_TYPE_5, + /* 6 */ BG_UMAJUMP_TYPE_6 } BgUmaJumpType; struct BgUmajump; diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.h b/src/overlays/actors/ovl_Boss_02/z_boss_02.h index e7efc1199..4fbd8b471 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.h +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.h @@ -27,15 +27,15 @@ typedef enum { /* 1 */ TWINMOLD_EFFECT_SAND, // The sand kicked up when Twinmold touches the ground /* 2 */ TWINMOLD_EFFECT_BLACK_DUST, // Unused /* 3 */ TWINMOLD_EFFECT_FRAGMENT, // The fragments that fly off when the parts of Twinmold explode - /* 4 */ TWINMOLD_EFFECT_FLASH, // The flashes of light that appear when the parts of Twinmold explode + /* 4 */ TWINMOLD_EFFECT_FLASH // The flashes of light that appear when the parts of Twinmold explode } TwinmoldEffectType; typedef enum { /* 0 */ TWINMOLD_RED, /* 35 */ TWINMOLD_BLUE = 35, /* 100 */ TWINMOLD_TAIL = 100, - /* 200 */ TWINMOLD_STATIC = 200, -} TwinmoldParams; + /* 200 */ TWINMOLD_STATIC = 200 +} TwinmoldParam; typedef struct Boss02 { /* 0x0000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.h b/src/overlays/actors/ovl_Boss_03/z_boss_03.h index a00dbacff..236606369 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.h +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.h @@ -31,7 +31,7 @@ typedef enum { /* 1 */ GYORG_EFFECT_BUBBLE, /* 2 */ GYORG_EFFECT_DROPLET, /* 3 */ GYORG_EFFECT_SPLASH, - /* 4 */ GYORG_EFFECT_WET_SPOT, + /* 4 */ GYORG_EFFECT_WET_SPOT } GyorgEffectType; typedef struct Boss03 { 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 971adb3bd..cbee0a148 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h @@ -38,14 +38,14 @@ typedef struct DemoKankyo { typedef enum { /* 0 */ DEMO_KANKYO_TYPE_LOSTWOODS, /* 1 */ DEMO_KANKYO_TYPE_GIANTS, - /* 2 */ DEMO_KANKYO_TYPE_MOON, + /* 2 */ DEMO_KANKYO_TYPE_MOON } DemoKankyoType; typedef enum { /* 0 */ DEMO_KANKYO_STATE_INIT, /* 1 */ DEMO_KANKYO_STATE_SINGLE, /* 2 */ DEMO_KANKYO_STATE_SKYFISH, - /* 3 */ DEMO_KANKYO_STATE_DISABLED, + /* 3 */ DEMO_KANKYO_STATE_DISABLED } DemoKankyoStateType; #endif // Z_DEMO_KANKYO_H diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c index ba8d1b834..ec33a8a94 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c @@ -38,7 +38,7 @@ void DemoMoonend_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); this->actionFunc = DemoMoonend_DoNothing; - if (DEMOMOONEND_GET_PARAMS_F(thisx) == 1) { + if (DEMOMOONEND_GET_PARAM_F(thisx) == 1) { Actor_SetScale(&this->actor, 0.05f); Actor_SetScale(&this->actor, 6.0f); this->actor.draw = NULL; @@ -60,7 +60,7 @@ void DemoMoonend_Init(Actor* thisx, PlayState* play) { void DemoMoonend_Destroy(Actor* thisx, PlayState* play) { DemoMoonend* this = THIS; - if (DEMOMOONEND_GET_PARAMS_F(thisx) != 1) { + if (DEMOMOONEND_GET_PARAM_F(thisx) != 1) { func_8018349C(&this->skeletonInfo); } } diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h index fd229e004..b56c60a9b 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h @@ -8,7 +8,7 @@ struct DemoMoonend; typedef void (*DemoMoonendActionFunc)(struct DemoMoonend*, PlayState*); -#define DEMOMOONEND_GET_PARAMS_F(thisx) (((thisx)->params) & 0xF) +#define DEMOMOONEND_GET_PARAM_F(thisx) (((thisx)->params) & 0xF) typedef struct DemoMoonend { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h index 1997a2bc5..19f99bf2f 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h @@ -12,13 +12,13 @@ typedef void (*DemoSyotenActionFunc)(struct DemoSyoten*, PlayState*); #define DEMOSYOTEN_7E00_3F 0x3F -enum { +typedef enum { /* 0 */ DEMOSYOTEN_F_0, /* 1 */ DEMOSYOTEN_F_1, /* 2 */ DEMOSYOTEN_F_2, /* 3 */ DEMOSYOTEN_F_3, /* 4 */ DEMOSYOTEN_F_4 -}; +} DemoSyotenParam; typedef struct DemoSyoten { /* 0x000 */ Actor actor; 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 56bc60a4d..2db282367 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 @@ -24,11 +24,11 @@ void DemoTreLgt_SetupAnimate(DemoTreLgt* this, PlayState* play, f32 frame); void DemoTreLgt_Animate(DemoTreLgt* this, PlayState* play); typedef struct { - f32 unk0; - f32 unk4; - f32 unk8; - f32 unkC; -} DemoTreLgtInfo; + /* 0x0 */ f32 unk0; + /* 0x4 */ f32 unk4; + /* 0x8 */ f32 unk8; + /* 0xC */ f32 unkC; +} DemoTreLgtInfo; // size = 0x10 static DemoTreLgtInfo D_808E1490[2] = { { 1.0f, 136.0f, 190.0f, 40.0f }, @@ -53,8 +53,8 @@ static TransformUpdateIndex* sBoxLightAnimations[] = { }; typedef enum { - /* 0x00 */ DEMO_TRE_LGT_ACTION_WAIT, // wait until animation is needed - /* 0x01 */ DEMO_TRE_LGT_ACTION_ANIMATE + /* 0 */ DEMO_TRE_LGT_ACTION_WAIT, // wait until animation is needed + /* 1 */ DEMO_TRE_LGT_ACTION_ANIMATE } DemoTreLgtAction; static DemoTreLgtActionFunc sActionFuncs[] = { diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h index 4114b9f9c..3c77ed6c3 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h @@ -22,8 +22,8 @@ typedef struct DmAl { } DmAl; // size = 0x460 typedef enum { - /* 0x0 */ MADAME_AROMA_ANIMATION_0, - /* 0x1 */ MADAME_AROMA_ANIMATION_1 + /* 0 */ MADAME_AROMA_ANIMATION_0, + /* 1 */ MADAME_AROMA_ANIMATION_1 } DmAlAnimations; #endif // Z_DM_AL_H diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h index 6f29531a0..7ce8df7d2 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h @@ -9,12 +9,12 @@ typedef void (*DmChar01ActionFunc)(struct DmChar01*, PlayState*); #define DMCHAR01_GET(thisx) ((thisx)->params) -enum { +typedef enum { /* 0 */ DMCHAR01_0, /* 1 */ DMCHAR01_1, /* 2 */ DMCHAR01_2, - /* 3 */ DMCHAR01_3, -}; + /* 3 */ DMCHAR01_3 +} DmChar01Param; typedef struct DmChar01 { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index f49820f03..2f933c751 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -35,7 +35,7 @@ typedef enum { /* 0 */ DMCHAR02_ANIM_HIT_GROUND, /* 1 */ DMCHAR02_ANIM_TURN_AROUND, /* 2 */ DMCHAR02_ANIM_JUGGLE, - /* 3 */ DMCHAR02_ANIM_FALL, + /* 3 */ DMCHAR02_ANIM_FALL } DmChar02Animation; static AnimationInfo sAnimationInfo[] = { 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 3bff39f6a..84f7c3e3e 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h @@ -9,7 +9,7 @@ typedef void (*DmChar05ActionFunc)(struct DmChar05*, PlayState*); #define DMCHAR05_GET(thisx) ((thisx)->params) -enum { +typedef enum { /* 0 */ DMCHAR05_0, /* 1 */ DMCHAR05_1, /* 2 */ DMCHAR05_2, @@ -22,8 +22,8 @@ enum { /* 9 */ DMCHAR05_9, /* 10 */ DMCHAR05_10, /* 11 */ DMCHAR05_11, - /* 12 */ DMCHAR05_12, -}; + /* 12 */ DMCHAR05_12 +} DmChar05Param; typedef struct DmChar05 { /* 0x000 */ Actor actor; 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 9bd85db3a..9f5d18967 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -38,8 +38,8 @@ typedef enum { /* 2 */ TURTLE_EYEMODE_CLOSED, /* 3 */ TURTLE_EYEMODE_LOOK_STRAIGHT, /* 4 */ TURTLE_EYEMODE_UNUSED, - /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT, -} EyeMode; + /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT +} TurtleEyeMode; typedef enum { /* 0 */ TURTLE_ANIM_IDLE, @@ -48,7 +48,7 @@ typedef enum { /* 3 */ TURTLE_ANIM_SPEAK1, /* 4 */ TURTLE_ANIM_COUGH, /* 5 */ TURTLE_ANIM_SPEAK2, - /* 6 */ TURTLE_ANIM_YAWN, + /* 6 */ TURTLE_ANIM_YAWN } TurtleAnimation; ActorInit Dm_Char08_InitVars = { diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h index 03fd093f3..964965cae 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h @@ -14,7 +14,7 @@ typedef enum { /* 0 */ DMOPSTAGE_TYPE_GROUND, /* 1 */ DMOPSTAGE_TYPE_ROOT_TREE, /* 2 */ DMOPSTAGE_TYPE_CUT_TREE, - /* 3 */ DMOPSTAGE_TYPE_STRAIGHT_TREE, + /* 3 */ DMOPSTAGE_TYPE_STRAIGHT_TREE } DmOpStageTypes; typedef struct DmOpstage { diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h index 01b9b52af..fbc5fcb8b 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h @@ -10,7 +10,7 @@ typedef void (*DmRavineActionFunc)(struct DmRavine*, PlayState*); typedef enum { /* 0 */ DM_RAVINE_STATE_INITIALIZED, /* 1 */ DM_RAVINE_STATE_ACTIVE, - /* 2 */ DM_RAVINE_STATE_PENDING_DEATH, + /* 2 */ DM_RAVINE_STATE_PENDING_DEATH } DmRavineState; typedef struct DmRavine { 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 01a5b8c82..1787bcf6f 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -108,7 +108,7 @@ typedef enum { /* 68 */ SK_ANIM_LOOK_LEFT_START, /* 69 */ SK_ANIM_LOOK_LEFT_LOOP, /* 70 */ SK_ANIM_SNIFF, - /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF, + /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF } SkullKidAnimation; typedef enum { @@ -116,7 +116,7 @@ typedef enum { /* 1 */ SK_MASK_TYPE_NORMAL, /* 2 */ SK_MASK_TYPE_GLOWING_EYES, /* 3 */ SK_MASK_TYPE_FADING_OUT, - /* 9 */ SK_MASK_TYPE_RAISED = 9, + /* 9 */ SK_MASK_TYPE_RAISED = 9 } SkullKidMaskType; typedef enum { @@ -127,19 +127,19 @@ typedef enum { /* 4 */ SK_HAND_TYPE_JUGGLING_OR_DROPPING_OCARINA, /* 5 */ SK_HAND_TYPE_HOLDING_MAJORAS_MASK_AND_FLUTE, /* 6 */ SK_HAND_TYPE_HOLDING_FLUTE, - /* 9 */ SK_HAND_TYPE_DEFAULT = 9, + /* 9 */ SK_HAND_TYPE_DEFAULT = 9 } SkullKidHandType; typedef enum { /* 0 */ SK_FADE_IN_STATE_NONE, /* 1 */ SK_FADE_IN_STATE_START, /* 2 */ SK_FADE_IN_STATE_INCREASE_FOG, - /* 3 */ SK_FADE_IN_STATE_INCREASE_ALPHA, + /* 3 */ SK_FADE_IN_STATE_INCREASE_ALPHA } SkullKidFadeInState; typedef enum { /* 0 */ SK_FADE_OUT_STATE_NONE, - /* 1 */ SK_FADE_OUT_STATE_FADING_OUT, + /* 1 */ SK_FADE_OUT_STATE_FADING_OUT } SkullKidFadeOutState; typedef enum { 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 0f58c534d..cc7ac89ea 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h @@ -12,7 +12,7 @@ typedef void (*DmStkActionFunc)(struct DmStk*, PlayState*); typedef enum { /* 0 */ DM_STK_TYPE_SKULL_KID, - /* 1 */ DM_STK_TYPE_MAJORAS_MASK, + /* 1 */ DM_STK_TYPE_MAJORAS_MASK } DmStkType; typedef struct DmStk { 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 e875d8ab8..30d1cb3ef 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -47,7 +47,7 @@ typedef enum { /* 4 */ ZELDA_ANIM_GIVING_OCARINA, /* 5 */ ZELDA_ANIM_PLAYING_OCARINA_START, /* 6 */ ZELDA_ANIM_PLAYING_OCARINA, - /* 7 */ ZELDA_ANIM_MAX, + /* 7 */ ZELDA_ANIM_MAX } DmZlAnimation; static TexturePtr sMouthTextures[] = { @@ -61,7 +61,7 @@ typedef enum { /* 0 */ ZELDA_MOUTH_NEUTRAL, /* 1 */ ZELDA_MOUTH_SMILING, /* 2 */ ZELDA_MOUTH_FROWNING, - /* 3 */ ZELDA_MOUTH_OPEN, + /* 3 */ ZELDA_MOUTH_OPEN } DmZlMouthTextures; static TexturePtr sEyeTextures[] = { @@ -81,7 +81,7 @@ typedef enum { /* 3 */ ZELDA_EYE_WIDE, /* 4 */ ZELDA_EYE_HAPPY, /* 5 */ ZELDA_EYE_OPEN_LOOKING_LEFT, - /* 6 */ ZELDA_EYE_OPEN_LOOKING_RIGHT, + /* 6 */ ZELDA_EYE_OPEN_LOOKING_RIGHT } DmZlEyeTextures; // Unused in MM @@ -92,7 +92,7 @@ typedef enum { /* 3 */ ZELDA_EYE_STATE_LOOKING_RIGHT, /* 4 */ ZELDA_EYE_STATE_WIDE, /* 5 */ ZELDA_EYE_STATE_HAPPY, - /* 6 */ ZELDA_EYE_STATE_CLOSED2, + /* 6 */ ZELDA_EYE_STATE_CLOSED2 } DmZlEyeStates; /** 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 88129eddc..7e202b0af 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -101,8 +101,8 @@ static InitChainEntry sInitChain[] = { }; typedef struct { - /* 0x00 */ s16 sceneId; - /* 0x02 */ u8 index; + /* 0x0 */ s16 sceneId; + /* 0x2 */ u8 index; } ShutterSceneInfo; // size = 0x4 ShutterSceneInfo D_808A2258[] = { @@ -115,9 +115,9 @@ ShutterSceneInfo D_808A2258[] = { }; typedef struct { - /* 0x00 */ s16 dungeonSceneId; - /* 0x02 */ s16 bossSceneId; - /* 0x04 */ u8 index; + /* 0x0 */ s16 dungeonSceneId; + /* 0x2 */ s16 bossSceneId; + /* 0x4 */ u8 index; } BossDoorInfo; // size = 0x6 BossDoorInfo D_808A22A0[] = { diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h index 1bc7e13bc..de67845ed 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h @@ -13,15 +13,15 @@ typedef void (*DoorWarp1ActionFunc)(struct DoorWarp1*, PlayState*); #define DOORWARP1_GET_FF00_2(thisx) ((thisx)->params & 0xFF00) #define DOORWARP1_GET_FF00_3(thisx) ((thisx)->params >> 8) -enum { +typedef enum { /* 0 */ ENDOORWARP1_FF_0, /* 1 */ ENDOORWARP1_FF_1, /* 2 */ ENDOORWARP1_FF_2, /* 3 */ ENDOORWARP1_FF_3, /* 4 */ ENDOORWARP1_FF_4, /* 5 */ ENDOORWARP1_FF_5, - /* 6 */ ENDOORWARP1_FF_6, -}; + /* 6 */ ENDOORWARP1_FF_6 +} DoorWarp1Param; typedef struct DoorWarp1 { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h index 38b724865..20a1df27e 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h @@ -22,12 +22,12 @@ typedef struct EffDust { } EffDust; // size = 0x560 typedef enum { - /* 0x0 */ EFF_DUST_TYPE_0, - /* 0x1 */ EFF_DUST_TYPE_1, - /* 0x2 */ EFF_DUST_TYPE_SPIN_ATTACK_CHARGE, - /* 0x3 */ EFF_DUST_TYPE_3, - /* 0x4 */ EFF_DUST_TYPE_4, - /* 0x5 */ EFF_DUST_TYPE_5 + /* 0 */ EFF_DUST_TYPE_0, + /* 1 */ EFF_DUST_TYPE_1, + /* 2 */ EFF_DUST_TYPE_SPIN_ATTACK_CHARGE, + /* 3 */ EFF_DUST_TYPE_3, + /* 4 */ EFF_DUST_TYPE_4, + /* 5 */ EFF_DUST_TYPE_5 } EffDustType; #endif // Z_EFF_DUST_H 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 d45d669a7..9b5290907 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 @@ -49,7 +49,7 @@ void EffKamejimaWave_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.2f); this->actor.scale.y = 0.0f; - if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAMS_1) { + if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAM_1) { this->actionFunc = func_80BCEDE0; sVtxAlpha = 255; } else { diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h index c79537363..de5567ff0 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h @@ -16,9 +16,9 @@ typedef struct EffKamejimaWave { /* 0x14C */ EffKamejimaWaveActionFunc actionFunc; } EffKamejimaWave; // size = 0x150 -typedef enum params { - /* 0x0 */ EFFKAMEJIMAWAVE_PARAMS_0, - /* 0x1 */ EFFKAMEJIMAWAVE_PARAMS_1 -} EffKamejimaWaveParams; +typedef enum EffKamejimaWaveParam { + /* 0 */ EFFKAMEJIMAWAVE_PARAM_0, + /* 1 */ EFFKAMEJIMAWAVE_PARAM_1 +} EffKamejimaWaveParam; #endif // Z_EFF_KAMEJIMA_WAVE_H diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c index a37f4ec07..8ec3ac959 100644 --- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c +++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c @@ -22,10 +22,10 @@ void func_80BEBEB8(EffLastday* this, PlayState* play); void func_80BEBF78(EffLastday* this, PlayState* play); typedef enum EffLastDayAction { - /* 0x0 */ EFFLASTDAY_ACTION_NONE, - /* 0x1 */ EFFLASTDAY_ACTION_1, - /* 0x2 */ EFFLASTDAY_ACTION_2, - /* 0x3 */ EFFLASTDAY_ACTION_3 + /* 0 */ EFFLASTDAY_ACTION_NONE, + /* 1 */ EFFLASTDAY_ACTION_1, + /* 2 */ EFFLASTDAY_ACTION_2, + /* 3 */ EFFLASTDAY_ACTION_3 } EffLastDayAction; ActorInit Eff_Lastday_InitVars = { @@ -46,7 +46,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.1f); switch (EFFLASTDAY_GET_F(&this->actor)) { - case EFFLASTDAY_PARAMS_1: + case EFFLASTDAY_PARAM_1: this->dList = object_lastday_DL_000510; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000608); this->cueType = CS_CMD_ACTOR_CUE_508; @@ -54,7 +54,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 1.0f); break; - case EFFLASTDAY_PARAMS_2: + case EFFLASTDAY_PARAM_2: this->dList = object_lastday_DL_000210; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000308); this->cueType = CS_CMD_ACTOR_CUE_509; @@ -62,7 +62,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.5f); break; - case EFFLASTDAY_PARAMS_3: + case EFFLASTDAY_PARAM_3: this->dList = object_lastday_DL_000060; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000148); this->cueType = CS_CMD_ACTOR_CUE_510; @@ -79,13 +79,13 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 1.0f); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, - EFFLASTDAY_PARAMS_1); + EFFLASTDAY_PARAM_1); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, - EFFLASTDAY_PARAMS_2); + EFFLASTDAY_PARAM_2); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, - EFFLASTDAY_PARAMS_3); + EFFLASTDAY_PARAM_3); break; } } @@ -238,10 +238,10 @@ void EffLastday_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); switch (EFFLASTDAY_GET_F(thisx)) { - case EFFLASTDAY_PARAMS_1: - case EFFLASTDAY_PARAMS_2: + case EFFLASTDAY_PARAM_1: + case EFFLASTDAY_PARAM_2: break; - case EFFLASTDAY_PARAMS_3: + case EFFLASTDAY_PARAM_3: EffLastday_SetVtxAlpha(this->alpha); break; default: diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h index 0b5002863..9d2087ae1 100644 --- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h +++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h @@ -19,11 +19,11 @@ typedef struct EffLastday { /* 0x154 */ EffLastdayActionFunc actionFunc; } EffLastday; // size = 0x158 -typedef enum EffLastDayParams { - /* 0x0 */ EFFLASTDAY_PARAMS_0, - /* 0x1 */ EFFLASTDAY_PARAMS_1, - /* 0x2 */ EFFLASTDAY_PARAMS_2, - /* 0x3 */ EFFLASTDAY_PARAMS_3 -} EffLastDayParams; +typedef enum EffLastDayParam { + /* 0 */ EFFLASTDAY_PARAM_0, + /* 1 */ EFFLASTDAY_PARAM_1, + /* 2 */ EFFLASTDAY_PARAM_2, + /* 3 */ EFFLASTDAY_PARAM_3 +} EffLastDayParam; #endif // Z_EFF_LASTDAY_H diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h index 4c8a4eb77..680fdbb75 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h @@ -14,10 +14,10 @@ typedef void (*EnAkindonutsUnkFunc)(struct EnAkindonuts*, PlayState*); #define ENAKINDONUTS_PATH_INDEX_NONE 0x3F -enum { +typedef enum { /* 1 */ ENAKINDONUTS_3_1 = 1, - /* 2 */ ENAKINDONUTS_3_2, -}; + /* 2 */ ENAKINDONUTS_3_2 +} EnAkindonutsParam; typedef struct EnAkindonuts { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.h b/src/overlays/actors/ovl_En_Ani/z_en_ani.h index fcced964b..d0f2e6a12 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.h +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.h @@ -28,10 +28,10 @@ typedef struct EnAni { /* 0x2FC */ EnAniActionFunc actionFunc; } EnAni; // size = 0x300 -enum EnAniType { - /* else */ ANI_TYPE_STANDING, // unfinshed and unused - /* 1 */ ANI_TYPE_TREE_HANGING = 1, -}; +typedef enum EnAniType { + /* 1 */ ANI_TYPE_TREE_HANGING = 1, + /* 2 */ ANI_TYPE_STANDING // unfinshed and unused. Never read as 2, only taken as the "else" case from `ANI_TYPE_TREE_HANGING` +} EnAniType; #define ANI_GET_TYPE(thisx) ((thisx)->params & 0xFF) 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 8d3c6b23b..dcd380256 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 @@ -50,14 +50,14 @@ typedef enum { /* 2 */ EN_AOB01_ANIM_LAUGH_LOOP, /* 3 */ EN_AOB01_ANIM_SURPRISE_START, /* 4 */ EN_AOB01_ANIM_SURPRISE_LOOP, - /* 5 */ EN_AOB01_ANIM_IDLE_2, + /* 5 */ EN_AOB01_ANIM_IDLE_2 } EnAob01Animation; typedef enum { /* 0 */ EN_AOB01_EYE_OPEN, /* 1 */ EN_AOB01_EYE_HALF, /* 2 */ EN_AOB01_EYE_CLOSED, - /* 3 */ EN_AOB01_EYE_MAX, + /* 3 */ EN_AOB01_EYE_MAX } EnAob01EyeTexture; static AnimationInfo sAnimationInfo[] = { 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 b6c5df58d..f4a9005f6 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -72,7 +72,7 @@ typedef enum { /* 10 */ BEAVER_ANIM_TALK_TO_RIGHT, /* 11 */ BEAVER_ANIM_BOW, /* 12 */ BEAVER_ANIM_IDLE_FACE_LEFT, - /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT, + /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT } BeaverAnimation; static AnimationSpeedInfo sAnimationInfo[] = { 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 df47a5f67..4ea6bc475 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -27,18 +27,18 @@ void EnBaguo_UpdateEffects(EnBaguo* this, PlayState* play); void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play); typedef enum { - /* 0x0 */ NEJIRON_ACTION_INACTIVE, // The Nejiron is either underground or emerging from underground - /* 0x1 */ NEJIRON_ACTION_ACTIVE, // The Nejiron is above ground and actively chasing the player - /* 0x2 */ NEJIRON_ACTION_RETREATING, // The Nejiron is burrowing back underground - /* 0x3 */ NEJIRON_ACTION_EXPLODING // The Nejiron has detonated + /* 0 */ NEJIRON_ACTION_INACTIVE, // The Nejiron is either underground or emerging from underground + /* 1 */ NEJIRON_ACTION_ACTIVE, // The Nejiron is above ground and actively chasing the player + /* 2 */ NEJIRON_ACTION_RETREATING, // The Nejiron is burrowing back underground + /* 3 */ NEJIRON_ACTION_EXPLODING // The Nejiron has detonated } NejironAction; /** * These directions are relative to the Nejiron. */ typedef enum { - /* 0x0 */ NEJIRON_DIRECTION_RIGHT, - /* 0x1 */ NEJIRON_DIRECTION_LEFT + /* 0 */ NEJIRON_DIRECTION_RIGHT, + /* 1 */ NEJIRON_DIRECTION_LEFT } NejironRollDirection; ActorInit En_Baguo_InitVars = { 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 048fbfc95..c1d13be5a 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -32,7 +32,7 @@ void EnBb_Revive(EnBb* this, PlayState* play); typedef enum { /* -1 */ BB_BODY_PART_DRAW_STATUS_BROKEN = -1, /* 0 */ BB_BODY_PART_DRAW_STATUS_ALIVE, - /* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD, + /* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD } EnBbBodyPartDrawStatus; ActorInit En_Bb_InitVars = { @@ -73,7 +73,7 @@ typedef enum { /* 0x3 */ EN_BB_DMGEFF_ICE_ARROW = 0x3, /* 0x4 */ EN_BB_DMGEFF_LIGHT_ARROW, /* 0x5 */ EN_BB_DMGEFF_ZORA_MAGIC, - /* 0xE */ EN_BB_DMGEFF_HOOKSHOT = 0xE, + /* 0xE */ EN_BB_DMGEFF_HOOKSHOT = 0xE } EnBbDamageEffect; static DamageTable sDamageTable = { 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 11dace3a5..9fabcecc0 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -32,7 +32,7 @@ void EnBbfall_Frozen(EnBbfall* this, PlayState* play); typedef enum { /* -1 */ BBFALL_BODY_PART_DRAW_STATUS_BROKEN = -1, /* 0 */ BBFALL_BODY_PART_DRAW_STATUS_ALIVE, - /* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD, + /* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD } EnBbfallBodyPartDrawStatus; ActorInit En_Bbfall_InitVars = { @@ -102,7 +102,7 @@ typedef enum { /* 0x3 */ EN_BBFALL_DMGEFF_ICE_ARROW = 0x3, /* 0x4 */ EN_BBFALL_DMGEFF_LIGHT_ARROW, /* 0x5 */ EN_BBFALL_DMGEFF_ZORA_MAGIC, - /* 0xE */ EN_BBFALL_DMGEFF_HOOKSHOT = 0xE, + /* 0xE */ EN_BBFALL_DMGEFF_HOOKSHOT = 0xE } EnBbfallDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.h b/src/overlays/actors/ovl_En_Bee/z_en_bee.h index 09d9ef931..b1773a5ca 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.h +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.h @@ -9,8 +9,8 @@ struct EnBee; typedef void (*EnBeeActionFunc)(struct EnBee*, PlayState*); typedef enum { - /* 0 */ BEE_BEHAVIOR_IDLE = 0, - /* 1 */ BEE_BEHAVIOR_ATTACK, + /* 0 */ BEE_BEHAVIOR_IDLE, + /* 1 */ BEE_BEHAVIOR_ATTACK } BeeBehaviorType; typedef struct EnBee { diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h index bb9d29280..a3561c33b 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h @@ -8,10 +8,10 @@ struct EnBigpamet; typedef void (*EnBigpametActionFunc)(struct EnBigpamet*, PlayState*); -enum { +typedef enum { /* 0 */ ENBIGPAMET_0, - /* 1 */ ENBIGPAMET_1, -}; + /* 1 */ ENBIGPAMET_1 +} EnBigpametParam; typedef struct { /* 0x00 */ Vec3f unk_00; 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 9b84784f4..b532d6d08 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -53,16 +53,16 @@ typedef struct EnBigpo { /* 0x338 */ EnBigpoFireEffect fires[3]; } EnBigpo; // size = 0x398 -// well ver is regular, dampe basement ver is summoned -// on spawn, 3/possible fires are turned into chosenfire -enum EnBigpoType { +// well version is "regular" (spawns automatically), dampe basement version is "summoned" +// on room enter, 3 "possiblefire" are turned into "chosenfire" at random +typedef enum EnBigpoType { /* 0 */ ENBIGPO_REGULAR, /* 1 */ ENBIGPO_SUMMONED, /* 2 */ ENBIGPO_POSSIBLEFIRE, /* 3 */ ENBIGPO_CHOSENFIRE, /* 4 */ ENBIGPO_REVEALEDFIRE, - /* 5 */ ENBIGPO_UNK5, -}; + /* 5 */ ENBIGPO_UNK5 +} EnBigpoType; #define BIGPO_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8) 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 75e6fa38e..1a90fd29b 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -254,7 +254,7 @@ typedef enum { /* 0x5 */ BIGSLIME_DMGEFF_ELECTRIC_STUN, /* 0xD */ BIGSLIME_DMGEFF_DEKU_STUN = 0xD, /* 0xE */ BIGSLIME_DMGEFF_HOOKSHOT, - /* 0xF */ BIGSLIME_DMGEFF_BREAK_ICE, + /* 0xF */ BIGSLIME_DMGEFF_BREAK_ICE } BigslimeDamageEffect; static DamageTable sDamageTable = { 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 6aa9f9e35..ef5c9c0e2 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -229,7 +229,7 @@ typedef enum { /* 1 */ TOILET_HAND_BEHAVIOUR_TAKE_ITEM, // take paper and disappear to use it /* 2 */ TOILET_HAND_BEHAVIOUR_USE_ITEM, // using paper, flushing /* 3 */ TOILET_HAND_BEHAVIOUR_REAPPEAR, // reappear with reward - /* 4 */ TOILET_HAND_BEHAVIOUR_REWARD_GIVEN, + /* 4 */ TOILET_HAND_BEHAVIOUR_REWARD_GIVEN } ToiletHandBehaviour; // msgevent callback/communication. Follow and choose parts of script to run 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 40558a919..d11547230 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -13,14 +13,14 @@ typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*); typedef enum BombType { /* 0 */ BOMB_TYPE_BODY, - /* 1 */ BOMB_TYPE_EXPLOSION, + /* 1 */ BOMB_TYPE_EXPLOSION } BombType; // Passed via x rotation -typedef enum EnBomExplosiveType { +typedef enum BombExplosiveType { /* 0 */ BOMB_EXPLOSIVE_TYPE_BOMB, - /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG, -} EnBomExplosiveType; + /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG +} BombExplosiveType; typedef struct EnBom { /* 0x000 */ Actor actor; 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 85c5ecdb3..1585613ce 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h @@ -10,13 +10,13 @@ typedef void (*EnBombersActionFunc)(struct EnBombers*, PlayState*); #define ENBOMBERS_GET_F(thisx) ((thisx)->params & 0xF) #define ENBOMBERS_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) -enum { +typedef enum { /* 0 */ ENBOMBERS_F_0, /* 1 */ ENBOMBERS_F_1, /* 2 */ ENBOMBERS_F_2, /* 3 */ ENBOMBERS_F_3, - /* 4 */ ENBOMBERS_F_4, -}; + /* 4 */ ENBOMBERS_F_4 +} EnBombersParam; #define ENBOMBERS_F0_0 0 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 8260386df..7c2a64841 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -39,7 +39,7 @@ void func_80C00168(EnBomjima* this, PlayState* play); void func_80C00234(EnBomjima* this); void func_80C00284(EnBomjima* this, PlayState* play); -typedef enum EN_BOMJIMA_ACTION { +typedef enum EnBomjimaAction { /* 0 */ EN_BOMJIMA_ACTION_0, /* 1 */ EN_BOMJIMA_ACTION_1, /* 2 */ EN_BOMJIMA_ACTION_2, @@ -47,8 +47,8 @@ typedef enum EN_BOMJIMA_ACTION { /* 4 */ EN_BOMJIMA_ACTION_4, /* 5 */ EN_BOMJIMA_ACTION_5, /* 6 */ EN_BOMJIMA_ACTION_6, - /* 7 */ EN_BOMJIMA_ACTION_7, -} EN_BOMJIMA_ACTION; + /* 7 */ EN_BOMJIMA_ACTION_7 +} EnBomjimaAction; static s32 D_80C009F0 = 0; static s32 D_80C009F4 = 0; diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h index f411f21a2..a784e335d 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h @@ -11,19 +11,19 @@ typedef void (*EnBomjimbActionFunc)(struct EnBomjimb*, PlayState*); #define ENBOMJIMB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) #define ENBOMJIMB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -enum { +typedef enum { /* 0 */ ENBOMJIMB_F_0, /* 1 */ ENBOMJIMB_F_1, /* 2 */ ENBOMJIMB_F_2, /* 3 */ ENBOMJIMB_F_3, - /* 4 */ ENBOMJIMB_F_4, -}; + /* 4 */ ENBOMJIMB_F_4 +} EnBomjimbParamF; -enum { +typedef enum { /* 0 */ ENBOMJIMB_F0_0, /* 1 */ ENBOMJIMB_F0_1, - /* 2 */ ENBOMJIMB_F0_2, -}; + /* 2 */ ENBOMJIMB_F0_2 +} EnBomjimbParamF0; typedef struct EnBomjimb { /* 0x000 */ Actor 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 9165b9392..f9b5b3d41 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -311,7 +311,7 @@ typedef struct { /* 0x00 */ Gfx* unk_00; /* 0x04 */ Vec3f unk_04; /* 0x10 */ Vec3f unk_10; -} EnBoomStruct; +} EnBoomStruct; // size = 0x1C EnBoomStruct D_808A3078[] = { { gameplay_keep_DL_06FE20, { -960.0f, 0.0f, 0.0f }, { 960.0f, 0.0f, 0.0f } }, 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 b65b2c63d..044f54334 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -73,7 +73,7 @@ static InitChainEntry sInitChain[] = { }; typedef struct { - f32 data[5]; + /* 0x0 */ f32 data[5]; } EnBox_PlaybackSpeed; // 0x14 static EnBox_PlaybackSpeed sPlaybackSpeed = { { 1.5f, 1.0f, 1.5f, 1.0f, 1.5f } }; 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 7666f8e12..4becc2fe6 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 @@ -20,7 +20,7 @@ typedef enum { /* 0x05 */ CLEAR_TAG_EFFECT_LIGHT_RAYS, /* 0x06 */ CLEAR_TAG_EFFECT_SHOCKWAVE, /* 0x07 */ CLEAR_TAG_EFFECT_SPLASH, - /* 0x08 */ CLEAR_TAG_EFFECT_ISOLATED_SMOKE, + /* 0x08 */ CLEAR_TAG_EFFECT_ISOLATED_SMOKE } ClearTagEffectType; void EnClearTag_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h index 977bf2473..c002dc5e3 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h @@ -21,7 +21,7 @@ typedef enum { /* 1 */ EN_COL_MAN_RECOVERY_HEART, /* 2 */ EN_COL_MAN_FALLING_ROCK, /* 3 */ EN_COL_MAN_CUTSCENE_BOMB, - /* 4 */ EN_COL_MAN_GAMEPLAY_BOMB, + /* 4 */ EN_COL_MAN_GAMEPLAY_BOMB } EnColManType; #endif // Z_EN_COL_MAN_H diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.h b/src/overlays/actors/ovl_En_Cow/z_en_cow.h index 3c73b747f..200ec5bec 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.h +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.h @@ -10,9 +10,9 @@ #define EN_COW_FLAG_WONT_GIVE_MILK (1 << 2) typedef enum { - /* 0 */ EN_COW_TYPE_DEFAULT, - /* 1 */ EN_COW_TYPE_TAIL, - /* 2 */ EN_COW_TYPE_ABDUCTED, + /* 0 */ EN_COW_TYPE_DEFAULT, + /* 1 */ EN_COW_TYPE_TAIL, + /* 2 */ EN_COW_TYPE_ABDUCTED } EnCowType; struct EnCow; 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 f524e6d5e..ec9a11b4c 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -74,7 +74,7 @@ typedef enum { /* 2 */ GUAY_DMGEFF_FIRE, /* 3 */ GUAY_DMGEFF_ICE, /* 4 */ GUAY_DMGEFF_LIGHT, - /* 5 */ GUAY_DMGEFF_ELECTRIC, + /* 5 */ GUAY_DMGEFF_ELECTRIC } GuayDamageEffect; static DamageTable sDamageTable = { 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 2900f4d34..2c232f096 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -76,14 +76,14 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU_GET_FF(&this->actor); - if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { + if (this->unk_278 == ENDAIKU_PARAM_FF_3) { this->pathIndex = ENDAIKU_GET_PATH_INDEX(&this->actor); this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU_PATH_INDEX_NONE); - } else if (this->unk_278 == ENDAIKU_PARAMS_FF_2) { + } else if (this->unk_278 == ENDAIKU_PARAM_FF_2) { this->unk_264 = -2000; } - if (this->unk_278 == ENDAIKU_PARAMS_FF_0) { + if (this->unk_278 == ENDAIKU_PARAM_FF_0) { this->collider.dim.radius = 30; this->collider.dim.height = 60; this->collider.dim.yShift = 0; @@ -100,20 +100,20 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -3.0f; switch (this->unk_278) { - case ENDAIKU_PARAMS_FF_0: + case ENDAIKU_PARAM_FF_0: this->unk_27E = this->unk_278 * 4 + 4; - case ENDAIKU_PARAMS_FF_1: + case ENDAIKU_PARAM_FF_1: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, this->morphTable, 17); break; - case ENDAIKU_PARAMS_FF_2: + case ENDAIKU_PARAM_FF_2: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_00B690, this->jointTable, this->morphTable, 17); break; - case ENDAIKU_PARAMS_FF_3: + case ENDAIKU_PARAM_FF_3: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_001114, this->jointTable, this->morphTable, 17); break; @@ -173,7 +173,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { s32 pad2; if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { - if (this->unk_278 == ENDAIKU_PARAMS_FF_1) { + if (this->unk_278 == ENDAIKU_PARAM_FF_1) { this->actor.textId = 0x2365; } else { this->actor.textId = 0x2366; @@ -188,7 +188,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { return; } - if ((this->unk_278 == ENDAIKU_PARAMS_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { if (Rand_ZeroOne() < 0.5f) { func_8094373C(this, 7); } else { @@ -196,7 +196,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { } } - if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { + if (this->unk_278 == ENDAIKU_PARAM_FF_3) { f32 xzDist; f32 yawDiff; @@ -219,11 +219,11 @@ void func_809438F8(EnDaiku* this, PlayState* play) { } } - if (this->unk_278 != ENDAIKU_PARAMS_FF_0) { + if (this->unk_278 != ENDAIKU_PARAM_FF_0) { s16 angle = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y)); this->unk_280 = this->actor.yawTowardsPlayer; - if ((this->unk_278 == ENDAIKU_PARAMS_FF_1) || (this->unk_278 == ENDAIKU_PARAMS_FF_2) || (angle <= 0x2890)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_1) || (this->unk_278 == ENDAIKU_PARAM_FF_2) || (angle <= 0x2890)) { func_800B8614(&this->actor, play, 100.0f); } } @@ -237,7 +237,7 @@ void func_80943BC0(EnDaiku* this) { void func_80943BDC(EnDaiku* this, PlayState* play) { f32 currentFrame = this->skelAnime.curFrame; - if ((this->unk_278 == ENDAIKU_PARAMS_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { if (Rand_ZeroOne() < 0.5f) { func_8094373C(this, 7); } else { @@ -259,7 +259,7 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); } - if ((this->unk_278 == ENDAIKU_PARAMS_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) { Actor_Kill(&this->actor); return; } @@ -314,7 +314,7 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro gSPDisplayList(POLY_OPA_DISP++, D_809440D4[this->unk_278]); } - if ((this->unk_278 == ENDAIKU_PARAMS_FF_3) && (limbIndex == 8)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == 8)) { gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_008EC8); } diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h index c75afec6e..ff88c8c9a 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h @@ -12,12 +12,12 @@ typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*); #define ENDAIKU_PATH_INDEX_NONE 0x3F -enum { - /* 0x0 */ ENDAIKU_PARAMS_FF_0, - /* 0x1 */ ENDAIKU_PARAMS_FF_1, - /* 0x2 */ ENDAIKU_PARAMS_FF_2, - /* 0x3 */ ENDAIKU_PARAMS_FF_3, -}; +typedef enum { + /* 0 */ ENDAIKU_PARAM_FF_0, + /* 1 */ ENDAIKU_PARAM_FF_1, + /* 2 */ ENDAIKU_PARAM_FF_2, + /* 3 */ ENDAIKU_PARAM_FF_3 +} EnDaikuParam; typedef struct EnDaiku { /* 0x000 */ Actor actor; 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 775b2453f..58fc26b9a 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -13,11 +13,11 @@ typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); #define ENDAIKU2_PATH_INDEX_NONE 0x3F -enum { +typedef enum { /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1, /* 0 */ ENDAIKU2_GET_7F_0, - /* 127 */ ENDAIKU2_GET_7F_127 = 127, -}; + /* 127 */ ENDAIKU2_GET_7F_127 = 127 +} EnDaiku2Param; typedef struct EnDaiku2Effect { /* 0x00 */ u8 isEnabled; diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h index 59b6677a0..248f758ac 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h @@ -10,12 +10,12 @@ typedef void (*EnDekunutsActionFunc)(struct EnDekunuts*, PlayState*); #define ENDEKUNUTS_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -enum { +typedef enum { /* 0x00 */ ENDEKUNUTS_GET_FF00_0, /* 0x01 */ ENDEKUNUTS_GET_FF00_1, /* 0x02 */ ENDEKUNUTS_GET_FF00_2, /* 0xFF */ ENDEKUNUTS_GET_FF00_FF = 0xFF -}; +} EnDekunutsParam; typedef struct EnDekunuts { /* 0x000 */ Actor actor; 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 5b5857c94..faacd7510 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 @@ -23,11 +23,11 @@ void EnDemoheishi_Talk(EnDemoheishi* this, PlayState* play); s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); typedef enum { - /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, - /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, - /* 2 */ DEMOHEISHI_ANIM_WAVE, - /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, - /* 4 */ DEMOHEISHI_ANIM_STAND_UP + /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, + /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, + /* 2 */ DEMOHEISHI_ANIM_WAVE, + /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, + /* 4 */ DEMOHEISHI_ANIM_STAND_UP } EnDemoheishiAnimation; ActorInit En_Demo_heishi_InitVars = { 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 849ae3378..d80013a99 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -62,7 +62,7 @@ ActorInit En_Dg_InitVars = { typedef enum { /* 0 */ DOG_GRAB_STATE_NONE, /* 1 */ DOG_GRAB_STATE_HELD, - /* 2 */ DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW, + /* 2 */ DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW } DogGrabState; typedef enum { @@ -74,7 +74,7 @@ typedef enum { /* 5 */ DOG_BEHAVIOR_ZORA_WAIT, /* 6 */ DOG_BEHAVIOR_DEKU, /* 7 */ DOG_BEHAVIOR_DEKU_WAIT, - /* 8 */ DOG_BEHAVIOR_DEFAULT, + /* 8 */ DOG_BEHAVIOR_DEFAULT } DogBehavior; static u8 sIsAnyDogHeld = false; @@ -85,10 +85,10 @@ static s16 sBremenMaskFollowerIndex = ENDG_INDEX_NO_BREMEN_MASK_FOLLOWER; * Stores the state for the dogs milling about at the Doggy Racetrack. */ typedef struct { - s16 color; // The dog's color, which is used as an index into sBaseSpeeds - s16 index; // The dog's index within sDogInfo - s16 textId; // The ID of the text to display when the dog is picked up -} RacetrackDogInfo; + /* 0x0 */ s16 color; // The dog's color, which is used as an index into sBaseSpeeds + /* 0x2 */ s16 index; // The dog's index within sDogInfo + /* 0x4 */ s16 textId; // The ID of the text to display when the dog is picked up +} RacetrackDogInfo; // size = 0x6 /** * A table of RacetrackDogInfo for every dog at the Doggy Racetrack. Note that the textId values diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.h b/src/overlays/actors/ovl_En_Dg/z_en_dg.h index 9f8203987..e36342706 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.h +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.h @@ -11,8 +11,8 @@ typedef enum { /* 3 */ DOG_COLOR_BEIGE, /* 4 */ DOG_COLOR_BROWN, /* 5 */ DOG_COLOR_BLUE, - /* 6 */ DOG_COLOR_GOLD, -} DogColors; + /* 6 */ DOG_COLOR_GOLD +} DogColor; struct EnDg; 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 f0665f1b5..57467b3f1 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h @@ -10,13 +10,13 @@ typedef void (*EnDnkActionFunc)(struct EnDnk*, PlayState*); #define ENDNK_GET_3(thisx) ((thisx)->params & 0x3) #define ENDNK_GET_3C(thisx) ((thisx)->params & 0x3C) -enum { - /* 0x0 */ ENDNK_GET_3_0, - /* 0x1 */ ENDNK_GET_3_1, - /* 0x2 */ ENDNK_GET_3_2, - /* 0x3 */ ENDNK_GET_3_3, - /* 0x4 */ ENDNK_GET_3_4, -}; +typedef enum { + /* 0 */ ENDNK_GET_3_0, + /* 1 */ ENDNK_GET_3_1, + /* 2 */ ENDNK_GET_3_2, + /* 3 */ ENDNK_GET_3_3, + /* 4 */ ENDNK_GET_3_4 +} EnDnkParam; typedef struct EnDnk { /* 0x000 */ Actor actor; 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 b7eb08743..904a18e62 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -63,7 +63,7 @@ typedef enum { /* 16 */ EN_DNO_ANIM_IMPLORE_START, /* 17 */ EN_DNO_ANIM_SHOCK_START, /* 18 */ EN_DNO_ANIM_SHOCK_LOOP, - /* 19 */ EN_DNO_ANIM_GRIEVE, + /* 19 */ EN_DNO_ANIM_GRIEVE } EnDnoAnimation; static AnimationSpeedInfo sAnimations[] = { diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.h b/src/overlays/actors/ovl_En_Dno/z_en_dno.h index f9a55cd4e..b2e7f750f 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.h +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.h @@ -13,8 +13,8 @@ typedef void (*EnDnoActionFunc)(struct EnDno*, PlayState*); #define EN_DNO_GET_C000(thisx) (((thisx)->params >> 0xE) & 0x3) typedef enum { - /* 0x0 */ EN_DNO_GET_C000_0, - /* 0x1 */ EN_DNO_GET_C000_1, + /* 0 */ EN_DNO_GET_C000_0, + /* 1 */ EN_DNO_GET_C000_1 } EnDnoUnkC000; typedef struct EnDno { 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 0b3c5ac85..1dd5dac34 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -29,7 +29,7 @@ typedef enum { /* 1 */ EN_DNP_EYE_HALF, /* 2 */ EN_DNP_EYE_CLOSED, /* 3 */ EN_DNP_EYE_ANGRY, - /* 4 */ EN_DNP_EYE_MAX, + /* 4 */ EN_DNP_EYE_MAX } EnDnpEyeIndex; ActorInit En_Dnp_InitVars = { diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h index 64f0baf93..9b02f19d3 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h @@ -11,9 +11,9 @@ typedef void (*EnDnpActionFunc)(struct EnDnp*, PlayState*); #define EN_DNP_GET_TYPE(thisx) ((thisx)->params & 7) typedef enum { - /* 0x0 */ EN_DNP_TYPE_WOODFALL_TEMPLE, - /* 0x1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE, - /* 0x2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER, + /* 0 */ EN_DNP_TYPE_WOODFALL_TEMPLE, + /* 1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE, + /* 2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER } EnDnpType; typedef struct EnDnp { 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 f481f3d6b..d662e7e55 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -30,7 +30,7 @@ typedef enum { /* 7 */ EN_DNS_ANIM_RUN_LOOP, /* 8 */ EN_DNS_ANIM_DANCE, /* 9 */ EN_DNS_ANIM_FLIP, - /* 10 */ EN_DNS_ANIM_MAX, + /* 10 */ EN_DNS_ANIM_MAX } EnDnsAnimation; static s32 D_8092DCB0[] = { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.h b/src/overlays/actors/ovl_En_Dns/z_en_dns.h index 4b730abd3..ade8b6174 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h @@ -13,12 +13,12 @@ typedef s32 (*EnDnsFunc)(struct EnDns*, PlayState*); #define ENDNS_GET_4000(thisx) ((thisx)->params & 0x4000) #define ENDNS_GET_8000(thisx) ((thisx)->params & 0x8000) -enum { - /* 0x0 */ ENDNS_GET_7_0, - /* 0x1 */ ENDNS_GET_7_1, - /* 0x2 */ ENDNS_GET_7_2, - /* 0x3 */ ENDNS_GET_7_3, -}; +typedef enum { + /* 0 */ ENDNS_GET_7_0, + /* 1 */ ENDNS_GET_7_1, + /* 2 */ ENDNS_GET_7_2, + /* 3 */ ENDNS_GET_7_3 +} EnDnsParam; typedef struct EnDns { /* 0x000 */ Actor actor; 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 91d243464..60d0ec673 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -289,10 +289,10 @@ ActorInit En_Door_InitVars = { }; typedef struct { - /* 0x00 */ s16 sceneId; - /* 0x02 */ u8 dListIndex; - /* 0x04 */ s16 objectId; -} EnDoorInfo; + /* 0x0 */ s16 sceneId; + /* 0x2 */ u8 dListIndex; + /* 0x4 */ s16 objectId; +} EnDoorInfo; // size = 0x6 static EnDoorInfo sObjInfo[] = { { SCENE_MITURIN, 0x01, OBJECT_NUMA_OBJ }, @@ -394,7 +394,7 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { this->doorType = ENDOOR_GET_TYPE(thisx); - this->switchFlag = ENDOOR_GET_PARAMS_7F(thisx); + this->switchFlag = ENDOOR_GET_PARAM_7F(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 b6fc7c254..03dc31ab6 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_PARAMS_7F(thisx) (((thisx)->params) & 0x7F) +#define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F) typedef enum EnDoorType { /* 0 */ ENDOOR_TYPE_0, 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 f03b2702e..d2acb55be 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -35,17 +35,17 @@ typedef enum { /* 0 */ DEEP_PYTHON_EXTEND_STATE_NOT_FULLY_EXTENDED, /* 1 */ DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED, /* 2 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_LARGE_SWAY, - /* 3 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY, + /* 3 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY } DeepPythonExtendState; typedef enum { /* 0 */ DEEP_PYTHON_GRAB_STATE_START, - /* 1 */ DEEP_PYTHON_GRAB_STATE_GRABBED, + /* 1 */ DEEP_PYTHON_GRAB_STATE_GRABBED } DeepPythonGrabState; typedef enum { /* 0 */ DEEP_PYTHON_ATTACK_STATE_START, - /* 1 */ DEEP_PYTHON_ATTACK_STATE_RELEASED, + /* 1 */ DEEP_PYTHON_ATTACK_STATE_RELEASED } DeepPythonAttackState; static s32 sNumPythonsDead = 0; diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h index 2d5f31b54..a35c8fa9b 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h @@ -13,7 +13,7 @@ typedef enum { /* 3 */ DEEP_PYTHON_ACTION_DAMAGE, /* 4 */ DEEP_PYTHON_ACTION_RETREAT, /* 5 */ DEEP_PYTHON_ACTION_SETUP_DEAD, - /* 6 */ DEEP_PYTHON_ACTION_DEAD, + /* 6 */ DEEP_PYTHON_ACTION_DEAD } DeepPythonAction; struct EnDragon; diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 6f67950ab..2a9a0ac67 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -13,7 +13,7 @@ typedef enum { /* 0 */ EGBLOCK_EFFECT_DEBRIS_SOLID, - /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT, + /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT } EnEgblockEffectType; void EnEgblock_Init(Actor* thisx, PlayState* play); 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 bcb7c6fa2..c9750991a 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -37,7 +37,7 @@ typedef enum { /* 0 */ EYEGORE_EFFECT_IMPACT, /* 1 */ EYEGORE_EFFECT_PIECE_LARGE, /* 2 */ EYEGORE_EFFECT_PIECE_SMALL, - /* 3 */ EYEGORE_EFFECT_DEBRIS, + /* 3 */ EYEGORE_EFFECT_DEBRIS } EnEgolEffectType; typedef enum { @@ -56,7 +56,7 @@ typedef enum { /* 12 */ EYEGORE_ANIM_SIT, /* 13 */ EYEGORE_ANIM_LEFT_PUNCH, /* 14 */ EYEGORE_ANIM_RIGHT_PUNCH, - /* 15 */ EYEGORE_ANIM_MAX, + /* 15 */ EYEGORE_ANIM_MAX } EnEgolAnimation; typedef enum { @@ -64,7 +64,7 @@ typedef enum { /* 1 */ EYEGORE_LASER_START, /* 2 */ EYEGORE_LASER_CHARGING, /* 3 */ EYEGORE_LASER_FIRE, - /* 7 */ EYEGORE_LASER_ON = 7, + /* 7 */ EYEGORE_LASER_ON = 7 } EnEgolLaserState; void EnEgol_Init(Actor* thisx, PlayState* play); @@ -238,7 +238,7 @@ typedef enum { /* 0x0 */ EYEGORE_DMGEFF_IMMUNE_0, /* 0x4 */ EYEGORE_DMGEFF_LIGHT_ARROW = 4, /* 0xE */ EYEGORE_DMGEFF_NONE = 0xE, - /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F, + /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F } EnEgolDamageEffect; static DamageTable sDamageTable = { @@ -1101,7 +1101,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { typedef enum { /* 0 */ EYEGORE_HIT_NONE, /* 1 */ EYEGORE_HIT_DAMAGE, - /* 2 */ EYEGORE_HIT_IMMUNE, // Makes hitmarks, but no reaction + /* 2 */ EYEGORE_HIT_IMMUNE // Makes hitmarks, but no reaction } EyegoreHitReaction; void EnEgol_CollisionCheck(EnEgol* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.h b/src/overlays/actors/ovl_En_Elf/z_en_elf.h index 680d59158..18e444e97 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.h +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.h @@ -50,14 +50,14 @@ typedef struct EnElf { } EnElf; // size = 0x274 typedef enum { - /* 0x00 */ ENELF_TYPE_0, - /* 0x01 */ ENELF_TYPE_1, - /* 0x02 */ ENELF_TYPE_2, - /* 0x03 */ ENELF_TYPE_3, - /* 0x04 */ ENELF_TYPE_4, - /* 0x05 */ ENELF_TYPE_5, - /* 0x06 */ ENELF_TYPE_6, - /* 0x07 */ ENELF_TYPE_7 + /* 0 */ ENELF_TYPE_0, + /* 1 */ ENELF_TYPE_1, + /* 2 */ ENELF_TYPE_2, + /* 3 */ ENELF_TYPE_3, + /* 4 */ ENELF_TYPE_4, + /* 5 */ ENELF_TYPE_5, + /* 6 */ ENELF_TYPE_6, + /* 7 */ ENELF_TYPE_7 } FairyType; #endif // Z_EN_ELF_H 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 975b08c2c..692a76d82 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h @@ -10,13 +10,13 @@ typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*); #define ENELFGRP_GET(thisx) ((thisx)->params & 0xF) #define ENELFGRP_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) -enum { +typedef enum { /* 0 */ ENELFGRP_0, /* 2 */ ENELFGRP_1, /* 2 */ ENELFGRP_2, /* 3 */ ENELFGRP_3, - /* 4 */ ENELFGRP_4, -}; + /* 4 */ ENELFGRP_4 +} EnElfgrpParam; typedef struct EnElfgrp { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h index 5c8e6db83..85e1b3ca4 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h @@ -18,7 +18,7 @@ typedef enum EnEncount1Enemy { /* 0 */ EN_ENCOUNT1_GRASSHOPPER, /* 1 */ EN_ENCOUNT1_WALLMASTER, /* 2 */ EN_ENCOUNT1_SKULLFISH, - /* 3 */ EN_ENCOUNT1_SKULLFISH_2, + /* 3 */ EN_ENCOUNT1_SKULLFISH_2 } EnEncount1Enemy; struct EnEncount1; 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 8d9a18cf1..972d038ae 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -103,11 +103,11 @@ void func_809C4078(EnEncount4* this, PlayState* play) { return; } - fireWallParams = BGFIREWALL_PARAMS_0; + fireWallParams = BGFIREWALL_PARAM_0; if ((this->unk_148 == 0) || (captainKeeta->unk2DC != 0)) { i = 0; if (this->unk_148 != 0) { - fireWallParams = BGFIREWALL_PARAMS_1; + fireWallParams = BGFIREWALL_PARAM_1; i = 2; } while (i < ARRAY_COUNT(D_809C46DC)) { @@ -174,7 +174,7 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { pos.x += Math_SinS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); pos.z += Math_CosS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SKB, pos.x, pos.y, pos.z, 0, 0, 0, - ENSKB_PARAMS_0) != NULL) { + ENSKB_PARAM_0) != NULL) { this->unk_14C++; if (this->unk_14C >= 2) { this->actionFunc = func_809C4598; diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.h b/src/overlays/actors/ovl_En_Estone/z_en_estone.h index ceb26c9c6..f9b44b944 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.h +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.h @@ -11,7 +11,7 @@ typedef void (*EnEstoneActionFunc)(struct EnEstone*, PlayState*); typedef enum { /* 0 */ ENESTONE_TYPE_LARGE, - /* 1 */ ENESTONE_TYPE_SMALL, + /* 1 */ ENESTONE_TYPE_SMALL } EnEstoneType; typedef struct { 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 8c975dbad..2f226e61c 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -52,11 +52,11 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play); void EnFall_MoonsTear_Draw(Actor* thisx, PlayState* play); typedef struct { - u8 modelIndex; - Vec3f pos; - Vec3f velocity; - Vec3s rot; -} EnFallDebrisEffect; + /* 0x00 */ u8 modelIndex; + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3s rot; +} EnFallDebrisEffect; // size = 0x24 #define EN_FALL_DEBRIS_EFFECT_COUNT 50 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 c9eaaf44f..60bb7ec33 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.h +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.h @@ -19,7 +19,7 @@ typedef enum { /* 9 */ EN_FALL_TYPE_CLOCK_TOWER_MOON, /* 10 */ EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH, /* 11 */ EN_FALL_TYPE_CRASH_FIRE_RING, - /* 12 */ EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER, + /* 12 */ EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER } EnFallType; struct EnFall; diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.h b/src/overlays/actors/ovl_En_Fg/z_en_fg.h index 6440812ca..a1917b9bc 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.h +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.h @@ -9,21 +9,21 @@ typedef void (*EnFgActionFunc)(struct EnFg*, PlayState*); // Based on the envColor data. Related to params but mostly unused. typedef enum { - /* 0x0 */ FG_YELLOW, - /* 0x1 */ FG_CYAN, - /* 0x2 */ FG_PINK, - /* 0x3 */ FG_BLUE, - /* 0x4 */ FG_WHITE, - /* 0x5 */ FG_BLACK, // All frogs are blackened when hit by an explosion + /* 0 */ FG_YELLOW, + /* 1 */ FG_CYAN, + /* 2 */ FG_PINK, + /* 3 */ FG_BLUE, + /* 4 */ FG_WHITE, + /* 5 */ FG_BLACK // All frogs are blackened when hit by an explosion } FrogType; typedef enum { - /* 0x0 */ FG_DMGEFFECT_NONE, - /* 0x1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg - /* 0x2 */ FG_DMGEFFECT_DEKUSTICK, - /* 0x3 */ FG_DMGEFFECT_HOOKSHOT, - /* 0x4 */ FG_DMGEFFECT_ARROW, - /* 0x5 */ FG_DMGEFFECT_ICEARROW, + /* 0 */ FG_DMGEFFECT_NONE, + /* 1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg + /* 2 */ FG_DMGEFFECT_DEKUSTICK, + /* 3 */ FG_DMGEFFECT_HOOKSHOT, + /* 4 */ FG_DMGEFFECT_ARROW, + /* 5 */ FG_DMGEFFECT_ICEARROW } FrogDamageEffect; typedef struct { diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.h b/src/overlays/actors/ovl_En_Fish/z_en_fish.h index d3941906c..2a348051e 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h @@ -7,12 +7,12 @@ struct EnFish; typedef void (*EnFishUnkFunc)(Actor*, PlayState*); -enum { +typedef enum { /* -1 */ ENFISH_MINUS1 = -1, /* 0 */ ENFISH_0, /* 1 */ ENFISH_1, - /* 2 */ ENFISH_2, -}; + /* 2 */ ENFISH_2 +} EnFishParam; typedef struct EnFish { /* 0x000 */ Actor actor; 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 010106fe5..2ada30cba 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -25,24 +25,24 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2); void EnFishing_DrawOwner(Actor* thisx, PlayState* play); typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x02 */ Vec3s pos; - /* 0x08 */ u8 unk_08; - /* 0x0C */ f32 unk_0C; + /* 0x0 */ u8 unk_00; + /* 0x2 */ Vec3s pos; + /* 0x8 */ u8 unk_08; + /* 0xC */ f32 unk_0C; } FishingFishInit; // size = 0x10 #define EFFECT_COUNT 130 typedef enum { - /* 0x00 */ FS_EFF_NONE, - /* 0x01 */ FS_EFF_RIPPLE, - /* 0x02 */ FS_EFF_DUST_SPLASH, - /* 0x03 */ FS_EFF_WATER_DUST, - /* 0x04 */ FS_EFF_BUBBLE, - /* 0x05 */ FS_EFF_RAIN_DROP, - /* 0x06 */ FS_EFF_OWNER_HAT, - /* 0x07 */ FS_EFF_RAIN_RIPPLE, - /* 0x08 */ FS_EFF_RAIN_SPLASH + /* 0 */ FS_EFF_NONE, + /* 1 */ FS_EFF_RIPPLE, + /* 2 */ FS_EFF_DUST_SPLASH, + /* 3 */ FS_EFF_WATER_DUST, + /* 4 */ FS_EFF_BUBBLE, + /* 5 */ FS_EFF_RAIN_DROP, + /* 6 */ FS_EFF_OWNER_HAT, + /* 7 */ FS_EFF_RAIN_RIPPLE, + /* 8 */ FS_EFF_RAIN_SPLASH } FishingEffectType; typedef struct { @@ -73,9 +73,9 @@ typedef enum { } FishingPropType; typedef struct { - /* 0x00 */ u8 type; - /* 0x02 */ Vec3s pos; -} FishingPropInit; // size = 0x08 + /* 0x0 */ u8 type; + /* 0x2 */ Vec3s pos; +} FishingPropInit; // size = 0x8 typedef struct { /* 0x00 */ Vec3f pos; @@ -93,8 +93,8 @@ typedef struct { } FishingProp; // size = 0x3C typedef enum { - /* 0x00 */ FS_GROUP_FISH_NONE, - /* 0x01 */ FS_GROUP_FISH_NORMAL + /* 0 */ FS_GROUP_FISH_NONE, + /* 1 */ FS_GROUP_FISH_NORMAL } FishingGroupFishType; #define GROUP_FISH_COUNT 60 diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h index 002f9e67c..628cad4f6 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h @@ -11,12 +11,12 @@ typedef void (*EnFloormasActionFunc)(struct EnFloormas*, PlayState*); #define ENFLOORMAS_GET_7FFF(thisx) ((thisx)->params & 0x7FFF) #define ENFLOORMAS_GET_8000(thisx) ((thisx)->params & 0x8000) -enum { +typedef enum { /* 0x00 */ ENFLOORMAS_GET_7FFF_0, /* 0x10 */ ENFLOORMAS_GET_7FFF_10 = 0x10, /* 0x20 */ ENFLOORMAS_GET_7FFF_20 = 0x20, - /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40, -}; + /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40 +} EnFloormasParam; typedef struct EnFloormas { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.h b/src/overlays/actors/ovl_En_Fz/z_en_fz.h index 539560c88..ac1cb0648 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.h +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.h @@ -13,12 +13,12 @@ typedef void (*EnFzUnkFunc)(struct EnFz*); #define ENFZ_GET_4000(thisx) ((thisx)->params & 0x4000) #define ENFZ_GET_8000(thisx) ((thisx)->params & 0x8000) -enum { +typedef enum { /* 0 */ ENFZ_F_0, /* 1 */ ENFZ_F_1, /* 2 */ ENFZ_F_2, - /* 3 */ ENFZ_F_3, -}; + /* 3 */ ENFZ_F_3 +} EnFzParam; typedef struct { /* 0x00 */ u8 unk_00; diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h index 04d9c7159..5602a3b4f 100644 --- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h +++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h @@ -10,8 +10,8 @@ typedef void (*EnGakufuActionFunc)(struct EnGakufu*, PlayState*); #define GAKUFU_GET_TYPE(thisx) ((thisx)->params & 0xF) typedef enum { - /* 0x0 */ GAKUFU_TERMINA_FIELD, - /* 0x1 */ GAKUFU_MILK_BAR + /* 0 */ GAKUFU_TERMINA_FIELD, + /* 1 */ GAKUFU_MILK_BAR } GakufuType; typedef struct EnGakufu { 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 87cee9e99..a257ab3d4 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -10,11 +10,11 @@ typedef void (*EnGb2ActionFunc)(struct EnGb2*, PlayState*); #define ENGB2_GET_7(thisx) ((thisx)->params & 7) #define ENGB2_GET_7F8(thisx) (((thisx)->params & 0x7F8) >> 3) -enum { +typedef enum { /* 0 */ ENGB2_7_0, /* 1 */ ENGB2_7_1, - /* 2 */ ENGB2_7_2, -}; + /* 2 */ ENGB2_7_2 +} EnGb2Param; typedef struct EnGb2 { /* 0x0000 */ Actor actor; 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 0a8aea2fd..c78f14048 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -69,8 +69,8 @@ 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, -} GerudoWhiteAnimations; + /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY +} GerudoWhiteAnimation; void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames); void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play); 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 cc744cffa..802024897 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h @@ -21,7 +21,7 @@ typedef struct EnGgStruct { /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ u8 unk_48; -} EnGgStruct; // size == 0x4C +} EnGgStruct; // size = 0x4C typedef struct EnGg { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.h b/src/overlays/actors/ovl_En_Giant/z_en_giant.h index 45e89dd55..5842a62da 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.h +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.h @@ -35,7 +35,7 @@ typedef enum { /* 12 */ GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE, /* 13 */ GIANT_TYPE_CANYON_CLOCK_TOWER_FAILURE, /* 14 */ GIANT_TYPE_SWAMP_CLOCK_TOWER_FAILURE, - /* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE, + /* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE } GiantType; struct EnGiant; 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 a76d89e7b..b40c2287a 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 @@ -47,7 +47,7 @@ typedef enum { /* 1 */ GINKO_ANIM_SITTING, /* 2 */ GINKO_ANIM_REACHING, /* 3 */ GINKO_ANIM_AMAZED, - /* 4 */ GINKO_ANIM_ADVERTISING, + /* 4 */ GINKO_ANIM_ADVERTISING } GinkoAnimation; static AnimationInfo sAnimationInfo[] = { 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 f61b50b5a..e155ef6df 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h @@ -48,16 +48,16 @@ typedef struct EnGirlA { } EnGirlA; // size = 0x1CC typedef enum { - /* 0x0 */ CANBUY_RESULT_SUCCESS_1, - /* 0x1 */ CANBUY_RESULT_SUCCESS_2, - /* 0x2 */ CANBUY_RESULT_NO_ROOM, - /* 0x3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE, - /* 0x4 */ CANBUY_RESULT_NEED_RUPEES, - /* 0x5 */ CANBUY_RESULT_CANNOT_GET_NOW, - /* 0x6 */ CANBUY_RESULT_CANNOT_GET_NOW_2, - /* 0x7 */ CANBUY_RESULT_NO_ROOM_2, - /* 0x8 */ CANBUY_RESULT_ALREADY_HAVE, - /* 0x9 */ CANBUY_RESULT_HAVE_BETTER + /* 0 */ CANBUY_RESULT_SUCCESS_1, + /* 1 */ CANBUY_RESULT_SUCCESS_2, + /* 2 */ CANBUY_RESULT_NO_ROOM, + /* 3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE, + /* 4 */ CANBUY_RESULT_NEED_RUPEES, + /* 5 */ CANBUY_RESULT_CANNOT_GET_NOW, + /* 6 */ CANBUY_RESULT_CANNOT_GET_NOW_2, + /* 7 */ CANBUY_RESULT_NO_ROOM_2, + /* 8 */ CANBUY_RESULT_ALREADY_HAVE, + /* 9 */ CANBUY_RESULT_HAVE_BETTER } EnGirlACanBuyResult; typedef enum { 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 fd724cc7c..130b97675 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -13,14 +13,14 @@ typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*); #define ENGK_PATH_INDEX_NONE 0xF -enum { +typedef enum { /* 0 */ ENGK_F_0, /* 1 */ ENGK_F_1, /* 2 */ ENGK_F_2, /* 3 */ ENGK_F_3, /* 4 */ ENGK_F_4, - /* 5 */ ENGK_F_5, -}; + /* 5 */ ENGK_F_5 +} EnGkParam; typedef struct EnGk { /* 0x000 */ Actor actor; 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 23c02a9c4..5162a4f77 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -56,7 +56,7 @@ typedef enum EnGoType { /* 5 */ ENGO_ASIDE_STORE, // Shrine Goron outside store /* 6 */ ENGO_ASIDE_ELDERSROOM, // Shrine Goron outside Elder's room /* 7 */ ENGO_ASIDE_ELDERSSON, // Shrine Goron aside the Elder's Son - /* 8 */ ENGO_MEDIGORON, // Medigoron selling Powder Kegs + /* 8 */ ENGO_MEDIGORON // Medigoron selling Powder Kegs } EnGoType; /** @@ -70,7 +70,7 @@ typedef enum EnGoRacetrackSubtype { /* 4 */ ENGO_ATHLETIC_HAMSTRINGSIT, /* 5 */ ENGO_ATHLETIC_HAMSTRINGSTAND, /* 6 */ ENGO_SPECTATOR_CHEER, - /* 7 */ ENGO_SPECTATOR_SHOUTING, + /* 7 */ ENGO_SPECTATOR_SHOUTING } EnGoRacetrackSubtype; /** @@ -78,7 +78,7 @@ typedef enum EnGoRacetrackSubtype { */ typedef enum EnGoGraveyardSubtype { /* 0 */ ENGO_GRAVEYARD_GRAVEMAKER, - /* 1 */ ENGO_GRAVEYARD_FROZEN, + /* 1 */ ENGO_GRAVEYARD_FROZEN } EnGoGraveyardSubtype; typedef struct EnGo { diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h index e672355e5..2ace5ff85 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h @@ -14,27 +14,27 @@ typedef s32 (*EnGoroiwaUnkFunc)(struct EnGoroiwa*); #define ENGOROIWA_GET_300(thisx) (((thisx)->params >> 0x8) & 3) #define ENGOROIWA_GET_FF(thisx) ((thisx)->params & 0xFF) -enum { +typedef enum { /* 0 */ ENGOROIWA_300_0, /* 1 */ ENGOROIWA_300_1, - /* 3 */ ENGOROIWA_300_3 = 3, -}; + /* 3 */ ENGOROIWA_300_3 = 3 +} EnGoroiwaParam300; -enum { +typedef enum { /* 0 */ ENGOROIWA_400_0, - /* 1 */ ENGOROIWA_400_1, -}; + /* 1 */ ENGOROIWA_400_1 +} EnGoroiwaParam400; -enum { +typedef enum { /* 0 */ ENGOROIWA_3000_0, /* 1 */ ENGOROIWA_3000_1, - /* 2 */ ENGOROIWA_3000_2, -}; + /* 2 */ ENGOROIWA_3000_2 +} EnGoroiwaParam3000; -enum { +typedef enum { /* 1 */ ENGOROIWA_C000_1 = 1, - /* 2 */ ENGOROIWA_C000_2, -}; + /* 2 */ ENGOROIWA_C000_2 +} EnGoroiwaParamC000; typedef struct { /* 0x00 */ Vec3f unk_00; 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 c4ff0959c..7fbed6122 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -52,18 +52,18 @@ typedef enum { /* 7 */ EN_GRASSHOPPER_ACTION_WAIT_AFTER_ATTACK, /* 8 */ EN_GRASSHOPPER_ACTION_DAMAGED, /* 9 */ EN_GRASSHOPPER_ACTION_DEAD, - /* 10 */ EN_GRASSHOPPER_ACTION_FALL, + /* 10 */ EN_GRASSHOPPER_ACTION_FALL } EnGrasshopperAction; typedef enum { /* 0 */ EN_GRASSHOPPER_DECISION_ATTACK, /* 1 */ EN_GRASSHOPPER_DECISION_FLY, - /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES, // Never used in the final game + /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES // Never used in the final game } EnGrasshopperNextAction; typedef enum { /* 0 */ EN_GRASSHOPPER_BANK_STATE_BANKING, - /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE, + /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE } EnGrasshopperBankState; typedef enum { @@ -74,7 +74,7 @@ typedef enum { /* 4 */ EN_GRASSHOPPER_ANIM_HOVER, /* 5 */ EN_GRASSHOPPER_ANIM_DAMAGE, /* 6 */ EN_GRASSHOPPER_ANIM_DEAD, - /* 7 */ EN_GRASSHOPPER_ANIM_FALL, + /* 7 */ EN_GRASSHOPPER_ANIM_FALL } EnGrasshopperAnim; static s32 sOccupiedIndices[] = { @@ -99,7 +99,7 @@ typedef enum { /* 0x3 */ EN_GRASSHOPPER_DMGEFF_FREEZE, // Damages and freezes the Dragonfly in ice /* 0x4 */ EN_GRASSHOPPER_DMGEFF_LIGHT_ORB, // Damages and surrounds the Dragonfly with light orbs /* 0xE */ EN_GRASSHOPPER_DMGEFF_HOOK = 0xE, // If hit by the Hookshot, it pulls the Dragonfly towards the player - /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE, // Deals regular damage with no extra effect + /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE // Deals regular damage with no extra effect } EnDragonflyDamageEffect; static DamageTable sDamageTable = { 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 11ed8a130..049091393 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -17,7 +17,7 @@ typedef enum EnGrasshopperType { /* 0 */ EN_GRASSHOPPER_TYPE_NORMAL, /* 1 */ EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED, // Spawned by EnEncount1 /* 2 */ EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM, - /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL, + /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL } EnGrasshopperType; typedef struct EnGrasshopperEffect { 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 42efabb61..b7af0c582 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -11,12 +11,12 @@ typedef void (*EnGsActionFunc)(struct EnGs*, PlayState*); #define ENGS_GET_FE0(thisx) (((thisx)->params >> 5) & 0x7F) #define ENGS_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) -enum { +typedef enum { /* 0 */ ENGS_0, /* 1 */ ENGS_1, /* 2 */ ENGS_2, - /* 3 */ ENGS_3, -}; + /* 3 */ ENGS_3 +} EnGsParam; typedef struct EnGs { /* 0x000 */ Actor actor; 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 d27dd5a59..ea93d617f 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 @@ -84,7 +84,7 @@ typedef enum { /* 0 */ WAIT_HEAD_TILT_ANIM, /* 1 */ WALK_ANIM, /* 2 */ DIG_ANIM, - /* 3 */ WALK_ANIM_2, + /* 3 */ WALK_ANIM_2 } EnGuardNutsAnim; typedef enum { 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 0992aa9d9..180bf8cab 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -37,14 +37,14 @@ typedef enum { /* 4 */ HG_ANIM_REACH_FORWARD, /* 5 */ HG_ANIM_CURL_UP, /* 6 */ HG_ANIM_CROUCHED_PANIC, - /* 7 */ HG_ANIM_PANIC, + /* 7 */ HG_ANIM_PANIC } HgAnimation; typedef enum { /* 0 */ HG_CS_FIRST_ENCOUNTER, /* 1 */ HG_CS_GET_MASK, /* 2 */ HG_CS_SUBSEQUENT_ENCOUNTER, - /* 3 */ HG_CS_SONG_OF_HEALING, + /* 3 */ HG_CS_SONG_OF_HEALING } HgCsIndex; ActorInit En_Hg_InitVars = { 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 37d5a61f9..f6c90f6b4 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -45,7 +45,7 @@ typedef enum { /* 3 */ HGO_ANIM_CONSOLE, /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP, /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT, - /* 6 */ HGO_ANIM_TOSS, + /* 6 */ HGO_ANIM_TOSS } HgoAnimation; ActorInit En_Hgo_InitVars = { 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 b6d2c8c40..787a40da7 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -92,22 +92,22 @@ void EnHorse_StickDirection(Vec2f* curStick, f32* stickMag, s16* angle); s32 EnHorse_GetMountSide(EnHorse* this, PlayState* play); typedef struct { - s32 cueId; - s32 csFuncIdx; -} CsActionEntry; + /* 0x0 */ s32 cueId; + /* 0x4 */ s32 csFuncIdx; +} CsActionEntry; // size = 0x8 typedef struct { - s16 x; - s16 y; - s16 z; - s16 speed; - s16 angle; -} RaceWaypoint; + /* 0x0 */ s16 x; + /* 0x2 */ s16 y; + /* 0x4 */ s16 z; + /* 0x6 */ s16 speed; + /* 0x8 */ s16 angle; +} RaceWaypoint; // size = 0xA typedef struct { - s32 numWaypoints; - RaceWaypoint* waypoints; -} RaceInfo; + /* 0x0 */ s32 numWaypoints; + /* 0x4 */ RaceWaypoint* waypoints; +} RaceInfo; // size = 0x8 static AnimationHeader* sEponaAnimations[] = { &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_005F64, 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 0574b3198..3cfc1fb54 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -133,7 +133,7 @@ typedef enum EnHorseParam { /* 17 */ ENHORSE_17, /* 18 */ ENHORSE_18, /* 19 */ ENHORSE_19, - /* 20 */ ENHORSE_20, + /* 20 */ ENHORSE_20 } EnHorseParam; /** diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h index d43f1f90c..9033878a4 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h @@ -11,7 +11,7 @@ typedef s32 (*EnHorseGameCheckUnkFunc)(struct EnHorseGameCheck*, PlayState*); #define ENHORSEGAMECHECK_GET_FF(thisx) ((thisx)->params & 0xFF) #define ENHORSEGAMECHECK_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) -enum { +typedef enum { /* 0 */ ENHORSEGAMECHECK_FF_0, /* 1 */ ENHORSEGAMECHECK_FF_1, /* 2 */ ENHORSEGAMECHECK_FF_2, @@ -22,8 +22,8 @@ enum { /* 7 */ ENHORSEGAMECHECK_FF_7, /* 8 */ ENHORSEGAMECHECK_FF_8, /* 9 */ ENHORSEGAMECHECK_FF_9, - /* 10 */ ENHORSEGAMECHECK_FF_MAX, -}; + /* 10 */ ENHORSEGAMECHECK_FF_MAX +} EnHorseGameCheckParam; typedef struct EnHorseGameCheck { /* 0x000 */ DynaPolyActor dyna; 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 71b338121..d4a534ad1 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -169,8 +169,7 @@ typedef enum { /* 0x4 */ DMG_EFF_FIRE = 0x2, /* 0x0 */ DMG_EFF_ICE, /* 0x4 */ DMG_EFF_LIGHT_SPARKS, - /* 0xF */ DMG_EFF_IMMUNE = 0xF, - + /* 0xF */ DMG_EFF_IMMUNE = 0xF } EnIkDmgEff; static DamageTable sDamageTableArmor = { 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 c5d7500b6..6f4dd5d95 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -33,7 +33,7 @@ typedef enum { /* 14 */ ENIN_ANIM_14, /* 15 */ ENIN_ANIM_15, /* 16 */ ENIN_ANIM_16, - /* 17 */ ENIN_ANIM_17, + /* 17 */ ENIN_ANIM_17 } EnInAnimation; #define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) 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 7479a6208..df217b86d 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -54,14 +54,14 @@ typedef enum { /* 16 */ EN_JG_ANIM_DEPRESSED, /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE, /* 18 */ EN_JG_ANIM_CRADLE, - /* 19 */ EN_JG_ANIM_MAX, + /* 19 */ EN_JG_ANIM_MAX } EnJgAnimation; typedef enum { - /* 0x0 */ EN_JG_ACTION_FIRST_THAW, - /* 0x1 */ EN_JG_ACTION_SPAWNING, - /* 0x2 */ EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW, - /* 0x3 */ EN_JG_ACTION_LULLABY_INTRO_CS, + /* 0 */ EN_JG_ACTION_FIRST_THAW, + /* 1 */ EN_JG_ACTION_SPAWNING, + /* 2 */ EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW, + /* 3 */ EN_JG_ACTION_LULLABY_INTRO_CS } EnJgAction; ActorInit En_Jg_InitVars = { 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 86d74f69a..930a0d7a3 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -113,15 +113,15 @@ Vec3f D_80972030 = { -3.0f, 50.0f, 90.0f }; Vec3f D_8097203C = { 10.0f, -15.0f, 2.0f }; typedef enum { - /* 0x0 */ ENKAKASI_ANIM_ARMS_CROSSED_ROCKING, // arms crossed and rocking back and forth - /* 0x1 */ ENKAKASI_ANIM_SIDEWAYS_SHAKING, - /* 0x2 */ ENKAKASI_ANIM_HOPPING_REGULAR, // bounce bounce bounce (repeat) - /* 0x3 */ ENKAKASI_ANIM_SPIN_REACH_OFFER, // spin and then reaching toward player - /* 0x4 */ ENKAKASI_ANIM_TWIRL, // slower cinimatic twirl - /* 0x5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx - /* 0x6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused? - /* 0x7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over - /* 0x8 */ ENKAKASI_ANIM_IDLE, // slow stretching wiggle, ends in regular position + /* 0 */ ENKAKASI_ANIM_ARMS_CROSSED_ROCKING, // arms crossed and rocking back and forth + /* 1 */ ENKAKASI_ANIM_SIDEWAYS_SHAKING, + /* 2 */ ENKAKASI_ANIM_HOPPING_REGULAR, // bounce bounce bounce (repeat) + /* 3 */ ENKAKASI_ANIM_SPIN_REACH_OFFER, // spin and then reaching toward player + /* 4 */ ENKAKASI_ANIM_TWIRL, // slower cinimatic twirl + /* 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 } EnKakasiAnimation; static AnimationHeader* sAnimations[] = { 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 66aa6d5c7..34b3d6405 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -93,11 +93,11 @@ static ColliderCylinderInit sAttackCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 1, 15, 80, MASS_HEAVY }; typedef enum { - /* 0x0 */ KAREBABA_DMGEFF_NONE, - /* 0x2 */ KAREBABA_DMGEFF_FIRE = 2, - /* 0x3 */ KAREBABA_DMGEFF_ICE, - /* 0x4 */ KAREBABA_DMGEFF_LIGHT, - /* 0x5 */ KAREBABA_DMGEFF_ELECTRIC, + /* 0 */ KAREBABA_DMGEFF_NONE, + /* 2 */ KAREBABA_DMGEFF_FIRE = 2, + /* 3 */ KAREBABA_DMGEFF_ICE, + /* 4 */ KAREBABA_DMGEFF_LIGHT, + /* 5 */ KAREBABA_DMGEFF_ELECTRIC } DekuBabaDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h index aa05aec0a..045bef42a 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h @@ -11,7 +11,7 @@ typedef void (*EnKarebabaActionFunc)(struct EnKarebaba*, PlayState*); typedef enum { /* 0 */ ENKAREBABA_0, // Unused, always shrinks and drops a Deku Nut /* 1 */ ENKAREBABA_1, // Drops sticks (Only type OoT has) - /* 2 */ KAREBABA_MINI, + /* 2 */ KAREBABA_MINI } KarebabaType; typedef struct EnKarebaba { 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 147ca2401..16ce97153 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -245,14 +245,14 @@ void EnKusa_DropCollectible(EnKusa* this, PlayState* play) { s32 collectableParams; if ((KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_GRASS) || (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_BUSH)) { - if (!KUSA_GET_PARAMS_0C(&this->actor)) { + if (!KUSA_GET_PARAM_0C(&this->actor)) { Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, KUSA_GET_RAND_COLLECTIBLE_ID(&this->actor) * 0x10); } } else if (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_REGROWING_GRASS) { Item_DropCollectible(play, &this->actor.world.pos, 3); } else { - collectible = func_800A8150(KUSA_GET_PARAMS_3F(&this->actor)); + collectible = func_800A8150(KUSA_GET_PARAM_3F(&this->actor)); if (collectible >= 0) { collectableParams = KUSA_GET_COLLECTIBLE_ID(&this->actor); Item_DropCollectible(play, &this->actor.world.pos, (collectableParams << 8) | collectible); 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 56f55af3e..b231f3e0e 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h @@ -28,8 +28,8 @@ typedef struct EnKusa { #define KUSA_GET_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0x7F) #define KUSA_GET_RAND_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0xF) #define KUSA_SHOULD_SPAWN_BUGS(thisx) (((thisx)->params >> 0x4) & 1) -#define KUSA_GET_PARAMS_0C(thisx) (((thisx)->params >> 0xC) & 0x1) -#define KUSA_GET_PARAMS_3F(thisx) (((thisx)->params >> 0x2) & 0x3F) +#define KUSA_GET_PARAM_0C(thisx) (((thisx)->params >> 0xC) & 0x1) +#define KUSA_GET_PARAM_3F(thisx) (((thisx)->params >> 0x2) & 0x3F) #define KUSA_GET_TYPE(thisx)((thisx)->params & 0x3) 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 0908649dc..f3c3f4705 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -31,9 +31,9 @@ ActorInit En_Light_InitVars = { }; typedef struct { - /* 0x00 */ Color_RGBA8 unk_00; - /* 0x04 */ Color_RGB8 unk_04; - /* 0x07 */ u8 unk_07; + /* 0x0 */ Color_RGBA8 unk_00; + /* 0x4 */ Color_RGB8 unk_04; + /* 0x7 */ u8 unk_07; } EnLightStruct; // size = 0x8 EnLightStruct D_808666D0[] = { 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 d295b1c7f..fe26c18eb 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -44,14 +44,14 @@ void EnMa4_InitFaceExpression(EnMa4* this); typedef enum { /* 0 */ MA4_TYPE_DAY1, /* 1 */ MA4_TYPE_ALIENS_DEFEATED, - /* 2 */ MA4_TYPE_ALIENS_WON, + /* 2 */ MA4_TYPE_ALIENS_WON } EnMa4Type; typedef enum { /* 0 */ MA4_STATE_DEFAULT, /* 1 */ MA4_STATE_HORSEBACKGAME, /* 2 */ MA4_STATE_AFTERHORSEBACKGAME, - /* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS, + /* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS } EnMa4State; ActorInit En_Ma4_InitVars = { diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h index 9a3801d91..3e321cc56 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h @@ -19,9 +19,9 @@ typedef enum { } MinifrogType; typedef enum { - /* 0x00 */ MINIFROG_STATE_JUMP, - /* 0x01 */ MINIFROG_STATE_AIR, - /* 0x02 */ MINIFROG_STATE_GROUND + /* 0 */ MINIFROG_STATE_JUMP, + /* 1 */ MINIFROG_STATE_AIR, + /* 2 */ MINIFROG_STATE_GROUND } MinifrogJumpState; typedef struct EnMinifrog { 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 3b6cbaf86..3aac9ae11 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -80,7 +80,7 @@ typedef enum { /* 0x2 */ MINISLIME_DMGEFF_FIRE = 0x2, /* 0x3 */ MINISLIME_DMGEFF_ICE, /* 0xE */ MINISLIME_DMGEFF_HOOKSHOT = 0xE, - /* 0xF */ MINISLIME_DMGEFF_BREAK_ICE, + /* 0xF */ MINISLIME_DMGEFF_BREAK_ICE } MinislimeDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h index 77cabe9b6..8d29f2b8a 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h @@ -21,13 +21,13 @@ typedef enum { /* 0x8 */ MINISLIME_DEFEAT_MELT, /* 0x9 */ MINISLIME_DESPAWN, /* 0xA */ MINISLIME_SETUP_GEKKO_THROW, - /* 0xB */ MINISLIME_GEKKO_THROW, + /* 0xB */ MINISLIME_GEKKO_THROW } EnMinislimeState; typedef enum { - /* 0x0 */ MINISLIME_INACTIVE_STATE, - /* 0x1 */ MINISLIME_ACTIVE_CONTINUE_STATE, - /* 0x2 */ MINISLIME_ACTIVE_INIT_STATE, + /* 0 */ MINISLIME_INACTIVE_STATE, + /* 1 */ MINISLIME_ACTIVE_CONTINUE_STATE, + /* 2 */ MINISLIME_ACTIVE_INIT_STATE } EnMinislimeActiveState; typedef struct EnMinislime { 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 c94a94b12..db05f0d61 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 @@ -23,9 +23,9 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play); void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play); typedef enum { - GORON_RACE_CHEAT_NO_CHEATING, - GORON_RACE_CHEAT_FALSE_START, - GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND, + /* 0 */ GORON_RACE_CHEAT_NO_CHEATING, + /* 1 */ GORON_RACE_CHEAT_FALSE_START, + /* 2 */ GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND } PlayerCheatStatus; ActorInit En_Mt_tag_InitVars = { 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 4edadf412..474c1d2df 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -43,7 +43,7 @@ typedef enum EnNbScheduleResult { /* 1 */ EN_NB_SCH_1, /* 2 */ EN_NB_SCH_2, /* 3 */ EN_NB_SCH_3, - /* 4 */ EN_NB_SCH_4, + /* 4 */ EN_NB_SCH_4 } EnNbScheduleResult; static u8 sScheduleScript[] = { diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.h b/src/overlays/actors/ovl_En_Nb/z_en_nb.h index f11464c79..2a784e096 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.h +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.h @@ -17,7 +17,7 @@ typedef enum EnNbAnimation { /* 2 */ EN_NB_ANIM_TALK_ONCE, /* 3 */ EN_NB_ANIM_TALK_LOOP, /* 4 */ EN_NB_ANIM_ANGRY, - /* 5 */ EN_NB_ANIM_RELIEVED, + /* 5 */ EN_NB_ANIM_RELIEVED } EnNbAnimation; typedef struct EnNb { 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 66098a9d5..755385d00 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 @@ -57,7 +57,7 @@ typedef enum { /* 0xC */ EN_NEO_REEBA_DMGEFF_HOOKSHOT = 0xC, // No damage, used only for hookshot /* 0xD */ EN_NEO_REEBA_DMGEFF_ELECTRIC_STUN, // Electric effects, frozen in place /* 0xE */ EN_NEO_REEBA_DMGEFF_NONE, // Normal hit - /* 0xF */ EN_NEO_REEBA_DMGEFF_SHATTER, // Normal hit that can break ice if leever is frozen + /* 0xF */ EN_NEO_REEBA_DMGEFF_SHATTER // Normal hit that can break ice if leever is frozen } EnNeoReebaDamageEffect; static DamageTable sDamageTable = { 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 03cdad42c..4982f7e75 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -36,7 +36,7 @@ void EnNiw_SpawnFeather(EnNiw* this, Vec3f* pos, Vec3f* vel, Vec3f* accel, f32 s s16 sCuccoStormActive = false; // why wouldnt they just use actionFunc? -enum EnNiwState { +typedef enum EnNiwState { /* 0 */ NIW_STATE_IDLE, /* 1 */ NIW_STATE_ANGRY1, // 1/2/3 are stages of summoning cucco storm /* 2 */ NIW_STATE_ANGRY2, @@ -45,8 +45,8 @@ enum EnNiwState { /* 5 */ NIW_STATE_FALLING, /* 6 */ NIW_STATE_SWIMMING, /* 7 */ NIW_STATE_RUNNING, - /* 8 */ NIW_STATE_HOPPING, -}; + /* 8 */ NIW_STATE_HOPPING +} EnNiwState; ActorInit En_Niw_InitVars = { ACTOR_EN_NIW, diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.h b/src/overlays/actors/ovl_En_Niw/z_en_niw.h index c60397535..06f487800 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.h +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.h @@ -106,7 +106,7 @@ typedef enum { /* 2 */ NIW_ANIM_PECKING_AND_WAVING, // wings move along their axis, like human hand waving /* 3 */ NIW_ANIM_PECKING_AND_FORFLAPPING, // (unused) low (yaw based) flapping, forward and back /* 4 */ NIW_ANIM_FREEZE, // used during Cucco Storm - /* 5 */ NIW_ANIM_PECKING_SLOW_FORFLAPPING, // wing speed half that of 3 + /* 5 */ NIW_ANIM_PECKING_SLOW_FORFLAPPING // wing speed half that of 3 } EnNiwHeadAndWingAnimationState; 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 ac1e9749a..fc6ef71db 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -32,14 +32,14 @@ void EnNwc_DrawAdultBody(Actor* thisx, PlayState* play); s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); EnHs* EnNwc_FindGrog(PlayState* play); -enum EnNiwState { - /* -1 */ NWC_STATE_NIW_LOADED = -1, // set after loading object_niw - /* 0 */ NWC_STATE_CHECK_BREMAN = 0, // checking for breman mask - /* 1 */ NWC_STATE_TURNING, // turning to face a new direction to explore - /* 2 */ NWC_STATE_HOPPING_FORWARD, // hopping to go explore - /* 3 */ NWC_STATE_FOLLOWING, // following the player - /* 4 */ NWC_STATE_RUNNING, // running from the player after failed breman march -}; +typedef enum EnNwcState { + /* -1 */ NWC_STATE_NIW_LOADED = -1, // set after loading object_niw + /* 0 */ NWC_STATE_CHECK_BREMAN, // checking for breman mask + /* 1 */ NWC_STATE_TURNING, // turning to face a new direction to explore + /* 2 */ NWC_STATE_HOPPING_FORWARD, // hopping to go explore + /* 3 */ NWC_STATE_FOLLOWING, // following the player + /* 4 */ NWC_STATE_RUNNING // running from the player after failed breman march +} EnNwcState; ActorInit En_Nwc_InitVars = { ACTOR_EN_NWC, 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 4ff55d7a0..52f611c0e 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -44,8 +44,8 @@ void EnOwl_ChangeMode(EnOwl* this, EnOwlActionFunc actionFunc, EnOwlFunc unkFunc AnimationHeader* animation, f32 morphFrames); typedef enum { - /* 0x00 */ OWL_REPEAT, - /* 0x01 */ OWL_OK + /* 0 */ OWL_REPEAT, + /* 1 */ OWL_OK } EnOwlMessageChoice; ActorInit En_Owl_InitVars = { 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 5e02aba94..095434fa0 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h @@ -17,7 +17,7 @@ typedef enum { /* 0x002 */ ENOWL_GET_TYPE_2, /* 0x003 */ ENOWL_GET_TYPE_3, /* 0x01E */ ENOWL_GET_TYPE_30 = 30, - /* 0x3E8 */ ENOWL_GET_TYPE_1000 = 1000, + /* 0x3E8 */ ENOWL_GET_TYPE_1000 = 1000 } EnOwlType; typedef struct EnOwl { 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 0caeb9305..079e3027d 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -80,12 +80,12 @@ ActorInit En_Pametfrog_InitVars = { }; typedef enum { - /* 0x0 */ GEKKO_DMGEFF_NONE, - /* 0x1 */ GEKKO_DMGEFF_STUN, - /* 0x2 */ GEKKO_DMGEFF_FIRE, - /* 0x3 */ GEKKO_DMGEFF_ICE, - /* 0x4 */ GEKKO_DMGEFF_LIGHT, - /* 0x5 */ GEKKO_DMGEFF_ZORA_BARRIER, + /* 0 */ GEKKO_DMGEFF_NONE, + /* 1 */ GEKKO_DMGEFF_STUN, + /* 2 */ GEKKO_DMGEFF_FIRE, + /* 3 */ GEKKO_DMGEFF_ICE, + /* 4 */ GEKKO_DMGEFF_LIGHT, + /* 5 */ GEKKO_DMGEFF_ZORA_BARRIER } EnPametfrogDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h index 90bc0cb1b..31a3be14b 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h @@ -9,16 +9,16 @@ struct EnPametfrog; typedef void (*EnPametfrogActionFunc)(struct EnPametfrog*, PlayState*); typedef enum { - /* 0x0 */ GEKKO_PRE_SNAPPER, - /* 0x1 */ GEKKO_GET_SNAPPER, - /* 0x2 */ GEKKO_INIT_SNAPPER, - /* 0x3 */ GEKKO_ON_SNAPPER, - /* 0x4 */ GEKKO_REAR_ON_SNAPPER, - /* 0x5 */ GEKKO_CUTSCENE, - /* 0x6 */ GEKKO_FALL_OFF_SNAPPER, - /* 0x7 */ GEKKO_RETURN_TO_SNAPPER, - /* 0x8 */ GEKKO_JUMP_ON_SNAPPER, - /* 0x9 */ GEKKO_DEFEAT, + /* 0 */ GEKKO_PRE_SNAPPER, + /* 1 */ GEKKO_GET_SNAPPER, + /* 2 */ GEKKO_INIT_SNAPPER, + /* 3 */ GEKKO_ON_SNAPPER, + /* 4 */ GEKKO_REAR_ON_SNAPPER, + /* 5 */ GEKKO_CUTSCENE, + /* 6 */ GEKKO_FALL_OFF_SNAPPER, + /* 7 */ GEKKO_RETURN_TO_SNAPPER, + /* 8 */ GEKKO_JUMP_ON_SNAPPER, + /* 9 */ GEKKO_DEFEAT } EnPametfrogState; typedef struct EnPametfrog { 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 662e8574e..5bd4de503 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.h +++ b/src/overlays/actors/ovl_En_Part/z_en_part.h @@ -8,11 +8,11 @@ struct EnPart; typedef void (*EnPartActionFunc)(struct EnPart*, PlayState*); typedef enum { - ENPART_TYPE_0 = 0, - ENPART_TYPE_1 = 1, - ENPART_TYPE_4 = 4, - ENPART_TYPE_15 = 15 -} EnPartParams; + /* 0x0 */ ENPART_TYPE_0, + /* 0x1 */ ENPART_TYPE_1, + /* 0x4 */ ENPART_TYPE_4 = 4, + /* 0xF */ ENPART_TYPE_15 = 15 +} EnPartParam; typedef struct EnPart { /* 0x000 */ Actor actor; 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 652c19dc7..24517f8aa 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 @@ -58,7 +58,7 @@ static ColliderSphereInit sSphereInit = { typedef enum { /* 0x0 */ POE_BALLOON_DMGEFF_NONE, - /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF, + /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF } PoeBalloonDamageEffect; static DamageTable sDamageTable = { 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 a1ea97199..357b08bdd 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 @@ -101,7 +101,7 @@ typedef enum { /* 0x1 */ POE_SISTERS_DMGEFF_UNKDMG12, // set in DamageTable, but unused /* 0x4 */ POE_SISTERS_DMGEFF_LIGHTARROWS = 0x4, /* 0xE */ POE_SISTERS_DMGEFF_SPINATTACK = 0xE, - /* 0xF */ POE_SISTERS_DMGEFF_DEKUNUT = 0xF, + /* 0xF */ POE_SISTERS_DMGEFF_DEKUNUT } PoeSisterDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h index cfb8a1697..f800788c7 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h @@ -15,17 +15,17 @@ typedef void (*EnPoSistersActionFunc)(struct EnPoSisters*, PlayState*); #define POE_SISTERS_PARAMS(observerFlag, megClone, type) (((observerFlag) << 0xC) | ((megClone & 3) << 0xA) | ((type & 3) << 8)) typedef enum { - /* 0 */ POE_SISTERS_TYPE_MEG, // purple - /* 1 */ POE_SISTERS_TYPE_JO, // red - /* 2 */ POE_SISTERS_TYPE_BETH, // blue - /* 3 */ POE_SISTERS_TYPE_AMY, // green + /* 0 */ POE_SISTERS_TYPE_MEG, // purple + /* 1 */ POE_SISTERS_TYPE_JO, // red + /* 2 */ POE_SISTERS_TYPE_BETH, // blue + /* 3 */ POE_SISTERS_TYPE_AMY // green } EnPoSisterType; typedef enum { /* 0 */ POE_SISTERS_MEG_REAL, /* 1 */ POE_SISTERS_MEG_CLONE1, /* 2 */ POE_SISTERS_MEG_CLONE2, - /* 3 */ POE_SISTERS_MEG_CLONE3, + /* 3 */ POE_SISTERS_MEG_CLONE3 } EnPoSisterMegCloneID; typedef struct EnPoSisters { 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 ef15618c9..6d16c1418 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -39,7 +39,7 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play); typedef enum { /* 0 */ EN_PP_COLLISION_RESULT_OK, /* 1 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_INTO_WALL, - /* 2 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE, + /* 2 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE } EnPpCollisionResult; typedef enum { @@ -56,13 +56,13 @@ typedef enum { /* 10 */ EN_PP_ACTION_MASK_DEAD, /* 11 */ EN_PP_ACTION_SPAWN_BODY_PARTS, /* 12 */ EN_PP_ACTION_DONE_SPAWNING_BODY_PARTS, - /* 13 */ EN_PP_ACTION_BODY_PART_MOVE, + /* 13 */ EN_PP_ACTION_BODY_PART_MOVE } EnPpAction; typedef enum { /* 0 */ EN_PP_MASK_DETACH_STATE_START, /* 1 */ EN_PP_MASK_DETACH_STATE_FALL, - /* 2 */ EN_PP_MASK_DETACH_STATE_DIE, + /* 2 */ EN_PP_MASK_DETACH_STATE_DIE } EnPpMaskDetachState; static s32 sCurrentDeadBodyPartIndex = 0; @@ -77,7 +77,7 @@ typedef enum { /* 0xC */ EN_PP_DMGEFF_KNOCK_OFF_MASK = 0xC, // Knocks off the Hiploop's mask or deals regular damage /* 0xD */ EN_PP_DMGEFF_HOOKSHOT, // Pulls the Hiploop's mask to the player or deals regular damage /* 0xE */ EN_PP_DMGEFF_GORON_POUND, // Knocks off the Hiploop's mask or forces it to jump - /* 0xF */ EN_PP_DMGEFF_DAMAGE, // Deals regular damage + /* 0xF */ EN_PP_DMGEFF_DAMAGE // Deals regular damage } EnPpDamageEffect; static DamageTable sDamageTable = { 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 aabbd9e2e..2409487be 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h @@ -22,7 +22,7 @@ typedef enum { /* 13 */ EN_PP_TYPE_BODY_PART_FRONT_RIGHT_LOWER_LEG = 13, /* 17 */ EN_PP_TYPE_BODY_PART_LEFT_WING_MIDDLE = 17, /* 23 */ EN_PP_TYPE_BODY_PART_RIGHT_WING_MIDDLE = 23, - /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26, + /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26 } EnPpType; typedef struct EnPp { 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 34ce6bafb..9b5f1ef38 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -26,7 +26,7 @@ typedef enum { typedef enum { /* 0 */ POSTBOX_BEHAVIOUR_WAIT_FOR_ITEM, - /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM, + /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM } PostboxBehaviour; static u8 D_80B2C200[] = { diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.h b/src/overlays/actors/ovl_En_Pst/z_en_pst.h index 6051924da..c3ebd58a8 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.h +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.h @@ -9,7 +9,7 @@ typedef enum { /* 1 */ POSTBOX_NORTH_CLOCKTOWN, /* 2 */ POSTBOX_EAST_UPPER_CLOCKTOWN, /* 3 */ POSTBOX_EAST_LOWER_CLOCKTOWN, - /* 4 */ POSTBOX_SOUTH_LOWER_CLOCKTOWN, + /* 4 */ POSTBOX_SOUTH_LOWER_CLOCKTOWN } PostboxType; struct EnPst; diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index d08110e43..ba7676655 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -62,13 +62,13 @@ void EnRacedog_PlaySfxWalk(EnRacedog* this); * Stores various information for each dog in the race, mostly related to speed. */ typedef struct { - f32 sprintSpeedMultiplier; // Target speed is multiplied by this when the dog is in the last 1/4 of the race - f32 goodConditionSpeedMultiplier; // Target speed is multiplied by this if the dog is in good condition - s16 color; // The dog's color, which is used as an index into sBaseSpeeds - s16 index; // The dog's index within sDogInfo - s16 pointToUseSecondBaseSpeed; // When the dog is at or after this point, the second value in sBaseSpeeds is used - s16 textId; // Used to determine the dog's condition -} RaceDogInfo; + /* 0x0 */ f32 sprintSpeedMultiplier; // Multiplies target speed when the dog is in the last 1/4 of the race + /* 0x4 */ f32 goodConditionSpeedMultiplier; // Multiplies target speed if the dog is in good condition + /* 0x8 */ s16 color; // The dog's color, which is used as an index into sBaseSpeeds + /* 0xA */ s16 index; // The dog's index within sDogInfo + /* 0xC */ s16 pointToUseSecondBaseSpeed; // When the dog is at or after this point, use the second sBaseSpeeds value + /* 0xE */ s16 textId; // Used to determine the dog's condition +} RaceDogInfo; // size = 0x10 ActorInit En_Racedog_InitVars = { ACTOR_EN_RACEDOG, 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 0c344e75f..055b308f2 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -40,7 +40,7 @@ typedef enum { /* 2 */ EN_RAF_ANIM_CHEW, /* 3 */ EN_RAF_ANIM_SPIT, /* 4 */ EN_RAF_ANIM_CONVULSE, - /* 5 */ EN_RAF_ANIM_DEATH, + /* 5 */ EN_RAF_ANIM_DEATH } EnRafAnimation; typedef enum { @@ -51,7 +51,7 @@ typedef enum { /* 4 */ EN_RAF_ACTION_EXPLODE, /* 5 */ EN_RAF_ACTION_CONVULSE, /* 6 */ EN_RAF_ACTION_DISSOLVE, - /* 7 */ EN_RAF_ACTION_DORMANT, + /* 7 */ EN_RAF_ACTION_DORMANT } EnRafAction; typedef enum { 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 9766fe694..9a0e1864e 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -70,18 +70,18 @@ typedef enum { /* 16 */ EN_RAILGIBUD_ANIM_SLUMP_LOOP, /* 17 */ EN_RAILGIBUD_ANIM_CONVULSION, /* 18 */ EN_RAILGIBUD_ANIM_ARMS_UP_START, - /* 19 */ EN_RAILGIBUD_ANIM_ARMS_UP_LOOP, + /* 19 */ EN_RAILGIBUD_ANIM_ARMS_UP_LOOP } EnRailgibudAnimation; typedef enum { /* 0 */ EN_RAILGIBUD_TYPE_GIBDO, - /* 1 */ EN_RAILGIBUD_TYPE_REDEAD, + /* 1 */ EN_RAILGIBUD_TYPE_REDEAD } EnRailgibudType; typedef enum { /* 0 */ EN_RAILGIBUD_GRAB_START, /* 1 */ EN_RAILGIBUD_GRAB_ATTACK, - /* 2 */ EN_RAILGIBUD_GRAB_RELEASE, + /* 2 */ EN_RAILGIBUD_GRAB_RELEASE } EnRailgibudGrabState; ActorInit En_Railgibud_InitVars = { @@ -147,7 +147,7 @@ typedef enum { /* 0xC */ EN_RAILGIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect /* 0xD */ EN_RAILGIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation /* 0xE */ EN_RAILGIBUD_DMGEFF_LIGHT_RAY, // Instantly kills a Redead on contact - /* 0xF */ EN_RAILGIBUD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation + /* 0xF */ EN_RAILGIBUD_DMGEFF_DAMAGE // Deals damage and plays the damage animation } EnRailgibudDamageEffect; static DamageTable sDamageTable = { 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 e145291f6..7d585c234 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -32,7 +32,7 @@ void EnRat_PostDetonation(EnRat* this, PlayState* play); typedef enum { /* -2 */ EN_RAT_HOOK_STARTED = -2, - /* -1 */ EN_RAT_HOOKED, + /* -1 */ EN_RAT_HOOKED } EnRatHookedState; ActorInit En_Rat_InitVars = { @@ -70,7 +70,7 @@ static ColliderSphereInit sSphereInit = { typedef enum { /* 0x0 */ EN_RAT_DMGEFF_NONE, /* 0x1 */ EN_RAT_DMGEFF_STUN, - /* 0xF */ EN_RAT_DMGEFF_HOOKSHOT = 0xF, // Pulls the Real Bombchu towards the player + /* 0xF */ EN_RAT_DMGEFF_HOOKSHOT = 0xF // Pulls the Real Bombchu towards the player } EnRatDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.h b/src/overlays/actors/ovl_En_Rat/z_en_rat.h index 9472e8c31..28c880a92 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.h +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.h @@ -21,7 +21,7 @@ */ typedef enum { /* 0 */ EN_RAT_TYPE_DUNGEON, - /* 1 */ EN_RAT_TYPE_OVERWORLD, + /* 1 */ EN_RAT_TYPE_OVERWORLD } EnRatType; struct EnRat; 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 01b9cdd6d..34fc41192 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -94,7 +94,7 @@ typedef enum { /* 1 */ EN_RD_GRAB_INITIAL_DAMAGE, /* 2 */ EN_RD_GRAB_ATTACK, /* 3 */ EN_RD_GRAB_RELEASE, - /* 4 */ EN_RD_GRAB_END, + /* 4 */ EN_RD_GRAB_END } EnRdGrabState; ActorInit En_Rd_InitVars = { @@ -139,7 +139,7 @@ typedef enum { /* 0xC */ EN_RD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect /* 0xD */ EN_RD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation /* 0xE */ EN_RD_DMGEFF_LIGHT_RAY, // Instantly kills on contact - /* 0xF */ EN_RD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation + /* 0xF */ EN_RD_DMGEFF_DAMAGE // Deals damage and plays the damage animation } EnRdDamageEffect; static DamageTable sDamageTable = { 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 f5fbf82cb..fced38e75 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h @@ -27,7 +27,7 @@ typedef enum { /* 4 */ EN_RD_TYPE_FROZEN, // Unused in the final game /* 5 */ EN_RD_TYPE_SQUATTING_DANCE, /* 6 */ EN_RD_TYPE_CLAPPING_DANCE, - /* 7 */ EN_RD_TYPE_PIROUETTE, + /* 7 */ EN_RD_TYPE_PIROUETTE } EnRdType; typedef struct EnRd { diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.h b/src/overlays/actors/ovl_En_Rr/z_en_rr.h index e996cfb12..6f4178dd9 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.h +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.h @@ -7,12 +7,12 @@ struct EnRr; typedef void (*EnRrActionFunc)(struct EnRr*, PlayState*); -enum { +typedef enum { /* 0 */ ENRR_0, /* 1 */ ENRR_1, /* 2 */ ENRR_2, - /* 3 */ ENRR_3, -}; + /* 3 */ ENRR_3 +} EnRrParam; typedef struct { /* 0x00 */ f32 unk_00; 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 69ad52a2d..351b2f146 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -11,11 +11,11 @@ #define THIS ((EnRuppecrow*)thisx) -enum { - ENRUPPECROW_EFFECT_NONE = 0, - ENRUPPECROW_EFFECT_ICE = 10, - ENRUPPECROW_EFFECT_LIGHT = 20, -}; +typedef enum { + /* 0x00 */ ENRUPPECROW_EFFECT_NONE = 0, + /* 0x0A */ ENRUPPECROW_EFFECT_ICE = 10, + /* 0x14 */ ENRUPPECROW_EFFECT_LIGHT = 20 +} EnRuppecrowEffect; void EnRuppecrow_Init(Actor* thisx, PlayState* play2); void EnRuppecrow_Destroy(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c index c135f63da..5a3dc440a 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c @@ -21,7 +21,7 @@ void func_80BD6B18(EnScRuppe* this, PlayState* play); typedef struct { /* 0x0 */ TexturePtr tex; /* 0x4 */ s16 amount; -} RuppeInfo; +} RuppeInfo; // size = 0x8 ActorInit En_Sc_Ruppe_InitVars = { ACTOR_EN_SC_RUPPE, diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h index 8ef0f4c56..afc955985 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h @@ -23,7 +23,7 @@ typedef enum { /* 2 */ RUPEE_RED, /* 3 */ RUPEE_ORANGE, /* 4 */ RUPEE_PURPLE, - /* 5 */ RUPEE_UNUSED, + /* 5 */ RUPEE_UNUSED } RupeeType; #endif // Z_EN_SC_RUPPE_H diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.h b/src/overlays/actors/ovl_En_Skb/z_en_skb.h index 1fbf441ea..1970ebf8c 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.h +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.h @@ -10,8 +10,8 @@ typedef void (*EnSkbActionFunc)(struct EnSkb*, PlayState*); #define ENSKB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) typedef enum { - /* 0 */ ENSKB_PARAMS_0, -} EnSkbParams; + /* 0 */ ENSKB_PARAM_0 +} EnSkbParam; typedef struct EnSkb { /* 0x000 */ Actor actor; 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 8d7a0e071..5c962978e 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -28,7 +28,7 @@ typedef enum EnSlimeDamageEffect { /* 0x4 */ EN_SLIME_DMGEFF_LIGHT, /* 0x5 */ EN_SLIME_DMGEFF_ELECTRIC, /* 0xE */ EN_SLIME_DMGEFF_HOOKSHOT = 0xE, - /* 0xF */ EN_SLIME_DMGEFF_BLUNT, + /* 0xF */ EN_SLIME_DMGEFF_BLUNT } EnSlimeDamageEffect; void EnSlime_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.h b/src/overlays/actors/ovl_En_Slime/z_en_slime.h index 0a40a117e..130c442de 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h @@ -42,7 +42,7 @@ typedef enum EnSlimeType { /* 0 */ EN_SLIME_TYPE_BLUE, /* 1 */ EN_SLIME_TYPE_GREEN, /* 2 */ EN_SLIME_TYPE_YELLOW, - /* 3 */ EN_SLIME_TYPE_RED, + /* 3 */ EN_SLIME_TYPE_RED } EnSlimeType; #endif // Z_EN_SLIME_H 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 5a65c1094..ed3235345 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -58,7 +58,7 @@ typedef enum { // Indicates that either this Eeno is shrinking having been absorbed by another Eeno, or that // this Eeno is a fully-combined large Eeno and is done trying to combine with other split // Eenos. In both cases, this Eeno cannot be absorbed by any other Eeno. - /* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE, + /* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE } EnSnowmanCombineState; ActorInit En_Snowman_InitVars = { @@ -119,7 +119,7 @@ typedef enum { /* 0x2 */ EN_SNOWMAN_DMGEFF_MELT, /* 0x4 */ EN_SNOWMAN_DMGEFF_LIGHT_ORB = 0x4, /* 0x5 */ EN_SNOWMAN_DMGEFF_ELECTRIC_STUN, - /* 0xF */ EN_SNOWMAN_DMGEFF_HOOKSHOT = 0xF, // Damages small Eenos, pulls the player towards large Eenos + /* 0xF */ EN_SNOWMAN_DMGEFF_HOOKSHOT = 0xF // Damages small Eenos, pulls the player towards large Eenos } EnTalkGibudDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h index da0c0a30a..55285fec8 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h @@ -12,7 +12,7 @@ typedef enum { /* 1 */ EN_SNOWMAN_TYPE_LARGE, /* 2 */ EN_SNOWMAN_TYPE_SPLIT, /* 3 */ EN_SNOWMAN_TYPE_SMALL_SNOWBALL, - /* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL, + /* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL } EnSnowmanType; struct EnSnowman; 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 3908e863f..7e3b9ead6 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -70,7 +70,7 @@ typedef enum { /* 5 */ STH_ANIM_LOOK_AROUND, // checking out Oceanside Spider House /* 6 */ STH_ANIM_PLEAD, // wants to buy Oceanside Spider House /* 7 */ STH_ANIM_PANIC, // after buying Oceanside Spider House, can be found at bottom of slide, - /* 8 */ STH_ANIM_START, // set in init, not an actual index to the array + /* 8 */ STH_ANIM_START // set in init, not an actual index to the array } EnSthAnimation; static AnimationHeader* sAnimationInfo[] = { 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 1c8c92852..dbc459ce1 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h @@ -16,9 +16,9 @@ typedef enum { /* 2 */ STH_TYPE_SWAMP_SPIDER_HOUSE_CURED, // cursed is EnSsh /* 3 */ STH_TYPE_MOON_LOOKING, // South Clock Town, looking up at the moon /* 4 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_GREET, // looking for shelter - /* 5 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC, // shelter was not enough + /* 5 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC // shelter was not enough // Other values: Actor will spawn and animate with arm waving, no further interaction. -} EnSthTypes; +} EnSthType; // Note: Vanilla types usually have 0xFEXX typing, but this upper section is unused by the code, reason unknown #define STH_GET_TYPE(thisx) ((thisx)->params & 0xF) 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 b89976faf..e41fc5dc7 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 @@ -90,7 +90,7 @@ typedef enum { /* 0 */ EN_STONE_BOTTLE_NONE, /* 1 */ EN_STONE_BOTTLE_RED_POTION, /* 2 */ EN_STONE_BOTTLE_EMPTY, - /* 3 */ EN_STONE_BOTTLE_BLUE_POTION, + /* 3 */ EN_STONE_BOTTLE_BLUE_POTION } EnStoneHeishiBottle; typedef enum { @@ -100,8 +100,8 @@ typedef enum { /* 3 */ EN_STONE_HEISHI_ANIM_WAVE, /* 4 */ EN_STONE_HEISHI_ANIM_SIT_AND_REACH, /* 5 */ EN_STONE_HEISHI_ANIM_DRINK_2, - /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP, -} EnStoneHeishiAnimations; + /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP +} EnStoneHeishiAnimation; void EnStoneheishi_Init(Actor* thisx, PlayState* play) { EnStoneheishi* this = THIS; 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 d90752d9b..43ddae02a 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 @@ -31,7 +31,7 @@ typedef enum { /* 5 */ SOLDIER_ANIM_5, /* 6 */ SOLDIER_ANIM_6, /* 7 */ SOLDIER_ANIM_STAND_HAND_ON_CHEST, - /* 8 */ SOLDIER_ANIM_MAX, + /* 8 */ SOLDIER_ANIM_MAX } SoldierAnimation; ActorInit En_Stop_heishi_InitVars = { diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.h b/src/overlays/actors/ovl_En_Stream/z_en_stream.h index 88856c3dd..c5aa3c9e2 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.h +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.h @@ -12,13 +12,13 @@ typedef enum { /* 0 */ EN_STREAM_SIZE_NORMAL, - /* 1 */ EN_STREAM_SIZE_SMALL, + /* 1 */ EN_STREAM_SIZE_SMALL } EnStreamSize; typedef enum { /* 0 */ EN_STREAM_PLAYER_OUTSIDE_RANGE, /* 1 */ EN_STREAM_PLAYER_WITHIN_RANGE_INSIDE_VORTEX, - /* 2 */ EN_STREAM_PLAYER_WITHIN_RANGE_BELOW_VORTEX, + /* 2 */ EN_STREAM_PLAYER_WITHIN_RANGE_BELOW_VORTEX } EnStreamPlayerLocation; struct EnStream; diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index b8c5eda14..ee9c63536 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -36,7 +36,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play); typedef enum { /* 0 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL, - /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP, + /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP } EnSyatekiDekunutsHeaddressType; ActorInit En_Syateki_Dekunuts_InitVars = { @@ -80,7 +80,7 @@ typedef enum { /* 3 */ EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND, /* 4 */ EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE, /* 5 */ EN_SYATEKI_DEKUNUTS_ANIM_DIE, - /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW, // unused + /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW // unused } EnSyatekiDekunutsAnimation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h index 2ceb0b32d..ce3e9ba90 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h @@ -11,7 +11,7 @@ typedef enum { /* 0 */ EN_SYATEKI_DEKUNUTS_TYPE_NORMAL, // Worth 30 points - /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS, // Worth 100 points + /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS // Worth 100 points } EnSyatekiDekunutsType; struct EnSyatekiDekunuts; 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 a58425737..f5910a06d 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 @@ -74,7 +74,7 @@ ActorInit En_Syateki_Man_InitVars = { typedef enum { /* 0 */ EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE, /* 1 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_LOOP, - /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END, + /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END } EnSyatekiManAnimation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index 7b885c5e8..52aa71cad 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -120,7 +120,7 @@ typedef enum { /* 3 */ EN_SYATEKI_WF_ANIM_LAND, /* 4 */ EN_SYATEKI_WF_ANIM_BACKFLIP, // unused /* 5 */ EN_SYATEKI_WF_ANIM_DAMAGED, - /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER, + /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER } EnSyatekiWfAnimation; static AnimationInfo sAnimationInfo[] = { 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 ee3b9af58..84d0b7dd1 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 @@ -53,12 +53,12 @@ typedef struct { /* 0x4 */ ItemId item; /* 0x8 */ s32 amount; /* 0xC */ s16 isBottledItem; -} EnTalkGibudRequestedItem; +} EnTalkGibudRequestedItem; // size = 0x10 typedef enum { /* 0 */ EN_TALK_GIBUD_REQUESTED_ITEM_MET, /* 1 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO, - /* 2 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET, + /* 2 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET } EnTalkGibudRequestedItemState; typedef enum { @@ -71,7 +71,7 @@ typedef enum { /* 6 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BOMBS, /* 7 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_HOT_SPRING_WATER, /* 8 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BIG_POE, - /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK, + /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK } EnTalkGibudRequestedItemIndex; typedef enum { @@ -88,18 +88,18 @@ typedef enum { /* 10 */ EN_TALK_GIBUD_ANIM_WALK, /* 11 */ EN_TALK_GIBUD_ANIM_DANCE_SQUAT, /* 12 */ EN_TALK_GIBUD_ANIM_DANCE_PIROUETTE, - /* 13 */ EN_TALK_GIBUD_ANIM_DANCE_CLAP, + /* 13 */ EN_TALK_GIBUD_ANIM_DANCE_CLAP } EnTalkGibudAnimation; typedef enum { /* 0 */ EN_TALK_GIBUD_TYPE_GIBDO, - /* 1 */ EN_TALK_GIBUD_TYPE_REDEAD, + /* 1 */ EN_TALK_GIBUD_TYPE_REDEAD } EnTalkGibudType; typedef enum { /* 0 */ EN_TALK_GIBUD_GRAB_START, /* 1 */ EN_TALK_GIBUD_GRAB_ATTACK, - /* 2 */ EN_TALK_GIBUD_GRAB_RELEASE, + /* 2 */ EN_TALK_GIBUD_GRAB_RELEASE } EnTalkGibudGrabState; ActorInit En_Talk_Gibud_InitVars = { @@ -159,7 +159,7 @@ typedef enum { /* 0xC */ EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect /* 0xD */ EN_TALK_GIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation /* 0xE */ EN_TALK_GIBUD_DMGEFF_LIGHT_RAY, // Instantly kills a Redead on contact - /* 0xF */ EN_TALK_GIBUD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation + /* 0xF */ EN_TALK_GIBUD_DMGEFF_DAMAGE // Deals damage and plays the damage animation } EnTalkGibudDamageEffect; static DamageTable sDamageTable = { 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 1eaf1d128..5c62c50ee 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -23,13 +23,13 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play); typedef enum { /* 0 */ SEAGULL_FLY_FLAP, - /* 1 */ SEAGULL_FLY_GLIDE, + /* 1 */ SEAGULL_FLY_GLIDE } SeagullFlyState; typedef enum { /* 0 */ SEAGULL_TIMER_FLY_STATE, - /* 1 */ SEAGULL_TIMER_CHOOSE_TARGET, -} SeagullTimers; + /* 1 */ SEAGULL_TIMER_CHOOSE_TARGET +} SeagullTimer; ActorInit En_Tanron4_InitVars = { ACTOR_EN_TANRON4, 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 8e5a39bf8..e853570f4 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -72,7 +72,7 @@ void EnTest2_Init(Actor* thisx, PlayState* play) { EnTest2* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - if ((this->actor.params == EN_TEST2_PARAMS_B) || (this->actor.params == EN_TEST2_PARAMS_C)) { + if ((this->actor.params == EN_TEST2_PARAM_B) || (this->actor.params == EN_TEST2_PARAM_C)) { this->actor.flags |= ACTOR_FLAG_20; } } diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.h b/src/overlays/actors/ovl_En_Test2/z_en_test2.h index 3b03e0cc1..d54dbb265 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.h +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.h @@ -11,8 +11,8 @@ typedef struct EnTest2 { } EnTest2; // size = 0x148 typedef enum { - /* 0xB */ EN_TEST2_PARAMS_B = 0xB, - /* 0xC */ EN_TEST2_PARAMS_C -} EnTest2_Params; + /* 0xB */ EN_TEST2_PARAM_B = 0xB, + /* 0xC */ EN_TEST2_PARAM_C +} EnTest2_Param; #endif // Z_EN_TEST2_H diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.h b/src/overlays/actors/ovl_En_Test6/z_en_test6.h index d7e40a983..2fe138ddb 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h @@ -9,11 +9,11 @@ typedef void (*EnTest6ActionFunc)(struct EnTest6*, PlayState*); #define ENTEST6_GET(thisx) ((thisx)->params) -enum { +typedef enum { /* 24 */ ENTEST6_24 = 24, /* 25 */ ENTEST6_25, - /* 26 */ ENTEST6_26, -}; + /* 26 */ ENTEST6_26 +} EnTest6Param; typedef struct { /* 0x00 */ LightNode* node; 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 128e01973..c022ca122 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 @@ -56,7 +56,7 @@ typedef enum { /* 13 */ TIMETAG_KICKOUT_TEXT_TOWN_SHOOTING_GALLERY_2, // quick, it's closing time /* 14 */ TIMETAG_KICKOUT_TEXT_SWORDSMANS_SCHOOL, // need to cut the moon, must leave /* 15 */ TIMETAG_KICKOUT_TEXT_TREASURE_CHEST_SHOP, // already time to close shop - /* 16 */ TIMETAG_KICKOUT_TEXT_DOGGY_RACETRACK, // no more for today + /* 16 */ TIMETAG_KICKOUT_TEXT_DOGGY_RACETRACK // no more for today } TimeTagKickOutText; typedef struct EnTimeTag { diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.h b/src/overlays/actors/ovl_En_Tite/z_en_tite.h index 57d8ef3e3..af77f4a8d 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h @@ -7,13 +7,13 @@ struct EnTite; typedef void (*EnTiteActionFunc)(struct EnTite*, PlayState*); -enum { +typedef enum { /* -4 */ ENTITE_MINUS_4 = -4, /* -3 */ ENTITE_MINUS_3, /* -2 */ ENTITE_MINUS_2, /* -1 */ ENTITE_MINUS_1, - /* 0 */ ENTITE_MINUS_0, -}; + /* 0 */ ENTITE_MINUS_0 +} EnTiteParam; typedef struct EnTite { /* 0x000 */ Actor actor; 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 341f0a89d..469e07e6d 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -130,9 +130,9 @@ static f32 D_80AEF8F0[] = { }; typedef struct { - /* 0x00 */ Actor* unk_00; - /* 0x04 */ f32 unk_04; -} EnTkStruct; // size = 0x8? + /* 0x0 */ Actor* unk_00; + /* 0x4 */ f32 unk_04; +} EnTkStruct; // size = 0x8 void func_80AEC460(EnTk* this) { if (DECR(this->unk_2C4) == 0) { diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h index 9033b9923..edc488d1e 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h @@ -18,7 +18,7 @@ typedef enum { /* 1 */ TORCH2_PARAM_GORON, /* 2 */ TORCH2_PARAM_ZORA, /* 3 */ TORCH2_PARAM_DEKU, - /* 4 */ TORCH2_PARAM_FIERCE_DEITY, + /* 4 */ TORCH2_PARAM_FIERCE_DEITY } EnTorch2Param; typedef enum { @@ -26,7 +26,7 @@ typedef enum { /* 1 */ TORCH2_STATE_FADING_IN, /* 2 */ TORCH2_STATE_SOLID, /* 3 */ TORCH2_STATE_IDLE, - /* 4 */ TORCH2_STATE_DYING, + /* 4 */ TORCH2_STATE_DYING } EnTorch2State; #endif // Z_EN_TORCH2_H 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 79bee615a..551d7d774 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -47,18 +47,18 @@ void EnViewer_Init(Actor* thisx, PlayState* play) { this->unk_154 = D_8089F3E0; D_8089F3E0++; switch (ENVIEWER_GET_3(&this->actor)) { - case ENVIEWER_PARAMS_0: + case ENVIEWER_PARAM_0: this->unk_148 = ENVIEWER_GET_8000(&this->actor) * 40.0f; this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f; EnViewer_SetupAction(this, func_8089F17C); break; - case ENVIEWER_PARAMS_1: + case ENVIEWER_PARAM_1: this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f; this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f; this->unk_14C = (u16)(this->actor.world.rot.y) * 40.0f; EnViewer_SetupAction(this, func_8089F218); break; - case ENVIEWER_PARAMS_2: + case ENVIEWER_PARAM_2: this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f; this->unk_14C = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f; EnViewer_SetupAction(this, func_8089F2C4); diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h index 1532e7c70..c4d2114bf 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h @@ -22,9 +22,9 @@ typedef struct EnViewer { } EnViewer; // size = 0x158 typedef enum { - /* 0x0 */ ENVIEWER_PARAMS_0, - /* 0x1 */ ENVIEWER_PARAMS_1, - /* 0x2 */ ENVIEWER_PARAMS_2 -} EnViewerParams; + /* 0x0 */ ENVIEWER_PARAM_0, + /* 0x1 */ ENVIEWER_PARAM_1, + /* 0x2 */ ENVIEWER_PARAM_2 +} EnViewerParam; #endif // Z_EN_VIEWER_H diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h index 93dd63245..4d1466b95 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h @@ -27,9 +27,9 @@ * the timer to 130 frames if the player strays too far from the Wallmaster's current position. */ typedef enum { - /* 0x0 */ WALLMASTER_TYPE_TIMER_ONLY, - /* 0x1 */ WALLMASTER_TYPE_PROXIMITY, - /* 0x2 */ WALLMASTER_TYPE_FLAG + /* 0 */ WALLMASTER_TYPE_TIMER_ONLY, + /* 1 */ WALLMASTER_TYPE_PROXIMITY, + /* 2 */ WALLMASTER_TYPE_FLAG } WallmasterType; struct EnWallmas; diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h index 433ebac62..f4b9d7284 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h @@ -24,7 +24,7 @@ typedef enum { /* 0x309 */ ENWATEREFFECT_TYPE_GYORG_RIPPLES = 0x309, // Ripples on the surface when Gyrog enters/leaves the water /* 0x30A */ ENWATEREFFECT_TYPE_GYORG_PRIMARY_SPRAY, // Large "funnel" of water that forms when Gyorg enters/leaves the water /* 0x30B */ ENWATEREFFECT_TYPE_GYORG_SECONDARY_SPRAY, // Secondary "funnel" in the middle of the larger "funnel" - /* 0x30C */ ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE, // Shockwave on the surface when Gyorg rams into the central platform + /* 0x30C */ ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE // Shockwave on the surface when Gyorg rams into the central platform } EnWaterEffectType; typedef struct EnWaterEffect { diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h index b1e7f8f86..5313aacfd 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h @@ -32,7 +32,7 @@ typedef enum { /* 4 */ WEATHERTAG_TYPE_UNK4, /* 5 */ WEATHERTAG_TYPE_UNK5, /* 6 */ WEATHERTAG_TYPE_WATERMURK, - /* 7 */ WEATHERTAG_TYPE_LOCALDAY2RAIN, + /* 7 */ WEATHERTAG_TYPE_LOCALDAY2RAIN } WeatherTagType; #endif // Z_EN_WEATHER_TAG_H 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 b64af5a88..7fd55f4ee 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -50,7 +50,7 @@ typedef enum { /* 6 */ EN_WIZ_ACTION_BURST_INTO_FLAMES, /* 7 */ EN_WIZ_ACTION_RUN_IN_CIRCLES, /* 8 */ EN_WIZ_ACTION_ATTACK, - /* 9 */ EN_WIZ_ACTION_DANCE, + /* 9 */ EN_WIZ_ACTION_DANCE } EnWizAction; typedef enum { @@ -68,7 +68,7 @@ typedef enum { /* 0 */ EN_WIZ_FIGHT_STATE_FIRST_PHASE, /* 1 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_CUTSCENE, /* 2 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE, - /* 3 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND, + /* 3 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND } EnWizFightState; typedef enum { @@ -77,7 +77,7 @@ typedef enum { /* 2 */ EN_WIZ_ANIM_DANCE, /* 3 */ EN_WIZ_ANIM_WIND_UP, /* 4 */ EN_WIZ_ANIM_ATTACK, - /* 5 */ EN_WIZ_ANIM_DAMAGE, + /* 5 */ EN_WIZ_ANIM_DAMAGE } EnWizAnimation; ActorInit En_Wiz_InitVars = { @@ -239,12 +239,12 @@ static ColliderCylinderInit sCylinderInit = { }; typedef enum { - /* 0x0 */ EN_WIZ_DMGEFF_IMMUNE, // Deals no damage - /* 0x1 */ EN_WIZ_DMGEFF_UNK1, // Deals no damage. Was probably originally intended for destroying ghosts. - /* 0x2 */ EN_WIZ_DMGEFF_FIRE, // Damages and sets Ice Wizrobes on fire - /* 0x3 */ EN_WIZ_DMGEFF_FREEZE, // Damages and surrounds Fire Wizrobes with ice - /* 0x4 */ EN_WIZ_DMGEFF_LIGHT_ORB, // Damages and surrounds the Wizrobe with light orbs - /* 0xF */ EN_WIZ_DMGEFF_NONE = 0xF, // Deals regular damage and has no special effect + /* 0x0 */ EN_WIZ_DMGEFF_IMMUNE, // Deals no damage + /* 0x1 */ EN_WIZ_DMGEFF_UNK1, // Deals no damage. Was probably originally intended for destroying ghosts. + /* 0x2 */ EN_WIZ_DMGEFF_FIRE, // Damages and sets Ice Wizrobes on fire + /* 0x3 */ EN_WIZ_DMGEFF_FREEZE, // Damages and surrounds Fire Wizrobes with ice + /* 0x4 */ EN_WIZ_DMGEFF_LIGHT_ORB, // Damages and surrounds the Wizrobe with light orbs + /* 0xF */ EN_WIZ_DMGEFF_NONE = 0xF // Deals regular damage and has no special effect } EnWizDamageEffect; static DamageTable sFireWizrobeDamageTable = { 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 4d35a0f68..70f7a6c64 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -10,7 +10,7 @@ typedef enum { /* 0 */ EN_WIZ_TYPE_FIRE, /* 1 */ EN_WIZ_TYPE_ICE, - /* 2 */ EN_WIZ_TYPE_FIRE_NO_BGM, // does not request the mini-boss BGM + /* 2 */ EN_WIZ_TYPE_FIRE_NO_BGM // does not request the mini-boss BGM } EnWizType; struct EnWiz; diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h index 3df0362ed..651aac8ea 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h @@ -7,7 +7,7 @@ typedef enum { /* 0 */ EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE, /* 1 */ EN_WIZ_BROCK_PLATFORM_TYPE_FIRE, /* 2 */ EN_WIZ_BROCK_PLATFORM_TYPE_ICE, - /* 3 */ EN_WIZ_BROCK_PLATFORM_TYPE_MAX, + /* 3 */ EN_WIZ_BROCK_PLATFORM_TYPE_MAX } EnWizBrockPlatformType; struct EnWizBrock; 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 4a7f6cd20..8251a896b 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 @@ -32,7 +32,7 @@ typedef enum { /* 0 */ EN_WIZ_FIRE_ACTION_MOVE_MAGIC_PROJECTILE, /* 1 */ EN_WIZ_FIRE_ACTION_SMALL_FLAME, /* 2 */ EN_WIZ_FIRE_ACTION_POOL, - /* 3 */ EN_WIZ_FIRE_ACTION_KILL_MAGIC_PROJECTILE, + /* 3 */ EN_WIZ_FIRE_ACTION_KILL_MAGIC_PROJECTILE } EnWizFireAction; static s32 sPoolHitByIceArrow = false; diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.h b/src/overlays/actors/ovl_En_Zob/z_en_zob.h index e0bd7bf79..6e6c8e7a8 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.h +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.h @@ -9,10 +9,10 @@ typedef void (*EnZobActionFunc)(struct EnZob*, PlayState*); #define ENZOB_GET_F(thisx) ((thisx)->params & 0xF) -enum { +typedef enum { /* 1 */ ENZOB_F_1 = 1, - /* 2 */ ENZOB_F_2, -}; + /* 2 */ ENZOB_F_2 +} EnZobParam; typedef struct EnZob { /* 0x000 */ Actor actor; 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 57c85a664..d032b6579 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -30,7 +30,7 @@ typedef enum { /* 2 */ ENZOD_ANIM_ARMS_FOLDED, /* 3 */ ENZOD_ANIM_PLAYING_LENTO, /* 4 */ ENZOD_ANIM_PLAYING_ANDANTINO, - /* 5 */ ENZOD_ANIM_MAX, + /* 5 */ ENZOD_ANIM_MAX } EnZodAnimation; typedef enum { @@ -42,7 +42,7 @@ typedef enum { /* 6 */ ENZOD_INSTRUMENT_DRUM_3, /* 7 */ ENZOD_INSTRUMENT_DRUM_4, /* 8 */ ENZOD_INSTRUMENT_DRUM_5, - /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM, + /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM } EnZodInstrument; const ActorInit En_Zod_InitVars = { diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.h b/src/overlays/actors/ovl_En_Zod/z_en_zod.h index 9e6f3f4da..12278bb97 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.h +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.h @@ -33,9 +33,9 @@ typedef struct EnZod { } EnZod; // size = 0x2A0 typedef enum { - /* 1 */ ENZOD_TYPE_1 = 1, - /* 2 */ ENZOD_TYPE_2, - /* 0xF */ ENZOD_TYPE_0xF = 0xF, -} EnZodTypes; + /* 0x1 */ ENZOD_TYPE_1 = 1, + /* 0x2 */ ENZOD_TYPE_2, + /* 0xF */ ENZOD_TYPE_0xF = 0xF +} EnZodType; #endif // Z_EN_ZOD_H 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 18a421272..f8895af3f 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h @@ -10,7 +10,7 @@ typedef void (*EnZoraeggActionFunc)(struct EnZoraegg*, PlayState*); #define ENZORAEGG_GET_1F(thisx) ((thisx)->params & 0x1F) #define ENZORAEGG_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) -enum { +typedef enum { /* 0x00 */ ENZORAEGG_1F_00, /* 0x01 */ ENZORAEGG_1F_01, /* 0x02 */ ENZORAEGG_1F_02, @@ -36,8 +36,8 @@ enum { /* 0x16 */ ENZORAEGG_1F_16, /* 0x17 */ ENZORAEGG_1F_17, /* 0x18 */ ENZORAEGG_1F_18, - /* 0x19 */ ENZORAEGG_1F_19, -}; + /* 0x19 */ ENZORAEGG_1F_19 +} EnZoraeggParam; typedef struct EnZoraegg { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.h b/src/overlays/actors/ovl_En_Zos/z_en_zos.h index 669430a0c..f761a9bc5 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.h +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.h @@ -10,10 +10,10 @@ typedef void (*EnZosActionFunc)(struct EnZos*, PlayState*); #define ENZOS_GET_F(thisx) ((thisx)->params & 0xF) -enum { +typedef enum { /* 1 */ ENZOS_F_1 = 1, - /* 2 */ ENZOS_F_2, -}; + /* 2 */ ENZOS_F_2 +} EnZosParam; typedef struct EnZos { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h index 7a071a8ec..90577dcfd 100644 --- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h +++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h @@ -4,9 +4,9 @@ #include "global.h" typedef enum { - /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale. - /* 35 */ BHEART_PARAM_SMALL = 35, // Spawn Parameter for Small Scale. -} ItemBHeartParams; + /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale. + /* 35 */ BHEART_PARAM_SMALL = 35 // Spawn Parameter for Small Scale. +} ItemBHeartParam; #define BHEART_SCALE_SMALL (0.1f) // Scale value for Small Mode #define BHEART_SCALE_NORMAL (1.0f) // Scale value for Normal Mode diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h index cd48cfed1..f27254cec 100644 --- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h +++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h @@ -19,8 +19,8 @@ typedef enum { /* 0x7 */ MIRRAY_SPIRIT_TOPROOM_COBRA1, /* 0x8 */ MIRRAY_SPIRIT_TOPROOM_COBRA2, /* 0x9 */ MIRRAY_GANONSCASTLE_SPIRITTRIAL_DOWNLIGHT, - /* 0xA */ MIRRAY_MAX, -} MirRayBeamLocations; + /* 0xA */ MIRRAY_MAX +} MirRayBeamLocation; typedef struct MirRay { /* 0x000 */ Actor actor; 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 177cc8e66..4ac83cc9d 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h @@ -12,15 +12,15 @@ typedef void (*ObjArmosActionFunc)(struct ObjArmos*, PlayState*); #define OBJARMOS_GET_ROTZ_7(thisx) ((thisx)->home.rot.z & 7) #define OBJARMOS_GET_ROTX_F(thisx) ((thisx)->home.rot.x & 0xF) -enum { +typedef enum { /* 0 */ OBJARMOS_ROT_7_0, /* 1 */ OBJARMOS_ROT_7_1, /* 2 */ OBJARMOS_ROT_7_2, /* 3 */ OBJARMOS_ROT_7_3, /* 4 */ OBJARMOS_ROT_7_4, /* 5 */ OBJARMOS_ROT_7_5, - /* 6 */ OBJARMOS_ROT_7_6, -}; + /* 6 */ OBJARMOS_ROT_7_6 +} ObjArmosParam; typedef struct ObjArmos { /* 0x000 */ DynaPolyActor dyna; 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 7699b3427..1a22de390 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h @@ -16,11 +16,11 @@ typedef void (*ObjBeanUnkFunc)(struct ObjBean*); #define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3) -enum { - /* 0x0 */ ENOBJBEAN_GET_C000_0, - /* 0x1 */ ENOBJBEAN_GET_C000_1, - /* 0x2 */ ENOBJBEAN_GET_C000_2, -}; +typedef enum { + /* 0 */ ENOBJBEAN_GET_C000_0, + /* 1 */ ENOBJBEAN_GET_C000_1, + /* 2 */ ENOBJBEAN_GET_C000_2 +} ObjBeanParam; typedef struct ObjBean { /* 0x000 */ DynaPolyActor dyna; 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 66ef9c691..c8eed614b 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -77,11 +77,11 @@ static ColliderCylinderInit sCylinderInit2 = { }; typedef struct { - /* 0x00 */ ColliderCylinderInit* collider; - /* 0x04 */ ActorShadowFunc unk_04; - /* 0x08 */ ActorFunc unk_08; - /* 0x0C */ s32 (*unk_0C)(Actor*); -} ObjBombiwaStruct2; + /* 0x0 */ ColliderCylinderInit* collider; + /* 0x4 */ ActorShadowFunc unk_04; + /* 0x8 */ ActorFunc unk_08; + /* 0xC */ s32 (*unk_0C)(Actor*); +} ObjBombiwaStruct2; // size = 0x10 static ObjBombiwaStruct2 D_8093A998[] = { { &sCylinderInit1, ActorShadow_DrawCircle, func_8093A418, func_809393B0 }, 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 1805e151a..454e3f674 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h @@ -12,7 +12,7 @@ typedef enum { /* 1 */ DEKU_FLOWER_TYPE_PINK_WITH_INITIAL_BOUNCE, /* 2 */ DEKU_FLOWER_TYPE_GOLD, /* 3 */ DEKU_FLOWER_TYPE_GOLD_WITH_INITIAL_BOUNCE, - /* 4 */ DEKU_FLOWER_TYPE_MAX, + /* 4 */ DEKU_FLOWER_TYPE_MAX } DekuFlowerType; struct ObjEtcetera; 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 4804b8b87..40c363dca 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -55,8 +55,8 @@ static ColliderCylinderInit sCylinderInit = { }; typedef struct { - /* 0x00 */ f32 unk_00; - /* 0x04 */ f32 unk_04; + /* 0x0 */ f32 unk_00; + /* 0x4 */ f32 unk_04; } ObjFireshieldStruct; // size = 0x8 ObjFireshieldStruct D_80A4D84C[] = { 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 336076199..4cc81013e 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -29,16 +29,16 @@ AnimatedMaterial* D_80B9DED0; AnimatedMaterial* D_80B9DED4; typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ u8 unk_01; - /* 0x02 */ u8 unk_02; + /* 0x0 */ u8 unk_00; + /* 0x1 */ u8 unk_01; + /* 0x2 */ u8 unk_02; } ObjHansuiBssStruct; // size = 0x3 ObjHansuiBssStruct D_80B9DED8; typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ u8 unk_01; + /* 0x0 */ u8 unk_00; + /* 0x1 */ u8 unk_01; } ObjHansuiStruct; // size = 0x2 ObjHansuiStruct D_80B9DC70[] = { 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 c06abbe7d..1f0450b28 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h @@ -12,15 +12,15 @@ typedef void (*ObjHunsuiActionFunc)(struct ObjHunsui*, PlayState*); #define OBJHUNSUI_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJHUNSUI_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) -enum { +typedef enum { /* 0 */ OBJHUNSUI_F000_0, /* 1 */ OBJHUNSUI_F000_1, /* 2 */ OBJHUNSUI_F000_2, /* 3 */ OBJHUNSUI_F000_3, /* 4 */ OBJHUNSUI_F000_4, /* 5 */ OBJHUNSUI_F000_5, - /* 6 */ OBJHUNSUI_F000_6, -}; + /* 6 */ OBJHUNSUI_F000_6 +} ObjHunsuiParam; typedef struct ObjHunsui { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c index 2aae58bad..529d7ec95 100644 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c +++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c @@ -13,9 +13,9 @@ #define THIS ((ObjJgameLight*)thisx) typedef enum { - /* 0x0 */ OBJJGAMELIGHT_NONE, - /* 0x1 */ OBJJGAMELIGHT_CORRECT, - /* 0x2 */ OBJJGAMELIGHT_INCORRECT, + /* 0 */ OBJJGAMELIGHT_NONE, + /* 1 */ OBJJGAMELIGHT_CORRECT, + /* 2 */ OBJJGAMELIGHT_INCORRECT } ObjJgameLightSignal; void ObjJgameLight_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c index df518ff43..048aa9bcc 100644 --- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c +++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c @@ -28,7 +28,7 @@ typedef enum { /* -1 */ OBJKENDOKANBAN_DIR_DOWN = -1, /* 0 */ OBJKENDOKANBAN_DIR_UNDETERMINED, - /* 1 */ OBJKENDOKANBAN_DIR_UP, + /* 1 */ OBJKENDOKANBAN_DIR_UP } ObjKendoKanbanDirection; void ObjKendoKanban_Init(Actor* thisx, PlayState* play); 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 1062d18f8..6a6937e7e 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -55,11 +55,11 @@ static ColliderCylinderInit sCylinderInit = { }; typedef struct { - /* 0x00 */ f32 scale; - /* 0x04 */ s16 radius; - /* 0x06 */ s16 height; - /* 0x08 */ s16 yShift; - /* 0x0C */ s32 params; + /* 0x0 */ f32 scale; + /* 0x4 */ s16 radius; + /* 0x6 */ s16 height; + /* 0x8 */ s16 yShift; + /* 0xC */ s32 params; } LightblockTypeVars; // size = 0x10 static LightblockTypeVars sLightblockTypeVars[] = { 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 c8f657c13..10f12c64a 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c @@ -108,7 +108,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) { } void func_8098F364(ObjMure3* this, PlayState* play) { - s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)]; + s16 count = sRupeeCounts[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)]; s32 i; EnItem00** collectible; @@ -126,7 +126,7 @@ void func_8098F364(ObjMure3* this, PlayState* play) { } void func_8098F438(ObjMure3* this, PlayState* play) { - s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)]; + s16 count = sRupeeCounts[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)]; s32 i; for (i = 0; i < count; i++) { @@ -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_PARAMS_7F(&this->actor)); + Flags_SetSwitch(play, OBJMURE3_PARAM_7F(&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_PARAMS_7F(&this->actor))) { + if (Flags_GetSwitch(play, OBJMURE3_PARAM_7F(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -175,7 +175,7 @@ void func_8098F5E4(ObjMure3* this, PlayState* play) { if (Math3D_XZLengthSquared(this->actor.projectedPos.x, this->actor.projectedPos.z) < SQ(1150.0f)) { this->actor.flags |= ACTOR_FLAG_10; - sSpawnFuncs[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)](this, play); + sSpawnFuncs[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)](this, play); func_8098F66C(this); } } 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 8715e4308..336a092b4 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h @@ -3,8 +3,8 @@ #include "global.h" -#define OBJMURE3_PARAMS_7F(thisx) ((thisx)->params & 0x7F) -#define OBJMURE3_PARAMS_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7) +#define OBJMURE3_PARAM_7F(thisx) ((thisx)->params & 0x7F) +#define OBJMURE3_PARAM_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7) struct ObjMure3; 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 eab144cbd..168168f41 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -74,7 +74,7 @@ void ObjOcarinalift_Init(Actor* thisx, PlayState* play) { this->unk16C = 1; this->unk170 = Lib_SegmentedToVirtual(path->points); func_80AC94C0(this, this->unk168); - if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) && + if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) && (Flags_GetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) { func_80AC96B4(this); } else { @@ -137,7 +137,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) { this->unk168 += this->unk16C; thisx->speed *= 0.4f; if (((this->unk168 >= this->unk164) && (this->unk16C > 0)) || ((this->unk168 <= 0) && (this->unk16C < 0))) { - if (paramsC == OBJOCARINALIFT_PARAMSC_0) { + if (paramsC == OBJOCARINALIFT_PARAM_0) { this->unk16C = -this->unk16C; this->timer = 10; func_80AC9A68(this); @@ -155,11 +155,11 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) { func_80AC99C0(this); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); sp34 = false; - } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { + } else if ((paramsC == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { func_80AC9AB8(this); } } - } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { + } else if ((paramsC == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { func_80AC9AB8(this); } if (sp34) { @@ -176,7 +176,7 @@ void func_80AC99D4(ObjOcarinalift* this, PlayState* play) { if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_80AC94C0(this, this->unk168); DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAMSC_1) && + if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(&this->dyna.actor))) { func_80AC9AB8(this); } else { @@ -218,7 +218,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { if (func_800B886C(&this->dyna.actor, play)) { if (play->msgCtx.ocarinaMode == 4) { if (play->msgCtx.lastPlayedSong == 0) { - if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) { + if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) { Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)); } CutsceneManager_Queue(this->dyna.actor.csId); diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h index 3789383c2..abb1e440b 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h @@ -24,9 +24,9 @@ typedef struct ObjOcarinalift { /* 0x176 */ s16 cutsceneTimer; } ObjOcarinalift; // size = 0x178 -typedef enum ObjOcarinaliftParams { - /* 0x0 */ OBJOCARINALIFT_PARAMSC_0, - /* 0x1 */ OBJOCARINALIFT_PARAMSC_1 -} ObjOcarinaliftParams; +typedef enum ObjOcarinaliftParam { + /* 0 */ OBJOCARINALIFT_PARAM_0, + /* 1 */ OBJOCARINALIFT_PARAM_1 +} ObjOcarinaliftParam; #endif // Z_OBJ_OCARINALIFT_H 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 d2f61e2cf..4740b907a 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h @@ -12,7 +12,7 @@ typedef void (*ObjOshihikiActionFunc)(struct ObjOshihiki*, PlayState*); #define OBJOSHIHIKI_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJOSHIHIKI_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -enum { +typedef enum { /* 0 */ OBJOSHIHIKI_F_0, /* 1 */ OBJOSHIHIKI_F_1, /* 2 */ OBJOSHIHIKI_F_2, @@ -21,8 +21,8 @@ enum { /* 5 */ OBJOSHIHIKI_F_5, /* 6 */ OBJOSHIHIKI_F_6, /* 7 */ OBJOSHIHIKI_F_7, - /* 8 */ OBJOSHIHIKI_F_8, -}; + /* 8 */ OBJOSHIHIKI_F_8 +} ObjOshihikiParam; #define OBJOSHIHIKI_FF00_0 0 #define OBJOSHIHIKI_FF00_80 0x80 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 29a673eae..8a124b0ab 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -44,7 +44,7 @@ typedef struct { /* 0x0 */ s16 unk_00; /* 0x4 */ CollisionHeader* unk_04; /* 0x8 */ Gfx* unk_08; -} ObjPzlblockStruct; +} ObjPzlblockStruct; // size = 0xC ObjPzlblockStruct D_809A4060[] = { { GAMEPLAY_DANGEON_KEEP, &gameplay_dangeon_keep_Colheader_01D488, gameplay_dangeon_keep_DL_01C228 }, diff --git a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h index df3fe1dee..e059b6baa 100644 --- a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h +++ b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h @@ -10,7 +10,7 @@ typedef enum { /* 0 */ OBJROTLIFT_TYPE_PLATFORMS, - /* 1 */ OBJROTLIFT_TYPE_SPIKES, + /* 1 */ OBJROTLIFT_TYPE_SPIKES } ObjRotliftType; struct ObjRotlift; 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 a4378d92b..92ac9ad85 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -73,10 +73,10 @@ static ColliderJntSphInit sJntSphInit = { }; typedef struct { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s16 unk_02; - /* 0x04 */ ObjSnowballActionFunc unk_04; -} ObjSnowballStruct2; + /* 0x0 */ s16 unk_00; + /* 0x2 */ s16 unk_02; + /* 0x4 */ ObjSnowballActionFunc unk_04; +} ObjSnowballStruct2; // size = 0x8 static ObjSnowballStruct2 D_80B04F84[] = { { -1, 0, func_80B02D58 }, 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 fb34d736a..c366a6982 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -234,7 +234,7 @@ typedef struct { /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; -} ObjSpidertentStruct; +} ObjSpidertentStruct; // size = 0x28 ObjSpidertentStruct D_80B31350[] = { { @@ -272,7 +272,7 @@ typedef struct { /* 0x0F */ s8 unk_0F; /* 0x10 */ Color_RGBA8 unk_10; /* 0x14 */ Color_RGBA8 unk_14; -} ObjSpidertentStruct2; +} ObjSpidertentStruct2; // size = 0x18 ObjSpidertentStruct2 D_80B313A0[] = { { diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h index 620228f53..4ebde38ad 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h +++ b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h @@ -7,7 +7,7 @@ typedef enum { /* 0 */ TURRET_TIER_BASE, - /* 1 */ TURRET_TIER_TOP, + /* 1 */ TURRET_TIER_TOP } TurretTierType; struct ObjTokeiTurret; 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 e670d19e0..43f424ceb 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h @@ -16,7 +16,7 @@ typedef enum { /* 8 */ OBJ_TOKEIDAI_TYPE_TOWER_WALLS_TERMINA_FIELD = 8, /* 9 */ OBJ_TOKEIDAI_TYPE_WALL_CLOCK, /* 10 */ OBJ_TOKEIDAI_TYPE_SMALL_WALL_CLOCK, - /* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP, + /* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP } ObjTokeidaiType; struct ObjTokeidai; 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 5f0e6c411..9b8baa861 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -63,8 +63,7 @@ typedef struct { /* 0x14 */ ObjTsuboUnkFunc breakPot1; /* 0x18 */ ObjTsuboUnkFunc breakPot2; /* 0x1C */ ObjTsuboUnkFunc breakPot3; - -} ObjTsuboData; +} ObjTsuboData; // size = 0x20 ObjTsuboData sPotTypeData[4] = { { GAMEPLAY_DANGEON_KEEP, 0.197f, gameplay_dangeon_keep_DL_017EA0, gameplay_dangeon_keep_DL_018090, 12, 32, diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h index 92bd96549..b6ed8d0df 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h @@ -9,10 +9,10 @@ typedef void (*ObjUsiyaneActionFunc)(struct ObjUsiyane*, PlayState*); #define OBJUSIYANE_GET_F(thisx) ((thisx)->params & 0xF) -enum { +typedef enum { /* 0 */ OBJUSIYANE_F_0, - /* 1 */ OBJUSIYANE_F_1, -}; + /* 1 */ OBJUSIYANE_F_1 +} ObjUsiyaneParam; typedef struct { /* 0x00 */ Vec3f unk_00; 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 bccdce645..a1b32bbe9 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h @@ -13,8 +13,8 @@ typedef struct ObjY2shutter { } ObjY2shutter; // size = 0x160 typedef enum { - /* 0x0 */ SHUTTER_BARRED, - /* 0x1 */ SHUTTER_GRATED, + /* 0 */ SHUTTER_BARRED, + /* 1 */ SHUTTER_GRATED } ShutterType; #define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1) diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h index 87a67191c..8bd3ecd65 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h @@ -19,6 +19,6 @@ typedef struct OceffStorm { typedef enum { /* 1 */ OCEFF_STORM_ACTION_PARAM_1 = 1 -} OceffStormActionParams; +} OceffStormActionParam; #endif // Z_OCEFF_STORM_H diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 41cf34318..9bf780859 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -80,7 +80,7 @@ typedef enum AnimSfxType { /* 7 */ ANIMSFX_TYPE_FLOOR_JUMP, // does not use sfxId /* 8 */ ANIMSFX_TYPE_8, // FLOOR_WALK_Something2 // does not use sfxId /* 9 */ ANIMSFX_TYPE_9, // Uses NA_SE_PL_WALK_LADDER // does not use sfxId, unused - /* 10 */ ANIMSFX_TYPE_SURFACE, + /* 10 */ ANIMSFX_TYPE_SURFACE } AnimSfxType; #define ANIMSFX_SHIFT_TYPE(type) ((type) << 11) diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c index 0e79c5df7..a786327fa 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c @@ -52,7 +52,7 @@ u32 EffectSsEnFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPa this->rScaleMax = initParams->scale; - if (initParams->params & ENFIRE_PARAMS_USE_SCALE) { + if (initParams->params & ENFIRE_PARAM_USE_SCALE) { this->rScale = initParams->scale; } else { this->rScale = 0; diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h index 0f17477b8..491df81a5 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h @@ -4,7 +4,7 @@ #include "global.h" #define ENFIRE_FLAGS_BODYPART_POS_VEC3S (1 << 15) -#define ENFIRE_PARAMS_USE_SCALE (1 << 15) +#define ENFIRE_PARAM_USE_SCALE (1 << 15) typedef struct { /* 0x00 */ Actor* actor; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h index c2f231269..4f8cd94fe 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h @@ -4,30 +4,30 @@ #include "global.h" typedef enum { - /* 0x00 */ FHGFLASH_LIGHTBALL, - /* 0x01 */ FHGFLASH_SHOCK + /* 0 */ FHGFLASH_LIGHTBALL, + /* 1 */ FHGFLASH_SHOCK } FhgFlashType; typedef enum { - /* 0x00 */ FHGFLASH_LIGHTBALL_GREEN, - /* 0x01 */ FHGFLASH_LIGHTBALL_LIGHTBLUE, - /* 0x02 */ FHGFLASH_LIGHTBALL_RED, - /* 0x03 */ FHGFLASH_LIGHTBALL_YELLOW, - /* 0x04 */ FHGFLASH_LIGHTBALL_BLUE, - /* 0x05 */ FHGFLASH_LIGHTBALL_PURPLE, - /* 0x06 */ FHGFLASH_LIGHTBALL_ORANGE, - /* 0x07 */ FHGFLASH_LIGHTBALL_WHITE1, - /* 0x08 */ FHGFLASH_LIGHTBALL_WHITE2 + /* 0 */ FHGFLASH_LIGHTBALL_GREEN, + /* 1 */ FHGFLASH_LIGHTBALL_LIGHTBLUE, + /* 2 */ FHGFLASH_LIGHTBALL_RED, + /* 3 */ FHGFLASH_LIGHTBALL_YELLOW, + /* 4 */ FHGFLASH_LIGHTBALL_BLUE, + /* 5 */ FHGFLASH_LIGHTBALL_PURPLE, + /* 6 */ FHGFLASH_LIGHTBALL_ORANGE, + /* 7 */ FHGFLASH_LIGHTBALL_WHITE1, + /* 8 */ FHGFLASH_LIGHTBALL_WHITE2 } FhgFlashLightBallParam; typedef enum { - /* 0x00 */ FHGFLASH_SHOCK_NO_ACTOR, - /* 0x01 */ FHGFLASH_SHOCK_PLAYER, - /* 0x02 */ FHGFLASH_SHOCK_GOHT_2, - /* 0x03 */ FHGFLASH_SHOCK_GOHT_3, - /* 0x04 */ FHGFLASH_SHOCK_GOHT_4, - /* 0x05 */ FHGFLASH_SHOCK_GOHT_5, - /* 0x06 */ FHGFLASH_SHOCK_GOHT_6 + /* 0 */ FHGFLASH_SHOCK_NO_ACTOR, + /* 1 */ FHGFLASH_SHOCK_PLAYER, + /* 2 */ FHGFLASH_SHOCK_GOHT_2, + /* 3 */ FHGFLASH_SHOCK_GOHT_3, + /* 4 */ FHGFLASH_SHOCK_GOHT_4, + /* 5 */ FHGFLASH_SHOCK_GOHT_5, + /* 6 */ FHGFLASH_SHOCK_GOHT_6 } FhgFlashLightningParam; typedef struct { diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c index f9735d396..1856ba6ac 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c @@ -21,10 +21,10 @@ EffectSsInit Effect_Ss_Stone1_InitVars = { }; typedef struct { - /* 0x00 */ TexturePtr texture; - /* 0x04 */ Color_RGBA8 primColor; - /* 0x08 */ Color_RGBA8 envColor; -} EffStoneDrawInfo; + /* 0x0 */ TexturePtr texture; + /* 0x4 */ Color_RGBA8 primColor; + /* 0x8 */ Color_RGBA8 envColor; +} EffStoneDrawInfo; // size = 0xC static EffStoneDrawInfo sDrawInfo[] = { { gEffStone8Tex, { 200, 0, 0, 255 }, { 0, 0, 0, 255 } }, diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h index b50868b81..627bbd4f2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h @@ -4,8 +4,8 @@ #include "global.h" typedef struct { - /* 0x00 */ Vec3f pos; - /* 0x0C */ s32 reg0; + /* 0x0 */ Vec3f pos; + /* 0xC */ s32 reg0; } EffectSsStone1InitParams; // size = 0x10 #endif diff --git a/src/overlays/gamestates/ovl_select/z_select.h b/src/overlays/gamestates/ovl_select/z_select.h index 69312e986..8b5974103 100644 --- a/src/overlays/gamestates/ovl_select/z_select.h +++ b/src/overlays/gamestates/ovl_select/z_select.h @@ -8,9 +8,9 @@ struct MapSelectState; typedef void (*SelectLoadFunc)(struct MapSelectState*, u32, s32); typedef struct { - /* 0x00 */ char* name; - /* 0x04 */ SelectLoadFunc loadFunc; - /* 0x08 */ s32 entrance; + /* 0x0 */ char* name; + /* 0x4 */ SelectLoadFunc loadFunc; + /* 0x8 */ s32 entrance; } SceneSelectEntry; // size = 0xC typedef struct MapSelectState { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 1b8511b50..1b18adcd1 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -563,7 +563,7 @@ typedef struct { /* 0x2 */ s16 down; /* 0x4 */ s16 left; /* 0x6 */ s16 right; -} CursorPointDirection; +} CursorPointDirection; // size = 0x8 void KaleidoScope_UpdateQuestCursor(PlayState* play) { static s16 sQuestSongPlaybackDelayTimer = 0; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 8517fdf20..f643d8d40 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -37,7 +37,7 @@ typedef struct { /* 0x0 */ s16 screenX; /* 0x2 */ s16 screenY; /* 0x4 */ s16 width; -} SectionPosition; // size = 0x6; +} SectionPosition; // size = 0x6 // clang-format off SectionPosition sSectionPositions[] = { From 7f5087d0b2014dc1ba2bbfc7ce858f0059a8a7cb Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 6 Jun 2023 12:16:34 +1000 Subject: [PATCH 48/51] sys_math.c Rename (#1258) * rename via comments * missed a comment * math header * name boot_80086760.c functions * PR Review * rm cam comment * Elliptic review * alphabetical --- include/functions.h | 101 +----------------- include/variables.h | 1 - include/z64math.h | 71 ++++++++++++ src/boot_O2/boot_80086760.c | 77 +++++-------- src/code/sys_math.c | 33 +++--- src/code/z_actor.c | 18 ++-- src/code/z_bgcheck.c | 3 +- src/code/z_camera.c | 33 +++--- src/code/z_eff_blure.c | 24 ++--- src/code/z_en_item00.c | 12 +-- src/code/z_lib.c | 6 +- src/code/z_olib.c | 8 +- src/code/z_player_lib.c | 12 +-- src/code/z_sub_s.c | 2 +- .../actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c | 7 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.c | 2 +- .../actors/ovl_Bg_Icefloe/z_bg_icefloe.c | 10 +- .../actors/ovl_Bg_Icicle/z_bg_icicle.c | 8 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 7 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 38 +++---- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 56 +++++----- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 4 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 18 ++-- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 10 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 2 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 8 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 6 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 9 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 2 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 16 ++- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 8 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 8 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 4 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 33 +++--- .../actors/ovl_En_Bigslime/z_en_bigslime.h | 2 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 10 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 4 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 4 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 6 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 12 +-- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 4 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 10 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 12 +-- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 14 +-- .../actors/ovl_En_Dragon/z_en_dragon.c | 10 +- .../actors/ovl_En_Egblock/z_en_egblock.c | 10 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 17 ++- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 12 +-- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 2 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 6 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 14 +-- .../actors/ovl_En_Encount4/z_en_encount4.c | 4 +- .../actors/ovl_En_Estone/z_en_estone.c | 10 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 8 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 6 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 2 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 24 ++--- .../actors/ovl_En_Fishing/z_en_fishing.c | 56 +++++----- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 22 ++-- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 2 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 34 +++--- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 4 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 2 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 10 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 8 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 8 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 14 +-- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 6 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 20 ++-- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 6 +- .../actors/ovl_En_Minislime/z_en_minislime.c | 30 +++--- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 10 +- .../actors/ovl_En_Nimotsu/z_en_nimotsu.c | 4 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 22 ++-- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 12 +-- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 6 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 2 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 10 +- src/overlays/actors/ovl_En_Part/z_en_part.c | 6 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 14 +-- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 26 ++--- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 8 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 18 ++-- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 32 +++--- .../actors/ovl_En_Racedog/z_en_racedog.c | 18 ++-- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 6 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 20 ++-- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 4 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 6 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 10 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 42 ++++---- .../actors/ovl_En_Snowman/z_en_snowman.c | 20 ++-- .../actors/ovl_En_Suttari/z_en_suttari.c | 8 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 4 +- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 4 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 6 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 8 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 2 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 26 ++--- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 23 ++-- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 16 +-- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 10 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 10 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 12 +-- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 2 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 12 +-- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 10 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 8 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 22 ++-- .../actors/ovl_En_Wood02/z_en_wood02.c | 6 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 6 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 8 +- .../ovl_Obj_Bigicicle/z_obj_bigicicle.c | 16 +-- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 2 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 8 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 4 +- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c | 6 +- .../actors/ovl_player_actor/z_player.c | 30 +++--- .../ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c | 4 +- .../z_eff_ss_fhg_flash.c | 12 +-- .../z_eff_ss_kirakira.c | 4 +- .../effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c | 2 +- tools/disasm/functions.txt | 78 +++++++------- tools/namefixer.py | 8 +- tools/sizes/boot_functions.csv | 66 ++++++------ tools/sizes/code_functions.csv | 12 +-- 140 files changed, 916 insertions(+), 955 deletions(-) diff --git a/include/functions.h b/include/functions.h index 7d64745f6..71aa14729 100644 --- a/include/functions.h +++ b/include/functions.h @@ -129,39 +129,6 @@ 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); -f32 func_80086760(f32 x); -// void func_80086794(void); -// void func_800867B4(void); -// void func_800867D4(void); -// void func_800867F4(void); -f32 func_80086814(f32 x); -// void func_80086834(void); -// void func_80086880(void); -// void func_800869A4(void); -// void func_80086AF0(void); -f32 func_80086B30(f32 y, f32 x); -// void func_80086C18(void); -f32 func_80086C48(f32 x); -// void func_80086C70(void); -f64 func_80086C7C(f64 param_1); -s32 func_80086C88(f32 param_1); -s32 func_80086C98(f64 param_1); -// void func_80086CA8(void); -f64 func_80086CB4(f64 param_1); -s32 func_80086CC0(f32 param_1); -s32 func_80086CD0(f64 param_1); -// void func_80086CE0(void); -f64 func_80086CEC(f64 param_1); -s32 func_80086CF8(f32 param_1); -s32 func_80086D08(f64 param_1); -// void func_80086D18(void); -f64 func_80086D24(f64); -s32 func_80086D30(f32 param_1); -s32 func_80086D40(f64 param_1); -// void func_80086D50(void); -f64 func_80086D6C(f64 param_1); -s32 func_80086D8C(f32 param_1); -s32 func_80086DAC(f64 param_1); u32 Rand_Next(void); void Rand_Seed(u32 seed); @@ -1161,70 +1128,17 @@ 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); -f32 Math_CosS(s16 angle); -f32 Math_SinS(s16 angle); -s32 Math_StepToIImpl(s32 start, s32 target, s32 step); -void Math_StepToIGet(s32* pValue, s32 target, s32 step); -s32 Math_StepToI(s32* pValue, s32 target, s32 step); -s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step); -s32 Math_StepToS(s16* pValue, s16 target, s16 step); -s32 Math_StepToC(s8* pValue, s8 target, s8 step); -s32 Math_StepToF(f32* pValue, f32 target, f32 step); -s32 Math_StepUntilAngleS(s16* pValue, s16 target, s16 step); -s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step); -s32 Math_AsymStepToS(s16* pValue, s16 target, s16 incrStep, s16 decrStep); -s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step); -s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep); void func_800FF3A0(f32* distOut, s16* angleOut, Input* input); -s16 Rand_S16Offset(s16 base, s16 range); -s16 Rand_S16OffsetStride(s16 base, s16 stride, s16 range); -void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src); -void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src); -void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src); -void Math_Vec3f_ToVec3s(Vec3s* dest, Vec3f* src); -void Math_Vec3f_Sum(Vec3f* l, Vec3f* r, Vec3f* dest); -void Math_Vec3f_Diff(Vec3f* l, Vec3f* r, Vec3f* dest); -void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* l, Vec3s* r); -void Math_Vec3f_Scale(Vec3f* vec, f32 scale); -void Math_Vec3f_ScaleAndStore(Vec3f* vec, f32 scale, Vec3f* dest); -void Math_Vec3f_Lerp(Vec3f* a, Vec3f* b, f32 t, Vec3f* dest); -void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); -void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest); -void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); -f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b); -f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest); -f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b); -f32 Math_Vec3f_DistXZAndStore(Vec3f* a, Vec3f* b, f32* dx, f32* dz); -f32 Math_Vec3f_StepToXZ(Vec3f* start, Vec3f* target, f32 speed); -f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b); -s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b); -s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b); void Actor_ProcessInitChain(Actor* actor, InitChainEntry* ichain); -// void IChain_Apply_u8(u8* actor, InitChainEntry* init); -// void IChain_Apply_s8(u8* actor, InitChainEntry* init); -// void IChain_Apply_u16(u8* actor, InitChainEntry* init); -// void IChain_Apply_s16(u8* actor, InitChainEntry* init); -// void IChain_Apply_u32(u8* actor, InitChainEntry* init); -// void IChain_Apply_s32(u8* actor, InitChainEntry* init); -// void IChain_Apply_f32(u8* actor, InitChainEntry* init); -// void IChain_Apply_f32div1000(u8* actor, InitChainEntry* init); -// void IChain_Apply_Vec3f(u8* actor, InitChainEntry* init); -// void IChain_Apply_Vec3fdiv1000(u8* actor, InitChainEntry* init); -// void IChain_Apply_Vec3s(u8* actor, InitChainEntry* init); -f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep); -void Math_ApproachF(f32* pValue, f32 target, f32 scale, f32 maxStep); -void Math_ApproachZeroF(f32* pValue, f32 scale, f32 maxStep); -s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep); -void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 maxStep); void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src); void func_801000A4(u16 sfxId); void func_801000CC(u16 sfxId); void Lib_PlaySfxAtPos(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); -f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed); void Lib_Nop801004FC(void); void* Lib_SegmentedToVirtual(void* ptr); void* Lib_SegmentedToVirtualNull(void* ptr); @@ -2056,13 +1970,7 @@ void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_DrawRegionLockErrorMessage(void); void Check_ExpansionPak(void); void Check_RegionIsSupported(void); -f32 func_80179300(f32 n); -f32 func_80179400(s32 n); -f32 pow_int(f32 base, s32 exp); -f32 sin_rad(f32 rad); -f32 cos_rad(f32 rad); -f32 Rand_ZeroFloat(f32 scale); -f32 randPlusMinusPoint5Scaled(f32 scale); + f32 Math3D_Normalize(Vec3f* vec); s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB, Vec3f* closestPoint); s32 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6); @@ -2158,11 +2066,6 @@ s32 Math3D_YZInSphere(Sphere16* sphere, f32 y, f32 z); // void func_8017FB1C(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, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); // void func_8017FD44(void); -s16 Math_Atan2S(f32 y, f32 x); -f32 Math_Atan2F(f32 y, f32 x); -s16 Math_Atan2S_XY(f32 x, f32 y); -f32 Math_Atan2F_XY(f32 x, f32 y); - u64* SysUcode_GetUCodeBoot(void); size_t SysUcode_GetUCodeBootSize(void); u64* SysUcode_GetUCode(void); diff --git a/include/variables.h b/include/variables.h index e264a7d9b..fef772123 100644 --- a/include/variables.h +++ b/include/variables.h @@ -755,7 +755,6 @@ extern s32 gScreenWidth; extern s32 gScreenHeight; extern u32 startHeapSize; extern UNK_PTR D_801D1540; -// extern f32 sFactorialTbl[13]; extern Vec3f gZeroVec3f; extern Vec3s gZeroVec3s; diff --git a/include/z64math.h b/include/z64math.h index cd5c1db20..a86cf9a20 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -168,4 +168,75 @@ typedef enum { #define SQXYZ(vec) ((vec.x) * (vec.x) + (vec.y) * (vec.y) + (vec.z) * (vec.z)) #define DOTXYZ(vec1, vec2) ((vec1.x) * (vec2.x) + (vec1.y) * (vec2.y) + (vec1.z) * (vec2.z)) +f32 Math_CosS(s16 angle); +f32 Math_SinS(s16 angle); +s32 Math_StepToIImpl(s32 start, s32 target, s32 step); +void Math_StepToIGet(s32* pValue, s32 target, s32 step); +s32 Math_StepToI(s32* pValue, s32 target, s32 step); +s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step); +s32 Math_StepToS(s16* pValue, s16 target, s16 step); +s32 Math_StepToC(s8* pValue, s8 target, s8 step); +s32 Math_StepToF(f32* pValue, f32 target, f32 step); +s32 Math_StepUntilAngleS(s16* pValue, s16 target, s16 step); +s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step); +s32 Math_AsymStepToS(s16* pValue, s16 target, s16 incrStep, s16 decrStep); +s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step); +s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep); +s16 Rand_S16Offset(s16 base, s16 range); +s16 Rand_S16OffsetStride(s16 base, s16 stride, s16 range); +void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src); +void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src); +void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src); +void Math_Vec3f_ToVec3s(Vec3s* dest, Vec3f* src); +void Math_Vec3f_Sum(Vec3f* l, Vec3f* r, Vec3f* dest); +void Math_Vec3f_Diff(Vec3f* l, Vec3f* r, Vec3f* dest); +void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* l, Vec3s* r); +void Math_Vec3f_Scale(Vec3f* vec, f32 scale); +void Math_Vec3f_ScaleAndStore(Vec3f* vec, f32 scale, Vec3f* dest); +void Math_Vec3f_Lerp(Vec3f* a, Vec3f* b, f32 t, Vec3f* dest); +void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); +void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest); +void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); +f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b); +f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest); +f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b); +f32 Math_Vec3f_DistXZAndStore(Vec3f* a, Vec3f* b, f32* dx, f32* dz); +f32 Math_Vec3f_StepToXZ(Vec3f* start, Vec3f* target, f32 speed); +f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b); +s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b); +s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b); +f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep); +void Math_ApproachF(f32* pValue, f32 target, f32 scale, f32 maxStep); +void Math_ApproachZeroF(f32* pValue, f32 scale, f32 maxStep); +s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep); +void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 maxStep); +f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed); + +f32 Math_FactorialF(f32 n); +f32 Math_Factorial(s32 n); +f32 Math_PowF(f32 base, s32 exp); +f32 Math_SinF(f32 rad); +f32 Math_CosF(f32 rad); +f32 Rand_ZeroFloat(f32 scale); +f32 Rand_CenteredFloat(f32 scale); + +f32 Math_FTanF(f32 x); +f32 Math_FFloorF(f32 x); +f32 Math_FCeilF(f32 x); +f32 Math_FRoundF(f32 x); +f32 Math_FTruncF(f32 x); +f32 Math_FNearbyIntF(f32 x); +f32 Math_FAtanTaylorQF(f32 x); +f32 Math_FAtanTaylorF(f32 x); +f32 Math_FAtanContFracF(f32 x); +f32 Math_FAtanF(f32 x); +f32 Math_FAtan2F(f32 y, f32 x); +f32 Math_FAsinF(f32 x); +f32 Math_FAcosF(f32 x); + +s16 Math_Atan2S(f32 y, f32 x); +f32 Math_Atan2F(f32 y, f32 x); +s16 Math_Atan2S_XY(f32 x, f32 y); +f32 Math_Atan2F_XY(f32 x, f32 y); + #endif diff --git a/src/boot_O2/boot_80086760.c b/src/boot_O2/boot_80086760.c index 398a1e41a..cb77bed50 100644 --- a/src/boot_O2/boot_80086760.c +++ b/src/boot_O2/boot_80086760.c @@ -5,57 +5,44 @@ #include "global.h" #include "fixed_point.h" -extern f32 func_80086C70(f32 x); -extern f32 func_80086CA8(f32 x); -extern f32 func_80086D50(f32 x); -extern f32 func_80086CE0(f32 x); -extern f32 func_80086D18(f32 x); - s32 gUseAtanContFrac; /** * Tangent function computed using libultra sinf and cosf */ -// Math_FTanF -f32 func_80086760(f32 x) { +f32 Math_FTanF(f32 x) { return sinf(x) / cosf(x); } // Unused -// Math_FFloorF -f32 func_80086794(f32 x) { - return func_80086C70(x); +f32 Math_FFloorF(f32 x) { + return floorf(x); } // Unused -// Math_FCeilF -f32 func_800867B4(f32 x) { - return func_80086CA8(x); +f32 Math_FCeilF(f32 x) { + return ceilf(x); } // Unused -// Math_FRoundF -f32 func_800867D4(f32 x) { - return func_80086D50(x); +f32 Math_FRoundF(f32 x) { + return roundf(x); } // Unused -// Math_FTruncF -f32 func_800867F4(f32 x) { - return func_80086CE0(x); +f32 Math_FTruncF(f32 x) { + return truncf(x); } -// Math_FNearbyIntF -f32 func_80086814(f32 x) { - return func_80086D18(x); +f32 Math_FNearbyIntF(f32 x) { + return nearbyintf(x); } /** * Arctangent approximation using a Maclaurin series [https://mathworld.wolfram.com/MaclaurinSeries.html] * (one quadrant, i.e. |x| < 1) */ -// Math_FAtanTaylorQF -f32 func_80086834(f32 x) { +f32 Math_FAtanTaylorQF(f32 x) { // Coefficients of Maclaurin series of arctangent static const f32 coeffs[] = { -1.0f / 3, +1.0f / 5, -1.0f / 7, +1.0f / 9, -1.0f / 11, +1.0f / 13, -1.0f / 15, +1.0f / 17, 0.0f, @@ -84,10 +71,9 @@ f32 func_80086834(f32 x) { * Extends previous arctangent function to the rest of the real numbers. * Uses the formulae arctan(x) = pi/2 - arctan(1/x) * and arctan(x) = pi/4 - arctan( (1-x)/(1+x) ) - * to extend the range in which the series computed by func_80086834 is a good approximation + * to extend the range in which the series computed by Math_FAtanTaylorQF is a good approximation */ -// Math_FAtanTaylorF -f32 func_80086880(f32 x) { +f32 Math_FAtanTaylorF(f32 x) { f32 t; f32 q; @@ -102,13 +88,13 @@ f32 func_80086880(f32 x) { } if (t <= M_SQRT2 - 1.0f) { - return func_80086834(x); + return Math_FAtanTaylorQF(x); } if (t >= M_SQRT2 + 1.0f) { - q = M_PI / 2 - func_80086834(1.0f / t); + q = M_PI / 2 - Math_FAtanTaylorQF(1.0f / t); } else { // in the interval (\sqrt{2} - 1, \sqrt{2} + 1) - q = M_PI / 4 - func_80086834((1.0f - t) / (1.0f + t)); + q = M_PI / 4 - Math_FAtanTaylorQF((1.0f - t) / (1.0f + t)); } if (x > 0.0f) { @@ -123,8 +109,7 @@ f32 func_80086880(f32 x) { * Cf. https://en.wikipedia.org/wiki/Gauss%27s_continued_fraction#The_series_2F1_2 , * https://dlmf.nist.gov/4.25#E4 */ -// Math_FAtanContFracF -f32 func_800869A4(f32 x) { +f32 Math_FAtanContFracF(f32 x) { s32 sector; f32 z; f32 conv; @@ -162,24 +147,22 @@ f32 func_800869A4(f32 x) { } } -// Math_FAtanF /** * Single-argument arctangent, only used by the two-argument function. * Nothing else sets the bss variable gUseAtanContFrac, so the Maclaurin series is always used */ -f32 func_80086AF0(f32 x) { +f32 Math_FAtanF(f32 x) { if (!gUseAtanContFrac) { - return func_80086880(x); + return Math_FAtanTaylorF(x); } else { - return func_800869A4(x); + return Math_FAtanContFracF(x); } } -// Math_FAtan2F /** * Main two-argument arctangent function */ -f32 func_80086B30(f32 y, f32 x) { +f32 Math_FAtan2F(f32 y, f32 x) { if (x == 0.0f) { if (y == 0.0f) { return 0.0f; @@ -191,20 +174,18 @@ f32 func_80086B30(f32 y, f32 x) { return qNaN0x10000; } } else if (x >= 0.0f) { - return func_80086AF0(y / x); + return Math_FAtanF(y / x); } else if (y < 0.0f) { - return func_80086AF0(y / x) - M_PI; + return Math_FAtanF(y / x) - M_PI; } else { - return M_PI - func_80086AF0(-(y / x)); + return M_PI - Math_FAtanF(-(y / x)); } } -// Math_FAsinF -f32 func_80086C18(f32 x) { - return func_80086B30(x, sqrtf(1.0f - SQ(x))); +f32 Math_FAsinF(f32 x) { + return Math_FAtan2F(x, sqrtf(1.0f - SQ(x))); } -// Math_FAcosF -f32 func_80086C48(f32 x) { - return M_PI / 2 - func_80086C18(x); +f32 Math_FAcosF(f32 x) { + return M_PI / 2 - Math_FAsinF(x); } diff --git a/src/code/sys_math.c b/src/code/sys_math.c index 7fd7e9dea..99d13c332 100644 --- a/src/code/sys_math.c +++ b/src/code/sys_math.c @@ -4,15 +4,17 @@ */ #include "global.h" -static f32 sFactorialTbl[] = { 1.0f, 1.0f, 2.0f, 6.0f, 24.0f, 120.0f, 720.0f, - 5040.0f, 40320.0f, 362880.0f, 3628800.0f, 39916800.0f, 479001600.0f }; +static f32 sFactorialTbl[] = { + 1.0f, 1.0f, 2.0f, 6.0f, 24.0f, 120.0f, 720.0f, 5040.0f, 40320.0f, 362880.0f, 3628800.0f, 39916800.0f, 479001600.0f, +}; -// Rename to Math_FactorialF /** * Takes a float, returns the factorial of it(s trunctation), iteratively * Unused + * + * @remark original name: "ffact" */ -f32 func_80179300(f32 n) { +f32 Math_FactorialF(f32 n) { f32 ret = 1.0f; s32 i; @@ -23,12 +25,13 @@ f32 func_80179300(f32 n) { return ret; } -// Rename to Math_Factorial /** * Takes an int and returns its factorial as a float. Uses the lookup table for n <= 12. * Unused + * + * @remark original name: "ifact" */ -f32 func_80179400(s32 n) { +f32 Math_Factorial(s32 n) { f32 ret; s32 i; @@ -45,12 +48,13 @@ f32 func_80179400(s32 n) { return ret; } -// Rename to Math_PowF /** * Returns base^{exp} if exp is nonnegative and 1.0f otherwise. * Unused + * + * @remark original name: "powi" */ -f32 pow_int(f32 base, s32 exp) { +f32 Math_PowF(f32 base, s32 exp) { f32 ret = 1.0f; while (exp > 0) { @@ -61,19 +65,21 @@ f32 pow_int(f32 base, s32 exp) { return ret; } -// Rename to Math_SinF /** * Takes an angle in radians and returns the sine. + * + * @remark original name: "sinf_table" */ -f32 sin_rad(f32 rad) { +f32 Math_SinF(f32 rad) { return sins(RAD_TO_BINANG(rad)) * SHT_MINV; } -// Rename to Math_CosF /** * Takes an angle in radians and returns the cosine. + * + * @remark original name: "cosf_table" */ -f32 cos_rad(f32 rad) { +f32 Math_CosF(f32 rad) { return coss(RAD_TO_BINANG(rad)) * SHT_MINV; } @@ -84,10 +90,9 @@ f32 Rand_ZeroFloat(f32 scale) { return Rand_ZeroOne() * scale; } -// Rename to Rand_CenteredFloat /** * Returns a pseudo-random floating-point number between (- scale / 2) and (scale / 2). Originally in z_actor in OoT. */ -f32 randPlusMinusPoint5Scaled(f32 scale) { +f32 Rand_CenteredFloat(f32 scale) { return Rand_Centered() * scale; } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 82ff8ddd9..e7bc92a26 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3567,8 +3567,8 @@ void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 r accel.y += (Rand_ZeroOne() - 0.5f) * 0.2f; for (i = countMinusOne; i >= 0; i--) { - pos.x = (sin_rad(angle) * radius) + posXZ->x; - pos.z = (cos_rad(angle) * radius) + posXZ->z; + pos.x = (Math_SinF(angle) * radius) + posXZ->x; + pos.z = (Math_CosF(angle) * radius) + posXZ->z; accel.x = (Rand_ZeroOne() - 0.5f) * randAccelWeight; accel.z = (Rand_ZeroOne() - 0.5f) * randAccelWeight; @@ -4816,7 +4816,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // Apply and draw a light orb over each limb of frozen actor for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { - Matrix_RotateZF(randPlusMinusPoint5Scaled(2 * M_PI), MTXMODE_APPLY); + Matrix_RotateZF(Rand_CenteredFloat(2 * M_PI), MTXMODE_APPLY); currentMatrix->mf[3][0] = limbPos->x; currentMatrix->mf[3][1] = limbPos->y; currentMatrix->mf[3][2] = limbPos->z; @@ -4857,9 +4857,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // first electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x; - currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y; - currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z; + currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x; + currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y; + currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4869,9 +4869,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // second electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x; - currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y; - currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z; + currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x; + currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y; + currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index e30dec5d5..a263d4393 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fixed_point.h" #include "vt.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" @@ -3047,7 +3048,7 @@ void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s3 newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z); } - newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA)); + newPoly->dist = nearbyint(-DOTXYZ(newNormal, vtxA)); if (newNormal.y > 0.5f) { s16 polyId = *polyStartIndex + i; diff --git a/src/code/z_camera.c b/src/code/z_camera.c index bd23308c3..ce09f7c4d 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -875,7 +875,7 @@ void func_800CC938(Camera* camera) { * Calculates the angle between points `from` and `to` */ s16 Camera_CalcXZAngle(Vec3f* to, Vec3f* from) { - return CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(from->x - to->x, from->z - to->z))); + return CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(from->x - to->x, from->z - to->z))); } // BSS @@ -964,8 +964,8 @@ s16 Camera_GetPitchAdjFromFloorHeightDiffs(Camera* camera, s16 viewYaw, s16 shou floorYDiffNear = (sFloorYNear - camera->focalActorFloorHeight) * 0.8f; floorYDiffFar = (sFloorYFar - camera->focalActorFloorHeight) * (20.0f * 0.01f); - pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffNear, nearDist))); - pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffFar, farDist))); + pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(floorYDiffNear, nearDist))); + pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(floorYDiffFar, farDist))); return pitchNear + pitchFar; } @@ -1457,9 +1457,8 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32 xzOf deltaY = focalActorPosRot->pos.y - *focalActorPosY; eyeAtDistXZ = OLib_Vec3fDistXZ(at, &camera->eye); - // Math_FTanF // Get the height based on 80% of the fov - fovHeight = func_80086760(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ; + fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ; if (deltaY > fovHeight) { //! FAKE @@ -1539,8 +1538,8 @@ s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targ deltaY = focalActorPosRot->pos.y - *yPosOffset; sp50 = OLib_Vec3fDistXZ(at, &camera->eye); phi_f16 = sp50; - func_80086B30(deltaY, sp50); - fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16; + Math_FAtan2F(deltaY, sp50); + fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16; if (fovHeight < deltaY) { *yPosOffset += deltaY - fovHeight; @@ -1552,12 +1551,12 @@ s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targ focalActorAtOffsetTarget.y -= deltaY; } else { deltaY = focalActorPosRot->pos.y - *yPosOffset; - temp_f0_6 = func_80086B30(deltaY, OLib_Vec3fDistXZ(at, &camera->eye)); + temp_f0_6 = Math_FAtan2F(deltaY, OLib_Vec3fDistXZ(at, &camera->eye)); if (temp_f0_6 > 0.34906584f) { // (M_PI / 9) - phi_f16 = 1.0f - sin_rad(temp_f0_6 - 0.34906584f); + phi_f16 = 1.0f - Math_SinF(temp_f0_6 - 0.34906584f); } else if (temp_f0_6 < -0.17453292f) { // (M_PI / 18) - phi_f16 = 1.0f - sin_rad(-0.17453292f - temp_f0_6); + phi_f16 = 1.0f - Math_SinF(-0.17453292f - temp_f0_6); } else { phi_f16 = 1.0f; } @@ -1625,10 +1624,10 @@ s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset new_var2 = *arg1; sp4C = new_var2; deltaY = focalActorPosRot->pos.y - *arg6; - temp_f0_3 = func_80086B30(deltaY, sp4C); + temp_f0_3 = Math_FAtan2F(deltaY, sp4C); if (!(flags & 0x80)) { - fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C; + fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C; if (fovHeight < deltaY) { *arg6 += deltaY - fovHeight; @@ -1641,9 +1640,9 @@ s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset focalActorAtOffsetTarget.y -= deltaY; } else { if (temp_f0_3 > 0.34906584f) { // (M_PI / 9) - phi_f14 = 1.0f - sin_rad(temp_f0_3 - 0.34906584f); + phi_f14 = 1.0f - Math_SinF(temp_f0_3 - 0.34906584f); } else if (temp_f0_3 < -0.17453292f) { // (M_PI / 18) - phi_f14 = 1.0f - sin_rad(-0.17453292f - temp_f0_3); + phi_f14 = 1.0f - Math_SinF(-0.17453292f - temp_f0_3); } else { phi_f14 = 1.0f; } @@ -6343,8 +6342,8 @@ s32 Camera_Demo4(Camera* camera) { // Camera fixed on human player as the mask moves from the pocket to the face // Camera rolls left and right if (rwData->timer >= 12) { - rwData->unk_0C = (rwData->timer - 12) * 10.384615f; - sin = sin_rad(DEG_TO_RAD(rwData->unk_0C)); + rwData->unk_0C = (rwData->timer - 12) * (135.0f / 13.0f); + sin = Math_SinF(DEG_TO_RAD(rwData->unk_0C)); rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin; if (rwData->timer == 12) { Distortion_Request(DISTORTION_TYPE_MASK_TRANSFORM_1); @@ -6516,7 +6515,7 @@ s32 Camera_Demo5(Camera* camera) { // Camera zooms out while rolling back and forth rwData->unk_0C = rwData->timer * (180.0f / 23.0f); sp58 = DEG_TO_RAD(rwData->unk_0C); - sin = sin_rad(sp58); + sin = Math_SinF(sp58); rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin; new_var = (46 - rwData->timer) * (5.0f / 46.0f); focalActorFocus.pos.x = (Math_SinS(rwData->unk_24) * new_var * rwData->unk_0C) + focalActorPosRot->pos.x; diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 370ca9481..775db80e1 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -561,16 +561,16 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem vtx[0].v = baseVtx; vtx[1].v = baseVtx; - vtx[0].v.ob[0] = func_80086814(sp158.x); - vtx[0].v.ob[1] = func_80086814(sp158.y); - vtx[0].v.ob[2] = func_80086814(sp158.z); + vtx[0].v.ob[0] = Math_FNearbyIntF(sp158.x); + vtx[0].v.ob[1] = Math_FNearbyIntF(sp158.y); + vtx[0].v.ob[2] = Math_FNearbyIntF(sp158.z); vtx[0].v.cn[0] = sp148.r; vtx[0].v.cn[1] = sp148.g; vtx[0].v.cn[2] = sp148.b; vtx[0].v.cn[3] = sp148.a; - vtx[1].v.ob[0] = func_80086814(sp14C.x); - vtx[1].v.ob[1] = func_80086814(sp14C.y); - vtx[1].v.ob[2] = func_80086814(sp14C.z); + vtx[1].v.ob[0] = Math_FNearbyIntF(sp14C.x); + vtx[1].v.ob[1] = Math_FNearbyIntF(sp14C.y); + vtx[1].v.ob[2] = Math_FNearbyIntF(sp14C.z); vtx[1].v.cn[0] = sp144.r; vtx[1].v.cn[1] = sp144.g; vtx[1].v.cn[2] = sp144.b; @@ -606,17 +606,17 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem vtx[j1].v = baseVtx; vtx[j2].v = baseVtx; - vtx[j1].v.ob[0] = func_80086814(sp158.x); - vtx[j1].v.ob[1] = func_80086814(sp158.y); - vtx[j1].v.ob[2] = func_80086814(sp158.z); + vtx[j1].v.ob[0] = Math_FNearbyIntF(sp158.x); + vtx[j1].v.ob[1] = Math_FNearbyIntF(sp158.y); + vtx[j1].v.ob[2] = Math_FNearbyIntF(sp158.z); vtx[j1].v.cn[0] = func_800B0A24(sp1A4.r, sp19C.r, temp_f28); vtx[j1].v.cn[1] = func_800B0A24(sp1A4.g, sp19C.g, temp_f28); vtx[j1].v.cn[2] = func_800B0A24(sp1A4.b, sp19C.b, temp_f28); vtx[j1].v.cn[3] = func_800B0A24(sp1A4.a, sp19C.a, temp_f28); - vtx[j2].v.ob[0] = func_80086814(sp14C.x); - vtx[j2].v.ob[1] = func_80086814(sp14C.y); - vtx[j2].v.ob[2] = func_80086814(sp14C.z); + vtx[j2].v.ob[0] = Math_FNearbyIntF(sp14C.x); + vtx[j2].v.ob[1] = Math_FNearbyIntF(sp14C.y); + vtx[j2].v.ob[2] = Math_FNearbyIntF(sp14C.z); vtx[j2].v.cn[0] = func_800B0A24(sp1A0.r, sp198.r, temp_f28); vtx[j2].v.cn[1] = func_800B0A24(sp1A0.g, sp198.g, temp_f28); vtx[j2].v.cn[2] = func_800B0A24(sp1A0.b, sp198.b, temp_f28); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 7b9e2ca34..886c3c942 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -127,7 +127,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { break; case ITEM00_RECOVERY_HEART: - this->actor.home.rot.z = randPlusMinusPoint5Scaled(0xFFFF); + this->actor.home.rot.z = Rand_CenteredFloat(0xFFFF); shadowOffset = 430.0f; Actor_SetScale(&this->actor, 0.02f); this->unk154 = 0.02f; @@ -381,9 +381,9 @@ void func_800A6650(EnItem00* this, PlayState* play) { } if ((play->gameplayFrames & 1) != 0) { - pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(10.0f); - pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(10.0f); - pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(10.0f); + pos.x = this->actor.world.pos.x + Rand_CenteredFloat(10.0f); + pos.y = this->actor.world.pos.y + Rand_CenteredFloat(10.0f); + pos.z = this->actor.world.pos.z + Rand_CenteredFloat(10.0f); EffectSsKirakira_SpawnSmall(play, &pos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, &sEffectEnvColor); } @@ -956,7 +956,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { } spawnedActor->speed = 2.0f; spawnedActor->gravity = -0.9f; - spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000); + spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000); Actor_SetScale(spawnedActor, 0.0f); ((EnItem00*)spawnedActor)->actionFunc = func_800A6780; ((EnItem00*)spawnedActor)->unk152 = 0xDC; @@ -1011,7 +1011,7 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) { } else { spawnedActor->gravity = -0.9f; } - spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000); + spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000); spawnedActor->flags |= 0x10; } } diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 136918765..f3e67e5f3 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -348,9 +348,9 @@ void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest) { } void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest) { - dest->x = randPlusMinusPoint5Scaled(scale) + orig->x; - dest->y = randPlusMinusPoint5Scaled(scale) + orig->y; - dest->z = randPlusMinusPoint5Scaled(scale) + orig->z; + dest->x = Rand_CenteredFloat(scale) + orig->x; + dest->y = Rand_CenteredFloat(scale) + orig->y; + dest->z = Rand_CenteredFloat(scale) + orig->z; } void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest) { diff --git a/src/code/z_olib.c b/src/code/z_olib.c index 754857014..848a48a72 100644 --- a/src/code/z_olib.c +++ b/src/code/z_olib.c @@ -123,14 +123,14 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) { if ((distXZ == 0.0f) && (vec->y == 0.0f)) { sph.pitch = 0; } else { - sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(distXZ, vec->y))); + sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(distXZ, vec->y))); } sph.r = sqrtf(SQ(vec->y) + distXZSq); if ((vec->x == 0.0f) && (vec->z == 0.0f)) { sph.yaw = 0; } else { - sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(vec->x, vec->z))); + sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(vec->x, vec->z))); } *dest = sph; @@ -202,8 +202,8 @@ Vec3f* OLib_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) { Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b) { Vec3f anglesRad; - anglesRad.x = func_80086B30(b->z - a->z, b->y - a->y); - anglesRad.y = func_80086B30(b->x - a->x, b->z - a->z); + anglesRad.x = Math_FAtan2F(b->z - a->z, b->y - a->y); + anglesRad.y = Math_FAtan2F(b->x - a->x, b->z - a->z); anglesRad.z = 0; *dest = anglesRad; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 2c0a79d21..2e2d2222d 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1540,10 +1540,8 @@ void Player_UpdateBunnyEars(Player* player) { sBunnyEarKinematics.angVel.y += -sBunnyEarKinematics.rot.y >> 2; angle = player->actor.world.rot.y - player->actor.shape.rot.y; - force.x = - (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF; - force.y = - (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF; + force.x = (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (Rand_CenteredFloat(2.0f) + 10.0f)) & 0xFFFF; + force.y = (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (Rand_CenteredFloat(2.0f) + 10.0f)) & 0xFFFF; sBunnyEarKinematics.angVel.x += force.x >> 2; sBunnyEarKinematics.angVel.y += force.y >> 2; @@ -1801,7 +1799,7 @@ void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnim temp_f20 = sp74 - SQ(sp58); temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20); - sp4C = func_80086B30(temp_f20, sp58); + sp4C = Math_FAtan2F(temp_f20, sp58); distance = sqrtf(SQ(diffX) + SQ(yIntersect - sp90.y) + SQ(diffZ)); sp58 = (SQ(distance) + sp70) / (2.0f * distance); sp54 = distance - sp58; @@ -1809,8 +1807,8 @@ void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnim temp_f20 = sp74 - SQ(sp58); temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20); - sp48 = func_80086B30(temp_f20, sp58); - phi_t1 = (M_PI - (func_80086B30(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI); + sp48 = Math_FAtan2F(temp_f20, sp58); + phi_t1 = (M_PI - (Math_FAtan2F(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI); phi_t1 = -skelAnime->jointTable[shinLimbIndex].z + phi_t1; temp_f8 = (sp48 - sp4C) * (0x8000 / M_PI); diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 35886da18..90d09a4b1 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -577,7 +577,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) { diffZ = points[index + 1].z - points[index - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((px * actor->world.pos.x) + (pz * actor->world.pos.z) + d) > 0.0f) { reached = true; } diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c index 2c9919728..f47bf4394 100644 --- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c +++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c @@ -64,10 +64,11 @@ void func_808D75F0(BgF40Flift* this, PlayState* play) { } this->timer--; if (this->dyna.actor.params == 1) { - this->dyna.actor.world.pos.y = (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f) + this->dyna.actor.home.pos.y; + this->dyna.actor.world.pos.y = + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f) + this->dyna.actor.home.pos.y; } else { this->dyna.actor.world.pos.y = - (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f) + (926.8f + this->dyna.actor.home.pos.y); + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f) + (926.8f + this->dyna.actor.home.pos.y); } } } @@ -76,7 +77,7 @@ void func_808D7714(BgF40Flift* this, PlayState* play) { if (this->timer != 0) { this->timer--; this->dyna.actor.world.pos.y = - (((cos_rad(this->timer * (M_PI / 96.0f)) * this->dyna.actor.params) + 1.0f) * 463.4f) + + (((Math_CosF(this->timer * (M_PI / 96.0f)) * this->dyna.actor.params) + 1.0f) * 463.4f) + this->dyna.actor.home.pos.y; } else { this->dyna.actor.params = -this->dyna.actor.params; 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 bf6244efe..039d20f3c 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 @@ -105,7 +105,7 @@ void BgF40Swlift_Update(Actor* thisx, PlayState* play2) { } this->timer--; this->dyna.actor.world.pos.y = - sHeights[this->dyna.actor.params] + (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f); + sHeights[this->dyna.actor.params] + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f); } } diff --git a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c index 15a677c29..50e99c1aa 100644 --- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c +++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c @@ -96,8 +96,8 @@ void BgIcefloe_Grow(BgIcefloe* this, PlayState* play) { Vec3f velocity; Vec3f position; - velocity.x = randPlusMinusPoint5Scaled(6.0f); - velocity.z = randPlusMinusPoint5Scaled(6.0f); + velocity.x = Rand_CenteredFloat(6.0f); + velocity.z = Rand_CenteredFloat(6.0f); velocity.y = Rand_ZeroFloat(4.0f) + 4.0f; this->dyna.actor.scale.x += (0.65f * 0.01f); this->dyna.actor.scale.z += (0.65f * 0.01f); @@ -127,7 +127,7 @@ void func_80AC4C34(BgIcefloe* this, PlayState* play) { func_80AC4CF0(this); } else { this->dyna.actor.world.pos.y = - (sin_rad(this->timer * (M_PI / 30.0f)) * 3.0f) + (this->dyna.actor.home.pos.y + 10.0f); + (Math_SinF(this->timer * (M_PI / 30.0f)) * 3.0f) + (this->dyna.actor.home.pos.y + 10.0f); } } @@ -144,8 +144,8 @@ void func_80AC4D2C(BgIcefloe* this, PlayState* play) { Vec3f position; velocity.y = (this->timer - 38) * (1 / 12.0f); - velocity.x = randPlusMinusPoint5Scaled(1.5f) * velocity.y; - velocity.z = randPlusMinusPoint5Scaled(1.5f) * velocity.y; + velocity.x = Rand_CenteredFloat(1.5f) * velocity.y; + velocity.z = Rand_CenteredFloat(1.5f) * velocity.y; velocity.y += 0.8f; position.x = this->dyna.actor.world.pos.x + (2.0f * velocity.x); position.z = this->dyna.actor.world.pos.z + (2.0f * velocity.z); 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 740d807d8..a8eea2641 100644 --- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c +++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c @@ -109,12 +109,12 @@ void BgIcicle_Break(BgIcicle* this, PlayState* play, f32 arg2) { for (i = 0; i < 2; i++) { for (j = 0; j < 10; j++) { - pos.x = this->dyna.actor.world.pos.x + randPlusMinusPoint5Scaled(8.0f); + pos.x = this->dyna.actor.world.pos.x + Rand_CenteredFloat(8.0f); pos.y = this->dyna.actor.world.pos.y + (Rand_ZeroOne() * arg2) + (i * arg2); - pos.z = this->dyna.actor.world.pos.z + randPlusMinusPoint5Scaled(8.0f); + pos.z = this->dyna.actor.world.pos.z + Rand_CenteredFloat(8.0f); - velocity.x = randPlusMinusPoint5Scaled(7.0f); - velocity.z = randPlusMinusPoint5Scaled(7.0f); + velocity.x = Rand_CenteredFloat(7.0f); + velocity.z = Rand_CenteredFloat(7.0f); velocity.y = (Rand_ZeroOne() * 4.0f) + 8.0f; EffectSsEnIce_Spawn(play, &pos, (Rand_ZeroOne() * 0.2f) + 0.1f, &velocity, &accel, &primColor, &envColor, 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 fa80cbf90..c11df8af1 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -240,7 +240,7 @@ void func_809CE234(BgSpdweb* this, PlayState* play) { spA8.y = this->dyna.actor.world.pos.y; for (i = 0; i < 6; i++) { - temp_s0 = (s32)randPlusMinusPoint5Scaled(10240.0f) + phi_s2; + temp_s0 = (s32)Rand_CenteredFloat(0x2800) + phi_s2; temp_f24 = Math_SinS(temp_s0); temp_f22 = Math_CosS(temp_s0); @@ -323,7 +323,8 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { this->unk_162--; } - this->dyna.actor.world.pos.y = (sin_rad(this->unk_162 * (M_PI / 6)) * this->unk_164) + this->dyna.actor.home.pos.y; + this->dyna.actor.world.pos.y = + (Math_SinF(this->unk_162 * (M_PI / 6)) * this->unk_164) + this->dyna.actor.home.pos.y; Math_ApproachZeroF(&this->unk_164, 1.0f, 0.8f); if (this->unk_162 == 4) { @@ -388,7 +389,7 @@ void func_809CE830(BgSpdweb* this, PlayState* play) { spC4.z = this->dyna.actor.world.pos.z + 90.0f * sinQ * cosF1; for (i = 0; i < 6; i++) { - temp_s0 = (s32)randPlusMinusPoint5Scaled(0x2800) + temp_s3; + temp_s0 = (s32)Rand_CenteredFloat(0x2800) + temp_s3; sinF2 = Math_SinS(temp_s0); cosF2 = Math_CosS(temp_s0); 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 7220b5d06..5b19594fb 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -485,9 +485,9 @@ void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) { if (effects->type == TWINMOLD_EFFECT_NONE) { effects->type = TWINMOLD_EFFECT_SAND; effects->pos = *pos; - effects->velocity.x = randPlusMinusPoint5Scaled(30.0f); + effects->velocity.x = Rand_CenteredFloat(30.0f); effects->velocity.y = Rand_ZeroFloat(7.0f) + 7.0f; - effects->velocity.z = randPlusMinusPoint5Scaled(30.0f); + effects->velocity.z = Rand_CenteredFloat(30.0f); effects->accel.y = -0.3f; effects->scale = scale; effects->alpha = 255; @@ -507,9 +507,9 @@ void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) { effects->type = TWINMOLD_EFFECT_FRAGMENT; effects->pos = *pos; effects->timer = Rand_ZeroFloat(20.0f); - effects->velocity.x = randPlusMinusPoint5Scaled(50.0f); - effects->velocity.y = randPlusMinusPoint5Scaled(50.0f); - effects->velocity.z = randPlusMinusPoint5Scaled(50.0f); + effects->velocity.x = Rand_CenteredFloat(50.0f); + effects->velocity.y = Rand_CenteredFloat(50.0f); + effects->velocity.z = Rand_CenteredFloat(50.0f); effects->accel.z = 0.0f; effects->accel.x = 0.0f; effects->accel.y = -1.5f; @@ -774,8 +774,8 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->actor.world.pos.z = player->actor.world.pos.z; this->actor.world.pos.y = player->actor.world.pos.y - (600.0f * D_809DF5B0); } else { - this->actor.world.pos.x = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0); - this->actor.world.pos.z = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0); + this->actor.world.pos.x = Rand_CenteredFloat(5000.0f * D_809DF5B0); + this->actor.world.pos.z = Rand_CenteredFloat(5000.0f * D_809DF5B0); this->actor.world.pos.y = -500.0f * D_809DF5B0; if (sIsInGiantMode) { this->actor.world.pos.y += 3150.0f; @@ -802,8 +802,8 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_0146[0] = 150; } else { this->unk_0144 = 2; - this->unk_01B0.x = randPlusMinusPoint5Scaled(3000.0f * D_809DF5B0); - this->unk_01B0.z = randPlusMinusPoint5Scaled(3000.0f * D_809DF5B0); + this->unk_01B0.x = Rand_CenteredFloat(3000.0f * D_809DF5B0); + this->unk_01B0.z = Rand_CenteredFloat(3000.0f * D_809DF5B0); if ((fabsf(this->unk_01B0.x) < (500.0f * D_809DF5B0)) && (fabsf(this->unk_01B0.z) < (500.0f * D_809DF5B0))) { this->unk_01B0.x = 500.0f; @@ -847,12 +847,12 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_01B0.z = player->actor.world.pos.z; if (this->unk_0146[0] == 0) { this->unk_0144 = 3; - this->unk_01B0.x = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.x; + this->unk_01B0.x = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.x; this->unk_01B0.y = -3000.0f * D_809DF5B0; if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } - this->unk_01B0.z = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.z; + this->unk_01B0.z = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.z; this->unk_0146[0] = 150; this->unk_0164 = 0.0f; } @@ -917,7 +917,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { Matrix_MultVecZ(1500.0f * D_809DF5B0, &spA4); this->unk_0146[0] = 50; this->unk_01B0.x = player->actor.world.pos.x + spA4.x; - this->unk_01B0.y = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0); + this->unk_01B0.y = Rand_CenteredFloat(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0); if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } @@ -963,7 +963,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->actor.gravity = -1.0f * D_809DF5B0; this->actor.velocity.y = 0.0f; this->actor.terminalVelocity = -1000.0f * D_809DF5B0; - this->unk_0164 = randPlusMinusPoint5Scaled(0.05f); + this->unk_0164 = Rand_CenteredFloat(0.05f); spCC = player->actor.world.pos.x - this->actor.world.pos.x; spC4 = player->actor.world.pos.z - this->actor.world.pos.z; @@ -1205,16 +1205,16 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_SAND_OLD - SFX_FLAG); if (this->unk_0144 > 20) { - sp3C.x = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.x; - sp3C.y = randPlusMinusPoint5Scaled(50.0f * D_809DF5B0) + this->unk_0170.y; - sp3C.z = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.z; + sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x; + sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y; + sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z; Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f); } if ((this->unk_014C % 2) == 0) { - sp3C.x = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.x; - sp3C.y = randPlusMinusPoint5Scaled(50.0f * D_809DF5B0) + this->unk_0170.y; - sp3C.z = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.z; + sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x; + sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y; + sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z; Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f); } } 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 ddd9d4830..d44c961e9 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -162,8 +162,8 @@ void Boss03_SpawnEffectDroplet(PlayState* play, Vec3f* pos) { eff->unk_34.y = 0.0f; eff->unk_34.z = Rand_ZeroFloat(2 * M_PI); eff->unk_02 = Rand_ZeroFloat(100.0f); - eff->velocity.x = randPlusMinusPoint5Scaled(25.0f); - eff->velocity.z = randPlusMinusPoint5Scaled(25.0f); + eff->velocity.x = Rand_CenteredFloat(25.0f); + eff->velocity.z = Rand_CenteredFloat(25.0f); return; } @@ -425,17 +425,17 @@ void Boss03_SpawnDust(Boss03* this, PlayState* play) { Vec3f accel; for (i = 0; i < 5; i++) { - velocity.x = randPlusMinusPoint5Scaled(10.0f); + velocity.x = Rand_CenteredFloat(10.0f); velocity.y = Rand_ZeroFloat(2.0f) + 2.0f; - velocity.z = randPlusMinusPoint5Scaled(10.0f); + velocity.z = Rand_CenteredFloat(10.0f); accel.y = -0.075f; accel.z = 0.0f; accel.x = 0.0f; pos.y = Rand_ZeroFloat(20.0f) + 5.0f; - pos.z = randPlusMinusPoint5Scaled(150.0f) + this->insideJawPos.z; - pos.x = randPlusMinusPoint5Scaled(150.0f) + this->insideJawPos.x; + pos.z = Rand_CenteredFloat(150.0f) + this->insideJawPos.z; + pos.x = Rand_CenteredFloat(150.0f) + this->insideJawPos.x; func_800B0EB0(play, &pos, &velocity, &accel, &sGyorgDustPrimColor, &sGyorgDustEnvColor, Rand_ZeroFloat(200.0f) + 400.0f, 10, Rand_ZeroFloat(10.0f) + 25.0f); @@ -597,9 +597,9 @@ void func_809E34B8(Boss03* this, PlayState* play) { if (this->workTimer[WORK_TIMER_UNK2_A] == 0) { if ((sqrtf(SQ(xDiff) + SQ(zDiff)) < 100.0f) || (this->workTimer[WORK_TIMER_UNK0_A] == 0)) { for (i = 0; i < 200; i++) { - this->unk_268.x = randPlusMinusPoint5Scaled(2500.0f); + this->unk_268.x = Rand_CenteredFloat(2500.0f); this->unk_268.y = Rand_ZeroFloat(100.0f) + 150.0f; - this->unk_268.z = randPlusMinusPoint5Scaled(2500.0f); + this->unk_268.z = Rand_CenteredFloat(2500.0f); xDiff = this->unk_268.x - this->actor.world.pos.x; zDiff = this->unk_268.z - this->actor.world.pos.z; @@ -1100,9 +1100,9 @@ void Boss03_JumpOverPlatform(Boss03* this, PlayState* play) { Vec3f sp30; for (i = 0; i < 3; i++) { - sp30.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(150.0f); + sp30.x = this->actor.world.pos.x + Rand_CenteredFloat(150.0f); sp30.y = this->actor.world.pos.y; - sp30.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(150.0f); + sp30.z = this->actor.world.pos.z + Rand_CenteredFloat(150.0f); Boss03_SpawnEffectDroplet(play, &sp30); } } @@ -1337,9 +1337,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { if (1) {} for (i = 0; i < 3; i++) { - effectPos.x = randPlusMinusPoint5Scaled(150.0f) + this->actor.world.pos.x; + effectPos.x = Rand_CenteredFloat(150.0f) + this->actor.world.pos.x; effectPos.y = this->actor.world.pos.y; - effectPos.z = randPlusMinusPoint5Scaled(150.0f) + this->actor.world.pos.z; + effectPos.z = Rand_CenteredFloat(150.0f) + this->actor.world.pos.z; Boss03_SpawnEffectDroplet(play, &effectPos); } @@ -1399,9 +1399,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { this->subCamEye = this->actor.world.pos; for (i = 0; i < bubblesToSpawnNum; i++) { - effectPos.x = randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.x; - effectPos.y = (randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.y) - 150.0f; - effectPos.z = randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.z; + effectPos.x = Rand_CenteredFloat(100.0f) + this->subCamAt.x; + effectPos.y = (Rand_CenteredFloat(100.0f) + this->subCamAt.y) - 150.0f; + effectPos.z = Rand_CenteredFloat(100.0f) + this->subCamAt.z; Boss03_SpawnEffectBubble(play, &effectPos); } @@ -1573,17 +1573,15 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { this->actor.speed = ((Rand_ZeroFloat(5.0f) + 2.5f) * sp64) + 2.5f; if (Rand_ZeroOne() < 0.5f) { - this->shapeRotTargetX = - ((s16)randPlusMinusPoint5Scaled(500.0f) + this->shapeRotTargetX) + 0x8000; + this->shapeRotTargetX = ((s16)(s32)Rand_CenteredFloat(0x1F4) + this->shapeRotTargetX) + 0x8000; } if (Rand_ZeroOne() < 0.5f) { - this->shapeRotTargetZ = - ((s16)randPlusMinusPoint5Scaled(500.0f) + this->shapeRotTargetZ) + 0x8000; + this->shapeRotTargetZ = ((s16)(s32)Rand_CenteredFloat(0x1F4) + this->shapeRotTargetZ) + 0x8000; } if (Rand_ZeroOne() < 0.5f) { - this->shapeRotTargetY = Rand_ZeroFloat(65536.0f); + this->shapeRotTargetY = Rand_ZeroFloat(0x10000); } this->actor.world.rot.y = Math_Atan2S_XY(-this->actor.world.pos.z, -this->actor.world.pos.x); @@ -1600,9 +1598,9 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { sp4C = 150.0f * sp64; for (i = 0; i < 1; i++) { - sp78.x = randPlusMinusPoint5Scaled(sp4C) + this->actor.world.pos.x; + sp78.x = Rand_CenteredFloat(sp4C) + this->actor.world.pos.x; sp78.y = this->actor.world.pos.y; - sp78.z = randPlusMinusPoint5Scaled(sp4C) + this->actor.world.pos.z; + sp78.z = Rand_CenteredFloat(sp4C) + this->actor.world.pos.z; Boss03_SpawnEffectDroplet(play, &sp78); } @@ -2073,9 +2071,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { if ((this->unk_240 % 2) == 0) { for (i = 0; i < this->bubbleEffectSpawnCount; i++) { - bubblePos.x = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.x; - bubblePos.y = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.y; - bubblePos.z = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.z; + bubblePos.x = Rand_CenteredFloat(100.0f) + this->actor.world.pos.x; + bubblePos.y = Rand_CenteredFloat(100.0f) + this->actor.world.pos.y; + bubblePos.z = Rand_CenteredFloat(100.0f) + this->actor.world.pos.z; Boss03_SpawnEffectBubble(play, &bubblePos); } @@ -2106,9 +2104,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { if (this->wetSpotEffectSpawnCount != 0) { this->wetSpotEffectSpawnCount--; - wetSpotPos.x = randPlusMinusPoint5Scaled(50.0f) + player->actor.world.pos.x; + wetSpotPos.x = Rand_CenteredFloat(50.0f) + player->actor.world.pos.x; wetSpotPos.y = PLATFORM_HEIGHT; - wetSpotPos.z = randPlusMinusPoint5Scaled(50.0f) + player->actor.world.pos.z; + wetSpotPos.z = Rand_CenteredFloat(50.0f) + player->actor.world.pos.z; Boss03_SpawnEffectWetSpot(play, &wetSpotPos); } } @@ -2131,9 +2129,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { for (j = 0, i = 0; i < 20; j++) { Matrix_RotateYF(yRot, MTXMODE_NEW); Matrix_MultVecZ(Rand_ZeroFloat(60.000004f) + 312.0f, &dropletPos); - dropletPos.x += this->unk_284 + randPlusMinusPoint5Scaled(40.0f); + dropletPos.x += this->unk_284 + Rand_CenteredFloat(40.0f); dropletPos.y = PLATFORM_HEIGHT; - dropletPos.z += this->unk_28C + randPlusMinusPoint5Scaled(40.0f); + dropletPos.z += this->unk_28C + Rand_CenteredFloat(40.0f); if (sqrtf(SQ(dropletPos.x) + SQ(dropletPos.z)) < 355.0f) { Boss03_SpawnEffectDroplet(play, &dropletPos); 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 bf250ca18..4e22822a4 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -439,8 +439,8 @@ void func_809ECD18(Boss04* this, PlayState* play) { if (Rand_ZeroOne() < 0.1f) { Math_Vec3f_Copy(&this->unk_6C8, &player->actor.world.pos); } else { - this->unk_6C8.x = randPlusMinusPoint5Scaled(600.0f) + this->unk_6E8; - this->unk_6C8.z = randPlusMinusPoint5Scaled(600.0f) + this->unk_6F0; + this->unk_6C8.x = Rand_CenteredFloat(600.0f) + this->unk_6E8; + this->unk_6C8.z = Rand_CenteredFloat(600.0f) + this->unk_6F0; } } diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index ef73ef2dd..742b3bb70 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -110,7 +110,7 @@ void EffDust_Destroy(Actor* thisx, PlayState* play) { void func_80918D64(EffDust* this, PlayState* play) { s16 theta; - s16 fi; + s16 phi; s32 i; s32 j; f32* distanceTraveled = this->distanceTraveled; @@ -127,10 +127,10 @@ void func_80918D64(EffDust* this, PlayState* play) { i = this->index & 0x3F; if (this->distanceTraveled[i] >= 1.0f) { // Spherical coordinate system. - fi = randPlusMinusPoint5Scaled(0x10000); + phi = Rand_CenteredFloat(0x10000); theta = Rand_ZeroFloat(0x1000); - this->initialPositions[i].x = -(f32)this->actor.home.rot.z * Math_CosS(fi) * Math_CosS(theta); - this->initialPositions[i].y = -(f32)this->actor.home.rot.z * Math_SinS(fi) * Math_CosS(theta); + this->initialPositions[i].x = -(f32)this->actor.home.rot.z * Math_CosS(phi) * Math_CosS(theta); + this->initialPositions[i].y = -(f32)this->actor.home.rot.z * Math_SinS(phi) * Math_CosS(theta); this->initialPositions[i].z = -(f32)this->actor.home.rot.z * Math_SinS(theta); this->distanceTraveled[i] = 0.0f; this->index++; @@ -141,7 +141,7 @@ void func_80918D64(EffDust* this, PlayState* play) { void func_80918FE4(EffDust* this, PlayState* play) { s16 theta; - s16 fi; + s16 phi; f32* distanceTraveled = this->distanceTraveled; s32 i; s32 j; @@ -157,11 +157,11 @@ void func_80918FE4(EffDust* this, PlayState* play) { i = this->index & 0x3F; if (this->distanceTraveled[i] >= 1.0f) { // Spherical coordinate system. - fi = randPlusMinusPoint5Scaled(0x10000); + phi = Rand_CenteredFloat(0x10000); theta = Rand_ZeroFloat(0x2000); - this->initialPositions[i].x = 400.0f * Math_CosS(fi) * Math_CosS(theta); + this->initialPositions[i].x = 400.0f * Math_CosS(phi) * Math_CosS(theta); this->initialPositions[i].y = 400.0f * Math_SinS(theta); - this->initialPositions[i].z = 400.0f * Math_SinS(fi) * Math_CosS(theta); + this->initialPositions[i].z = 400.0f * Math_SinS(phi) * Math_CosS(theta); this->distanceTraveled[i] = 0.0f; this->index++; } @@ -206,7 +206,7 @@ void func_80919230(EffDust* this, PlayState* play) { i = this->index & 0x3F; if (this->distanceTraveled[i] >= 1.0f) { - theta = randPlusMinusPoint5Scaled(0x10000); + theta = Rand_CenteredFloat(0x10000); switch (this->actor.params) { case EFF_DUST_TYPE_SPIN_ATTACK_CHARGE: this->initialPositions[i].x = (Rand_ZeroOne() * 4500.0f) + 700.0f; 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 5fcf75fdf..6e56cc609 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -179,7 +179,7 @@ s32 func_80BECD10(EnAkindonuts* this, Path* path, s32 arg2) { phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; } 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 b6d32f6ec..7d1f1e140 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -193,9 +193,9 @@ void EnAm_SpawnEffects(EnAm* this, PlayState* play) { // Dust Clouds that spawn from the hop for (i = 4; i > 0; i--) { - effectPos.x = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.x; - effectPos.y = randPlusMinusPoint5Scaled(10.0f) + (this->actor.world.pos.y + 40.0f); - effectPos.z = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.z; + effectPos.x = Rand_CenteredFloat(65.0f) + this->actor.world.pos.x; + effectPos.y = Rand_CenteredFloat(10.0f) + (this->actor.world.pos.y + 40.0f); + effectPos.z = Rand_CenteredFloat(65.0f) + this->actor.world.pos.z; EffectSsKirakira_SpawnSmall(play, &effectPos, &sVelocity, &sAccel, &D_808B1118, &D_808B111C); } Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_WALK); @@ -254,7 +254,7 @@ void EnAm_ApplyEnemyTexture(EnAm* this, PlayState* play) { func_808B0358(this); } else { tempTextureBlend = this->textureBlend + 20; - rand = randPlusMinusPoint5Scaled(10.0f); + rand = Rand_CenteredFloat(10.0f); cos = Math_CosS(this->actor.shape.rot.y) * rand; sin = Math_SinS(this->actor.shape.rot.y) * rand; this->actor.world.pos.x = this->actor.home.pos.x + cos; @@ -433,7 +433,7 @@ void func_808B0894(EnAm* this, PlayState* play) { for (i = 0; i < 8; i++) { dustPos.x = (Math_SinS(0) * 7.0f) + this->actor.world.pos.x; - dustPos.y = (randPlusMinusPoint5Scaled(10.0f) * 6.0f) + (this->actor.world.pos.y + 40.0f); + dustPos.y = (Rand_CenteredFloat(10.0f) * 6.0f) + (this->actor.world.pos.y + 40.0f); dustPos.z = (Math_CosS(0) * 7.0f) + this->actor.world.pos.z; func_800B0EB0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_808B1120, &D_808B1124, 200, 45, 12); diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index 5f0ef2edf..e47a726a4 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -336,7 +336,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { (this->collider.base.atFlags & AT_BOUNCED)) { if ((this->collider.base.at != NULL) && (this->collider.base.at->id != ACTOR_OBJ_SYOKUDAI)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); - this->actor.world.rot.y += BINANG_ROT180((s16)randPlusMinusPoint5Scaled(8000.0f)); + this->actor.world.rot.y += BINANG_ROT180((s16)(s32)Rand_CenteredFloat(0x1F40)); this->actor.velocity.y = -this->actor.velocity.y; this->bubble.unk_149 = -1; return; 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 8c2b4eb4b..e8b74f8ec 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 @@ -54,9 +54,9 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.gravity = 0.0f; - this->randomTargetCenterOffset.x = randPlusMinusPoint5Scaled(100.0f); - this->randomTargetCenterOffset.y = randPlusMinusPoint5Scaled(10.0f); - this->randomTargetCenterOffset.z = randPlusMinusPoint5Scaled(100.0f); + this->randomTargetCenterOffset.x = Rand_CenteredFloat(100.0f); + this->randomTargetCenterOffset.y = Rand_CenteredFloat(10.0f); + 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 @@ -311,7 +311,7 @@ void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play) { } if (this->randomAngleChangeTimer == 50) { - this->targetRotY = randPlusMinusPoint5Scaled(200.0f) + this->actor.yawTowardsPlayer; + this->targetRotY = Rand_CenteredFloat(200.0f) + this->actor.yawTowardsPlayer; } Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 2, this->rotStep, 0); 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 4ea6bc475..406270ff8 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -449,9 +449,9 @@ void EnBaguo_InitializeEffect(EnBaguo* this, Vec3f* pos, Vec3f* velocity, Vec3f* effect->accel = *accel; effect->scale = scale; effect->timer = timer; - effect->rotation.x = (s16)randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.y = (s16)randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.z = (s16)randPlusMinusPoint5Scaled(30000.0f); + effect->rotation.x = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rotation.y = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rotation.z = (s16)(s32)Rand_CenteredFloat(0x7530); return; } } 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 549a2c4bd..acb47b743 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -161,11 +161,10 @@ void EnBat_Init(Actor* thisx, PlayState* play) { EnBat_SetupFlyIdle(this); while (BAD_BAT_GET_NUMBER_TO_SPAWN(thisx) > 1) { Actor_SpawnAsChildAndCutscene( - &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + randPlusMinusPoint5Scaled(200.0f), - thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f), - thisx->world.pos.z + randPlusMinusPoint5Scaled(200.0f), randPlusMinusPoint5Scaled(0x2000), - 0xFFFF * Rand_ZeroOne(), 0, BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE, - thisx->halfDaysBits, NULL); + &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + Rand_CenteredFloat(200.0f), + thisx->world.pos.y + Rand_CenteredFloat(100.0f), thisx->world.pos.z + Rand_CenteredFloat(200.0f), + Rand_CenteredFloat(0x2000), 0xFFFF * Rand_ZeroOne(), 0, + BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE, thisx->halfDaysBits, NULL); BAD_BAT_GET_NUMBER_TO_SPAWN(thisx)--; } } 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 9fabcecc0..d52f12ccf 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -340,7 +340,7 @@ void EnBbfall_Fly(EnBbfall* this, PlayState* play) { // Bounce upwards off the ground this->actor.velocity.y *= -1.2f; this->actor.velocity.y = CLAMP(this->actor.velocity.y, 8.0f, 12.0f); - this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(73728.0f); + this->actor.shape.rot.y += (s16)(s32)Rand_CenteredFloat(0x12000); } this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; 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 c03cc005d..1c2d1ed0f 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -158,9 +158,9 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) { nextPos.z += Math_CosS(this->targetYaw) * 30.0f; if ((this->instanceId % 2) == 0) { - this->targetYaw += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000); + this->targetYaw += (s16)((s32)Rand_CenteredFloat(1000.0f) + 4000); } else { - this->targetYaw -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000); + this->targetYaw -= (s16)((s32)Rand_CenteredFloat(1000.0f) + 4000); } this->flightHoverOffset += 1000; @@ -197,10 +197,10 @@ void EnBee_Attack(EnBee* this, PlayState* play) { yawOffset = (this->instanceId * 0x700) + 0x2000; for (i = 0; i < 2; i++) { - rand = randPlusMinusPoint5Scaled(20.0f); + rand = Rand_CenteredFloat(20.0f); nextPos.x += Math_SinS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f); nextPos.y = (Math_SinS(this->flightHoverOffset) * 10.0f) + (player->actor.floorHeight + 40.0f); - rand = randPlusMinusPoint5Scaled(20.0f); + rand = Rand_CenteredFloat(20.0f); nextPos.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f); Math_Vec3f_Copy(&this->targetPos[i], &nextPos); @@ -210,14 +210,12 @@ void EnBee_Attack(EnBee* this, PlayState* play) { Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]); if ((this->instanceId % 2) == 0) { - this->targetYaw += - (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f); + this->targetYaw += (this->instanceId * 0x700) + (s32)Rand_CenteredFloat((this->instanceId * 0x700) * 0.5f); } else { - this->targetYaw -= - (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f); + this->targetYaw -= (this->instanceId * 0x700) + (s32)Rand_CenteredFloat((this->instanceId * 0x700) * 0.5f); } - this->flightHoverOffset += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000; + this->flightHoverOffset += (s32)Rand_CenteredFloat(500.0f) + 1000; if (this->targetYaw > 0x10000) { this->targetYaw = 0; 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 cdd7abee3..6d99ada15 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -59,9 +59,9 @@ void func_80C22DEC(EnBh* this, PlayState* play) { xzDist = sqrtf(SQ(xDiff) + SQ(zDiff)); if ((this->timer2 == 0) || (xzDist < 100.0f)) { - this->pos.x = randPlusMinusPoint5Scaled(300.0f) + this->actor.home.pos.x; - this->pos.y = randPlusMinusPoint5Scaled(100.0f) + this->actor.home.pos.y; - this->pos.z = randPlusMinusPoint5Scaled(300.0f) + this->actor.home.pos.z; + this->pos.x = Rand_CenteredFloat(300.0f) + this->actor.home.pos.x; + this->pos.y = Rand_CenteredFloat(100.0f) + this->actor.home.pos.y; + this->pos.z = Rand_CenteredFloat(300.0f) + this->actor.home.pos.z; this->timer2 = Rand_ZeroFloat(50.0f) + 30.0f; this->step = 0; } @@ -85,7 +85,7 @@ void func_80C22DEC(EnBh* this, PlayState* play) { this->skelanime.playSpeed = 1.0f; this->timer = Rand_ZeroFloat(70.0f) + 50.0f; } else if (((this->timer & 7) == 7) && (Rand_ZeroOne() < 0.5f)) { - this->unk1E4 = randPlusMinusPoint5Scaled(3000.0f); + this->unk1E4 = Rand_CenteredFloat(3000.0f); } } else { SkelAnime_Update(&this->skelanime); 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 713410f23..1b849799a 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -436,9 +436,9 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) { bubblePos.y = this->picto.actor.world.pos.y; for (i = 0; i < 20; i++) { - bubbleVel.x = randPlusMinusPoint5Scaled(10.0f); + bubbleVel.x = Rand_CenteredFloat(10.0f); bubbleVel.y = Rand_ZeroFloat(5.5f) + 5.5f; - bubbleVel.z = randPlusMinusPoint5Scaled(10.0f); + bubbleVel.z = Rand_CenteredFloat(10.0f); bubblePos.x = this->picto.actor.world.pos.x + (2.0f * bubbleVel.x); bubblePos.z = this->picto.actor.world.pos.z + (2.0f * bubbleVel.z); @@ -604,7 +604,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec MTXMODE_APPLY); } } else if (this->actionFunc == EnBigokuta_SuckInPlayer) { - f32 sin = sin_rad(this->timer * (M_PI / 3.0f)) * 0.5f; + f32 sin = Math_SinF(this->timer * (M_PI / 3.0f)) * 0.5f; Matrix_Scale(((this->timer * (2 / 90.0f)) * (0.5f + sin)) + 1.0f, ((this->timer * (2 / 90.0f)) * (0.5f - sin)) + 1.0f, 1.0f - ((this->timer * 0.3f) / 9.0f), @@ -613,7 +613,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec if (this->timer == 0) { Matrix_Scale(0.9f, 0.9f, 1.15f, MTXMODE_APPLY); } else if (this->timer > 0) { - f32 sin = sin_rad(this->timer * (M_PI / 3.0f)) * 0.5f; + f32 sin = Math_SinF(this->timer * (M_PI / 3.0f)) * 0.5f; Matrix_Scale(((0.5f + sin) * 0.2f) + 1.0f, ((0.5f - sin) * 0.2f) + 1.0f, 0.7f, MTXMODE_APPLY); } else { 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 a77733d31..3daaf1f85 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -267,7 +267,7 @@ void func_80A27B58(EnBigpamet* this) { this->unk_2A2 = 40; for (ptr = &this->unk_2FC[0], i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) { - temp_s1 = (s32)randPlusMinusPoint5Scaled(20480.0f) + this->actor.wallYaw; + temp_s1 = (s32)Rand_CenteredFloat(0x5000) + this->actor.wallYaw; temp_s2 = Rand_S16Offset(0x1000, 0x3000); temp_fs2 = Math_SinS(temp_s2); @@ -342,7 +342,7 @@ void func_80A27FE8(EnBigpamet* this, PlayState* play) { pos.y += 8.0f; if (this->actionFunc != func_80A28D0C) { - sp32 = (s32)randPlusMinusPoint5Scaled(0x8000) + this->actor.world.rot.y; + sp32 = (s32)Rand_CenteredFloat(0x8000) + this->actor.world.rot.y; pos.x -= 55.0f * Math_SinS(sp32); pos.z -= 55.0f * Math_CosS(sp32); } 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 7c82b50b0..762141ed4 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -554,7 +554,7 @@ void EnBigpo_IdleFlying(EnBigpo* this, PlayState* play) { // flight position calculations this->hoverHeightCycleTimer = (this->hoverHeightCycleTimer == 0) ? 40 : (this->hoverHeightCycleTimer - 1); Math_StepToF(&this->savedHeight, player->actor.world.pos.y + 100.0f, 1.5f); - this->actor.world.pos.y = (sin_rad(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight; + this->actor.world.pos.y = (Math_SinF(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight; Math_StepToF(&this->actor.speed, 3.0f, 0.2f); func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) { @@ -827,7 +827,7 @@ void EnBigpo_ScoopSoulIdle(EnBigpo* this, PlayState* play) { EnBigpo_SetupScoopSoulLeaving(this); } else { Actor_OfferGetItem(&this->actor, play, GI_MAX, 35.0f, 60.0f); - this->actor.world.pos.y = (sin_rad(this->idleTimer * (M_PI / 20)) * 5.0f) + this->savedHeight; + this->actor.world.pos.y = (Math_SinF(this->idleTimer * (M_PI / 20)) * 5.0f) + this->savedHeight; } } 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 1a90fd29b..695ac9153 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -657,7 +657,7 @@ void EnBigslime_AddWavySurface(EnBigslime* this) { randFloat = (Rand_ZeroOne() * 40.0f) + 50.0f; } - this->vtxSurfacePerturbation[i] = sin_rad((randInt + i) * (M_PI / 3)) * randFloat * 0.001f; + this->vtxSurfacePerturbation[i] = Math_SinF((randInt + i) * (M_PI / 3)) * randFloat * 0.001f; } } @@ -673,7 +673,7 @@ void EnBigslime_UpdateWavySurface(EnBigslime* this) { } this->wavySurfaceTimer--; - vtxSurfaceWave = sin_rad(this->wavySurfaceTimer * (M_PI / 12)); + vtxSurfaceWave = Math_SinF(this->wavySurfaceTimer * (M_PI / 12)); for (i = 0; i < BIGSLIME_NUM_VTX; i++) { staticVtx = &sBigslimeStaticVtx[i]; dynamicVtx = &sBigslimeDynamicVtx[this->dynamicVtxState][i]; @@ -692,9 +692,9 @@ void EnBigslime_InitFallMinislime(EnBigslime* this) { for (i = 0; i < MINISLIME_NUM_SPAWN; i++) { minislime = this->minislime[i]; minislime->actor.params = MINISLIME_INIT_FALL; - minislime->actor.world.pos.x = randPlusMinusPoint5Scaled(80.0f) + (GBT_ROOM_5_MIN_X + ((i % 4) + 1) * 192.0f); + minislime->actor.world.pos.x = Rand_CenteredFloat(80.0f) + (GBT_ROOM_5_MIN_X + ((i % 4) + 1) * 192.0f); minislime->actor.world.pos.y = Rand_ZeroFloat(250.0f) + (GBT_ROOM_5_CENTER_Y + 50.0f); - minislime->actor.world.pos.z = randPlusMinusPoint5Scaled(80.0f) + (GBT_ROOM_5_MIN_Z + ((i / 4) + 1) * 192.0f); + minislime->actor.world.pos.z = Rand_CenteredFloat(80.0f) + (GBT_ROOM_5_MIN_Z + ((i / 4) + 1) * 192.0f); } this->minislimeState = MINISLIME_ACTIVE_INIT_STATE; @@ -1169,7 +1169,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) { s32 j; for (i = 0; i < BIGSLIME_NUM_RING_FACES / 2; i++) { - vtxY = (((cos_rad(i * (M_PI / 6)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; + vtxY = (((Math_CosF(i * (M_PI / 6)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1188,7 +1188,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) { } for (; i < BIGSLIME_NUM_RING_VTX; i++) { - vtxY = ((cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 16)) * 0.05f) + -1.0f) * BIGSLIME_RADIUS_F; + vtxY = ((Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 16)) * 0.05f) + -1.0f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1301,7 +1301,7 @@ void EnBigslime_SetTargetVtxToThinCone(EnBigslime* this) { sBigslimeTargetVtx[0].n.ob[2] = 0; for (i = 1; i < BIGSLIME_NUM_RING_FACES / 2; i++) { - upperSphereCos = (((cos_rad((i - 1) * (M_PI / 5)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; + upperSphereCos = (((Math_CosF((i - 1) * (M_PI / 5)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1318,7 +1318,7 @@ void EnBigslime_SetTargetVtxToThinCone(EnBigslime* this) { } for (; i < BIGSLIME_NUM_RING_FACES; i++) { - lowerSphereCos = cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / BIGSLIME_NUM_RING_FACES)); + lowerSphereCos = Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / BIGSLIME_NUM_RING_FACES)); for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1361,7 +1361,7 @@ void EnBigslime_SetTargetVtxToInverseCone(EnBigslime* this) { sBigslimeTargetVtx[0].n.ob[2] = 0; for (i = 1; i < BIGSLIME_NUM_RING_FACES / 2; i++) { - upperSphereCos = cos_rad((i - 1) * (M_PI / 10)); + upperSphereCos = Math_CosF((i - 1) * (M_PI / 10)); for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1374,7 +1374,7 @@ void EnBigslime_SetTargetVtxToInverseCone(EnBigslime* this) { for (; i < BIGSLIME_NUM_RING_FACES; i++) { lowerSphereCos = - (((cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 5)) + 1) * 0.925f) + -1.0f) * BIGSLIME_RADIUS_F; + (((Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 5)) + 1) * 0.925f) + -1.0f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1692,7 +1692,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { EnBigslime_UpdateCameraGrabPlayer(this, play); if (this->windupPunchTimer > 0) { invWindupPunchTimer = 1.0f / this->windupPunchTimer; - scale = cos_rad(this->windupPunchTimer * (M_PI / 27)) + 1.0f; + scale = Math_CosF(this->windupPunchTimer * (M_PI / 27)) + 1.0f; player->actor.world.pos.y = this->actor.world.pos.y + (this->actor.scale.y * -500.0f); // Linearly interpolate gekkoRot.y --> this->actor.world.rot.y @@ -1705,7 +1705,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { EnBigslime_GekkoSfxInsideBigslime(this, NA_SE_EN_FROG_PUNCH1); } - scale = 0.5f - cos_rad(-this->windupPunchTimer * (M_PI / 5)) * 0.5f; + scale = 0.5f - Math_CosF(-this->windupPunchTimer * (M_PI / 5)) * 0.5f; if (this->windupPunchTimer == -5) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; @@ -1879,7 +1879,7 @@ void EnBigslime_Freeze(EnBigslime* this, PlayState* play) { if (vtxIceSeed < BIGSLIME_NUM_VTX) { dynamicVtx = &sBigslimeDynamicVtx[this->dynamicVtxState][vtxIceSeed]; targetVtx = &sBigslimeTargetVtx[vtxIceSeed]; - randFloat = randPlusMinusPoint5Scaled(40.0f); + randFloat = Rand_CenteredFloat(40.0f); dynamicVtx->n.ob[0] += (s16)(randFloat / this->actor.scale.x); dynamicVtx->n.ob[1] += (s16)(randFloat / this->actor.scale.y); dynamicVtx->n.ob[2] += (s16)(randFloat / this->actor.scale.z); @@ -2444,9 +2444,9 @@ void EnBigslime_SetupFrogSpawn(EnBigslime* this, PlayState* play) { func_800B0DE0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &dustPrimColor, &dustEnvColor, 500, 50); for (i = 0; i < 25; i++) { - hahenVel.x = randPlusMinusPoint5Scaled(5.0f); + hahenVel.x = Rand_CenteredFloat(5.0f); hahenVel.y = Rand_ZeroFloat(3.0f) + 4.0f; - hahenVel.z = randPlusMinusPoint5Scaled(5.0f); + hahenVel.z = Rand_CenteredFloat(5.0f); EffectSsHahen_Spawn(play, worldPos, &hahenVel, &hahenAccel, 0, Rand_S16Offset(12, 3), HAHEN_OBJECT_DEFAULT, 10, 0); } @@ -2464,7 +2464,8 @@ void EnBigslime_FrogSpawn(EnBigslime* this, PlayState* play) { this->spawnFrogTimer--; // Zoom the camera in and out at the newly spawned red frog - subCamZoom = sin_rad(this->spawnFrogTimer * (M_PI / 5)) * ((0.04f * (this->spawnFrogTimer * 0.1f)) + 0.02f) + 1.0f; + subCamZoom = + Math_SinF(this->spawnFrogTimer * (M_PI / 5)) * ((0.04f * (this->spawnFrogTimer * 0.1f)) + 0.02f) + 1.0f; subCamEye.x = subCam->at.x + (this->subCamDistToFrog.x * subCamZoom); subCamEye.z = subCam->at.z + (this->subCamDistToFrog.z * subCamZoom); subCamEye.y = subCam->at.y + (this->subCamDistToFrog.y * subCamZoom); diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h index f10938b37..8f2b5bee3 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h @@ -87,7 +87,7 @@ typedef struct EnBigslime { s16 isDespawned; s16 isInitJump; }; - /* 0x02BC */ s16 wavySurfaceTimer; // decrements from 24, used in sin_rad for currData2 + /* 0x02BC */ s16 wavySurfaceTimer; // decrements from 24, used in Math_SinF for currData2 /* 0x02BE */ s16 stunTimer; /* 0x02C0 */ union { s16 freezeTimer; 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 4355759c7..ee00081db 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 @@ -120,7 +120,7 @@ s32 EnBomChu_UpdateFloorPoly(EnBomChu* this, CollisionPoly* floorPoly, PlayState return false; } - angle = func_80086C48(normDotUp); + angle = Math_FAcosF(normDotUp); if (angle < 0.001f) { return false; } 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 86cad7219..55f7ff281 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -236,8 +236,8 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { if (this->unk_2A8 == 0) { Math_Vec3f_Copy(&sp60, &this->actor.home.pos); - sp60.x += randPlusMinusPoint5Scaled(150.0f); - sp60.z += randPlusMinusPoint5Scaled(150.0f); + sp60.x += Rand_CenteredFloat(150.0f); + sp60.z += Rand_CenteredFloat(150.0f); abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp60))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp60, &sp6C, 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 7c2a64841..229a1e695 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -266,8 +266,8 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) { if (this->unk_2C0 == 0) { Math_Vec3f_Copy(&sp54, &this->actor.home.pos); - sp54.x += randPlusMinusPoint5Scaled(150.0f); - sp54.z += randPlusMinusPoint5Scaled(150.0f); + sp54.x += Rand_CenteredFloat(150.0f); + sp54.z += Rand_CenteredFloat(150.0f); abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp54))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp54, &sp6C, @@ -422,7 +422,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { } sp40.x = (Math_SinS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.x; - sp40.y = this->bombal->actor.world.pos.y - randPlusMinusPoint5Scaled(40.0f); + sp40.y = this->bombal->actor.world.pos.y - Rand_CenteredFloat(40.0f); sp40.z = (Math_CosS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.z; SoundSource_PlaySfxAtFixedWorldPos(play, &sp40, 50, NA_SE_EV_BOMBERS_SHOT_EXPLOSUIN); @@ -433,8 +433,8 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { func_80BFE494(this, 5, 1.0f); this->unk_29A = 0; Math_Vec3f_Copy(&this->unk_2A4, &this->actor.home.pos); - this->unk_2A4.x += randPlusMinusPoint5Scaled(150.0f); - this->unk_2A4.z += randPlusMinusPoint5Scaled(150.0f); + this->unk_2A4.x += Rand_CenteredFloat(150.0f); + this->unk_2A4.z += Rand_CenteredFloat(150.0f); this->unk_2A2++; } } 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 3c0f0da54..fbdcb860f 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -275,8 +275,8 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) { case 0: if (this->unk_2AE == 0) { Math_Vec3f_Copy(&sp48, &this->actor.home.pos); - sp48.x += randPlusMinusPoint5Scaled(150.0f); - sp48.z += randPlusMinusPoint5Scaled(150.0f); + sp48.x += Rand_CenteredFloat(150.0f); + sp48.z += Rand_CenteredFloat(150.0f); abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp48))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp48, &sp60, 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 4becc2fe6..8e3e907bb 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 @@ -494,8 +494,8 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) { vel.z = cosf(i * (33.0f / 40.0f)) * i * .5f; vel.y = Rand_ZeroFloat(8.0f) + 7.0f; - vel.x += randPlusMinusPoint5Scaled(0.5f); - vel.z += randPlusMinusPoint5Scaled(0.5f); + vel.x += Rand_CenteredFloat(0.5f); + vel.z += Rand_CenteredFloat(0.5f); accel.x = 0.0f; accel.y = -1.0f; 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 703585dd4..fa6349871 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 @@ -163,7 +163,7 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) { if (!this->hasSetRandomValues) { - this->actor.world.rot.y = randPlusMinusPoint5Scaled(30000.0f); + this->actor.world.rot.y = Rand_CenteredFloat(30000.0f); this->actor.speed = 2.0f + BREG(56) + Rand_ZeroFloat(2.0f); this->actor.velocity.y = 12.0f + BREG(57) + Rand_ZeroFloat(5.0f); this->hasSetRandomValues = true; @@ -172,9 +172,9 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) { } for (i = 0; i < 2; i++) { - velocity.x = randPlusMinusPoint5Scaled(2.0f); + velocity.x = Rand_CenteredFloat(2.0f); velocity.y = Rand_ZeroFloat(2.0f) + 1.0f; - velocity.z = randPlusMinusPoint5Scaled(2.0f); + velocity.z = Rand_CenteredFloat(2.0f); accel.y = -0.1f; accel.z = 0.0f; accel.x = 0.0f; 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 ec9a11b4c..4c88b84cb 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -552,9 +552,9 @@ s32 EnCrow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (this->actor.colChkInfo.health != 0) { if (limbIndex == OBJECT_CROW_LIMB_UPPER_TAIL) { - rot->y += (s16)(0xC00 * sin_rad(this->skelAnime.curFrame * (M_PI / 4))); + rot->y += (s16)(0xC00 * Math_SinF(this->skelAnime.curFrame * (M_PI / 4))); } else if (limbIndex == OBJECT_CROW_LIMB_TAIL) { - rot->y += (s16)(0x1400 * sin_rad((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); + rot->y += (s16)(0x1400 * Math_SinF((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); } } return false; 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 eaf1839c6..311b6d216 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -243,9 +243,9 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { sp70.y += 40.0f; sp70.z += Math_CosS(this->actor.world.rot.y) * 70.0f; - sp70.x += randPlusMinusPoint5Scaled(5.0f); - sp70.y += randPlusMinusPoint5Scaled(5.0f); - sp70.z += randPlusMinusPoint5Scaled(5.0f); + sp70.x += Rand_CenteredFloat(5.0f); + sp70.y += Rand_CenteredFloat(5.0f); + sp70.z += Rand_CenteredFloat(5.0f); sp88.y = -1.0f; @@ -507,9 +507,9 @@ void func_80BE7504(EnDaiku2* this, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, f32 ar effect->unk_1C = *arg3; effect->unk_30 = arg4; effect->unk_34 = arg5; - effect->unk_28.x = randPlusMinusPoint5Scaled(30000.0f); - effect->unk_28.y = randPlusMinusPoint5Scaled(30000.0f); - effect->unk_28.z = randPlusMinusPoint5Scaled(30000.0f); + effect->unk_28.x = Rand_CenteredFloat(30000.0f); + effect->unk_28.y = Rand_CenteredFloat(30000.0f); + effect->unk_28.z = Rand_CenteredFloat(30000.0f); break; } } 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 186494268..422b35e87 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -384,7 +384,7 @@ void EnDekubaba_Grow(EnDekubaba* this, PlayState* play) { this->size * 0.01f * (0.5f + (15 - this->timer) * 0.5f / 15.0f); Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1800, 0x800); - headDistVertical = sin_rad(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f; + headDistVertical = Math_SinF(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f; if (this->actor.shape.rot.x < -0x38E3) { headDistHorizontal = 0.0f; @@ -468,7 +468,7 @@ void EnDekubaba_Retract(EnDekubaba* this, PlayState* play) { this->size * 0.01f * (0.5f + this->timer * (1.0f / 30)); Math_ScaledStepToS(&this->actor.shape.rot.x, -0x4000, 0x300); - headDistVertical = (sin_rad(CLAMP_MAX(this->timer * 0.033f, 0.7f) * M_PI) * 32.0f) + 14.0f; + headDistVertical = (Math_SinF(CLAMP_MAX(this->timer * 0.033f, 0.7f) * M_PI) * 32.0f) + 14.0f; if (this->actor.shape.rot.x < -0x38E3) { headDistHorizontal = 0.0f; 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 d80013a99..46c6de979 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -280,7 +280,7 @@ s32 EnDg_HasReachedPoint(EnDg* this, Path* path, s32 pointIndex) { diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; @@ -358,9 +358,9 @@ void EnDg_SpawnFloorDustRing(EnDg* this, PlayState* play) { Vec3f pos; if (((this->index + curFrame) % mod) == 0) { - pos.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x; + pos.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x; pos.y = this->actor.world.pos.y; - pos.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z; + pos.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z; Actor_SpawnFloorDustRing(play, &this->actor, &pos, 10.0f, 0, 2.0f, 300, 0, true); } } @@ -900,14 +900,14 @@ void EnDg_JumpAttack(EnDg* this, PlayState* play) { if (curFrame < 9) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { - sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = randPlusMinusPoint5Scaled(1.0f) + 3.0f; + sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = Rand_CenteredFloat(1.0f) + 3.0f; } EnDg_SpawnFloorDustRing(this, play); } else { this->dogFlags |= DOG_FLAG_JUMP_ATTACKING; if (Animation_OnFrame(&this->skelAnime, 9.0f)) { - f32 rand = randPlusMinusPoint5Scaled(1.5f); + f32 rand = Rand_CenteredFloat(1.5f); sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = 1.2f; this->actor.velocity.y = 2.0f * rand + 3.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 5b268f1f8..e24e2691b 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -1062,7 +1062,7 @@ void func_8089CB10(EnDinofos* this, PlayState* play) { } void func_8089CBEC(EnDinofos* this, PlayState* play) { - s16 temp_s3 = ((s32)randPlusMinusPoint5Scaled(0x1000) + this->actor.shape.rot.y) + this->unk_28E; + s16 temp_s3 = ((s32)Rand_CenteredFloat(0x1000) + this->actor.shape.rot.y) + this->unk_28E; Vec3f sp88; Vec3f sp7C; ColliderJntSphElementDim* dim; @@ -1081,10 +1081,10 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { temp_s0 = CLAMP_MIN(temp_s0, 0); sp88.x = 11.0f * temp_f20; - sp88.y = randPlusMinusPoint5Scaled(2.0f) + -5.4f; + sp88.y = Rand_CenteredFloat(2.0f) + -5.4f; sp88.z = 11.0f * temp_f22; sp7C.x = 0.9f * temp_f20; - sp7C.y = randPlusMinusPoint5Scaled(0.6f) + 1.4f; + sp7C.y = Rand_CenteredFloat(0.6f) + 1.4f; sp7C.z = 0.9f * temp_f22; func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); EffectSsDFire_Spawn(play, &this->limbPos[10], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8); @@ -1098,7 +1098,7 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { for (i = 6; i < end; i++) { dim = &this->colliderJntSph.elements[i].dim; - temp_s3 = (s32)(cos_rad((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y; + temp_s3 = (s32)(Math_CosF((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y; dim->worldSphere.center.x = (s32)this->limbPos[10].x + (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z); dim->worldSphere.center.y = (s32)this->limbPos[10].y + (s32)dim->modelSphere.center.y; @@ -1232,9 +1232,9 @@ void func_8089D42C(EnDinofos* this, PlayState* play) { if ((this->actionFunc == func_8089B834) && (this->unk_290 != 0)) { Math_ScaledStepToS(&this->unk_28E, Math_SinS(this->unk_290 * 1400) * 0x2C00, 0x300); } else if (this->actionFunc == func_8089CA74) { - Math_ScaledStepToS(&this->unk_28E, cos_rad(M_PI) * 0x2C00, 0x233); + Math_ScaledStepToS(&this->unk_28E, Math_CosF(M_PI) * 0x2C00, 0x2C00 / 20); } else if (this->actionFunc == func_8089CBEC) { - this->unk_28E = cos_rad(this->unk_290 * (M_PI / 20)) * 0x2C00; + this->unk_28E = Math_CosF(this->unk_290 * (M_PI / 20)) * 0x2C00; } else if (!Play_InCsMode(play)) { temp_v0_2 = this->unk_28E + this->actor.shape.rot.y; temp_v0_2 = BINANG_SUB(this->actor.yawTowardsPlayer, temp_v0_2); 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 3f149049a..6149a7360 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -371,11 +371,11 @@ void func_80876930(EnDodongo* this, PlayState* play, Vec3f* arg2) { temp3 = this->unk_334 * 30.0f; for (i = 0; i < 3; i++) { - sp88.x = randPlusMinusPoint5Scaled(temp3) + arg2->x; + sp88.x = Rand_CenteredFloat(temp3) + arg2->x; sp88.y = Rand_ZeroFloat(5.0f) + this->actor.floorHeight; - sp88.z = randPlusMinusPoint5Scaled(temp3) + arg2->z; - D_8087933C.x = randPlusMinusPoint5Scaled(2.0f); - D_8087933C.z = randPlusMinusPoint5Scaled(2.0f); + sp88.z = Rand_CenteredFloat(temp3) + arg2->z; + D_8087933C.x = Rand_CenteredFloat(2.0f); + D_8087933C.z = Rand_CenteredFloat(2.0f); func_800B0DE0(play, &sp88, &gZeroVec3f, &D_8087933C, sp80, sp7C, temp1, temp2); } } @@ -738,9 +738,9 @@ void func_80877E60(EnDodongo* this, PlayState* play) { this->timer--; if (this->timer == 10) { for (i = 10; i >= 0; i--) { - sp84.x = randPlusMinusPoint5Scaled(10.0f); - sp84.y = randPlusMinusPoint5Scaled(10.0f); - sp84.z = randPlusMinusPoint5Scaled(10.0f); + sp84.x = Rand_CenteredFloat(10.0f); + sp84.y = Rand_CenteredFloat(10.0f); + sp84.z = Rand_CenteredFloat(10.0f); sp78.x = sp84.x * -0.1f; sp78.y = sp84.y * -0.1f; sp78.z = sp84.z * -0.1f; 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 d2acb55be..fae9fc4fc 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -299,11 +299,11 @@ void EnDragon_SpawnBubbles(EnDragon* this, PlayState* play, Vec3f basePos) { Vec3f bubblePos; s32 i; - bubbleCount = (s32)randPlusMinusPoint5Scaled(5.0f) + 10; + bubbleCount = (s32)Rand_CenteredFloat(5.0f) + 10; colorIndex = 0; if (this->action == DEEP_PYTHON_ACTION_DEAD) { colorIndex = 1; - bubbleCount = (s32)randPlusMinusPoint5Scaled(5.0f) + 10; + bubbleCount = (s32)Rand_CenteredFloat(5.0f) + 10; } for (i = 0; i < bubbleCount; i++) { @@ -311,9 +311,9 @@ void EnDragon_SpawnBubbles(EnDragon* this, PlayState* play, Vec3f basePos) { sBubbleVelocity.x = Rand_ZeroFloat(1.0f) * 23.0f; sBubbleVelocity.y = Rand_ZeroFloat(1.0f) * 10.0f; sBubbleVelocity.z = Rand_ZeroFloat(1.0f) * 23.0f; - bubblePos.x += randPlusMinusPoint5Scaled(i * 30.0f); - bubblePos.y += randPlusMinusPoint5Scaled(5.0f); - bubblePos.z += randPlusMinusPoint5Scaled(i * 30.0f); + bubblePos.x += Rand_CenteredFloat(i * 30.0f); + bubblePos.y += Rand_CenteredFloat(5.0f); + bubblePos.z += Rand_CenteredFloat(i * 30.0f); sBubbleAccel.y = Rand_ZeroFloat(1.0f) * 20.0f * 3.0f; scale = Rand_S16Offset(380, 240); EffectSsDtBubble_SpawnCustomColor(play, &bubblePos, &sBubbleVelocity, &sBubbleAccel, diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 2a9a0ac67..bd9949c61 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -134,8 +134,8 @@ void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3) if (!effect->isActive) { effect->isActive = true; effect->pos = *pos; - effect->pos.x += randPlusMinusPoint5Scaled(50.0f); - effect->pos.z += randPlusMinusPoint5Scaled(50.0f); + effect->pos.x += Rand_CenteredFloat(50.0f); + effect->pos.z += Rand_CenteredFloat(50.0f); effect->timer = lifetime; effect->alpha = 255; effect->type = arg3; @@ -146,9 +146,9 @@ void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3) effect->velocity.y = 5.0f + (10.0f * Rand_ZeroOne()); effect->velocity.z = 2.0f * (Rand_ZeroOne() - 0.5f); effect->scale = 0.5f + (0.2f * Rand_ZeroFloat(1.0f)); - effect->rot.x = randPlusMinusPoint5Scaled(0x7530); - effect->rot.y = randPlusMinusPoint5Scaled(0x7530); - effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + effect->rot.x = Rand_CenteredFloat(0x7530); + effect->rot.y = Rand_CenteredFloat(0x7530); + effect->rot.z = Rand_CenteredFloat(0x7530); break; } } 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 c9750991a..1a54c8c33 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -610,8 +610,7 @@ void EnEgol_Retreat(EnEgol* this, PlayState* play) { if ((ABS_ALT(angleToFacing) < 0x3000) && (fabsf(this->actor.world.pos.y - player->actor.world.pos.y) < 50.0f) && (this->actor.xzDistToPlayer < 100.0f) && (player->invincibilityTimer == 0)) { - func_800B8D50(play, &this->actor, 2.0f, (s32)randPlusMinusPoint5Scaled(0x2000) + this->actor.world.rot.y, 5.0f, - 0x10); + func_800B8D50(play, &this->actor, 2.0f, (s32)Rand_CenteredFloat(0x2000) + this->actor.world.rot.y, 5.0f, 0x10); } Math_Vec3f_Copy(&spawnPos, &gZeroVec3f); if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { @@ -764,11 +763,11 @@ void EnEgol_Laser(EnEgol* this, PlayState* play) { /*! @bug The following is supposed to calculate the rotation from vertical to the collision poly normal. * However, the calculation is performed incorrectly. The correct calculation is - * rotToNorm.x = func_80086B30(nz, ny) * 0x8000 / M_PI; - * rotToNorm.z = func_80086B30(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI; + * rotToNorm.x = Math_FAtan2F(nz, ny) * 0x8000 / M_PI; + * rotToNorm.z = Math_FAtan2F(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI; */ - rotToNorm.x = RAD_TO_BINANG_ALT2(-func_80086B30(-nz * ny, 1.0f)); - rotToNorm.z = RAD_TO_BINANG_ALT2(func_80086B30(-nx * ny, 1.0f)); + rotToNorm.x = RAD_TO_BINANG_ALT2(-Math_FAtan2F(-nz * ny, 1.0f)); + rotToNorm.z = RAD_TO_BINANG_ALT2(Math_FAtan2F(-nx * ny, 1.0f)); if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { EnEgol_SpawnEffect(this, &hitPos, &rotToNorm, 100, 0.02f, EYEGORE_EFFECT_IMPACT); @@ -1534,9 +1533,9 @@ void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32 effect->timer = lifetime; effect->alpha = 255; effect->type = type; - effect->rot.x = randPlusMinusPoint5Scaled(0x7530); - effect->rot.y = randPlusMinusPoint5Scaled(0x7530); - effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + effect->rot.x = Rand_CenteredFloat(0x7530); + effect->rot.y = Rand_CenteredFloat(0x7530); + effect->rot.z = Rand_CenteredFloat(0x7530); if ((effect->type == EYEGORE_EFFECT_PIECE_LARGE) || (effect->type == EYEGORE_EFFECT_PIECE_SMALL)) { effect->accel.y = -1.0f; effect->velocity.x = 4.0f * (Rand_ZeroOne() - 0.5f); 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 2bb7b6d0d..3dc6e4a72 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -201,7 +201,7 @@ void func_8088C858(EnElf* this, PlayState* play) { this->unk_244 = 1; this->unk_248 = 128; this->unk_254 = Rand_ZeroFloat(1.0f) + 0.5f; - this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_24C = Rand_CenteredFloat(0x7FFF); this->unk_26C = func_8088C9CC; } } @@ -216,7 +216,7 @@ void func_8088C920(EnElf* this, PlayState* play) { this->unk_244 = 1; this->unk_248 = 128; this->unk_254 = Rand_ZeroFloat(1.0f) + 0.5f; - this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_24C = Rand_CenteredFloat(0x7FFF); this->unk_26C = func_8088C9CC; } } @@ -264,7 +264,7 @@ void func_8088C9CC(EnElf* this, PlayState* play) { this->unk_244 = 1; this->unk_248 = 128; this->unk_254 = Rand_ZeroFloat(0.5f) + 0.5f; - this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_24C = Rand_CenteredFloat(0x7FFF); } } @@ -293,7 +293,7 @@ void func_8088CC48(EnElf* this, PlayState* play) { this->unk_246 = 0; this->unk_24A = (s32)Rand_ZeroFloat(1048.0f) + 0x200; this->unk_224 = this->actor.world.pos; - this->unk_258 = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_258 = Rand_CenteredFloat(0x7FFF); this->unk_26C = func_8088C9CC; func_8088CBAC(this, play); this->unk_25C = 0; @@ -1247,9 +1247,9 @@ void func_8088F5F4(EnElf* this, PlayState* play, s32 sparkleLife) { Color_RGBA8 envColor; if (!(this->fairyFlags & 8)) { - sparklePos.x = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.x; + sparklePos.x = Rand_CenteredFloat(6.0f) + this->actor.world.pos.x; sparklePos.y = (Rand_ZeroOne() * 6.0f) + this->actor.world.pos.y; - sparklePos.z = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.z; + sparklePos.z = Rand_CenteredFloat(6.0f) + this->actor.world.pos.z; primColor.r = this->innerColor.r; primColor.g = this->innerColor.g; 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 e2a5f69e3..2584a1c73 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -66,7 +66,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 1.25f); this->actionFunc = EnElfbub_Idle; - this->zRot = randPlusMinusPoint5Scaled(0x10000); + this->zRot = Rand_CenteredFloat(0x10000); this->zRotDelta = 1000; this->xScale = 0.08f; 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 a3f17f605..cacef3f4d 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -262,8 +262,8 @@ void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3) { } for (i = 0; i < arg2; i++) { - elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, randPlusMinusPoint5Scaled(20.0f) + sp6C.x, sp6C.y, - randPlusMinusPoint5Scaled(20.0f) + sp6C.z, 0, 0, 0, params); + 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) { continue; } 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 05351cd3f..9b65ae2a6 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -58,7 +58,7 @@ void EnElforg_InitializeParams(EnElforg* this) { this->actor.speed = 1.0f; this->targetSpeedXZ = 1.0f; this->actor.velocity.y = 0.0f; - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000); + this->actor.world.rot.y = Rand_CenteredFloat(0x10000); this->timer = 0; this->secondaryTimer = Rand_ZeroFloat(100.0f); this->actor.shape.yOffset = 0.0f; @@ -176,9 +176,9 @@ void EnElforg_SpawnSparkles(EnElforg* this, PlayState* play, s32 life) { s32 pad; s32 index; - pos.x = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.x; + pos.x = Rand_CenteredFloat(6.0f) + this->actor.world.pos.x; pos.y = (Rand_ZeroOne() * 6.0f) + this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y); - pos.z = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.z; + pos.z = Rand_CenteredFloat(6.0f) + this->actor.world.pos.z; index = (this->area < STRAY_FAIRY_AREA_CLOCK_TOWN || this->area >= STRAY_FAIRY_AREA_MAX) ? STRAY_FAIRY_AREA_CLOCK_TOWN : this->area; 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 834a6449f..3d8224039 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -102,15 +102,15 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) { this->timer = 0; switch (this->type) { case EN_ENCOUNT1_GRASSHOPPER: - scale = randPlusMinusPoint5Scaled(40.0f) + 200.0f; + scale = Rand_CenteredFloat(40.0f) + 200.0f; rotY = player->actor.shape.rot.y; if (this->spawnActiveCount & 1) { rotY = -rotY; - scale = randPlusMinusPoint5Scaled(20.0f) + 100.0f; + scale = Rand_CenteredFloat(20.0f) + 100.0f; } - spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + Rand_CenteredFloat(40.0f); spawnPos.y = player->actor.floorHeight + 120.0f; - spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + Rand_CenteredFloat(40.0f); floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos); if ((floorHeight <= BGCHECK_Y_MIN) || ((player->actor.depthInWater != BGCHECK_Y_MIN) && @@ -125,11 +125,11 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) { break; case EN_ENCOUNT1_SKULLFISH: - scale = randPlusMinusPoint5Scaled(250.0f) + 500.0f; + scale = Rand_CenteredFloat(250.0f) + 500.0f; rotY = player->actor.shape.rot.y; - spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + Rand_CenteredFloat(40.0f); spawnPos.y = player->actor.world.pos.y - Rand_ZeroFloat(20.0f); - spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + Rand_CenteredFloat(40.0f); floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos); if (!(player->stateFlags1 & PLAYER_STATE1_8000000) || (floorHeight <= BGCHECK_Y_MIN) || (player->actor.depthInWater < floorHeight)) { 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 972d038ae..5e28850c6 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -171,8 +171,8 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { if (this->unk_14C != 0) { yRot += 0x8000; } - pos.x += Math_SinS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); - pos.z += Math_CosS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); + pos.x += Math_SinS(yRot) * (40.0f + Rand_CenteredFloat(40.0f)); + pos.z += Math_CosS(yRot) * (40.0f + Rand_CenteredFloat(40.0f)); if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SKB, pos.x, pos.y, pos.z, 0, 0, 0, ENSKB_PARAM_0) != NULL) { this->unk_14C++; diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 85d0527fa..64bfdaecc 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -64,10 +64,10 @@ void EnEstone_Init(Actor* thisx, PlayState* play) { s32 pad; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 15.0f); - this->rotVel.x = this->rotVel.y = this->rotVel.z = randPlusMinusPoint5Scaled(1.0f) * 20.0f; + this->rotVel.x = this->rotVel.y = this->rotVel.z = Rand_CenteredFloat(1.0f) * 20.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x2710); + this->actor.world.rot.y += (s16)(s32)Rand_CenteredFloat(0x2710); this->actor.shape.rot.y = this->actor.world.rot.y; if (this->actor.params == ENESTONE_TYPE_LARGE) { @@ -224,9 +224,9 @@ void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* ac effect->accel = *accel; effect->scale = scale; effect->timer = lifetime; - effect->rot.x = randPlusMinusPoint5Scaled(0x7530); - effect->rot.y = randPlusMinusPoint5Scaled(0x7530); - effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + effect->rot.x = Rand_CenteredFloat(0x7530); + effect->rot.y = Rand_CenteredFloat(0x7530); + effect->rot.z = Rand_CenteredFloat(0x7530); break; } } 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 2f226e61c..03989b01f 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -662,16 +662,16 @@ s32 EnFall_RisingDebris_InitializeEffect(EnFall* this) { debrisEffects[i].pos.x = this->actor.world.pos.x; debrisEffects[i].pos.y = this->actor.world.pos.y; debrisEffects[i].pos.z = this->actor.world.pos.z; - angle = randPlusMinusPoint5Scaled(0x10000); + angle = Rand_CenteredFloat(0x10000); scale = (1.0f - (Rand_ZeroFloat(1.0f) * Rand_ZeroFloat(1.0f))) * 3000.0f; debrisEffects[i].pos.x += Math_SinS(angle) * scale; debrisEffects[i].pos.z += Math_CosS(angle) * scale; debrisEffects[i].velocity.x = 0.0f; debrisEffects[i].velocity.z = 0.0f; debrisEffects[i].velocity.y = 80.0f; - debrisEffects[i].rot.x = randPlusMinusPoint5Scaled(0x10000); - debrisEffects[i].rot.y = randPlusMinusPoint5Scaled(0x10000); - debrisEffects[i].rot.z = randPlusMinusPoint5Scaled(0x10000); + debrisEffects[i].rot.x = Rand_CenteredFloat(0x10000); + debrisEffects[i].rot.y = Rand_CenteredFloat(0x10000); + debrisEffects[i].rot.z = Rand_CenteredFloat(0x10000); this->activeDebrisEffectCount++; return true; } 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 97d1ec357..269866ff0 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -265,7 +265,7 @@ void EnFamos_SetupDeathDebris(EnFamos* this) { rock->rotation.y = (s32)Rand_Next() >> 0x10; rock->rotation.z = (s32)Rand_Next() >> 0x10; rock->pos.x = Math_SinS(randVelDirection) * 20.0f + this->actor.world.pos.x; - rock->pos.y = randPlusMinusPoint5Scaled(60.0f) + (this->actor.world.pos.y + 40.0f); + rock->pos.y = Rand_CenteredFloat(60.0f) + (this->actor.world.pos.y + 40.0f); rock->pos.z = Math_CosS(randVelDirection) * 20.0f + this->actor.world.pos.z; rock->scale = Rand_ZeroFloat(0.002f) + (2.5f * 0.001f); } @@ -687,8 +687,8 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 4); } - this->actor.world.pos.x = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.x; - this->actor.world.pos.z = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.z; + this->actor.world.pos.x = Rand_CenteredFloat(5.0f) + this->targetDest.x; + this->actor.world.pos.z = Rand_CenteredFloat(5.0f) + this->targetDest.z; if (this->stateTimer == 1) { EnBom* explosion = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 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 b26592ac0..fd3b723d8 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -301,7 +301,7 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), 0x300); } else if (rand < 0.8f) { - this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(1536.0f); + this->actor.shape.rot.y += (s16)(s32)Rand_CenteredFloat(0x600); } // Climb if too close to ground 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 ac3a4246b..923cfeef2 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -352,7 +352,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) { this->unk_2B4 = (s32)Rand_ZeroFloat(20.0f) + 10; } else if (this->unk_2B4 == 1) { if ((this->unk_348 == 0) || (Rand_ZeroOne() < 0.6f)) { - this->unk_348 = randPlusMinusPoint5Scaled(0x2000); + this->unk_348 = Rand_CenteredFloat(0x2000); } else { this->unk_348 = Math_Vec3f_Pitch(&this->actor.world.pos, &this->unk_324); if (this->unk_348 < -0x1000) { @@ -545,8 +545,8 @@ void func_80B295A4(EnFish2* this, PlayState* play) { Math_ApproachZeroF(&this->actor.speed, 0.3f, 0.3f); if (this->unk_2B4 != 0) { Math_Vec3f_Copy(&sp60, &this->unk_318); - sp60.x += randPlusMinusPoint5Scaled(100.0f); - sp60.z += randPlusMinusPoint5Scaled(100.0f); + sp60.x += Rand_CenteredFloat(100.0f); + sp60.z += Rand_CenteredFloat(100.0f); for (i = 0; i < 2; i++) { EffectSsBubble_Spawn(play, &sp60, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f); @@ -912,10 +912,10 @@ void func_80B2A498(EnFish2* this, PlayState* play) { for (i = 0; i < 10; i++) { Math_Vec3f_Copy(&sp6C, &this->actor.world.pos); - sp6C.x += randPlusMinusPoint5Scaled(70.0f); + sp6C.x += Rand_CenteredFloat(70.0f); sp6C.y = this->unk_334 + 10.0f; - sp6C.z += randPlusMinusPoint5Scaled(70.0f); - EffectSsGSplash_Spawn(play, &sp6C, NULL, NULL, 0, (s32)randPlusMinusPoint5Scaled(50.0f) + 350); + sp6C.z += Rand_CenteredFloat(70.0f); + EffectSsGSplash_Spawn(play, &sp6C, NULL, NULL, 0, (s32)Rand_CenteredFloat(50.0f) + 350); } } } @@ -970,11 +970,11 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) { if ((play->gameplayFrames % 8) == 0) { Math_Vec3f_Copy(&sp5C, &this->unk_324); - sp5C.x += randPlusMinusPoint5Scaled(100.0f); + sp5C.x += Rand_CenteredFloat(100.0f); sp5C.y = this->actor.floorHeight; - sp5C.z += randPlusMinusPoint5Scaled(100.0f); + sp5C.z += Rand_CenteredFloat(100.0f); - for (i = 0; i < (s32)randPlusMinusPoint5Scaled(5.0f) + 10; i++) { + for (i = 0; i < (s32)Rand_CenteredFloat(5.0f) + 10; i++) { EffectSsBubble_Spawn(play, &sp5C, 0, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f); } } @@ -1102,9 +1102,9 @@ void func_80B2ADB0(EnFish2* this, Vec3f* vec, s16 arg2) { ptr->unk_20 = VIRTUAL_TO_PHYSICAL(SEGMENTED_TO_VIRTUAL(phi_v0)); ptr->unk_00 = true; ptr->unk_04 = *vec; - ptr->unk_04.x += randPlusMinusPoint5Scaled(ptr->unk_00 + (this->unk_330 * 4000.0f)); - ptr->unk_04.y += randPlusMinusPoint5Scaled(20.0f); - ptr->unk_04.z += randPlusMinusPoint5Scaled(ptr->unk_00 + (this->unk_330 * 4000.0f)); + ptr->unk_04.x += Rand_CenteredFloat(ptr->unk_00 + (this->unk_330 * 4000.0f)); + ptr->unk_04.y += Rand_CenteredFloat(20.0f); + ptr->unk_04.z += Rand_CenteredFloat(ptr->unk_00 + (this->unk_330 * 4000.0f)); ptr->unk_18 = (this->unk_330 * 20.0f) - (Rand_ZeroFloat(5.0f) * 0.01f); ptr->unk_1C = 0x42; ptr->unk_10 = arg2; 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 2ada30cba..20edbcbc2 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1838,9 +1838,9 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) dy = sLurePos.y - sRodTipPos.y; dz = sLurePos.z - sRodTipPos.z; - ry = func_80086B30(dx, dz); + ry = Math_FAtan2F(dx, dz); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -func_80086B30(dy, dist); + rx = -Math_FAtan2F(dy, dist); dist = sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) * 0.001f; @@ -1865,9 +1865,9 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) dy = D_80917218.y - (linePos + i)->y; dz = D_80917218.z - (linePos + i)->z; - ry = func_80086B30(dx, dz); + ry = Math_FAtan2F(dx, dz); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -func_80086B30(dy, dist); + rx = -Math_FAtan2F(dy, dist); dist = sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) * 0.001f; @@ -3003,9 +3003,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->actor.shape.rot.y = -0x8000; if ((this->actor.projectedPos.z < 200.0f) && (this->actor.projectedPos.z > 0.0f)) { - spC4.x = randPlusMinusPoint5Scaled(5.0f) + 130.0f; + spC4.x = Rand_CenteredFloat(5.0f) + 130.0f; spC4.y = 40.0f; - spC4.z = randPlusMinusPoint5Scaled(5.0f) + 1280.0f; + spC4.z = Rand_CenteredFloat(5.0f) + 1280.0f; EnFishing_SpawnBubble(NULL, play->specialEffects, &spC4, Rand_ZeroFloat(0.02f) + 0.03f, 1); } @@ -3080,9 +3080,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } else { this->unk_150 = 1; this->unk_172[0] = Rand_ZeroFloat(30.0f) + 10.0f; - this->unk_1AC.x = randPlusMinusPoint5Scaled(300.0f); + this->unk_1AC.x = Rand_CenteredFloat(300.0f); this->unk_1AC.y = (WATER_SURFACE_Y(play) - 50.0f) - Rand_ZeroFloat(50.0f); - this->unk_1AC.z = randPlusMinusPoint5Scaled(300.0f); + this->unk_1AC.z = Rand_CenteredFloat(300.0f); this->unk_188 = 1.0f; this->unk_18C = 2000.0f; } @@ -3144,8 +3144,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { Math_ApproachF(&this->unk_1A8, 4096.0f, 1.0f, 256.0f); if ((play->gameplayFrames % 32) == 0) { - this->unk_1AC.x = randPlusMinusPoint5Scaled(600.0f); - this->unk_1AC.z = randPlusMinusPoint5Scaled(600.0f); + this->unk_1AC.x = Rand_CenteredFloat(600.0f); + this->unk_1AC.z = Rand_CenteredFloat(600.0f); this->unk_1AC.y = -120.0f; } } else if (sp124 > 50.0f) { @@ -3600,7 +3600,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { for (spA2 = 0; spA2 < 100; spA2++) { - Matrix_RotateYF(randPlusMinusPoint5Scaled(0.75f * M_PI) + + Matrix_RotateYF(Rand_CenteredFloat(0.75f * M_PI) + BINANG_TO_RAD_ALT(this->actor.yawTowardsPlayer + 0x8000), MTXMODE_NEW); Matrix_MultVec3f(&sp10C, &sp100); @@ -4067,7 +4067,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { func_80903C60(this, 1); this->unk_17C = this->actor.velocity.y; this->actor.velocity.y = 0.0f; - this->unk_162 = randPlusMinusPoint5Scaled(32768.0f); + this->unk_162 = (s16)(s32)Rand_CenteredFloat(0x8000); } else if ((this->actor.world.pos.y < WATER_SURFACE_Y(play)) && (this->actor.prevPos.y >= WATER_SURFACE_Y(play))) { if (this->unk_17C < -5.0f) { @@ -4128,10 +4128,10 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if (Rand_ZeroOne() < 0.5f) { this->unk_15E = 0; } else { - this->unk_15E = (s16)randPlusMinusPoint5Scaled(32.0f) + 0x8000; + this->unk_15E = (s16)(s32)Rand_CenteredFloat(0x20) + 0x8000; } - this->unk_160 = (s16)randPlusMinusPoint5Scaled(16384.0f); + this->unk_160 = (s16)(s32)Rand_CenteredFloat(0x4000); this->unk_188 = 1.0f; this->unk_18C = 5000.0f; this->unk_194 = 5000.0f; @@ -4141,8 +4141,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if ((this->unk_150 == 5) && !(this->unk_154 & 1)) { Vec3f pos; - pos.x = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.x; - pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x; + pos.z = Rand_CenteredFloat(10.0f) + this->actor.world.pos.z; pos.y = this->actor.floorHeight + 5.0f; EnFishing_SpawnWaterDust(&this->actor.projectedPos, play->specialEffects, &pos, (this->unk_1A4 * 0.005f) + 0.15f); @@ -4160,9 +4160,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->unk_1CA--; for (i = 0; i < 2; i++) { - pos.x = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.x; - pos.y = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.y; - pos.z = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat(range) + this->actor.world.pos.x; + pos.y = Rand_CenteredFloat(range) + this->actor.world.pos.y; + pos.z = Rand_CenteredFloat(range) + this->actor.world.pos.z; EnFishing_SpawnBubble(&this->actor.projectedPos, play->specialEffects, &pos, Rand_ZeroFloat(0.035f) + 0.04f, 0); } @@ -4568,14 +4568,14 @@ void EnFishing_UpdateGroupFishes(PlayState* play) { spD6 = Math_Atan2S_XY(dist, dy); if ((dist < 10.0f) || (((fish->timer % 32) == 0) && (Rand_ZeroOne() > 0.5f))) { - fish->unk_10.y = basePos[groupIndex].y + randPlusMinusPoint5Scaled(10.0f); + fish->unk_10.y = basePos[groupIndex].y + Rand_CenteredFloat(10.0f); if (D_8090CF18 != 0) { - fish->unk_10.x = basePos[groupIndex].x + randPlusMinusPoint5Scaled(200.0f); - fish->unk_10.z = basePos[groupIndex].z + randPlusMinusPoint5Scaled(200.0f); + fish->unk_10.x = basePos[groupIndex].x + Rand_CenteredFloat(200.0f); + fish->unk_10.z = basePos[groupIndex].z + Rand_CenteredFloat(200.0f); } else { - fish->unk_10.x = basePos[groupIndex].x + randPlusMinusPoint5Scaled(100.0f); - fish->unk_10.z = basePos[groupIndex].z + randPlusMinusPoint5Scaled(100.0f); + fish->unk_10.x = basePos[groupIndex].x + Rand_CenteredFloat(100.0f); + fish->unk_10.z = basePos[groupIndex].z + Rand_CenteredFloat(100.0f); } ripplePos = fish->pos; @@ -5460,8 +5460,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { ((play->gameplayFrames % 2) == 0)) { Vec3f pos; - pos.x = randPlusMinusPoint5Scaled(20.0f) + player->actor.world.pos.x; - pos.z = randPlusMinusPoint5Scaled(20.0f) + player->actor.world.pos.z; + pos.x = Rand_CenteredFloat(20.0f) + player->actor.world.pos.x; + pos.z = Rand_CenteredFloat(20.0f) + player->actor.world.pos.z; pos.y = player->actor.floorHeight + 5.0f; EnFishing_SpawnWaterDust(NULL, play->specialEffects, &pos, 0.5f); } @@ -5552,9 +5552,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { rot.z = (Camera_GetInputDirYaw(mainCam) * -(M_PI / 0x8000)) + rot.y; for (i = 0; i < (u8)D_8090CCD0; i++) { - pos.x = randPlusMinusPoint5Scaled(700.0f) + play->view.eye.x; + pos.x = Rand_CenteredFloat(700.0f) + play->view.eye.x; pos.y = (Rand_ZeroFloat(100.0f) + 150.0f) - 170.0f; - pos.z = randPlusMinusPoint5Scaled(700.0f) + play->view.eye.z; + pos.z = Rand_CenteredFloat(700.0f) + play->view.eye.z; if (pos.z < 1160.0f) { SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &projectedPos, &sProjectedW); 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 150f3c8c1..71f980d47 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -306,14 +306,14 @@ void func_809328F4(EnFz* this, PlayState* play, Vec3f* arg2, s32 arg3, f32 arg4) sp88.b = 200; for (i = 0; i < arg3; i++) { - temp_f24 = randPlusMinusPoint5Scaled(0.3f) + 0.6f; - temp_s1 = (s32)randPlusMinusPoint5Scaled(5.0f) + 12; - spA8.x = randPlusMinusPoint5Scaled(arg4) + arg2->x; + temp_f24 = Rand_CenteredFloat(0.3f) + 0.6f; + temp_s1 = (s32)Rand_CenteredFloat(5.0f) + 12; + spA8.x = Rand_CenteredFloat(arg4) + arg2->x; spA8.y = Rand_ZeroFloat(arg4) + arg2->y; - spA8.z = randPlusMinusPoint5Scaled(arg4) + arg2->z; - sp9C.x = randPlusMinusPoint5Scaled(10.0f); + spA8.z = Rand_CenteredFloat(arg4) + arg2->z; + sp9C.x = Rand_CenteredFloat(10.0f); sp9C.y = Rand_ZeroFloat(10.0f) + 2.0f; - sp9C.z = randPlusMinusPoint5Scaled(10.0f); + sp9C.z = Rand_CenteredFloat(10.0f); EffectSsEnIce_Spawn(play, &spA8, temp_f24, &sp9C, &sp90, &sp8C, &sp88, temp_s1); } @@ -329,9 +329,9 @@ void func_80932AF4(EnFz* this) { Vec3f sp2C; if (!(this->unk_BC6 & 0xF)) { - sp44.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x; - sp44.y = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.y + 30.0f; - sp44.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z; + sp44.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; + sp44.y = Rand_CenteredFloat(40.0f) + this->actor.world.pos.y + 30.0f; + sp44.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; sp2C.x = sp2C.z = 0.0f; sp2C.y = 0.1f; sp38.x = sp38.y = sp38.z = 0.0f; @@ -345,9 +345,9 @@ void func_80932BD4(EnFz* this) { Vec3f sp2C; if (!(this->unk_BC6 & 3)) { - sp44.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x; + sp44.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; sp44.y = this->unk_BB4; - sp44.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z; + sp44.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; sp2C.x = sp2C.z = 0.0f; sp2C.y = 0.1f; sp38.x = sp38.y = sp38.z = 0.0f; 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 e05945680..3540b1a24 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -310,7 +310,7 @@ s32 func_80B3B648(EnGg2* this, Path* path, s32 arg2_) { phi_f14 = points[arg2 + 1].z - points[arg2 - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; 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 8692f937c..1db4d7c5b 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -374,7 +374,7 @@ s32 func_80B50C78(EnGk* this, Path* path, s32 arg2_) { phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; 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 7fbed6122..bfd2d19ab 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -246,7 +246,7 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) { this->type; } - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; EnGrasshopper_SetupFly(this); } @@ -343,7 +343,7 @@ void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { void EnGrasshopper_SetupFly(EnGrasshopper* this) { EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FLY); - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; this->action = EN_GRASSHOPPER_ACTION_FLY; this->actionFunc = EnGrasshopper_Fly; } @@ -384,7 +384,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { } if (this->shouldTurn) { - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; this->targetRot.y = Math_Atan2S(diffX, diffZ); this->timer = Rand_S16Offset(30, 30); } @@ -412,7 +412,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { this->targetRot.y = Math_Atan2S(diffX, diffZ); this->timer = Rand_S16Offset(30, 70); - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; } } } @@ -441,7 +441,7 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) { this->baseFlyHeight = Math_SinS(this->bobPhase) * 10.0f; if (this->timer == 0) { - this->baseFlyHeight = randPlusMinusPoint5Scaled(10.0f); + this->baseFlyHeight = Rand_CenteredFloat(10.0f); this->timer = Rand_S16Offset(30, 30); } @@ -583,8 +583,8 @@ void EnGrasshopper_ApproachPlayer(EnGrasshopper* this, PlayState* play) { if ((this->splashCount < 3) || !(play->gameplayFrames % 8)) { this->splashCount++; Math_Vec3f_Copy(&splashPos, &this->tailTipPos); - splashPos.x += randPlusMinusPoint5Scaled(20.0f); - splashPos.z += randPlusMinusPoint5Scaled(20.0f); + splashPos.x += Rand_CenteredFloat(20.0f); + splashPos.z += Rand_CenteredFloat(20.0f); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (((s32)Rand_ZeroOne() * 100) + 400)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER); } @@ -633,8 +633,8 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) { if ((this->splashCount < 3) || !(play->gameplayFrames % 8)) { this->splashCount++; Math_Vec3f_Copy(&splashPos, &this->tailTipPos); - splashPos.x += randPlusMinusPoint5Scaled(20.0f); - splashPos.z += randPlusMinusPoint5Scaled(20.0f); + splashPos.x += Rand_CenteredFloat(20.0f); + splashPos.z += Rand_CenteredFloat(20.0f); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, ((s32)Rand_ZeroOne() * 100) + 400); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER); } @@ -796,8 +796,8 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { for (i = 0; i < 3; i++) { Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); - splashPos.x += randPlusMinusPoint5Scaled((i * 5.0f) + 20.0f); - splashPos.z += randPlusMinusPoint5Scaled((i * 5.0f) + 20.0f); + splashPos.x += Rand_CenteredFloat((i * 5.0f) + 20.0f); + splashPos.z += Rand_CenteredFloat((i * 5.0f) + 20.0f); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (((s32)Rand_ZeroOne() * 100) + 400)); } @@ -826,7 +826,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sFireVelocityAndAccel); i++) { Math_Vec3f_Copy(&firePos, &this->actor.world.pos); - firePos.x += randPlusMinusPoint5Scaled(30.0f); + firePos.x += Rand_CenteredFloat(30.0f); if (!isUnderWater) { firePos.y = this->actor.floorHeight; } else if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, @@ -834,7 +834,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { firePos.y = waterSurface; } - firePos.z += randPlusMinusPoint5Scaled(30.0f); + firePos.z += Rand_CenteredFloat(30.0f); func_800B3030(play, &firePos, &sFireVelocityAndAccel[i], &sFireVelocityAndAccel[i], 100, 0, 2); } @@ -1062,10 +1062,10 @@ void EnGrasshopper_InitializeEffect(EnGrasshopper* this, Vec3f* pos) { effect->isEnabled = true; effect->pos = *pos; effect->timer = 10; - effect->velocity.x = randPlusMinusPoint5Scaled(20.0f); - effect->velocity.y = randPlusMinusPoint5Scaled(20.0f); - effect->velocity.z = randPlusMinusPoint5Scaled(20.0f); - effect->yaw = randPlusMinusPoint5Scaled(30000.0f); + effect->velocity.x = Rand_CenteredFloat(20.0f); + effect->velocity.y = Rand_CenteredFloat(20.0f); + effect->velocity.z = Rand_CenteredFloat(20.0f); + effect->yaw = Rand_CenteredFloat(30000.0f); return; } } 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 d8004bef8..6f6f2cad9 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -815,9 +815,9 @@ s32 func_809995A4(EnGs* this, PlayState* play) { Vec3f sp60; for (i = 0; i < 3; i++) { - sp60.x = randPlusMinusPoint5Scaled(15.0f); + sp60.x = Rand_CenteredFloat(15.0f); sp60.y = Rand_ZeroFloat(-1.0f); - sp60.z = randPlusMinusPoint5Scaled(15.0f); + sp60.z = Rand_CenteredFloat(15.0f); sp6C.x = this->actor.world.pos.x + (2.0f * sp60.x); sp6C.y = this->actor.world.pos.y + 7.0f; diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index bcc5882a2..f5885b3cf 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -265,7 +265,7 @@ void func_80B22500(EnHakurock* this, PlayState* play) { if (this->counter > 0) { this->counter--; if ((this->counter & 1) == 0) { - this->actor.world.pos.y = (sin_rad(this->counter * (M_PI / 20)) * 4.0f) + this->actor.floorHeight; + this->actor.world.pos.y = (Math_SinF(this->counter * (M_PI / 20)) * 4.0f) + this->actor.floorHeight; } else { this->actor.world.pos.y = this->actor.floorHeight; } 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 ce60a0187..4294a8320 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -107,9 +107,9 @@ void func_80B22E0C(EnHanabiStruct* arg0) { arg0->unk_20.y *= arg0->unk_14.x; arg0->unk_20.y -= 1.0f; - arg0->unk_20.x += randPlusMinusPoint5Scaled(0.8f); - arg0->unk_20.y += randPlusMinusPoint5Scaled(0.8f); - arg0->unk_20.z += randPlusMinusPoint5Scaled(0.8f); + arg0->unk_20.x += Rand_CenteredFloat(0.8f); + arg0->unk_20.y += Rand_CenteredFloat(0.8f); + arg0->unk_20.z += Rand_CenteredFloat(0.8f); if (arg0->unk_01 > 0) { arg0->unk_01--; @@ -286,10 +286,10 @@ void func_80B236C8(EnHanabi* this, PlayState* play) { } sp34.x += sp30 * Math_SinS(this->actor.home.rot.y); - sp34.y += randPlusMinusPoint5Scaled(300.0f); + sp34.y += Rand_CenteredFloat(300.0f); sp34.z += sp30 * Math_CosS(this->actor.home.rot.y); - if (this->actor.home.rot.x >= 0x259) { + if (this->actor.home.rot.x > 0x258) { sp28 = func_80B22C80(&sp34, this->unk_148, 2.0f); } else { sp28 = func_80B22C80(&sp34, this->unk_148, 1.0f); 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 e0f9301ce..8ad694a11 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 @@ -173,8 +173,8 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { Math_Vec3f_Copy(&sp74, &this->actor.world.pos); - sp74.x += randPlusMinusPoint5Scaled(15.0f); - sp74.z += randPlusMinusPoint5Scaled(15.0f); + sp74.x += Rand_CenteredFloat(15.0f); + sp74.z += Rand_CenteredFloat(15.0f); EffectSsDtBubble_SpawnCustomColor(play, &sp74, &sp94, &sp88, &sp84, &sp80, Rand_S16Offset(120, 90), 30, true); @@ -216,8 +216,8 @@ void func_80BDB59C(EnHiddenNuts* this, PlayState* play) { Math_Vec3f_Copy(&sp78, &this->actor.world.pos); - sp78.x += randPlusMinusPoint5Scaled(15.0f); - sp78.z += randPlusMinusPoint5Scaled(15.0f); + sp78.x += Rand_CenteredFloat(15.0f); + sp78.z += Rand_CenteredFloat(15.0f); EffectSsDtBubble_SpawnCustomColor(play, &sp78, &sp98, &sp8C, &sp88, &sp84, Rand_S16Offset(120, 90), 30, true); 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 7c01fa788..1a0105788 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 @@ -814,11 +814,11 @@ void func_80C215E4(PlayState* play, EnHintSkb* this, Vec3f* arg2) { s32 pad; sp5C.y = this->actor.floorHeight; - sp5C.x = (sin_rad(sp40) * 15.0f) + arg2->x; - sp5C.z = (cos_rad(sp40) * 15.0f) + arg2->z; + sp5C.x = (Math_SinF(sp40) * 15.0f) + arg2->x; + sp5C.z = (Math_CosF(sp40) * 15.0f) + arg2->z; - sp44.x = randPlusMinusPoint5Scaled(1.0f); - sp44.z = randPlusMinusPoint5Scaled(1.0f); + sp44.x = Rand_CenteredFloat(1.0f); + sp44.z = Rand_CenteredFloat(1.0f); sp50.y += (Rand_ZeroOne() - 0.5f) * 4.0f; 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 d4a534ad1..a116c323a 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -487,7 +487,7 @@ void EnIk_VerticalAttack(EnIk* this, PlayState* play) { if ((this->skelAnime.curFrame > 13.0f) && (this->skelAnime.curFrame < 23.0f)) { this->colliderQuad.base.atFlags |= AT_ON; if (this->drawArmorFlags) { - this->actor.speed = sin_rad((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f; + this->actor.speed = Math_SinF((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f; } } else { this->colliderQuad.base.atFlags &= ~AT_ON; @@ -550,7 +550,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) { } else { phi_f2 = this->skelAnime.curFrame - 1.0f; } - this->actor.speed = sin_rad((M_PI / 8) * phi_f2) * 4.5f; + this->actor.speed = Math_SinF((M_PI / 8) * phi_f2) * 4.5f; } this->colliderQuad.base.atFlags |= AT_ON; } else { @@ -685,9 +685,9 @@ void EnIk_Die(EnIk* this, PlayState* play) { if (this->timer != 0) { this->timer--; for (i = 6 - (this->timer >> 2); i >= 0; i--) { - effectPos.x = randPlusMinusPoint5Scaled(80.0f) + this->actor.world.pos.x; - effectPos.z = randPlusMinusPoint5Scaled(80.0f) + this->actor.world.pos.z; - effectPos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + effectPos.x = Rand_CenteredFloat(80.0f) + this->actor.world.pos.x; + effectPos.z = Rand_CenteredFloat(80.0f) + this->actor.world.pos.z; + effectPos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &effectPos, &sEffectVelAndAccel, &sEffectVelAndAccel, 100, 0, 2); } if (this->timer == 0) { @@ -845,9 +845,9 @@ void EnIk_UpdateArmor(EnIk* this, PlayState* play) { ikEffect->pos.y = this->actor.floorHeight; for (i = 0; i < 4; i++) { - effectPos.x = randPlusMinusPoint5Scaled(20.0f) + ikEffect->pos.x; + effectPos.x = Rand_CenteredFloat(20.0f) + ikEffect->pos.x; effectPos.y = Rand_ZeroFloat(20.0f) + ikEffect->pos.y; - effectPos.z = randPlusMinusPoint5Scaled(20.0f) + ikEffect->pos.z; + effectPos.z = Rand_CenteredFloat(20.0f) + ikEffect->pos.z; func_800B3030(play, &effectPos, &gZeroVec3f, &gZeroVec3f, 40, 7, 2); } 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 df217b86d..449acf212 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -242,7 +242,7 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) { diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; 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 a1da5941b..d572c1331 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -1461,7 +1461,7 @@ void func_80B88964(EnKaizoku* this, PlayState* play) { void func_80B88CD8(EnKaizoku* this) { EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3); - this->picto.actor.speed = randPlusMinusPoint5Scaled(12.0f); + this->picto.actor.speed = Rand_CenteredFloat(12.0f); this->skelAnime.playSpeed = 1.0f; this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; this->unk_2B2 = Rand_ZeroOne() * 30.0f + 30.0f; 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 930a0d7a3..fc8d3d201 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -1006,11 +1006,11 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) { if ((play->gameplayFrames % 4) == 0) { Math_Vec3f_Copy(&tempWorldPos, &this->picto.actor.world.pos); tempWorldPos.y = this->picto.actor.floorHeight; - tempWorldPos.x += randPlusMinusPoint5Scaled(2.0f); - tempWorldPos.z += randPlusMinusPoint5Scaled(2.0f); + tempWorldPos.x += Rand_CenteredFloat(2.0f); + tempWorldPos.z += Rand_CenteredFloat(2.0f); if (play->sceneId == SCENE_8ITEMSHOP) { - EffectSsGSplash_Spawn(play, &tempWorldPos, 0, 0, 0, randPlusMinusPoint5Scaled(100.0f) + 200.0f); + EffectSsGSplash_Spawn(play, &tempWorldPos, 0, 0, 0, Rand_CenteredFloat(100.0f) + 200.0f); SoundSource_PlaySfxAtFixedWorldPos(play, &tempWorldPos, 0x32, NA_SE_EV_BOMB_DROP_WATER); } else { 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 d9d5ef7d8..820dd1f4e 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -606,9 +606,9 @@ 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 = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x; + sp34.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; sp34.y = this->actor.world.pos.y + 15.0f; - sp34.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z; + sp34.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; func_800B3030(play, &sp34, &gZeroVec3f, &gZeroVec3f, 100, 0, 2); } } 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 e1d9df24c..ff7e4bb08 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -135,8 +135,8 @@ void func_80954960(EnKanban* this) { ny = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y); nz = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z); - this->floorRot.x = -func_80086B30(-nz * ny, 1.0f); - this->floorRot.z = func_80086B30(-nx * ny, 1.0f); + this->floorRot.x = -Math_FAtan2F(-nz * ny, 1.0f); + this->floorRot.z = Math_FAtan2F(-nx * ny, 1.0f); } } @@ -350,7 +350,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { piece->actionState = ENKANBAN_AIR; piece->actor.gravity = -1.0f; piece->actor.world.rot.y = - BINANG_ROT180((s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.yawTowardsPlayer); + BINANG_ROT180((s32)Rand_CenteredFloat(0x4000) + this->actor.yawTowardsPlayer); if ((hitItem->toucher.dmgFlags & 0x10) || (hitItem->toucher.dmgFlags & 8) || (hitItem->toucher.dmgFlags & 0x80000000)) { @@ -369,7 +369,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { piece->bounceZ = Rand_ZeroFloat(7.0f) + 3.0f; } - piece->spinVel.y = randPlusMinusPoint5Scaled(0x1800); + piece->spinVel.y = Rand_CenteredFloat(0x1800); if (Rand_ZeroOne() < 0.5f) { piece->direction = 1; @@ -526,7 +526,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.velocity.y = 0.0f; } else { this->actor.velocity.y *= -0.3f; - this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000); + this->actor.world.rot.y += (s16)(s32)Rand_CenteredFloat(0x4000); } bounced = true; } else { @@ -653,8 +653,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { dustCount = this->partCount * 0.5f; for (j = 0; j < dustCount + 3; j++) { - pos.x = randPlusMinusPoint5Scaled((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.x; - pos.z = randPlusMinusPoint5Scaled((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.x; + pos.z = Rand_CenteredFloat((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.z; func_800B0F18(play, &pos, &velocity, &accel, &primColor, &envColor, 100, 5, Rand_ZeroFloat(5.0f) + 14.0f); } @@ -750,7 +750,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actionState = ENKANBAN_AIR; this->actor.gravity = -1.0f; - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000); + this->actor.world.rot.y = Rand_CenteredFloat(0x10000); if (this->partCount >= 4) { this->bounceX = Rand_ZeroFloat(10.0f) + 6.0f; this->bounceZ = Rand_ZeroFloat(10.0f) + 6.0f; @@ -763,7 +763,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.speed = Rand_ZeroFloat(1.5f); } - this->spinVel.y = randPlusMinusPoint5Scaled(0x1800); + this->spinVel.y = Rand_CenteredFloat(0x1800); if (Rand_ZeroOne() < 0.5f) { this->direction = 1; @@ -808,7 +808,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.speed = 4.0f + bombStrength; } - this->spinVel.y = randPlusMinusPoint5Scaled(0x1800); + this->spinVel.y = Rand_CenteredFloat(0x1800); if (Rand_ZeroOne() < 0.5f) { this->direction = 1; 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 315bc1ffd..94590f5b6 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -233,9 +233,9 @@ void EnMinifrog_SpawnDust(EnMinifrog* this, PlayState* play) { vec5.z = this->actor.world.pos.z - (5.0f * Math_CosS(yaw) * Math_CosS(pitch)); for (i = 0; i < 5; i++) { - vel.x = randPlusMinusPoint5Scaled(4.0f); - vel.y = randPlusMinusPoint5Scaled(4.0f); - vel.z = randPlusMinusPoint5Scaled(4.0f); + vel.x = Rand_CenteredFloat(4.0f); + vel.y = Rand_CenteredFloat(4.0f); + vel.z = Rand_CenteredFloat(4.0f); accel.x = -vel.x * 0.1f; accel.y = -vel.y * 0.1f; accel.z = -vel.z * 0.1f; 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 3aac9ae11..68d08b223 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -209,11 +209,11 @@ void EnMinislime_AddIceSmokeEffect(EnMinislime* this, PlayState* play) { Vec3f pos; Vec3f vel; - pos.x = (randPlusMinusPoint5Scaled(200.0f) * this->actor.scale.x) + this->actor.world.pos.x; + pos.x = (Rand_CenteredFloat(200.0f) * this->actor.scale.x) + this->actor.world.pos.x; pos.y = CLAMP_MIN(this->actor.world.pos.y, GBT_ROOM_5_MIN_Y + 30.0f); - pos.z = (randPlusMinusPoint5Scaled(200.0f) * this->actor.scale.z) + this->actor.world.pos.z; - vel.x = randPlusMinusPoint5Scaled(1.5f); - vel.z = randPlusMinusPoint5Scaled(1.5f); + pos.z = (Rand_CenteredFloat(200.0f) * this->actor.scale.z) + this->actor.world.pos.z; + vel.x = Rand_CenteredFloat(1.5f); + vel.z = Rand_CenteredFloat(1.5f); vel.y = 2.0f; EffectSsIceSmoke_Spawn(play, &pos, &vel, &gZeroVec3f, 500); } @@ -401,8 +401,8 @@ void EnMinislime_GrowAndShrink(EnMinislime* this, PlayState* play) { this->growShrinkTimer--; scaleFactor = (this->growShrinkTimer / 6) + 1.0f; this->actor.scale.z = this->actor.scale.x = - ((cos_rad(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * (2.0f / 30.0f))) + 1.5f) * 0.1f; - this->actor.scale.y = ((sin_rad(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * 0.05f)) + 0.75f) * 0.1f; + ((Math_CosF(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * (2.0f / 30.0f))) + 1.5f) * 0.1f; + this->actor.scale.y = ((Math_SinF(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * 0.05f)) + 0.75f) * 0.1f; if (this->actor.params == MINISLIME_SETUP_GEKKO_THROW) { EnMinislime_SetupMoveToGekko(this); } else if ((this->actor.xzDistToPlayer < 150.0f) && (this->growShrinkTimer < 38)) { @@ -424,11 +424,12 @@ void EnMinislime_Idle(EnMinislime* this, PlayState* play) { f32 speedXZ; this->idleTimer--; - speedXZ = sin_rad(this->idleTimer * (M_PI / 10)); + speedXZ = Math_SinF(this->idleTimer * (M_PI / 10)); this->actor.speed = speedXZ * 1.5f; this->actor.speed = CLAMP_MIN(this->actor.speed, 0.0f); Math_StepToF(&this->actor.scale.x, ((0.14f * speedXZ) + 1.5f) * 0.1f, 0.010000001f); - Math_StepToF(&this->actor.scale.y, ((cos_rad(this->idleTimer * (M_PI / 10)) * 0.07f) + 0.75f) * 0.1f, 0.010000001f); + Math_StepToF(&this->actor.scale.y, ((Math_CosF(this->idleTimer * (M_PI / 10)) * 0.07f) + 0.75f) * 0.1f, + 0.010000001f); Math_StepToF(&this->actor.scale.z, 0.3f - this->actor.scale.x, 0.010000001f); if (this->idleTimer == 0) { if (this->actor.xzDistToPlayer < 300.0f) { @@ -537,13 +538,13 @@ void EnMinislime_Knockback(EnMinislime* this, PlayState* play) { this->knockbackTimer--; Math_StepToF(&this->actor.speed, 0.0f, 1.0f); sqrtFrozenTimer = sqrtf(this->knockbackTimer); - this->actor.scale.x = ((cos_rad(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.15f; + this->actor.scale.x = ((Math_CosF(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.15f; this->actor.scale.z = this->actor.scale.x; if (this->knockbackTimer == 15) { this->collider.base.acFlags |= AC_ON; } - this->actor.scale.y = ((sin_rad(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.075f; + this->actor.scale.y = ((Math_SinF(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.075f; if (this->actor.params == MINISLIME_SETUP_GEKKO_THROW) { EnMinislime_SetupMoveToGekko(this); } else if (this->knockbackTimer == 0) { @@ -575,9 +576,10 @@ void EnMinislime_DefeatIdle(EnMinislime* this, PlayState* play) { f32 xzScale; this->idleTimer--; - xzScale = sin_rad(this->idleTimer * (M_PI / 10)); + xzScale = Math_SinF(this->idleTimer * (M_PI / 10)); Math_StepToF(&this->actor.scale.x, ((0.14f * xzScale) + 1.5f) * 0.1f, 0.010000001f); - Math_StepToF(&this->actor.scale.y, ((0.07f * cos_rad(this->idleTimer * (M_PI / 10))) + 0.75f) * 0.1f, 0.010000001f); + Math_StepToF(&this->actor.scale.y, ((0.07f * Math_CosF(this->idleTimer * (M_PI / 10))) + 0.75f) * 0.1f, + 0.010000001f); Math_StepToF(&this->actor.scale.z, 0.3f - this->actor.scale.x, 0.010000001f); if (this->idleTimer == 0) { this->idleTimer = 20; @@ -670,9 +672,9 @@ void EnMinislime_GekkoThrow(EnMinislime* this, PlayState* play) { f32 xzScale; this->throwTimer--; - xzScale = sin_rad(this->throwTimer * (M_PI / 5)); + xzScale = Math_SinF(this->throwTimer * (M_PI / 5)); this->actor.scale.x = ((0.3f * xzScale) + 1.5f) * 0.1f; - this->actor.scale.y = ((cos_rad(this->throwTimer * (M_PI / 5)) * 0.2f) + 0.75f) * 0.1f; + this->actor.scale.y = ((Math_CosF(this->throwTimer * (M_PI / 5)) * 0.2f) + 0.75f) * 0.1f; this->actor.scale.z = 0.3f - this->actor.scale.x; if (this->throwTimer == 0) { this->throwTimer = 10; 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 9b4722fba..4e9af5578 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -274,7 +274,7 @@ void func_80A4E2E8(EnMkk* this, PlayState* play) { Math_ScaledStepToS(&this->unk_150, this->actor.yawTowardsPlayer, 0x400); } this->actor.shape.rot.y = - (s32)(sin_rad(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150; + (s32)(Math_SinF(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150; func_800B9010(&this->actor, NA_SE_EN_KUROSUKE_MOVE - SFX_FLAG); if (sp20) { this->unk_14B &= ~2; @@ -379,16 +379,16 @@ void func_80A4E84C(EnMkk* this) { this->unk_154.y = this->actor.world.pos.y; this->unk_154.x = this->actor.world.pos.x - 10.0f * Math_SinS(this->actor.shape.rot.y + - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); this->unk_154.z = this->actor.world.pos.z - 10.0f * Math_CosS(this->actor.shape.rot.y + - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); this->unk_160.x = this->unk_154.x - 12.0f * Math_SinS(this->actor.shape.rot.y - - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); this->unk_160.z = this->unk_154.z - 12.0f * Math_CosS(this->actor.shape.rot.y - - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); } } diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c index 41f872488..472196ae9 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c @@ -87,9 +87,9 @@ void EnNimotsu_Update(Actor* thisx, PlayState* play) { } if ((play->state.frames % 3) == 0) { - dustPosition.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f); + dustPosition.x = this->actor.world.pos.x + Rand_CenteredFloat(15.0f); dustPosition.y = this->actor.world.pos.y; - dustPosition.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f); + dustPosition.z = this->actor.world.pos.z + Rand_CenteredFloat(15.0f); Actor_SpawnFloorDustRing(play, &this->actor, &dustPosition, 20.0f, 0, 2.0f, 0, 0, 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 4982f7e75..0e96590d5 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -280,7 +280,7 @@ void EnNiw_SpawnAttackNiw(EnNiw* this, PlayState* play) { yView = play->view.at.y - play->view.eye.y; zView = play->view.at.z - play->view.eye.z; newNiwPos.x = ((Rand_ZeroOne() - 0.5f) * xView) + play->view.eye.x; - newNiwPos.y = randPlusMinusPoint5Scaled(0.3f) + (play->view.eye.y + 50.0f + (yView * 0.5f)); + newNiwPos.y = Rand_CenteredFloat(0.3f) + (play->view.eye.y + 50.0f + (yView * 0.5f)); newNiwPos.z = ((Rand_ZeroOne() - 0.5f) * zView) + play->view.eye.z; attackNiw = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ATTACK_NIW, newNiwPos.x, newNiwPos.y, newNiwPos.z, 0, 0, 0, ATTACK_NIW_REGULAR); @@ -340,8 +340,8 @@ void EnNiw_SetupIdle(EnNiw* this) { void EnNiw_Idle(EnNiw* this, PlayState* play) { f32 posX2; f32 posZ2; - f32 posX1 = randPlusMinusPoint5Scaled(100.0f); - f32 posZ1 = randPlusMinusPoint5Scaled(100.0f); + f32 posX1 = Rand_CenteredFloat(100.0f); + f32 posZ1 = Rand_CenteredFloat(100.0f); s16 nextAnimIndex; if (this->niwType == NIW_TYPE_REGULAR) { @@ -438,9 +438,9 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { this->heldTimer = (s32)(Rand_ZeroFloat(1.0f) * 10.0f) + 10; } - this->actor.shape.rot.x = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.x; - this->actor.shape.rot.y = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.y; - this->actor.shape.rot.z = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.z; + this->actor.shape.rot.x = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.x; + this->actor.shape.rot.y = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.y; + this->actor.shape.rot.z = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.z; if (this->niwType == NIW_TYPE_REGULAR) { if (Actor_HasNoParent(&this->actor, play)) { this->actor.shape.rot.z = 0; @@ -773,9 +773,9 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { featherCount = 4; } for (i = 0; i < featherCount; i++) { - pos.x = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.x; - pos.y = randPlusMinusPoint5Scaled(10.0f) + (this->actor.world.pos.y + this->unk308); - pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x; + pos.y = Rand_CenteredFloat(10.0f) + (this->actor.world.pos.y + this->unk308); + pos.z = Rand_CenteredFloat(10.0f) + this->actor.world.pos.z; featherScale = Rand_ZeroFloat(6.0f) + 6.0f; if ((this->unk29E == 2) && (this->unk308 != 0)) { @@ -785,9 +785,9 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { if (this->unk308 == 0) { featherScale = Rand_ZeroFloat(2.0f) + 2.0f; } - vel.x = randPlusMinusPoint5Scaled(3.0f); + vel.x = Rand_CenteredFloat(3.0f); vel.y = Rand_ZeroFloat(2.0f) * 0.5f + 2.0f; - vel.z = randPlusMinusPoint5Scaled(3.0f); + vel.z = Rand_CenteredFloat(3.0f); accel.z = accel.x = 0.0f; accel.y = -0.15f; 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 fc6ef71db..2f8914edc 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -110,9 +110,9 @@ void EnNwc_SpawnDust(EnNwc* this, PlayState* play) { vec5.z = this->actor.world.pos.z - 5.0f * Math_CosS(yaw) * Math_CosS(pitch); for (i = 0; i < 5; i++) { - vel.x = randPlusMinusPoint5Scaled(4.0f); - vel.y = randPlusMinusPoint5Scaled(4.0f); - vel.z = randPlusMinusPoint5Scaled(4.0f); + vel.x = Rand_CenteredFloat(4.0f); + vel.y = Rand_CenteredFloat(4.0f); + vel.z = Rand_CenteredFloat(4.0f); accel.x = -vel.x * 0.1f; accel.y = -vel.y * 0.1f; accel.z = -vel.z * 0.1f; @@ -182,7 +182,7 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) { case NWC_STATE_TURNING: this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f; this->actionFunc = EnNwc_Turn; - this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(0x10000); + this->fallingRotY = (s16)(s32)Rand_CenteredFloat(0x10000); break; case NWC_STATE_HOPPING_FORWARD: @@ -193,7 +193,7 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) { case NWC_STATE_FOLLOWING: this->actionFunc = EnNwc_Follow; this->transformTimer = 0; - this->randomRot = (s16)(s32)randPlusMinusPoint5Scaled(10000.0f); + this->randomRot = (s16)(s32)Rand_CenteredFloat(0x2710); break; case NWC_STATE_RUNNING: @@ -331,7 +331,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) { } } else { // not too close: keep moving - this->randomRot += (s16)randPlusMinusPoint5Scaled(1500.0f); + this->randomRot += (s16)(s32)Rand_CenteredFloat(0x5DC); if (this->randomRot > 0x1388) { this->randomRot = 0x1388; } else if (this->randomRot < -0x1388) { 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 7a40b38f5..c1ce34949 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -118,9 +118,9 @@ void func_80BF5E68(EnOsk* this, AnimationHeader** animations, s16 index, f32 pla void func_80BF5EBC(EnOsk* this, PlayState* play) { Vec3f sp2C; - sp2C.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x; - sp2C.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z; - sp2C.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.y; + sp2C.x = Rand_CenteredFloat(30.0f) + this->actor.world.pos.x; + sp2C.z = Rand_CenteredFloat(30.0f) + this->actor.world.pos.z; + sp2C.y = Rand_CenteredFloat(30.0f) + this->actor.world.pos.y; func_800B3030(play, &sp2C, &D_80BF7018, &D_80BF7018, 100, 0, 2); } 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 52f611c0e..e5b4cabe3 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -271,7 +271,7 @@ void func_8095AB1C(EnOwl* this, PlayState* play) { } void func_8095AB4C(EnOwl* this) { - if (randPlusMinusPoint5Scaled(1.0f) < 0.0f) { + if (Rand_CenteredFloat(1.0f) < 0.0f) { this->actionFlags |= 0x20; } else { this->actionFlags &= ~0x20; 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 079e3027d..4c75fac65 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -306,7 +306,7 @@ s32 func_8086A2CC(EnPametfrog* this, CollisionPoly* floorPoly) { return false; } - rotation = func_80086C48(arg0); + rotation = Math_FAcosF(arg0); if (rotation < 0.0001f) { return false; } @@ -523,7 +523,7 @@ void EnPametfrog_FallOffSnapper(EnPametfrog* this, PlayState* play) { this->timer--; } - sin = sin_rad(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f; + sin = Math_SinF(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f; EnPametfrog_ShakeCamera(this, play, 300.0f * sin, 100.0f * sin); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { EnPametfrog_StopCutscene(this, play); @@ -966,9 +966,9 @@ void EnPametfrog_SetupSpawnFrog(EnPametfrog* this, PlayState* play) { Flags_SetClearTemp(play, play->roomCtx.curRoom.num); for (i = 0; i < 25; i++) { - vel.x = randPlusMinusPoint5Scaled(5.0f); + vel.x = Rand_CenteredFloat(5.0f); vel.y = Rand_ZeroFloat(3.0f) + 4.0f; - vel.z = randPlusMinusPoint5Scaled(5.0f); + vel.z = Rand_CenteredFloat(5.0f); EffectSsHahen_Spawn(play, &this->actor.world.pos, &vel, &sAccel, 0, Rand_S16Offset(12, 3), HAHEN_OBJECT_DEFAULT, 10, 0); } @@ -981,7 +981,7 @@ void EnPametfrog_SpawnFrog(EnPametfrog* this, PlayState* play) { f32 magShake; this->timer--; - magShake = (sin_rad(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f; + magShake = (Math_SinF(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f; EnPametfrog_ShakeCamera(this, play, 75.0f * magShake, 10.0f * magShake); if (this->timer == 0) { EnPametfrog_StopCutscene(this, play); diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.c b/src/overlays/actors/ovl_En_Part/z_en_part.c index ac073358f..e56970e10 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.c +++ b/src/overlays/actors/ovl_En_Part/z_en_part.c @@ -90,10 +90,10 @@ void func_808654C4(EnPart* this, PlayState* play) { break; case ENPART_TYPE_4: for (i = 7; i >= 0; i--) { - effectPos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - effectPos.y = randPlusMinusPoint5Scaled(50.0f) + + effectPos.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + effectPos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y)); - effectPos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; + effectPos.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; effectVelocity.y = Rand_ZeroOne() + 1.0f; effectScale = Rand_S16Offset(80, 100); EffectSsDtBubble_SpawnColorProfile(play, &effectPos, &effectVelocity, &gZeroVec3f, effectScale, 25, 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 d4996d74f..645b7edf5 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -257,9 +257,9 @@ void func_80897258(PlayState* play, EnPeehat* this, Vec3f* arg2, f32 arg3, f32 a sp44.x = (Math_SinS(sp42) * arg3) + arg2->x; sp44.z = (Math_CosS(sp42) * arg3) + arg2->z; - D_80899564.x = randPlusMinusPoint5Scaled(1.05f); - D_80899564.z = randPlusMinusPoint5Scaled(1.05f); - D_80899558.y = randPlusMinusPoint5Scaled(4.0f) + 8.0f; + D_80899564.x = Rand_CenteredFloat(1.05f); + D_80899564.z = Rand_CenteredFloat(1.05f); + D_80899558.y = Rand_CenteredFloat(4.0f) + 8.0f; EffectSsHahen_Spawn(play, &sp44, &D_80899558, &D_80899564, 0, (Rand_ZeroFloat(5.0f) + 12.0f) * arg4, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -506,7 +506,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) { this->actor.world.pos.y -= 1.0f; } - cos = cos_rad(this->unk_2B8); + cos = Math_CosF(this->unk_2B8); this->actor.world.pos.y += cos * 1.4f; this->unk_2B8 += fabsf(cos * 0.18f) + 0.07f; this->unk_2B0--; @@ -514,7 +514,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) { if (this->unk_2B0 <= 0) { this->actor.speed = Rand_ZeroFloat(0.5f) + 2.5f; this->unk_2B0 = Rand_ZeroFloat(10.0f) + 10.0f; - this->unk_2B6 = randPlusMinusPoint5Scaled(1000.0f); + this->unk_2B6 = Rand_CenteredFloat(1000.0f); } SkelAnime_Update(&this->skelAnime); @@ -549,10 +549,10 @@ void func_80898144(EnPeehat* this, PlayState* play) { } else { this->actor.world.pos.y += 1.0f; } - cos = cos_rad(this->unk_2B8); + cos = Math_CosF(this->unk_2B8); this->actor.world.pos.y += cos * 1.4f; - cos = cos_rad(this->unk_2B8); + cos = Math_CosF(this->unk_2B8); this->unk_2B8 += fabsf(cos * 0.18f) + 0.07f; step = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos); 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 6d16c1418..48c8cd5ab 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -397,17 +397,17 @@ void EnPp_SpawnDust(EnPp* this, PlayState* play) { Vec3f accel; for (i = 0; i < ARRAY_COUNT(this->backFootPos); i++) { - velocity.x = randPlusMinusPoint5Scaled(2.0f); + velocity.x = Rand_CenteredFloat(2.0f); velocity.y = Rand_ZeroFloat(2.0f) + 1.0f; - velocity.z = randPlusMinusPoint5Scaled(2.0f); + velocity.z = Rand_CenteredFloat(2.0f); accel.y = -0.1f; accel.z = 0.0f; accel.x = 0.0f; - pos.x = this->backFootPos[i].x + randPlusMinusPoint5Scaled(10.0f); + pos.x = this->backFootPos[i].x + Rand_CenteredFloat(10.0f); pos.y = Rand_ZeroFloat(3.0f) + this->actor.floorHeight + 1.0f; - pos.z = this->backFootPos[i].z + randPlusMinusPoint5Scaled(10.0f); + pos.z = this->backFootPos[i].z + Rand_CenteredFloat(10.0f); func_800B0EB0(play, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvColor, (Rand_ZeroFloat(50.0f) + 60.0f), 30, (Rand_ZeroFloat(5.0f) + 20.0f)); @@ -534,8 +534,8 @@ void EnPp_Idle(EnPp* this, PlayState* play) { if ((this->timer == 0) && (this->secondaryTimer == 0)) { this->secondaryTimer = Rand_ZeroFloat(20.0f) + 20.0f; Math_Vec3f_Copy(&posToLookAt, &this->actor.home.pos); - posToLookAt.x += randPlusMinusPoint5Scaled(50.0f); - posToLookAt.z += randPlusMinusPoint5Scaled(50.0f); + posToLookAt.x += Rand_CenteredFloat(50.0f); + posToLookAt.z += Rand_CenteredFloat(50.0f); this->targetRotY = Math_Vec3f_Yaw(&this->actor.world.pos, &posToLookAt); this->actor.speed = 0.0f; if (this->animIndex != EN_PP_ANIM_IDLE) { @@ -1046,8 +1046,8 @@ void EnPp_Dead(EnPp* this, PlayState* play) { if (this->actor.world.pos.y < waterSurface) { for (i = 0; i < 5; i++) { Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); - splashPos.x += randPlusMinusPoint5Scaled(10 + (5 * i)); - splashPos.z += randPlusMinusPoint5Scaled(40 + (5 * i)); + splashPos.x += Rand_CenteredFloat(10 + (5 * i)); + splashPos.z += Rand_CenteredFloat(40 + (5 * i)); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (Rand_ZeroOne() * 100.0f) + 400.0f); } @@ -1143,9 +1143,9 @@ void EnPp_Mask_Detach(EnPp* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sMaskFireVelocityAndAccel); i++) { Math_Vec3f_Copy(&maskFirePos, &this->maskFlamesBasePos); - maskFirePos.x += randPlusMinusPoint5Scaled(20.0f); + maskFirePos.x += Rand_CenteredFloat(20.0f); maskFirePos.y = this->actor.floorHeight; - maskFirePos.z += randPlusMinusPoint5Scaled(20.0f); + maskFirePos.z += Rand_CenteredFloat(20.0f); func_800B3030(play, &maskFirePos, &sMaskFireVelocityAndAccel[i], &sMaskFireVelocityAndAccel[i], 70, 0, 2); } @@ -1173,7 +1173,7 @@ void EnPp_BodyPart_SetupMove(EnPp* this) { this->deadBodyPartRotationalVelocity.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)randPlusMinusPoint5Scaled(223.0f) + 0x1999) * this->deadBodyPartIndex; + this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->deadBodyPartIndex; } this->action = EN_PP_ACTION_BODY_PART_MOVE; @@ -1213,8 +1213,8 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) { if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) { for (i = 0; i < 6; i++) { Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); - splashPos.x += randPlusMinusPoint5Scaled(10 + (5 * i)); - splashPos.z += randPlusMinusPoint5Scaled(40 + (5 * i)); + splashPos.x += Rand_CenteredFloat(10 + (5 * i)); + splashPos.z += Rand_CenteredFloat(40 + (5 * i)); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (Rand_ZeroOne() * 100.0f) + 400.0f); } } else { 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 30fd0ee15..98762c907 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -319,7 +319,7 @@ void func_80A32A40(EnPr* this, PlayState* play) { WaterBox* sp30; Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - sp34.y = randPlusMinusPoint5Scaled(50.0f) + this->actor.home.pos.y; + sp34.y = Rand_CenteredFloat(50.0f) + this->actor.home.pos.y; if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &this->unk_2B4, &sp30)) { @@ -551,9 +551,9 @@ void EnPr_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&sp40, &this->unk_2D4); this->unk_204 = 0; - sp40.x += randPlusMinusPoint5Scaled(20.0f); - sp40.y += randPlusMinusPoint5Scaled(5.0f); - sp40.z += randPlusMinusPoint5Scaled(20.0f); + sp40.x += Rand_CenteredFloat(20.0f); + sp40.y += Rand_CenteredFloat(5.0f); + sp40.z += Rand_CenteredFloat(20.0f); for (i = 0; i < (s32)Rand_ZeroFloat(5.0f) + 5; i++) { EffectSsBubble_Spawn(play, &sp40, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f); 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 f4747b4c6..a4dd96d4b 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -390,8 +390,8 @@ void func_80A748E8(EnPr2* this, PlayState* play) { if (this->unk_1DA == 1) { this->unk_1D8 = Rand_S16Offset(100, 100); Math_Vec3f_Copy(&sp3C, &this->unk_228); - sp3C.x += randPlusMinusPoint5Scaled(300.0f); - sp3C.z += randPlusMinusPoint5Scaled(300.0f); + sp3C.x += Rand_CenteredFloat(300.0f); + sp3C.z += Rand_CenteredFloat(300.0f); Math_Vec3f_Copy(&this->unk_21C, &sp3C); } } else { @@ -536,7 +536,7 @@ void func_80A751B4(EnPr2* this) { this->actor.shape.rot.z = this->actor.world.rot.z; this->unk_1D8 = 30; this->actor.speed = Rand_ZeroFloat(0.5f); - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000); + this->actor.world.rot.y = Rand_CenteredFloat(0x8000); } Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 10); this->unk_1D4 = 3; @@ -596,9 +596,9 @@ void func_80A75310(EnPr2* this, PlayState* play) { for (i = 0; i < 10; i++) { Math_Vec3f_Copy(&sp64, &this->actor.world.pos); - sp64.x += randPlusMinusPoint5Scaled(20.0f); - sp64.y += randPlusMinusPoint5Scaled(5.0f); - sp64.z += randPlusMinusPoint5Scaled(20.0f); + sp64.x += Rand_CenteredFloat(20.0f); + sp64.y += Rand_CenteredFloat(5.0f); + sp64.z += Rand_CenteredFloat(20.0f); frame = Rand_ZeroFloat(0.03f) + 0.07f; EffectSsBubble_Spawn(play, &sp64, 0.0f, 5.0f, 5.0f, frame); @@ -675,9 +675,9 @@ void EnPr2_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&sp58, &this->unk_270); this->unk_1D6 = false; - sp58.x += randPlusMinusPoint5Scaled(20.0f); - sp58.y += randPlusMinusPoint5Scaled(5.0f); - sp58.z += randPlusMinusPoint5Scaled(20.0f); + sp58.x += Rand_CenteredFloat(20.0f); + sp58.y += Rand_CenteredFloat(5.0f); + sp58.z += Rand_CenteredFloat(20.0f); for (i = 0; i < 2; i++) { rand = Rand_ZeroFloat(0.03f) + 0.07f; 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 d71de14f7..ef37cf9f0 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -127,7 +127,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) { this->unk_220 = &this->actor; this->unk_1EC = 255; - this->unk_202 = randPlusMinusPoint5Scaled((this->unk_1E6 * 100.0f) + 1000.0f); + this->unk_202 = Rand_CenteredFloat((this->unk_1E6 * 100.0f) + 1000.0f); func_80A76388(this); } @@ -176,7 +176,7 @@ void func_80A76070(EnPrz* this, s16 arg1, PlayState* play) { temp_s0 = -100; } - if (fabsf(this->actor.world.rot.y - (f32)arg1) < (randPlusMinusPoint5Scaled(20.0f) + 100.0f)) { + if (fabsf(this->actor.world.rot.y - (f32)arg1) < (Rand_CenteredFloat(20.0f) + 100.0f)) { Math_ApproachZeroF(&this->unk_218, 0.5f, 20.0f); } else { Math_ApproachF(&this->unk_218, temp_s0, 0.5f, 5.0f); @@ -218,7 +218,7 @@ s32 func_80A762C0(EnPrz* this, PlayState* play) { } void func_80A76388(EnPrz* this) { - this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f; + this->actor.speed = Rand_CenteredFloat(1.0f) + 4.0f; func_80A75F18(this, 0); this->unk_1EA = 1; this->actionFunc = func_80A763E8; @@ -251,11 +251,11 @@ void func_80A763E8(EnPrz* this, PlayState* play) { if ((this->unk_1EE == 0) && (this->unk_1F2 == 0)) { s16 rot; - this->unk_214 = randPlusMinusPoint5Scaled(40.0f); + this->unk_214 = Rand_CenteredFloat(40.0f); rot = BINANG_ROT180(this->unk_220->world.rot.y); this->unk_1D8.x += Math_SinS(rot) * this->unk_214; - this->unk_1D8.y = randPlusMinusPoint5Scaled(40.0f) + (this->unk_220->world.pos.y + 40.0f); + this->unk_1D8.y = Rand_CenteredFloat(40.0f) + (this->unk_220->world.pos.y + 40.0f); rot = BINANG_ROT180(this->unk_220->world.rot.y); this->unk_1D8.z += Math_CosS(rot) * this->unk_214; @@ -302,7 +302,7 @@ void func_80A76634(EnPrz* this, PlayState* play) { } void func_80A76748(EnPrz* this) { - this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 3.0f; + this->actor.speed = Rand_CenteredFloat(1.0f) + 3.0f; this->unk_1EE = 0; this->unk_1EA = 3; this->skelAnime.playSpeed = 2.0f; @@ -317,7 +317,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) { if (func_80A762C0(this, play)) { func_80A75F18(this, 0); - this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f; + this->actor.speed = Rand_CenteredFloat(1.0f) + 4.0f; func_80A76604(this, play); return; } @@ -353,8 +353,8 @@ void func_80A767A8(EnPrz* this, PlayState* play) { this->unk_1C8 = 1; } - this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) + - randPlusMinusPoint5Scaled((2.0f * this->unk_1E6) + 1.0f); + this->unk_1D8.y = + (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) + Rand_CenteredFloat((2.0f * this->unk_1E6) + 1.0f); func_80A76070(this, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_1D8), play); } @@ -374,7 +374,7 @@ void func_80A76A1C(EnPrz* this) { this->unk_1FE = this->actor.world.rot.y; this->actor.speed = Rand_ZeroFloat(0.5f); - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000); + this->actor.world.rot.y = Rand_CenteredFloat(0x8000); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 30); this->unk_1EE = 50; @@ -409,9 +409,9 @@ void func_80A76B14(EnPrz* this, PlayState* play) { for (i = 0; i < 10; i++) { Math_Vec3f_Copy(&sp6C, &this->actor.world.pos); - sp6C.x += randPlusMinusPoint5Scaled(20.0f); - sp6C.y += randPlusMinusPoint5Scaled(5.0f); - sp6C.z += randPlusMinusPoint5Scaled(20.0f); + sp6C.x += Rand_CenteredFloat(20.0f); + sp6C.y += Rand_CenteredFloat(5.0f); + sp6C.z += Rand_CenteredFloat(20.0f); EffectSsBubble_Spawn(play, &sp6C, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f); } @@ -473,9 +473,9 @@ void EnPrz_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&sp38, &this->unk_1CC); this->unk_1C8 = 0; - sp38.x += randPlusMinusPoint5Scaled(20.0f); - sp38.y += randPlusMinusPoint5Scaled(5.0f); - sp38.z += randPlusMinusPoint5Scaled(20.0f); + sp38.x += Rand_CenteredFloat(20.0f); + sp38.y += Rand_CenteredFloat(5.0f); + sp38.z += Rand_CenteredFloat(20.0f); EffectSsBubble_Spawn(play, &sp38, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f); } diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index ba7676655..d4e83a388 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -275,8 +275,8 @@ s16 EnRacedog_GetYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ) if (path != NULL) { point = Lib_SegmentedToVirtual(path->points); point = &point[pointIndex]; - diffXRand = (randPlusMinusPoint5Scaled(100.0f) + point->x) - pos->x; - diffZRand = (randPlusMinusPoint5Scaled(100.0f) + point->z) - pos->z; + diffXRand = (Rand_CenteredFloat(100.0f) + point->x) - pos->x; + diffZRand = (Rand_CenteredFloat(100.0f) + point->z) - pos->z; diffX = point->x - pos->x; diffZ = point->z - pos->z; } else { @@ -474,9 +474,9 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) { // The dog is past the very start, but is still less than 1/4th of the way through the race track. // This code will give the blue dog a higher base speed than any other dog (6.0 instead of 5.0). if (sDogInfo[this->index].color == DOG_COLOR_BLUE) { - this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][0] + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][0] + Rand_CenteredFloat(1.0f); } else { - this->targetSpeed = 5.0f + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = 5.0f + Rand_CenteredFloat(1.0f); } if (DOG_IS_IN_GOOD_CONDITION(this) && (this->index != sFirstPlaceIndex)) { @@ -485,9 +485,9 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) { } else if (this->currentPoint < (quarterPathCount * 3)) { // The dog is between 1/4th and 3/4ths of the way through the race track. if (this->currentPoint < sDogInfo[this->index].pointToUseSecondBaseSpeed) { - this->targetSpeed = 5.0f + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = 5.0f + Rand_CenteredFloat(1.0f); } else { - this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][1] + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][1] + Rand_CenteredFloat(1.0f); if (DOG_IS_IN_GOOD_CONDITION(this) && (this->index != sFirstPlaceIndex)) { this->targetSpeed *= sDogInfo[this->index].goodConditionSpeedMultiplier; @@ -497,7 +497,7 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) { // The dog is more than 3/4ths of the way through the race track. EnRacedog_CalculateFinalStretchTargetSpeed(this); } else { - this->targetSpeed = randPlusMinusPoint5Scaled(1.0f) + 5.0f; + this->targetSpeed = Rand_CenteredFloat(1.0f) + 5.0f; } } } @@ -657,9 +657,9 @@ void EnRacedog_SpawnFloorDustRing(EnRacedog* this, PlayState* play) { Vec3f pos; if (((this->index + curFrame) % mod) == 0) { - pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f); + pos.x = this->actor.world.pos.x + Rand_CenteredFloat(15.0f); pos.y = this->actor.world.pos.y; - pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f); + pos.z = this->actor.world.pos.z + Rand_CenteredFloat(15.0f); Actor_SpawnFloorDustRing(play, &this->actor, &pos, 10.0f, 0, 2.0f, 300, 0, true); } } 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 055b308f2..1a4024f51 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -895,9 +895,9 @@ void EnRaf_InitializeEffect(EnRaf* this, Vec3f* pos, Vec3f* velocity, Vec3f* acc effect->accel = *accel; effect->scale = scale; effect->timer = timer; - effect->rotation.x = randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.y = randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.z = randPlusMinusPoint5Scaled(30000.0f); + effect->rotation.x = Rand_CenteredFloat(30000.0f); + effect->rotation.y = Rand_CenteredFloat(30000.0f); + effect->rotation.z = Rand_CenteredFloat(30000.0f); return; } } 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 7d585c234..e08cb5574 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -230,7 +230,7 @@ s32 EnRat_UpdateFloorPoly(EnRat* this, CollisionPoly* floorPoly, PlayState* play return false; } - angle = func_80086C48(normDotUp); + angle = Math_FAcosF(normDotUp); if (angle < 0.001f) { return false; } @@ -324,9 +324,9 @@ void EnRat_ChooseDirection(EnRat* this) { angle -= 0x8000; } - angle += (s16)randPlusMinusPoint5Scaled(0x800); + angle += (s16)(s32)Rand_CenteredFloat(0x800); } else { - angle = (Rand_ZeroOne() < 0.1f) ? (s16)randPlusMinusPoint5Scaled(0x800) : 0; + angle = (Rand_ZeroOne() < 0.1f) ? (s16)(s32)Rand_CenteredFloat(0x800) : 0; } } @@ -633,9 +633,9 @@ void EnRat_UpdateSparkOffsets(EnRat* this) { for (i = 0; i < ARRAY_COUNT(this->sparkOffsets); i++) { ptr = &this->sparkOffsets[i]; - ptr->x = randPlusMinusPoint5Scaled(6.0f); - ptr->y = randPlusMinusPoint5Scaled(6.0f); - ptr->z = randPlusMinusPoint5Scaled(6.0f); + ptr->x = Rand_CenteredFloat(6.0f); + ptr->y = Rand_CenteredFloat(6.0f); + ptr->z = Rand_CenteredFloat(6.0f); } } @@ -937,14 +937,14 @@ void EnRat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gBombCapDL); if (EN_RAT_GET_TYPE(&this->actor) == EN_RAT_TYPE_DUNGEON) { - redModifier = fabsf(cos_rad(this->timer * (M_PI / 30.f))); + redModifier = fabsf(Math_CosF(this->timer * (M_PI / 30.f))); } else { if (this->timer >= 120) { - redModifier = fabsf(cos_rad((this->timer % 30) * (M_PI / 30.0f))); + redModifier = fabsf(Math_CosF((this->timer % 30) * (M_PI / 30.0f))); } else if (this->timer >= 30) { - redModifier = fabsf(cos_rad((this->timer % 6) * (M_PI / 6.0f))); + redModifier = fabsf(Math_CosF((this->timer % 6) * (M_PI / 6.0f))); } else { - redModifier = fabsf(cos_rad((this->timer % 3) * (M_PI / 3.0f))); + redModifier = fabsf(Math_CosF((this->timer % 3) * (M_PI / 3.0f))); } } 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 351b2f146..dfff2735c 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -161,7 +161,7 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; } @@ -194,7 +194,7 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32 diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; } 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 b34ee8c64..17ad656a4 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -417,9 +417,9 @@ void EnSb_Draw(Actor* thisx, PlayState* play) { fireDecr = this->fireCount - 1; if (!(fireDecr & 1)) { offset = &sFlamePosOffsets[fireDecr & 3]; - flamePos.x = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.x + offset->x); - flamePos.y = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.y + offset->y); - flamePos.z = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.z + offset->z); + flamePos.x = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.x + offset->x); + flamePos.y = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.y + offset->y); + flamePos.z = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.z + offset->z); EffectSsEnFire_SpawnVec3f(play, &this->actor, &flamePos, 100, 0, 0, -1); } } diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index 9779de80c..448683376 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -192,7 +192,7 @@ s32 func_80BCD334(EnScopecrow* this, Path* path, s32 pointIndex) { phi_fa1 = points[index + 1].z - points[index - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x); if (((this->actor.world.pos.x * sp3C.z) + (sp3C.y * this->actor.world.pos.z) + sp3C.x) > 0.0f) { ret = true; 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 08b4b2817..cf634321e 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -654,7 +654,7 @@ s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_) { phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; 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 e22791c82..73edc4267 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -916,7 +916,7 @@ s32 func_80ADCE4C(EnSellnuts* this, Path* path, s32 arg2) { pointY = points[var + 1].z - points[var - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(pointX, pointY)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } 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 e67808d38..a8167009c 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -165,10 +165,10 @@ void func_809947B0(PlayState* play, EnSkb* this, Vec3f* inPos) { s32 pad; pos.y = this->actor.floorHeight; - pos.x = (sin_rad(sp40) * 15.0f) + inPos->x; - pos.z = (cos_rad(sp40) * 15.0f) + inPos->z; - accel.x = randPlusMinusPoint5Scaled(1.0f); - accel.z = randPlusMinusPoint5Scaled(1.0f); + pos.x = (Math_SinF(sp40) * 15.0f) + inPos->x; + pos.z = (Math_CosF(sp40) * 15.0f) + inPos->z; + accel.x = Rand_CenteredFloat(1.0f); + accel.z = Rand_CenteredFloat(1.0f); velocity.y += (Rand_ZeroOne() - 0.5f) * 4.0f; EffectSsHahen_Spawn(play, &pos, &velocity, &accel, 0, ((Rand_ZeroOne() * 5.0f) + 12.0f) * 0.8f, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -579,7 +579,7 @@ void func_80995A8C(EnSkb* this, PlayState* play) { } if ((this->unk_3D8 != 0) && ((play->gameplayFrames % 16) == 0)) { - this->unk_3DA = randPlusMinusPoint5Scaled(50000.0f); + this->unk_3DA = Rand_CenteredFloat(50000.0f); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer + this->unk_3DA, 1, 0x2EE, 0); 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 5c962978e..5e71d1a54 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -328,15 +328,15 @@ void EnSlime_Idle(EnSlime* this, PlayState* play) { timerFactor = sqrtf(this->timer) * 0.2f; EnSlime_Blink(this); - scale = ((sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f; + scale = ((Math_SinF(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f; this->actor.scale.x = scale; this->actor.scale.z = scale; if (this->timer < 24) { - this->actor.scale.y = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f; + this->actor.scale.y = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f; } - this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor; - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor; + this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * timerFactor; + this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * timerFactor; // If player is not wearing the stone mask, is within 280 units of the chuchu, // and the chuchu is facing the player, initialize chase/attack cycle. @@ -361,7 +361,7 @@ void EnSlime_SetupMoveInDirection(EnSlime* this) { if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 120.0f) { this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } else if (Rand_ZeroOne() < 0.7f) { - this->idleRotY = (s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.shape.rot.y; + this->idleRotY = (s32)Rand_CenteredFloat(0x4000) + this->actor.shape.rot.y; } this->actor.world.rot.y = this->actor.shape.rot.y; this->actionFunc = EnSlime_MoveInDirection; @@ -390,7 +390,7 @@ void EnSlime_MoveInDirection(EnSlime* this, PlayState* play) { } // Update actor scale, xz speed, and rotation to provide amorphous effect - sinFactor = fabsf(sin_rad(this->timer * (M_PI / 24))); + sinFactor = fabsf(Math_SinF(this->timer * (M_PI / 24))); Math_StepToF(&this->actor.scale.z, ((0.15f * sinFactor) + 1.0f) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * sinFactor)) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * sinFactor)) * 0.01f, 0.0002f); @@ -443,7 +443,7 @@ void EnSlime_MoveToHome(EnSlime* this, PlayState* play) { this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } - timerFactor = fabsf(sin_rad(this->timer * (M_PI / 24))); + timerFactor = fabsf(Math_SinF(this->timer * (M_PI / 24))); Math_StepToF(&this->actor.scale.z, ((0.15f * timerFactor) + 1.0f) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * timerFactor)) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * timerFactor)) * 0.01f, 0.0002f); @@ -567,14 +567,14 @@ void EnSlime_Land(EnSlime* this, PlayState* play) { this->timer--; scaleY = ((this->timer / 5) + 1) * 1.6f; rotXZ = sqrtf(this->timer) * 0.2f; - scaleXZ = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f; + scaleXZ = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f; this->actor.scale.x = scaleXZ; this->actor.scale.z = scaleXZ; if (this->timer < 15) { - this->actor.scale.y = (1.0f - (sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f; + this->actor.scale.y = (1.0f - (Math_SinF(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f; } - this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * rotXZ; - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * rotXZ; + this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * rotXZ; + this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * rotXZ; if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { EnSlime_SetupMoveToHome(this); @@ -623,16 +623,16 @@ void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play) { Math_StepToF(&this->actor.speed, 0.0f, 1.0f); timerFactor = sqrtf(this->timer); if (this->timer < 30) { - scale = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f; + scale = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f; this->actor.scale.x = scale; this->actor.scale.z = scale; } if (this->timer == 15) { this->collider.base.acFlags |= AC_ON; } - this->actor.scale.y = ((sin_rad((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f; - this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor; - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor; + this->actor.scale.y = ((Math_SinF((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f; + this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * timerFactor; + this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * timerFactor; if (this->timer == 0) { if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { @@ -680,9 +680,9 @@ void EnSlime_SetupDamaged(EnSlime* this, PlayState* play, s32 arg2) { EffectSsGSplash_Spawn(play, &effectPos, NULL, NULL, 1, 550); for (i = 0; i < 10; i++) { - effectPos.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x + ySin; - effectPos.y = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.y + 40.0f; - effectPos.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z + yCos; + effectPos.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x + ySin; + effectPos.y = Rand_CenteredFloat(10.0f) + this->actor.world.pos.y + 40.0f; + effectPos.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z + yCos; effectVelocity.x = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_SinS(this->actor.world.rot.y); effectVelocity.z = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_CosS(this->actor.world.rot.y); @@ -1184,9 +1184,9 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { } if (this->actionFunc == EnSlime_Damaged) { - wobbleScale.x = 1.0f - (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f); - wobbleScale.y = (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f; - wobbleScale.z = 1.0f - (cos_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f); + wobbleScale.x = 1.0f - (Math_SinF((f32)this->timer * (M_PI / 2.0f)) * 0.3f); + wobbleScale.y = (Math_SinF((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f; + wobbleScale.z = 1.0f - (Math_CosF((f32)this->timer * (M_PI / 2.0f)) * 0.3f); Matrix_RotateXFApply(this->wobbleRot.x); Matrix_RotateZF(this->wobbleRot.z, MTXMODE_APPLY); 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 ed3235345..e22a5a73b 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -475,18 +475,18 @@ void EnSnowman_ReadySnowball(EnSnowman* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000); if ((EN_SNOWMAN_GET_TYPE(&this->actor) != EN_SNOWMAN_TYPE_LARGE) && this->isHoldingSnowball && ((play->gameplayFrames % 2) != 0)) { - pos.x = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.x; - pos.y = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.y; - pos.z = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.z; + pos.x = Rand_CenteredFloat(10.0f) + this->snowballPos.x; + pos.y = Rand_CenteredFloat(10.0f) + this->snowballPos.y; + pos.z = Rand_CenteredFloat(10.0f) + this->snowballPos.z; func_800B0DE0(play, &pos, &sDustVelocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 500, 30); } else if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) { if ((this->skelAnime.curFrame > 3.0f) && (this->skelAnime.curFrame < 14.0f) && ((play->gameplayFrames % 2) != 0)) { - pos.x = (this->actor.world.pos.x + (70.0f * Math_SinS(this->actor.shape.rot.y))) + - randPlusMinusPoint5Scaled(40.0f); - pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(20.0f); - pos.z = (this->actor.world.pos.z + (70.0f * Math_CosS(this->actor.shape.rot.y))) + - randPlusMinusPoint5Scaled(40.0f); + pos.x = + (this->actor.world.pos.x + (70.0f * Math_SinS(this->actor.shape.rot.y))) + Rand_CenteredFloat(40.0f); + pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f); + pos.z = + (this->actor.world.pos.z + (70.0f * Math_CosS(this->actor.shape.rot.y))) + Rand_CenteredFloat(40.0f); func_800B0DE0(play, &pos, &sDustVelocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 1000, 150); } } @@ -619,8 +619,8 @@ void EnSnowman_Melt(EnSnowman* this, PlayState* play) { this->work.timer--; if ((this->work.timer >= 38) && (!(this->work.timer & 1))) { smokeVelocity.y = (this->work.timer - 38) * (1.0f / 12.0f); - smokeVelocity.x = randPlusMinusPoint5Scaled(1.5f) * smokeVelocity.y; - smokeVelocity.z = randPlusMinusPoint5Scaled(1.5f) * smokeVelocity.y; + smokeVelocity.x = Rand_CenteredFloat(1.5f) * smokeVelocity.y; + smokeVelocity.z = Rand_CenteredFloat(1.5f) * smokeVelocity.y; smokeVelocity.y += 0.8f; smokePos.x = ((smokeVelocity.x >= 0.0f ? 1.0f : -1.0f) * Rand_ZeroFloat(20.0f) * this->eenoScale) + this->actor.world.pos.x; 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 e86d1e1bd..12d8d22a8 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -536,9 +536,9 @@ void func_80BAB374(EnSuttari* this, PlayState* play) { Vec3f sp38; if ((curFrame % 3) == 0) { - sp38.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x; + sp38.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x; sp38.y = this->actor.world.pos.y; - sp38.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z; + sp38.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z; Actor_SpawnFloorDustRing(play, &this->actor, &sp38, 10.0f, 0, 2.0f, 0, 0, 0); } } @@ -623,7 +623,7 @@ s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) { sp54 = sp5C[index + 1].x - sp5C[index - 1].x; sp48 = sp5C[index + 1].z - sp5C[index - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(sp54, sp48)), &sp44, &sp40, &sp3C); if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } @@ -653,7 +653,7 @@ s32 func_80BAB8F4(EnSuttari* this, Path* path, s32 arg2) { sp54 = sp5C[index - 1].x - sp5C[index + 1].x; sp48 = sp5C[index - 1].z - sp5C[index + 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(sp54, sp48)), &sp44, &sp40, &sp3C); if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } 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 a705a8546..4937125dc 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -304,7 +304,7 @@ s32 func_808D91C4(EnSw* this, CollisionPoly* arg1) { return false; } - sp4C = func_80086C48(temp_f12); + sp4C = Math_FAcosF(temp_f12); if (sp4C < 0.001f) { return false; } diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index 5f5194523..af419ba23 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -292,9 +292,9 @@ s32 EnSyatekiCrow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, EnSyatekiCrow* this = THIS; if (limbIndex == OBJECT_CROW_LIMB_UPPER_TAIL) { - rot->y += (s16)(0xC00 * sin_rad(this->skelAnime.curFrame * (M_PI / 4))); + rot->y += (s16)(0xC00 * Math_SinF(this->skelAnime.curFrame * (M_PI / 4))); } else if (limbIndex == OBJECT_CROW_LIMB_TAIL) { - rot->y += (s16)(0x1400 * sin_rad((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); + rot->y += (s16)(0x1400 * Math_SinF((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); } return false; diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 324307d8a..91ed08140 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -404,7 +404,7 @@ void func_80A36CB0(EnSyatekiOkuta* this) { } } else if (this->actionFunc == func_80A36488) { this->unk_1D8.x = this->unk_1D8.z = 1.0f; - this->unk_1D8.y = (sin_rad((M_PI / 16) * curFrame) * 0.2f) + 1.0f; + this->unk_1D8.y = (Math_SinF((M_PI / 16) * curFrame) * 0.2f) + 1.0f; } else if (this->actionFunc == func_80A36504) { if (curFrame < 3.0f) { this->unk_1D8.y = 1.0f; @@ -440,7 +440,7 @@ s32 func_80A370EC(EnSyatekiOkuta* this, f32 arg1, Vec3f* arg2) { if (this->actionFunc == func_80A363B4) { arg2->y = 1.0f; arg2->z = 1.0f; - arg2->x = (sin_rad((M_PI / 16) * arg1) * 0.4f) + 1.0f; + arg2->x = (Math_SinF((M_PI / 16) * arg1) * 0.4f) + 1.0f; } else if (this->actionFunc == func_80A365EC) { if ((arg1 >= 35.0f) || (arg1 < 25.0f)) { return false; diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index 52aa71cad..347d78088 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -408,9 +408,9 @@ void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play) { s32 i; for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i--) { - firePos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - firePos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - firePos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + firePos.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + firePos.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + firePos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &firePos, &sFireVelocityAndAccel, &sFireVelocityAndAccel, 100, 0, 2); } } 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 495c16c13..c71676061 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -248,9 +248,9 @@ void func_80BB5318(EnTanron1* this, PlayState* play) { ptr->unk_20 = Math_Atan2S(temp.x, temp.z); ptr->unk_1E = Math_Atan2S(temp.y, sqrtf(SQXZ(temp))); if ((ptr->unk_26 & 0xF) == 0) { - ptr->unk_30 = randPlusMinusPoint5Scaled(temp_f30); - ptr->unk_34 = randPlusMinusPoint5Scaled(temp_f30 * 0.5f); - ptr->unk_38 = randPlusMinusPoint5Scaled(temp_f30); + ptr->unk_30 = Rand_CenteredFloat(temp_f30); + ptr->unk_34 = Rand_CenteredFloat(temp_f30 * 0.5f); + ptr->unk_38 = Rand_CenteredFloat(temp_f30); } temp.x = player->actor.world.pos.x - ptr->unk_00.x; @@ -336,7 +336,7 @@ void func_80BB5318(EnTanron1* this, PlayState* play) { Math_ApproachF(&ptr->unk_30, ptr->unk_34, 1.0f, 0.5f); if ((ptr->unk_26 & 0xF) == 0) { if (Rand_ZeroOne() < 0.5f) { - ptr->unk_34 = randPlusMinusPoint5Scaled(12.0f); + ptr->unk_34 = Rand_CenteredFloat(12.0f); } ptr->unk_3C = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp98, &ptr->unk_00); sp9C = ptr->unk_00.y; 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 dd4f389a3..785308dad 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -236,7 +236,7 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) { switch (this->unk_158) { case 0: if (Rand_ZeroOne() > 0.2f) { - sp32 = Rand_ZeroFloat(65536.0f); + sp32 = Rand_ZeroFloat(0x10000); } else { sp32 = Math_Atan2S(sp2C, sp28); } 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 b86b9c714..81a4ac2af 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -100,8 +100,8 @@ void EnTanron3_CreateEffect(PlayState* play, Vec3f* effectPos) { effectPtr->unk_34.y = 0.0f; effectPtr->unk_34.z = Rand_ZeroFloat(2 * M_PI); effectPtr->unk_02 = Rand_ZeroFloat(100.0f); - effectPtr->velocity.x = randPlusMinusPoint5Scaled(25.0f); - effectPtr->velocity.z = randPlusMinusPoint5Scaled(25.0f); + effectPtr->velocity.x = Rand_CenteredFloat(25.0f); + effectPtr->velocity.z = Rand_CenteredFloat(25.0f); break; } } @@ -155,9 +155,9 @@ void EnTanron3_SetupLive(EnTanron3* this, PlayState* play) { this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = 50; this->actor.speed = 5.0f; this->speedMaxStep = 0.5f; - this->deviation.x = randPlusMinusPoint5Scaled(500.0f); - this->deviation.y = randPlusMinusPoint5Scaled(100.0f); - this->deviation.z = randPlusMinusPoint5Scaled(500.0f); + this->deviation.x = Rand_CenteredFloat(500.0f); + this->deviation.y = Rand_CenteredFloat(100.0f); + this->deviation.z = Rand_CenteredFloat(500.0f); Math_Vec3f_Copy(&this->targetPos, &this->actor.world.pos); this->timer = Rand_ZeroFloat(100.0f); } @@ -245,9 +245,9 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { if (this->workTimer[WORK_TIMER_OUT_OF_WATER] == 0) { if ((this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0) && (this->actor.speed > 1.0f)) { this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = Rand_ZeroFloat(20.0f); - this->deviation.x = randPlusMinusPoint5Scaled(100.0f); - this->deviation.y = randPlusMinusPoint5Scaled(50.0f + extraScaleY); - this->deviation.z = randPlusMinusPoint5Scaled(100.0f); + this->deviation.x = Rand_CenteredFloat(100.0f); + this->deviation.y = Rand_CenteredFloat(50.0f + extraScaleY); + this->deviation.z = Rand_CenteredFloat(100.0f); } this->targetPosWithDeviation.y = this->targetPos.y + this->deviation.y + 50.0f; } @@ -297,17 +297,17 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { this->actor.speed = Rand_ZeroFloat(2.0f) + 2.0f; if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.x = - (s16)randPlusMinusPoint5Scaled(500.0f) + this->targetShapeRotation.x + 0x8000; + (s16)(s32)Rand_CenteredFloat(0x1F4) + this->targetShapeRotation.x + 0x8000; } if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.z = - (s16)randPlusMinusPoint5Scaled(500.0f) + this->targetShapeRotation.z + 0x8000; + (s16)(s32)Rand_CenteredFloat(0x1F4) + this->targetShapeRotation.z + 0x8000; } if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.y = (s16)Rand_ZeroFloat(0x10000); } this->actor.world.rot.y = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x) + - (s16)randPlusMinusPoint5Scaled(0xCE20); + (s16)(s32)Rand_CenteredFloat(0xCE20); } Math_ApproachS(&this->actor.shape.rot.y, this->targetShapeRotation.y, 3, 0x500); @@ -316,9 +316,9 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { if ((Rand_ZeroOne() < 0.5f) & !(this->timer & 0x3)) { Vec3f effectPos; - effectPos.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x; + effectPos.x = Rand_CenteredFloat(30.0f) + this->actor.world.pos.x; effectPos.y = this->actor.world.pos.y; - effectPos.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z; + effectPos.z = Rand_CenteredFloat(30.0f) + this->actor.world.pos.z; EnTanron3_CreateEffect(play, &effectPos); } break; 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 5c62c50ee..074eaec79 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -65,10 +65,9 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) { s32 i; for (i = 0; i < thisx->params; i++) { - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON4, - thisx->world.pos.x + randPlusMinusPoint5Scaled(500.0f), - thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f), - thisx->world.pos.z + randPlusMinusPoint5Scaled(500.0f), 0, Rand_ZeroFloat(65536.0f), 0, + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON4, thisx->world.pos.x + Rand_CenteredFloat(500.0f), + thisx->world.pos.y + Rand_CenteredFloat(100.0f), + thisx->world.pos.z + Rand_CenteredFloat(500.0f), 0, Rand_ZeroFloat(0x10000), 0, SEAGULL_CLONE); } } @@ -112,9 +111,9 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) { distToTarget = sqrtf(SQ(xDiff) + SQ(zDiff)); if ((this->timers[SEAGULL_TIMER_CHOOSE_TARGET] == 0) || (distToTarget < 100.0f)) { - this->targetPos.x = this->actor.home.pos.x + randPlusMinusPoint5Scaled(500.0f); - this->targetPos.y = this->actor.home.pos.y + randPlusMinusPoint5Scaled(100.0f); - this->targetPos.z = this->actor.home.pos.z + randPlusMinusPoint5Scaled(500.0f); + this->targetPos.x = this->actor.home.pos.x + Rand_CenteredFloat(500.0f); + this->targetPos.y = this->actor.home.pos.y + Rand_CenteredFloat(100.0f); + this->targetPos.z = this->actor.home.pos.z + Rand_CenteredFloat(500.0f); this->timers[SEAGULL_TIMER_CHOOSE_TARGET] = Rand_ZeroFloat(100.0f) + 60.0f; this->step = 0; @@ -151,7 +150,7 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) { case SEAGULL_FLY_GLIDE: if (((this->randRollTimer % 8) == 0) && (Rand_ZeroOne() < 0.5f)) { - this->rollTarget = randPlusMinusPoint5Scaled(3000.0f + KREG(44)); + this->rollTarget = Rand_CenteredFloat(3000.0f + KREG(44)); } if (this->timers[SEAGULL_TIMER_FLY_STATE] == 0) { @@ -192,9 +191,9 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) { distToTarget = sqrtf(SQ(xDiff) + SQ(zDiff)); if ((this->timers[SEAGULL_TIMER_CHOOSE_TARGET] == 0) || (distToTarget < 100.0f)) { - this->targetPos.x = targetActor->world.pos.x + randPlusMinusPoint5Scaled(200.0f + KREG(82)); - this->targetPos.y = targetActor->world.pos.y + KREG(80) + 100.0f + randPlusMinusPoint5Scaled(100.0f + KREG(81)); - this->targetPos.z = targetActor->world.pos.z + randPlusMinusPoint5Scaled(200.0f + KREG(82)); + this->targetPos.x = targetActor->world.pos.x + Rand_CenteredFloat(200.0f + KREG(82)); + this->targetPos.y = targetActor->world.pos.y + KREG(80) + 100.0f + Rand_CenteredFloat(100.0f + KREG(81)); + this->targetPos.z = targetActor->world.pos.z + Rand_CenteredFloat(200.0f + KREG(82)); this->timers[SEAGULL_TIMER_CHOOSE_TARGET] = Rand_ZeroFloat(100.0f) + 60.0f; this->step = 0; @@ -230,7 +229,7 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) { case SEAGULL_FLY_GLIDE: if (((this->randRollTimer % 8) == 0) && (Rand_ZeroOne() < 0.5f)) { - this->rollTarget = randPlusMinusPoint5Scaled(3000.0f + KREG(44)); + this->rollTarget = Rand_CenteredFloat(3000.0f + KREG(44)); } if (this->timers[SEAGULL_TIMER_FLY_STATE] == 0) { 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 18e24c5e7..a56b01c3b 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -101,9 +101,9 @@ void func_80BE4930(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { effect->unk_00 = *arg1; - effect->unk_0C = randPlusMinusPoint5Scaled(10.0f); + effect->unk_0C = Rand_CenteredFloat(10.0f); effect->unk_10 = Rand_ZeroFloat(2.0f) + 3.0f; - effect->unk_14 = randPlusMinusPoint5Scaled(10.0f); + effect->unk_14 = Rand_CenteredFloat(10.0f); effect->unk_18.y = -0.15f; effect->unk_18.x = 0.0f; @@ -127,9 +127,9 @@ void func_80BE4A2C(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { effect->unk_00 = *arg1; - effect->unk_0C = randPlusMinusPoint5Scaled(30.0f); + effect->unk_0C = Rand_CenteredFloat(30.0f); effect->unk_10 = Rand_ZeroFloat(7.0f); - effect->unk_14 = randPlusMinusPoint5Scaled(30.0f); + effect->unk_14 = Rand_CenteredFloat(30.0f); effect->unk_18.y = -0.3f; effect->unk_18.x = 0.0f; @@ -154,8 +154,8 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { return; } - this->unk_198 = randPlusMinusPoint5Scaled(0x2000); - this->unk_19A = randPlusMinusPoint5Scaled(0x2000); + this->unk_198 = Rand_CenteredFloat(0x2000); + this->unk_19A = Rand_CenteredFloat(0x2000); if (ENTANRON5_GET(&this->actor) < ENTANRON5_107) { Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * D_80BE5DD0); @@ -327,8 +327,8 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) { spAC = 50.0f; } - sp9C.x = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.x; - sp9C.z = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.z; + sp9C.x = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.x; + sp9C.z = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.z; sp9C.y = this->actor.floorHeight + (spAC * D_80BE5DD0); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, sp9C.x, sp9C.y, sp9C.z, 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 2bef1cda2..87589ae8c 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -193,12 +193,12 @@ void func_80C10984(EnThiefbird* this, s32 arg1) { for (i = 0; i < ARRAY_COUNT(this->unk_3F0); i++, ptr++) { if (ptr->unk_22 == 0) { ptr->unk_22 = (s32)Rand_ZeroFloat(20.0f) + 40; - ptr->unk_00.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.x; - ptr->unk_00.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.y; - ptr->unk_00.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.z; - ptr->unk_0C.x = randPlusMinusPoint5Scaled(5.0f); + ptr->unk_00.x = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.x; + ptr->unk_00.y = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.y; + ptr->unk_00.z = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.z; + ptr->unk_0C.x = Rand_CenteredFloat(5.0f); ptr->unk_0C.y = Rand_ZeroOne() + 2.0f; - ptr->unk_0C.z = randPlusMinusPoint5Scaled(5.0f); + ptr->unk_0C.z = Rand_CenteredFloat(5.0f); ptr->unk_1C = Rand_ZeroFloat(1000.0f); ptr->unk_18 = (Rand_ZeroFloat(20.0f) + 40.0f) * 0.0001f; ptr->unk_1E = (s32)Rand_Next() >> 0x10; 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 cfae13191..1ae0e073b 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -253,9 +253,9 @@ void func_80893BCC(EnTite* this, PlayState* play) { for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) { for (j = 0; j < 2; j++) { ptr = &this->limbPos[i]; - sp7C.x = ptr->x + randPlusMinusPoint5Scaled(1.0f); - sp7C.y = ptr->y + randPlusMinusPoint5Scaled(1.0f); - sp7C.z = ptr->z + randPlusMinusPoint5Scaled(1.0f); + sp7C.x = ptr->x + Rand_CenteredFloat(1.0f); + sp7C.y = ptr->y + Rand_CenteredFloat(1.0f); + sp7C.z = ptr->z + Rand_CenteredFloat(1.0f); func_800B0DE0(play, &sp7C, &gZeroVec3f, &D_80896B64, &D_80896B3C, &D_80896B40, (s32)Rand_ZeroFloat(16.0f) + 80, 15); } @@ -808,9 +808,9 @@ void func_80895738(EnTite* this, PlayState* play) { void func_8089595C(EnTite* this, PlayState* play) { Vec3f sp2C; - sp2C.x = randPlusMinusPoint5Scaled(20.0f) + this->actor.world.pos.x; + sp2C.x = Rand_CenteredFloat(20.0f) + this->actor.world.pos.x; sp2C.y = this->actor.world.pos.y + 15.0f; - sp2C.z = randPlusMinusPoint5Scaled(20.0f) + this->actor.world.pos.z; + sp2C.z = Rand_CenteredFloat(20.0f) + this->actor.world.pos.z; func_800B0DE0(play, &sp2C, &gZeroVec3f, &D_80896B44, &D_80896B3C, &D_80896B40, 500, 50); } 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 bf0f9cc31..29560fdce 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -499,9 +499,9 @@ void func_80AD434C(EnTrt2* this, PlayState* play) { Vec3f sp5C = { 0.0f, 0.5f, 0.0f }; for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i -= 2) { - sp68.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - sp68.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - sp68.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + sp68.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + sp68.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + sp68.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &sp68, &sp5C, &sp5C, 100, 0, 3); } @@ -592,7 +592,7 @@ s32 func_80AD475C(EnTrt2* this, Path* path, s32 arg2) { phi_f14 = points[arg + 1].z - points[arg - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; @@ -639,9 +639,9 @@ f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) { void func_80AD4A78(EnTrt2* this, PlayState* play) { Vec3f sp34; - sp34.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x; + sp34.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x; sp34.y = this->actor.world.pos.y; - sp34.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z; + sp34.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z; Actor_SpawnFloorDustRing(play, &this->actor, &sp34, 50.0f, 0, 2.0f, 0, 0, 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 6cd2641a1..f877a26a8 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 @@ -301,7 +301,7 @@ s32 func_80B76600(EnTruMt* this, Path* path, s32 arg2) { phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; } 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 b14f82424..c8ec8f8c4 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 @@ -159,9 +159,9 @@ void EnWaterEffect_Update(Actor* thisx, PlayState* play2) { if ((this->unk_DC4 % 32) == 0) { if (Rand_ZeroOne() < 0.5f) { Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); - sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; + sp88.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x; sp88.y = this->actor.world.pos.y; - sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; + sp88.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z; if ((this->actor.world.pos.y + this->actor.depthInWater) <= this->actor.floorHeight) { phi_v1 = 0; } else { @@ -367,9 +367,9 @@ void func_80A599E8(EnWaterEffect* this, Vec3f* arg1, u8 arg2) { if (arg2 >= 2) { if (arg2 == 2) { - ptr->unk_10.x = randPlusMinusPoint5Scaled(10.0f); + ptr->unk_10.x = Rand_CenteredFloat(10.0f); ptr->unk_10.y = Rand_ZeroFloat(3.0f) + 5.0f; - ptr->unk_10.z = randPlusMinusPoint5Scaled(10.0f); + ptr->unk_10.z = Rand_CenteredFloat(10.0f); } ptr->unk_2C.z = 0.0017f; ptr->unk_2C.x = 0.003f; @@ -421,9 +421,9 @@ void func_80A59C04(Actor* thisx, PlayState* play2) { if (this->unk_DC6 == 0) { this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f; Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); - sp74.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; + sp74.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x; sp74.y = this->actor.world.pos.y; - sp74.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; + sp74.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z; func_80A599E8(this, &sp74, 0); } } 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 b05bc4869..26301730f 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -489,9 +489,9 @@ void func_80990C6C(EnWf* this, PlayState* play, s32 arg2) { } for (i = 0; i < arg2; i++) { - sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; + sp88.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x; sp88.y = Rand_ZeroFloat(5.0f) + this->actor.world.pos.y; - sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; + sp88.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z; func_800B0F18(play, &sp88, &gZeroVec3f, &D_809942DC, phi_s1, phi_s1, phi_s6, 5, Rand_ZeroFloat(5.0f) + 14.0f); } @@ -1199,9 +1199,9 @@ void func_80992E0C(EnWf* this, PlayState* play) { this->unk_2A0--; for (i = (25 - this->unk_2A0) >> 1; i >= 0; i--) { - sp60.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - sp60.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - sp60.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + sp60.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + sp60.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + sp60.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &sp60, &D_809942F0, &D_809942F0, 100, 0, 2); } 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 7fd55f4ee..6ce68a0e3 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1297,7 +1297,7 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) { scaleStep = Rand_S16Offset(20, 10); Math_Vec3f_Copy(&pos, &this->ghostPos[i]); pos.x += (f32)Rand_S16Offset(20, 20) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1); - pos.y += 70.0f + randPlusMinusPoint5Scaled(30.0f); + pos.y += 70.0f + Rand_CenteredFloat(30.0f); pos.z += (f32)Rand_S16Offset(20, 20) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1); func_800B0DE0(play, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvTimer, Rand_S16Offset(350, 100), scaleStep); @@ -1419,9 +1419,9 @@ void EnWiz_PostLimbDrawXlu(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_MultVec3f(&staffFlamePos, &flamePos); - flamePos.x += randPlusMinusPoint5Scaled(4.0f); - flamePos.y += randPlusMinusPoint5Scaled(7.0f); - flamePos.z += randPlusMinusPoint5Scaled(5.0f); + flamePos.x += Rand_CenteredFloat(4.0f); + flamePos.y += Rand_CenteredFloat(7.0f); + flamePos.z += Rand_CenteredFloat(5.0f); func_800B3030(play, &flamePos, &gZeroVec3f, &gZeroVec3f, ((Rand_ZeroFloat(1.0f) * 50.0f) + 70.0f), 10, 1); SoundSource_PlaySfxAtFixedWorldPos(play, &flamePos, 10, NA_SE_EN_EXTINCT); } 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 8251a896b..e6fc7e776 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 @@ -152,7 +152,7 @@ void EnWiz_SetupMoveMagicProjectile(EnWizFire* this, PlayState* play) { Matrix_RotateXS(this->actor.world.rot.x, MTXMODE_APPLY); if (this->type != EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) { - velocity.z = randPlusMinusPoint5Scaled(2.0f) + 8.0f; + velocity.z = Rand_CenteredFloat(2.0f) + 8.0f; } else { velocity.z = 12.0f; } @@ -223,8 +223,8 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) { this->increaseLowestUsedIndexTimer = 10; Matrix_Push(); - Matrix_RotateYS((s16)randPlusMinusPoint5Scaled(0x100) + this->actor.world.rot.y, MTXMODE_NEW); - velocity.z = randPlusMinusPoint5Scaled(2.0f) + 8.0f; + Matrix_RotateYS((s16)(s32)Rand_CenteredFloat(0x100) + this->actor.world.rot.y, MTXMODE_NEW); + velocity.z = Rand_CenteredFloat(2.0f) + 8.0f; Matrix_MultVec3f(&velocity, &this->actor.velocity); Matrix_Pop(); @@ -257,7 +257,7 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WIZ_FIRE, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, arcingProjectileRotY, 0, EN_WIZ_FIRE_TYPE_ARCING_MAGIC_PROJECTILE); - arcingProjectileRotY += BINANG_ADD((s32)randPlusMinusPoint5Scaled(0x1000), 0x3333); + arcingProjectileRotY += BINANG_ADD((s32)Rand_CenteredFloat(0x1000), 0x10000 / 5); } Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); @@ -313,9 +313,9 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) { void EnWiz_SetupSmallFlame(EnWizFire* this, PlayState* play) { this->targetScale = 0.02f; this->timer = Rand_S16Offset(50, 50); - this->scaleMod.x = randPlusMinusPoint5Scaled(1.0f) * 0.007f; - this->scaleMod.y = randPlusMinusPoint5Scaled(1.0f) * 0.005f; - this->scaleMod.z = randPlusMinusPoint5Scaled(1.0f) * 0.007f; + this->scaleMod.x = Rand_CenteredFloat(1.0f) * 0.007f; + this->scaleMod.y = Rand_CenteredFloat(1.0f) * 0.005f; + this->scaleMod.z = Rand_CenteredFloat(1.0f) * 0.007f; this->actionFunc = EnWiz_SmallFlame; } @@ -379,13 +379,13 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) { Vec3f accel = { 0.0f, 0.0f, 0.0f }; Vec3f pos; - accel.x = randPlusMinusPoint5Scaled(3.0f) / 10.0f; + accel.x = Rand_CenteredFloat(3.0f) / 10.0f; accel.y = 0.23f; - accel.z = randPlusMinusPoint5Scaled(3.0f) / 10.0f; + accel.z = Rand_CenteredFloat(3.0f) / 10.0f; Math_Vec3f_Copy(&pos, &this->actor.world.pos); - pos.x += randPlusMinusPoint5Scaled(150.0f); - pos.z += randPlusMinusPoint5Scaled(150.0f); + pos.x += Rand_CenteredFloat(150.0f); + pos.z += Rand_CenteredFloat(150.0f); Math_ApproachF(&this->poolScale, 0.022f, 0.3f, 0.01f); this->collider.dim.radius = this->poolScale * 4300.0f; diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index 874e0a63e..cf4331ffa 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -264,8 +264,8 @@ void EnWood02_Init(Actor* thisx, PlayState* play) { case WOOD_LEAF_YELLOW: this->unk_14A[0] = 75; actorScale = 0.02f; - this->actor.velocity.x = randPlusMinusPoint5Scaled(6.0f); - this->actor.velocity.z = randPlusMinusPoint5Scaled(6.0f); + this->actor.velocity.x = Rand_CenteredFloat(6.0f); + this->actor.velocity.z = Rand_CenteredFloat(6.0f); this->actor.velocity.y = (Rand_ZeroOne() * 1.25f) + -3.1f; break; } @@ -409,7 +409,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) { for (i = 3; i >= 0; i--) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WOOD02, dropsSpawnPt.x, dropsSpawnPt.y, dropsSpawnPt.z, - 0, randPlusMinusPoint5Scaled(0xFFFF), 0, leavesParams); + 0, Rand_CenteredFloat(0xFFFF), 0, leavesParams); } } 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 1dbe5d2e8..9df560150 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -242,9 +242,9 @@ void EnYb_Disappear(EnYb* this, PlayState* play) { EnYb_UpdateAnimation(this, play); for (i = 3; i >= 0; i--) { - sp60.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - sp60.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - sp60.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + sp60.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + sp60.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + sp60.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &sp60, &D_80BFB2E8, &D_80BFB2E8, 100, 0, 2); } 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 979187532..96de52b88 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -394,9 +394,9 @@ void func_80B93D2C(EnZog* this, PlayState* play) { void func_80B93DE8(Vec3f* arg0, PlayState* play, s32 arg2) { Vec3f sp2C; - sp2C.x = randPlusMinusPoint5Scaled(30.0f) + arg0->x; + sp2C.x = Rand_CenteredFloat(30.0f) + arg0->x; sp2C.y = arg0->y + 3.0f; - sp2C.z = randPlusMinusPoint5Scaled(30.0f) + arg0->z; + sp2C.z = Rand_CenteredFloat(30.0f) + arg0->z; EffectSsKirakira_SpawnDispersed(play, &sp2C, &D_80B9598C, &D_80B95998, &D_80B959A4, &D_80B959A8, 1000, arg2); } @@ -865,9 +865,9 @@ void func_80B94E34(EnZog* this, PlayState* play) { Vec3f sp38; Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80B959AC, &sp38); - sp38.x += randPlusMinusPoint5Scaled(30.0f); + sp38.x += Rand_CenteredFloat(30.0f); sp38.y += 20.0f; - sp38.z += randPlusMinusPoint5Scaled(30.0f); + sp38.z += Rand_CenteredFloat(30.0f); if (WaterBox_GetSurface1(play, &play->colCtx, sp38.x, sp38.z, &sp38.y, &sp44) && (this->actor.world.pos.y < sp38.y)) { EffectSsGSplash_Spawn(play, &sp38, NULL, NULL, 1, 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 85468c59c..61805fd49 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c @@ -159,13 +159,13 @@ void func_80AE8DE4(ObjBigicicle* this, PlayState* play) { f32 temp_f20 = this->actor.scale.x * (50.0f / 3.0f); for (i = 0; i < 10; i++) { - sp98.x = (randPlusMinusPoint5Scaled(4.0f) * temp_f20) + this->actor.world.pos.x; + sp98.x = (Rand_CenteredFloat(4.0f) * temp_f20) + this->actor.world.pos.x; sp98.y = ((Rand_ZeroFloat(20.0f) - 35.0f) * temp_f20) + this->actor.world.pos.y; - sp98.z = (randPlusMinusPoint5Scaled(4.0f) * temp_f20) + this->actor.world.pos.z; + sp98.z = (Rand_CenteredFloat(4.0f) * temp_f20) + this->actor.world.pos.z; - sp8C.x = randPlusMinusPoint5Scaled(13.0f); + sp8C.x = Rand_CenteredFloat(13.0f); sp8C.y = Rand_ZeroFloat(2.0f); - sp8C.z = randPlusMinusPoint5Scaled(13.0f); + sp8C.z = Rand_CenteredFloat(13.0f); EffectSsHahen_Spawn(play, &sp98, &sp8C, &D_80AE987C, HAHEN_XLU, (Rand_ZeroFloat(20.0f) + 30.0f) * temp_f20, OBJECT_BIGICICLE, 40, object_bigicicle_DL_0009B0); @@ -222,8 +222,8 @@ void func_80AE9180(ObjBigicicle* this, PlayState* play) { if (this->unk_14A > 0) { this->unk_14A--; - this->actor.shape.rot.x = BINANG_ADD((s32)(randPlusMinusPoint5Scaled(1408.0f) * 0.02f * this->unk_14A), 0x4000); - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(1408.0f) * 0.02f * this->unk_14A; + this->actor.shape.rot.x = BINANG_ADD((s32)(Rand_CenteredFloat(0x580) * 0.02f * this->unk_14A), 0x4000); + this->actor.shape.rot.z = Rand_CenteredFloat(0x580) * 0.02f * this->unk_14A; } else { this->actor.shape.rot.x = 0x4000; this->actor.shape.rot.z = 0; @@ -271,9 +271,9 @@ void func_80AE939C(ObjBigicicle* this, PlayState* play) { f32 temp_f20 = this->actor.scale.x * (50.0f / 3.0f); for (i = 0; i < 20; i++) { - sp8C.x = randPlusMinusPoint5Scaled(15.0f); + sp8C.x = Rand_CenteredFloat(15.0f); sp8C.y = Rand_ZeroFloat(7.0f) + 3.0f; - sp8C.z = randPlusMinusPoint5Scaled(15.0f); + sp8C.z = Rand_CenteredFloat(15.0f); sp98.x = this->actor.world.pos.x + (sp8C.x * 5.0f * temp_f20); sp98.y = this->actor.world.pos.y + (sp8C.y * 7.0f * temp_f20); 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 c2270f15b..4971b39bc 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -119,7 +119,7 @@ u32 func_80BB9A1C(ObjChan* this, f32 arg1) { sp20 = Math_SinS(this->unk1D4) * this->unk1D0; temp_f6 = (Math_CosS(this->unk1D4) * (400 * M_PI / 0x8000) * this->unk1D0) + arg1; if (temp_f6 != 0.0f) { - this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * (400 * M_PI / 0x8000), temp_f6)); + this->unk1D4 = RAD_TO_BINANG(Math_FAtan2F(sp20 * (400 * M_PI / 0x8000), temp_f6)); } else if (sp20 >= 0.0f) { this->unk1D4 = 0x4000; } else { 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 4cc81013e..7559c4db7 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -130,8 +130,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { this->unk_18C = 0; Math_Vec3f_Copy(&sp40, &player->actor.world.pos); - sp40.x += randPlusMinusPoint5Scaled(10.0f); - sp40.z += randPlusMinusPoint5Scaled(10.0f); + sp40.x += Rand_CenteredFloat(10.0f); + sp40.z += Rand_CenteredFloat(10.0f); sp40.y += Rand_ZeroFloat(2.0f); EffectSsGSplash_Spawn(play, &sp40, NULL, NULL, 2.0f * Rand_ZeroOne(), 1); @@ -144,8 +144,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { Math_Vec3f_Copy(&sp40, &player->actor.world.pos); this->unk_18C = 0; - sp40.x += randPlusMinusPoint5Scaled(10.0f); - sp40.z += randPlusMinusPoint5Scaled(10.0f); + sp40.x += Rand_CenteredFloat(10.0f); + sp40.z += Rand_CenteredFloat(10.0f); sp40.y += Rand_ZeroFloat(45.0f); EffectSsGSplash_Spawn(play, &sp40, NULL, NULL, 1, 1); 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 10937f985..d1601e69d 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 @@ -156,9 +156,9 @@ void func_80931828(ObjIcePoly* this, PlayState* play) { temp = spA0.y - sp90; for (i = 0; i < 30; i++) { - sp94.x = randPlusMinusPoint5Scaled(12.0f); + sp94.x = Rand_CenteredFloat(12.0f); sp94.y = Rand_ZeroFloat(15.0f); - sp94.z = randPlusMinusPoint5Scaled(12.0f); + sp94.z = Rand_CenteredFloat(12.0f); spA0.x = (this->colliders1[0].dim.radius * (sp94.x * (1.0f / 12))) + this->actor.world.pos.x; spA0.z = (this->colliders1[0].dim.radius * (sp94.z * (1.0f / 12))) + this->actor.world.pos.z; 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 aeaddd2ee..6eac0ddbc 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c @@ -141,10 +141,10 @@ void func_80B9B9C8(ObjTaru* this, PlayState* play) { for (i = 0; i < 4; i++) { for (j = phi_fp; j < phi_s5; j++) { - temp_fs0 = randPlusMinusPoint5Scaled(10.0f) + -105.0f + (j * 30.0f); - temp_fs1 = randPlusMinusPoint5Scaled(4.0f); + temp_fs0 = Rand_CenteredFloat(10.0f) + -105.0f + (j * 30.0f); + temp_fs1 = Rand_CenteredFloat(4.0f); spD8.x = temp_fs0 * cos; - spD8.y = randPlusMinusPoint5Scaled(10.0f) + 15.0f + (i * 30.0f); + spD8.y = Rand_CenteredFloat(10.0f) + 15.0f + (i * 30.0f); spD8.z = temp_fs0 * sin; spCC.x = (spD8.x * 0.05f) + (temp_fs1 * sin); spCC.y = Rand_ZeroFloat(5.0f) + 2.0f; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 9bf780859..bbde013ef 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -6280,9 +6280,9 @@ void func_80836C70(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex) for (i = 0; i < 4; i++) { Vec3f velocity; - velocity.x = randPlusMinusPoint5Scaled(4.0f); + velocity.x = Rand_CenteredFloat(4.0f); velocity.y = Rand_ZeroFloat(2.0f); - velocity.z = randPlusMinusPoint5Scaled(4.0f); + velocity.z = Rand_CenteredFloat(4.0f); D_8085D130.y = -0.2f; EffectSsHahen_Spawn(play, &this->bodyPartsPos[bodyPartIndex], &velocity, &D_8085D130, 0, 10, OBJECT_LINK_NUTS, 16, object_link_nuts_DL_008860); @@ -9507,9 +9507,9 @@ void func_8083F57C(Player* this, PlayState* play) { } void func_8083F828(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) { - arg1->x = randPlusMinusPoint5Scaled(arg3) + arg0->x; - arg1->y = randPlusMinusPoint5Scaled(arg4) + (arg0->y + arg2); - arg1->z = randPlusMinusPoint5Scaled(arg3) + arg0->z; + arg1->x = Rand_CenteredFloat(arg3) + arg0->x; + arg1->y = Rand_CenteredFloat(arg4) + (arg0->y + arg2); + arg1->z = Rand_CenteredFloat(arg3) + arg0->z; } Color_RGBA8 D_8085D26C = { 255, 255, 255, 255 }; @@ -9528,8 +9528,8 @@ s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 r count = (count >= ABS_ALT(countMax)) ? ABS_ALT(countMax) : count; for (i = 0; i < count; i++) { func_8083F828(&this->actor.world.pos, &pos, 0.0f, 40.0f, 10.0f); - D_8085D27C.x = randPlusMinusPoint5Scaled(3.0f); - D_8085D27C.z = randPlusMinusPoint5Scaled(3.0f); + D_8085D27C.x = Rand_CenteredFloat(3.0f); + D_8085D27C.z = Rand_CenteredFloat(3.0f); EffectSsDust_Spawn(play, 0, &pos, &D_8085D27C, &D_8085D270, &D_8085D26C, &D_8085D26C, scale, scaleStep, 42, 0); } @@ -9555,9 +9555,9 @@ s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 r count = (count >= countMax) ? countMax : count; for (i = 0; i < count; i++) { func_8083F828(&this->actor.world.pos, &pos, 0.0f, 20.0f, 20.0f); - velocity.x = randPlusMinusPoint5Scaled(3.0f); + velocity.x = Rand_CenteredFloat(3.0f); velocity.y = Rand_ZeroFloat(2.0f); - velocity.z = randPlusMinusPoint5Scaled(3.0f); + velocity.z = Rand_CenteredFloat(3.0f); D_8085D288.y = -0.1f; EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip); } @@ -11237,9 +11237,9 @@ void func_808445C4(PlayState* play, Player* this) { randIndex = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); bodyPartsPos = randIndex + this->bodyPartsPos; - pos.x = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; - pos.y = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; - pos.z = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; + pos.x = (Rand_CenteredFloat(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; + pos.y = (Rand_CenteredFloat(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; + pos.z = (Rand_CenteredFloat(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1); func_800B8F98(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); } @@ -19575,9 +19575,9 @@ void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) { this->rightHandType = 0xFF; } else { posInfo = &D_8085E368[this->transformation]; - randPos.x = randPlusMinusPoint5Scaled(posInfo->range.x) + posInfo->base.x; - randPos.y = randPlusMinusPoint5Scaled(posInfo->range.y) + posInfo->base.y; - randPos.z = randPlusMinusPoint5Scaled(posInfo->range.z) + posInfo->base.z; + randPos.x = Rand_CenteredFloat(posInfo->range.x) + posInfo->base.x; + randPos.y = Rand_CenteredFloat(posInfo->range.y) + posInfo->base.y; + randPos.z = Rand_CenteredFloat(posInfo->range.z) + posInfo->base.z; SkinMatrix_Vec3fMtxFMultXYZ(&this->shieldMf, &randPos, &effectPos); EffectSsKirakira_SpawnDispersed(play, &effectPos, &gZeroVec3f, &gZeroVec3f, &D_8085E3A4, &D_8085E3A8, 600, -10); } diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c index 14d5d5c6e..cf019c6cf 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c @@ -60,7 +60,7 @@ u32 EffectSsEnIce_Init(PlayState* play, u32 index, EffectSs* this, void* initPar this->rEnvColorG = initParams->envColor.g; this->rEnvColorB = initParams->envColor.b; this->rAlphaMode = 1; - this->rPitch = randPlusMinusPoint5Scaled(0x10000); + this->rPitch = Rand_CenteredFloat(0x10000); } else if (initParams->type == ENICE_TYPE_NORMAL) { Math_Vec3f_Copy(&this->pos, &initParams->pos); Math_Vec3f_Copy(&this->vec, &initParams->pos); @@ -142,7 +142,7 @@ void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) { } else { this->actor = NULL; if (this->life >= 9) { - rand = randPlusMinusPoint5Scaled(0xFFFF); + rand = Rand_CenteredFloat(0xFFFF); this->accel.x = Math_SinS(rand) * (Rand_ZeroOne() + 1.0f); this->accel.z = Math_CosS(rand) * (Rand_ZeroOne() + 1.0f); this->life = 8; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index f2038c768..4edc1e3b1 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -90,9 +90,9 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) { Player* player = GET_PLAYER(play); randBodyPart = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); - this->pos.x = player->bodyPartsPos[randBodyPart].x + randPlusMinusPoint5Scaled(10.0f); - this->pos.y = player->bodyPartsPos[randBodyPart].y + randPlusMinusPoint5Scaled(15.0f); - this->pos.z = player->bodyPartsPos[randBodyPart].z + randPlusMinusPoint5Scaled(10.0f); + this->pos.x = player->bodyPartsPos[randBodyPart].x + Rand_CenteredFloat(10.0f); + this->pos.y = player->bodyPartsPos[randBodyPart].y + Rand_CenteredFloat(15.0f); + this->pos.z = player->bodyPartsPos[randBodyPart].z + Rand_CenteredFloat(10.0f); } else if ((this->rParams >= FHGFLASH_SHOCK_GOHT_2) && (this->rParams <= FHGFLASH_SHOCK_GOHT_6)) { s32 pad; Vec3f* bodyPartPos; @@ -105,9 +105,9 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) { bodyPartPos = &goht->unk_2F00[this->rParams][index].unk_00; } - this->pos.x = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->x; - this->pos.y = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->y; - this->pos.z = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->z; + this->pos.x = Rand_CenteredFloat(70.0f) + bodyPartPos->x; + this->pos.y = Rand_CenteredFloat(70.0f) + bodyPartPos->y; + this->pos.z = Rand_CenteredFloat(70.0f) + bodyPartPos->z; } if (this->life < 100) { this->rAlpha -= 50; diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c index 4e395141b..4e8f11f5c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c @@ -139,8 +139,8 @@ void func_80977DB4(PlayState* play, u32 index, EffectSs* this) { void func_80977E6C(PlayState* play, u32 index, EffectSs* this) { this->velocity.x *= 0.95f; this->velocity.z *= 0.95f; - this->accel.x = randPlusMinusPoint5Scaled(0.2f); - this->accel.z = randPlusMinusPoint5Scaled(0.2f); + this->accel.x = Rand_CenteredFloat(0.2f); + this->accel.z = Rand_CenteredFloat(0.2f); this->rEnvColorA += this->rAlphaStep; if (this->rEnvColorA < 0) { diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c index f79e59340..69b24c029 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c @@ -68,7 +68,7 @@ u32 EffectSsSbn_Init(PlayState* play, u32 index, EffectSs* this, void* initParam this->rReg4 = 250; this->rReg4Step = 30; - this->rScale = randPlusMinusPoint5Scaled(100.0f) + (initParams->scale * 120.0f); + this->rScale = Rand_CenteredFloat(100.0f) + (initParams->scale * 120.0f); if (this->rScale < 600) { this->rScale = 600; } else if (this->rScale > 1500) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e4f96e594..1d38ccc2e 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -166,39 +166,39 @@ 0x80086588:("SystemHeap_RunInits",), 0x800865F8:("SystemHeap_Init",), 0x80086620:("PadSetup_Init",), - 0x80086760:("func_80086760",), - 0x80086794:("func_80086794",), - 0x800867B4:("func_800867B4",), - 0x800867D4:("func_800867D4",), - 0x800867F4:("func_800867F4",), - 0x80086814:("func_80086814",), - 0x80086834:("func_80086834",), - 0x80086880:("func_80086880",), - 0x800869A4:("func_800869A4",), - 0x80086AF0:("func_80086AF0",), - 0x80086B30:("func_80086B30",), - 0x80086C18:("func_80086C18",), - 0x80086C48:("func_80086C48",), - 0x80086C70:("func_80086C70",), - 0x80086C7C:("func_80086C7C",), - 0x80086C88:("func_80086C88",), - 0x80086C98:("func_80086C98",), - 0x80086CA8:("func_80086CA8",), - 0x80086CB4:("func_80086CB4",), - 0x80086CC0:("func_80086CC0",), - 0x80086CD0:("func_80086CD0",), - 0x80086CE0:("func_80086CE0",), - 0x80086CEC:("func_80086CEC",), - 0x80086CF8:("func_80086CF8",), - 0x80086D08:("func_80086D08",), - 0x80086D18:("func_80086D18",), - 0x80086D24:("func_80086D24",), - 0x80086D30:("func_80086D30",), - 0x80086D40:("func_80086D40",), - 0x80086D50:("func_80086D50",), - 0x80086D6C:("func_80086D6C",), - 0x80086D8C:("func_80086D8C",), - 0x80086DAC:("func_80086DAC",), + 0x80086760:("Math_FTanF",), + 0x80086794:("Math_FFloorF",), + 0x800867B4:("Math_FCeilF",), + 0x800867D4:("Math_FRoundF",), + 0x800867F4:("Math_FTruncF",), + 0x80086814:("Math_FNearbyIntF",), + 0x80086834:("Math_FAtanTaylorQF",), + 0x80086880:("Math_FAtanTaylorF",), + 0x800869A4:("Math_FAtanContFracF",), + 0x80086AF0:("Math_FAtanF",), + 0x80086B30:("Math_FAtan2F",), + 0x80086C18:("Math_FAsinF",), + 0x80086C48:("Math_FAcosF",), + 0x80086C70:("floorf",), + 0x80086C7C:("floor",), + 0x80086C88:("lfloorf",), + 0x80086C98:("lfloor",), + 0x80086CA8:("ceilf",), + 0x80086CB4:("ceil",), + 0x80086CC0:("lceilf",), + 0x80086CD0:("lceil",), + 0x80086CE0:("truncf",), + 0x80086CEC:("trunc",), + 0x80086CF8:("ltruncf",), + 0x80086D08:("ltrunc",), + 0x80086D18:("nearbyintf",), + 0x80086D24:("nearbyint",), + 0x80086D30:("lnearbyintf",), + 0x80086D40:("lnearbyint",), + 0x80086D50:("roundf",), + 0x80086D6C:("round",), + 0x80086D8C:("lroundf",), + 0x80086DAC:("lround",), 0x80086DD0:("SystemArena_Malloc",), 0x80086DF8:("SystemArena_MallocR",), 0x80086E20:("SystemArena_Realloc",), @@ -3248,13 +3248,13 @@ 0x801791CC:("Check_DrawRegionLockErrorMessage",), 0x80179260:("Check_ExpansionPak",), 0x801792A4:("Check_RegionIsSupported",), - 0x80179300:("func_80179300",), - 0x80179400:("func_80179400",), - 0x801794C4:("pow_int",), - 0x801794EC:("sin_rad",), - 0x80179540:("cos_rad",), + 0x80179300:("Math_FactorialF",), + 0x80179400:("Math_Factorial",), + 0x801794C4:("Math_PowF",), + 0x801794EC:("Math_SinF",), + 0x80179540:("Math_CosF",), 0x80179594:("Rand_ZeroFloat",), - 0x801795C0:("randPlusMinusPoint5Scaled",), + 0x801795C0:("Rand_CenteredFloat",), 0x801795F0:("Math3D_Normalize",), 0x80179678:("Math3D_PlaneVsLineSegClosestPoint",), 0x80179798:("func_80179798",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 286653e13..a755cc88c 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -18,10 +18,16 @@ simpleReplace = { wordReplace = { # Functions "Actor_GetSwitchFlag": "Flags_GetSwitch", - # "Math_FAtan2F": "Math_Atan2S_XY", // All old Math_FAtan2F should be renamed, so func_80086B30 can be renamed to Math_FAtan2F "Math_Acot2F": "Math_Atan2F_XY", "atan_flip": "Math_Atan2F_XY", "atans": "Math_Atan2S", + "sin_rad": "Math_SinF", + "cos_rad": "Math_CosF", + "randPlusMinusPoint5Scaled": "Rand_CenteredFloat", + # "Math_FAtan2F": "Math_Atan2S_XY", // Old Math_FAtan2F was renamed + "func_80086B30": "Math_FAtan2F", + "func_80086760": "Math_FTanF", + "func_80086C48": "Math_FAcosF", # "SysMatrix_StateAlloc": "Matrix_StateAlloc", # "SysMatrix_StatePush": "Matrix_StatePush", diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 744376bcc..ecc9eed27 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -163,39 +163,39 @@ 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/func_80086760.s,func_80086760,0x80086760,0xD -asm/non_matchings/boot/boot_80086760/func_80086794.s,func_80086794,0x80086794,0x8 -asm/non_matchings/boot/boot_80086760/func_800867B4.s,func_800867B4,0x800867B4,0x8 -asm/non_matchings/boot/boot_80086760/func_800867D4.s,func_800867D4,0x800867D4,0x8 -asm/non_matchings/boot/boot_80086760/func_800867F4.s,func_800867F4,0x800867F4,0x8 -asm/non_matchings/boot/boot_80086760/func_80086814.s,func_80086814,0x80086814,0x8 -asm/non_matchings/boot/boot_80086760/func_80086834.s,func_80086834,0x80086834,0x13 -asm/non_matchings/boot/boot_80086760/func_80086880.s,func_80086880,0x80086880,0x49 -asm/non_matchings/boot/boot_80086760/func_800869A4.s,func_800869A4,0x800869A4,0x53 -asm/non_matchings/boot/boot_80086760/func_80086AF0.s,func_80086AF0,0x80086AF0,0x10 -asm/non_matchings/boot/boot_80086760/func_80086B30.s,func_80086B30,0x80086B30,0x3A -asm/non_matchings/boot/boot_80086760/func_80086C18.s,func_80086C18,0x80086C18,0xC -asm/non_matchings/boot/boot_80086760/func_80086C48.s,func_80086C48,0x80086C48,0xA -asm/non_matchings/boot/fp/func_80086C70.s,func_80086C70,0x80086C70,0x3 -asm/non_matchings/boot/fp/func_80086C7C.s,func_80086C7C,0x80086C7C,0x3 -asm/non_matchings/boot/fp/func_80086C88.s,func_80086C88,0x80086C88,0x4 -asm/non_matchings/boot/fp/func_80086C98.s,func_80086C98,0x80086C98,0x4 -asm/non_matchings/boot/fp/func_80086CA8.s,func_80086CA8,0x80086CA8,0x3 -asm/non_matchings/boot/fp/func_80086CB4.s,func_80086CB4,0x80086CB4,0x3 -asm/non_matchings/boot/fp/func_80086CC0.s,func_80086CC0,0x80086CC0,0x4 -asm/non_matchings/boot/fp/func_80086CD0.s,func_80086CD0,0x80086CD0,0x4 -asm/non_matchings/boot/fp/func_80086CE0.s,func_80086CE0,0x80086CE0,0x3 -asm/non_matchings/boot/fp/func_80086CEC.s,func_80086CEC,0x80086CEC,0x3 -asm/non_matchings/boot/fp/func_80086CF8.s,func_80086CF8,0x80086CF8,0x4 -asm/non_matchings/boot/fp/func_80086D08.s,func_80086D08,0x80086D08,0x4 -asm/non_matchings/boot/fp/func_80086D18.s,func_80086D18,0x80086D18,0x3 -asm/non_matchings/boot/fp/func_80086D24.s,func_80086D24,0x80086D24,0x3 -asm/non_matchings/boot/fp/func_80086D30.s,func_80086D30,0x80086D30,0x4 -asm/non_matchings/boot/fp/func_80086D40.s,func_80086D40,0x80086D40,0x4 -asm/non_matchings/boot/fp/func_80086D50.s,func_80086D50,0x80086D50,0x7 -asm/non_matchings/boot/fp/func_80086D6C.s,func_80086D6C,0x80086D6C,0x8 -asm/non_matchings/boot/fp/func_80086D8C.s,func_80086D8C,0x80086D8C,0x8 -asm/non_matchings/boot/fp/func_80086DAC.s,func_80086DAC,0x80086DAC,0x9 +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/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 +asm/non_matchings/boot/fp/lfloor.s,lfloor,0x80086C98,0x4 +asm/non_matchings/boot/fp/ceilf.s,ceilf,0x80086CA8,0x3 +asm/non_matchings/boot/fp/ceil.s,ceil,0x80086CB4,0x3 +asm/non_matchings/boot/fp/lceilf.s,lceilf,0x80086CC0,0x4 +asm/non_matchings/boot/fp/lceil.s,lceil,0x80086CD0,0x4 +asm/non_matchings/boot/fp/truncf.s,truncf,0x80086CE0,0x3 +asm/non_matchings/boot/fp/trunc.s,trunc,0x80086CEC,0x3 +asm/non_matchings/boot/fp/ltruncf.s,ltruncf,0x80086CF8,0x4 +asm/non_matchings/boot/fp/ltrunc.s,ltrunc,0x80086D08,0x4 +asm/non_matchings/boot/fp/nearbyintf.s,nearbyintf,0x80086D18,0x3 +asm/non_matchings/boot/fp/nearbyint.s,nearbyint,0x80086D24,0x3 +asm/non_matchings/boot/fp/lnearbyintf.s,lnearbyintf,0x80086D30,0x4 +asm/non_matchings/boot/fp/lnearbyint.s,lnearbyint,0x80086D40,0x4 +asm/non_matchings/boot/fp/roundf.s,roundf,0x80086D50,0x7 +asm/non_matchings/boot/fp/round.s,round,0x80086D6C,0x8 +asm/non_matchings/boot/fp/lroundf.s,lroundf,0x80086D8C,0x8 +asm/non_matchings/boot/fp/lround.s,lround,0x80086DAC,0x9 asm/non_matchings/boot/system_malloc/SystemArena_Malloc.s,SystemArena_Malloc,0x80086DD0,0xA asm/non_matchings/boot/system_malloc/SystemArena_MallocR.s,SystemArena_MallocR,0x80086DF8,0xA asm/non_matchings/boot/system_malloc/SystemArena_Realloc.s,SystemArena_Realloc,0x80086E20,0xC diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 3d5839a69..834b933ef 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2762,13 +2762,13 @@ asm/non_matchings/code/sys_initial_check/Check_DrawExpansionPakErrorMessage.s,Ch asm/non_matchings/code/sys_initial_check/Check_DrawRegionLockErrorMessage.s,Check_DrawRegionLockErrorMessage,0x801791CC,0x25 asm/non_matchings/code/sys_initial_check/Check_ExpansionPak.s,Check_ExpansionPak,0x80179260,0x11 asm/non_matchings/code/sys_initial_check/Check_RegionIsSupported.s,Check_RegionIsSupported,0x801792A4,0x17 -asm/non_matchings/code/sys_math/func_80179300.s,func_80179300,0x80179300,0x40 -asm/non_matchings/code/sys_math/func_80179400.s,func_80179400,0x80179400,0x31 -asm/non_matchings/code/sys_math/pow_int.s,pow_int,0x801794C4,0xA -asm/non_matchings/code/sys_math/sin_rad.s,sin_rad,0x801794EC,0x15 -asm/non_matchings/code/sys_math/cos_rad.s,cos_rad,0x80179540,0x15 +asm/non_matchings/code/sys_math/Math_FactorialF.s,Math_FactorialF,0x80179300,0x40 +asm/non_matchings/code/sys_math/Math_Factorial.s,Math_Factorial,0x80179400,0x31 +asm/non_matchings/code/sys_math/Math_PowF.s,Math_PowF,0x801794C4,0xA +asm/non_matchings/code/sys_math/Math_SinF.s,Math_SinF,0x801794EC,0x15 +asm/non_matchings/code/sys_math/Math_CosF.s,Math_CosF,0x80179540,0x15 asm/non_matchings/code/sys_math/Rand_ZeroFloat.s,Rand_ZeroFloat,0x80179594,0xB -asm/non_matchings/code/sys_math/randPlusMinusPoint5Scaled.s,randPlusMinusPoint5Scaled,0x801795C0,0xC +asm/non_matchings/code/sys_math/Rand_CenteredFloat.s,Rand_CenteredFloat,0x801795C0,0xC asm/non_matchings/code/sys_math3d/Math3D_Normalize.s,Math3D_Normalize,0x801795F0,0x22 asm/non_matchings/code/sys_math3d/Math3D_PlaneVsLineSegClosestPoint.s,Math3D_PlaneVsLineSegClosestPoint,0x80179678,0x48 asm/non_matchings/code/sys_math3d/func_80179798.s,func_80179798,0x80179798,0xAB From 4cce44466170344b68b146cfbec6d9597d0910bb Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 5 Jun 2023 20:13:47 -0700 Subject: [PATCH 49/51] Misc cleanup (#1273) * this2 -> thisx * exchangeItemId enums * Sleep_Cycles * ENENCOUNT1_PATH_INDEX_NONE * Fram enums --- include/z64.h | 8 +- src/boot_O2/sleep.c | 4 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 4 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 2 +- .../actors/ovl_En_Encount1/z_en_encount1.h | 2 + src/overlays/actors/ovl_En_In/z_en_in.c | 8 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 30 +++---- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 18 ++-- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 6 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 9 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 4 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 4 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 89 ++++++++++--------- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 6 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 15 ++-- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 24 ++--- .../ovl_Obj_Grass_Carry/z_obj_grass_carry.c | 30 +++---- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 21 +++-- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 6 +- 19 files changed, 147 insertions(+), 143 deletions(-) diff --git a/include/z64.h b/include/z64.h index 6418b43ca..637f28dc4 100644 --- a/include/z64.h +++ b/include/z64.h @@ -657,7 +657,7 @@ typedef struct { #define FLASHROM_REQUEST_WRITE 1 #define FLASHROM_REQUEST_READ 2 -typedef enum framCommand { +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 @@ -681,15 +681,15 @@ typedef enum framCommand { FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000, /* unk */ FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000 -} framCommand; +} FramCommand; -typedef enum framMode { +typedef enum FramMode { /* 0 */ FRAM_MODE_NOP, /* 1 */ FRAM_MODE_ERASE, /* 2 */ FRAM_MODE_WRITE, /* 3 */ FRAM_MODE_READ, /* 4 */ FRAM_MODE_STATUS -} framMode; +} FramMode; typedef enum { /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, diff --git a/src/boot_O2/sleep.c b/src/boot_O2/sleep.c index 01a85c5cc..a35abc5b2 100644 --- a/src/boot_O2/sleep.c +++ b/src/boot_O2/sleep.c @@ -2,10 +2,10 @@ void Sleep_Cycles(u64 time) { OSMesgQueue mq; - OSMesg msg; + OSMesg msg[1]; OSTimer timer; - osCreateMesgQueue(&mq, &msg, OS_MESG_BLOCK); + osCreateMesgQueue(&mq, msg, ARRAY_COUNT(msg)); osSetTimer(&timer, time, 0, &mq, NULL); osRecvMesg(&mq, NULL, OS_MESG_BLOCK); } 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 0bbb53686..2568d6617 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -480,10 +480,10 @@ s32 func_80BDEC2C(EnAl* this, PlayState* play) { if ((this->unk_4C2 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_4C2 &= ~0x1800; - if (player->exchangeItemId == 0x33) { + if (player->exchangeItemId == PLAYER_IA_LETTER_MAMA) { this->unk_4C2 |= 0x800; this->unk_4F4 = player->exchangeItemId; - } else if (player->exchangeItemId != 0) { + } else if (player->exchangeItemId != PLAYER_IA_NONE) { this->unk_4C2 |= 0x1000; this->unk_4F4 = player->exchangeItemId; } 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 3d8224039..737ffd2d3 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -67,7 +67,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) { } if (this->type == EN_ENCOUNT1_SKULLFISH_2) { this->pathIndex = ENENCOUNT1_GET_PATH_INDEX(&this->actor); - this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENENCOUNT1_PATH_INDEX_NONE); this->spawnTotalMax = -1; this->spawnDistanceMax = -1.0f; } diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h index 85e1b3ca4..0eb675272 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h @@ -10,6 +10,8 @@ #define ENENCOUNT1_GET_SPAWN_TOTAL_MAX(thisx) ((thisx)->params & 0x3F) #define ENENCOUNT1_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) // Used only by EN_ENCOUNT1_SKULLFISH_2 which doesn't use SpawnTotalMax +#define ENENCOUNT1_PATH_INDEX_NONE 0x3F + #define ENENCOUNT1_GET_SPAWN_TIME_MIN(thisx) ((thisx)->world.rot.x) // Time to wait between spawning #define ENENCOUNT1_GET_SPAWN_UNUSED_PROP(thisx) ((thisx)->world.rot.y) // Unused spawn property #define ENENCOUNT1_GET_SPAWN_DISTANCE_MAX(thisx) ((thisx)->world.rot.z) // Negative means infinite distance 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 514074a8f..ad60ad551 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -593,7 +593,7 @@ void func_808F4108(EnIn* this, PlayState* play, u16 textId) { } s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) { - EnIn* this2 = this; + Actor* thisx = &this->actor; if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -604,15 +604,15 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) } else if (this->unk4AC & 8) { func_808F4108(this, play, 0x3475); } else { - Actor_ContinueText(play, &this->actor, 0x3475); + Actor_ContinueText(play, thisx, 0x3475); } } else { play_sound(NA_SE_SY_ERROR); - Actor_ContinueText(play, &this->actor, 0x3473); + Actor_ContinueText(play, thisx, 0x3473); } } else { func_8019F230(); - Actor_ContinueText(play, &this->actor, 0x3472); + Actor_ContinueText(play, thisx, 0x3472); } return 0; } 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 5d7a5fd5b..cfc3efdc0 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -960,14 +960,14 @@ void func_80A5D7A4(EnKusa2* this) { } void func_80A5D7C4(EnKusa2* this, PlayState* play) { - EnKusa2* this2 = this; + Actor* thisx = &this->actor; s16 sp2A; if (Actor_HasParent(&this->actor, play)) { - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_PULL_UP_PLANT); - this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.shape.shadowAlpha = 60; - this->actor.room = -1; + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT); + thisx->shape.shadowDraw = ActorShadow_DrawCircle; + thisx->shape.shadowAlpha = 60; + thisx->room = -1; func_80A5BD94(this); func_80A5D964(this); return; @@ -975,23 +975,23 @@ void func_80A5D7C4(EnKusa2* this, PlayState* play) { if (!func_80A5BFD8(this, play)) { if ((this->unk_1C0 != NULL) && (this->unk_1C0->unk_1BE != 0)) { - this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - if (this2->unk_1C0 != NULL) { - sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, &this->actor); - this->actor.home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A; + thisx->shape.shadowDraw = ActorShadow_DrawCircle; + if (this->unk_1C0 != NULL) { + sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, thisx); + thisx->home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A; } this->unk_1C8 = Rand_S16Offset(72, 16); - this->actor.velocity.y = 8.8f; - Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); + thisx->velocity.y = 8.8f; + Actor_PlaySfx(thisx, NA_SE_EN_NUTS_WALK); func_80A5DC70(this); } - if (this->actor.xzDistToPlayer < 600.0f) { + if (thisx->xzDistToPlayer < 600.0f) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - if (this->actor.xzDistToPlayer < 400.0f) { + if (thisx->xzDistToPlayer < 400.0f) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - if (this->actor.xzDistToPlayer < 100.0f) { - Actor_OfferCarry(&this->actor, play); + if (thisx->xzDistToPlayer < 100.0f) { + Actor_OfferCarry(thisx, play); } } } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index ebea9196b..98b01d728 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -851,14 +851,14 @@ void func_80A6A508(Actor* thisx) { } void func_80A6A5C0(EnMushi2* this, PlayState* play) { - EnMushi2* this2 = this; + Actor* thisx = &this->actor; func_80A69D3C(this); - Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f); + Math_SmoothStepToF(&thisx->speed, this->unk_35C, 0.1f, 0.5f, 0.0f); if (this->unk_354 < SQ(40.0f)) { f32 temp = 1.0f - ((SQ(40.0f) - this->unk_354) * (1.0f / (10.0f * SQ(40.0f)))); - this->actor.speed *= temp; + thisx->speed *= temp; } func_80A68ED8(this); @@ -867,8 +867,8 @@ void func_80A6A5C0(EnMushi2* this, PlayState* play) { func_80A69388(this); } - this->skelAnime.playSpeed = this->actor.speed * 1.6f; - this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.1f, 1.9f); + this->skelAnime.playSpeed = thisx->speed * 1.6f; + this->skelAnime.playSpeed = CLAMP(this->skelAnime.playSpeed, 0.1f, 1.9f); if ((this->unk_36A <= 0) || func_80A68BA0(this)) { func_80A6B078(this); @@ -895,9 +895,9 @@ void func_80A6A794(EnMushi2* this) { } void func_80A6A824(EnMushi2* this, PlayState* play) { - EnMushi2* this2 = this; + Actor* thisx = &this->actor; - Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f); + Math_SmoothStepToF(&thisx->speed, this->unk_35C, 0.1f, 0.5f, 0.0f); func_80A68ED8(this); func_80A697C4(this, play); @@ -905,8 +905,8 @@ void func_80A6A824(EnMushi2* this, PlayState* play) { func_80A69388(this); } - this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f); - this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.0f, 1.9f); + this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (thisx->speed * 1.2f); + this->skelAnime.playSpeed = CLAMP(this->skelAnime.playSpeed, 0.0f, 1.9f); if ((this->unk_36A <= 0) || func_80A68BA0(this)) { func_80A6B078(this); 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 10f3ea529..dfcd1bad0 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 @@ -114,12 +114,12 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) { } void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) { - EnTimeTag* this2 = this; + Actor* thisx = &this->actor; if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { - if (this->actor.csId != CS_ID_NONE) { + if (thisx->csId != CS_ID_NONE) { this->actionFunc = EnTimeTag_RooftopOath_Cutscene; - CutsceneManager_Queue(this2->actor.csId); + CutsceneManager_Queue(thisx->csId); gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; } play->msgCtx.ocarinaMode = 4; 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 a11d00cdb..895d1d406 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -692,10 +692,11 @@ s32 func_80A872AC(EnTru* this, PlayState* play) { } this->unk_34E &= ~(0x4000 | 0x2000); - if ((player->exchangeItemId == 35) || (player->exchangeItemId == 36)) { + if ((player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_RED) || + (player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_BLUE)) { this->unk_34E |= 0x2000; this->unk_38C = player->exchangeItemId; - } else if (player->exchangeItemId != 0) { + } else if (player->exchangeItemId != PLAYER_IA_NONE) { this->unk_34E |= 0x4000; } @@ -972,8 +973,8 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) { this->actor.shape.shadowDraw = NULL; this->unk_34E |= (0x200 | 0x8); this->unk_34E &= ~0x800; - if (player->exchangeItemId != 0) { - player->exchangeItemId = 0; + if (player->exchangeItemId != PLAYER_IA_NONE) { + player->exchangeItemId = PLAYER_IA_NONE; } EnTru_ChangeAnim(this, KOUME_ANIM_HOVER1); } 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 894c07002..a404ac817 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -420,7 +420,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { case 0x1075: case 0x1078: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f); break; @@ -448,7 +448,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { break; case 0x107B: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f); break; 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 bd8ff3435..c3192cec1 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -417,7 +417,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { case 0x1237: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; case 0x1238: case 0x123A: @@ -436,7 +436,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { case 0x1232: case 0x1241: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; case 0x1239: case 0x1246: 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 4971b39bc..d1f19032f 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -25,7 +25,7 @@ void ObjChan_Destroy(Actor* thisx, PlayState* play); void ObjChan_Update(Actor* thisx, PlayState* play); void ObjChan_Draw(Actor* thisx, PlayState* play); -void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play); +void ObjChan_ChandelierAction(ObjChan* this, PlayState* play); void ObjChan_PotAction(ObjChan* this, PlayState* play); ActorInit Obj_Chan_InitVars = { @@ -64,7 +64,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; -void ObjChan_InitChandelier(ObjChan* this2, PlayState* play); +void ObjChan_InitChandelier(ObjChan* this, PlayState* play); void ObjChan_InitPot(ObjChan* this, PlayState* play); void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play); void ObjChan_DrawPot(Actor* thisx, PlayState* play); @@ -99,10 +99,14 @@ void ObjChan_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.y = 0; ObjChan_InitChandelier(this, play); break; + case OBJCHAN_SUBTYPE_POT: this->actor.draw = ObjChan_DrawPot; ObjChan_InitPot(this, play); break; + + default: + break; } } @@ -150,46 +154,44 @@ void ObjChan_CalculatePotPosition(Vec3f* childPosOut, Vec3s* childRotOut, Vec3f* childRotOut->y += childAngle; } -//! TODO: Possibly takes actor and recasts -void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) { - ObjChan* this = this2; +void ObjChan_InitChandelier(ObjChan* this, PlayState* play) { + Actor* thisx = &this->actor; s32 i; - ObjChan* temp_v0; + ObjChan* pot; Vec3f childPos; Vec3s childRot; CollisionPoly* sp94; s32 sp90; Vec3f sp84; - Math_Vec3f_Copy(&this->unk1C0, &this->actor.world.pos); + Math_Vec3f_Copy(&this->unk1C0, &thisx->world.pos); - Math_Vec3f_Copy(&sp84, &this->actor.world.pos); + Math_Vec3f_Copy(&sp84, &thisx->world.pos); sp84.y += 1600.0f; - if (BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp84, &this->unk1C0, &sp94, false, false, true, - true, &sp90)) { - this->unk1CC = this->actor.world.pos.y - this->unk1C0.y; + if (BgCheck_EntityLineTest1(&play->colCtx, &thisx->world.pos, &sp84, &this->unk1C0, &sp94, false, false, true, true, + &sp90)) { + this->unk1CC = thisx->world.pos.y - this->unk1C0.y; } else { - Actor_Kill(&this->actor); + Actor_Kill(thisx); return; } for (i = 0; i < 5; i++) { - ObjChan_CalculatePotPosition(&childPos, &childRot, &this->actor.world.pos, &this->actor.shape.rot, + ObjChan_CalculatePotPosition(&childPos, &childRot, &thisx->world.pos, &thisx->shape.rot, (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); - temp_v0 = (ObjChan*)Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, - childPos.z, childRot.x, childRot.y, childRot.z, - (this->actor.params & 0xFFF) | 0x1000, this->actor.csId, - this->actor.halfDaysBits, &this->actor); - if (temp_v0 != NULL) { - this->pots[i] = temp_v0; - temp_v0->myPotIndex = i; - temp_v0->actor.csId = this->actor.csId; + pot = (ObjChan*)Actor_SpawnAsChildAndCutscene( + &play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, childPos.z, childRot.x, childRot.y, + childRot.z, (thisx->params & 0xFFF) | 0x1000, thisx->csId, thisx->halfDaysBits, thisx); + if (pot != NULL) { + this->pots[i] = pot; + pot->myPotIndex = i; + pot->actor.csId = thisx->csId; } else { - Actor_Kill(&this->actor); + Actor_Kill(thisx); } } - if (Flags_GetSwitch(play, this->actor.params & 0x7F)) { + if (Flags_GetSwitch(play, thisx->params & 0x7F)) { this->stateFlags |= OBJCHAN_STATE_FIRE_DELAY; this->stateFlags |= OBJCHAN_STATE_ON_FIRE; @@ -211,9 +213,9 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) { } //! TODO: More descriptive name than Action? -void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { - ObjChan* this = this2; - ObjChan* temp; +void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) { + Actor* thisx = &this->actor; + ObjChan* pot; s32 i; Vec3f sp60; Vec3s sp58; @@ -230,7 +232,7 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { this->unk1D0 = 0.0f; } } - this->actor.shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0); + thisx->shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0); if ((this->stateFlags & OBJCHAN_STATE_START_CUTSCENE) && SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { this->stateFlags |= OBJCHAN_STATE_CUTSCENE; @@ -240,34 +242,34 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { this->stateFlags &= ~OBJCHAN_STATE_CUTSCENE; CutsceneManager_Stop(this->csIdList[0]); } - Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); - Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); - Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); + Matrix_RotateYS(thisx->shape.rot.y, MTXMODE_NEW); + Matrix_RotateXS(thisx->shape.rot.x, MTXMODE_APPLY); + Matrix_RotateZS(thisx->shape.rot.z, MTXMODE_APPLY); Matrix_RotateYS(this->rotation, MTXMODE_APPLY); - Matrix_MultVecY(this->unk1CC, &this->actor.world.pos); - Math_Vec3f_Sum(&this->actor.world.pos, &this->unk1C0, &this->actor.world.pos); + Matrix_MultVecY(this->unk1CC, &thisx->world.pos); + Math_Vec3f_Sum(&thisx->world.pos, &this->unk1C0, &thisx->world.pos); Collider_UpdateCylinder(&this->actor, &this->collider); for (i = 0; i < 5; i++) { - temp = this->pots[i]; - if (temp != NULL) { - ObjChan_CalculatePotPosition(&sp60, &sp58, &this->actor.world.pos, &this->actor.shape.rot, + pot = this->pots[i]; + if (pot != NULL) { + ObjChan_CalculatePotPosition(&sp60, &sp58, &thisx->world.pos, &thisx->shape.rot, (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); - Math_Vec3f_Copy(&temp->actor.world.pos, &sp60); - Math_Vec3s_Copy(&temp->actor.shape.rot, &this->actor.shape.rot); - temp->actor.shape.rot.y = this->rotation; - Math_Vec3f_ToVec3s(&temp->collider.dim.pos, &temp->actor.world.pos); + Math_Vec3f_Copy(&pot->actor.world.pos, &sp60); + Math_Vec3s_Copy(&pot->actor.shape.rot, &thisx->shape.rot); + pot->actor.shape.rot.y = this->rotation; + Math_Vec3f_ToVec3s(&pot->collider.dim.pos, &pot->actor.world.pos); } } if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800)) { - Flags_SetSwitch(play, this->actor.params & 0x7F); + Flags_SetSwitch(play, thisx->params & 0x7F); } - if (Flags_GetSwitch(play, this->actor.params & 0x7F)) { + if (Flags_GetSwitch(play, thisx->params & 0x7F)) { if (!(this->stateFlags & OBJCHAN_STATE_FIRE_DELAY)) { this->rotationSpeed = 0; this->flameSize = 0.0f; for (i = 0; i < 5; i++) { - temp = this->pots[i]; - if (temp != NULL) { + pot = this->pots[i]; + if (pot != NULL) { this->pots[i]->stateFlags |= OBJCHAN_STATE_FIRE_DELAY; this->pots[i]->fireDelayFrames = 20 + i * 5; this->pots[i]->flameSize = 0.0f; @@ -338,6 +340,7 @@ void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play) { for (temp_s2 = 0, temp_s1 = 0; temp_s2 != 18; temp_s2++, temp_s1 += 0x4E20) { f32 sin = Math_SinS(temp_s1); f32 cos = Math_CosS(temp_s1); + spDC.x = sin * 8.0f; spDC.y = Rand_ZeroOne() * 12.0f + 2.0f; spDC.z = cos * 8.0f; 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 c4e61efa3..c1b46fce7 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -167,8 +167,8 @@ void func_80B12A88(Actor* thisx) { } } -void func_80B12B38(ObjDhouse* this2, PlayState* play) { - ObjDhouse* this = this2; +void func_80B12B38(ObjDhouse* this, PlayState* play) { + Actor* thisx = &this->dyna.actor; s32 i; f32 temp_f0; CollisionPoly* sp90; @@ -201,7 +201,7 @@ void func_80B12B38(ObjDhouse* this2, PlayState* play) { phi_s3 = false; if (ptr->unk_0C.y < 0.0f) { func_80B12A50(ptr, ptr3, &sp80); - temp_f0 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp7C, &this->dyna.actor, &sp80); + temp_f0 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp7C, thisx, &sp80); if (((sp80.y - 35.0f) < temp_f0) && (temp_f0 > (BGCHECK_Y_MIN + 1.0f))) { phi_s3 = true; } 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 40c363dca..e672780de 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -315,8 +315,8 @@ void ObjFireshield_Destroy(Actor* thisx, PlayState* play) { } void ObjFireshield_Update(Actor* thisx, PlayState* play) { + s32 pad; ObjFireshield* this = THIS; - ObjFireshield* this2 = THIS; s32 sp44 = OBJFIRESHIELD_GET_ROTX(&this->actor); s32 sp40 = OBJFIRESHIELD_GET_7F(&this->actor); s32 temp_a0; @@ -342,12 +342,12 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.base.atFlags &= ~AT_HIT; } else if (this->collider.base.atFlags & AT_HIT) { this->collider.base.atFlags &= ~AT_HIT; - func_800B8D98(play, &this->actor, 5.0f, this->actor.yawTowardsPlayer, 1.0f); + func_800B8D98(play, thisx, 5.0f, thisx->yawTowardsPlayer, 1.0f); } func_80A4CE28(this, play); - this->actor.world.pos.y = ((sp44 ? 144.0f : -144.0f) * (1.0f - this2->unk_198)) + this->actor.home.pos.y; + thisx->world.pos.y = ((sp44 ? 144.0f : -144.0f) * (1.0f - this->unk_198)) + thisx->home.pos.y; this->unk_1A6 = this->unk_198 * 255.0f; @@ -357,13 +357,12 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.dim.height = this->unk_198 * 80.0f; if (sp44) { - this->collider.dim.yShift = - (s32)(this->actor.home.pos.y - this->actor.world.pos.y) - this->collider.dim.height; + this->collider.dim.yShift = (s32)(thisx->home.pos.y - thisx->world.pos.y) - this->collider.dim.height; } else { - this->collider.dim.yShift = this->actor.home.pos.y - this->actor.world.pos.y; + this->collider.dim.yShift = thisx->home.pos.y - thisx->world.pos.y; } - func_800B9010(&this->actor, NA_SE_EV_BURNING - SFX_FLAG); + func_800B9010(thisx, NA_SE_EV_BURNING - SFX_FLAG); if (player->transformation == PLAYER_FORM_GORON) { this->collider.info.toucher.damage = 0; @@ -373,7 +372,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.info.toucher.effect = 1; } - Collider_UpdateCylinder(&this->actor, &this->collider); + Collider_UpdateCylinder(thisx, &this->collider); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } 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 844f52506..aca30fe92 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -22,7 +22,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play); void func_80A1CBF8(ObjFlowerpot* this); void func_80A1CC0C(ObjFlowerpot* this, PlayState* play); void func_80A1CD10(ObjFlowerpot* this); -void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play); +void func_80A1CEF4(ObjFlowerpot* this, PlayState* play); u32 D_80A1D830; MtxF D_80A1D838[8]; @@ -589,8 +589,8 @@ void func_80A1CD10(ObjFlowerpot* this) { } } -void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { - ObjFlowerpot* this = this2; +void func_80A1CEF4(ObjFlowerpot* this, PlayState* play) { + Actor* thisx = &this->actor; s32 sp28 = this->collider.elements[0].info.toucherFlags & TOUCH_HIT; if (sp28) { @@ -603,7 +603,7 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { func_80A1C62C(this, play); - if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 || + if ((thisx->bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 || (this->unk_1E8 <= 0)) { if (!(this->unk_1EA & 2)) { func_80A1B914(this, play); @@ -613,11 +613,11 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { } func_80A1BA44(this, play); func_80A1B994(this, play); - Actor_Kill(&this->actor); + Actor_Kill(thisx); return; } - if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { + if (thisx->bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { if (!(this->unk_1EA & 2)) { func_80A1B914(this, play); func_80A1C328(this, play); @@ -626,22 +626,22 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { } func_80A1BD80(this, play); func_80A1B994(this, play); - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L); - Actor_Kill(&this->actor); + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L); + Actor_Kill(thisx); return; } - Actor_MoveWithGravity(&this->actor); + Actor_MoveWithGravity(thisx); if (!(this->unk_1EA & 2)) { - D_80A1D3F8 += (s16)(this->actor.shape.rot.x * -0.06f); + D_80A1D3F8 += (s16)(thisx->shape.rot.x * -0.06f); } else { Math_StepToS(&D_80A1D3F8, 0, 80); Math_StepToS(&D_80A1D3FC, 0, 20); } - this->actor.shape.rot.x += D_80A1D3F8; - this->actor.shape.rot.y += D_80A1D3FC; + thisx->shape.rot.x += D_80A1D3F8; + thisx->shape.rot.y += D_80A1D3FC; func_80A1C5E8(this, play); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); 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 e46c5da44..795d740f1 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 @@ -208,31 +208,31 @@ void func_809AB474(ObjGrassCarry* this) { } void func_809AB4A8(ObjGrassCarry* this, PlayState* play) { - ObjGrassCarry* this2 = this; + Actor* thisx = &this->actor; - if (Actor_HasParent(&this->actor, play)) { + if (Actor_HasParent(thisx, play)) { func_809AB5FC(this); if (this->unk_194 != NULL) { this->unk_194->unk_0F |= 4; } - this->actor.draw = func_809ABB7C; - this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.shape.shadowAlpha = 60; - this->actor.shape.shadowScale = 1.0f; + thisx->draw = func_809ABB7C; + thisx->shape.shadowDraw = ActorShadow_DrawCircle; + thisx->shape.shadowAlpha = 60; + thisx->shape.shadowScale = 1.0f; this->unk_190->unk_3292 ^= 1; - this->actor.room = -1; - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_PULL_UP_PLANT); + thisx->room = -1; + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT); } else if (this->unk_190->unk_3294 != NULL) { Player* player = GET_PLAYER(play); this->unk_194 = this->unk_190->unk_3294; - Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_194->unk_00); - this->actor.shape.rot.y = this->actor.world.rot.y = this->unk_194->unk_0C; - this->unk_198 = this2->unk_194->unk_0E; - this->actor.xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); - this->actor.playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor); - this->actor.xyzDistToPlayerSq = SQ(this->actor.xzDistToPlayer) + SQ(this->actor.playerHeightRel); - this->actor.yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor); + 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; + thisx->xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); + thisx->playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor); + thisx->xyzDistToPlayerSq = SQ(thisx->xzDistToPlayer) + SQ(thisx->playerHeightRel); + thisx->yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor); Actor_OfferCarry(&this->actor, play); } } diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index b5547fdad..0ae8abe18 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -239,12 +239,12 @@ void func_80A237A4(ObjIceblock* this) { ((this->unk_244 - ((600.0f * this->dyna.actor.scale.y) - 90.0f)) + (sp20 * ptr->unk_08)) + ptr->unk_00; } -void func_80A23938(ObjIceblock* this2) { - ObjIceblock* this = this2; +void func_80A23938(ObjIceblock* this) { + Actor* thisx = &this->dyna.actor; if (this->unk_1B0 & 0x80) { - Math_ScaledStepToS(&this->dyna.actor.shape.rot.x, 0, 400); - Math_ScaledStepToS(&this->dyna.actor.shape.rot.z, 0, 400); + Math_ScaledStepToS(&thisx->shape.rot.x, 0, 400); + Math_ScaledStepToS(&thisx->shape.rot.z, 0, 400); } else { ObjIceBlockUnkStruct4* ptr = &this->unk_27C; f32 phi_f0; @@ -252,7 +252,7 @@ void func_80A23938(ObjIceblock* this2) { if (this->unk_1B0 & 0x20) { phi_f0 = 0.3f; - ptr->unk_14 = this->dyna.actor.yawTowardsPlayer; + ptr->unk_14 = thisx->yawTowardsPlayer; } else { phi_f0 = 0.08f; } @@ -264,16 +264,15 @@ void func_80A23938(ObjIceblock* this2) { temp = ptr->unk_16 - ptr->unk_14; - ptr->unk_18 += - (s16)(temp * -0.04f * this->dyna.actor.xzDistToPlayer * this->dyna.actor.scale.x * (1.0f / 600.0f)); + ptr->unk_18 += (s16)(temp * -0.04f * thisx->xzDistToPlayer * thisx->scale.x * (1.0f / 600.0f)); ptr->unk_18 = func_80A23090(ptr->unk_18, 50, 800); ptr->unk_16 += ptr->unk_18; - this->dyna.actor.shape.rot.x = Math_CosS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; - this->dyna.actor.shape.rot.x = CLAMP(this->dyna.actor.shape.rot.x, -2000, 2000); + thisx->shape.rot.x = Math_CosS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; + thisx->shape.rot.x = CLAMP(thisx->shape.rot.x, -2000, 2000); - this->dyna.actor.shape.rot.z = -Math_SinS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; - this->dyna.actor.shape.rot.z = CLAMP(this->dyna.actor.shape.rot.z, -2000, 2000); + thisx->shape.rot.z = -Math_SinS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; + thisx->shape.rot.z = CLAMP(thisx->shape.rot.z, -2000, 2000); } } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index b7f7ece6e..a198f4a0f 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -140,7 +140,7 @@ void ObjTokeiStep_InitTimers(ObjTokeiStep* this) { } s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) { - ObjTokeiStep* this2 = this; + Actor* thisx = &this->dyna.actor; s32 i; ObjTokeiStepPanel* panel; f32 finalPosY; @@ -179,8 +179,8 @@ s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) { panel->pos.y += finalPosY; } if (panel->numBounces == 1) { - ObjTokeiStep_SpawnDust(this2, panel, play); - ObjTokeiStep_RequestQuakeAndRumble(this2, play); + ObjTokeiStep_SpawnDust(this, panel, play); + ObjTokeiStep_RequestQuakeAndRumble(this, play); } } } From a0701c170b5861572eab29bc9f0aed92aa0e11d9 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 6 Jun 2023 08:54:18 -0400 Subject: [PATCH 50/51] `z64game.h` (#1250) * z64game.h * grrrrr * fix missing stuff * Update include/z64game.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/z64game.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * global.h to the top * reiew * fix --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 19 ---- include/macros.h | 15 --- include/variables.h | 5 +- include/z64.h | 49 +-------- include/z64game.h | 104 ++++++++++++++++++ include/z_prenmi.h | 10 +- include/z_title_setup.h | 8 +- src/code/game.c | 6 +- src/code/z_prenmi.c | 8 +- .../gamestates/ovl_daytelop/z_daytelop.c | 3 +- .../gamestates/ovl_daytelop/z_daytelop.h | 10 +- .../ovl_file_choose/z_file_select.h | 5 + .../gamestates/ovl_opening/z_opening.c | 3 + .../gamestates/ovl_opening/z_opening.h | 18 +-- src/overlays/gamestates/ovl_select/z_select.h | 7 +- src/overlays/gamestates/ovl_title/z_title.h | 8 +- 16 files changed, 155 insertions(+), 123 deletions(-) create mode 100644 include/z64game.h diff --git a/include/functions.h b/include/functions.h index 71aa14729..626bfc261 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1874,25 +1874,6 @@ void AudioMgr_ThreadEntry(void* arg); void AudioMgr_Unlock(AudioMgr* audioMgr); void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr); -void Game_UpdateFramerateVariables(s32 divisor); -void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); -void GameState_SetFBFilter(Gfx** gfx, void* zbuffer); -void Game_Nop80173534(GameState* gameState); -void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx); -void GameState_SetFrameBuffer(GraphicsContext* gfxCtx); -void func_801736DC(GraphicsContext* gfxCtx); -void Game_UpdateInput(GameState* gameState); -void Game_Update(GameState* gameState); -void Game_IncrementFrameCount(GameState* gameState); -void GameState_InitArena(GameState* gameState, size_t size); -void GameState_Realloc(GameState* gameState, size_t size); -void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* gfxCtx); -void GameState_Destroy(GameState* gameState); -GameStateFunc GameState_GetInit(GameState* gameState); -size_t GameState_GetSize(GameState* gameState); -u32 GameState_IsRunning(GameState* gameState); -s32 GameState_GetArenaSize(GameState* gameState); -s32 func_80173B48(GameState* gameState); void GameAlloc_Log(GameAlloc* this); void* GameAlloc_Malloc(GameAlloc* this, size_t size); void GameAlloc_Free(GameAlloc* this, void* data); diff --git a/include/macros.h b/include/macros.h index 25ccb3d37..9f2305e01 100644 --- a/include/macros.h +++ b/include/macros.h @@ -28,21 +28,6 @@ #define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId]) -#define STOP_GAMESTATE(curState) \ - do { \ - GameState* state = curState; \ - \ - state->running = false; \ - } while(0) - -#define SET_NEXT_GAMESTATE(curState, nextInit, nextSize) \ - do { \ - GameState* state = curState; \ - \ - (state)->init = nextInit; \ - (state)->size = nextSize; \ - } while (0) - #define GET_PLAYER(play) ((Player*)(play)->actorCtx.actorLists[ACTORCAT_PLAYER].first) #define GET_FIRST_ENEMY(play) ((Actor*)(play)->actorCtx.actorLists[ACTORCAT_ENEMY].first) diff --git a/include/variables.h b/include/variables.h index fef772123..ba1548f0f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -745,10 +745,7 @@ extern Input* D_801D0D60; // extern UNK_TYPE2 D_801D14E4; // extern UNK_TYPE2 D_801D14E8; // extern UNK_TYPE4 D_801D14F0; -extern s32 gFramerateDivisor; -extern f32 gFramerateDivisorF; -extern f32 gFramerateDivisorHalf; -extern f32 gFramerateDivisorThird; + extern u32 retryCount; extern u32 cfbIdx[3]; extern s32 gScreenWidth; diff --git a/include/z64.h b/include/z64.h index 637f28dc4..1b9cabdc9 100644 --- a/include/z64.h +++ b/include/z64.h @@ -44,6 +44,7 @@ #include "z64effect.h" #include "z64frameadvance.h" #include "z64game_over.h" +#include "z64game.h" #include "z64interface.h" #include "z64item.h" #include "z64light.h" @@ -407,54 +408,6 @@ typedef struct { /* 0x844 */ void* fb; } FaultThreadStruct; // size = 0x848 -struct GameState; - -typedef void (*GameStateFunc)(struct GameState* gameState); - -typedef struct { - /* 0x00 */ void* loadedRamAddr; - /* 0x04 */ uintptr_t vromStart; // if applicable - /* 0x08 */ uintptr_t vromEnd; // if applicable - /* 0x0C */ void* vramStart; // if applicable - /* 0x10 */ void* vramEnd; // if applicable - /* 0x14 */ UNK_PTR unk_14; - /* 0x18 */ GameStateFunc init; // initializes and executes the given context - /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load - /* 0x20 */ UNK_PTR unk_20; - /* 0x24 */ UNK_PTR unk_24; - /* 0x28 */ UNK_TYPE unk_28; - /* 0x2C */ size_t instanceSize; -} GameStateOverlay; // size = 0x30 - -typedef struct GameAllocEntry { - /* 0x0 */ struct GameAllocEntry* next; - /* 0x4 */ struct GameAllocEntry* prev; - /* 0x8 */ size_t size; - /* 0xC */ u32 unk_0C; -} GameAllocEntry; // size = 0x10 - -typedef struct GameAlloc { - /* 0x00 */ GameAllocEntry base; - /* 0x10 */ GameAllocEntry* head; -} GameAlloc; // size = 0x14 - -typedef struct GameState { - /* 0x00 */ GraphicsContext* gfxCtx; - /* 0x04 */ GameStateFunc main; - /* 0x08 */ GameStateFunc destroy; - /* 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; - /* 0x84 */ GameAlloc alloc; - /* 0x98 */ UNK_TYPE1 pad98[0x3]; - /* 0x9B */ u8 running; // If 0, switch to next game state - /* 0x9C */ u32 frames; - /* 0xA0 */ u8 padA0[0x2]; - /* 0xA2 */ u8 framerateDivisor; // game speed? - /* 0xA3 */ u8 unk_A3; -} GameState; // size = 0xA4 - struct PlayState; typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*); diff --git a/include/z64game.h b/include/z64game.h new file mode 100644 index 000000000..c5551edc7 --- /dev/null +++ b/include/z64game.h @@ -0,0 +1,104 @@ +#ifndef Z64_GAME_H +#define Z64_GAME_H + +#include "ultra64.h" +#include "libc/stdbool.h" +#include "libc/stdint.h" +#include "io/controller.h" +#include "tha.h" +#include "padmgr.h" + +struct GraphicsContext; +struct GameState; + + +typedef void (*GameStateFunc)(struct GameState* gameState); + +typedef struct { + /* 0x00 */ void* loadedRamAddr; + /* 0x04 */ uintptr_t vromStart; // if applicable + /* 0x08 */ uintptr_t vromEnd; // if applicable + /* 0x0C */ void* vramStart; // if applicable + /* 0x10 */ void* vramEnd; // if applicable + /* 0x14 */ UNK_PTR unk_14; + /* 0x18 */ GameStateFunc init; // initializes and executes the given context + /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load + /* 0x20 */ UNK_PTR unk_20; + /* 0x24 */ UNK_PTR unk_24; + /* 0x28 */ UNK_TYPE unk_28; + /* 0x2C */ size_t instanceSize; +} GameStateOverlay; // size = 0x30 + +typedef struct GameAllocEntry { + /* 0x0 */ struct GameAllocEntry* next; + /* 0x4 */ struct GameAllocEntry* prev; + /* 0x8 */ size_t size; + /* 0xC */ u32 unk_0C; +} GameAllocEntry; // size = 0x10 + +typedef struct GameAlloc { + /* 0x00 */ GameAllocEntry base; + /* 0x10 */ GameAllocEntry* head; +} GameAlloc; // size = 0x14 + +typedef struct GameState { + /* 0x00 */ struct GraphicsContext* gfxCtx; + /* 0x04 */ GameStateFunc main; + /* 0x08 */ GameStateFunc destroy; + /* 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; + /* 0x84 */ GameAlloc alloc; + /* 0x98 */ UNK_TYPE1 pad98[0x3]; + /* 0x9B */ u8 running; // If 0, switch to next game state + /* 0x9C */ u32 frames; + /* 0xA0 */ u8 padA0[0x2]; + /* 0xA2 */ u8 framerateDivisor; + /* 0xA3 */ u8 unk_A3; +} GameState; // size = 0xA4 + + +void Game_UpdateFramerateVariables(s32 divisor); +void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); +void GameState_SetFBFilter(Gfx** gfx, void* zbuffer); +void Game_Nop80173534(GameState* gameState); +void GameState_Draw(GameState* gameState, struct GraphicsContext* gfxCtx); +void GameState_SetFrameBuffer(struct GraphicsContext* gfxCtx); +void func_801736DC(struct GraphicsContext* gfxCtx); +void Game_UpdateInput(GameState* gameState); +void Game_Update(GameState* gameState); +void Game_IncrementFrameCount(GameState* gameState); +void GameState_InitArena(GameState* gameState, size_t size); +void GameState_Realloc(GameState* gameState, size_t size); +void GameState_Init(GameState* gameState, GameStateFunc init, struct GraphicsContext* gfxCtx); +void GameState_Destroy(GameState* gameState); +GameStateFunc GameState_GetInit(GameState* gameState); +size_t GameState_GetSize(GameState* gameState); +u32 GameState_IsRunning(GameState* gameState); +s32 GameState_GetArenaSize(GameState* gameState); +s32 func_80173B48(GameState* gameState); + +extern s32 gFramerateDivisor; +extern f32 gFramerateDivisorF; +extern f32 gFramerateDivisorHalf; +extern f32 gFramerateDivisorThird; + + +#define STOP_GAMESTATE(curState) \ + do { \ + GameState* state = curState; \ + \ + state->running = false; \ + } while(0) + +#define SET_NEXT_GAMESTATE(curState, nextInit, nextSize) \ + do { \ + GameState* state = curState; \ + \ + (state)->init = nextInit; \ + (state)->size = nextSize; \ + } while (0) + + +#endif diff --git a/include/z_prenmi.h b/include/z_prenmi.h index 04c3f5f16..7be3eb16f 100644 --- a/include/z_prenmi.h +++ b/include/z_prenmi.h @@ -1,15 +1,15 @@ #ifndef Z64PRENMI_H #define Z64PRENMI_H -#include "global.h" - -void PreNMI_Destroy(GameState* thisx); -void PreNMI_Init(GameState* thisx); +#include "z64game.h" typedef struct { /* 0x00 */ GameState state; /* 0xA4 */ u32 timer; - /* 0xA8 */ UNK_TYPE4 unkA8; + /* 0xA8 */ s32 unk_A8; } PreNMIState; // size = 0xAC +void PreNMI_Destroy(GameState* thisx); +void PreNMI_Init(GameState* thisx); + #endif diff --git a/include/z_title_setup.h b/include/z_title_setup.h index 3b299af97..1bd7c7d7d 100644 --- a/include/z_title_setup.h +++ b/include/z_title_setup.h @@ -1,13 +1,13 @@ #ifndef Z64TITLE_SETUP_H #define Z64TITLE_SETUP_H -#include "global.h" - -void Setup_Destroy(GameState* gameState); -void Setup_Init(GameState* thisx); +#include "z64game.h" typedef struct { /* 0x00 */ GameState state; } SetupState; // size = 0xA4 +void Setup_Destroy(GameState* gameState); +void Setup_Init(GameState* thisx); + #endif diff --git a/src/code/game.c b/src/code/game.c index c98241177..8f4e0f44d 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -11,9 +11,9 @@ f32 gFramerateDivisorThird = 1.0f / 3.0f; void Game_UpdateFramerateVariables(s32 divisor) { gFramerateDivisor = divisor; - gFramerateDivisorF = (f32)divisor; - gFramerateDivisorHalf = (f32)(divisor * 0.5f); - gFramerateDivisorThird = (f32)(divisor / 3.0f); + gFramerateDivisorF = divisor; + gFramerateDivisorHalf = divisor / 2.0f; + gFramerateDivisorThird = divisor / 3.0f; } void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) { diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c index 94d235a37..097d4d946 100644 --- a/src/code/z_prenmi.c +++ b/src/code/z_prenmi.c @@ -1,3 +1,4 @@ +#include "global.h" #include "z_prenmi.h" void PreNMI_Stop(PreNMIState* this) { @@ -9,10 +10,9 @@ void PreNMI_Update(PreNMIState* this) { if (this->timer == 0) { ViConfig_UpdateVi(1); PreNMI_Stop(this); - return; + } else { + this->timer--; } - - this->timer--; } void PreNMI_Draw(PreNMIState* this) { @@ -48,7 +48,7 @@ void PreNMI_Init(GameState* thisx) { this->state.main = PreNMI_Main; this->state.destroy = PreNMI_Destroy; this->timer = 30; - this->unkA8 = 10; + this->unk_A8 = 10; Game_SetFramerateDivisor(&this->state, 1); } diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 108ccedcd..134c6457b 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -4,9 +4,10 @@ * Description: "Dawn of ... day" screen */ +#include "global.h" #include "z_daytelop.h" +#include "z64save.h" #include "z64shrink_window.h" -#include "z64view.h" #include "misc/daytelop_static/daytelop_static.h" #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.h b/src/overlays/gamestates/ovl_daytelop/z_daytelop.h index a7350e898..da49827c3 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.h +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.h @@ -1,16 +1,13 @@ #ifndef Z64_DAYTELOP_H #define Z64_DAYTELOP_H -#include "global.h" - -void DayTelop_Init(GameState* thisx); -void DayTelop_Destroy(GameState* thisx); +#include "z64game.h" +#include "z64view.h" typedef struct { /* 0x000 */ GameState state; /* 0x0A4 */ void* daytelopStaticFile; /* 0x0A8 */ void* gameoverStaticFile; - /* 0x0AC */ UNK_TYPE1 unk_AC[0x4]; /* 0x0B0 */ View view; /* 0x218 */ UNK_TYPE1 unk_218[0x28]; /* 0x240 */ s16 transitionCountdown; @@ -24,4 +21,7 @@ typedef enum { /* 2 */ DAYTELOP_HOURSTEXT_ON } DaytelopFadeState; +void DayTelop_Init(GameState* thisx); +void DayTelop_Destroy(GameState* thisx); + #endif diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_select.h b/src/overlays/gamestates/ovl_file_choose/z_file_select.h index 7dcc72a9d..88236e63e 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_select.h +++ b/src/overlays/gamestates/ovl_file_choose/z_file_select.h @@ -2,6 +2,11 @@ #define FILE_SELECT_H #include "global.h" +#include "z64game.h" +#include "z64message.h" +#include "z64skybox.h" +#include "z64view.h" + // `sramCtx->noFlashSaveBuf` is never allocated space, so should never be used // Slot offsets are also based on OoT SaveContext sizes, and contains incorrect sizes from MM diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index 9697b111f..84425cc73 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -4,9 +4,12 @@ * Description: Initializes the game into the title screen */ +#include "global.h" #include "z_opening.h" +#include "z64save.h" #include "z64shrink_window.h" #include "z64view.h" +#include "regs.h" void TitleSetup_SetupTitleScreen(TitleSetupState* this) { static s32 sOpeningEntrances[] = { ENTRANCE(CUTSCENE, 0), ENTRANCE(CUTSCENE, 1) }; diff --git a/src/overlays/gamestates/ovl_opening/z_opening.h b/src/overlays/gamestates/ovl_opening/z_opening.h index 36a01ffe9..530b069e1 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.h +++ b/src/overlays/gamestates/ovl_opening/z_opening.h @@ -1,15 +1,15 @@ -#ifndef _Z64_OPENING_H_ -#define _Z64_OPENING_H_ +#ifndef Z64_OPENING_H +#define Z64_OPENING_H -#include "global.h" +#include "z64game.h" +#include "z64view.h" + +typedef struct { + /* 0x000 */ GameState state; + /* 0x0A8 */ View view; +} TitleSetupState; // size = 0x210 void TitleSetup_Init(GameState* thisx); void TitleSetup_Destroy(GameState* thisx); -typedef struct { - /* 0x000 */ GameState state; - /* 0x0A4 */ UNK_TYPE1 unk_A4[0x4]; - /* 0x0A8 */ View view; -} TitleSetupState; // size = 0x210 - #endif diff --git a/src/overlays/gamestates/ovl_select/z_select.h b/src/overlays/gamestates/ovl_select/z_select.h index 8b5974103..876c9e3ff 100644 --- a/src/overlays/gamestates/ovl_select/z_select.h +++ b/src/overlays/gamestates/ovl_select/z_select.h @@ -1,7 +1,8 @@ -#ifndef _Z64_SELECT_H_ -#define _Z64_SELECT_H_ +#ifndef Z64_SELECT_H +#define Z64_SELECT_H -#include "global.h" +#include "z64game.h" +#include "z64view.h" struct MapSelectState; diff --git a/src/overlays/gamestates/ovl_title/z_title.h b/src/overlays/gamestates/ovl_title/z_title.h index 0cb19da1a..ee5d5c841 100644 --- a/src/overlays/gamestates/ovl_title/z_title.h +++ b/src/overlays/gamestates/ovl_title/z_title.h @@ -2,9 +2,8 @@ #define Z64_TITLE_H #include "global.h" - -void ConsoleLogo_Init(GameState* thisx); -void ConsoleLogo_Destroy(GameState* thisx); +#include "z64game.h" +#include "z64view.h" typedef struct { /* 0x000 */ GameState state; @@ -20,4 +19,7 @@ typedef struct { /* 0x244 */ u8 exit; } ConsoleLogoState; // size = 0x248 +void ConsoleLogo_Init(GameState* thisx); +void ConsoleLogo_Destroy(GameState* thisx); + #endif From 8c961f2b16334649b0d3ad811b856b95381c87d2 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 6 Jun 2023 07:54:50 -0700 Subject: [PATCH 51/51] Play_Hireso (Bombers Notebook) OK w/ Docs (#1235) * Start * Try every function * Import data * Docs from message branch * Fix non-equivalency for func_8016AE1C * Everything looks NON_MATCHING * Some more clean up and docs * Some cleanup * Small format * Small improvements here and there * Match a couple * Anotha one * and than there was 1 * and than there were none :) * Lots of docs * Finish code docs * schedule static * Macros + cleanup * text ids array cleanup * Entries cleanup * Use sBombersNotebookEntries in macros * Some docs from message branch * eventIndex -> event * Remove outdated comments * PR * BOMBERS_NOTEBOOK_ENTRY_SIZE * tables * Token pasting to simplify * Some more fixes * PR pt 1 * Format * Bring over BombersNotebook docs from z_message branch Co-authored-by: ZoeyZolotova * Full enum glory * Format * Name weekeventregs * typo * Some comments * bss * Review * bss * Update src/code/z_play_hireso.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Fix * Namefixer * bss * Format * 0 = 0x0000 --------- Co-authored-by: ZoeyZolotova Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/interface/schedule_static.xml | 38 + include/PR/gbi.h | 4 +- include/functions.h | 15 +- include/macros.h | 2 + include/segment_symbols.h | 1 + include/tables/bombers_notebook/event_table.h | 48 + .../tables/bombers_notebook/person_table.h | 31 + include/variables.h | 49 - include/z64.h | 21 +- include/z64bombers_notebook.h | 58 + include/z64message.h | 7 +- include/z64save.h | 144 +- spec | 4 +- src/code/z_kaleido_scope_call.c | 1 - src/code/z_message.c | 61 +- src/code/z_play.c | 5 +- src/code/z_play_hireso.c | 1362 ++++++++++++++++- src/code/z_quake.c | 1 + src/code/z_skelanime.c | 1 - .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 16 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 2 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 8 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 16 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 2 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 34 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 10 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 4 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 6 +- src/overlays/actors/ovl_En_In/z_en_in.c | 69 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 34 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 92 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 31 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 14 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 6 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 10 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 10 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 16 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 1 - src/overlays/actors/ovl_En_Toto/z_en_toto.c | 14 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 4 +- .../actors/ovl_Obj_Dinner/z_obj_dinner.c | 3 +- .../actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c | 6 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 24 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.c | 2 +- .../actors/ovl_player_actor/z_player.c | 5 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 2 +- tools/disasm/disasm.py | 5 +- tools/disasm/functions.txt | 20 +- tools/disasm/variables.txt | 23 +- tools/namefixer.py | 1 + tools/permuter_settings.toml | 2 + tools/sizes/code_functions.csv | 20 +- tools/weekeventregconvert.py | 140 +- undefined_syms.txt | 23 + 57 files changed, 2015 insertions(+), 521 deletions(-) create mode 100644 assets/xml/interface/schedule_static.xml create mode 100644 include/tables/bombers_notebook/event_table.h create mode 100644 include/tables/bombers_notebook/person_table.h create mode 100644 include/z64bombers_notebook.h diff --git a/assets/xml/interface/schedule_static.xml b/assets/xml/interface/schedule_static.xml new file mode 100644 index 000000000..68b097d51 --- /dev/null +++ b/assets/xml/interface/schedule_static.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 3ba8748b0..1b57c6a34 100644 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -4699,7 +4699,7 @@ _DW({ \ /* like gSPTextureRectangle but accepts negative position arguments */ #define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ @@ -4723,7 +4723,7 @@ _DW({ \ 0, 16))); \ gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \ _SHIFTL((dtdy), 0, 16))); \ -} +}) #define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ diff --git a/include/functions.h b/include/functions.h index 626bfc261..04f6dfb73 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1695,7 +1695,7 @@ 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 func_80151BB4(PlayState* play, u8 arg1); +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); @@ -1825,19 +1825,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 func_8016AC10(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, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); -// void func_8016AE1C(void); -// void func_8016B278(void); -// void func_8016B4B0(void); -// void func_8016C344(void); -// void func_8016CD4C(void); -// void func_8016E40C(void); -// void func_8016EA90(void); -void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx); -// void func_8016F4EC(void); -void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input); -void BombersNotebook_Init(BombersNotebook* this); -void BombersNotebook_Destroy(BombersNotebook* this); 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); diff --git a/include/macros.h b/include/macros.h index 9f2305e01..d2b98dec5 100644 --- a/include/macros.h +++ b/include/macros.h @@ -34,6 +34,7 @@ #define CLOCK_TIME(hr, min) (s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60)) #define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1)) +#define CLOCK_TIME_HOUR (CLOCK_TIME(1, 0)) #define DAY_LENGTH (CLOCK_TIME(24, 0)) #define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000)) @@ -44,6 +45,7 @@ #define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f))) #define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000)) #define CLOCK_TIME_ALT2_F(hr, min) ((((hr) + (min) / 60.0f) * 60.0f) / (24.0f * 60.0f / 0x10000)) +#define CLOCK_TIME_HOUR_F (CLOCK_TIME_F(1, 0)) #define CAPACITY(upg, value) gUpgradeCapacities[upg][value] #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) diff --git a/include/segment_symbols.h b/include/segment_symbols.h index a8e88e794..d7c959d23 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -57,6 +57,7 @@ DECLARE_ROM_SEGMENT(icon_item_static_old) DECLARE_ROM_SEGMENT(icon_item_24_static_test) DECLARE_ROM_SEGMENT(icon_item_24_static_old) DECLARE_ROM_SEGMENT(schedule_dma_static_test) +DECLARE_ROM_SEGMENT(schedule_dma_static_old) DECLARE_ROM_SEGMENT(schedule_static) DECLARE_ROM_SEGMENT(story_static) DECLARE_ROM_SEGMENT(do_action_static) diff --git a/include/tables/bombers_notebook/event_table.h b/include/tables/bombers_notebook/event_table.h new file mode 100644 index 000000000..161269a7e --- /dev/null +++ b/include/tables/bombers_notebook/event_table.h @@ -0,0 +1,48 @@ +/** + * Bombers Notebook Event Table + * + * DEFINE_EVENT should be used for events in the notebook + * - Argument 0: Enum value for the event + * - Argument 1: Icon to use (see BombersNotebookEventIcon) + * - Argument 2: WeekEventFlag that updates the icons color + * - Argument 3: Message id for the description of this event + * - Argument 4: Message id for the completion of this event + * - Argument 5: WeekEventFlag for the completion of this event + * + * Note: These events are after the MET events, so will start indexing at BOMBERS_NOTEBOOK_PERSON_MAX + */ +/* 0x14 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x2198, 0x2152, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY) +/* 0x15 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING, 0x2199, 0x2153, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING) +/* 0x16 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x219A, 0x2154, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI) +/* 0x17 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x219B, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI) +/* 0x18 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI, 0x219C, 0x2156, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI) +/* 0x19 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES, 0x219D, 0x2157, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES) +/* 0x1A */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x219E, 0x2158, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES) +/* 0x1B */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x219F, 0x2159, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT) +/* 0x1C */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM, 0x21A0, 0x215A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM) +/* 0x1D */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_DEFENDED_AGAINST_THEM, 0x21A1, 0x215B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM) +/* 0x1E */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A2, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE) +/* 0x1F */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_ESCORTED_CREMIA, 0x21A3, 0x215D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA) +/* 0x20 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A4, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK) +/* 0x21 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A5, 0x215F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK) +/* 0x22 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_PRIORITY_MAIL, 0x21A6, 0x2160, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL) +/* 0x23 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A7, 0x2161, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL) +/* 0x24 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A8, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE) +/* 0x25 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A9, 0x2163, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK) +/* 0x26 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AA, 0x2164, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP) +/* 0x27 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AB, 0x2165, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP) +/* 0x28 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AC, 0x2166, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP) +/* 0x29 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AD, 0x2167, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP) +/* 0x2A */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AE, 0x2168, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP) +/* 0x2B */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AF, 0x2169, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP) +/* 0x2C */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B0, 0x216A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK) +/* 0x2D */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B1, 0x216B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK) +/* 0x2E */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B2, 0x216C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD) +/* 0x2F */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B3, 0x216D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK) +/* 0x30 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B4, 0x216E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK) +/* 0x31 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B5, 0x216F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT) +/* 0x32 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B6, 0x2170, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK) +/* 0x33 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B7, 0x2171, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK) +/* 0x34 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B8, 0x2172, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK) +/* 0x35 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B9, 0x2173, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK) +/* 0x36 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21BA, 0x2174, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK) diff --git a/include/tables/bombers_notebook/person_table.h b/include/tables/bombers_notebook/person_table.h new file mode 100644 index 000000000..71771956b --- /dev/null +++ b/include/tables/bombers_notebook/person_table.h @@ -0,0 +1,31 @@ +/** + * Bombers Notebook Person Table + * + * DEFINE_PERSON should be used for people with entries in the notebook + * - Argument 0: Enum value for this person + * - Argument 1: Photo texture for this person + * - Argument 2: Message id for the description of this person + * - Argument 3: Enum value for the event meeting this person + * - Argument 4: Message id for the event meeting this person + * - Argument 5: WeekEventFlag for the event meeting this person + */ +/* 0x00 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMBERS, D_07009800, 0x21DD, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS, 0x2147, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) +/* 0x01 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJU, D_07000000, 0x21CA, BOMBERS_NOTEBOOK_EVENT_MET_ANJU, 0x2134, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) +/* 0x02 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAFEI, D_07000800, 0x21CB, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI, 0x2135, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) +/* 0x03 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CURIOSITY_SHOP_MAN, D_07001000, 0x21CC, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN, 0x2136, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) +/* 0x04 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMB_SHOP_LADY, D_07001800, 0x21CD, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY, 0x2137, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) +/* 0x05 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROMANI, D_07002000, 0x21CE, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI, 0x2138, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) +/* 0x06 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CREMIA, D_07002800, 0x21CF, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA, 0x2139, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) +/* 0x07 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MAYOR_DOTOUR, D_07003000, 0x21D0, BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR, 0x213A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) +/* 0x08 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MADAME_AROMA, D_07003800, 0x21D1, BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA, 0x213B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA) +/* 0x09 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOTO, D_07004000, 0x21D2, BOMBERS_NOTEBOOK_EVENT_MET_TOTO, 0x213C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) +/* 0x0A */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN, D_07004800, 0x21D3, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN, 0x213D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) +/* 0x0B */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_POSTMAN, D_07005000, 0x21D4, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN, 0x213E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) +/* 0x0C */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROSA_SISTERS, D_07005800, 0x21D5, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS, 0x213F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) +/* 0x0D */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOILET_HAND, D_07006000, 0x21D6, BOMBERS_NOTEBOOK_EVENT_MET_TOLIET_HAND, 0x2140, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) +/* 0x0E */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJUS_GRANDMOTHER, D_07006800, 0x21D7, BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER, 0x2141, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) +/* 0x0F */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAMARO, D_07007000, 0x21D8, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO, 0x2142, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) +/* 0x10 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GROG, D_07007800, 0x21D9, BOMBERS_NOTEBOOK_EVENT_MET_GROG, 0x2143, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG) +/* 0x11 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN_BROTHERS, D_07008000, 0x21DA, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS, 0x2144, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) +/* 0x12 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_SHIRO, D_07008800, 0x21DB, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO, 0x2145, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) +/* 0x13 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GURU_GURU, D_07009000, 0x21DC, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU, 0x2146, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) diff --git a/include/variables.h b/include/variables.h index ba1548f0f..108fa5833 100644 --- a/include/variables.h +++ b/include/variables.h @@ -563,8 +563,6 @@ extern UNK_PTR D_801C5CB0; // extern UNK_TYPE2 D_801C6A90; // extern UNK_TYPE2 D_801C6A94; extern u8 gPageSwitchNextButtonStatus[6][5]; -// extern UNK_TYPE1 D_801C6AB8; -// extern UNK_TYPE1 D_801C6B28; // extern UNK_TYPE1 D_801CED40; // extern UNK_TYPE2 D_801CFC78; // extern UNK_TYPE1 D_801CFC7A; @@ -697,53 +695,6 @@ extern s32 gDbgCamEnabled; extern Input* D_801D0D60; // extern UNK_TYPE2 sPlayerCsIdToCsCamId; // extern UNK_TYPE1 D_801D0D7A; -// extern UNK_TYPE1 D_801D0D80; -// extern UNK_TYPE1 D_801D11F4; -// extern UNK_TYPE1 D_801D1230; -// extern UNK_TYPE1 D_801D1234; -// extern UNK_TYPE4 D_801D1238; -// extern UNK_TYPE1 D_801D1244; -// extern UNK_TYPE1 D_801D12C0; -// extern UNK_TYPE1 D_801D12D0; -// extern UNK_TYPE1 D_801D12D4; -// extern UNK_TYPE1 D_801D12D8; -// extern UNK_TYPE1 D_801D12DC; -// extern UNK_TYPE2 D_801D1330; -// extern UNK_TYPE1 D_801D1342; -// extern UNK_TYPE2 D_801D1344; -// extern UNK_TYPE1 D_801D1368; -// extern UNK_TYPE2 D_801D1374; -// extern UNK_TYPE1 D_801D1388; -// extern UNK_TYPE2 D_801D13D8; -// extern UNK_TYPE2 D_801D13DC; -// extern UNK_TYPE2 D_801D13E0; -// extern UNK_TYPE2 D_801D13E4; -// extern UNK_TYPE4 D_801D13E8; -// extern UNK_TYPE1 D_801D13EC; -// extern UNK_TYPE1 D_801D13F0; -// extern UNK_TYPE1 D_801D13F4; -// extern UNK_TYPE1 D_801D13F8; -// extern UNK_TYPE1 D_801D1420; -// extern UNK_TYPE2 D_801D142C; -// extern UNK_TYPE2 D_801D1434; -// extern UNK_TYPE2 D_801D1438; -// extern UNK_TYPE2 D_801D143C; -// extern UNK_TYPE2 D_801D1440; -// extern UNK_TYPE2 D_801D1444; -// extern UNK_TYPE2 D_801D1448; -// extern UNK_TYPE2 D_801D144C; -// extern UNK_TYPE2 D_801D1450; -// extern UNK_TYPE2 D_801D1454; -// extern UNK_TYPE2 D_801D1458; -// extern UNK_TYPE2 D_801D145C; -// extern UNK_TYPE2 D_801D1460; -// extern UNK_TYPE1 D_801D1464; -// extern UNK_TYPE1 D_801D1468; -// extern UNK_TYPE1 D_801D146C; -// extern UNK_TYPE2 D_801D14DC; -// extern UNK_TYPE2 D_801D14E0; -// extern UNK_TYPE2 D_801D14E4; -// extern UNK_TYPE2 D_801D14E8; // extern UNK_TYPE4 D_801D14F0; extern u32 retryCount; diff --git a/include/z64.h b/include/z64.h index 1b9cabdc9..641a060b4 100644 --- a/include/z64.h +++ b/include/z64.h @@ -35,6 +35,7 @@ #include "z64animation_legacy.h" #include "z64audio.h" #include "z64bgcheck.h" +#include "z64bombers_notebook.h" #include "z64camera.h" #include "z64collision_check.h" #include "z64curve.h" @@ -529,26 +530,6 @@ typedef struct PlayState { /* 0x18E6C */ char unk_18E6C[0x3EC]; } PlayState; // size = 0x19258 -typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ char unk_01[0x3F]; - /* 0x40 */ void* unk_40; - /* 0x44 */ u32 unk_44; - /* 0x48 */ u32 unk_48; - /* 0x4C */ DmaRequest unk_4C; - /* 0x6C */ OSMesgQueue unk_6C; - /* 0x84 */ OSMesg unk_84[1]; - /* 0x88 */ void* unk_88; - /* 0x8C */ uintptr_t unk_8C; - /* 0x90 */ size_t unk_90; - /* 0x94 */ s32 unk_94; - /* 0x98 */ s32 unk_98; - /* 0x9C */ s32 unk_9C; - /* 0xA0 */ char unk_A0[0x4]; - /* 0xA4 */ s32 unk_A4; - /* 0xA8 */ s32 unk_A8; -} BombersNotebook; // size = 0xAC - typedef enum { /* 0 */ PICTO_PHOTO_STATE_OFF, /* 1 */ PICTO_PHOTO_STATE_SETUP, diff --git a/include/z64bombers_notebook.h b/include/z64bombers_notebook.h new file mode 100644 index 000000000..403f4a88a --- /dev/null +++ b/include/z64bombers_notebook.h @@ -0,0 +1,58 @@ +#ifndef Z64BOMBERS_NOTEBOOK_H +#define Z64BOMBERS_NOTEBOOK_H + +#include "ultra64.h" +#include "io/controller.h" +#include "z64dma.h" + +#define DEFINE_PERSON(enum, _photo, _description, _metEnum, _metMessage, _metFlag) enum, +typedef enum BombersNotebookPerson { + #include "tables/bombers_notebook/person_table.h" + /* 0x14 */ BOMBERS_NOTEBOOK_PERSON_MAX +} BombersNotebookPerson; + +#undef DEFINE_PERSON + +typedef enum BombersNotebookLoadState { + /* 0 */ BOMBERS_NOTEBOOK_LOAD_STATE_NONE, + /* 1 */ BOMBERS_NOTEBOOK_LOAD_STATE_STARTED, + /* 2 */ BOMBERS_NOTEBOOK_LOAD_STATE_DONE +} BombersNotebookLoadState; + +#define DEFINE_PERSON(_enum, _photo, _description, metEnum, _metMessage, _metFlag) metEnum, +#define DEFINE_EVENT(enum, _icon, _colorFlag, _description, _completedMessage, _completedFlag) enum, +typedef enum BombersNotebookEvent { + #include "tables/bombers_notebook/person_table.h" + #include "tables/bombers_notebook/event_table.h" + /* 0x37 */ BOMBERS_NOTEBOOK_EVENT_MAX +} BombersNotebookEvent; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT + +typedef struct { + /* 0x00 */ u8 loadState; + /* 0x01 */ UNK_TYPE1 pad01[0x3F]; + /* 0x40 */ void* scheduleDmaSegment; + /* 0x44 */ uintptr_t scheduleDmaSegmentStart; + /* 0x48 */ size_t scheduleDmaSegmentSize; + /* 0x4C */ DmaRequest dmaRequest; + /* 0x6C */ OSMesgQueue loadQueue; + /* 0x84 */ OSMesg loadMsg[1]; + /* 0x88 */ void* scheduleSegment; + /* 0x8C */ uintptr_t scheduleSegmentStart; + /* 0x90 */ size_t scheduleSegmentSize; + /* 0x94 */ s32 cursorPageRow; + /* 0x98 */ s32 cursorEntry; // Entries are 3 apart, see BOMBERS_NOTEBOOK_ENTRY_SIZE + /* 0x9C */ s32 cursorPage; + /* 0xA0 */ UNK_TYPE1 padA0[0x4]; + /* 0xA4 */ s32 scrollAmount; + /* 0xA8 */ s32 scrollOffset; +} BombersNotebook; // size = 0xAC + +void BombersNotebook_Draw(BombersNotebook* this, struct GraphicsContext* gfxCtx); +void BombersNotebook_Update(struct PlayState* play, BombersNotebook* this, Input* input); +void BombersNotebook_Init(BombersNotebook* this); +void BombersNotebook_Destroy(BombersNotebook* this); + +#endif diff --git a/include/z64message.h b/include/z64message.h index 2b0387045..09c9c4e04 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -9,6 +9,9 @@ struct Actor; struct MessageTableEntry; struct OcarinaStaff; +extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; +extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; + typedef enum TextState { /* 0 */ TEXT_STATE_NONE, /* 1 */ TEXT_STATE_1, @@ -159,8 +162,8 @@ typedef struct MessageContext { /* 0x120A0 */ s32 unk120A0; /* 0x120A4 */ s16 unk120A4[6]; /* 0x120B0 */ u8 unk120B0; - /* 0x120B1 */ u8 unk120B1; - /* 0x120B2 */ u8 unk120B2[0xA]; + /* 0x120B1 */ u8 bombersNotebookEventQueueCount; + /* 0x120B2 */ u8 bombersNotebookEventQueue[10]; /* 0x120BC */ u16 unk_120BC; /* 0x120BE */ s16 unk120BE; /* 0x120C0 */ s16 unk120C0; diff --git a/include/z64save.h b/include/z64save.h index 805b62e5a..312b18b2e 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -733,13 +733,13 @@ typedef enum { #define WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON PACK_WEEKEVENTREG_FLAG(21, 0x08) #define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10) -#define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20) +#define WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM PACK_WEEKEVENTREG_FLAG(21, 0x20) #define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40) #define WEEKEVENTREG_21_80 PACK_WEEKEVENTREG_FLAG(21, 0x80) // Aliens defeated // "Winning" the alien invasion -#define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01) +#define WEEKEVENTREG_DEFENDED_AGAINST_THEM PACK_WEEKEVENTREG_FLAG(22, 0x01) #define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02) @@ -795,11 +795,11 @@ typedef enum { #define WEEKEVENTREG_26_40 PACK_WEEKEVENTREG_FLAG(26, 0x40) #define WEEKEVENTREG_26_80 PACK_WEEKEVENTREG_FLAG(26, 0x80) #define WEEKEVENTREG_27_01 PACK_WEEKEVENTREG_FLAG(27, 0x01) -#define WEEKEVENTREG_27_02 PACK_WEEKEVENTREG_FLAG(27, 0x02) -#define WEEKEVENTREG_27_04 PACK_WEEKEVENTREG_FLAG(27, 0x04) -#define WEEKEVENTREG_27_08 PACK_WEEKEVENTREG_FLAG(27, 0x08) -#define WEEKEVENTREG_27_10 PACK_WEEKEVENTREG_FLAG(27, 0x10) -#define WEEKEVENTREG_27_20 PACK_WEEKEVENTREG_FLAG(27, 0x20) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x02) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x04) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x08) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x10) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x20) #define WEEKEVENTREG_27_40 PACK_WEEKEVENTREG_FLAG(27, 0x40) #define WEEKEVENTREG_27_80 PACK_WEEKEVENTREG_FLAG(27, 0x80) #define WEEKEVENTREG_28_01 PACK_WEEKEVENTREG_FLAG(28, 0x01) @@ -956,22 +956,22 @@ typedef enum { #define WEEKEVENTREG_50_01 PACK_WEEKEVENTREG_FLAG(50, 0x01) #define WEEKEVENTREG_50_02 PACK_WEEKEVENTREG_FLAG(50, 0x02) #define WEEKEVENTREG_50_04 PACK_WEEKEVENTREG_FLAG(50, 0x04) -#define WEEKEVENTREG_50_08 PACK_WEEKEVENTREG_FLAG(50, 0x08) +#define WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(50, 0x08) #define WEEKEVENTREG_50_10 PACK_WEEKEVENTREG_FLAG(50, 0x10) -#define WEEKEVENTREG_50_20 PACK_WEEKEVENTREG_FLAG(50, 0x20) +#define WEEKEVENTREG_HAD_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(50, 0x20) #define WEEKEVENTREG_50_40 PACK_WEEKEVENTREG_FLAG(50, 0x40) -#define WEEKEVENTREG_50_80 PACK_WEEKEVENTREG_FLAG(50, 0x80) -#define WEEKEVENTREG_51_01 PACK_WEEKEVENTREG_FLAG(51, 0x01) +#define WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(50, 0x80) +#define WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(51, 0x01) #define WEEKEVENTREG_51_02 PACK_WEEKEVENTREG_FLAG(51, 0x02) #define WEEKEVENTREG_51_04 PACK_WEEKEVENTREG_FLAG(51, 0x04) #define WEEKEVENTREG_51_08 PACK_WEEKEVENTREG_FLAG(51, 0x08) #define WEEKEVENTREG_51_10 PACK_WEEKEVENTREG_FLAG(51, 0x10) -#define WEEKEVENTREG_51_20 PACK_WEEKEVENTREG_FLAG(51, 0x20) +#define WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(51, 0x20) #define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40) #define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80) // ProtectedCremia -#define WEEKEVENTREG_52_01 PACK_WEEKEVENTREG_FLAG(52, 0x01) +#define WEEKEVENTREG_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(52, 0x01) // Lose Milk Run minigame #define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02) @@ -1101,61 +1101,65 @@ typedef enum { #define WEEKEVENTREG_65_20 PACK_WEEKEVENTREG_FLAG(65, 0x20) #define WEEKEVENTREG_65_40 PACK_WEEKEVENTREG_FLAG(65, 0x40) #define WEEKEVENTREG_65_80 PACK_WEEKEVENTREG_FLAG(65, 0x80) -#define WEEKEVENTREG_66_01 PACK_WEEKEVENTREG_FLAG(66, 0x01) -#define WEEKEVENTREG_66_02 PACK_WEEKEVENTREG_FLAG(66, 0x02) -#define WEEKEVENTREG_66_04 PACK_WEEKEVENTREG_FLAG(66, 0x04) -#define WEEKEVENTREG_66_08 PACK_WEEKEVENTREG_FLAG(66, 0x08) -#define WEEKEVENTREG_66_10 PACK_WEEKEVENTREG_FLAG(66, 0x10) -#define WEEKEVENTREG_66_20 PACK_WEEKEVENTREG_FLAG(66, 0x20) -#define WEEKEVENTREG_66_40 PACK_WEEKEVENTREG_FLAG(66, 0x40) -#define WEEKEVENTREG_66_80 PACK_WEEKEVENTREG_FLAG(66, 0x80) -#define WEEKEVENTREG_67_01 PACK_WEEKEVENTREG_FLAG(67, 0x01) -#define WEEKEVENTREG_67_02 PACK_WEEKEVENTREG_FLAG(67, 0x02) -#define WEEKEVENTREG_67_04 PACK_WEEKEVENTREG_FLAG(67, 0x04) -#define WEEKEVENTREG_67_08 PACK_WEEKEVENTREG_FLAG(67, 0x08) -#define WEEKEVENTREG_67_10 PACK_WEEKEVENTREG_FLAG(67, 0x10) -#define WEEKEVENTREG_67_20 PACK_WEEKEVENTREG_FLAG(67, 0x20) -#define WEEKEVENTREG_67_40 PACK_WEEKEVENTREG_FLAG(67, 0x40) -#define WEEKEVENTREG_67_80 PACK_WEEKEVENTREG_FLAG(67, 0x80) -#define WEEKEVENTREG_68_01 PACK_WEEKEVENTREG_FLAG(68, 0x01) -#define WEEKEVENTREG_68_02 PACK_WEEKEVENTREG_FLAG(68, 0x02) -#define WEEKEVENTREG_68_04 PACK_WEEKEVENTREG_FLAG(68, 0x04) -#define WEEKEVENTREG_68_08 PACK_WEEKEVENTREG_FLAG(68, 0x08) -#define WEEKEVENTREG_68_10 PACK_WEEKEVENTREG_FLAG(68, 0x10) -#define WEEKEVENTREG_68_20 PACK_WEEKEVENTREG_FLAG(68, 0x20) -#define WEEKEVENTREG_68_40 PACK_WEEKEVENTREG_FLAG(68, 0x40) -#define WEEKEVENTREG_68_80 PACK_WEEKEVENTREG_FLAG(68, 0x80) -#define WEEKEVENTREG_69_01 PACK_WEEKEVENTREG_FLAG(69, 0x01) -#define WEEKEVENTREG_69_02 PACK_WEEKEVENTREG_FLAG(69, 0x02) -#define WEEKEVENTREG_69_04 PACK_WEEKEVENTREG_FLAG(69, 0x04) -#define WEEKEVENTREG_69_08 PACK_WEEKEVENTREG_FLAG(69, 0x08) -#define WEEKEVENTREG_69_10 PACK_WEEKEVENTREG_FLAG(69, 0x10) -#define WEEKEVENTREG_69_20 PACK_WEEKEVENTREG_FLAG(69, 0x20) -#define WEEKEVENTREG_69_40 PACK_WEEKEVENTREG_FLAG(69, 0x40) -#define WEEKEVENTREG_69_80 PACK_WEEKEVENTREG_FLAG(69, 0x80) -#define WEEKEVENTREG_70_01 PACK_WEEKEVENTREG_FLAG(70, 0x01) -#define WEEKEVENTREG_70_02 PACK_WEEKEVENTREG_FLAG(70, 0x02) -#define WEEKEVENTREG_70_04 PACK_WEEKEVENTREG_FLAG(70, 0x04) -#define WEEKEVENTREG_70_08 PACK_WEEKEVENTREG_FLAG(70, 0x08) -#define WEEKEVENTREG_70_10 PACK_WEEKEVENTREG_FLAG(70, 0x10) -#define WEEKEVENTREG_70_20 PACK_WEEKEVENTREG_FLAG(70, 0x20) -#define WEEKEVENTREG_70_40 PACK_WEEKEVENTREG_FLAG(70, 0x40) -#define WEEKEVENTREG_70_80 PACK_WEEKEVENTREG_FLAG(70, 0x80) -#define WEEKEVENTREG_71_01 PACK_WEEKEVENTREG_FLAG(71, 0x01) -#define WEEKEVENTREG_71_02 PACK_WEEKEVENTREG_FLAG(71, 0x02) -#define WEEKEVENTREG_71_04 PACK_WEEKEVENTREG_FLAG(71, 0x04) -#define WEEKEVENTREG_71_08 PACK_WEEKEVENTREG_FLAG(71, 0x08) -#define WEEKEVENTREG_71_10 PACK_WEEKEVENTREG_FLAG(71, 0x10) -#define WEEKEVENTREG_71_20 PACK_WEEKEVENTREG_FLAG(71, 0x20) -#define WEEKEVENTREG_71_40 PACK_WEEKEVENTREG_FLAG(71, 0x40) -#define WEEKEVENTREG_71_80 PACK_WEEKEVENTREG_FLAG(71, 0x80) -#define WEEKEVENTREG_72_01 PACK_WEEKEVENTREG_FLAG(72, 0x01) -#define WEEKEVENTREG_72_02 PACK_WEEKEVENTREG_FLAG(72, 0x02) -#define WEEKEVENTREG_72_04 PACK_WEEKEVENTREG_FLAG(72, 0x04) -#define WEEKEVENTREG_72_08 PACK_WEEKEVENTREG_FLAG(72, 0x08) -#define WEEKEVENTREG_72_10 PACK_WEEKEVENTREG_FLAG(72, 0x10) -#define WEEKEVENTREG_72_20 PACK_WEEKEVENTREG_FLAG(72, 0x20) -#define WEEKEVENTREG_72_40 PACK_WEEKEVENTREG_FLAG(72, 0x40) + +/* Bombers' Notebook Events */ + +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU PACK_WEEKEVENTREG_FLAG(66, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI PACK_WEEKEVENTREG_FLAG(66, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN PACK_WEEKEVENTREG_FLAG(66, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY PACK_WEEKEVENTREG_FLAG(66, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI PACK_WEEKEVENTREG_FLAG(66, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA PACK_WEEKEVENTREG_FLAG(66, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR PACK_WEEKEVENTREG_FLAG(66, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA PACK_WEEKEVENTREG_FLAG(66, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO PACK_WEEKEVENTREG_FLAG(67, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN PACK_WEEKEVENTREG_FLAG(67, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN PACK_WEEKEVENTREG_FLAG(67, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS PACK_WEEKEVENTREG_FLAG(67, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND PACK_WEEKEVENTREG_FLAG(67, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER PACK_WEEKEVENTREG_FLAG(67, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO PACK_WEEKEVENTREG_FLAG(67, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG PACK_WEEKEVENTREG_FLAG(67, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS PACK_WEEKEVENTREG_FLAG(68, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO PACK_WEEKEVENTREG_FLAG(68, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU PACK_WEEKEVENTREG_FLAG(68, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS PACK_WEEKEVENTREG_FLAG(68, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY PACK_WEEKEVENTREG_FLAG(68, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(68, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI PACK_WEEKEVENTREG_FLAG(68, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI PACK_WEEKEVENTREG_FLAG(68, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI PACK_WEEKEVENTREG_FLAG(69, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(69, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(69, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(69, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM PACK_WEEKEVENTREG_FLAG(69, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM PACK_WEEKEVENTREG_FLAG(69, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE PACK_WEEKEVENTREG_FLAG(69, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(69, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK PACK_WEEKEVENTREG_FLAG(70, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK PACK_WEEKEVENTREG_FLAG(70, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(70, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(70, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE PACK_WEEKEVENTREG_FLAG(70, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK PACK_WEEKEVENTREG_FLAG(70, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP PACK_WEEKEVENTREG_FLAG(70, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP PACK_WEEKEVENTREG_FLAG(70, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP PACK_WEEKEVENTREG_FLAG(71, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP PACK_WEEKEVENTREG_FLAG(71, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP PACK_WEEKEVENTREG_FLAG(71, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP PACK_WEEKEVENTREG_FLAG(71, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK PACK_WEEKEVENTREG_FLAG(71, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK PACK_WEEKEVENTREG_FLAG(71, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD PACK_WEEKEVENTREG_FLAG(71, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK PACK_WEEKEVENTREG_FLAG(71, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK PACK_WEEKEVENTREG_FLAG(72, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT PACK_WEEKEVENTREG_FLAG(72, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK PACK_WEEKEVENTREG_FLAG(72, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK PACK_WEEKEVENTREG_FLAG(72, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK PACK_WEEKEVENTREG_FLAG(72, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK PACK_WEEKEVENTREG_FLAG(72, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK PACK_WEEKEVENTREG_FLAG(72, 0x40) + #define WEEKEVENTREG_72_80 PACK_WEEKEVENTREG_FLAG(72, 0x80) #define WEEKEVENTREG_73_01 PACK_WEEKEVENTREG_FLAG(73, 0x01) #define WEEKEVENTREG_73_02 PACK_WEEKEVENTREG_FLAG(73, 0x02) @@ -1180,7 +1184,7 @@ typedef enum { #define WEEKEVENTREG_75_02 PACK_WEEKEVENTREG_FLAG(75, 0x02) #define WEEKEVENTREG_75_04 PACK_WEEKEVENTREG_FLAG(75, 0x04) #define WEEKEVENTREG_75_08 PACK_WEEKEVENTREG_FLAG(75, 0x08) -#define WEEKEVENTREG_75_10 PACK_WEEKEVENTREG_FLAG(75, 0x10) +#define WEEKEVENTREG_RECEIVED_ROOM_KEY PACK_WEEKEVENTREG_FLAG(75, 0x10) #define WEEKEVENTREG_75_20 PACK_WEEKEVENTREG_FLAG(75, 0x20) #define WEEKEVENTREG_75_40 PACK_WEEKEVENTREG_FLAG(75, 0x40) #define WEEKEVENTREG_75_80 PACK_WEEKEVENTREG_FLAG(75, 0x80) @@ -1226,7 +1230,7 @@ typedef enum { // Aveil has spotted Player #define WEEKEVENTREG_80_08 PACK_WEEKEVENTREG_FLAG(80, 0x08) -#define WEEKEVENTREG_80_10 PACK_WEEKEVENTREG_FLAG(80, 0x10) +#define WEEKEVENTREG_RECEIVED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(80, 0x10) #define WEEKEVENTREG_80_20 PACK_WEEKEVENTREG_FLAG(80, 0x20) #define WEEKEVENTREG_80_40 PACK_WEEKEVENTREG_FLAG(80, 0x40) #define WEEKEVENTREG_80_80 PACK_WEEKEVENTREG_FLAG(80, 0x80) diff --git a/spec b/spec index a3cde9e58..e427e6866 100644 --- a/spec +++ b/spec @@ -373,7 +373,8 @@ endseg beginseg name "schedule_static" compress - include "build/baserom/schedule_static.o" + include "build/assets/interface/schedule_static/schedule_static.o" + number 8 endseg beginseg @@ -548,7 +549,6 @@ beginseg include "build/src/code/z_overlay.o" include "build/src/code/z_play.o" include "build/src/code/z_play_hireso.o" - include "build/data/code/z_play_hireso.data.o" include "build/src/code/PreRender.o" include "build/data/code/PreRender.bss.o" include "build/src/code/TwoHeadGfxArena.o" diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index d0f757125..1d2046e57 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64shrink_window.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" diff --git a/src/code/z_message.c b/src/code/z_message.c index 8681967e6..38f44d9ec 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -5,6 +5,27 @@ #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #if 0 +#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, metMessage, _metFlag) metMessage, +#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, completedMessage, _completedFlag) completedMessage, + +u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX] = { +#include "tables/bombers_notebook/person_table.h" +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT + +#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, _metMessage, metFlag) metFlag, +#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, _completedMessage, completedFlag) completedFlag, + +u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX] = { +#include "tables/bombers_notebook/person_table.h" +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT s16 D_801D02D8[15] = { ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect @@ -20,8 +41,6 @@ s32 D_801D02F8[15] = { 0,1,2,3,4,0,1,0,0,0,0,0,1,1,0 }; #endif -extern u16 D_801C6AB8[]; -extern u16 D_801C6B28[]; extern s16 D_801D02D8[]; extern s32 D_801D02F8[]; extern s16 D_801F6B0C; @@ -365,19 +384,19 @@ void func_80151A68(PlayState* play, u16 textId) { } } -void func_80151BB4(PlayState* play, u8 arg1) { +void Message_BombersNotebookQueueEvent(PlayState* play, u8 event) { MessageContext* msgCtx = &play->msgCtx; - u8 temp = arg1; if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) { - msgCtx->unk120B2[msgCtx->unk120B1] = temp; - msgCtx->unk120B1++; + if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[event])) { + msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount] = event; + msgCtx->bombersNotebookEventQueueCount++; } - } else if (arg1 >= 20) { - if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) { - msgCtx->unk120B2[msgCtx->unk120B1] = temp; - msgCtx->unk120B1++; + } else if (event >= BOMBERS_NOTEBOOK_PERSON_MAX) { + // Non MET events are processed even if the player does not have the notebook yet + if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[event])) { + msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount] = event; + msgCtx->bombersNotebookEventQueueCount++; } } } @@ -386,16 +405,22 @@ u32 func_80151C9C(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; while (true) { - if (msgCtx->unk120B1 == 0) { + if (msgCtx->bombersNotebookEventQueueCount == 0) { return false; } - msgCtx->unk120B1--; + msgCtx->bombersNotebookEventQueueCount--; - if (!CHECK_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]])) { - SET_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]); + if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]])) { + SET_WEEKEVENTREG(gBombersNotebookWeekEventFlags + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]); - if ((D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]] != 0) && CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - Message_ContinueTextbox(play, D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]]); + if ((sBombersNotebookEventMessages + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]] != 0) && + CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { + Message_ContinueTextbox( + play, sBombersNotebookEventMessages + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]); play_sound(NA_SE_SY_SCHEDULE_WRITE); return true; } @@ -476,7 +501,7 @@ u8 Message_GetState(MessageContext* msgCtx) { if (msgCtx->msgMode == 0x40) { return TEXT_STATE_13; } - if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->unk120B1 == 0)) { + if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->bombersNotebookEventQueueCount == 0)) { return TEXT_STATE_CLOSING; } diff --git a/src/code/z_play.c b/src/code/z_play.c index dd9b6c561..6ef734aee 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,5 +1,6 @@ #include "global.h" #include "buffers.h" +#include "z64bombers_notebook.h" #include "z64debug_display.h" #include "z64quake.h" #include "z64rumble.h" @@ -1051,14 +1052,14 @@ void Play_Update(PlayState* this) { if (!sBombersNotebookOpen) { if (this->pauseCtx.bombersNotebookOpen) { sBombersNotebookOpen = true; - sBombersNotebook.unk_00 = 0; + sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE; } } else if (CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_L) || CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_B) || CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_START) || (gIrqMgrResetStatus != 0)) { sBombersNotebookOpen = false; this->pauseCtx.bombersNotebookOpen = false; - sBombersNotebook.unk_00 = 0; + sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE; this->msgCtx.msgLength = 0; this->msgCtx.msgMode = 0; this->msgCtx.currentTextId = 0; diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index 829fe71f2..b995028ca 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -1,27 +1,1363 @@ #include "global.h" +#include "z64bombers_notebook.h" +#include "interface/schedule_static/schedule_static.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016AC10.s") +// TODO: Needs YAZ0 +// Segment 0x07 schedule_dma_static_test +extern TexturePtr D_07000000; +extern TexturePtr D_07000800; +extern TexturePtr D_07001000; +extern TexturePtr D_07001800; +extern TexturePtr D_07002000; +extern TexturePtr D_07002800; +extern TexturePtr D_07003000; +extern TexturePtr D_07003800; +extern TexturePtr D_07004000; +extern TexturePtr D_07004800; +extern TexturePtr D_07005000; +extern TexturePtr D_07005800; +extern TexturePtr D_07006000; +extern TexturePtr D_07006800; +extern TexturePtr D_07007000; +extern TexturePtr D_07007800; +extern TexturePtr D_07008000; +extern TexturePtr D_07008800; +extern TexturePtr D_07009000; +extern TexturePtr D_07009800; +extern TexturePtr D_0700AC00; +extern TexturePtr D_0700AEA0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016AE1C.s") +#define BOMBERS_NOTEBOOK_ENTRY_SIZE 3 +#define BOMBERS_NOTEBOOK_ENTRY_MAX 10 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016B278.s") +#define BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, entry) (((&sBombersNotebookEntries[row][entry])[0] & 0xF00) >> 8) +#define BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, entry) ((&sBombersNotebookEntries[row][entry])[0] & 0xFF) +#define BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(row, entry) ((&sBombersNotebookEntries[row][entry])[1]) +#define BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(row, entry) ((&sBombersNotebookEntries[row][entry])[2]) -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016B4B0.s") +#define BOMBERS_NOTEBOOK_ENTRY(pos, day, event, startTime, endTime) \ + ((pos)&0xF000) | (((day)&0xF) << 8) | ((event)&0xFF), (startTime), (endTime) +#define BOMBERS_NOTEBOOK_ENTRY_END 0x9999 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016C344.s") +#define BOMBERS_NOTEBOOK_ENTRY_POS_CENTER 0x0000 +#define BOMBERS_NOTEBOOK_ENTRY_POS_BELOW 0x4000 +#define BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE 0x8000 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016CD4C.s") +typedef enum { + /* 0 */ BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, + /* 1 */ BOMBERS_NOTEBOOK_EVENT_ICON_MASK, + /* 2 */ BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON +} BombersNotebookEventIcon; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016E40C.s") +#define BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE 0xFFF0 +#define BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI 0xFFF1 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016EA90.s") +u16 sBombersNotebookEntries[BOMBERS_NOTEBOOK_PERSON_MAX][BOMBERS_NOTEBOOK_ENTRY_MAX * BOMBERS_NOTEBOOK_ENTRY_SIZE] = { + { + /* Bombers */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 3, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Anju */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY, + CLOCK_TIME(13, 45), CLOCK_TIME(16, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING, + CLOCK_TIME(14, 30), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI, + CLOCK_TIME(23, 30), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI, + CLOCK_TIME(23, 30), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, CLOCK_TIME(17, 0), + CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, + BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, CLOCK_TIME(6, 0), + CLOCK_TIME(12, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, + CLOCK_TIME(5, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Kafei */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES, CLOCK_TIME(16, 30), + CLOCK_TIME(22, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT, + CLOCK_TIME(18, 0), CLOCK_TIME(19, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, + CLOCK_TIME(5, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Curiosity Shop Man */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK, + CLOCK_TIME(13, 0), CLOCK_TIME(22, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL, + CLOCK_TIME(13, 0), CLOCK_TIME(22, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK, + CLOCK_TIME(22, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Old Lady from Bomb Shop */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK, + CLOCK_TIME(0, 30), CLOCK_TIME(1, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Romani */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM, + CLOCK_TIME(2, 30), CLOCK_TIME(5, 15)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE, + CLOCK_TIME(2, 30), CLOCK_TIME(5, 15)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Cremia */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, + CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK, + CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Mayor Dotour */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, + CLOCK_TIME(8, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Madame Aroma */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Toto */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Gorman */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Postman */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, + CLOCK_TIME(15, 0), CLOCK_TIME(0, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, + CLOCK_TIME(6, 0), CLOCK_TIME(12, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, + CLOCK_TIME(15, 0), CLOCK_TIME(0, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Rosa Sisters */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* ??? */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Anju's Grandmother */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Kamaro */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Grog */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, + CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, + CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, + CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Gorman Brothers */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, + CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Shiro */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Guru-Guru */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s") +s16 sBombersNotebookDayRectRectLeft[] = { 120, 120, 270, 420 }; +TexturePtr sBombersNotebookDayTextures[] = { + gBombersNotebookDay1stTex, + gBombersNotebookDay2ndTex, + gBombersNotebookDayFinalTex, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F4EC.s") +#define DEFINE_EVENT(_enum, icon, _colorFlag, _description, _completedMessage, _completedFlag) icon, -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s") +s32 sBombersNotebookEventIcons[] = { +#include "tables/bombers_notebook/event_table.h" +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s") +#undef DEFINE_EVENT -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s") +s32 sBombersNotebookEventIconWidths[] = { 16, 24, 32 }; +s32 sBombersNotebookEventIconHeights[] = { 16, 28, 28 }; + +#define DEFINE_EVENT(_enum, _icon, colorFlag, _description, _completedMessage, _completedFlag) colorFlag, + +u16 sBombersNotebookEventColorWeekEventFlags[] = { +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_EVENT + +void BombersNotebook_DrawScisTexRect(Gfx** gfxP, s32 rxl, s32 ryl, s32 rxh, s32 ryh, s32 tile, s32 s, s32 t, s32 dsdx, + s32 dtdy) { + s32 xl = rxl - (gCfbLeftAdjust * 4); + s32 yl = ryl - (gCfbUpperAdjust * 4); + s32 xh = rxh - (gCfbLeftAdjust * 4); + s32 yh = ryh - (gCfbUpperAdjust * 4); + Gfx* gfx = *gfxP; + + gSPScisTextureRectangle(gfx++, xl, yl, xh, yh, tile, s, t, dsdx, dtdy); + + *gfxP = gfx; +} + +s16 sBombersNotebookHeaderColors[][3] = { + { 116, 134, 146 }, // Column 1 + { 158, 156, 131 }, // Column 2 + { 174, 141, 151 }, // Column 3 +}; + +void BombersNotebook_DrawHeaders(Gfx** gfxP) { + Gfx* gfx = *gfxP; + s32 i; + s32 rectLeft; + + gDPLoadTextureBlock(gfx++, gBombersNotebookHeaderBoxTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + for (i = 0, rectLeft = 120; i < ARRAY_COUNT(sBombersNotebookHeaderColors); i++, rectLeft += 150) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookHeaderColors[i][0], sBombersNotebookHeaderColors[i][1], + sBombersNotebookHeaderColors[i][2], 192); + BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 74 * 4, (rectLeft + 143) * 4, 98 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + } + + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + for (i = 0, rectLeft = 124; i < ARRAY_COUNT(sBombersNotebookDayTextures); i++, rectLeft += 150) { + gDPLoadTextureBlock(gfx++, sBombersNotebookDayTextures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 48, 22, 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); + BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 77 * 4, (rectLeft + 48) * 4, 99 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + } + + rectLeft = 172; + gDPLoadTextureBlock_4b(gfx++, gBombersNotebook1800Tex, G_IM_FMT_IA, 48, 11, 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); + for (i = 0; i < 3; i++) { + BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 86 * 4, (rectLeft + 48) * 4, 97 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + rectLeft += 150; + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +// Each column/day gets subdivided into 4 sub columns, the first 2 sub columns use 1 color, the last 2 another +s16 sBombersNotebookColumnColors[][2][3] = { + { { 165, 183, 195 }, { 140, 158, 170 } }, // Column 1 + { { 197, 195, 172 }, { 172, 170, 147 } }, // Column 2 + { { 223, 190, 200 }, { 190, 165, 175 } }, // Column 3 +}; + +void BombersNotebook_DrawColumns(Gfx** gfxP) { + Gfx* gfx = *gfxP; + s16* color; + s32 i; + s32 j; + s32 k; + s32 columnRectLeft; + s32 subColumnRectLeft; + s32 pad; + + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookSubColumnBoxTex, G_IM_FMT_I, 48, 1, 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); + + color = &sBombersNotebookColumnColors[0][0][0]; + for (i = 0, columnRectLeft = 120; i < ARRAY_COUNT(sBombersNotebookColumnColors); i++, columnRectLeft += 150) { + subColumnRectLeft = columnRectLeft; + for (j = 0; j < 2; j++) { + gDPSetPrimColor(gfx++, 0, 0, color[0], color[1], color[2], 192); + for (k = 0; k < 2; k++) { + BombersNotebook_DrawScisTexRect(&gfx, subColumnRectLeft * 4, 104 * 4, (subColumnRectLeft + 48) * 4, + 480 * 4, 0, 0, 0, 1 << 10, 1 << 10); + subColumnRectLeft += 36; + } + color += 3; + } + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +TexturePtr sBombersNotebookEventIconTextures[] = { + gBombersNotebookEntryIconExclamationPointTex, + &D_0700AC00, + &D_0700AEA0, +}; +s16 sBombersNotebookEntryIconColors[][3] = { + { 255, 255, 0 }, + { 141, 255, 182 }, + { 255, 100, 60 }, +}; + +void BombersNotebook_DrawEntries(Gfx** gfxP, s32 row, u32 rectTop) { + Gfx* gfx = *gfxP; + s32 entryRectLeft; + u32 eventIcon; + u32 unfinishedEvent = false; + u16 startTime; + u16 endTime; + s32 j = 0; + u32 iconRectLeft; + s32 entryRectRight; + u32 yOffset; + s32 entryWidth; + + while (true) { + if (sBombersNotebookEntries[row][j] == BOMBERS_NOTEBOOK_ENTRY_END) { + if (!unfinishedEvent) { + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookStampTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 48, 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); + BombersNotebook_DrawScisTexRect(&gfx, 567 * 4, (rectTop + 1) * 4, 599 * 4, (rectTop + 49) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(gfx++, 255, 0, 0, 255); + BombersNotebook_DrawScisTexRect(&gfx, 565 * 4, (rectTop + -1) * 4, 597 * 4, (rectTop + 47) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + } + break; + } + + if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset = 8; + } else if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW) { + yOffset = 24; + } else { // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset = 16; + } + + startTime = BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(row, j) - CLOCK_TIME(6, 0); + endTime = BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(row, j) - CLOCK_TIME(6, 0); + entryRectLeft = + sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, j)] + (startTime / CLOCK_TIME(0, 10)); + entryRectRight = + sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, j)] + (endTime / CLOCK_TIME(0, 10)); + entryWidth = entryRectRight - entryRectLeft - 8; + if ((entryRectRight - entryRectLeft) < 8) { + entryRectLeft = ((entryRectLeft + entryRectRight) - entryRectLeft) - 8; + entryRectRight = entryRectLeft + 8; + } + + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxEndTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 2) * 4, (rectTop + yOffset + 2) * 4, + (entryRectLeft + 6) * 4, (rectTop + yOffset + 18) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectRight + -2) * 4, (rectTop + yOffset + 2) * 4, + (entryRectRight + 2) * 4, (rectTop + yOffset + 18) * 4, 0, 0x80, 0, 1 << 10, + 1 << 10); + if (entryWidth > 0) { + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxMiddleTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 6) * 4, (rectTop + yOffset + 2) * 4, + (entryRectLeft + 6 + entryWidth) * 4, (rectTop + yOffset + 18) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + } + + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxEndTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + //! FAKE: the ^ 0 + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft * 4) ^ 0, (rectTop + yOffset) * 4, (entryRectLeft + 4) * 4, + (rectTop + yOffset + 16) * 4, 0, 0, 0, 1 << 10, 1 << 10); + //! FAKE: the ^ 0 + BombersNotebook_DrawScisTexRect(&gfx, (entryRectRight + -4) * 4, (rectTop + yOffset) * 4, + (entryRectRight * 4) ^ 0, (rectTop + yOffset + 16) * 4, 0, 0x80, 0, 1 << 10, + 1 << 10); + if (entryWidth > 0) { + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxMiddleTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 4) * 4, (rectTop + yOffset) * 4, + (entryRectLeft + 4 + entryWidth) * 4, (rectTop + yOffset + 16) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + } + + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j)])) { + eventIcon = + sBombersNotebookEventIcons[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - BOMBERS_NOTEBOOK_PERSON_MAX]; + if ((entryRectRight - entryRectLeft) < sBombersNotebookEventIconWidths[eventIcon]) { + iconRectLeft = + (((entryRectLeft - sBombersNotebookEventIconWidths[eventIcon]) + entryRectRight) - entryRectLeft) + + 3; + } else { + iconRectLeft = (((entryRectRight - entryRectLeft) - sBombersNotebookEventIconWidths[eventIcon]) / 2) + + entryRectLeft; + } + + if ((eventIcon == BOMBERS_NOTEBOOK_EVENT_ICON_MASK) || (eventIcon == BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON)) { + if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset -= 12; + } else if (!(sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW)) { + // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset -= 6; + } + } + gDPLoadTextureBlock(gfx++, sBombersNotebookEventIconTextures[eventIcon], G_IM_FMT_IA, G_IM_SIZ_8b, + sBombersNotebookEventIconWidths[eventIcon], sBombersNotebookEventIconHeights[eventIcon], + 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); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + + BombersNotebook_DrawScisTexRect(&gfx, (iconRectLeft + 2) * 4, (rectTop + yOffset + 2) * 4, + (iconRectLeft + 2 + sBombersNotebookEventIconWidths[eventIcon]) * 4, + (rectTop + yOffset + 2 + sBombersNotebookEventIconHeights[eventIcon]) * 4, + 0, 0, 0, 1 << 10, 1 << 10); + if (sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - + BOMBERS_NOTEBOOK_PERSON_MAX] == + BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0], + sBombersNotebookEntryIconColors[eventIcon][1], + sBombersNotebookEntryIconColors[eventIcon][2], 255); + } else if (sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - + BOMBERS_NOTEBOOK_PERSON_MAX] == + BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN)) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0], + sBombersNotebookEntryIconColors[eventIcon][1], + sBombersNotebookEntryIconColors[eventIcon][2], 255); + } else { + gDPSetPrimColor(gfx++, 0, 0, 155, 155, 155, 255); + } + } else { + if (CHECK_WEEKEVENTREG( + sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - + BOMBERS_NOTEBOOK_PERSON_MAX])) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0], + sBombersNotebookEntryIconColors[eventIcon][1], + sBombersNotebookEntryIconColors[eventIcon][2], 255); + } else { + gDPSetPrimColor(gfx++, 0, 0, 155, 155, 155, 255); + } + } + BombersNotebook_DrawScisTexRect(&gfx, iconRectLeft * 4, (rectTop + yOffset) * 4, + (iconRectLeft + sBombersNotebookEventIconWidths[eventIcon]) * 4, + (rectTop + yOffset + sBombersNotebookEventIconHeights[eventIcon]) * 4, 0, 0, + 0, 1 << 10, 1 << 10); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + } else { + unfinishedEvent = true; + } + j += BOMBERS_NOTEBOOK_ENTRY_SIZE; + } + + *gfxP = gfx; +} + +#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) &photo, + +TexturePtr sBombersNotebookPhotoTextures[] = { +#include "tables/bombers_notebook/person_table.h" +}; + +#undef DEFINE_PERSON + +void BombersNotebook_DrawRows(BombersNotebook* this, Gfx** gfxP) { + static s16 sBarColorR = 0; + static s16 sBarColorG = 0; + static s16 sBarColorB = 0; + static s16 sBarColorTimer = 10; + static s16 sBarColorIndex = 0; + static s16 sBarColorTargetsR[] = { 100, 0 }; + static s16 sBarColorTargetsG[] = { 80, 0 }; + static s16 sBarColorTargetsB[] = { 255, 0 }; + Gfx* gfx = *gfxP; + s32 photoWidth; + s32 rowEnd; + s32 cursorPage; + u32 barRectLeft; + f32 photoRectDs; + u32 photoOffset; + s32 i; + u32 rectTop; + s16 colorStep; + + colorStep = ABS_ALT(sBarColorR - sBarColorTargetsR[sBarColorIndex]) / sBarColorTimer; + if (sBarColorR >= sBarColorTargetsR[sBarColorIndex]) { + sBarColorR -= colorStep; + } else { + sBarColorR += colorStep; + } + + colorStep = ABS_ALT(sBarColorG - sBarColorTargetsG[sBarColorIndex]) / sBarColorTimer; + if (sBarColorG >= sBarColorTargetsG[sBarColorIndex]) { + sBarColorG -= colorStep; + } else { + sBarColorG += colorStep; + } + + colorStep = ABS_ALT(sBarColorB - sBarColorTargetsB[sBarColorIndex]) / sBarColorTimer; + if (sBarColorB >= sBarColorTargetsB[sBarColorIndex]) { + sBarColorB -= colorStep; + } else { + sBarColorB += colorStep; + } + + sBarColorTimer--; + if (sBarColorTimer == 0) { + sBarColorTimer = 10; + sBarColorR = sBarColorTargetsR[sBarColorIndex]; + sBarColorG = sBarColorTargetsG[sBarColorIndex]; + sBarColorB = sBarColorTargetsB[sBarColorIndex]; + sBarColorIndex ^= 1; + } + + rectTop = this->scrollOffset + 107; + if (this->cursorPage >= (BOMBERS_NOTEBOOK_PERSON_MAX - 8)) { + rowEnd = BOMBERS_NOTEBOOK_PERSON_MAX; + i = this->cursorPage; + } else { + rowEnd = this->cursorPage + 8; + i = rowEnd - 8; + } + cursorPage = i; + for (; i < rowEnd; i++, rectTop += 52) { + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[i])) { + gDPLoadTextureBlock(gfx++, sBombersNotebookPhotoTextures[i], G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPLoadTextureBlock(gfx++, gBombersNotebookEmptyPhotoTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + } + if ((i == (this->cursorPageRow + cursorPage)) && (this->scrollAmount == 0)) { + barRectLeft = 56; + photoOffset = 8; + photoRectDs = 200.0f; + photoWidth = 64; + } else { + barRectLeft = 48; + photoOffset = 0; + photoRectDs = 150.0f; + photoWidth = 48; + } + BombersNotebook_DrawScisTexRect(&gfx, (57 - photoOffset) * 4, (rectTop - photoOffset) * 4, + (57 - photoOffset + photoWidth) * 4, (rectTop - photoOffset + photoWidth) * 4, + 0, 0, 0, 1024.0f / (photoRectDs / 100.0f), 1024.0f / (photoRectDs / 100.0f)); + + if ((i == (this->cursorPageRow + cursorPage)) && (this->scrollAmount == 0)) { + gDPSetPrimColor(gfx++, 0, 0, sBarColorR, sBarColorG, sBarColorB, 255); + } else { + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 60); + } + gDPLoadTextureBlock(gfx++, gBombersNotebookBarTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, (barRectLeft + 57) * 4, (rectTop + 22) * 4, + (barRectLeft - photoOffset + 527) * 4, (rectTop + 26) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCircleTex, G_IM_FMT_I, 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); + + BombersNotebook_DrawScisTexRect(&gfx, (barRectLeft - photoOffset + 527) * 4, (rectTop + 16) * 4, + (barRectLeft - photoOffset + 543) * 4, (rectTop + 32) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[i])) { + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + + BombersNotebook_DrawEntries(&gfx, i, rectTop); + + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + } + } + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +TexturePtr sBombersNotebookDigitTextures[] = { + gBombersNotebookDigit0Tex, gBombersNotebookDigit1Tex, gBombersNotebookDigit2Tex, gBombersNotebookDigit3Tex, + gBombersNotebookDigit4Tex, gBombersNotebookDigit5Tex, gBombersNotebookDigit6Tex, gBombersNotebookDigit7Tex, + gBombersNotebookDigit8Tex, gBombersNotebookDigit9Tex, +}; +u8 sBombersNotebookDigitRectLeftOffsets[] = { 13, 8, 12, 13, 14, 13, 12, 12, 13, 12 }; +s16 sBombersNotebookDayTexRectLeftOffsets[] = { 16, 12, 9 }; + +#define CURRENT_DAY_CLAMP_MIN_1 ((CURRENT_DAY == 0) ? 1 : CURRENT_DAY) +void BombersNotebook_DrawTimeOfDay(Gfx** gfxP) { + Gfx* gfx = *gfxP; + u32 timeOfDayRectLeft; + u32 timeBoxRectLeft; + u32 connectorRectLeft; + u32 lineRectLeft; + u32 digitsRectLeft; + u16 time; + s32 onesDigit; + s32 tensDigit; + s32 hours; + + time = (((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); + if (CURRENT_DAY == 0) { + time = 0; + } + timeOfDayRectLeft = sBombersNotebookDayRectRectLeft[CURRENT_DAY] + (time / CLOCK_TIME(0, 10)); + if ((CURRENT_DAY_CLAMP_MIN_1 == 1) || + ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (((void)0, gSaveContext.save.time) < CLOCK_TIME(12, 0)))) { + timeOfDayRectLeft -= 32; + lineRectLeft = timeOfDayRectLeft + 32; + } else if ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (time >= (CLOCK_TIME(17, 0) - CLOCK_TIME(6, 0))) && + (time <= (CLOCK_TIME(19, 0) - CLOCK_TIME(6, 0)))) { + timeOfDayRectLeft -= 64; + lineRectLeft = timeOfDayRectLeft + 64; + } else { + timeOfDayRectLeft -= 96; + lineRectLeft = timeOfDayRectLeft + 96; + } + + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPLoadTextureBlock_4b(gfx++, gBombersNoteoobkTimeOfDayBoxTex, G_IM_FMT_IA, 64, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, timeOfDayRectLeft * 4, 42 * 4, (timeOfDayRectLeft + 128) * 4, 70 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, (timeOfDayRectLeft + 16) * 4, 47 * 4, (timeOfDayRectLeft + 112) * 4, 67 * 4, + 0, 0, 0, 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + if (((CURRENT_DAY_CLAMP_MIN_1 >= 3) || + ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (time > (CLOCK_TIME(18, 0) - CLOCK_TIME(6, 0)))))) { + timeBoxRectLeft = timeOfDayRectLeft - 159; + connectorRectLeft = timeOfDayRectLeft - 17; + } else { + timeBoxRectLeft = timeOfDayRectLeft + 130; + connectorRectLeft = timeOfDayRectLeft + 113; + } + + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxLeftTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, timeBoxRectLeft * 4, 42 * 4, (timeBoxRectLeft + 16) * 4, 70 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxMiddleTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 16) * 4, 42 * 4, (timeBoxRectLeft + 141) * 4, 70 * 4, 0, 0, + 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxRightTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 141) * 4, 42 * 4, (timeBoxRectLeft + 157) * 4, 70 * 4, 0, + 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock(gfx++, sBombersNotebookDayTextures[CURRENT_DAY_CLAMP_MIN_1 - 1], G_IM_FMT_IA, G_IM_SIZ_8b, 48, + 22, 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); + BombersNotebook_DrawScisTexRect( + &gfx, (timeBoxRectLeft + sBombersNotebookDayTexRectLeftOffsets[CURRENT_DAY_CLAMP_MIN_1 - 1]) * 4, 46 * 4, + (timeBoxRectLeft + sBombersNotebookDayTexRectLeftOffsets[CURRENT_DAY_CLAMP_MIN_1 - 1] + 48) * 4, 68 * 4, 0, 0, + 0, 1 << 10, 1 << 10); + + gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 255); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCircleTex, G_IM_FMT_I, 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); + BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 56) * 4, 48 * 4, (timeBoxRectLeft + 72) * 4, 0x100, 0, 0, + 0, 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + + tensDigit = 0; + onesDigit = ((void)0, gSaveContext.save.time) / CLOCK_TIME_HOUR; + if (CURRENT_DAY == 0) { + onesDigit = 6; + } + hours = onesDigit; + do { + if (onesDigit >= 10) { + tensDigit++; + onesDigit -= 10; + } + } while (onesDigit >= 10); + + digitsRectLeft = timeBoxRectLeft + 75; + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[tensDigit], G_IM_FMT_I, 16, 17, 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); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[tensDigit]; + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[onesDigit], G_IM_FMT_I, 16, 17, 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); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[onesDigit]; + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookColonTex, G_IM_FMT_I, 16, 17, 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); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + digitsRectLeft += 7; + tensDigit = 0; + if (CURRENT_DAY == 0) { + onesDigit = TIME_TO_MINUTES_ALT_F((CLOCK_TIME_F(6, 0) - (hours * CLOCK_TIME_HOUR_F))); + } else { + onesDigit = TIME_TO_MINUTES_ALT_F(((void)0, gSaveContext.save.time) - (hours * CLOCK_TIME_HOUR_F)); + } + do { + if (onesDigit >= 10) { + tensDigit++; + onesDigit -= 10; + } + } while (onesDigit >= 10); + + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[tensDigit], G_IM_FMT_I, 16, 17, 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); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[tensDigit]; + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[onesDigit], G_IM_FMT_I, 16, 17, 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); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookConnectorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 14, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, connectorRectLeft * 4, 49 * 4, (connectorRectLeft + 32) * 4, 63 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + gDPSetPrimColor(gfx++, 0, 0, 242, 0, 14, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookLineTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 1, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, lineRectLeft * 4, 74 * 4, (lineRectLeft + 32) * 4, 490 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(gfx++, 200, 0, 0, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (lineRectLeft + -11) * 4, 70 * 4, (lineRectLeft + 13) * 4, 86 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +void BombersNotebook_DrawCursor(BombersNotebook* this, Gfx** gfxP) { + Gfx* gfx = *gfxP; + s32 cursorRow; + s32 cursorEntry; + s32 entryRectRight; + s32 entryRectLeft; + s32 entryIcon; + u32 cursorRectLeft; + u32 cursorRectTop; + u32 yOffset; + u16 startTime; + u16 endTime; + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, 255, 205, 55, 255); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + + if (this->cursorEntry == 0) { + BombersNotebook_DrawScisTexRect(&gfx, 47 * 4, (this->cursorPageRow * 52 + 97) * 4, 63 * 4, + (this->cursorPageRow * 52 + 113) * 4, 0, 0, 0, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, 98 * 4, (this->cursorPageRow * 52 + 97) * 4, 114 * 4, + (this->cursorPageRow * 52 + 113) * 4, 0, 0x200, 0, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, 47 * 4, (this->cursorPageRow * 52 + 147) * 4, 63 * 4, + (this->cursorPageRow * 52 + 163) * 4, 0, 0, 0x200, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, 98 * 4, (this->cursorPageRow * 52 + 147) * 4, 114 * 4, + (this->cursorPageRow * 52 + 163) * 4, 0, 0x200, 0x200, 1 << 10, 1 << 10); + } else { + cursorRow = this->cursorPageRow + this->cursorPage; + cursorRectTop = (this->cursorPageRow * 52) + 107; + cursorEntry = this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE; // Offset from photo entry + if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset = 8; + } else if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW) { + yOffset = 24; + } else { // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset = 16; + } + + startTime = BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(cursorRow, cursorEntry) - CLOCK_TIME(6, 0); + endTime = BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(cursorRow, cursorEntry) - CLOCK_TIME(6, 0); + entryRectLeft = sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(cursorRow, cursorEntry)] + + (startTime / CLOCK_TIME(0, 10)); + entryRectRight = sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(cursorRow, cursorEntry)] + + (endTime / CLOCK_TIME(0, 10)); + if ((entryRectRight - entryRectLeft) < 8) { + entryRectLeft = ((entryRectLeft + entryRectRight) - entryRectLeft) - 8; + entryRectRight = entryRectLeft + 8; + } + entryIcon = sBombersNotebookEventIcons[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(cursorRow, cursorEntry) - + BOMBERS_NOTEBOOK_PERSON_MAX]; + if ((entryRectRight - entryRectLeft) < sBombersNotebookEventIconWidths[entryIcon]) { + cursorRectLeft = + (((entryRectLeft - sBombersNotebookEventIconWidths[entryIcon]) + entryRectRight) - entryRectLeft) + 3; + } else { + cursorRectLeft = + (((entryRectRight - entryRectLeft) - sBombersNotebookEventIconWidths[entryIcon]) / 2) + entryRectLeft; + } + if (entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT) { + cursorRectLeft -= 8; + cursorRectTop -= 8; + } else { + cursorRectLeft -= 9; + cursorRectTop -= 8; + } + if ((entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_MASK) || (entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON)) { + if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset -= 12; + } else if (!(sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW)) { + // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset -= 6; + } + } + BombersNotebook_DrawScisTexRect(&gfx, cursorRectLeft * 4, (cursorRectTop + yOffset) * 4, + (cursorRectLeft + 16) * 4, (cursorRectTop + yOffset + 16) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon]) * 4, + (cursorRectTop + yOffset) * 4, + (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon] + 16) * 4, + (cursorRectTop + yOffset + 16) * 4, 0, 0x200, 0, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect( + &gfx, cursorRectLeft * 4, (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon]) * 4, + (cursorRectLeft + 16) * 4, (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon] + 16) * 4, + 0, 0, 0x200, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon]) * 4, + (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon]) * 4, + (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon] + 16) * 4, + (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon] + 16) * + 4, + 0, 0x200, 0x200, 1 << 10, 1 << 10); + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +void BombersNotebook_DrawArrows(BombersNotebook* this, Gfx** gfxP) { + static s16 sUpperArrowColorR = 0; + static s16 sUpperArrowColorG = 100; + static s16 sUpperArrowColorB = 255; + static s16 sLowerArrowColorR = 0; + static s16 sLowerArrowColorG = 100; + static s16 sLowerArrowColorB = 255; + static s16 sUpperArrowColorIndex = 0; + static s16 sLowerArrowColorIndex = 0; + static s16 sUpperArrowColorTimer = 6; + static s16 sLowerArrowColorTimer = 6; + static s16 sUpperArrowOffsetY = 0; + static s16 sLowerArrowOffsetY = 0; + static s16 sArrowColorTargetsG[] = { 175, 100 }; + static s16 sArrowColorTargetsB[] = { 205, 255 }; + Gfx* gfx = *gfxP; + u32 rectTop; + s16 colorStep; + + gDPPipeSync(gfx++); + gDPLoadTextureBlock(gfx++, gBombersNotebookArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, 4, G_TX_NOLOD, G_TX_NOLOD); + + colorStep = ABS_ALT(sUpperArrowColorG - sArrowColorTargetsG[sUpperArrowColorIndex]) / sUpperArrowColorTimer; + if (sUpperArrowColorG >= sArrowColorTargetsG[sUpperArrowColorIndex]) { + sUpperArrowColorG -= colorStep; + } else { + sUpperArrowColorG += colorStep; + } + + colorStep = ABS_ALT(sUpperArrowColorB - sArrowColorTargetsB[sUpperArrowColorIndex]) / sUpperArrowColorTimer; + if (sUpperArrowColorB >= sArrowColorTargetsB[sUpperArrowColorIndex]) { + sUpperArrowColorB -= colorStep; + } else { + sUpperArrowColorB += colorStep; + } + + sUpperArrowColorTimer--; + if (sUpperArrowColorTimer == 0) { + sUpperArrowOffsetY ^= 6; + sUpperArrowColorTimer = 6; + sUpperArrowColorG = sArrowColorTargetsG[sUpperArrowColorIndex]; + sUpperArrowColorB = sArrowColorTargetsB[sUpperArrowColorIndex]; + sUpperArrowColorIndex ^= 1; + } + + colorStep = ABS_ALT(sLowerArrowColorG - sArrowColorTargetsG[sLowerArrowColorIndex]) / sLowerArrowColorTimer; + if (sLowerArrowColorG >= sArrowColorTargetsG[sLowerArrowColorIndex]) { + sLowerArrowColorG -= colorStep; + } else { + sLowerArrowColorG += colorStep; + } + + colorStep = ABS_ALT(sLowerArrowColorB - sArrowColorTargetsB[sLowerArrowColorIndex]) / sLowerArrowColorTimer; + if (sLowerArrowColorB >= sArrowColorTargetsB[sLowerArrowColorIndex]) { + sLowerArrowColorB -= colorStep; + } else { + sLowerArrowColorB += colorStep; + } + + sLowerArrowColorTimer--; + if (sLowerArrowColorTimer == 0) { + sLowerArrowOffsetY ^= 6; + sLowerArrowColorTimer = 6; + sLowerArrowColorG = sArrowColorTargetsG[sLowerArrowColorIndex]; + sLowerArrowColorB = sArrowColorTargetsB[sLowerArrowColorIndex]; + sLowerArrowColorIndex ^= 1; + } + + if (this->cursorPage != 0) { + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, sUpperArrowColorR, sUpperArrowColorG, sUpperArrowColorB, 255); + gDPSetEnvColor(gfx++, sUpperArrowColorR, sUpperArrowColorG, sUpperArrowColorB, 255); + rectTop = (-sUpperArrowOffsetY + 83) * 4; + BombersNotebook_DrawScisTexRect(&gfx, 46 * 4, rectTop, 70 * 4, rectTop + (16 * 4), 0, 0, 0x200, 1 << 10, + 1 << 10); + } + + if (this->cursorPage < 16) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, sLowerArrowColorR, sLowerArrowColorG, sLowerArrowColorB, 255); + gDPSetEnvColor(gfx++, sLowerArrowColorR, sLowerArrowColorG, sLowerArrowColorB, 255); + BombersNotebook_DrawScisTexRect(&gfx, 46 * 4, (sLowerArrowOffsetY + 319) * 4, 70 * 4, + (sLowerArrowOffsetY + 335) * 4, 0, 0, 0, 1 << 10, 1 << 10); + } + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx) { + Gfx* gfx; + s32 pad[2]; + + func_8012CF0C(gfxCtx, this->loadState != BOMBERS_NOTEBOOK_LOAD_STATE_DONE, false, 0, 0, 0); + + OPEN_DISPS(gfxCtx); + + gfx = POLY_OPA_DISP; + + if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_DONE) { + gSPSegment(gfx++, 0x07, this->scheduleDmaSegment); + gSPSegment(gfx++, 0x08, this->scheduleSegment); + gfx = Gfx_SetupDL39(gfx); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetRenderMode(gfx++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 215, 255); + gDPSetEnvColor(gfx++, 100, 100, 100, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookBackgroundTex, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, 0 * 4, 0 * 4, SCREEN_WIDTH_HIRES * 4, SCREEN_HEIGHT_HIRES * 4, 0, 0, 0, + 0x200, 0x200); + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + BombersNotebook_DrawHeaders(&gfx); + BombersNotebook_DrawColumns(&gfx); + + gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 86, 600, 450); + BombersNotebook_DrawRows(this, &gfx); + + gDPPipeSync(gfx++); + gSPDisplayList(gfx++, D_0E000000.setScissor); + + BombersNotebook_DrawTimeOfDay(&gfx); + + if (this->scrollAmount == 0) { + BombersNotebook_DrawCursor(this, &gfx); + } + BombersNotebook_DrawArrows(this, &gfx); + } + POLY_OPA_DISP = gfx; + + CLOSE_DISPS(gfxCtx); +} + +void BombersNotebook_LoadFiles(BombersNotebook* this, s32 flag) { + switch (this->loadState) { + case BOMBERS_NOTEBOOK_LOAD_STATE_NONE: + if (this->scheduleDmaSegment == NULL) { + break; + } + CmpDma_LoadAllFiles(this->scheduleDmaSegmentStart, this->scheduleDmaSegment, this->scheduleDmaSegmentSize); + osCreateMesgQueue(&this->loadQueue, this->loadMsg, ARRAY_COUNT(this->loadMsg)); + DmaMgr_SendRequestImpl(&this->dmaRequest, this->scheduleSegment, this->scheduleSegmentStart, + this->scheduleSegmentSize, 0, &this->loadQueue, NULL); + this->loadState = BOMBERS_NOTEBOOK_LOAD_STATE_STARTED; + // fallthrough + case BOMBERS_NOTEBOOK_LOAD_STATE_STARTED: + if (osRecvMesg(&this->loadQueue, NULL, flag) == 0) { + this->loadState = BOMBERS_NOTEBOOK_LOAD_STATE_DONE; + } + break; + + default: + break; + } +} + +#define DEFINE_PERSON(_enum, _photo, description, _metEnum, _metMessage, _metFlag) description, +#define DEFINE_EVENT(_enum, _icon, _colorFlag, description, _completedMessage, _completedFlag) description, + +u16 sBombersNotebookTextIds[] = { +#include "tables/bombers_notebook/person_table.h" +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT + +void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input) { + static s16 sStickXRepeatTimer = 0; + static s16 sStickYRepeatTimer = 0; + static s16 sStickXRepeatState = 0; + static s16 sStickYRepeatState = 0; + s32 stickAdjX = input->rel.stick_x; + s32 stickAdjY = input->rel.stick_y; + s32 cursorEntryScan; + + this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_test); + this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_old); + this->scheduleSegmentStart = SEGMENT_ROM_START(schedule_static); + this->scheduleSegmentSize = SEGMENT_ROM_SIZE(schedule_static); + + if (this->scheduleDmaSegment == NULL) { + this->scheduleDmaSegment = ZeldaArena_Malloc(this->scheduleDmaSegmentSize); + } + + if (this->scheduleSegment == NULL) { + this->scheduleSegment = ZeldaArena_Malloc(this->scheduleSegmentSize); + } + + BombersNotebook_LoadFiles(this, OS_MESG_NOBLOCK); + + if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_DONE) { + if (stickAdjX < -30) { + if (sStickXRepeatState == -1) { + sStickXRepeatTimer--; + if (sStickXRepeatTimer < 0) { + sStickXRepeatTimer = 2; + } else { + stickAdjX = 0; + } + } else { + sStickXRepeatTimer = 10; + sStickXRepeatState = -1; + } + } else if (stickAdjX > 30) { + if (sStickXRepeatState == 1) { + sStickXRepeatTimer--; + if (sStickXRepeatTimer < 0) { + sStickXRepeatTimer = 2; + } else { + stickAdjX = 0; + } + } else { + sStickXRepeatTimer = 10; + sStickXRepeatState = 1; + } + } else { + sStickXRepeatState = 0; + } + + if (stickAdjY < -30) { + if (sStickYRepeatState == -1) { + sStickYRepeatTimer--; + if (sStickYRepeatTimer < 0) { + sStickYRepeatTimer = 2; + } else { + stickAdjY = 0; + } + } else { + sStickYRepeatTimer = 10; + sStickYRepeatState = -1; + } + } else if (stickAdjY > 30) { + if (sStickYRepeatState == 1) { + sStickYRepeatTimer--; + if (sStickYRepeatTimer < 0) { + sStickYRepeatTimer = 2; + } else { + stickAdjY = 0; + } + } else { + sStickYRepeatTimer = 10; + sStickYRepeatState = 1; + } + } else { + sStickYRepeatState = 0; + } + + if (this->scrollAmount == 0) { + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[this->cursorPageRow + this->cursorPage])) { + cursorEntryScan = this->cursorEntry; + if (stickAdjX > 30) { + while (true) { + cursorEntryScan += BOMBERS_NOTEBOOK_ENTRY_SIZE; + if (sBombersNotebookEntries[this->cursorPageRow + this->cursorPage] + [cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE] == + BOMBERS_NOTEBOOK_ENTRY_END) { + while (true) { + cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE; + if (cursorEntryScan == 0) { + play_sound(NA_SE_SY_ERROR); + break; + } + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { + play_sound(NA_SE_SY_ERROR); + break; + } + } + break; + } + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { + play_sound(NA_SE_SY_CURSOR); + break; + } + } + this->cursorEntry = cursorEntryScan; + } else if (stickAdjX < -30) { + if (cursorEntryScan != 0) { + do { + cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE; + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { + play_sound(NA_SE_SY_CURSOR); + break; + } + } while (cursorEntryScan != 0); + this->cursorEntry = cursorEntryScan; + } + } + if (this->cursorEntry != 0) { + if (play->msgCtx.currentTextId != + sBombersNotebookTextIds[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE)]) { + Message_ContinueTextbox(play, sBombersNotebookTextIds[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE)]); + } + } else { + if (play->msgCtx.currentTextId != sBombersNotebookTextIds[this->cursorPageRow + this->cursorPage]) { + Message_ContinueTextbox(play, sBombersNotebookTextIds[this->cursorPageRow + this->cursorPage]); + } + } + } else { + Message_CloseTextbox(play); + } + + if (stickAdjY < -30) { + if (this->cursorPageRow < 3) { + play_sound(NA_SE_SY_CURSOR); + this->cursorEntry = 0; + this->cursorPageRow++; + } else if (this->cursorPage < (BOMBERS_NOTEBOOK_PERSON_MAX - 4)) { + if (sStickYRepeatState == -1) { + this->scrollAmount = -24; + } else { + this->scrollAmount = -12; + } + this->scrollOffset = 0; + this->cursorEntry = 0; + } + } else if (stickAdjY > 30) { + if (this->cursorPageRow > 0) { + play_sound(NA_SE_SY_CURSOR); + this->cursorEntry = 0; + this->cursorPageRow--; + } else if (this->cursorPage != 0) { + play_sound(NA_SE_SY_CURSOR); + this->cursorPage--; + if (sStickYRepeatState == 1) { + this->scrollAmount = 24; + } else { + this->scrollAmount = 12; + } + this->scrollOffset = -48; + this->cursorEntry = 0; + } + } + } else if (this->scrollAmount < 0) { + this->scrollOffset += this->scrollAmount; + if (ABS_ALT(this->scrollOffset) >= 48) { + play_sound(NA_SE_SY_CURSOR); + this->scrollOffset = 0; + this->scrollAmount = 0; + this->cursorPage++; + } + } else { + this->scrollOffset += this->scrollAmount; + if (this->scrollOffset == 0) { + this->scrollOffset = 0; + this->scrollAmount = 0; + } + } + } +} + +void BombersNotebook_Init(BombersNotebook* this) { + bzero(this, sizeof(BombersNotebook)); +} + +void BombersNotebook_Destroy(BombersNotebook* this) { + if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_STARTED) { + BombersNotebook_LoadFiles(this, OS_MESG_BLOCK); + } + if (this->scheduleDmaSegment != NULL) { + ZeldaArena_Free(this->scheduleDmaSegment); + this->scheduleDmaSegment = NULL; + } + //! @bug: Does not free malloc'd memory for schedule segment +} diff --git a/src/code/z_quake.c b/src/code/z_quake.c index c5115375c..8225c6347 100644 --- a/src/code/z_quake.c +++ b/src/code/z_quake.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64view.h" diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index cff66dacb..79af1b73f 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #define ANIM_INTERP 1 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 737d480ad..efe92eebc 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -145,7 +145,7 @@ s32 func_808B736C(BgBreakwall* this, PlayState* play) { } s32 func_808B7380(BgBreakwall* this, PlayState* play) { - if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } return true; 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 8bf39145c..132f8f13f 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -133,11 +133,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { Actor_SetObjectDependency(play, &this->dyna.actor); if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_4) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_3)) { @@ -154,11 +154,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { this->dyna.actor.update = func_8091A5A0; } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_5) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_6)) { if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_6) && (this->dyna.bgId == BGACTOR_NEG_ONE) && - (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || ((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) && ((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))))) { @@ -190,18 +190,18 @@ void func_8091A5A0(Actor* thisx, PlayState* play) { } if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); - } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); } } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) { if ((this->dyna.bgId == BGACTOR_NEG_ONE) && - (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || ((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) && (gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0))))) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); - } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && + } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && ((gSaveContext.save.day != 2) || (gSaveContext.save.isNight != true) || (gSaveContext.save.time < CLOCK_TIME(5, 30)) || (gSaveContext.save.time > CLOCK_TIME(6, 0)))) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); 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 61f493b83..0a8df4f40 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -25,7 +25,7 @@ static u8 D_80BD3DB0[] = { /* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1), /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F), /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x1C - 0x19), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x1C - 0x19), /* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1), /* 0x1C */ SCHEDULE_CMD_RET_NONE(), /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3), 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 f41dcbd31..e62cc45f4 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -293,9 +293,9 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_END_CONVERSATION) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK; - func_80151BB4(play, 0x33); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK); } - func_80151BB4(play, 4); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY); } } @@ -602,7 +602,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { play->msgCtx.stateTimer = 4; if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); return; @@ -625,7 +625,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { } } } else if (talkState == TEXT_STATE_DONE) { - if (Message_ShouldAdvance(play) && (play->msgCtx.unk120B1 == 0)) { + if (Message_ShouldAdvance(play) && (play->msgCtx.bombersNotebookEventQueueCount == 0)) { SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); } 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 834d5f7f7..19f2e1d9b 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 @@ -309,9 +309,9 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { break; case 5: - func_80151BB4(play, 0x24); - func_80151BB4(play, 0x25); - func_80151BB4(play, 0); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS); this->actionFunc = func_809C51B4; sp28 = true; break; @@ -330,7 +330,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { void func_809C51B4(EnBomBowlMan* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((play->msgCtx.unk120B1 == 0) && + if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { play->nextEntrance = Entrance_CreateFromSpawn(6); gSaveContext.nextCutsceneIndex = 0; @@ -432,9 +432,9 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { } else if (this->actor.textId == 0x735) { this->unk_2C2 = 0; func_809C493C(this, 17, 1.0f); - func_80151BB4(play, 0x24); - func_80151BB4(play, 0x25); - func_80151BB4(play, 0); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS); func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = func_809C5738; return; @@ -448,7 +448,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { s16 yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_2A0); if (this->unk_2C2 == 0) { - if ((play->msgCtx.unk120B1 == 0) && + if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { this->unk_2C2 = 1; func_809C4B6C(this); 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 266e2c47b..aa74c5007 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -117,7 +117,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnCow_Idle; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY != 1) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && (CURRENT_DAY != 1) && (EN_COW_TYPE(thisx) == EN_COW_TYPE_ABDUCTED)) { Actor_Kill(&this->actor); return; 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 07dfe95f0..89bf08d7b 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -157,7 +157,7 @@ u16 EnFsn_GetWelcome(PlayState* play) { void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { switch (this->textId) { case 0: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL)) { this->textId = 0x29E0; break; } else { @@ -171,7 +171,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; this->getItemId = GI_LETTER_TO_MAMA; - SET_WEEKEVENTREG(WEEKEVENTREG_80_10); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL); this->textId = 0x29F1; break; } else { @@ -194,7 +194,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; this->getItemId = GI_LETTER_TO_MAMA; - SET_WEEKEVENTREG(WEEKEVENTREG_80_10); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL); this->textId = 0x29F1; break; @@ -210,13 +210,13 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { if (this->flags & ENFSN_END_CONVERSATION) { if (this->flags & ENFSN_GAVE_LETTER_TO_MAMA) { this->flags &= ~ENFSN_GAVE_LETTER_TO_MAMA; - func_80151BB4(play, 34); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL); } if (this->flags & ENFSN_GAVE_KEATONS_MASK) { this->flags &= ~ENFSN_GAVE_KEATONS_MASK; - func_80151BB4(play, 33); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK); } - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); } } @@ -425,7 +425,7 @@ s32 EnFsn_TestEndInteraction(EnFsn* this, PlayState* play, Input* input) { if (CHECK_BTN_ALL(input->press.button, BTN_B)) { this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); this->actionFunc = EnFsn_SetupEndInteraction; return true; } @@ -473,7 +473,7 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); this->actionFunc = EnFsn_SetupEndInteraction; return true; @@ -977,7 +977,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) { this->actor.textId = 0x29D1; } Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); this->actionFunc = EnFsn_SetupEndInteraction; } } @@ -1036,8 +1036,8 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { void EnFsn_GiveItem(EnFsn* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { if ((this->isSelling == true) && (this->items[this->cursorIndex]->getItemId == GI_MASK_ALL_NIGHT)) { - func_80151BB4(play, 45); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); } this->actor.parent = NULL; if (ENFSN_IS_SHOP(&this->actor) && !this->isSelling) { @@ -1053,7 +1053,7 @@ void EnFsn_GiveItem(EnFsn* this, PlayState* play) { void EnFsn_SetupResumeInteraction(EnFsn* this, PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_HandleSetupResumeInteraction(this, play); } } else { @@ -1239,7 +1239,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, PlayState* play) { if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { play->msgCtx.msgMode = 0x43; @@ -1311,7 +1311,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); break; default: @@ -1320,7 +1320,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { play->msgCtx.msgMode = 0x43; @@ -1362,7 +1362,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); break; default: @@ -1371,7 +1371,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { play->msgCtx.msgMode = 0x43; 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 bdc4637d1..cb9545d7a 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -211,7 +211,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { Message_CloseTextbox(play); this->headZRotTarget = 0; if ((this->textIdIndex == 13) || (this->textIdIndex == 14)) { - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); SET_WEEKEVENTREG(WEEKEVENTREG_79_04); func_80BC6E10(this); return; @@ -223,7 +223,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { if (this->actor.textId == 0x292A) { SET_WEEKEVENTREG(WEEKEVENTREG_38_10); } - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); func_80BC6E10(this); return; } @@ -234,8 +234,8 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { if (this->textIdIndex == 12) { SET_WEEKEVENTREG(WEEKEVENTREG_38_40); func_801A3B48(0); - func_80151BB4(play, 0x36); - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); func_80BC6E10(this); return; } @@ -275,7 +275,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { return; } func_801A3B48(0); - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); func_80BC6E10(this); } } 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 5c06e292a..648a13d46 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -99,9 +99,9 @@ void EnHs_Destroy(Actor* thisx, PlayState* play) { void func_80952DFC(PlayState* play) { if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) { - func_80151BB4(play, 0x2E); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD); } - func_80151BB4(play, 0x10); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GROG); } void EnHs_UpdateChickPos(Vec3f* dst, Vec3f src, f32 offset) { 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 d4ccc8fd6..abdf870b9 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -25,7 +25,7 @@ static u8 D_80BF3260[] = { /* 0x05 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x57 - 0x09), /* 0x09 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 45, 0x51 - 0x0F), /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0x4B - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x1A - 0x19), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x1A - 0x19), /* 0x19 */ SCHEDULE_CMD_RET_NONE(), /* 0x1A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x45 - 0x20), /* 0x20 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 55, 17, 15, 0x3F - 0x26), @@ -42,7 +42,7 @@ static u8 D_80BF3260[] = { /* 0x5B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0xAF - 0x61), /* 0x61 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 50, 16, 10, 0xA9 - 0x67), /* 0x67 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 16, 30, 0xA3 - 0x6D), - /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x8A - 0x71), + /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x8A - 0x71), /* 0x71 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 16, 50, 0x84 - 0x77), /* 0x77 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x7E - 0x7D), /* 0x7D */ SCHEDULE_CMD_RET_NONE(), @@ -372,7 +372,7 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { case 1: case 3: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_ROOM_KEY) && (this->unk_3F6 == 3)) { CutsceneManager_Stop(csId); this->unk_3F6 = 5; } else { 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 ad60ad551..ca764b134 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -225,7 +225,7 @@ s32 func_808F33B8(void) { s32 ret = (((gSaveContext.save.day == 1) && ((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))) || (gSaveContext.save.day >= 2)) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM); return ret; } @@ -561,8 +561,9 @@ void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) { s32 pad; if ((textId == 0x34AE) || (textId == 0x34B0) || (textId == 0x34B2)) { - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); } + switch (arg2) { case 1: case 5: @@ -722,12 +723,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x345A: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x345B: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -747,7 +748,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x345F: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -762,7 +763,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3462: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -817,7 +818,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3467: case 0x3468: case 0x3469: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -833,7 +834,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x346A: this->actionFunc = func_808F5A94; - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; } break; @@ -863,13 +864,13 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3475: @@ -925,11 +926,11 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3484: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3485: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3474: @@ -981,14 +982,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3480: func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x3479: func_808F43E0(this); func_808F35D8(this, play); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1002,15 +1003,15 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3481: this->actionFunc = func_808F5A34; func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x347D: this->actionFunc = func_808F5A34; func_808F43E0(this); - func_80151BB4(play, 0x11); - func_80151BB4(play, 0x2F); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK); ret = true; break; @@ -1033,16 +1034,16 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3488: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x3489: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x348A: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x348B: @@ -1056,7 +1057,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x348D: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1070,7 +1071,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3468: case 0x3469: case 0x3491: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x348E: @@ -1118,7 +1119,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3492: this->actionFunc = func_808F5A94; - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; } break; @@ -1126,11 +1127,11 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 7: switch (textId) { case 0x34A8: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x34A7: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3495: @@ -1148,7 +1149,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x34A4: this->actionFunc = func_808F5A34; func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1160,7 +1161,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3474: @@ -1199,8 +1200,8 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x34A0: this->actionFunc = func_808F5A34; - func_80151BB4(play, 0x11); - func_80151BB4(play, 0x2F); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK); func_808F43E0(this); ret = true; break; @@ -1224,7 +1225,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x34A3: func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1254,7 +1255,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x349C: func_808F43E0(this); func_808F35D8(this, play); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1284,7 +1285,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1552,7 +1553,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0); this->actionFunc = func_808F5A94; } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, this->actor.shape.rot.z, 0xF); @@ -1563,7 +1564,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { } } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Actor_Kill(&this->actor); } else { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_7); 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 fe26c18eb..29a09cd90 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -202,7 +202,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) { if (CURRENT_DAY == 1) { this->type = MA4_TYPE_DAY1; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { this->type = MA4_TYPE_ALIENS_DEFEATED; } else { this->type = MA4_TYPE_ALIENS_WON; @@ -374,7 +374,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3341: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - SET_WEEKEVENTREG(WEEKEVENTREG_21_20); + SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { @@ -383,14 +383,14 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x3342, &this->actor); this->textId = 0x3342; this->state = MA4_STATE_DEFAULT; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; case 0x3346: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - SET_WEEKEVENTREG(WEEKEVENTREG_21_20); + SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { @@ -410,7 +410,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { func_8019F230(); Message_StartTextbox(play, 0x3348, &this->actor); this->textId = 0x3348; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; @@ -422,9 +422,9 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x334E, &this->actor); this->textId = 0x334E; if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { - func_80151BB4(play, 0x1C); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM); } - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { // No. func_8019F230(); EnMa4_SetFaceExpression(this, 0, 0); @@ -443,7 +443,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 1, 0); Message_StartTextbox(play, 0x3355, &this->actor); this->textId = 0x3355; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; @@ -459,13 +459,13 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3357, &this->actor); this->textId = 0x3357; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { func_8019F230(); EnMa4_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x335B, &this->actor); this->textId = 0x335B; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } } break; @@ -480,7 +480,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x335A, &this->actor); this->textId = 0x335A; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; @@ -505,7 +505,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3336, &this->actor); this->textId = 0x3336; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3338: @@ -611,7 +611,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { Message_StartTextbox(play, 0x335C, &this->actor); this->textId = 0x335C; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { Message_StartTextbox(play, 0x3359, &this->actor); this->textId = 0x3359; @@ -645,7 +645,7 @@ void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) { case TEXT_STATE_DONE: // End conversation if (Message_ShouldAdvance(play)) { - if ((play->msgCtx.unk120B1 == 0) || !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { + if ((play->msgCtx.bombersNotebookEventQueueCount == 0) || !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { EnMa4_SetupWait(this); } } @@ -888,7 +888,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); this->textId = 0x3337; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { Message_StartTextbox(play, 0x3335, &this->actor); this->textId = 0x3335; @@ -896,7 +896,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { } } else if (this->state == MA4_STATE_DEFAULT) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_40)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM)) { Message_StartTextbox(play, 0x3346, &this->actor); this->textId = 0x3346; } else { @@ -944,7 +944,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); this->textId = 0x3337; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { Message_StartTextbox(play, 0x3335, &this->actor); this->textId = 0x3335; 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 00281d6e4..5dd713019 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 @@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { this->unk320 = 0; this->eyeTexIndex = 0; - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_SetFaceExpression(this, 0, 1); } else { EnMaYto_SetFaceExpression(this, 5, 2); @@ -186,19 +186,19 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { switch (this->type) { case MA_YTO_TYPE_DEFAULT: - if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; case MA_YTO_TYPE_DINNER: - if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; case MA_YTO_TYPE_BARN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (((this->actor.params & 0x0F00) >> 8) != 0) { return false; } @@ -211,7 +211,7 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_AFTERMILKRUN: - if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) || + if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_14_01)) { return false; } @@ -240,7 +240,7 @@ void EnMaYto_InitAnimation(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_BARN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_ChangeAnim(this, 12); } else { EnMaYto_ChangeAnim(this, 8); @@ -278,8 +278,8 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) { case MA_YTO_TYPE_AFTERMILKRUN: this->unk310 = 0; - if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && - (Rand_Next() & 0x80)) { + if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && (Rand_Next() & 0x80)) { EnMaYto_SetupBeginWarmFuzzyFeelingCs(this); } else { EnMaYto_SetupAfterMilkRunInit(this); @@ -333,7 +333,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) { return 0; case MA_YTO_TYPE_DINNER: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY == 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && (CURRENT_DAY == 2)) { return 0; } if (EnMaYto_SearchRomani(this, play)) { @@ -342,7 +342,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) { return 1; case MA_YTO_TYPE_BARN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (EnMaYto_SearchRomani(this, play)) { return 2; } @@ -476,7 +476,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 3, 1); Message_StartTextbox(play, 0x3393, &this->actor); this->textId = 0x3393; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; case 0x3394: @@ -489,7 +489,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_ChangeAnim(this, 1); Message_StartTextbox(play, 0x3396, &this->actor); this->textId = 0x3396; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; default: @@ -499,7 +499,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerWait(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { func_80B90E50(this, 0); this->unk31E = 0; } else { @@ -540,7 +540,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -635,8 +635,8 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetRomaniFaceExpression(this, 0, 1); Message_StartTextbox(play, 0x339E, &this->actor); this->textId = 0x339E; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x339F: @@ -671,20 +671,20 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x33A4, &this->actor); this->textId = 0x33A4; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x33A5: Message_StartTextbox(play, 0x33A6, &this->actor); this->textId = 0x33A6; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; case 0x33A7: Message_StartTextbox(play, 0x33A8, &this->actor); this->textId = 0x33A8; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; default: @@ -694,7 +694,7 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnWait(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_ChangeAnim(this, 13); func_80B90E50(this, 0); this->unk31E = 0; @@ -722,7 +722,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_BarnStartDialogue(this, play); EnMaYto_SetupBarnDialogueHandler(this); - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || (ABS_ALT(direction) < 0x2000)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || (ABS_ALT(direction) < 0x2000)) { func_800B8614(&this->actor, play, 100.0f); child = this->actor.child; @@ -734,7 +734,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -796,8 +796,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->actor); Message_StartTextbox(play, 0x33AD, &this->actor); this->textId = 0x33AD; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x33AE: @@ -814,8 +814,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x33B0, &this->actor); this->textId = 0x33B0; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x33B1: @@ -824,7 +824,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { // "I should had believed what Romani said" Message_StartTextbox(play, 0x33B2, &this->actor); this->textId = 0x33B2; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; case 0x33C6: @@ -871,8 +871,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetRomaniFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x33CC, &this->actor); this->textId = 0x33CC; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; default: @@ -882,7 +882,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupAfterMilkRunInit(EnMaYto* this) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { EnMaYto_SetFaceExpression(this, 3, 1); } else { Audio_PlayFanfare(NA_BGM_FAILURE_1); @@ -897,7 +897,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Message_StartTextbox(play, 0x33C1, &this->actor); this->textId = 0x33C1; } else { @@ -908,7 +908,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 4; EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); return; } @@ -991,9 +991,9 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { this->textId = 0x33C3; SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 3; - func_80151BB4(play, 0x20); - func_80151BB4(play, 0x1F); - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); } else { // You already have the mask @@ -1002,7 +1002,7 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { this->textId = 0x33D0; SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 3; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); } } else { @@ -1086,7 +1086,7 @@ void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) { } } - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.unk120B1 == 0)) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.bombersNotebookEventQueueCount == 0)) { EnMaYto_SetupPostMilkRunEnd(this); } } @@ -1154,13 +1154,13 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x33C5, &this->actor); this->textId = 0x33C5; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); EnMaYto_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x33C4, &this->actor); this->textId = 0x33C4; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } } } @@ -1211,7 +1211,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { if (EnMaYto_HasSpokenToPlayer()) { Message_StartTextbox(play, 0x33A6, &this->actor); this->textId = 0x33A6; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); Message_StartTextbox(play, 0x33A5, &this->actor); @@ -1223,7 +1223,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { if (EnMaYto_HasSpokenToPlayer()) { Message_StartTextbox(play, 0x33A8, &this->actor); this->textId = 0x33A8; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); Message_StartTextbox(play, 0x33A7, &this->actor); @@ -1237,7 +1237,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (CURRENT_DAY == 2) { if (this->unk310 == 1) { Message_StartTextbox(play, 0x33AE, &this->actor); @@ -1266,7 +1266,7 @@ void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 5, 3); Message_StartTextbox(play, 0x33B3, &this->actor); this->textId = 0x33B3; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); EnMaYto_SetFaceExpression(this, 5, 3); @@ -1360,7 +1360,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth } void EnMaYto_InitFaceExpression(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_SetFaceExpression(this, 0, 1); EnMaYto_SetRomaniFaceExpression(this, 0, 0); } else { @@ -1484,7 +1484,7 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL); } 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 163f89fcd..bb9c9c926 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 @@ -144,7 +144,7 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SITTING: this->actor.targetMode = 6; // Day 1 or "Winning" the alien invasion - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYts_ChangeAnim(this, 14); } else { EnMaYts_ChangeAnim(this, 18); @@ -177,14 +177,14 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case 2: // Failing the alien invasion - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; case 3: // "Winning" the alien invasion - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; @@ -196,7 +196,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_BARN: // Failing the alien invasion - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } else if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) { return false; @@ -205,7 +205,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SLEEPING: // "Winning" the alien invasion - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; @@ -254,7 +254,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->hasBow = false; } - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { this->overrideEyeTexIndex = 0; this->eyeTexIndex = 0; this->mouthTexIndex = 0; @@ -272,7 +272,8 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->mouthTexIndex = 0; this->unk_32C = 2; EnMaYts_SetupEndCreditsHandler(this); - } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYts_SetupStartDialogue(this); } else { EnMaYts_SetupDoNothing(this); @@ -313,7 +314,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 3); Message_StartTextbox(play, 0x3362, &this->actor); this->textId = 0x3362; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } } else if (Player_GetMask(play) != PLAYER_MASK_NONE) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_40)) { @@ -325,9 +326,9 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x3366, &this->actor); this->textId = 0x3366; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM)) { EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x3367, &this->actor); this->textId = 0x3367; @@ -343,7 +344,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x336C, &this->actor); this->textId = 0x336C; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } } EnMaYts_SetupDialogueHandler(this); @@ -445,7 +446,7 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 3); Message_StartTextbox(play, 0x3361, &this->actor); this->textId = 0x3361; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3363: @@ -458,14 +459,14 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x3365, &this->actor); this->textId = 0x3365; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3367: EnMaYts_SetFaceExpression(this, 4, 3); Message_StartTextbox(play, 0x3368, &this->actor); this->textId = 0x3368; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3369: @@ -478,7 +479,7 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x336B, &this->actor); this->textId = 0x336B; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; default: 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 abf5503a4..ab387771c 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -157,7 +157,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x279C, &this->actor); this->unk_2B4 = 0x279C; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } } else { func_8019F208(); @@ -168,7 +168,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { func_8019F230(); Message_StartTextbox(play, 0x278F, &this->actor); this->unk_2B4 = 0x278F; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } break; @@ -183,13 +183,13 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x279C, &this->actor); this->unk_2B4 = 0x279C; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } } else { func_8019F230(); Message_StartTextbox(play, 0x279B, &this->actor); this->unk_2B4 = 0x279B; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } break; } @@ -282,7 +282,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) { Message_StartTextbox(play, 0x279B, &this->actor); this->unk_2B4 = 0x279B; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } else { Message_StartTextbox(play, 0x2798, &this->actor); this->unk_2B4 = 0x2798; @@ -448,8 +448,8 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20; Message_StartTextbox(play, 0x2794, &this->actor); this->unk_2B4 = 0x2794; - func_80151BB4(play, 0xB); - func_80151BB4(play, 0x2B); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP); this->actor.flags &= ~ACTOR_FLAG_10000; func_80A6F9C8(this); } else { 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 474c1d2df..79c2e5cba 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -66,7 +66,7 @@ static u8 sScheduleScript[] = { /* 0x3E */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), /* 0x41 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_2), /* 0x44 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), - /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x57 - 0x4B), + /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x57 - 0x4B), /* 0x4B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 18, 0, 0x54 - 0x51), /* 0x51 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), /* 0x54 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), 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 0627ddbf8..072f6d6ac 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1105,7 +1105,11 @@ void func_80AF8AC8(EnPm* this) { void func_80AF8BA8(s32 arg0) { static u16 D_80AFB8D4[] = { - WEEKEVENTREG_27_02, WEEKEVENTREG_27_04, WEEKEVENTREG_27_08, WEEKEVENTREG_27_10, WEEKEVENTREG_27_20, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN, }; static u16 D_80AFB8E0[] = { WEEKEVENTREG_27_40, WEEKEVENTREG_27_80, WEEKEVENTREG_28_01, WEEKEVENTREG_28_02, WEEKEVENTREG_28_04, 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 9b5f1ef38..7a507e0ef 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -162,15 +162,15 @@ void EnPst_UpdateCollision(EnPst* this, PlayState* play) { s32 EnPst_HandleLetterDay1(EnPst* this) { switch (this->actor.params) { case POSTBOX_SOUTH_UPPER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_02); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN); case POSTBOX_NORTH_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_04); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN); case POSTBOX_EAST_UPPER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_08); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN); case POSTBOX_EAST_LOWER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_10); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN); case POSTBOX_SOUTH_LOWER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_20); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN); default: return false; } 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 1a43768fc..e980d1cb5 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -347,9 +347,9 @@ EnRz* EnRz_FindSister(EnRz* this, PlayState* play) { void func_80BFBDFC(PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) { - func_80151BB4(play, 0x27); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP); } - func_80151BB4(play, 0xC); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS); } void EnRz_Destroy(Actor* thisx, PlayState* play) { 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 e41fc5dc7..3a32031d3 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 @@ -230,7 +230,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) { player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex]; Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]); - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); } } @@ -250,7 +250,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) { if (this->textIdIndex < 7) { this->textIdIndex++; } else { - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); func_80BC94B0(this); return; } @@ -293,7 +293,7 @@ void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) { } } else if (itemAction <= PLAYER_IA_MINUS1) { Message_CloseTextbox(play); - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); func_80BC94B0(this); } } @@ -411,8 +411,8 @@ void func_80BC9E50(EnStoneheishi* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - func_80151BB4(play, 0x35); - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); this->action = EN_STONE_ACTION_1; this->actionFunc = func_80BC9680; } else { 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 6711fcde6..2000e0e53 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -126,7 +126,7 @@ static u8 sScheduleScript[] = { /* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_79_40, 0x12C - 0x0AA), /* 0x0AA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_SECOM, 0x0B0 - 0x0AE), /* 0x0AE */ SCHEDULE_CMD_RET_VAL_S(7), - /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_20, 0x0DD - 0x0B4), + /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x0DD - 0x0B4), /* 0x0B4 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0DC - 0x0B8), /* 0x0B8 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x0BE - 0x0BC), /* 0x0BC */ SCHEDULE_CMD_RET_VAL_S(5), @@ -150,7 +150,7 @@ static u8 sScheduleScript[] = { /* 0x0F3 */ SCHEDULE_CMD_RET_TIME(4, 0, 4, 10, 11), /* 0x0F9 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12B - 0x0FD), /* 0x0FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 10, 4, 30, 0x125 - 0x103), - /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_01, 0x11C - 0x107), + /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x11C - 0x107), /* 0x107 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 4, 45, 0x116 - 0x10D), /* 0x10D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 45, 6, 0, 0x114 - 0x113), /* 0x113 */ SCHEDULE_CMD_RET_NONE(), @@ -313,7 +313,7 @@ s32 func_80A3E898(EnTest3* this, PlayState* play) { u16 textId = this->unk_D78->textId; if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { - func_80151BB4(play, 2); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } if (textId == 0xFFFF) { Message_CloseTextbox(play); @@ -658,7 +658,7 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) { this->player.stateFlags2 &= ~PLAYER_STATE2_40000; D_80A41D5C = true; if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { - func_80151BB4(play, 2); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } } else { if (play->actorCtx.flags & ACTORCTX_FLAG_4) { @@ -785,7 +785,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); } if (play->actorCtx.flags & ACTORCTX_FLAG_6) { - SET_WEEKEVENTREG(WEEKEVENTREG_51_20); + SET_WEEKEVENTREG(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_02); } D_80A41D20 = 3; @@ -1019,8 +1019,8 @@ void func_80A40908(EnTest3* this, PlayState* play) { func_80A3E7E0(this, func_80A4084C); this->player.targetedActor = &GET_PLAYER(play)->actor; SET_WEEKEVENTREG(WEEKEVENTREG_51_08); - func_80151BB4(play, 0x19); - func_80151BB4(play, 2); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } else { func_800B8500(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); this->unk_D78 = &D_80A41854[6]; @@ -1217,7 +1217,7 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL Matrix_MultVec3f(&D_80A418CC, &this->player.actor.focus.pos); } } else if (limbIndex == OBJECT_TEST3_LIMB_15) { - if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_50_80) || + if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES) || (INV_CONTENT(ITEM_PENDANT_OF_MEMORIES) == ITEM_PENDANT_OF_MEMORIES) || (this->player.getItemDrawIdPlusOne - 1 == GID_PENDANT_OF_MEMORIES)) { D_80A41D60 = true; 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 21ddf2bee..fb18d4a39 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -4,7 +4,6 @@ * Description: Three-Day Events */ -#include "prevent_bss_reordering.h" #include "z_en_test4.h" #include "z64horse.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" 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 7de3b50c2..2177742dc 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -290,7 +290,7 @@ void func_80BA3BFC(EnToto* this, PlayState* play) { this->unk2B4 = 0; } else { if (this->text->unk0 == 4) { - func_80151BB4(play, 9); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); } Animation_MorphToLoop(&this->skelAnime, &object_zm_Anim_00B3E0, -4.0f); } @@ -333,9 +333,9 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { } else { player = GET_PLAYER(play); if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) { - func_80151BB4(play, 48); - func_80151BB4(play, 9); - func_80151BB4(play, 10); + 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); } else { return; } @@ -369,7 +369,7 @@ s32 func_80BA3F2C(EnToto* this, PlayState* play) { func_80BA3EE8(this, play); } if (this->text->unk0 == 4) { - func_80151BB4(play, 9); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); } return 0; } @@ -686,8 +686,8 @@ void func_80BA4CB4(EnToto* this, PlayState* play) { Animation_PlayOnce(&this->skelAnime, (this->cueId == 1) ? &object_zm_Anim_0016A4 : &object_zm_Anim_0022C8); if ((this->cueId == 2) && (this->unk2B3 != 0xF)) { - func_80151BB4(play, 9); - func_80151BB4(play, 10); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN); } } } 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 9df560150..9238a166b 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -136,9 +136,9 @@ void EnYb_Destroy(Actor* thisx, PlayState* play) { void func_80BFA2FC(PlayState* play) { if (INV_CONTENT(ITEM_MASK_KAMARO) == ITEM_MASK_KAMARO) { - func_80151BB4(play, 0x34); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK); } - func_80151BB4(play, 0xF); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO); } /** diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c index ee8c84877..774632cb4 100644 --- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c +++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c @@ -31,7 +31,8 @@ ActorInit Obj_Dinner_InitVars = { void ObjDinner_Init(Actor* thisx, PlayState* play) { ObjDinner* this = THIS; - if ((gSaveContext.save.isNight != true) || ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01))) { + if ((gSaveContext.save.isNight != true) || + ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM))) { Actor_Kill(&this->actor); } Actor_SetScale(&this->actor, 0.1f); diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c index 8ff6e8455..75ff18b6b 100644 --- a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c +++ b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c @@ -58,7 +58,7 @@ void ObjMilkBin_Init(Actor* thisx, PlayState* play) { this->disableDraw = 0; this->type = thisx->params; - if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { this->disableDraw |= 1; } } @@ -74,14 +74,14 @@ void ObjMilkBin_Update(Actor* thisx, PlayState* play2) { ObjMilkBin* this = THIS; if (this->type == OBJ_MILK_BIN_TYPE_1) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == 1)) || (gSaveContext.save.day >= 3)) { Actor_Kill(&this->actor); return; } } } else if (this->type == OBJ_MILK_BIN_TYPE_2) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { this->disableDraw &= ~1; } else { this->disableDraw |= 1; 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 c4f884694..a6085ef51 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -15,7 +15,7 @@ /** * weekEventReg flags checked by this actor: - * - WEEKEVENTREG_22_01: Aliens defeated + * - WEEKEVENTREG_DEFENDED_AGAINST_THEM: Aliens defeated * If false: The actor doesn't spawn * - WEEKEVENTREG_31_40 * If true: Cremia doesn't explain again she'll deliever milk to town @@ -23,7 +23,7 @@ * If true: Triggers cutscene on Romani's Ranch * - WEEKEVENTREG_34_80 * If true: Doesn't spawn on Romani's Ranch - * - WEEKEVENTREG_52_01 + * - WEEKEVENTREG_ESCORTED_CREMIA * If true: Doesn't spawn on Romani's Ranch or Milk Road * - WEEKEVENTREG_52_02 * If true: Doesn't spawn on Romani's Ranch or Milk Road @@ -37,7 +37,7 @@ * Player accepts the ride and is with Cremia during the Milk Run * - WEEKEVENTREG_34_80: Cremia does Milk Run alone * Player didn't interact or didn't accept the ride - * - WEEKEVENTREG_52_01: Won Milk Run minigame + * - WEEKEVENTREG_ESCORTED_CREMIA: Won Milk Run minigame * At least one pot is safe. Turns off the "Lose Milk Run minigame" * - WEEKEVENTREG_52_02: Lose Milk Run minigame * Every pot was broken by bandits. Turns off the "Win Milk Run minigame" @@ -47,7 +47,7 @@ * weekEventReg flags unset by this actor: * - WEEKEVENTREG_31_80 * Turned off when the Milk Run finishes - * - WEEKEVENTREG_52_01 + * - WEEKEVENTREG_ESCORTED_CREMIA * Turned off if Player lose the Milk Run * - WEEKEVENTREG_52_02 * Turned off if Player wins the Milk Run @@ -682,7 +682,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->initialPathIndex = OBJ_UM_GET_PATH_INDEX(thisx); // if (!AliensDefeated) - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { Actor_Kill(&this->dyna.actor); return; } @@ -702,7 +702,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { // Waiting for player if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_80) || (gSaveContext.save.time >= CLOCK_TIME(19, 0)) || - (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { Actor_Kill(&this->dyna.actor); return; @@ -713,7 +713,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { ObjUm_SetupAction(this, ObjUm_RanchWait); } } else if (this->type == OBJ_UM_TYPE_PRE_MILK_RUN) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Actor_Kill(&this->dyna.actor); return; } @@ -739,7 +739,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); } else if (this->type == OBJ_UM_TYPE_POST_MILK_RUN) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { Actor_Kill(&this->dyna.actor); return; } @@ -843,7 +843,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { } else { Actor_ContinueText(play, &this->dyna.actor, 0x33B5); func_8019F230(); - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); phi_v1 = false; } break; @@ -1302,13 +1302,13 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_31_80); gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { if (!this->areAllPotsBroken) { play->nextEntrance = ENTRANCE(MILK_ROAD, 6); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; - SET_WEEKEVENTREG(WEEKEVENTREG_52_01); + SET_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA); CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_02); } else { play->nextEntrance = ENTRANCE(ROMANI_RANCH, 8); @@ -1316,7 +1316,7 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) { gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; SET_WEEKEVENTREG(WEEKEVENTREG_52_02); - CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA); } } break; diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c index 46a6b994d..23e6eb0ac 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c @@ -80,7 +80,7 @@ s32 func_80C07CD0(void) { } } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } return true; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index bbde013ef..01c732aa2 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3,7 +3,6 @@ * Overlay: ovl_player_actor * Description: Player */ - #include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" @@ -19110,7 +19109,7 @@ void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) { PlayerAnimation_Update(play, &this->skelAnime); if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; - func_80151BB4(play, 0x1B); + Message_BombersNotebookQueueEvent(play, 0x1B); Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); } } @@ -19786,7 +19785,7 @@ void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) { } } } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { - SET_WEEKEVENTREG(WEEKEVENTREG_50_80); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES); } } 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 64da25451..b60a00f9e 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 @@ -3,7 +3,7 @@ * Overlay: ovl_kaleido_scope * Description: Pause Menu */ - +#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py index 37ba8b45e..78d66d337 100755 --- a/tools/disasm/disasm.py +++ b/tools/disasm/disasm.py @@ -169,7 +169,6 @@ variable_addrs = None files_text = {} - def proper_name(symbol, in_data=False, is_symbol=True): # hacks # ovl_En_Encount4 fake symbol at the very end of the data section @@ -181,6 +180,10 @@ def proper_name(symbol, in_data=False, is_symbol=True): return variables_ast[0x801EF670][0] + f" - 0x{0x801EF670 - 0x801EF51D:X}" elif symbol == 0x801D0D7A: # play_hireso constant-folding D_801D0D80 array return variables_ast[0x801D0D80][0] + f" - 0x{0x801D0D80 - 0x801D0D7A:X}" + elif symbol == 0x801D11F4: # play_hireso constant-folding D_801D1244 array + return variables_ast[0x801D1244][0] + f" - 0x{0x801D1244 - 0x801D11F4:X}" + elif symbol == 0x801D12C0: # play_hireso constant-folding D_801D12E8 array + return variables_ast[0x801D12E8][0] + f" - 0x{0x801D12E8 - 0x801D12C0:X}" elif symbol == 0x80A09740: # boss_07 symbol with large addend folded into %lo return variables_ast[0x80A09A60][0] + f" - 0x{0x80A09A60 - 0x80A09740:X}" # bg_ikana_mirror symbol with large addend folded into %lo diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1d38ccc2e..4fc8f07c1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2855,7 +2855,7 @@ 0x801518B0:("Message_StartTextbox",), 0x80151938:("Message_ContinueTextbox",), 0x80151A68:("func_80151A68",), - 0x80151BB4:("func_80151BB4",), + 0x80151BB4:("Message_BombersNotebookQueueEvent",), 0x80151C9C:("func_80151C9C",), 0x80151DA4:("func_80151DA4",), 0x80152434:("func_80152434",), @@ -3040,16 +3040,16 @@ 0x8016A178:("Play_AssignPlayerCsIdsFromScene",), 0x8016A268:("Play_FillScreen",), 0x8016A2C8:("Play_Init",), - 0x8016AC10:("func_8016AC10",), - 0x8016AE1C:("func_8016AE1C",), - 0x8016B278:("func_8016B278",), - 0x8016B4B0:("func_8016B4B0",), - 0x8016C344:("func_8016C344",), - 0x8016CD4C:("func_8016CD4C",), - 0x8016E40C:("func_8016E40C",), - 0x8016EA90:("func_8016EA90",), + 0x8016AC10:("BombersNotebook_DrawScisTexRect",), + 0x8016AE1C:("BombersNotebook_DrawHeaders",), + 0x8016B278:("BombersNotebook_DrawColumns",), + 0x8016B4B0:("BombersNotebook_DrawEntries",), + 0x8016C344:("BombersNotebook_DrawRows",), + 0x8016CD4C:("BombersNotebook_DrawTimeOfDay",), + 0x8016E40C:("BombersNotebook_DrawCursor",), + 0x8016EA90:("BombersNotebook_DrawArrows",), 0x8016F1A8:("BombersNotebook_Draw",), - 0x8016F4EC:("func_8016F4EC",), + 0x8016F4EC:("BombersNotebook_LoadFiles",), 0x8016F5A8:("BombersNotebook_Update",), 0x8016FC78:("BombersNotebook_Init",), 0x8016FC98:("BombersNotebook_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 3a14118c5..749ee5878 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1958,8 +1958,8 @@ 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2), 0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2), 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1), - 0x801C6AB8:("D_801C6AB8","UNK_TYPE1","",0x1), - 0x801C6B28:("D_801C6B28","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), @@ -2115,19 +2115,14 @@ 0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2), 0x801D0D60:("D_801D0D60","Input*","",0x4), 0x801D0D64:("sPlayerCsIdToCsCamId","s16","[10]",0x14), - 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1), - 0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1), - 0x801D1230:("D_801D1230","UNK_TYPE1","",0x1), - 0x801D1234:("D_801D1234","UNK_TYPE1","",0x1), - 0x801D1238:("D_801D1238","UNK_TYPE4","",0x4), - 0x801D1244:("D_801D1244","UNK_TYPE1","",0x1), - 0x801D12C0:("D_801D12C0","UNK_TYPE1","",0x1), - 0x801D12D0:("D_801D12D0","UNK_TYPE1","",0x1), - 0x801D12D4:("D_801D12D4","UNK_TYPE1","",0x1), - 0x801D12D8:("D_801D12D8","UNK_TYPE1","",0x1), + 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x4B0), + 0x801D1230:("D_801D1230","UNK_TYPE1","",0x8), + 0x801D1238:("D_801D1238","UNK_TYPE4","",0x1), + 0x801D1244:("D_801D1244","UNK_TYPE1","",0x8C), + 0x801D12D0:("D_801D12D0","UNK_TYPE1","",0xC), 0x801D12DC:("D_801D12DC","UNK_TYPE1","",0x1), - 0x801D1330:("D_801D1330","UNK_TYPE2","",0x2), - 0x801D1342:("D_801D1342","UNK_TYPE1","",0x1), + 0x801D12E8:("D_801D12E8","UNK_TYPE1","",0x1), + 0x801D1330:("D_801D1330","UNK_TYPE1","",0x14), 0x801D1344:("D_801D1344","UNK_TYPE2","",0x2), 0x801D1368:("D_801D1368","UNK_TYPE1","",0x1), 0x801D1374:("D_801D1374","UNK_TYPE2","",0x2), diff --git a/tools/namefixer.py b/tools/namefixer.py index a755cc88c..417210d8f 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -713,6 +713,7 @@ wordReplace = { "func_80158FB0": "Message_LoadTimeNES", "func_8015926C": "Message_LoadOwlWarpTextNES", "func_8015E750": "Message_FindCreditsMessage", + "func_80151BB4": "Message_BombersNotebookQueueEvent", "func_80133038": "Schedule_RunScript", "EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow", diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index 5f42d30d6..efa3bc2fe 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -5,6 +5,8 @@ compiler_type = "ido" "gs[DS]P.*" = "void" "gDma.*" = "void" "G_IM_SIZ_.*" = "int" +"G_IM_FMT_.*" = "int" +"G_TX_.*" = "int" "G_[AC]C.*" = "int" LOG = "void" SET_FULLSCREEN_VIEWPORT = "void" diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 834b933ef..80d36de95 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2369,7 +2369,7 @@ 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/func_80151BB4.s,func_80151BB4,0x80151BB4,0x3A +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 @@ -2554,16 +2554,16 @@ asm/non_matchings/code/z_play/Play_IsDebugCamEnabled.s,Play_IsDebugCamEnabled,0x asm/non_matchings/code/z_play/func_8016A178.s,func_8016A178,0x8016A178,0x3C asm/non_matchings/code/z_play/Play_FillScreen.s,Play_FillScreen,0x8016A268,0x18 asm/non_matchings/code/z_play/Play_Init.s,Play_Init,0x8016A2C8,0x252 -asm/non_matchings/code/z_play_hireso/func_8016AC10.s,func_8016AC10,0x8016AC10,0x83 -asm/non_matchings/code/z_play_hireso/func_8016AE1C.s,func_8016AE1C,0x8016AE1C,0x117 -asm/non_matchings/code/z_play_hireso/func_8016B278.s,func_8016B278,0x8016B278,0x8E -asm/non_matchings/code/z_play_hireso/func_8016B4B0.s,func_8016B4B0,0x8016B4B0,0x3A5 -asm/non_matchings/code/z_play_hireso/func_8016C344.s,func_8016C344,0x8016C344,0x282 -asm/non_matchings/code/z_play_hireso/func_8016CD4C.s,func_8016CD4C,0x8016CD4C,0x5B0 -asm/non_matchings/code/z_play_hireso/func_8016E40C.s,func_8016E40C,0x8016E40C,0x1A1 -asm/non_matchings/code/z_play_hireso/func_8016EA90.s,func_8016EA90,0x8016EA90,0x1C6 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawScisTexRect.s,BombersNotebook_DrawScisTexRect,0x8016AC10,0x83 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawHeaders.s,BombersNotebook_DrawHeaders,0x8016AE1C,0x117 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawColumns.s,BombersNotebook_DrawColumns,0x8016B278,0x8E +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawEntries.s,BombersNotebook_DrawEntries,0x8016B4B0,0x3A5 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawRows.s,BombersNotebook_DrawRows,0x8016C344,0x282 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawTimeOfDay.s,BombersNotebook_DrawTimeOfDay,0x8016CD4C,0x5B0 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawCursor.s,BombersNotebook_DrawCursor,0x8016E40C,0x1A1 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawArrows.s,BombersNotebook_DrawArrows,0x8016EA90,0x1C6 asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s,BombersNotebook_Draw,0x8016F1A8,0xD1 -asm/non_matchings/code/z_play_hireso/func_8016F4EC.s,func_8016F4EC,0x8016F4EC,0x2F +asm/non_matchings/code/z_play_hireso/BombersNotebook_LoadFiles.s,BombersNotebook_LoadFiles,0x8016F4EC,0x2F asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s,BombersNotebook_Update,0x8016F5A8,0x1B4 asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s,BombersNotebook_Init,0x8016FC78,0x8 asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s,BombersNotebook_Destroy,0x8016FC98,0x16 diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 28b64d2fa..591671ab8 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -177,10 +177,10 @@ weekEventReg = { (21 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON", (21 << 8) | 0x08: "WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON", (21 << 8) | 0x10: "WEEKEVENTREG_21_10", - (21 << 8) | 0x20: "WEEKEVENTREG_21_20", + (21 << 8) | 0x20: "WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM", (21 << 8) | 0x40: "WEEKEVENTREG_21_40", (21 << 8) | 0x80: "WEEKEVENTREG_21_80", - (22 << 8) | 0x01: "WEEKEVENTREG_22_01", + (22 << 8) | 0x01: "WEEKEVENTREG_DEFENDED_AGAINST_THEM", (22 << 8) | 0x02: "WEEKEVENTREG_22_02", (22 << 8) | 0x04: "WEEKEVENTREG_CALMED_GORON_ELDERS_SON", (22 << 8) | 0x08: "WEEKEVENTREG_22_08", @@ -221,11 +221,11 @@ weekEventReg = { (26 << 8) | 0x40: "WEEKEVENTREG_26_40", (26 << 8) | 0x80: "WEEKEVENTREG_26_80", (27 << 8) | 0x01: "WEEKEVENTREG_27_01", - (27 << 8) | 0x02: "WEEKEVENTREG_27_02", - (27 << 8) | 0x04: "WEEKEVENTREG_27_04", - (27 << 8) | 0x08: "WEEKEVENTREG_27_08", - (27 << 8) | 0x10: "WEEKEVENTREG_27_10", - (27 << 8) | 0x20: "WEEKEVENTREG_27_20", + (27 << 8) | 0x02: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN", + (27 << 8) | 0x04: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN", + (27 << 8) | 0x08: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN", + (27 << 8) | 0x10: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN", + (27 << 8) | 0x20: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN", (27 << 8) | 0x40: "WEEKEVENTREG_27_40", (27 << 8) | 0x80: "WEEKEVENTREG_27_80", (28 << 8) | 0x01: "WEEKEVENTREG_28_01", @@ -407,20 +407,20 @@ weekEventReg = { (50 << 8) | 0x01: "WEEKEVENTREG_50_01", (50 << 8) | 0x02: "WEEKEVENTREG_50_02", (50 << 8) | 0x04: "WEEKEVENTREG_50_04", - (50 << 8) | 0x08: "WEEKEVENTREG_50_08", + (50 << 8) | 0x08: "WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING", (50 << 8) | 0x10: "WEEKEVENTREG_50_10", - (50 << 8) | 0x20: "WEEKEVENTREG_50_20", + (50 << 8) | 0x20: "WEEKEVENTREG_HAD_MIDNIGHT_MEETING", (50 << 8) | 0x40: "WEEKEVENTREG_50_40", - (50 << 8) | 0x80: "WEEKEVENTREG_50_80", - (51 << 8) | 0x01: "WEEKEVENTREG_51_01", + (50 << 8) | 0x80: "WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES", + (51 << 8) | 0x01: "WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES", (51 << 8) | 0x02: "WEEKEVENTREG_51_02", (51 << 8) | 0x04: "WEEKEVENTREG_51_04", (51 << 8) | 0x08: "WEEKEVENTREG_51_08", (51 << 8) | 0x10: "WEEKEVENTREG_51_10", - (51 << 8) | 0x20: "WEEKEVENTREG_51_20", + (51 << 8) | 0x20: "WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT", (51 << 8) | 0x40: "WEEKEVENTREG_51_40", (51 << 8) | 0x80: "WEEKEVENTREG_51_80", - (52 << 8) | 0x01: "WEEKEVENTREG_52_01", + (52 << 8) | 0x01: "WEEKEVENTREG_ESCORTED_CREMIA", (52 << 8) | 0x02: "WEEKEVENTREG_52_02", (52 << 8) | 0x04: "WEEKEVENTREG_52_04", (52 << 8) | 0x08: "WEEKEVENTREG_52_08", @@ -532,61 +532,61 @@ weekEventReg = { (65 << 8) | 0x20: "WEEKEVENTREG_65_20", (65 << 8) | 0x40: "WEEKEVENTREG_65_40", (65 << 8) | 0x80: "WEEKEVENTREG_65_80", - (66 << 8) | 0x01: "WEEKEVENTREG_66_01", - (66 << 8) | 0x02: "WEEKEVENTREG_66_02", - (66 << 8) | 0x04: "WEEKEVENTREG_66_04", - (66 << 8) | 0x08: "WEEKEVENTREG_66_08", - (66 << 8) | 0x10: "WEEKEVENTREG_66_10", - (66 << 8) | 0x20: "WEEKEVENTREG_66_20", - (66 << 8) | 0x40: "WEEKEVENTREG_66_40", - (66 << 8) | 0x80: "WEEKEVENTREG_66_80", - (67 << 8) | 0x01: "WEEKEVENTREG_67_01", - (67 << 8) | 0x02: "WEEKEVENTREG_67_02", - (67 << 8) | 0x04: "WEEKEVENTREG_67_04", - (67 << 8) | 0x08: "WEEKEVENTREG_67_08", - (67 << 8) | 0x10: "WEEKEVENTREG_67_10", - (67 << 8) | 0x20: "WEEKEVENTREG_67_20", - (67 << 8) | 0x40: "WEEKEVENTREG_67_40", - (67 << 8) | 0x80: "WEEKEVENTREG_67_80", - (68 << 8) | 0x01: "WEEKEVENTREG_68_01", - (68 << 8) | 0x02: "WEEKEVENTREG_68_02", - (68 << 8) | 0x04: "WEEKEVENTREG_68_04", - (68 << 8) | 0x08: "WEEKEVENTREG_68_08", - (68 << 8) | 0x10: "WEEKEVENTREG_68_10", - (68 << 8) | 0x20: "WEEKEVENTREG_68_20", - (68 << 8) | 0x40: "WEEKEVENTREG_68_40", - (68 << 8) | 0x80: "WEEKEVENTREG_68_80", - (69 << 8) | 0x01: "WEEKEVENTREG_69_01", - (69 << 8) | 0x02: "WEEKEVENTREG_69_02", - (69 << 8) | 0x04: "WEEKEVENTREG_69_04", - (69 << 8) | 0x08: "WEEKEVENTREG_69_08", - (69 << 8) | 0x10: "WEEKEVENTREG_69_10", - (69 << 8) | 0x20: "WEEKEVENTREG_69_20", - (69 << 8) | 0x40: "WEEKEVENTREG_69_40", - (69 << 8) | 0x80: "WEEKEVENTREG_69_80", - (70 << 8) | 0x01: "WEEKEVENTREG_70_01", - (70 << 8) | 0x02: "WEEKEVENTREG_70_02", - (70 << 8) | 0x04: "WEEKEVENTREG_70_04", - (70 << 8) | 0x08: "WEEKEVENTREG_70_08", - (70 << 8) | 0x10: "WEEKEVENTREG_70_10", - (70 << 8) | 0x20: "WEEKEVENTREG_70_20", - (70 << 8) | 0x40: "WEEKEVENTREG_70_40", - (70 << 8) | 0x80: "WEEKEVENTREG_70_80", - (71 << 8) | 0x01: "WEEKEVENTREG_71_01", - (71 << 8) | 0x02: "WEEKEVENTREG_71_02", - (71 << 8) | 0x04: "WEEKEVENTREG_71_04", - (71 << 8) | 0x08: "WEEKEVENTREG_71_08", - (71 << 8) | 0x10: "WEEKEVENTREG_71_10", - (71 << 8) | 0x20: "WEEKEVENTREG_71_20", - (71 << 8) | 0x40: "WEEKEVENTREG_71_40", - (71 << 8) | 0x80: "WEEKEVENTREG_71_80", - (72 << 8) | 0x01: "WEEKEVENTREG_72_01", - (72 << 8) | 0x02: "WEEKEVENTREG_72_02", - (72 << 8) | 0x04: "WEEKEVENTREG_72_04", - (72 << 8) | 0x08: "WEEKEVENTREG_72_08", - (72 << 8) | 0x10: "WEEKEVENTREG_72_10", - (72 << 8) | 0x20: "WEEKEVENTREG_72_20", - (72 << 8) | 0x40: "WEEKEVENTREG_72_40", + (66 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU", + (66 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI", + (66 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN", + (66 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY", + (66 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI", + (66 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA", + (66 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR", + (66 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAOME_AROMA", + (67 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO", + (67 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN", + (67 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN", + (67 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS", + (67 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND", + (67 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER", + (67 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO", + (67 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG", + (68 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS", + (68 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO", + (68 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU", + (68 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS", + (68 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY", + (68 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING", + (68 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI", + (68 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI", + (69 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI", + (69 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES", + (69 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES", + (69 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT", + (69 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM", + (69 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM", + (69 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE", + (69 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA", + (70 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK", + (70 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK", + (70 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL", + (70 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL", + (70 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE", + (70 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK", + (70 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP", + (70 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP", + (71 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP", + (71 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP", + (71 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP", + (71 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP", + (71 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK", + (71 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK", + (71 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD", + (71 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK", + (72 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK", + (72 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT", + (72 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK", + (72 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK", + (72 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK", + (72 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK", + (72 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK", (72 << 8) | 0x80: "WEEKEVENTREG_72_80", (73 << 8) | 0x01: "WEEKEVENTREG_73_01", (73 << 8) | 0x02: "WEEKEVENTREG_73_02", @@ -608,7 +608,7 @@ weekEventReg = { (75 << 8) | 0x02: "WEEKEVENTREG_75_02", (75 << 8) | 0x04: "WEEKEVENTREG_75_04", (75 << 8) | 0x08: "WEEKEVENTREG_75_08", - (75 << 8) | 0x10: "WEEKEVENTREG_75_10", + (75 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_ROOM_KEY", (75 << 8) | 0x20: "WEEKEVENTREG_75_20", (75 << 8) | 0x40: "WEEKEVENTREG_75_40", (75 << 8) | 0x80: "WEEKEVENTREG_75_80", @@ -648,7 +648,7 @@ weekEventReg = { (80 << 8) | 0x02: "WEEKEVENTREG_80_02", (80 << 8) | 0x04: "WEEKEVENTREG_80_04", (80 << 8) | 0x08: "WEEKEVENTREG_80_08", - (80 << 8) | 0x10: "WEEKEVENTREG_80_10", + (80 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_PRIORITY_MAIL", (80 << 8) | 0x20: "WEEKEVENTREG_80_20", (80 << 8) | 0x40: "WEEKEVENTREG_80_40", (80 << 8) | 0x80: "WEEKEVENTREG_80_80", diff --git a/undefined_syms.txt b/undefined_syms.txt index a45e5c682..e586991ff 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1100,6 +1100,29 @@ D_06000D60 = 0x06000D60; // segment 0x07 +D_07000000 = 0x07000000; +D_07000800 = 0x07000800; +D_07001000 = 0x07001000; +D_07001800 = 0x07001800; +D_07002000 = 0x07002000; +D_07002800 = 0x07002800; +D_07003000 = 0x07003000; +D_07003800 = 0x07003800; +D_07004000 = 0x07004000; +D_07004800 = 0x07004800; +D_07005000 = 0x07005000; +D_07005800 = 0x07005800; +D_07006000 = 0x07006000; +D_07006800 = 0x07006800; +D_07007000 = 0x07007000; +D_07007800 = 0x07007800; +D_07008000 = 0x07008000; +D_07008800 = 0x07008800; +D_07009000 = 0x07009000; +D_07009800 = 0x07009800; +D_0700AC00 = 0x0700AC00; +D_0700AEA0 = 0x0700AEA0; + // segment 0x08