From 06ec56df7f951f88da05f468cdcacecba496145a Mon Sep 17 00:00:00 2001 From: n64 Date: Sun, 1 Mar 2020 22:42:52 -0500 Subject: [PATCH] Refresh 7 --- CHANGES | 40 + Makefile | 51 +- Makefile.split | 2 +- README.md | 5 +- actors/boo/geo.inc.c | 2 +- actors/boo_castle/geo.inc.c | 2 +- actors/bowser/geo.inc.c | 22 +- actors/bowser_key/geo.inc.c | 2 +- actors/chuckya/geo.inc.c | 2 +- actors/group0.c | 2 +- actors/group0.h | 20 +- actors/group0_geo.c | 2 +- actors/impact_ring/geo.inc.c | 2 +- actors/impact_smoke/geo.inc.c | 2 +- actors/king_bobomb/geo.inc.c | 2 +- actors/klepto/geo.inc.c | 8 +- actors/lakitu_enemy/geo.inc.c | 2 +- actors/mario/geo.inc.c | 24 +- actors/mario_cap/geo.inc.c | 8 +- actors/mist/geo.inc.c | 4 +- actors/moneybag/geo.inc.c | 2 +- actors/monty_mole/geo.inc.c | 2 +- actors/peach/geo.inc.c | 2 +- actors/snowman/geo.inc.c | 2 +- actors/snufit/geo.inc.c | 4 +- actors/stomp_smoke/geo.inc.c | 3 +- actors/sushi/geo.inc.c | 2 +- actors/toad/geo.inc.c | 2 +- actors/water_ring/geo.inc.c | 2 +- actors/water_wave/geo.inc.c | 29 + .../{water_waves => water_wave}/model.inc.c | 54 +- actors/water_waves/geo.inc.c | 29 - asm/entry.s | 6 +- asm/non_matchings/alloc_bank_or_seq.s | 303 ---- .../eu/append_bubble_vertex_buffer.s | 151 -- .../eu/append_snowflake_vertex_buffer.s | 156 -- .../eu/audio/alloc_bank_or_seq.s | 269 --- asm/non_matchings/eu/audio/func_eu_802e00d8.s | 88 - .../eu/audio/note_apply_headset_pan_effects.s | 263 --- .../eu/audio/prepare_reverb_ring_buffer.s | 179 -- .../audio/seq_channel_layer_process_script.s | 6 +- .../eu/audio/sequence_channel_enable.s | 56 - .../audio/sequence_player_process_sequence.s | 698 -------- .../eu/audio/synthesis_do_one_audio_update.s | 331 ---- .../eu/audio/synthesis_execute.s | 178 -- .../audio/synthesis_resample_and_mix_reverb.s | 220 --- .../eu/handle_dialog_text_and_pages.s | 370 ---- asm/non_matchings/eu/libultra_unk_802aeeb0.s | 55 - asm/non_matchings/eu/libultra_unk_802aef80.s | 87 - asm/non_matchings/eu/play_sequence.s | 86 - .../eu/player_performed_grab_escape_action.s | 36 - asm/rom_header.s | 12 +- assets.json | 11 +- bin/segment2.c | 317 ++-- bin/spooky.c | 5 - data/behavior_data.c | 156 +- diff.py | 0 enhancements/mem_error_screen.patch | 6 +- extract_assets.py | 4 +- include/PR/os_pi.h | 6 +- include/behavior_data.h | 28 +- {src/game => include}/eu_translation.h | 8 + include/model_ids.h | 6 +- include/object_constants.h | 99 +- include/object_fields.h | 58 +- include/segments.h | 2 + include/sm64.h | 40 +- include/text_strings.h.in | 2 +- levels/bbh/areas/1/geo.inc.c | 2 +- levels/bitdw/areas/1/geo.inc.c | 2 +- levels/bitfs/areas/1/geo.inc.c | 2 +- levels/bits/areas/1/geo.inc.c | 2 +- levels/bob/areas/1/geo.inc.c | 2 +- levels/bowser_1/areas/1/geo.inc.c | 2 +- levels/bowser_2/areas/1/geo.inc.c | 2 +- levels/bowser_3/areas/1/geo.inc.c | 2 +- levels/castle_courtyard/areas/1/geo.inc.c | 2 +- levels/castle_grounds/areas/1/geo.inc.c | 2 +- levels/castle_inside/areas/1/geo.inc.c | 34 +- levels/castle_inside/areas/2/geo.inc.c | 58 +- levels/castle_inside/areas/3/geo.inc.c | 40 +- levels/castle_inside/painting.inc.c | 490 +++--- levels/ccm/areas/1/geo.inc.c | 2 +- levels/ccm/areas/2/geo.inc.c | 2 +- levels/cotmc/areas/1/geo.inc.c | 2 +- levels/ddd/areas/1/geo.inc.c | 2 +- levels/ddd/areas/2/geo.inc.c | 2 +- levels/hmc/areas/1/geo.inc.c | 10 +- levels/hmc/areas/1/painting.inc.c | 48 +- levels/jrb/areas/1/geo.inc.c | 2 +- levels/jrb/areas/2/geo.inc.c | 2 +- levels/jrb/wooden_ship/geo.inc.c | 4 +- levels/lll/areas/1/geo.inc.c | 2 +- levels/lll/areas/2/geo.inc.c | 2 +- levels/pss/areas/1/geo.inc.c | 2 +- levels/rr/areas/1/geo.inc.c | 2 +- levels/sa/areas/1/geo.inc.c | 2 +- levels/scripts.c | 6 +- levels/sl/areas/1/geo.inc.c | 2 +- levels/sl/areas/2/geo.inc.c | 2 +- levels/sl/script.c | 4 +- levels/ssl/areas/1/geo.inc.c | 2 +- levels/ssl/areas/2/geo.inc.c | 2 +- levels/ssl/areas/3/geo.inc.c | 2 +- levels/thi/areas/1/geo.inc.c | 2 +- levels/thi/areas/2/geo.inc.c | 2 +- levels/thi/areas/3/geo.inc.c | 2 +- levels/totwc/areas/1/geo.inc.c | 2 +- levels/ttc/areas/1/geo.inc.c | 2 +- levels/ttm/areas/1/geo.inc.c | 6 +- levels/ttm/areas/1/painting.inc.c | 61 +- levels/ttm/areas/2/geo.inc.c | 2 +- levels/ttm/areas/3/geo.inc.c | 2 +- levels/ttm/areas/4/geo.inc.c | 2 +- levels/vcutm/areas/1/geo.inc.c | 2 +- levels/wdw/areas/1/geo.inc.c | 2 +- levels/wdw/areas/2/geo.inc.c | 2 +- levels/wf/areas/1/geo.inc.c | 2 +- levels/wmotr/areas/1/geo.inc.c | 2 +- lib/asm/__osExceptionPreamble.s | 3 + lib/src/D_802F4380.c | 2 +- lib/src/osCreatePiManager.c | 2 +- lib/src/osInitialize.c | 8 +- rename_sym.sh | 2 +- sm64.ld | 8 +- sm64.sh.sha1 | 1 + src/audio/data.c | 10 +- src/audio/effects.c | 149 +- src/audio/external.c | 24 +- src/audio/{memory.c => heap.c} | 168 +- src/audio/{memory.h => heap.h} | 7 +- src/audio/internal.h | 67 +- src/audio/load.c | 53 +- src/audio/playback.c | 24 +- src/audio/playback.h | 5 +- src/audio/port_eu.c | 30 +- src/audio/seqplayer.c | 132 +- src/audio/synthesis.c | 287 ++-- src/engine/behavior_script.c | 39 +- src/engine/level_script.c | 14 +- src/engine/surface_load.c | 4 +- src/game/area.c | 20 +- src/game/area.h | 8 +- src/game/behavior_actions.c | 54 +- src/game/behavior_actions.h | 81 +- src/game/behaviors/amp.inc.c | 20 +- .../behaviors/animated_floor_switch.inc.c | 8 +- .../behaviors/bbh_haunted_bookshelf.inc.c | 4 +- src/game/behaviors/bbh_merry_go_round.inc.c | 6 +- src/game/behaviors/beta_boo_key.inc.c | 20 +- src/game/behaviors/beta_bowser_anchor.inc.c | 4 +- src/game/behaviors/beta_chest.inc.c | 4 +- src/game/behaviors/beta_holdable_object.inc.c | 12 +- src/game/behaviors/beta_trampoline.inc.c | 10 +- src/game/behaviors/bird.inc.c | 16 +- src/game/behaviors/blue_coin.inc.c | 32 +- src/game/behaviors/blue_fish.inc.c | 131 +- src/game/behaviors/bobomb.inc.c | 117 +- src/game/behaviors/bomp.inc.c | 8 +- src/game/behaviors/boo.inc.c | 212 +-- src/game/behaviors/boo_cage.inc.c | 20 +- src/game/behaviors/boulder.inc.c | 16 +- src/game/behaviors/bouncing_fireball.inc.c | 12 +- src/game/behaviors/bowling_ball.inc.c | 38 +- src/game/behaviors/bowser.inc.c | 580 ++++--- src/game/behaviors/bowser_bomb.inc.c | 6 +- src/game/behaviors/bowser_key.inc.c | 14 +- src/game/behaviors/bowser_key_cutscene.inc.c | 10 +- src/game/behaviors/bowser_puzzle_piece.inc.c | 8 +- src/game/behaviors/break_particles.inc.c | 2 +- src/game/behaviors/breakable_box.inc.c | 10 +- src/game/behaviors/breakable_box_small.inc.c | 36 +- src/game/behaviors/breakable_wall.inc.c | 10 +- src/game/behaviors/bub.inc.c | 58 +- src/game/behaviors/bubba.inc.c | 14 +- src/game/behaviors/bubble.inc.c | 10 +- src/game/behaviors/bullet_bill.inc.c | 36 +- src/game/behaviors/bully.inc.c | 126 +- src/game/behaviors/butterfly.inc.c | 28 +- src/game/behaviors/camera_lakitu.inc.c | 20 +- src/game/behaviors/cannon.inc.c | 50 +- src/game/behaviors/cannon_door.inc.c | 6 +- src/game/behaviors/cap.inc.c | 60 +- src/game/behaviors/capswitch.inc.c | 43 +- src/game/behaviors/castle_floor_trap.inc.c | 2 +- src/game/behaviors/celebration_star.inc.c | 22 +- src/game/behaviors/chain_chomp.inc.c | 64 +- .../behaviors/checkerboard_platform.inc.c | 26 +- src/game/behaviors/chuckya.inc.c | 96 +- src/game/behaviors/clam.inc.c | 14 +- src/game/behaviors/clock_arm.inc.c | 4 +- src/game/behaviors/cloud.inc.c | 22 +- src/game/behaviors/coffin.inc.c | 10 +- src/game/behaviors/coin.inc.c | 106 +- src/game/behaviors/collide_particles.inc.c | 20 +- .../behaviors/controllable_platform.inc.c | 42 +- src/game/behaviors/corkbox.inc.c | 6 +- src/game/behaviors/cruiser.inc.c | 2 +- src/game/behaviors/ddd_pole.inc.c | 2 +- src/game/behaviors/ddd_sub.inc.c | 2 +- src/game/behaviors/ddd_warp.inc.c | 2 +- src/game/behaviors/decorative_pendulum.inc.c | 2 +- src/game/behaviors/donut_platform.inc.c | 12 +- src/game/behaviors/door.inc.c | 46 +- src/game/behaviors/dorrie.inc.c | 20 +- src/game/behaviors/drawbridge.inc.c | 4 +- src/game/behaviors/elevator.inc.c | 48 +- src/game/behaviors/end_birds_1.inc.c | 8 +- src/game/behaviors/end_birds_2.inc.c | 6 +- src/game/behaviors/enemy_lakitu.inc.c | 21 +- src/game/behaviors/exclamation_box.inc.c | 54 +- src/game/behaviors/explosion.inc.c | 2 +- src/game/behaviors/express_elevator.inc.c | 8 +- src/game/behaviors/eyerok.inc.c | 40 +- src/game/behaviors/falling_pillar.inc.c | 6 +- .../behaviors/falling_rising_platform.inc.c | 2 +- src/game/behaviors/fire_piranha_plant.inc.c | 36 +- src/game/behaviors/fire_spitter.inc.c | 8 +- src/game/behaviors/fish.inc.c | 343 ++-- src/game/behaviors/fishing_boo.inc.c | 2 +- src/game/behaviors/flame.inc.c | 14 +- src/game/behaviors/flame_mario.inc.c | 8 +- src/game/behaviors/flamethrower.inc.c | 12 +- src/game/behaviors/floating_platform.inc.c | 8 +- src/game/behaviors/fly_guy.inc.c | 16 +- .../behaviors/flying_bookend_switch.inc.c | 36 +- src/game/behaviors/goomba.inc.c | 18 +- src/game/behaviors/grand_star.inc.c | 30 +- src/game/behaviors/grill_door.inc.c | 8 +- src/game/behaviors/ground_particles.inc.c | 24 +- src/game/behaviors/haunted_chair.inc.c | 16 +- src/game/behaviors/heave_ho.inc.c | 56 +- src/game/behaviors/hidden_star.inc.c | 12 +- src/game/behaviors/hoot.inc.c | 69 +- src/game/behaviors/horizontal_grindel.inc.c | 10 +- src/game/behaviors/intro_lakitu.inc.c | 32 +- src/game/behaviors/intro_peach.inc.c | 2 +- src/game/behaviors/intro_scene.inc.c | 30 +- src/game/behaviors/jrb_ship.inc.c | 18 +- src/game/behaviors/jumping_box.inc.c | 38 +- src/game/behaviors/kickable_board.inc.c | 26 +- src/game/behaviors/king_bobomb.inc.c | 186 +- src/game/behaviors/klepto.inc.c | 54 +- src/game/behaviors/koopa.inc.c | 94 +- src/game/behaviors/koopa_shell.inc.c | 46 +- .../behaviors/koopa_shell_underwater.inc.c | 16 +- .../behaviors/lll_floating_wood_piece.inc.c | 2 +- src/game/behaviors/lll_hexagonal_ring.inc.c | 16 +- .../lll_octagonal_rotating_mesh.inc.c | 14 +- .../behaviors/lll_rotating_hex_flame.inc.c | 26 +- .../behaviors/lll_sinking_rectangle.inc.c | 6 +- .../behaviors/lll_sinking_rock_block.inc.c | 2 +- src/game/behaviors/lll_volcano_flames.inc.c | 22 +- src/game/behaviors/mad_piano.inc.c | 18 +- src/game/behaviors/manta_ray.inc.c | 24 +- src/game/behaviors/metal_box.inc.c | 14 +- src/game/behaviors/mips.inc.c | 42 +- src/game/behaviors/moat_grill.inc.c | 2 +- src/game/behaviors/moneybag.inc.c | 60 +- src/game/behaviors/monty_mole.inc.c | 38 +- src/game/behaviors/moving_coin.inc.c | 62 +- src/game/behaviors/mr_blizzard.inc.c | 56 +- src/game/behaviors/mr_i.inc.c | 88 +- src/game/behaviors/mushroom_1up.inc.c | 44 +- src/game/behaviors/piranha_bubbles.inc.c | 14 +- src/game/behaviors/piranha_plant.inc.c | 58 +- src/game/behaviors/platform_on_track.inc.c | 12 +- src/game/behaviors/pokey.inc.c | 24 +- src/game/behaviors/pole.inc.c | 4 +- src/game/behaviors/pole_base.inc.c | 4 +- src/game/behaviors/purple_switch.inc.c | 14 +- src/game/behaviors/pyramid_elevator.inc.c | 4 +- src/game/behaviors/pyramid_top.inc.c | 10 +- src/game/behaviors/racing_penguin.inc.c | 44 +- src/game/behaviors/recovery_heart.inc.c | 6 +- src/game/behaviors/red_coin.inc.c | 8 +- src/game/behaviors/rolling_log.inc.c | 22 +- src/game/behaviors/rotating_platform.inc.c | 8 +- src/game/behaviors/scuttlebug.inc.c | 36 +- src/game/behaviors/seesaw_platform.inc.c | 2 +- src/game/behaviors/shock_wave.inc.c | 4 +- src/game/behaviors/skeeter.inc.c | 32 +- src/game/behaviors/sl_snowman_wind.inc.c | 45 + src/game/behaviors/sl_walking_penguin.inc.c | 115 ++ src/game/behaviors/snow_mound.inc.c | 2 +- src/game/behaviors/snowman.inc.c | 54 +- src/game/behaviors/snowman_wind.inc.c | 35 - src/game/behaviors/snufit.inc.c | 170 +- src/game/behaviors/sound_birds.inc.c | 6 +- src/game/behaviors/sound_sand.inc.c | 2 +- src/game/behaviors/sound_volcano.inc.c | 2 +- src/game/behaviors/sound_waterfall.inc.c | 2 +- src/game/behaviors/sparkle_spawn.inc.c | 6 +- src/game/behaviors/sparkle_spawn_star.inc.c | 34 +- src/game/behaviors/spawn_star.inc.c | 32 +- src/game/behaviors/spawn_star_exit.inc.c | 4 +- src/game/behaviors/spindel.inc.c | 2 +- src/game/behaviors/spindrift.inc.c | 18 +- src/game/behaviors/spiny.inc.c | 28 +- .../behaviors/square_platform_cycle.inc.c | 12 +- src/game/behaviors/star_door.inc.c | 16 +- .../behaviors/static_checkered_platform.inc.c | 2 +- src/game/behaviors/strong_wind_particle.inc.c | 65 + src/game/behaviors/sushi.inc.c | 4 +- .../behaviors/switch_hidden_objects.inc.c | 58 +- src/game/behaviors/swoop.inc.c | 26 +- src/game/behaviors/thi_top.inc.c | 12 +- src/game/behaviors/thwomp.inc.c | 22 +- src/game/behaviors/tower_door.inc.c | 4 +- src/game/behaviors/tower_platform.inc.c | 34 +- src/game/behaviors/tox_box.inc.c | 54 +- src/game/behaviors/treasure_chest.inc.c | 42 +- src/game/behaviors/tree_particles.inc.c | 14 +- src/game/behaviors/triplet_butterfly.inc.c | 22 +- src/game/behaviors/ttc_elevator.inc.c | 2 +- src/game/behaviors/ttc_pendulum.inc.c | 2 +- src/game/behaviors/ttc_pit_block.inc.c | 2 +- src/game/behaviors/ttc_rotating_solid.inc.c | 4 +- src/game/behaviors/ttc_treadmill.inc.c | 4 +- src/game/behaviors/tumbling_bridge.inc.c | 40 +- src/game/behaviors/tuxie.inc.c | 155 +- src/game/behaviors/tweester.inc.c | 38 +- src/game/behaviors/ukiki.inc.c | 118 +- src/game/behaviors/ukiki_cage.inc.c | 22 +- src/game/behaviors/unagi.inc.c | 38 +- .../behaviors/unused_particle_spawn.inc.c | 10 +- .../behaviors/unused_poundable_platform.inc.c | 8 +- src/game/behaviors/walking_penguin.inc.c | 73 - src/game/behaviors/warp.inc.c | 2 +- src/game/behaviors/water_bomb.inc.c | 28 +- src/game/behaviors/water_bomb_cannon.inc.c | 14 +- src/game/behaviors/water_mist_particle.inc.c | 10 +- src/game/behaviors/water_objs.inc.c | 46 +- src/game/behaviors/water_pillar.inc.c | 18 +- src/game/behaviors/water_ring.inc.c | 54 +- src/game/behaviors/water_splash.inc.c | 90 - .../behaviors/water_splashes_and_waves.inc.c | 133 ++ src/game/behaviors/water_wave.inc.c | 1 + src/game/behaviors/wdw_water_level.inc.c | 10 +- src/game/behaviors/whirlpool.inc.c | 14 +- src/game/behaviors/white_puff.inc.c | 10 +- src/game/behaviors/white_puff_explode.inc.c | 12 +- src/game/behaviors/whomp.inc.c | 142 +- src/game/behaviors/wiggler.inc.c | 42 +- src/game/behaviors/wind.inc.c | 12 +- src/game/behaviors/wind_particle.inc.c | 52 - src/game/behaviors/yoshi.inc.c | 26 +- src/game/camera.c | 29 +- src/game/camera.h | 4 +- src/game/crash_screen.c | 2 +- src/game/debug.c | 14 +- src/game/debug.h | 2 +- src/game/display.c | 6 +- src/game/display.h | 6 +- src/game/envfx_bubbles.c | 35 +- src/game/envfx_snow.c | 36 +- src/game/game.c | 6 +- src/game/ingame_menu.c | 54 +- src/game/interaction.c | 177 +- src/game/interaction.h | 4 +- src/game/level_geo.c | 2 +- src/game/level_geo.h | 2 +- src/game/level_update.c | 72 +- src/game/level_update.h | 4 +- src/game/macro_special_objects.c | 2 +- src/game/main.c | 48 +- src/game/main.h | 2 +- src/game/mario.c | 18 +- src/game/mario_actions_airborne.c | 22 +- src/game/mario_actions_automatic.c | 12 +- src/game/mario_actions_cutscene.c | 54 +- src/game/mario_actions_cutscene.h | 4 +- src/game/mario_actions_moving.c | 74 +- src/game/mario_actions_moving.h | 2 +- src/game/mario_actions_object.c | 2 +- src/game/mario_actions_stationary.c | 112 +- src/game/mario_actions_stationary.h | 22 +- src/game/mario_actions_submerged.c | 36 +- src/game/mario_misc.c | 46 +- src/game/mario_misc.h | 8 +- src/game/mario_step.c | 10 +- src/game/mario_step.h | 4 +- src/game/memory.c | 4 +- src/game/memory.h | 4 +- src/game/obj_behaviors.c | 8 +- src/game/obj_behaviors.h | 142 +- src/game/obj_behaviors_2.c | 80 +- src/game/object_collision.c | 64 +- src/game/object_collision.h | 16 +- src/game/object_helpers.c | 709 ++++---- src/game/object_helpers.h | 256 +-- src/game/object_helpers2.h | 96 +- src/game/object_list_processor.c | 44 +- src/game/paintings.c | 1502 ++++++++++------- src/game/paintings.h | 162 +- src/game/save_file.c | 4 +- src/game/save_file.h | 8 +- src/game/segment2.h | 4 +- src/game/sound_init.c | 19 +- src/game/sound_init.h | 14 +- src/game/spawn_object.c | 2 +- src/game/spawn_sound.c | 15 +- src/game/spawn_sound.h | 4 +- src/menu/file_select.c | 274 +-- src/menu/file_select.h | 6 - src/menu/level_select_menu.c | 2 +- src/menu/star_select.c | 38 +- tools/apply_patch.sh | 0 tools/create_patch.sh | 0 tools/ido5.3_compiler/usr/lib/acpp | Bin 0 -> 93440 bytes tools/ido5.3_compiler/usr/lib/copt | Bin 0 -> 3597360 bytes tools/patch_libmalloc.py | 0 tools/revert_patch.sh | 0 undefined_syms.txt | 4 + 414 files changed, 7706 insertions(+), 10210 deletions(-) create mode 100644 actors/water_wave/geo.inc.c rename actors/{water_waves => water_wave}/model.inc.c (58%) delete mode 100644 actors/water_waves/geo.inc.c delete mode 100644 asm/non_matchings/alloc_bank_or_seq.s delete mode 100644 asm/non_matchings/eu/append_bubble_vertex_buffer.s delete mode 100644 asm/non_matchings/eu/append_snowflake_vertex_buffer.s delete mode 100644 asm/non_matchings/eu/audio/alloc_bank_or_seq.s delete mode 100644 asm/non_matchings/eu/audio/func_eu_802e00d8.s delete mode 100644 asm/non_matchings/eu/audio/note_apply_headset_pan_effects.s delete mode 100644 asm/non_matchings/eu/audio/prepare_reverb_ring_buffer.s delete mode 100644 asm/non_matchings/eu/audio/sequence_channel_enable.s delete mode 100644 asm/non_matchings/eu/audio/sequence_player_process_sequence.s delete mode 100644 asm/non_matchings/eu/audio/synthesis_do_one_audio_update.s delete mode 100644 asm/non_matchings/eu/audio/synthesis_execute.s delete mode 100644 asm/non_matchings/eu/audio/synthesis_resample_and_mix_reverb.s delete mode 100644 asm/non_matchings/eu/handle_dialog_text_and_pages.s delete mode 100644 asm/non_matchings/eu/libultra_unk_802aeeb0.s delete mode 100644 asm/non_matchings/eu/libultra_unk_802aef80.s delete mode 100644 asm/non_matchings/eu/play_sequence.s delete mode 100644 asm/non_matchings/eu/player_performed_grab_escape_action.s mode change 100644 => 100755 diff.py rename {src/game => include}/eu_translation.h (77%) create mode 100644 sm64.sh.sha1 rename src/audio/{memory.c => heap.c} (87%) rename src/audio/{memory.h => heap.h} (94%) create mode 100644 src/game/behaviors/sl_snowman_wind.inc.c create mode 100644 src/game/behaviors/sl_walking_penguin.inc.c delete mode 100644 src/game/behaviors/snowman_wind.inc.c create mode 100644 src/game/behaviors/strong_wind_particle.inc.c delete mode 100644 src/game/behaviors/walking_penguin.inc.c delete mode 100644 src/game/behaviors/water_splash.inc.c create mode 100644 src/game/behaviors/water_splashes_and_waves.inc.c delete mode 100644 src/game/behaviors/wind_particle.inc.c mode change 100644 => 100755 tools/apply_patch.sh mode change 100644 => 100755 tools/create_patch.sh create mode 100755 tools/ido5.3_compiler/usr/lib/acpp create mode 100755 tools/ido5.3_compiler/usr/lib/copt mode change 100644 => 100755 tools/patch_libmalloc.py mode change 100644 => 100755 tools/revert_patch.sh diff --git a/CHANGES b/CHANGES index 939b7cb..b0bad03 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,43 @@ +Refresh #7 +1.) update README.md (#861) +2.) [eu] fix decompilation bugs in synthesis_process_note (#862) +3.) Label and document Snufit.inc.c (#863) +4.) Label and document Snufit.inc.c (#863) +5.) Match append_bubble_vertex_buffer, append_snowflake_vertex_buffer (#860) +6.) Compile audio/effects.c with -sopt (#870) +7.) Match handle_dialog_text_and_pages (#872) +8.) Remove improperly used LEVEL_SA define. (#875) +9.) Remove unused EU ASM files (#873) +10.) Shindou build flag support (#876) +11.) The Big Function PR (Part 1) (#864) +12.) "Re-document" file_select and star_select for EU (#877) +13.) Document paintings.c (#868) +14.) Minor interaction.c labelling/documentation. (#882) +15.) Match synthesis_execute, prepare_reverb_ring_buffer, func_eu_802e00d8 (#886) +16.) The Big Function PR (Part 2) (#874) +17.) Additional painting documentation (#883) +18.) Some EU audio labelling (#885) +19.) Bring synthesis_do_one_audio_update a bit closer to matching (#887) +20.) Misleading comment, this actually contols Bowser's init action (#889) +21.) Match synthesis_do_one_audio_update (#890) +22.) Remove unneeded if(1) in synthesis_do_one_audio_update (#891) +23.) Match synthesis_resample_and_mix_reverb (#893) +24.) Set LANG=C (#896) +25.) Match note_apply_headset_pan_effects (#897) +26.) Match play_sequence (#898) +27.) Match sequence_channel_enable (#899) +28.) Match sequence_player_process_sequence (#900) +29.) Match (eu) alloc_bank_or_seq (#901) +30.) Match alloc_bank_or_seq (#903) +31.) Update README.md (again) +32.) Documented behaviour/fish.inc.c & blue_fish.inc.c (#894) +33.) Labelled 4 behavior files, made object_helper functions consistent (#881) +34.) Add a make target for .copt (#902) +35.) The Big Function PR (Part 3) (#888) +36.) The Big Function PR (Part 4) (#906) +37.) Rename src/audio/memory.c -> heap.c (#907) +38.) Fix BBH texture (#908) + Refresh #6 1.) Make tools work on MinGW (#804) 2.) Document mario_misc (#628) diff --git a/Makefile b/Makefile index dfe087e..8bd1bd9 100644 --- a/Makefile +++ b/Makefile @@ -42,11 +42,22 @@ ifeq ($(VERSION),eu) GRUCODE_CFLAGS := -DF3D_NEW GRUCODE_ASFLAGS := --defsym F3D_NEW=1 TARGET := sm64.eu +else +ifeq ($(VERSION),sh) + $(warning Building SH is experimental and is prone to breaking. Try at your own risk.) + VERSION_CFLAGS := -DVERSION_SH + VERSION_ASFLAGS := --defsym VERSION_SH=1 + GRUCODE_CFLAGS := -DF3D_NEW + GRUCODE_ASFLAGS := --defsym F3D_NEW=1 + TARGET := sm64.sh +# TODO: GET RID OF THIS!!! We should mandate assets for Shindou like EU but we dont have the addresses extracted yet so we'll just pretend you have everything extracted for now. + NOEXTRACT := 1 else $(error unknown version "$(VERSION)") endif endif endif +endif # Microcode @@ -147,9 +158,13 @@ MIPSISET := -mips2 -32 ifeq ($(VERSION),eu) OPT_FLAGS := -O2 +else +ifeq ($(VERSION),sh) + OPT_FLAGS := -O2 else OPT_FLAGS := -g endif +endif # File dependencies and variables for specific files include Makefile.split @@ -163,11 +178,20 @@ GODDARD_C_FILES := $(foreach dir,$(GODDARD_SRC_DIRS),$(wildcard $(dir)/*.c)) ULTRA_S_FILES := $(foreach dir,$(ULTRA_ASM_DIRS),$(wildcard $(dir)/*.s)) GENERATED_C_FILES := $(BUILD_DIR)/assets/mario_anim_data.c $(BUILD_DIR)/assets/demo_data.c +ifeq ($(VERSION),sh) +SOUND_BANK_FILES := $(wildcard sound/sound_banks/*.json) +SOUND_SEQUENCE_FILES := $(wildcard sound/sequences/jp/*.m64) \ + $(wildcard sound/sequences/*.m64) \ + $(foreach file,$(wildcard sound/sequences/jp/*.s),$(BUILD_DIR)/$(file:.s=.m64)) \ + $(foreach file,$(wildcard sound/sequences/*.s),$(BUILD_DIR)/$(file:.s=.m64)) +else SOUND_BANK_FILES := $(wildcard sound/sound_banks/*.json) SOUND_SEQUENCE_FILES := $(wildcard sound/sequences/$(VERSION)/*.m64) \ $(wildcard sound/sequences/*.m64) \ $(foreach file,$(wildcard sound/sequences/$(VERSION)/*.s),$(BUILD_DIR)/$(file:.s=.m64)) \ $(foreach file,$(wildcard sound/sequences/*.s),$(BUILD_DIR)/$(file:.s=.m64)) +endif + SOUND_SAMPLE_DIRS := $(wildcard sound/samples/*) SOUND_SAMPLE_AIFFS := $(foreach dir,$(SOUND_SAMPLE_DIRS),$(wildcard $(dir)/*.aiff)) SOUND_SAMPLE_TABLES := $(foreach file,$(SOUND_SAMPLE_AIFFS),$(BUILD_DIR)/$(file:.aiff=.table)) @@ -233,7 +257,7 @@ endif INCLUDE_CFLAGS := -I include -I $(BUILD_DIR) -I $(BUILD_DIR)/include -I src -I . # Check code syntax with host compiler -CC_CHECK := gcc -fsyntax-only -fsigned-char $(CC_CFLAGS) $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) -std=gnu90 -Wall -Wextra -Wno-format-security -DNON_MATCHING -DAVOID_UB $(VERSION_CFLAGS) $(GRUCODE_CFLAGS) +CC_CHECK := gcc -fsyntax-only -fsigned-char $(CC_CFLAGS) $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) -std=gnu90 -Wall -Wextra -Wno-format-security -Wno-main -DNON_MATCHING -DAVOID_UB $(VERSION_CFLAGS) $(GRUCODE_CFLAGS) ASFLAGS := -march=vr4300 -mabi=32 -I include -I $(BUILD_DIR) $(VERSION_ASFLAGS) $(GRUCODE_ASFLAGS) CFLAGS = -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -Xfullwarn -signed $(OPT_FLAGS) $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) $(VERSION_CFLAGS) $(MIPSISET) $(GRUCODE_CFLAGS) @@ -250,6 +274,9 @@ else CC_CHECK += -m32 endif +# Prevent a crash with -sopt +export LANG := C + ####################### Other Tools ######################### # N64 tools @@ -324,12 +351,18 @@ $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/us/define_courses.inc.c $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/de/define_courses.inc.c $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/fr/define_courses.inc.c +else +ifeq ($(VERSION),sh) +TEXT_DIRS := text/jp +$(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/jp/define_text.inc.c + else TEXT_DIRS := text/$(VERSION) # non-EU encoded text inserted into segment 0x02 $(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/$(VERSION)/define_text.inc.c endif +endif $(BUILD_DIR)/text/%/define_courses.inc.c: text/define_courses.inc.c text/%/courses.h $(CPP) $(VERSION_CFLAGS) $< -o $@ -I text/$*/ @@ -422,8 +455,13 @@ $(SOUND_BIN_DIR)/sound_data.ctl: sound/sound_banks/ $(SOUND_BANK_FILES) $(SOUND_ $(SOUND_BIN_DIR)/sound_data.tbl: $(SOUND_BIN_DIR)/sound_data.ctl @true +ifeq ($(VERSION),sh) +$(SOUND_BIN_DIR)/sequences.bin: $(SOUND_BANK_FILES) sound/sequences.json sound/sequences/ sound/sequences/jp/ $(SOUND_SEQUENCE_FILES) $(ENDIAN_BITWIDTH) + $(PYTHON) tools/assemble_sound.py --sequences $@ $(SOUND_BIN_DIR)/bank_sets sound/sound_banks/ sound/sequences.json $(SOUND_SEQUENCE_FILES) $(VERSION_CFLAGS) $$(cat $(ENDIAN_BITWIDTH)) +else $(SOUND_BIN_DIR)/sequences.bin: $(SOUND_BANK_FILES) sound/sequences.json sound/sequences/ sound/sequences/$(VERSION)/ $(SOUND_SEQUENCE_FILES) $(ENDIAN_BITWIDTH) $(PYTHON) tools/assemble_sound.py --sequences $@ $(SOUND_BIN_DIR)/bank_sets sound/sound_banks/ sound/sequences.json $(SOUND_SEQUENCE_FILES) $(VERSION_CFLAGS) $$(cat $(ENDIAN_BITWIDTH)) +endif $(SOUND_BIN_DIR)/bank_sets: $(SOUND_BIN_DIR)/sequences.bin @true @@ -477,6 +515,17 @@ $(BUILD_DIR)/lib/src/sprintf.o: OPT_FLAGS := -O3 $(BUILD_DIR)/src/audio/%.o: OPT_FLAGS := -O2 $(BUILD_DIR)/src/audio/load.o: OPT_FLAGS := -O2 $(BUILD_DIR)/src/audio/external.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 +else + +# The source-to-source optimizer copt is enabled for audio. This makes it use +# acpp, which needs -Wp,-+ to handle C++-style comments. +$(BUILD_DIR)/src/audio/effects.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 -sopt,-inline=sequence_channel_process_sound,-scalaroptimize=1 -Wp,-+ + +# Add a target for build/eu/src/audio/*.copt to make it easier to see debug +$(BUILD_DIR)/src/audio/%.acpp: src/audio/%.c + $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/acpp $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) $(VERSION_CFLAGS) $(GRUCODE_CFLAGS) -D__sgi -+ $< > $@ +$(BUILD_DIR)/src/audio/%.copt: $(BUILD_DIR)/src/audio/%.acpp + $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/copt -signed -I=$< -CMP=$@ -cp=i -scalaroptimize=1 endif ifeq ($(NON_MATCHING),0) diff --git a/Makefile.split b/Makefile.split index 416985c..9619c60 100644 --- a/Makefile.split +++ b/Makefile.split @@ -63,7 +63,7 @@ MOLE_DIRS := monty_mole_hole monty_mole smoke ukiki fwoosh LAKITU_DIRS := lakitu_cameraman toad mips boo_castle PEACH_DIRS := bird peach yoshi BOWSER_DIRS := bowser_flame impact_ring yellow_sphere bowser bomb impact_smoke -MARIO_DIRS := mario bubble walk_smoke burn_smoke stomp_smoke water_waves sparkle water_splash white_particle_small sparkle_animation +MARIO_DIRS := mario bubble walk_smoke burn_smoke stomp_smoke water_wave sparkle water_splash white_particle_small sparkle_animation # Actor Files AMP_CHUCKYA_FILES := $(foreach dir,$(addprefix $(ACTOR_DIR)/,$(AMP_DIRS)),$(patsubst %.png,%.inc.c,$(wildcard $(dir)/*.png))) diff --git a/README.md b/README.md index b053678..6754e1c 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ # Super Mario 64 -This repo contains a full decompilation of Super Mario 64 (J) and (U). +This repo contains a full decompilation of Super Mario 64 (J), (U), and (E). The source and data have been decompiled but complete naming and documentation -all of the code and data is still a work in progress. Decompiling the (E) ROM +all of the code and data is still a work in progress. Decompiling the Shindou ROM is also an ongoing effort. It builds the following ROMs: * sm64.jp.z64 `sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51` * sm64.us.z64 `sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce` +* sm64.eu.z64 `sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9` This repo does not include all assets necessary for compiling the ROMs. A prior copy of the game is required to extract the required assets. diff --git a/actors/boo/geo.inc.c b/actors/boo/geo.inc.c index f8d31ba..4fa9721 100644 --- a/actors/boo/geo.inc.c +++ b/actors/boo/geo.inc.c @@ -4,7 +4,7 @@ const GeoLayout boo_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 26214), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, boo_seg5_dl_0500C1B0), diff --git a/actors/boo_castle/geo.inc.c b/actors/boo_castle/geo.inc.c index 5935234..1b3ee4f 100644 --- a/actors/boo_castle/geo.inc.c +++ b/actors/boo_castle/geo.inc.c @@ -4,7 +4,7 @@ const GeoLayout boo_castle_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 26214), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, boo_castle_seg6_dl_06017CE0), diff --git a/actors/bowser/geo.inc.c b/actors/bowser/geo.inc.c index 08f6133..06d2f13 100644 --- a/actors/bowser/geo.inc.c +++ b/actors/bowser/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout bowser_geo_0000D8[] = { GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06043698), - GEO_ASM(0, Geo18_802B798C), + GEO_ASM(0, geo_update_body_rot_from_parent), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 118, 67, 105, NULL), @@ -135,7 +135,7 @@ const GeoLayout bowser_geo_000424[] = { GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06043698), - GEO_ASM(0, Geo18_802B798C), + GEO_ASM(0, geo_update_body_rot_from_parent), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 118, 67, 105, NULL), @@ -251,7 +251,7 @@ const GeoLayout bowser_geo_000770[] = { GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06043698), - GEO_ASM(0, Geo18_802B798C), + GEO_ASM(0, geo_update_body_rot_from_parent), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 118, 67, 105, NULL), @@ -350,7 +350,7 @@ const GeoLayout bowser_shadow_geo[] = { const GeoLayout bowser_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), #ifdef VERSION_JP GEO_SWITCH_CASE(2, geo_switch_anim_state), #endif @@ -360,20 +360,20 @@ const GeoLayout bowser_geo[] = { GEO_OPEN_NODE(), GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B7D44), + GEO_ASM(0, geo_bits_bowser_coloring), GEO_BRANCH(1, bowser_geo_0000D8), GEO_CLOSE_NODE(), GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B7D44), + GEO_ASM(0, geo_bits_bowser_coloring), GEO_BRANCH(1, bowser_geo_000424), GEO_CLOSE_NODE(), #ifndef VERSION_JP GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B7D44), + GEO_ASM(0, geo_bits_bowser_coloring), GEO_BRANCH(1, bowser_shadow_geo), GEO_CLOSE_NODE(), #endif @@ -387,7 +387,7 @@ const GeoLayout bowser_geo[] = { const GeoLayout bowser2_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), #ifdef VERSION_JP GEO_SWITCH_CASE(2, geo_switch_anim_state), @@ -399,20 +399,20 @@ const GeoLayout bowser2_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B7D44), + GEO_ASM(0, geo_bits_bowser_coloring), GEO_BRANCH(1, bowser_geo_0000D8), GEO_CLOSE_NODE(), GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B7D44), + GEO_ASM(0, geo_bits_bowser_coloring), GEO_BRANCH(1, bowser_geo_000770), GEO_CLOSE_NODE(), #ifndef VERSION_JP GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B7D44), + GEO_ASM(0, geo_bits_bowser_coloring), GEO_BRANCH(1, bowser_shadow_geo), GEO_CLOSE_NODE(), #endif diff --git a/actors/bowser_key/geo.inc.c b/actors/bowser_key/geo.inc.c index 09c6e83..d7e2a85 100644 --- a/actors/bowser_key/geo.inc.c +++ b/actors/bowser_key/geo.inc.c @@ -18,7 +18,7 @@ const GeoLayout bowser_key_cutscene_geo[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802BA2B0), + GEO_ASM(0, geo_scale_bowser_key), GEO_SCALE(0x00, 65536), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_key_dl), diff --git a/actors/chuckya/geo.inc.c b/actors/chuckya/geo.inc.c index 6b9e330..902693c 100644 --- a/actors/chuckya/geo.inc.c +++ b/actors/chuckya/geo.inc.c @@ -99,7 +99,7 @@ const GeoLayout chuckya_geo[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A510), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ASM(0, Geo18_802A719C), + GEO_ASM(0, geo_update_held_mario_pos), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/actors/group0.c b/actors/group0.c index 63e333a..f852e6c 100644 --- a/actors/group0.c +++ b/actors/group0.c @@ -16,7 +16,7 @@ #include "stomp_smoke/model.inc.c" -#include "water_waves/model.inc.c" +#include "water_wave/model.inc.c" #include "sparkle/model.inc.c" diff --git a/actors/group0.h b/actors/group0.h index 744f3d6..44f8b05 100644 --- a/actors/group0.h +++ b/actors/group0.h @@ -283,7 +283,7 @@ extern const Gfx sparkles_animation_seg4_dl_04035348[]; extern const Gfx sparkles_animation_seg4_dl_04035360[]; // stomp_smoke -extern const GeoLayout spot_on_ground_geo[]; +extern const GeoLayout small_water_splash_geo[]; extern const GeoLayout mario_TODO_geo_0000E0[]; extern const Gfx stomp_smoke_seg4_dl_04025148[]; extern const Gfx stomp_smoke_seg4_dl_04025190[]; @@ -326,15 +326,15 @@ extern const Gfx water_splash_seg4_dl_040326D0[]; extern const Gfx water_splash_seg4_dl_040326E8[]; // water_waves -extern const GeoLayout water_waves_surface_geo[]; -extern const GeoLayout water_waves_geo[]; -extern const Gfx water_waves_seg4_dl_04027358[]; -extern const Gfx water_waves_seg4_dl_040273A0[]; -extern const Gfx water_waves_seg4_dl_040273D8[]; -extern const Gfx water_waves_seg4_dl_040273F0[]; -extern const Gfx water_waves_seg4_dl_04027408[]; -extern const Gfx water_waves_seg4_dl_04027420[]; -extern const Gfx water_waves_seg4_dl_04027438[]; +extern const GeoLayout idle_water_wave_geo[]; +extern const GeoLayout wave_trail_geo[]; +extern const Gfx water_wave_seg4_dl_04027358[]; +extern const Gfx water_wave_seg4_dl_040273A0[]; +extern const Gfx water_wave_seg4_dl_040273D8[]; +extern const Gfx water_wave_seg4_dl_040273F0[]; +extern const Gfx water_wave_seg4_dl_04027408[]; +extern const Gfx water_wave_seg4_dl_04027420[]; +extern const Gfx water_wave_seg4_dl_04027438[]; // white_particle_small extern const Gfx white_particle_small_dl_begin[]; diff --git a/actors/group0_geo.c b/actors/group0_geo.c index 181eded..bddefae 100644 --- a/actors/group0_geo.c +++ b/actors/group0_geo.c @@ -11,7 +11,7 @@ #include "walk_smoke/geo.inc.c" #include "burn_smoke/geo.inc.c" #include "stomp_smoke/geo.inc.c" -#include "water_waves/geo.inc.c" +#include "water_wave/geo.inc.c" #include "sparkle/geo.inc.c" #include "water_splash/geo.inc.c" #include "sparkle_animation/geo.inc.c" diff --git a/actors/impact_ring/geo.inc.c b/actors/impact_ring/geo.inc.c index 57182d1..a3a7898 100644 --- a/actors/impact_ring/geo.inc.c +++ b/actors/impact_ring/geo.inc.c @@ -2,7 +2,7 @@ const GeoLayout invisible_bowser_accessory_geo[] = { GEO_CULLING_RADIUS(10000), GEO_OPEN_NODE(), - GEO_ASM(20, Geo18_8029D924), + GEO_ASM(20, geo_update_layer_transparency), GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, impact_ring_seg6_dl_0601EAC0), GEO_CLOSE_NODE(), GEO_END(), diff --git a/actors/impact_smoke/geo.inc.c b/actors/impact_smoke/geo.inc.c index c85288e..d879021 100644 --- a/actors/impact_smoke/geo.inc.c +++ b/actors/impact_smoke/geo.inc.c @@ -2,7 +2,7 @@ const GeoLayout bowser_impact_smoke_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_SWITCH_CASE(5, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062B38), diff --git a/actors/king_bobomb/geo.inc.c b/actors/king_bobomb/geo.inc.c index adc2898..5b7ced6 100644 --- a/actors/king_bobomb/geo.inc.c +++ b/actors/king_bobomb/geo.inc.c @@ -80,7 +80,7 @@ const GeoLayout king_bobomb_geo[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A6C0), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ASM(0, Geo18_802A719C), + GEO_ASM(0, geo_update_held_mario_pos), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/actors/klepto/geo.inc.c b/actors/klepto/geo.inc.c index a1b65aa..0d0bbe3 100644 --- a/actors/klepto/geo.inc.c +++ b/actors/klepto/geo.inc.c @@ -31,7 +31,7 @@ const GeoLayout klepto_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802A45E4), + GEO_ASM(0, geo_offset_klepto_held_object), GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 0, 100, 0, 180, 270, 0, mario_cap_seg3_dl_03022F48), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), @@ -39,9 +39,9 @@ const GeoLayout klepto_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802A45E4), + GEO_ASM(0, geo_offset_klepto_held_object), GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 0, 100, 0, 180, 270, 0, star_seg3_dl_0302B870), - GEO_ASM(0, Geo18_802A45E4), + GEO_ASM(0, geo_offset_klepto_held_object), GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_ALPHA, 0, 100, 0, 180, 270, 0, star_seg3_dl_0302BA18), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), @@ -49,7 +49,7 @@ const GeoLayout klepto_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802A45E4), + GEO_ASM(0, geo_offset_klepto_held_object), GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 0, 100, 0, 180, 270, 0, transparent_star_seg3_dl_0302C620), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/actors/lakitu_enemy/geo.inc.c b/actors/lakitu_enemy/geo.inc.c index df9d34b..93045f6 100644 --- a/actors/lakitu_enemy/geo.inc.c +++ b/actors/lakitu_enemy/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout enemy_lakitu_geo[] = { GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, -72, NULL), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_enemy_seg5_dl_050134A8), - GEO_ASM(0, Geo18_8029D890), + GEO_ASM(0, geo_update_projectile_pos_from_parent), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/actors/mario/geo.inc.c b/actors/mario/geo.inc.c index 06978aa..736d31f 100644 --- a/actors/mario/geo.inc.c +++ b/actors/mario/geo.inc.c @@ -105,7 +105,7 @@ const GeoLayout mario_geo_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_butt), // starts sharing solid color with mario_torso (blue) GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -222,7 +222,7 @@ const GeoLayout mario_geo_medium_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_butt), // starts sharing solid color with mario_torso (blue) GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -389,7 +389,7 @@ const GeoLayout mario_geo_low_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_butt), // starts sharing solid color with mario_torso (blue) GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -560,7 +560,7 @@ const GeoLayout mario_vanish_geo_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -677,7 +677,7 @@ const GeoLayout mario_vanish_geo_medium_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -844,7 +844,7 @@ const GeoLayout mario_vanish_geo_low_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -995,7 +995,7 @@ const GeoLayout mario_metal_geo_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_butt), // starts sharing metal texture with the dls below GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -1112,7 +1112,7 @@ const GeoLayout mario_metal_geo_medium_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_medium_poly_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -1259,7 +1259,7 @@ const GeoLayout mario_metal_geo_low_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_low_poly_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -1410,7 +1410,7 @@ const GeoLayout mario_metal_vanish_geo_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -1527,7 +1527,7 @@ const GeoLayout mario_metal_vanish_geo_medium_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_medium_poly_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), @@ -1677,7 +1677,7 @@ const GeoLayout mario_metal_vanish_geo_low_poly_body[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_low_poly_butt), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B1BB0), + GEO_ASM(0, geo_move_mario_part_from_parent), GEO_ASM(0, geo_mario_tilt_torso), GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), diff --git a/actors/mario_cap/geo.inc.c b/actors/mario_cap/geo.inc.c index 291d035..5e59c31 100644 --- a/actors/mario_cap/geo.inc.c +++ b/actors/mario_cap/geo.inc.c @@ -4,7 +4,7 @@ const GeoLayout marios_cap_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(10, Geo18_8029D924), + GEO_ASM(10, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022F48), @@ -21,7 +21,7 @@ const GeoLayout marios_metal_cap_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(10, Geo18_8029D924), + GEO_ASM(10, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022FF8), @@ -38,7 +38,7 @@ const GeoLayout marios_wing_cap_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(10, Geo18_8029D924), + GEO_ASM(10, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_NODE_START(), @@ -62,7 +62,7 @@ const GeoLayout marios_winged_metal_cap_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(10, Geo18_8029D924), + GEO_ASM(10, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_NODE_START(), diff --git a/actors/mist/geo.inc.c b/actors/mist/geo.inc.c index 6e80921..9330896 100644 --- a/actors/mist/geo.inc.c +++ b/actors/mist/geo.inc.c @@ -2,7 +2,7 @@ const GeoLayout mist_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mist_seg3_dl_03000880), GEO_CLOSE_NODE(), GEO_END(), @@ -12,7 +12,7 @@ const GeoLayout mist_geo[] = { const GeoLayout white_puff_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mist_seg3_dl_03000920), GEO_CLOSE_NODE(), GEO_END(), diff --git a/actors/moneybag/geo.inc.c b/actors/moneybag/geo.inc.c index a7149db..2d1db03 100644 --- a/actors/moneybag/geo.inc.c +++ b/actors/moneybag/geo.inc.c @@ -44,7 +44,7 @@ const GeoLayout moneybag_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_BRANCH(1, moneybag_geo_000000), diff --git a/actors/monty_mole/geo.inc.c b/actors/monty_mole/geo.inc.c index b7942f0..5c76e89 100644 --- a/actors/monty_mole/geo.inc.c +++ b/actors/monty_mole/geo.inc.c @@ -30,7 +30,7 @@ const GeoLayout monty_mole_geo[] = { GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_050039D0), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 0, 0, monty_mole_seg5_dl_05003F50), - GEO_ASM(0, Geo18_8029D890), + GEO_ASM(0, geo_update_projectile_pos_from_parent), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/actors/peach/geo.inc.c b/actors/peach/geo.inc.c index 3e59deb..876bfee 100644 --- a/actors/peach/geo.inc.c +++ b/actors/peach/geo.inc.c @@ -140,7 +140,7 @@ const GeoLayout peach_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(10, Geo18_8029D924), + GEO_ASM(10, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_BRANCH(1, peach_geo_000098), diff --git a/actors/snowman/geo.inc.c b/actors/snowman/geo.inc.c index a08f4dc..2dded75 100644 --- a/actors/snowman/geo.inc.c +++ b/actors/snowman/geo.inc.c @@ -37,7 +37,7 @@ const GeoLayout mr_blizzard_hidden_geo[] = { GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, snowman_seg5_dl_0500C500), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, snowman_seg5_dl_0500CAA8), - GEO_ASM(0, Geo18_8029D890), + GEO_ASM(0, geo_update_projectile_pos_from_parent), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 356, 0, 0, NULL), diff --git a/actors/snufit/geo.inc.c b/actors/snufit/geo.inc.c index f90c92b..a8aabec 100644 --- a/actors/snufit/geo.inc.c +++ b/actors/snufit/geo.inc.c @@ -4,7 +4,7 @@ const GeoLayout snufit_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8030D93C), + GEO_ASM(0, geo_snufit_move_mask), GEO_TRANSLATE_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009748), @@ -14,7 +14,7 @@ const GeoLayout snufit_geo[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009B68), GEO_BILLBOARD(), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8030D9AC), + GEO_ASM(0, geo_snufit_scale_body), GEO_SCALE(0x00, 0), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_ALPHA, snufit_seg6_dl_06009A10), diff --git a/actors/stomp_smoke/geo.inc.c b/actors/stomp_smoke/geo.inc.c index 7cbe382..1fc0a46 100644 --- a/actors/stomp_smoke/geo.inc.c +++ b/actors/stomp_smoke/geo.inc.c @@ -1,7 +1,8 @@ // 0x1700009C -const GeoLayout spot_on_ground_geo[] = { +const GeoLayout small_water_splash_geo[] = { GEO_SWITCH_CASE(6, geo_switch_anim_state), GEO_OPEN_NODE(), + // TODO: Rename these display lists GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040251F8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025210), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025228), diff --git a/actors/sushi/geo.inc.c b/actors/sushi/geo.inc.c index e6219ae..4e40169 100644 --- a/actors/sushi/geo.inc.c +++ b/actors/sushi/geo.inc.c @@ -8,7 +8,7 @@ const GeoLayout sushi_geo[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, sushi_seg5_dl_0500A768), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_802B798C), + GEO_ASM(0, geo_update_body_rot_from_parent), GEO_CLOSE_NODE(), GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 201, 0, 0, sushi_seg5_dl_05009DD0), diff --git a/actors/toad/geo.inc.c b/actors/toad/geo.inc.c index 68de002..fd8af27 100644 --- a/actors/toad/geo.inc.c +++ b/actors/toad/geo.inc.c @@ -126,7 +126,7 @@ const GeoLayout toad_geo[] = { GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_ASM(10, Geo18_8029D924), + GEO_ASM(10, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), GEO_BRANCH(1, toad_geo_000114), diff --git a/actors/water_ring/geo.inc.c b/actors/water_ring/geo.inc.c index 07464e6..3d2b546 100644 --- a/actors/water_ring/geo.inc.c +++ b/actors/water_ring/geo.inc.c @@ -4,7 +4,7 @@ const GeoLayout water_ring_geo[] = { GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, water_ring_seg6_dl_06013AC0), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/actors/water_wave/geo.inc.c b/actors/water_wave/geo.inc.c new file mode 100644 index 0000000..6abbc0d --- /dev/null +++ b/actors/water_wave/geo.inc.c @@ -0,0 +1,29 @@ +// 0x17000124 +const GeoLayout idle_water_wave_geo[] = { + GEO_SWITCH_CASE(6, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_040273F0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027408), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027420), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027438), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027420), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027408), + GEO_CLOSE_NODE(), + GEO_END(), +}; + +// 0x17000168 +const GeoLayout wave_trail_geo[] = { + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_040273F0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027408), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027420), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027438), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027438), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027438), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027438), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_wave_seg4_dl_04027438), + GEO_CLOSE_NODE(), + GEO_END(), +}; diff --git a/actors/water_waves/model.inc.c b/actors/water_wave/model.inc.c similarity index 58% rename from actors/water_waves/model.inc.c rename to actors/water_wave/model.inc.c index e6e48a9..cd5c97c 100644 --- a/actors/water_waves/model.inc.c +++ b/actors/water_wave/model.inc.c @@ -1,7 +1,7 @@ // Water Waves // 0x04025318 -static const Vtx water_waves_seg4_vertex_04025318[] = { +static const Vtx water_wave_seg4_vertex_04025318[] = { {{{ -64, 0, 64}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xc8}}}, {{{ 64, 0, 64}, 0, { 992, 0}, {0xff, 0xff, 0xff, 0xc8}}}, {{{ 64, 0, -64}, 0, { 992, 992}, {0xff, 0xff, 0xff, 0xc8}}}, @@ -9,27 +9,27 @@ static const Vtx water_waves_seg4_vertex_04025318[] = { }; // 0x04025358 -ALIGNED8 static const u8 water_waves_seg4_texture_04025358[] = { -#include "actors/water_waves/water_waves_0.ia16.inc.c" +ALIGNED8 static const u8 water_wave_seg4_texture_04025358[] = { +#include "actors/water_wave/water_wave_0.ia16.inc.c" }; // 0x04025B58 -ALIGNED8 static const u8 water_waves_seg4_texture_04025B58[] = { -#include "actors/water_waves/water_waves_1.ia16.inc.c" +ALIGNED8 static const u8 water_wave_seg4_texture_04025B58[] = { +#include "actors/water_wave/water_wave_1.ia16.inc.c" }; // 0x04026358 -ALIGNED8 static const u8 water_waves_seg4_texture_04026358[] = { -#include "actors/water_waves/water_waves_2.ia16.inc.c" +ALIGNED8 static const u8 water_wave_seg4_texture_04026358[] = { +#include "actors/water_wave/water_wave_2.ia16.inc.c" }; // 0x04026B58 -ALIGNED8 static const u8 water_waves_seg4_texture_04026B58[] = { -#include "actors/water_waves/water_waves_3.ia16.inc.c" +ALIGNED8 static const u8 water_wave_seg4_texture_04026B58[] = { +#include "actors/water_wave/water_wave_3.ia16.inc.c" }; // 0x04027358 - 0x040273A0 -const Gfx water_waves_seg4_dl_04027358[] = { +const Gfx water_wave_seg4_dl_04027358[] = { gsSPClearGeometryMode(G_LIGHTING), gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), @@ -42,7 +42,7 @@ const Gfx water_waves_seg4_dl_04027358[] = { }; // 0x040273A0 - 0x040273D8 -const Gfx water_waves_seg4_dl_040273A0[] = { +const Gfx water_wave_seg4_dl_040273A0[] = { gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), gsDPPipeSync(), gsSPTexture(0x0001, 0x0001, 0, G_TX_RENDERTILE, G_OFF), @@ -52,36 +52,36 @@ const Gfx water_waves_seg4_dl_040273A0[] = { }; // 0x040273D8 - 0x040273F0 -const Gfx water_waves_seg4_dl_040273D8[] = { - gsSPDisplayList(water_waves_seg4_dl_04027358), - gsSPVertex(water_waves_seg4_vertex_04025318, 4, 0), - gsSPBranchList(water_waves_seg4_dl_040273A0), +const Gfx water_wave_seg4_dl_040273D8[] = { + gsSPDisplayList(water_wave_seg4_dl_04027358), + gsSPVertex(water_wave_seg4_vertex_04025318, 4, 0), + gsSPBranchList(water_wave_seg4_dl_040273A0), }; // 0x040273F0 - 0x04027408 -const Gfx water_waves_seg4_dl_040273F0[] = { +const Gfx water_wave_seg4_dl_040273F0[] = { gsDPPipeSync(), - gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_waves_seg4_texture_04025358), - gsSPBranchList(water_waves_seg4_dl_040273D8), + gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_wave_seg4_texture_04025358), + gsSPBranchList(water_wave_seg4_dl_040273D8), }; // 0x04027408 - 0x04027420 -const Gfx water_waves_seg4_dl_04027408[] = { +const Gfx water_wave_seg4_dl_04027408[] = { gsDPPipeSync(), - gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_waves_seg4_texture_04025B58), - gsSPBranchList(water_waves_seg4_dl_040273D8), + gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_wave_seg4_texture_04025B58), + gsSPBranchList(water_wave_seg4_dl_040273D8), }; // 0x04027420 - 0x04027438 -const Gfx water_waves_seg4_dl_04027420[] = { +const Gfx water_wave_seg4_dl_04027420[] = { gsDPPipeSync(), - gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_waves_seg4_texture_04026358), - gsSPBranchList(water_waves_seg4_dl_040273D8), + gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_wave_seg4_texture_04026358), + gsSPBranchList(water_wave_seg4_dl_040273D8), }; // 0x04027438 - 0x04027450 -const Gfx water_waves_seg4_dl_04027438[] = { +const Gfx water_wave_seg4_dl_04027438[] = { gsDPPipeSync(), - gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_waves_seg4_texture_04026B58), - gsSPBranchList(water_waves_seg4_dl_040273D8), + gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, water_wave_seg4_texture_04026B58), + gsSPBranchList(water_wave_seg4_dl_040273D8), }; diff --git a/actors/water_waves/geo.inc.c b/actors/water_waves/geo.inc.c deleted file mode 100644 index 8f0fe14..0000000 --- a/actors/water_waves/geo.inc.c +++ /dev/null @@ -1,29 +0,0 @@ -// 0x17000124 -const GeoLayout water_waves_surface_geo[] = { - GEO_SWITCH_CASE(6, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_040273F0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027408), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027420), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027438), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027420), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027408), - GEO_CLOSE_NODE(), - GEO_END(), -}; - -// 0x17000168 -const GeoLayout water_waves_geo[] = { - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_040273F0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027408), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027420), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027438), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027438), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027438), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027438), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_waves_seg4_dl_04027438), - GEO_CLOSE_NODE(), - GEO_END(), -}; diff --git a/asm/entry.s b/asm/entry.s index bce00c8..755e1b4 100644 --- a/asm/entry.s +++ b/asm/entry.s @@ -8,7 +8,7 @@ .section .text, "ax" -glabel EntryPoint +glabel entry_point lui $t0, %hi(_mainSegmentNoloadStart) # $t0, 0x8034 lui $t1, %lo(_mainSegmentNoloadSizeHi) # lui $t1, 2 addiu $t0, %lo(_mainSegmentNoloadStart) # addiu $t0, $t0, -0x6df0 @@ -19,9 +19,9 @@ glabel EntryPoint sw $zero, 4($t0) bnez $t1, .L80246010 addi $t0, $t0, 8 - lui $t2, %hi(Main) # $t2, 0x8024 + lui $t2, %hi(main_func) # $t2, 0x8024 lui $sp, %hi(gIdleThreadStack) # $sp, 0x8020 - addiu $t2, %lo(Main) # addiu $t2, $t2, 0x6dc4 + addiu $t2, %lo(main_func) # addiu $t2, $t2, 0x6dc4 jr $t2 addiu $sp, %lo(gIdleThreadStack) # addiu $sp, $sp, 0xa00 nop diff --git a/asm/non_matchings/alloc_bank_or_seq.s b/asm/non_matchings/alloc_bank_or_seq.s deleted file mode 100644 index eae8494..0000000 --- a/asm/non_matchings/alloc_bank_or_seq.s +++ /dev/null @@ -1,303 +0,0 @@ -glabel alloc_bank_or_seq -/* 0D13DC 803163DC 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0D13E0 803163E0 AFB00020 */ sw $s0, 0x20($sp) -/* 0D13E4 803163E4 00808025 */ move $s0, $a0 -/* 0D13E8 803163E8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D13EC 803163EC AFA5007C */ sw $a1, 0x7c($sp) -/* 0D13F0 803163F0 14E000CC */ bnez $a3, .L80316724 -/* 0D13F4 803163F4 AFA60080 */ sw $a2, 0x80($sp) -/* 0D13F8 803163F8 3C0E8022 */ lui $t6, %hi(gSeqLoadedPool) # $t6, 0x8022 -/* 0D13FC 803163FC 25CE1328 */ addiu $t6, %lo(gSeqLoadedPool) # addiu $t6, $t6, 0x1328 -/* 0D1400 80316400 148E0006 */ bne $a0, $t6, .L8031641C -/* 0D1404 80316404 26030194 */ addiu $v1, $s0, 0x194 -/* 0D1408 80316408 3C0A8022 */ lui $t2, %hi(gSeqLoadStatus) # $t2, 0x8022 -/* 0D140C 8031640C 254A1910 */ addiu $t2, %lo(gSeqLoadStatus) # addiu $t2, $t2, 0x1910 -/* 0D1410 80316410 AFAA005C */ sw $t2, 0x5c($sp) -/* 0D1414 80316414 10000009 */ b .L8031643C -/* 0D1418 80316418 A3A0005B */ sb $zero, 0x5b($sp) -.L8031641C: -/* 0D141C 8031641C 3C0F8022 */ lui $t7, %hi(gBankLoadedPool) # $t7, 0x8022 -/* 0D1420 80316420 25EF14F8 */ addiu $t7, %lo(gBankLoadedPool) # addiu $t7, $t7, 0x14f8 -/* 0D1424 80316424 160F0005 */ bne $s0, $t7, .L8031643C -/* 0D1428 80316428 3C0A8022 */ lui $t2, %hi(gBankLoadStatus) # $t2, 0x8022 -/* 0D142C 8031642C 254A18D0 */ addiu $t2, %lo(gBankLoadStatus) # addiu $t2, $t2, 0x18d0 -/* 0D1430 80316430 240C0001 */ li $t4, 1 -/* 0D1434 80316434 A3AC005B */ sb $t4, 0x5b($sp) -/* 0D1438 80316438 AFAA005C */ sw $t2, 0x5c($sp) -.L8031643C: -/* 0D143C 8031643C 8C62001C */ lw $v0, 0x1c($v1) -/* 0D1440 80316440 240BFFFF */ li $t3, -1 -/* 0D1444 80316444 8FAA005C */ lw $t2, 0x5c($sp) -/* 0D1448 80316448 15620003 */ bne $t3, $v0, .L80316458 -/* 0D144C 8031644C 93AC005B */ lbu $t4, 0x5b($sp) -/* 0D1450 80316450 10000003 */ b .L80316460 -/* 0D1454 80316454 00003825 */ move $a3, $zero -.L80316458: -/* 0D1458 80316458 004AC021 */ addu $t8, $v0, $t2 -/* 0D145C 8031645C 93070000 */ lbu $a3, ($t8) -.L80316460: -/* 0D1460 80316460 8C620028 */ lw $v0, 0x28($v1) -/* 0D1464 80316464 24090003 */ li $t1, 3 -/* 0D1468 80316468 01274026 */ xor $t0, $t1, $a3 -/* 0D146C 8031646C 15620003 */ bne $t3, $v0, .L8031647C -/* 0D1470 80316470 2D080001 */ sltiu $t0, $t0, 1 -/* 0D1474 80316474 10000003 */ b .L80316484 -/* 0D1478 80316478 00002825 */ move $a1, $zero -.L8031647C: -/* 0D147C 8031647C 004AC821 */ addu $t9, $v0, $t2 -/* 0D1480 80316480 93250000 */ lbu $a1, ($t9) -.L80316484: -/* 0D1484 80316484 0008202B */ sltu $a0, $zero, $t0 -/* 0D1488 80316488 10800005 */ beqz $a0, .L803164A0 -/* 0D148C 8031648C 00E03025 */ move $a2, $a3 -/* 0D1490 80316490 01252026 */ xor $a0, $t1, $a1 -/* 0D1494 80316494 2C840001 */ sltiu $a0, $a0, 1 -/* 0D1498 80316498 0004682B */ sltu $t5, $zero, $a0 -/* 0D149C 8031649C 01A02025 */ move $a0, $t5 -.L803164A0: -/* 0D14A0 803164A0 2CCE0001 */ sltiu $t6, $a2, 1 -/* 0D14A4 803164A4 11C00004 */ beqz $t6, .L803164B8 -/* 0D14A8 803164A8 2CAF0001 */ sltiu $t7, $a1, 1 -/* 0D14AC 803164AC AC600000 */ sw $zero, ($v1) -/* 0D14B0 803164B0 10000020 */ b .L80316534 -/* 0D14B4 803164B4 24080001 */ li $t0, 1 -.L803164B8: -/* 0D14B8 803164B8 11E00005 */ beqz $t7, .L803164D0 -/* 0D14BC 803164BC 00A01025 */ move $v0, $a1 -/* 0D14C0 803164C0 24180001 */ li $t8, 1 -/* 0D14C4 803164C4 AC780000 */ sw $t8, ($v1) -/* 0D14C8 803164C8 1000001A */ b .L80316534 -/* 0D14CC 803164CC 24080001 */ li $t0, 1 -.L803164D0: -/* 0D14D0 803164D0 10800003 */ beqz $a0, .L803164E0 -/* 0D14D4 803164D4 00000000 */ nop -/* 0D14D8 803164D8 10000016 */ b .L80316534 -/* 0D14DC 803164DC 24080001 */ li $t0, 1 -.L803164E0: -/* 0D14E0 803164E0 11000004 */ beqz $t0, .L803164F4 -/* 0D14E4 803164E4 00000000 */ nop -/* 0D14E8 803164E8 AC600000 */ sw $zero, ($v1) -/* 0D14EC 803164EC 10000011 */ b .L80316534 -/* 0D14F0 803164F0 24080001 */ li $t0, 1 -.L803164F4: -/* 0D14F4 803164F4 15220005 */ bne $t1, $v0, .L8031650C -/* 0D14F8 803164F8 24080001 */ li $t0, 1 -/* 0D14FC 803164FC 240D0001 */ li $t5, 1 -/* 0D1500 80316500 AC6D0000 */ sw $t5, ($v1) -/* 0D1504 80316504 1000000B */ b .L80316534 -/* 0D1508 80316508 24080001 */ li $t0, 1 -.L8031650C: -/* 0D150C 8031650C 11060003 */ beq $t0, $a2, .L8031651C -/* 0D1510 80316510 00000000 */ nop -/* 0D1514 80316514 10000007 */ b .L80316534 -/* 0D1518 80316518 AC600000 */ sw $zero, ($v1) -.L8031651C: -/* 0D151C 8031651C 11020003 */ beq $t0, $v0, .L8031652C -/* 0D1520 80316520 24180001 */ li $t8, 1 -/* 0D1524 80316524 10000003 */ b .L80316534 -/* 0D1528 80316528 AC780000 */ sw $t8, ($v1) -.L8031652C: -/* 0D152C 8031652C 100000B2 */ b .L803167F8 -/* 0D1530 80316530 00001025 */ move $v0, $zero -.L80316534: -/* 0D1534 80316534 8C790000 */ lw $t9, ($v1) -/* 0D1538 80316538 2405000C */ li $a1, 12 -/* 0D153C 8031653C 03250019 */ multu $t9, $a1 -/* 0D1540 80316540 00006812 */ mflo $t5 -/* 0D1544 80316544 006D7021 */ addu $t6, $v1, $t5 -/* 0D1548 80316548 8DC2001C */ lw $v0, 0x1c($t6) -/* 0D154C 8031654C 11620010 */ beq $t3, $v0, .L80316590 -/* 0D1550 80316550 01427821 */ addu $t7, $t2, $v0 -/* 0D1554 80316554 150C000E */ bne $t0, $t4, .L80316590 -/* 0D1558 80316558 A1E00000 */ sb $zero, ($t7) -/* 0D155C 8031655C 8C780000 */ lw $t8, ($v1) -/* 0D1560 80316560 03050019 */ multu $t8, $a1 -/* 0D1564 80316564 0000C812 */ mflo $t9 -/* 0D1568 80316568 00796821 */ addu $t5, $v1, $t9 -/* 0D156C 8031656C 8DA4001C */ lw $a0, 0x1c($t5) -/* 0D1570 80316570 A3AC005B */ sb $t4, 0x5b($sp) -/* 0D1574 80316574 AFAA005C */ sw $t2, 0x5c($sp) -/* 0D1578 80316578 0C0C57A9 */ jal discard_bank -/* 0D157C 8031657C AFA30030 */ sw $v1, 0x30($sp) -/* 0D1580 80316580 8FA30030 */ lw $v1, 0x30($sp) -/* 0D1584 80316584 24080001 */ li $t0, 1 -/* 0D1588 80316588 8FAA005C */ lw $t2, 0x5c($sp) -/* 0D158C 8031658C 93AC005B */ lbu $t4, 0x5b($sp) -.L80316590: -/* 0D1590 80316590 8C640000 */ lw $a0, ($v1) -/* 0D1594 80316594 24010001 */ li $at, 1 -/* 0D1598 80316598 26050198 */ addiu $a1, $s0, 0x198 -/* 0D159C 8031659C 50800006 */ beql $a0, $zero, .L803165B8 -/* 0D15A0 803165A0 8CAE0000 */ lw $t6, ($a1) -/* 0D15A4 803165A4 10810032 */ beq $a0, $at, .L80316670 -/* 0D15A8 803165A8 26050198 */ addiu $a1, $s0, 0x198 -/* 0D15AC 803165AC 10000092 */ b .L803167F8 -/* 0D15B0 803165B0 00001025 */ move $v0, $zero -/* 0D15B4 803165B4 8CAE0000 */ lw $t6, ($a1) -.L803165B8: -/* 0D15B8 803165B8 AC6E0014 */ sw $t6, 0x14($v1) -/* 0D15BC 803165BC 8FAF0088 */ lw $t7, 0x88($sp) -/* 0D15C0 803165C0 AC6F001C */ sw $t7, 0x1c($v1) -/* 0D15C4 803165C4 8FB80080 */ lw $t8, 0x80($sp) -/* 0D15C8 803165C8 AC780018 */ sw $t8, 0x18($v1) -/* 0D15CC 803165CC 8FAD0080 */ lw $t5, 0x80($sp) -/* 0D15D0 803165D0 8CB90000 */ lw $t9, ($a1) -/* 0D15D4 803165D4 032D1021 */ addu $v0, $t9, $t5 -/* 0D15D8 803165D8 ACA20004 */ sw $v0, 4($a1) -/* 0D15DC 803165DC 8C6E0020 */ lw $t6, 0x20($v1) -/* 0D15E0 803165E0 01C2082B */ sltu $at, $t6, $v0 -/* 0D15E4 803165E4 5020001D */ beql $at, $zero, .L8031665C -/* 0D15E8 803165E8 8C640014 */ lw $a0, 0x14($v1) -/* 0D15EC 803165EC 8C6F0028 */ lw $t7, 0x28($v1) -/* 0D15F0 803165F0 014FC021 */ addu $t8, $t2, $t7 -/* 0D15F4 803165F4 11800005 */ beqz $t4, .L8031660C -/* 0D15F8 803165F8 A3000000 */ sb $zero, ($t8) -/* 0D15FC 803165FC 5188000B */ beql $t4, $t0, .L8031662C -/* 0D1600 80316600 8C640028 */ lw $a0, 0x28($v1) -/* 0D1604 80316604 1000000F */ b .L80316644 -/* 0D1608 80316608 2419FFFF */ li $t9, -1 -.L8031660C: -/* 0D160C 8031660C 8C640028 */ lw $a0, 0x28($v1) -/* 0D1610 80316610 AFA5002C */ sw $a1, 0x2c($sp) -/* 0D1614 80316614 0C0C57E5 */ jal discard_sequence -/* 0D1618 80316618 AFA30030 */ sw $v1, 0x30($sp) -/* 0D161C 8031661C 8FA30030 */ lw $v1, 0x30($sp) -/* 0D1620 80316620 10000007 */ b .L80316640 -/* 0D1624 80316624 8FA5002C */ lw $a1, 0x2c($sp) -/* 0D1628 80316628 8C640028 */ lw $a0, 0x28($v1) -.L8031662C: -/* 0D162C 8031662C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D1630 80316630 0C0C57A9 */ jal discard_bank -/* 0D1634 80316634 AFA30030 */ sw $v1, 0x30($sp) -/* 0D1638 80316638 8FA30030 */ lw $v1, 0x30($sp) -/* 0D163C 8031663C 8FA5002C */ lw $a1, 0x2c($sp) -.L80316640: -/* 0D1640 80316640 2419FFFF */ li $t9, -1 -.L80316644: -/* 0D1644 80316644 AC790028 */ sw $t9, 0x28($v1) -/* 0D1648 80316648 8CAE0000 */ lw $t6, ($a1) -/* 0D164C 8031664C 8CAD0008 */ lw $t5, 8($a1) -/* 0D1650 80316650 01AE7821 */ addu $t7, $t5, $t6 -/* 0D1654 80316654 AC6F0020 */ sw $t7, 0x20($v1) -/* 0D1658 80316658 8C640014 */ lw $a0, 0x14($v1) -.L8031665C: -/* 0D165C 8031665C 8C780000 */ lw $t8, ($v1) -/* 0D1660 80316660 00801025 */ move $v0, $a0 -/* 0D1664 80316664 3B190001 */ xori $t9, $t8, 1 -/* 0D1668 80316668 10000063 */ b .L803167F8 -/* 0D166C 8031666C AC790000 */ sw $t9, ($v1) -.L80316670: -/* 0D1670 80316670 8CAD0008 */ lw $t5, 8($a1) -/* 0D1674 80316674 8CAE0000 */ lw $t6, ($a1) -/* 0D1678 80316678 8FB80080 */ lw $t8, 0x80($sp) -/* 0D167C 8031667C 01AE7821 */ addu $t7, $t5, $t6 -/* 0D1680 80316680 01F8C823 */ subu $t9, $t7, $t8 -/* 0D1684 80316684 2722FFF0 */ addiu $v0, $t9, -0x10 -/* 0D1688 80316688 AC620020 */ sw $v0, 0x20($v1) -/* 0D168C 8031668C 8FAE0088 */ lw $t6, 0x88($sp) -/* 0D1690 80316690 AC6E0028 */ sw $t6, 0x28($v1) -/* 0D1694 80316694 8FAF0080 */ lw $t7, 0x80($sp) -/* 0D1698 80316698 AC6F0024 */ sw $t7, 0x24($v1) -/* 0D169C 8031669C 8CB80004 */ lw $t8, 4($a1) -/* 0D16A0 803166A0 0058082B */ sltu $at, $v0, $t8 -/* 0D16A4 803166A4 1020001B */ beqz $at, .L80316714 -/* 0D16A8 803166A8 00000000 */ nop -/* 0D16AC 803166AC 8C79001C */ lw $t9, 0x1c($v1) -/* 0D16B0 803166B0 01596821 */ addu $t5, $t2, $t9 -/* 0D16B4 803166B4 11800005 */ beqz $t4, .L803166CC -/* 0D16B8 803166B8 A1A00000 */ sb $zero, ($t5) -/* 0D16BC 803166BC 5188000B */ beql $t4, $t0, .L803166EC -/* 0D16C0 803166C0 8C64001C */ lw $a0, 0x1c($v1) -/* 0D16C4 803166C4 1000000F */ b .L80316704 -/* 0D16C8 803166C8 240EFFFF */ li $t6, -1 -.L803166CC: -/* 0D16CC 803166CC 8C64001C */ lw $a0, 0x1c($v1) -/* 0D16D0 803166D0 AFA5002C */ sw $a1, 0x2c($sp) -/* 0D16D4 803166D4 0C0C57E5 */ jal discard_sequence -/* 0D16D8 803166D8 AFA30030 */ sw $v1, 0x30($sp) -/* 0D16DC 803166DC 8FA30030 */ lw $v1, 0x30($sp) -/* 0D16E0 803166E0 10000007 */ b .L80316700 -/* 0D16E4 803166E4 8FA5002C */ lw $a1, 0x2c($sp) -/* 0D16E8 803166E8 8C64001C */ lw $a0, 0x1c($v1) -.L803166EC: -/* 0D16EC 803166EC AFA5002C */ sw $a1, 0x2c($sp) -/* 0D16F0 803166F0 0C0C57A9 */ jal discard_bank -/* 0D16F4 803166F4 AFA30030 */ sw $v1, 0x30($sp) -/* 0D16F8 803166F8 8FA30030 */ lw $v1, 0x30($sp) -/* 0D16FC 803166FC 8FA5002C */ lw $a1, 0x2c($sp) -.L80316700: -/* 0D1700 80316700 240EFFFF */ li $t6, -1 -.L80316704: -/* 0D1704 80316704 AC6E001C */ sw $t6, 0x1c($v1) -/* 0D1708 80316708 8CAF0000 */ lw $t7, ($a1) -/* 0D170C 8031670C ACAF0004 */ sw $t7, 4($a1) -/* 0D1710 80316710 8C620020 */ lw $v0, 0x20($v1) -.L80316714: -/* 0D1714 80316714 1000FFD1 */ b .L8031665C -/* 0D1718 80316718 00402025 */ move $a0, $v0 -/* 0D171C 8031671C 10000036 */ b .L803167F8 -/* 0D1720 80316720 00001025 */ move $v0, $zero -.L80316724: -/* 0D1724 80316724 8FB8007C */ lw $t8, 0x7c($sp) -/* 0D1728 80316728 8FB90080 */ lw $t9, 0x80($sp) -/* 0D172C 8031672C 26040004 */ addiu $a0, $s0, 4 -/* 0D1730 80316730 AFA70084 */ sw $a3, 0x84($sp) -/* 0D1734 80316734 03190019 */ multu $t8, $t9 -/* 0D1738 80316738 00002812 */ mflo $a1 -/* 0D173C 8031673C 0C0C5808 */ jal soundAlloc -/* 0D1740 80316740 00000000 */ nop -/* 0D1744 80316744 8E0D0000 */ lw $t5, ($s0) -/* 0D1748 80316748 2405000C */ li $a1, 12 -/* 0D174C 8031674C 8FA70084 */ lw $a3, 0x84($sp) -/* 0D1750 80316750 01A50019 */ multu $t5, $a1 -/* 0D1754 80316754 24080001 */ li $t0, 1 -/* 0D1758 80316758 00007012 */ mflo $t6 -/* 0D175C 8031675C 020E7821 */ addu $t7, $s0, $t6 -/* 0D1760 80316760 ADE20014 */ sw $v0, 0x14($t7) -/* 0D1764 80316764 8E180000 */ lw $t8, ($s0) -/* 0D1768 80316768 8FAF0088 */ lw $t7, 0x88($sp) -/* 0D176C 8031676C 03050019 */ multu $t8, $a1 -/* 0D1770 80316770 0000C812 */ mflo $t9 -/* 0D1774 80316774 02191821 */ addu $v1, $s0, $t9 -/* 0D1778 80316778 8C6D0014 */ lw $t5, 0x14($v1) -/* 0D177C 8031677C 55A00010 */ bnezl $t5, .L803167C0 -/* 0D1780 80316780 AC6F001C */ sw $t7, 0x1c($v1) -/* 0D1784 80316784 10E8000B */ beq $a3, $t0, .L803167B4 -/* 0D1788 80316788 24010002 */ li $at, 2 -/* 0D178C 8031678C 14E1000B */ bne $a3, $at, .L803167BC -/* 0D1790 80316790 02002025 */ move $a0, $s0 -/* 0D1794 80316794 8FAE0088 */ lw $t6, 0x88($sp) -/* 0D1798 80316798 8FA5007C */ lw $a1, 0x7c($sp) -/* 0D179C 8031679C 8FA60080 */ lw $a2, 0x80($sp) -/* 0D17A0 803167A0 00003825 */ move $a3, $zero -/* 0D17A4 803167A4 0C0C58F7 */ jal alloc_bank_or_seq -/* 0D17A8 803167A8 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D17AC 803167AC 10000013 */ b .L803167FC -/* 0D17B0 803167B0 8FBF0024 */ lw $ra, 0x24($sp) -.L803167B4: -/* 0D17B4 803167B4 10000010 */ b .L803167F8 -/* 0D17B8 803167B8 00001025 */ move $v0, $zero -.L803167BC: -/* 0D17BC 803167BC AC6F001C */ sw $t7, 0x1c($v1) -.L803167C0: -/* 0D17C0 803167C0 8E190000 */ lw $t9, ($s0) -/* 0D17C4 803167C4 8FB80080 */ lw $t8, 0x80($sp) -/* 0D17C8 803167C8 03250019 */ multu $t9, $a1 -/* 0D17CC 803167CC 00006812 */ mflo $t5 -/* 0D17D0 803167D0 020D7021 */ addu $t6, $s0, $t5 -/* 0D17D4 803167D4 ADD80018 */ sw $t8, 0x18($t6) -/* 0D17D8 803167D8 8E0F0000 */ lw $t7, ($s0) -/* 0D17DC 803167DC 25F90001 */ addiu $t9, $t7, 1 -/* 0D17E0 803167E0 0019C080 */ sll $t8, $t9, 2 -/* 0D17E4 803167E4 0319C023 */ subu $t8, $t8, $t9 -/* 0D17E8 803167E8 0018C080 */ sll $t8, $t8, 2 -/* 0D17EC 803167EC 02187021 */ addu $t6, $s0, $t8 -/* 0D17F0 803167F0 AE190000 */ sw $t9, ($s0) -/* 0D17F4 803167F4 8DC20008 */ lw $v0, 8($t6) -.L803167F8: -/* 0D17F8 803167F8 8FBF0024 */ lw $ra, 0x24($sp) -.L803167FC: -/* 0D17FC 803167FC 8FB00020 */ lw $s0, 0x20($sp) -/* 0D1800 80316800 27BD0078 */ addiu $sp, $sp, 0x78 -/* 0D1804 80316804 03E00008 */ jr $ra -/* 0D1808 80316808 00000000 */ nop diff --git a/asm/non_matchings/eu/append_bubble_vertex_buffer.s b/asm/non_matchings/eu/append_bubble_vertex_buffer.s deleted file mode 100644 index be164e8..0000000 --- a/asm/non_matchings/eu/append_bubble_vertex_buffer.s +++ /dev/null @@ -1,151 +0,0 @@ -.text -glabel append_bubble_vertex_buffer -/* 0759E8 802B61E8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0759EC 802B61EC AFBF002C */ sw $ra, 0x2c($sp) -/* 0759F0 802B61F0 AFB40028 */ sw $s4, 0x28($sp) -/* 0759F4 802B61F4 AFB1001C */ sw $s1, 0x1c($sp) -/* 0759F8 802B61F8 AFB00018 */ sw $s0, 0x18($sp) -/* 0759FC 802B61FC AFA40030 */ sw $a0, 0x30($sp) -/* 075A00 802B6200 00C08025 */ move $s0, $a2 -/* 075A04 802B6204 00E08825 */ move $s1, $a3 -/* 075A08 802B6208 00A0A025 */ move $s4, $a1 -/* 075A0C 802B620C AFB30024 */ sw $s3, 0x24($sp) -/* 075A10 802B6210 AFB20020 */ sw $s2, 0x20($sp) -# Vtx *vertBuf = (Vtx *)alloc_display_list(15 * sizeof(Vtx)); -/* 075A14 802B6214 0C09A781 */ jal alloc_display_list -/* 075A18 802B6218 240400F0 */ li $a0, 240 -/* 075A1C 802B621C 10400078 */ beqz $v0, .L802B6400 -/* 075A20 802B6220 8FAB0044 */ lw $t3, 0x44($sp) -/* 075A24 802B6224 3C058033 */ lui $a1, %hi(gEnvFxBuffer) # $a1, 0x8033 -/* 075A28 802B6228 24A5F6B0 */ addiu $a1, %lo(gEnvFxBuffer) # addiu $a1, $a1, -0x950 -/* 075A2C 802B622C 00003025 */ move $a2, $zero -/* 075A30 802B6230 256C0010 */ addiu $t4, $t3, 0x10 -/* 075A34 802B6234 256D0020 */ addiu $t5, $t3, 0x20 -/* 075A38 802B6238 00403825 */ move $a3, $v0 -/* 075A3C 802B623C 24480020 */ addiu $t0, $v0, 0x20 -/* 075A40 802B6240 24490010 */ addiu $t1, $v0, 0x10 -/* 075A44 802B6244 2413000F */ li $s3, 15 -/* 075A48 802B6248 24120038 */ li $s2, 56 -/* 075A4C 802B624C 241F0003 */ li $ra, 3 -/* 075A50 802B6250 8FAA0040 */ lw $t2, 0x40($sp) -# for (i = 0; i < 15; i += 3) { -.L802B6254: -/* 075A54 802B6254 00DF001A */ div $zero, $a2, $ra -/* 075A58 802B6258 8D610000 */ lw $at, ($t3) -/* 075A5C 802B625C 0000C812 */ mflo $t9 -/* 075A60 802B6260 02997021 */ addu $t6, $s4, $t9 -/* 075A64 802B6264 ACE10000 */ sw $at, ($a3) -/* 075A68 802B6268 8D6F0004 */ lw $t7, 4($t3) -/* 075A6C 802B626C 01D20019 */ multu $t6, $s2 -/* 075A70 802B6270 0006C100 */ sll $t8, $a2, 4 -/* 075A74 802B6274 ACEF0004 */ sw $t7, 4($a3) -/* 075A78 802B6278 8D610008 */ lw $at, 8($t3) -/* 075A7C 802B627C 00582021 */ addu $a0, $v0, $t8 -/* 075A80 802B6280 24E70030 */ addiu $a3, $a3, 0x30 -/* 075A84 802B6284 ACE1FFD8 */ sw $at, -0x28($a3) -/* 075A88 802B6288 8D6F000C */ lw $t7, 0xc($t3) -/* 075A8C 802B628C 25080030 */ addiu $t0, $t0, 0x30 -/* 075A90 802B6290 25290030 */ addiu $t1, $t1, 0x30 -/* 075A94 802B6294 ACEFFFDC */ sw $t7, -0x24($a3) -/* 075A98 802B6298 8CB80000 */ lw $t8, ($a1) -/* 075A9C 802B629C 00001812 */ mflo $v1 -/* 075AA0 802B62A0 860F0000 */ lh $t7, ($s0) -/* 075AA4 802B62A4 0303C821 */ addu $t9, $t8, $v1 -/* 075AA8 802B62A8 8F2E0004 */ lw $t6, 4($t9) -/* 075AAC 802B62AC 17E00002 */ bnez $ra, .L802B62B8 -/* 075AB0 802B62B0 00000000 */ nop -/* 075AB4 802B62B4 0007000D */ break 7 -.L802B62B8: -/* 075AB8 802B62B8 2401FFFF */ li $at, -1 -/* 075ABC 802B62BC 17E10004 */ bne $ra, $at, .L802B62D0 -/* 075AC0 802B62C0 3C018000 */ lui $at, 0x8000 -/* 075AC4 802B62C4 14C10002 */ bne $a2, $at, .L802B62D0 -/* 075AC8 802B62C8 00000000 */ nop -/* 075ACC 802B62CC 0006000D */ break 6 -.L802B62D0: -/* 075AD0 802B62D0 01EEC021 */ addu $t8, $t7, $t6 -/* 075AD4 802B62D4 A4980000 */ sh $t8, ($a0) -/* 075AD8 802B62D8 8CAF0000 */ lw $t7, ($a1) -/* 075ADC 802B62DC 86190002 */ lh $t9, 2($s0) -/* 075AE0 802B62E0 24C60003 */ addiu $a2, $a2, 3 -/* 075AE4 802B62E4 01E37021 */ addu $t6, $t7, $v1 -/* 075AE8 802B62E8 8DD80008 */ lw $t8, 8($t6) -/* 075AEC 802B62EC 03387821 */ addu $t7, $t9, $t8 -/* 075AF0 802B62F0 A48F0002 */ sh $t7, 2($a0) -/* 075AF4 802B62F4 8CB90000 */ lw $t9, ($a1) -/* 075AF8 802B62F8 860E0004 */ lh $t6, 4($s0) -/* 075AFC 802B62FC 0323C021 */ addu $t8, $t9, $v1 -/* 075B00 802B6300 8F0F000C */ lw $t7, 0xc($t8) -/* 075B04 802B6304 01CFC821 */ addu $t9, $t6, $t7 -/* 075B08 802B6308 A4990004 */ sh $t9, 4($a0) -/* 075B0C 802B630C 8D810000 */ lw $at, ($t4) -/* 075B10 802B6310 AD21FFD0 */ sw $at, -0x30($t1) -/* 075B14 802B6314 8D8E0004 */ lw $t6, 4($t4) -/* 075B18 802B6318 AD2EFFD4 */ sw $t6, -0x2c($t1) -/* 075B1C 802B631C 8D810008 */ lw $at, 8($t4) -/* 075B20 802B6320 AD21FFD8 */ sw $at, -0x28($t1) -/* 075B24 802B6324 8D8E000C */ lw $t6, 0xc($t4) -/* 075B28 802B6328 AD2EFFDC */ sw $t6, -0x24($t1) -/* 075B2C 802B632C 8CB90000 */ lw $t9, ($a1) -/* 075B30 802B6330 862F0000 */ lh $t7, ($s1) -/* 075B34 802B6334 0323C021 */ addu $t8, $t9, $v1 -/* 075B38 802B6338 8F0E0004 */ lw $t6, 4($t8) -/* 075B3C 802B633C 01EEC821 */ addu $t9, $t7, $t6 -/* 075B40 802B6340 A4990010 */ sh $t9, 0x10($a0) -/* 075B44 802B6344 8CAF0000 */ lw $t7, ($a1) -/* 075B48 802B6348 86380002 */ lh $t8, 2($s1) -/* 075B4C 802B634C 01E37021 */ addu $t6, $t7, $v1 -/* 075B50 802B6350 8DD90008 */ lw $t9, 8($t6) -/* 075B54 802B6354 03197821 */ addu $t7, $t8, $t9 -/* 075B58 802B6358 A48F0012 */ sh $t7, 0x12($a0) -/* 075B5C 802B635C 8CB80000 */ lw $t8, ($a1) -/* 075B60 802B6360 862E0004 */ lh $t6, 4($s1) -/* 075B64 802B6364 0303C821 */ addu $t9, $t8, $v1 -/* 075B68 802B6368 8F2F000C */ lw $t7, 0xc($t9) -/* 075B6C 802B636C 01CFC021 */ addu $t8, $t6, $t7 -/* 075B70 802B6370 A4980014 */ sh $t8, 0x14($a0) -/* 075B74 802B6374 8DA10000 */ lw $at, ($t5) -/* 075B78 802B6378 AD01FFD0 */ sw $at, -0x30($t0) -/* 075B7C 802B637C 8DAE0004 */ lw $t6, 4($t5) -/* 075B80 802B6380 AD0EFFD4 */ sw $t6, -0x2c($t0) -/* 075B84 802B6384 8DA10008 */ lw $at, 8($t5) -/* 075B88 802B6388 AD01FFD8 */ sw $at, -0x28($t0) -/* 075B8C 802B638C 8DAE000C */ lw $t6, 0xc($t5) -/* 075B90 802B6390 AD0EFFDC */ sw $t6, -0x24($t0) -/* 075B94 802B6394 8CB80000 */ lw $t8, ($a1) -/* 075B98 802B6398 854F0000 */ lh $t7, ($t2) -/* 075B9C 802B639C 0303C821 */ addu $t9, $t8, $v1 -/* 075BA0 802B63A0 8F2E0004 */ lw $t6, 4($t9) -/* 075BA4 802B63A4 01EEC021 */ addu $t8, $t7, $t6 -/* 075BA8 802B63A8 A4980020 */ sh $t8, 0x20($a0) -/* 075BAC 802B63AC 8CAF0000 */ lw $t7, ($a1) -/* 075BB0 802B63B0 85590002 */ lh $t9, 2($t2) -/* 075BB4 802B63B4 01E37021 */ addu $t6, $t7, $v1 -/* 075BB8 802B63B8 8DD80008 */ lw $t8, 8($t6) -/* 075BBC 802B63BC 03387821 */ addu $t7, $t9, $t8 -/* 075BC0 802B63C0 A48F0022 */ sh $t7, 0x22($a0) -/* 075BC4 802B63C4 8CB90000 */ lw $t9, ($a1) -/* 075BC8 802B63C8 854E0004 */ lh $t6, 4($t2) -/* 075BCC 802B63CC 0323C021 */ addu $t8, $t9, $v1 -/* 075BD0 802B63D0 8F0F000C */ lw $t7, 0xc($t8) -/* 075BD4 802B63D4 01CFC821 */ addu $t9, $t6, $t7 -/* 075BD8 802B63D8 14D3FF9E */ bne $a2, $s3, .L802B6254 -/* 075BDC 802B63DC A4990024 */ sh $t9, 0x24($a0) -/* 075BE0 802B63E0 8FA30030 */ lw $v1, 0x30($sp) -# gSPVertex(gfx, VIRTUAL_TO_PHYSICAL(vertBuf), 15, 0); -/* 075BE4 802B63E4 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 075BE8 802B63E8 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 075BEC 802B63EC 3C1804E0 */ lui $t8, (0x04E000F0 >> 16) # lui $t8, 0x4e0 -/* 075BF0 802B63F0 371800F0 */ ori $t8, (0x04E000F0 & 0xFFFF) # ori $t8, $t8, 0xf0 -/* 075BF4 802B63F4 00417024 */ and $t6, $v0, $at -/* 075BF8 802B63F8 AC6E0004 */ sw $t6, 4($v1) -/* 075BFC 802B63FC AC780000 */ sw $t8, ($v1) -.L802B6400: -/* 075C00 802B6400 8FBF002C */ lw $ra, 0x2c($sp) -/* 075C04 802B6404 8FB00018 */ lw $s0, 0x18($sp) -/* 075C08 802B6408 8FB1001C */ lw $s1, 0x1c($sp) -/* 075C0C 802B640C 8FB20020 */ lw $s2, 0x20($sp) -/* 075C10 802B6410 8FB30024 */ lw $s3, 0x24($sp) -/* 075C14 802B6414 8FB40028 */ lw $s4, 0x28($sp) -/* 075C18 802B6418 03E00008 */ jr $ra -/* 075C1C 802B641C 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/non_matchings/eu/append_snowflake_vertex_buffer.s b/asm/non_matchings/eu/append_snowflake_vertex_buffer.s deleted file mode 100644 index 7af0c77..0000000 --- a/asm/non_matchings/eu/append_snowflake_vertex_buffer.s +++ /dev/null @@ -1,156 +0,0 @@ -.text -glabel append_snowflake_vertex_buffer -/* 074188 802B4988 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 07418C 802B498C AFBF002C */ sw $ra, 0x2c($sp) -/* 074190 802B4990 AFB40028 */ sw $s4, 0x28($sp) -/* 074194 802B4994 AFB1001C */ sw $s1, 0x1c($sp) -/* 074198 802B4998 AFB00018 */ sw $s0, 0x18($sp) -/* 07419C 802B499C AFA40030 */ sw $a0, 0x30($sp) -/* 0741A0 802B49A0 00C08025 */ move $s0, $a2 -/* 0741A4 802B49A4 00E08825 */ move $s1, $a3 -/* 0741A8 802B49A8 00A0A025 */ move $s4, $a1 -/* 0741AC 802B49AC AFB30024 */ sw $s3, 0x24($sp) -/* 0741B0 802B49B0 AFB20020 */ sw $s2, 0x20($sp) -# Vtx *vertBuf = (Vtx *)alloc_display_list(15 * sizeof(Vtx)); -/* 0741B4 802B49B4 0C09A781 */ jal alloc_display_list -/* 0741B8 802B49B8 240400F0 */ li $a0, 240 -# if (vertBuf == NULL) return; -/* 0741BC 802B49BC 1040007B */ beqz $v0, .L802B4BAC -/* 0741C0 802B49C0 00003025 */ move $a2, $zero -/* 0741C4 802B49C4 3C128030 */ lui $s2, %hi(gSnowTempVtx + 0x20) # $s2, 0x8030 -/* 0741C8 802B49C8 3C1F8030 */ lui $ra, %hi(gSnowTempVtx + 0x10) # $ra, 0x8030 -/* 0741CC 802B49CC 3C0B8030 */ lui $t3, %hi(gSnowTempVtx) # $t3, 0x8030 -/* 0741D0 802B49D0 3C058033 */ lui $a1, %hi(gEnvFxBuffer) # $a1, 0x8033 -/* 0741D4 802B49D4 24A5F6B0 */ addiu $a1, %lo(gEnvFxBuffer) # addiu $a1, $a1, -0x950 -/* 0741D8 802B49D8 256BDD08 */ addiu $t3, %lo(gSnowTempVtx) # addiu $t3, $t3, -0x22f8 -/* 0741DC 802B49DC 27FFDD18 */ addiu $ra, %lo(gSnowTempVtx + 0x10) # addiu $ra, $ra, -0x22e8 -/* 0741E0 802B49E0 2652DD28 */ addiu $s2, %lo(gSnowTempVtx + 0x20) # addiu $s2, $s2, -0x22d8 -/* 0741E4 802B49E4 00403825 */ move $a3, $v0 -/* 0741E8 802B49E8 24480020 */ addiu $t0, $v0, 0x20 -/* 0741EC 802B49EC 24490010 */ addiu $t1, $v0, 0x10 -/* 0741F0 802B49F0 2413000F */ li $s3, 15 -/* 0741F4 802B49F4 240D0038 */ li $t5, 56 -/* 0741F8 802B49F8 240C0003 */ li $t4, 3 -/* 0741FC 802B49FC 8FAA0040 */ lw $t2, 0x40($sp) -# for (i = 0; i < 15; i += 3) -.L802B4A00: -/* 074200 802B4A00 00CC001A */ div $zero, $a2, $t4 -/* 074204 802B4A04 8D610000 */ lw $at, ($t3) -/* 074208 802B4A08 0000C812 */ mflo $t9 -/* 07420C 802B4A0C 02997021 */ addu $t6, $s4, $t9 -/* 074210 802B4A10 ACE10000 */ sw $at, ($a3) -/* 074214 802B4A14 8D6F0004 */ lw $t7, 4($t3) -/* 074218 802B4A18 01CD0019 */ multu $t6, $t5 -/* 07421C 802B4A1C 0006C100 */ sll $t8, $a2, 4 -/* 074220 802B4A20 ACEF0004 */ sw $t7, 4($a3) -/* 074224 802B4A24 8D610008 */ lw $at, 8($t3) -/* 074228 802B4A28 00582021 */ addu $a0, $v0, $t8 -/* 07422C 802B4A2C 24E70030 */ addiu $a3, $a3, 0x30 -/* 074230 802B4A30 ACE1FFD8 */ sw $at, -0x28($a3) -/* 074234 802B4A34 8D6F000C */ lw $t7, 0xc($t3) -/* 074238 802B4A38 25080030 */ addiu $t0, $t0, 0x30 -/* 07423C 802B4A3C 25290030 */ addiu $t1, $t1, 0x30 -/* 074240 802B4A40 ACEFFFDC */ sw $t7, -0x24($a3) -/* 074244 802B4A44 8CB80000 */ lw $t8, ($a1) -/* 074248 802B4A48 00001812 */ mflo $v1 -/* 07424C 802B4A4C 860F0000 */ lh $t7, ($s0) -/* 074250 802B4A50 0303C821 */ addu $t9, $t8, $v1 -/* 074254 802B4A54 8F2E0004 */ lw $t6, 4($t9) -/* 074258 802B4A58 15800002 */ bnez $t4, .L802B4A64 -/* 07425C 802B4A5C 00000000 */ nop -/* 074260 802B4A60 0007000D */ break 7 -.L802B4A64: -/* 074264 802B4A64 2401FFFF */ li $at, -1 -/* 074268 802B4A68 15810004 */ bne $t4, $at, .L802B4A7C -/* 07426C 802B4A6C 3C018000 */ lui $at, 0x8000 -/* 074270 802B4A70 14C10002 */ bne $a2, $at, .L802B4A7C -/* 074274 802B4A74 00000000 */ nop -/* 074278 802B4A78 0006000D */ break 6 -.L802B4A7C: -/* 07427C 802B4A7C 01EEC021 */ addu $t8, $t7, $t6 -/* 074280 802B4A80 A4980000 */ sh $t8, ($a0) -/* 074284 802B4A84 8CAF0000 */ lw $t7, ($a1) -/* 074288 802B4A88 86190002 */ lh $t9, 2($s0) -/* 07428C 802B4A8C 24C60003 */ addiu $a2, $a2, 3 -/* 074290 802B4A90 01E37021 */ addu $t6, $t7, $v1 -/* 074294 802B4A94 8DD80008 */ lw $t8, 8($t6) -/* 074298 802B4A98 03387821 */ addu $t7, $t9, $t8 -/* 07429C 802B4A9C A48F0002 */ sh $t7, 2($a0) -/* 0742A0 802B4AA0 8CB90000 */ lw $t9, ($a1) -/* 0742A4 802B4AA4 860E0004 */ lh $t6, 4($s0) -/* 0742A8 802B4AA8 0323C021 */ addu $t8, $t9, $v1 -/* 0742AC 802B4AAC 8F0F000C */ lw $t7, 0xc($t8) -/* 0742B0 802B4AB0 01CFC821 */ addu $t9, $t6, $t7 -/* 0742B4 802B4AB4 A4990004 */ sh $t9, 4($a0) -/* 0742B8 802B4AB8 8FE10000 */ lw $at, ($ra) -/* 0742BC 802B4ABC AD21FFD0 */ sw $at, -0x30($t1) -/* 0742C0 802B4AC0 8FEE0004 */ lw $t6, 4($ra) -/* 0742C4 802B4AC4 AD2EFFD4 */ sw $t6, -0x2c($t1) -/* 0742C8 802B4AC8 8FE10008 */ lw $at, 8($ra) -/* 0742CC 802B4ACC AD21FFD8 */ sw $at, -0x28($t1) -/* 0742D0 802B4AD0 8FEE000C */ lw $t6, 0xc($ra) -/* 0742D4 802B4AD4 AD2EFFDC */ sw $t6, -0x24($t1) -/* 0742D8 802B4AD8 8CB90000 */ lw $t9, ($a1) -/* 0742DC 802B4ADC 862F0000 */ lh $t7, ($s1) -/* 0742E0 802B4AE0 0323C021 */ addu $t8, $t9, $v1 -/* 0742E4 802B4AE4 8F0E0004 */ lw $t6, 4($t8) -/* 0742E8 802B4AE8 01EEC821 */ addu $t9, $t7, $t6 -/* 0742EC 802B4AEC A4990010 */ sh $t9, 0x10($a0) -/* 0742F0 802B4AF0 8CAF0000 */ lw $t7, ($a1) -/* 0742F4 802B4AF4 86380002 */ lh $t8, 2($s1) -/* 0742F8 802B4AF8 01E37021 */ addu $t6, $t7, $v1 -/* 0742FC 802B4AFC 8DD90008 */ lw $t9, 8($t6) -/* 074300 802B4B00 03197821 */ addu $t7, $t8, $t9 -/* 074304 802B4B04 A48F0012 */ sh $t7, 0x12($a0) -/* 074308 802B4B08 8CB80000 */ lw $t8, ($a1) -/* 07430C 802B4B0C 862E0004 */ lh $t6, 4($s1) -/* 074310 802B4B10 0303C821 */ addu $t9, $t8, $v1 -/* 074314 802B4B14 8F2F000C */ lw $t7, 0xc($t9) -/* 074318 802B4B18 01CFC021 */ addu $t8, $t6, $t7 -/* 07431C 802B4B1C A4980014 */ sh $t8, 0x14($a0) -/* 074320 802B4B20 8E410000 */ lw $at, ($s2) -/* 074324 802B4B24 AD01FFD0 */ sw $at, -0x30($t0) -/* 074328 802B4B28 8E4E0004 */ lw $t6, 4($s2) -/* 07432C 802B4B2C AD0EFFD4 */ sw $t6, -0x2c($t0) -/* 074330 802B4B30 8E410008 */ lw $at, 8($s2) -/* 074334 802B4B34 AD01FFD8 */ sw $at, -0x28($t0) -/* 074338 802B4B38 8E4E000C */ lw $t6, 0xc($s2) -/* 07433C 802B4B3C AD0EFFDC */ sw $t6, -0x24($t0) -/* 074340 802B4B40 8CB80000 */ lw $t8, ($a1) -/* 074344 802B4B44 854F0000 */ lh $t7, ($t2) -/* 074348 802B4B48 0303C821 */ addu $t9, $t8, $v1 -/* 07434C 802B4B4C 8F2E0004 */ lw $t6, 4($t9) -/* 074350 802B4B50 01EEC021 */ addu $t8, $t7, $t6 -/* 074354 802B4B54 A4980020 */ sh $t8, 0x20($a0) -/* 074358 802B4B58 8CAF0000 */ lw $t7, ($a1) -/* 07435C 802B4B5C 85590002 */ lh $t9, 2($t2) -/* 074360 802B4B60 01E37021 */ addu $t6, $t7, $v1 -/* 074364 802B4B64 8DD80008 */ lw $t8, 8($t6) -/* 074368 802B4B68 03387821 */ addu $t7, $t9, $t8 -/* 07436C 802B4B6C A48F0022 */ sh $t7, 0x22($a0) -/* 074370 802B4B70 8CB90000 */ lw $t9, ($a1) -/* 074374 802B4B74 854E0004 */ lh $t6, 4($t2) -/* 074378 802B4B78 0323C021 */ addu $t8, $t9, $v1 -/* 07437C 802B4B7C 8F0F000C */ lw $t7, 0xc($t8) -/* 074380 802B4B80 01CFC821 */ addu $t9, $t6, $t7 -/* 074384 802B4B84 14D3FF9E */ bne $a2, $s3, .L802B4A00 -/* 074388 802B4B88 A4990024 */ sh $t9, 0x24($a0) -/* 07438C 802B4B8C 8FA30030 */ lw $v1, 0x30($sp) -# gSPVertex(gfx, VIRTUAL_TO_PHYSICAL(vertBuf), 15, 0); -/* 074390 802B4B90 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 074394 802B4B94 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 074398 802B4B98 3C1804E0 */ lui $t8, (0x04E000F0 >> 16) # lui $t8, 0x4e0 -/* 07439C 802B4B9C 371800F0 */ ori $t8, (0x04E000F0 & 0xFFFF) # ori $t8, $t8, 0xf0 -/* 0743A0 802B4BA0 00417024 */ and $t6, $v0, $at -/* 0743A4 802B4BA4 AC6E0004 */ sw $t6, 4($v1) -/* 0743A8 802B4BA8 AC780000 */ sw $t8, ($v1) -.L802B4BAC: -/* 0743AC 802B4BAC 8FBF002C */ lw $ra, 0x2c($sp) -/* 0743B0 802B4BB0 8FB00018 */ lw $s0, 0x18($sp) -/* 0743B4 802B4BB4 8FB1001C */ lw $s1, 0x1c($sp) -/* 0743B8 802B4BB8 8FB20020 */ lw $s2, 0x20($sp) -/* 0743BC 802B4BBC 8FB30024 */ lw $s3, 0x24($sp) -/* 0743C0 802B4BC0 8FB40028 */ lw $s4, 0x28($sp) -/* 0743C4 802B4BC4 03E00008 */ jr $ra -/* 0743C8 802B4BC8 27BD0030 */ addiu $sp, $sp, 0x30 - diff --git a/asm/non_matchings/eu/audio/alloc_bank_or_seq.s b/asm/non_matchings/eu/audio/alloc_bank_or_seq.s deleted file mode 100644 index 7935272..0000000 --- a/asm/non_matchings/eu/audio/alloc_bank_or_seq.s +++ /dev/null @@ -1,269 +0,0 @@ -glabel alloc_bank_or_seq -/* 0A1B94 802E2394 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0A1B98 802E2398 AFB20020 */ sw $s2, 0x20($sp) -/* 0A1B9C 802E239C 00C09025 */ move $s2, $a2 -/* 0A1BA0 802E23A0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A1BA4 802E23A4 AFB00018 */ sw $s0, 0x18($sp) -/* 0A1BA8 802E23A8 00A08025 */ move $s0, $a1 -/* 0A1BAC 802E23AC 00808825 */ move $s1, $a0 -/* 0A1BB0 802E23B0 2406000C */ li $a2, 12 -/* 0A1BB4 802E23B4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0A1BB8 802E23B8 8FA90068 */ lw $t1, 0x68($sp) -/* 0A1BBC 802E23BC 24080001 */ li $t0, 1 -.L80200850: -/* 0A1BC0 802E23C0 14E000AD */ bnez $a3, .L80200B08 -/* 0A1BC4 802E23C4 3C0E8022 */ lui $t6, %hi(gSeqLoadedPool) # $t6, 0x8022 -/* 0A1BC8 802E23C8 25CE2670 */ addiu $t6, %lo(gSeqLoadedPool) # addiu $t6, $t6, 0x2670 -/* 0A1BCC 802E23CC 162E0006 */ bne $s1, $t6, .L80200878 -/* 0A1BD0 802E23D0 26300194 */ addiu $s0, $s1, 0x194 -/* 0A1BD4 802E23D4 3C058022 */ lui $a1, %hi(gSeqLoadStatus) # $a1, 0x8022 -/* 0A1BD8 802E23D8 24A52C58 */ addiu $a1, %lo(gSeqLoadStatus) # addiu $a1, $a1, 0x2c58 -/* 0A1BDC 802E23DC AFA5003C */ sw $a1, 0x3c($sp) -/* 0A1BE0 802E23E0 10000009 */ b .L80200898 -/* 0A1BE4 802E23E4 A3A0003B */ sb $zero, 0x3b($sp) -.L80200878: -/* 0A1BE8 802E23E8 3C0F8022 */ lui $t7, %hi(gBankLoadedPool) # $t7, 0x8022 -/* 0A1BEC 802E23EC 25EF2840 */ addiu $t7, %lo(gBankLoadedPool) # addiu $t7, $t7, 0x2840 -/* 0A1BF0 802E23F0 162F0005 */ bne $s1, $t7, .L80200898 -/* 0A1BF4 802E23F4 3C058022 */ lui $a1, %hi(gBankLoadStatus) # $a1, 0x8022 -/* 0A1BF8 802E23F8 24A52C18 */ addiu $a1, %lo(gBankLoadStatus) # addiu $a1, $a1, 0x2c18 -/* 0A1BFC 802E23FC 240A0001 */ li $t2, 1 -/* 0A1C00 802E2400 A3AA003B */ sb $t2, 0x3b($sp) -/* 0A1C04 802E2404 AFA5003C */ sw $a1, 0x3c($sp) -.L80200898: -/* 0A1C08 802E2408 8E02001C */ lw $v0, 0x1c($s0) -/* 0A1C0C 802E240C 2407FFFF */ li $a3, -1 -/* 0A1C10 802E2410 8FA5003C */ lw $a1, 0x3c($sp) -/* 0A1C14 802E2414 14E20003 */ bne $a3, $v0, .L802008B4 -/* 0A1C18 802E2418 93AA003B */ lbu $t2, 0x3b($sp) -/* 0A1C1C 802E241C 10000003 */ b .L802008BC -/* 0A1C20 802E2420 00001825 */ move $v1, $zero -.L802008B4: -/* 0A1C24 802E2424 0045C021 */ addu $t8, $v0, $a1 -/* 0A1C28 802E2428 93030000 */ lbu $v1, ($t8) -.L802008BC: -/* 0A1C2C 802E242C 8E020028 */ lw $v0, 0x28($s0) -/* 0A1C30 802E2430 14E20003 */ bne $a3, $v0, .L802008D0 -/* 0A1C34 802E2434 0045C821 */ addu $t9, $v0, $a1 -/* 0A1C38 802E2438 10000002 */ b .L802008D4 -/* 0A1C3C 802E243C 00002025 */ move $a0, $zero -.L802008D0: -/* 0A1C40 802E2440 93240000 */ lbu $a0, ($t9) -.L802008D4: -/* 0A1C44 802E2444 14600003 */ bnez $v1, .L802008E4 -/* 0A1C48 802E2448 00601025 */ move $v0, $v1 -/* 0A1C4C 802E244C 1000001D */ b .L80200954 -/* 0A1C50 802E2450 AE000000 */ sw $zero, ($s0) -.L802008E4: -/* 0A1C54 802E2454 14800004 */ bnez $a0, .L802008F8 -/* 0A1C58 802E2458 00801825 */ move $v1, $a0 -/* 0A1C5C 802E245C 240B0001 */ li $t3, 1 -/* 0A1C60 802E2460 10000018 */ b .L80200954 -/* 0A1C64 802E2464 AE0B0000 */ sw $t3, ($s0) -.L802008F8: -/* 0A1C68 802E2468 24040003 */ li $a0, 3 -/* 0A1C6C 802E246C 14820003 */ bne $a0, $v0, .L8020090C -/* 0A1C70 802E2470 00000000 */ nop -/* 0A1C74 802E2474 50830014 */ beql $a0, $v1, .L80200958 -/* 0A1C78 802E2478 8E0E0000 */ lw $t6, ($s0) -.L8020090C: -/* 0A1C7C 802E247C 14820003 */ bne $a0, $v0, .L8020091C -/* 0A1C80 802E2480 00000000 */ nop -/* 0A1C84 802E2484 1000000F */ b .L80200954 -/* 0A1C88 802E2488 AE000000 */ sw $zero, ($s0) -.L8020091C: -/* 0A1C8C 802E248C 14830003 */ bne $a0, $v1, .L8020092C -/* 0A1C90 802E2490 240C0001 */ li $t4, 1 -/* 0A1C94 802E2494 1000000B */ b .L80200954 -/* 0A1C98 802E2498 AE0C0000 */ sw $t4, ($s0) -.L8020092C: -/* 0A1C9C 802E249C 11020003 */ beq $t0, $v0, .L8020093C -/* 0A1CA0 802E24A0 00000000 */ nop -/* 0A1CA4 802E24A4 10000007 */ b .L80200954 -/* 0A1CA8 802E24A8 AE000000 */ sw $zero, ($s0) -.L8020093C: -/* 0A1CAC 802E24AC 11030003 */ beq $t0, $v1, .L8020094C -/* 0A1CB0 802E24B0 240D0001 */ li $t5, 1 -/* 0A1CB4 802E24B4 10000003 */ b .L80200954 -/* 0A1CB8 802E24B8 AE0D0000 */ sw $t5, ($s0) -.L8020094C: -/* 0A1CBC 802E24BC 10000099 */ b .L80200BB4 -/* 0A1CC0 802E24C0 00001025 */ move $v0, $zero -.L80200954: -/* 0A1CC4 802E24C4 8E0E0000 */ lw $t6, ($s0) -.L80200958: -/* 0A1CC8 802E24C8 01C60019 */ multu $t6, $a2 -/* 0A1CCC 802E24CC 00007812 */ mflo $t7 -/* 0A1CD0 802E24D0 020FC021 */ addu $t8, $s0, $t7 -/* 0A1CD4 802E24D4 8F02001C */ lw $v0, 0x1c($t8) -/* 0A1CD8 802E24D8 10E20010 */ beq $a3, $v0, .L802009AC -/* 0A1CDC 802E24DC 00A2C821 */ addu $t9, $a1, $v0 -/* 0A1CE0 802E24E0 150A000E */ bne $t0, $t2, .L802009AC -/* 0A1CE4 802E24E4 A3200000 */ sb $zero, ($t9) -/* 0A1CE8 802E24E8 8E0B0000 */ lw $t3, ($s0) -/* 0A1CEC 802E24EC 01660019 */ multu $t3, $a2 -/* 0A1CF0 802E24F0 00006012 */ mflo $t4 -/* 0A1CF4 802E24F4 020C6821 */ addu $t5, $s0, $t4 -/* 0A1CF8 802E24F8 8DA4001C */ lw $a0, 0x1c($t5) -/* 0A1CFC 802E24FC A3AA003B */ sb $t2, 0x3b($sp) -/* 0A1D00 802E2500 AFA90068 */ sw $t1, 0x68($sp) -/* 0A1D04 802E2504 0C0B87A3 */ jal discard_bank -/* 0A1D08 802E2508 AFA5003C */ sw $a1, 0x3c($sp) -/* 0A1D0C 802E250C 8FA5003C */ lw $a1, 0x3c($sp) -/* 0A1D10 802E2510 24080001 */ li $t0, 1 -/* 0A1D14 802E2514 8FA90068 */ lw $t1, 0x68($sp) -/* 0A1D18 802E2518 93AA003B */ lbu $t2, 0x3b($sp) -.L802009AC: -/* 0A1D1C 802E251C 8E040000 */ lw $a0, ($s0) -/* 0A1D20 802E2520 24010001 */ li $at, 1 -/* 0A1D24 802E2524 26230198 */ addiu $v1, $s1, 0x198 -/* 0A1D28 802E2528 50800006 */ beql $a0, $zero, .L802009D4 -/* 0A1D2C 802E252C 8C6E0000 */ lw $t6, ($v1) -/* 0A1D30 802E2530 1081002B */ beq $a0, $at, .L80200A70 -/* 0A1D34 802E2534 26230198 */ addiu $v1, $s1, 0x198 -/* 0A1D38 802E2538 1000007A */ b .L80200BB4 -/* 0A1D3C 802E253C 00001025 */ move $v0, $zero -/* 0A1D40 802E2540 8C6E0000 */ lw $t6, ($v1) -.L802009D4: -/* 0A1D44 802E2544 AE09001C */ sw $t1, 0x1c($s0) -/* 0A1D48 802E2548 AE120018 */ sw $s2, 0x18($s0) -/* 0A1D4C 802E254C AE0E0014 */ sw $t6, 0x14($s0) -/* 0A1D50 802E2550 8C6F0000 */ lw $t7, ($v1) -/* 0A1D54 802E2554 01F21021 */ addu $v0, $t7, $s2 -/* 0A1D58 802E2558 AC620004 */ sw $v0, 4($v1) -/* 0A1D5C 802E255C 8E180020 */ lw $t8, 0x20($s0) -/* 0A1D60 802E2560 0302082B */ sltu $at, $t8, $v0 -/* 0A1D64 802E2564 50200019 */ beql $at, $zero, .L80200A5C -/* 0A1D68 802E2568 8E030014 */ lw $v1, 0x14($s0) -/* 0A1D6C 802E256C 8E190028 */ lw $t9, 0x28($s0) -/* 0A1D70 802E2570 00B95821 */ addu $t3, $a1, $t9 -/* 0A1D74 802E2574 11400005 */ beqz $t2, .L80200A1C -/* 0A1D78 802E2578 A1600000 */ sb $zero, ($t3) -/* 0A1D7C 802E257C 51480009 */ beql $t2, $t0, .L80200A34 -/* 0A1D80 802E2580 8E040028 */ lw $a0, 0x28($s0) -/* 0A1D84 802E2584 1000000B */ b .L80200A44 -/* 0A1D88 802E2588 240CFFFF */ li $t4, -1 -.L80200A1C: -/* 0A1D8C 802E258C 8E040028 */ lw $a0, 0x28($s0) -/* 0A1D90 802E2590 0C0B87DC */ jal discard_sequence -/* 0A1D94 802E2594 AFA3002C */ sw $v1, 0x2c($sp) -/* 0A1D98 802E2598 10000005 */ b .L80200A40 -/* 0A1D9C 802E259C 8FA3002C */ lw $v1, 0x2c($sp) -/* 0A1DA0 802E25A0 8E040028 */ lw $a0, 0x28($s0) -.L80200A34: -/* 0A1DA4 802E25A4 0C0B87A3 */ jal discard_bank -/* 0A1DA8 802E25A8 AFA3002C */ sw $v1, 0x2c($sp) -/* 0A1DAC 802E25AC 8FA3002C */ lw $v1, 0x2c($sp) -.L80200A40: -/* 0A1DB0 802E25B0 240CFFFF */ li $t4, -1 -.L80200A44: -/* 0A1DB4 802E25B4 AE0C0028 */ sw $t4, 0x28($s0) -/* 0A1DB8 802E25B8 8C6E0008 */ lw $t6, 8($v1) -/* 0A1DBC 802E25BC 8C6D0000 */ lw $t5, ($v1) -/* 0A1DC0 802E25C0 01AE7821 */ addu $t7, $t5, $t6 -/* 0A1DC4 802E25C4 AE0F0020 */ sw $t7, 0x20($s0) -/* 0A1DC8 802E25C8 8E030014 */ lw $v1, 0x14($s0) -.L80200A5C: -/* 0A1DCC 802E25CC 8E180000 */ lw $t8, ($s0) -/* 0A1DD0 802E25D0 00601025 */ move $v0, $v1 -/* 0A1DD4 802E25D4 3B190001 */ xori $t9, $t8, 1 -/* 0A1DD8 802E25D8 10000052 */ b .L80200BB4 -/* 0A1DDC 802E25DC AE190000 */ sw $t9, ($s0) -.L80200A70: -/* 0A1DE0 802E25E0 8C6B0000 */ lw $t3, ($v1) -/* 0A1DE4 802E25E4 8C6C0008 */ lw $t4, 8($v1) -/* 0A1DE8 802E25E8 AE090028 */ sw $t1, 0x28($s0) -/* 0A1DEC 802E25EC AE120024 */ sw $s2, 0x24($s0) -/* 0A1DF0 802E25F0 016C6821 */ addu $t5, $t3, $t4 -/* 0A1DF4 802E25F4 01B27023 */ subu $t6, $t5, $s2 -/* 0A1DF8 802E25F8 25C2FFF0 */ addiu $v0, $t6, -0x10 -/* 0A1DFC 802E25FC AE020020 */ sw $v0, 0x20($s0) -/* 0A1E00 802E2600 8C780004 */ lw $t8, 4($v1) -/* 0A1E04 802E2604 0058082B */ sltu $at, $v0, $t8 -/* 0A1E08 802E2608 10200017 */ beqz $at, .L80200AF8 -/* 0A1E0C 802E260C 00000000 */ nop -/* 0A1E10 802E2610 8E19001C */ lw $t9, 0x1c($s0) -/* 0A1E14 802E2614 00B95821 */ addu $t3, $a1, $t9 -/* 0A1E18 802E2618 11400005 */ beqz $t2, .L80200AC0 -/* 0A1E1C 802E261C A1600000 */ sb $zero, ($t3) -/* 0A1E20 802E2620 51480009 */ beql $t2, $t0, .L80200AD8 -/* 0A1E24 802E2624 8E04001C */ lw $a0, 0x1c($s0) -/* 0A1E28 802E2628 1000000B */ b .L80200AE8 -/* 0A1E2C 802E262C 240CFFFF */ li $t4, -1 -.L80200AC0: -/* 0A1E30 802E2630 8E04001C */ lw $a0, 0x1c($s0) -/* 0A1E34 802E2634 0C0B87DC */ jal discard_sequence -/* 0A1E38 802E2638 AFA3002C */ sw $v1, 0x2c($sp) -/* 0A1E3C 802E263C 10000005 */ b .L80200AE4 -/* 0A1E40 802E2640 8FA3002C */ lw $v1, 0x2c($sp) -/* 0A1E44 802E2644 8E04001C */ lw $a0, 0x1c($s0) -.L80200AD8: -/* 0A1E48 802E2648 0C0B87A3 */ jal discard_bank -/* 0A1E4C 802E264C AFA3002C */ sw $v1, 0x2c($sp) -/* 0A1E50 802E2650 8FA3002C */ lw $v1, 0x2c($sp) -.L80200AE4: -/* 0A1E54 802E2654 240CFFFF */ li $t4, -1 -.L80200AE8: -/* 0A1E58 802E2658 AE0C001C */ sw $t4, 0x1c($s0) -/* 0A1E5C 802E265C 8C6D0000 */ lw $t5, ($v1) -/* 0A1E60 802E2660 AC6D0004 */ sw $t5, 4($v1) -/* 0A1E64 802E2664 8E020020 */ lw $v0, 0x20($s0) -.L80200AF8: -/* 0A1E68 802E2668 1000FFD8 */ b .L80200A5C -/* 0A1E6C 802E266C 00401825 */ move $v1, $v0 -/* 0A1E70 802E2670 1000002C */ b .L80200BB4 -/* 0A1E74 802E2674 00001025 */ move $v0, $zero -.L80200B08: -/* 0A1E78 802E2678 02120019 */ multu $s0, $s2 -/* 0A1E7C 802E267C 26240004 */ addiu $a0, $s1, 4 -/* 0A1E80 802E2680 AFA70064 */ sw $a3, 0x64($sp) -/* 0A1E84 802E2684 AFA90068 */ sw $t1, 0x68($sp) -/* 0A1E88 802E2688 00002812 */ mflo $a1 -/* 0A1E8C 802E268C 0C0B87F8 */ jal soundAlloc -/* 0A1E90 802E2690 00000000 */ nop -/* 0A1E94 802E2694 8E2E0000 */ lw $t6, ($s1) -/* 0A1E98 802E2698 2406000C */ li $a2, 12 -/* 0A1E9C 802E269C 8FA70064 */ lw $a3, 0x64($sp) -/* 0A1EA0 802E26A0 01C60019 */ multu $t6, $a2 -/* 0A1EA4 802E26A4 8FA90068 */ lw $t1, 0x68($sp) -/* 0A1EA8 802E26A8 24080001 */ li $t0, 1 -/* 0A1EAC 802E26AC 24010002 */ li $at, 2 -/* 0A1EB0 802E26B0 00007812 */ mflo $t7 -/* 0A1EB4 802E26B4 022FC021 */ addu $t8, $s1, $t7 -/* 0A1EB8 802E26B8 14400009 */ bnez $v0, .L80200B70 -/* 0A1EBC 802E26BC AF020014 */ sw $v0, 0x14($t8) -/* 0A1EC0 802E26C0 10E80005 */ beq $a3, $t0, .L80200B68 -/* 0A1EC4 802E26C4 00000000 */ nop -/* 0A1EC8 802E26C8 54E10006 */ bnel $a3, $at, .L80200B74 -/* 0A1ECC 802E26CC 8E390000 */ lw $t9, ($s1) -/* 0A1ED0 802E26D0 1000FF3B */ b .L80200850 -/* 0A1ED4 802E26D4 00003825 */ move $a3, $zero -.L80200B68: -/* 0A1ED8 802E26D8 10000012 */ b .L80200BB4 -/* 0A1EDC 802E26DC 00001025 */ move $v0, $zero -.L80200B70: -/* 0A1EE0 802E26E0 8E390000 */ lw $t9, ($s1) -.L80200B74: -/* 0A1EE4 802E26E4 03260019 */ multu $t9, $a2 -/* 0A1EE8 802E26E8 00005812 */ mflo $t3 -/* 0A1EEC 802E26EC 022B6021 */ addu $t4, $s1, $t3 -/* 0A1EF0 802E26F0 AD89001C */ sw $t1, 0x1c($t4) -/* 0A1EF4 802E26F4 8E2D0000 */ lw $t5, ($s1) -/* 0A1EF8 802E26F8 01A60019 */ multu $t5, $a2 -/* 0A1EFC 802E26FC 00007012 */ mflo $t6 -/* 0A1F00 802E2700 022E7821 */ addu $t7, $s1, $t6 -/* 0A1F04 802E2704 ADF20018 */ sw $s2, 0x18($t7) -/* 0A1F08 802E2708 8E230000 */ lw $v1, ($s1) -/* 0A1F0C 802E270C 00660019 */ multu $v1, $a2 -/* 0A1F10 802E2710 246B0001 */ addiu $t3, $v1, 1 -/* 0A1F14 802E2714 0000C012 */ mflo $t8 -/* 0A1F18 802E2718 0238C821 */ addu $t9, $s1, $t8 -/* 0A1F1C 802E271C 8F220014 */ lw $v0, 0x14($t9) -/* 0A1F20 802E2720 AE2B0000 */ sw $t3, ($s1) -.L80200BB4: -/* 0A1F24 802E2724 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A1F28 802E2728 8FB00018 */ lw $s0, 0x18($sp) -/* 0A1F2C 802E272C 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A1F30 802E2730 8FB20020 */ lw $s2, 0x20($sp) -/* 0A1F34 802E2734 03E00008 */ jr $ra -/* 0A1F38 802E2738 27BD0058 */ addiu $sp, $sp, 0x58 diff --git a/asm/non_matchings/eu/audio/func_eu_802e00d8.s b/asm/non_matchings/eu/audio/func_eu_802e00d8.s deleted file mode 100644 index 740495c..0000000 --- a/asm/non_matchings/eu/audio/func_eu_802e00d8.s +++ /dev/null @@ -1,88 +0,0 @@ -glabel func_eu_802e00d8 -/* 09F8D8 802E00D8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 09F8DC 802E00DC AFA50034 */ sw $a1, 0x34($sp) -/* 09F8E0 802E00E0 87B80036 */ lh $t8, 0x36($sp) -/* 09F8E4 802E00E4 3C088022 */ lui $t0, %hi(gSynthesisReverbs) # $t0, 0x8022 -/* 09F8E8 802E00E8 2508C1B0 */ addiu $t0, %lo(gSynthesisReverbs) # addiu $t0, $t0, -0x3e50 -/* 09F8EC 802E00EC 0018C940 */ sll $t9, $t8, 5 -/* 09F8F0 802E00F0 0338C821 */ addu $t9, $t9, $t8 -/* 09F8F4 802E00F4 0019C8C0 */ sll $t9, $t9, 3 -/* 09F8F8 802E00F8 03281021 */ addu $v0, $t9, $t0 -/* 09F8FC 802E00FC 90490003 */ lbu $t1, 3($v0) -/* 09F900 802E0100 00067400 */ sll $t6, $a2, 0x10 -/* 09F904 802E0104 000E7C03 */ sra $t7, $t6, 0x10 -/* 09F908 802E0108 00095080 */ sll $t2, $t1, 2 -/* 09F90C 802E010C 01495023 */ subu $t2, $t2, $t1 -/* 09F910 802E0110 000A50C0 */ sll $t2, $t2, 3 -/* 09F914 802E0114 000F3880 */ sll $a3, $t7, 2 -/* 09F918 802E0118 01495021 */ addu $t2, $t2, $t1 -/* 09F91C 802E011C 904C0001 */ lbu $t4, 1($v0) -/* 09F920 802E0120 000A5080 */ sll $t2, $t2, 2 -/* 09F924 802E0124 00EF3821 */ addu $a3, $a3, $t7 -/* 09F928 802E0128 00073880 */ sll $a3, $a3, 2 -/* 09F92C 802E012C 004A5821 */ addu $t3, $v0, $t2 -/* 09F930 802E0130 AFB00020 */ sw $s0, 0x20($sp) -/* 09F934 802E0134 01671821 */ addu $v1, $t3, $a3 -/* 09F938 802E0138 00808025 */ move $s0, $a0 -/* 09F93C 802E013C AFBF0024 */ sw $ra, 0x24($sp) -/* 09F940 802E0140 AFA60038 */ sw $a2, 0x38($sp) -/* 09F944 802E0144 11800033 */ beqz $t4, .L80200BC4 -/* 09F948 802E0148 24630030 */ addiu $v1, $v1, 0x30 -/* 09F94C 802E014C 904D0004 */ lbu $t5, 4($v0) -/* 09F950 802E0150 24010001 */ li $at, 1 -/* 09F954 802E0154 3C190800 */ lui $t9, 0x800 -/* 09F958 802E0158 15A10018 */ bne $t5, $at, .L80200B6C -/* 09F95C 802E015C 3C080740 */ lui $t0, (0x07400280 >> 16) # lui $t0, 0x740 -/* 09F960 802E0160 87AE0036 */ lh $t6, 0x36($sp) -/* 09F964 802E0164 9466000E */ lhu $a2, 0xe($v1) -/* 09F968 802E0168 84670010 */ lh $a3, 0x10($v1) -/* 09F96C 802E016C AFA3002C */ sw $v1, 0x2c($sp) -/* 09F970 802E0170 24050740 */ li $a1, 1856 -/* 09F974 802E0174 0C0B7E65 */ jal synthesis_save_reverb_ring_buffer -/* 09F978 802E0178 AFAE0010 */ sw $t6, 0x10($sp) -/* 09F97C 802E017C 8FA3002C */ lw $v1, 0x2c($sp) -/* 09F980 802E0180 00408025 */ move $s0, $v0 -/* 09F984 802E0184 00402025 */ move $a0, $v0 -/* 09F988 802E0188 84670012 */ lh $a3, 0x12($v1) -/* 09F98C 802E018C 87B80036 */ lh $t8, 0x36($sp) -/* 09F990 802E0190 50E00021 */ beql $a3, $zero, .L80200BC8 -/* 09F994 802E0194 8FBF0024 */ lw $ra, 0x24($sp) -/* 09F998 802E0198 84650010 */ lh $a1, 0x10($v1) -/* 09F99C 802E019C AFB80010 */ sw $t8, 0x10($sp) -/* 09F9A0 802E01A0 00003025 */ move $a2, $zero -/* 09F9A4 802E01A4 24A50740 */ addiu $a1, $a1, 0x740 -/* 09F9A8 802E01A8 30AFFFFF */ andi $t7, $a1, 0xffff -/* 09F9AC 802E01AC 0C0B7E65 */ jal synthesis_save_reverb_ring_buffer -/* 09F9B0 802E01B0 01E02825 */ move $a1, $t7 -/* 09F9B4 802E01B4 10000017 */ b .L80200BC4 -/* 09F9B8 802E01B8 00408025 */ move $s0, $v0 -.L80200B6C: -/* 09F9BC 802E01BC 02001825 */ move $v1, $s0 -/* 09F9C0 802E01C0 26100008 */ addiu $s0, $s0, 8 -/* 09F9C4 802E01C4 35080280 */ ori $t0, (0x07400280 & 0xFFFF) # ori $t0, $t0, 0x280 -/* 09F9C8 802E01C8 AC680004 */ sw $t0, 4($v1) -/* 09F9CC 802E01CC AC790000 */ sw $t9, ($v1) -/* 09F9D0 802E01D0 02002025 */ move $a0, $s0 -/* 09F9D4 802E01D4 3C090600 */ lui $t1, 0x600 -/* 09F9D8 802E01D8 AC890000 */ sw $t1, ($a0) -/* 09F9DC 802E01DC 904A0003 */ lbu $t2, 3($v0) -/* 09F9E0 802E01E0 3C018000 */ lui $at, 0x8000 -/* 09F9E4 802E01E4 26100008 */ addiu $s0, $s0, 8 -/* 09F9E8 802E01E8 000A5880 */ sll $t3, $t2, 2 -/* 09F9EC 802E01EC 016A5823 */ subu $t3, $t3, $t2 -/* 09F9F0 802E01F0 000B58C0 */ sll $t3, $t3, 3 -/* 09F9F4 802E01F4 016A5821 */ addu $t3, $t3, $t2 -/* 09F9F8 802E01F8 000B5880 */ sll $t3, $t3, 2 -/* 09F9FC 802E01FC 004B6021 */ addu $t4, $v0, $t3 -/* 09FA00 802E0200 01876821 */ addu $t5, $t4, $a3 -/* 09FA04 802E0204 8DAE0034 */ lw $t6, 0x34($t5) -/* 09FA08 802E0208 01C17821 */ addu $t7, $t6, $at -/* 09FA0C 802E020C AC8F0004 */ sw $t7, 4($a0) -/* 09FA10 802E0210 A0400000 */ sb $zero, ($v0) -.L80200BC4: -/* 09FA14 802E0214 8FBF0024 */ lw $ra, 0x24($sp) -.L80200BC8: -/* 09FA18 802E0218 02001025 */ move $v0, $s0 -/* 09FA1C 802E021C 8FB00020 */ lw $s0, 0x20($sp) -/* 09FA20 802E0220 03E00008 */ jr $ra -/* 09FA24 802E0224 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/non_matchings/eu/audio/note_apply_headset_pan_effects.s b/asm/non_matchings/eu/audio/note_apply_headset_pan_effects.s deleted file mode 100644 index ec9f20a..0000000 --- a/asm/non_matchings/eu/audio/note_apply_headset_pan_effects.s +++ /dev/null @@ -1,263 +0,0 @@ -glabel note_apply_headset_pan_effects -/* 0A0F98 802E1798 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0A0F9C 802E179C 8FAE003C */ lw $t6, 0x3c($sp) -/* 0A0FA0 802E17A0 AFB00004 */ sw $s0, 4($sp) -/* 0A0FA4 802E17A4 24020001 */ li $v0, 1 -/* 0A0FA8 802E17A8 11C20006 */ beq $t6, $v0, .L80202174 -/* 0A0FAC 802E17AC 00C08025 */ move $s0, $a2 -/* 0A0FB0 802E17B0 24010002 */ li $at, 2 -/* 0A0FB4 802E17B4 11C10009 */ beq $t6, $at, .L8020218C -/* 0A0FB8 802E17B8 240A0600 */ li $t2, 1536 -/* 0A0FBC 802E17BC 100000E8 */ b .L80202510 -/* 0A0FC0 802E17C0 00801025 */ move $v0, $a0 -.L80202174: -/* 0A0FC4 802E17C4 90A60003 */ lbu $a2, 3($a1) -/* 0A0FC8 802E17C8 92080002 */ lbu $t0, 2($s0) -/* 0A0FCC 802E17CC 240A04C0 */ li $t2, 1216 -/* 0A0FD0 802E17D0 A2000003 */ sb $zero, 3($s0) -/* 0A0FD4 802E17D4 10000008 */ b .L802021A8 -/* 0A0FD8 802E17D8 A2060002 */ sb $a2, 2($s0) -.L8020218C: -/* 0A0FDC 802E17DC 90A60004 */ lbu $a2, 4($a1) -/* 0A0FE0 802E17E0 92080003 */ lbu $t0, 3($s0) -/* 0A0FE4 802E17E4 A2000002 */ sb $zero, 2($s0) -/* 0A0FE8 802E17E8 10000003 */ b .L802021A8 -/* 0A0FEC 802E17EC A2060003 */ sb $a2, 3($s0) -/* 0A0FF0 802E17F0 100000DB */ b .L80202510 -/* 0A0FF4 802E17F4 00801025 */ move $v0, $a0 -.L802021A8: -/* 0A0FF8 802E17F8 8FAF0038 */ lw $t7, 0x38($sp) -/* 0A0FFC 802E17FC 30E5FFFF */ andi $a1, $a3, 0xffff -/* 0A1000 802E1800 3C180A00 */ lui $t8, 0xa00 -/* 0A1004 802E1804 51E200A5 */ beql $t7, $v0, .L8020244C -/* 0A1008 802E1808 00801825 */ move $v1, $a0 -/* 0A100C 802E180C 15000047 */ bnez $t0, .L802022DC -/* 0A1010 802E1810 01002825 */ move $a1, $t0 -/* 0A1014 802E1814 00801825 */ move $v1, $a0 -/* 0A1018 802E1818 3C020A00 */ lui $v0, (0x0A000200 >> 16) # lui $v0, 0xa00 -/* 0A101C 802E181C 24840008 */ addiu $a0, $a0, 8 -/* 0A1020 802E1820 24180008 */ li $t8, 8 -/* 0A1024 802E1824 34420200 */ ori $v0, (0x0A000200 & 0xFFFF) # ori $v0, $v0, 0x200 -/* 0A1028 802E1828 AC780004 */ sw $t8, 4($v1) -/* 0A102C 802E182C 00805825 */ move $t3, $a0 -/* 0A1030 802E1830 3C190200 */ lui $t9, (0x02000008 >> 16) # lui $t9, 0x200 -/* 0A1034 802E1834 AC620000 */ sw $v0, ($v1) -/* 0A1038 802E1838 37390008 */ ori $t9, (0x02000008 & 0xFFFF) # ori $t9, $t9, 8 -/* 0A103C 802E183C 24840008 */ addiu $a0, $a0, 8 -/* 0A1040 802E1840 AD790000 */ sw $t9, ($t3) -/* 0A1044 802E1844 240E0008 */ li $t6, 8 -/* 0A1048 802E1848 00806025 */ move $t4, $a0 -/* 0A104C 802E184C AD6E0004 */ sw $t6, 4($t3) -/* 0A1050 802E1850 24840008 */ addiu $a0, $a0, 8 -/* 0A1054 802E1854 3C0F0010 */ lui $t7, (0x00100010 >> 16) # lui $t7, 0x10 -/* 0A1058 802E1858 35EF0010 */ ori $t7, (0x00100010 & 0xFFFF) # ori $t7, $t7, 0x10 -/* 0A105C 802E185C 00806825 */ move $t5, $a0 -/* 0A1060 802E1860 AD8F0004 */ sw $t7, 4($t4) -/* 0A1064 802E1864 AD820000 */ sw $v0, ($t4) -/* 0A1068 802E1868 24190020 */ li $t9, 32 -/* 0A106C 802E186C 3C180800 */ lui $t8, 0x800 -/* 0A1070 802E1870 ADB80000 */ sw $t8, ($t5) -/* 0A1074 802E1874 ADB90004 */ sw $t9, 4($t5) -/* 0A1078 802E1878 24840008 */ addiu $a0, $a0, 8 -/* 0A107C 802E187C AFA4000C */ sw $a0, 0xc($sp) -/* 0A1080 802E1880 8FAF000C */ lw $t7, 0xc($sp) -/* 0A1084 802E1884 3C0E0600 */ lui $t6, 0x600 -/* 0A1088 802E1888 3C098000 */ lui $t1, (0x80000090 >> 16) # lui $t1, 0x8000 -/* 0A108C 802E188C ADEE0000 */ sw $t6, ($t7) -/* 0A1090 802E1890 8E18000C */ lw $t8, 0xc($s0) -/* 0A1094 802E1894 35290090 */ ori $t1, (0x80000090 & 0xFFFF) # ori $t1, $t1, 0x90 -/* 0A1098 802E1898 00E67021 */ addu $t6, $a3, $a2 -/* 0A109C 802E189C 0309C821 */ addu $t9, $t8, $t1 -/* 0A10A0 802E18A0 0007C3C0 */ sll $t8, $a3, 0xf -/* 0A10A4 802E18A4 01C51823 */ subu $v1, $t6, $a1 -/* 0A10A8 802E18A8 ADF90004 */ sw $t9, 4($t7) -/* 0A10AC 802E18AC 24790008 */ addiu $t9, $v1, 8 -/* 0A10B0 802E18B0 0319001A */ div $zero, $t8, $t9 -/* 0A10B4 802E18B4 24840008 */ addiu $a0, $a0, 8 -/* 0A10B8 802E18B8 17200002 */ bnez $t9, .L80202274 -/* 0A10BC 802E18BC 00000000 */ nop -/* 0A10C0 802E18C0 0007000D */ break 7 -.L80202274: -/* 0A10C4 802E18C4 2401FFFF */ li $at, -1 -/* 0A10C8 802E18C8 17210004 */ bne $t9, $at, .L8020228C -/* 0A10CC 802E18CC 3C018000 */ lui $at, 0x8000 -/* 0A10D0 802E18D0 17010002 */ bne $t8, $at, .L8020228C -/* 0A10D4 802E18D4 00000000 */ nop -/* 0A10D8 802E18D8 0006000D */ break 6 -.L8020228C: -/* 0A10DC 802E18DC 00005812 */ mflo $t3 -/* 0A10E0 802E18E0 00806025 */ move $t4, $a0 -/* 0A10E4 802E18E4 316FFFFF */ andi $t7, $t3, 0xffff -/* 0A10E8 802E18E8 3C0E0800 */ lui $t6, (0x08000208 >> 16) # lui $t6, 0x800 -/* 0A10EC 802E18EC 35CE0208 */ ori $t6, (0x08000208 & 0xFFFF) # ori $t6, $t6, 0x208 -/* 0A10F0 802E18F0 24840008 */ addiu $a0, $a0, 8 -/* 0A10F4 802E18F4 3062FFFF */ andi $v0, $v1, 0xffff -/* 0A10F8 802E18F8 31F8FFFF */ andi $t8, $t7, 0xffff -/* 0A10FC 802E18FC 3C010500 */ lui $at, 0x500 -/* 0A1100 802E1900 AD820004 */ sw $v0, 4($t4) -/* 0A1104 802E1904 AD8E0000 */ sw $t6, ($t4) -/* 0A1108 802E1908 0301C825 */ or $t9, $t8, $at -/* 0A110C 802E190C 00806825 */ move $t5, $a0 -/* 0A1110 802E1910 01E05825 */ move $t3, $t7 -/* 0A1114 802E1914 ADB90000 */ sw $t9, ($t5) -/* 0A1118 802E1918 8E0F000C */ lw $t7, 0xc($s0) -/* 0A111C 802E191C 24840008 */ addiu $a0, $a0, 8 -/* 0A1120 802E1920 01E97021 */ addu $t6, $t7, $t1 -/* 0A1124 802E1924 10000038 */ b .L802023B8 -/* 0A1128 802E1928 ADAE0004 */ sw $t6, 4($t5) -.L802022DC: -/* 0A112C 802E192C 14C00014 */ bnez $a2, .L80202330 -/* 0A1130 802E1930 00C01025 */ move $v0, $a2 -/* 0A1134 802E1934 00E5C823 */ subu $t9, $a3, $a1 -/* 0A1138 802E1938 272FFFFC */ addiu $t7, $t9, -4 -/* 0A113C 802E193C 0007C3C0 */ sll $t8, $a3, 0xf -/* 0A1140 802E1940 030F001A */ div $zero, $t8, $t7 -/* 0A1144 802E1944 00005812 */ mflo $t3 -/* 0A1148 802E1948 316EFFFF */ andi $t6, $t3, 0xffff -/* 0A114C 802E194C 15E00002 */ bnez $t7, .L80202308 -/* 0A1150 802E1950 00000000 */ nop -/* 0A1154 802E1954 0007000D */ break 7 -.L80202308: -/* 0A1158 802E1958 2401FFFF */ li $at, -1 -/* 0A115C 802E195C 15E10004 */ bne $t7, $at, .L80202320 -/* 0A1160 802E1960 3C018000 */ lui $at, 0x8000 -/* 0A1164 802E1964 17010002 */ bne $t8, $at, .L80202320 -/* 0A1168 802E1968 00000000 */ nop -/* 0A116C 802E196C 0006000D */ break 6 -.L80202320: -/* 0A1170 802E1970 00E2C821 */ addu $t9, $a3, $v0 -/* 0A1174 802E1974 03251823 */ subu $v1, $t9, $a1 -/* 0A1178 802E1978 10000011 */ b .L80202370 -/* 0A117C 802E197C 01C05825 */ move $t3, $t6 -.L80202330: -/* 0A1180 802E1980 00E2C021 */ addu $t8, $a3, $v0 -/* 0A1184 802E1984 03051823 */ subu $v1, $t8, $a1 -/* 0A1188 802E1988 00077BC0 */ sll $t7, $a3, 0xf -/* 0A118C 802E198C 01E3001A */ div $zero, $t7, $v1 -/* 0A1190 802E1990 00005812 */ mflo $t3 -/* 0A1194 802E1994 316EFFFF */ andi $t6, $t3, 0xffff -/* 0A1198 802E1998 01C05825 */ move $t3, $t6 -/* 0A119C 802E199C 14600002 */ bnez $v1, .L80202358 -/* 0A11A0 802E19A0 00000000 */ nop -/* 0A11A4 802E19A4 0007000D */ break 7 -.L80202358: -/* 0A11A8 802E19A8 2401FFFF */ li $at, -1 -/* 0A11AC 802E19AC 14610004 */ bne $v1, $at, .L80202370 -/* 0A11B0 802E19B0 3C018000 */ lui $at, 0x8000 -/* 0A11B4 802E19B4 15E10002 */ bne $t7, $at, .L80202370 -/* 0A11B8 802E19B8 00000000 */ nop -/* 0A11BC 802E19BC 0006000D */ break 6 -.L80202370: -/* 0A11C0 802E19C0 00806025 */ move $t4, $a0 -/* 0A11C4 802E19C4 3C190800 */ lui $t9, (0x08000200 >> 16) # lui $t9, 0x800 -/* 0A11C8 802E19C8 37390200 */ ori $t9, (0x08000200 & 0xFFFF) # ori $t9, $t9, 0x200 -/* 0A11CC 802E19CC 24840008 */ addiu $a0, $a0, 8 -/* 0A11D0 802E19D0 3062FFFF */ andi $v0, $v1, 0xffff -/* 0A11D4 802E19D4 3178FFFF */ andi $t8, $t3, 0xffff -/* 0A11D8 802E19D8 3C010500 */ lui $at, 0x500 -/* 0A11DC 802E19DC AD820004 */ sw $v0, 4($t4) -/* 0A11E0 802E19E0 AD990000 */ sw $t9, ($t4) -/* 0A11E4 802E19E4 03017825 */ or $t7, $t8, $at -/* 0A11E8 802E19E8 00806825 */ move $t5, $a0 -/* 0A11EC 802E19EC ADAF0000 */ sw $t7, ($t5) -/* 0A11F0 802E19F0 8E0E000C */ lw $t6, 0xc($s0) -/* 0A11F4 802E19F4 3C098000 */ lui $t1, %hi(0x80000004) # $t1, 0x8000 -/* 0A11F8 802E19F8 35290090 */ ori $t1, (0x80000090 & 0xFFFF) # ori $t1, $t1, 0x90 -/* 0A11FC 802E19FC 01C9C821 */ addu $t9, $t6, $t1 -/* 0A1200 802E1A00 ADB90004 */ sw $t9, 4($t5) -/* 0A1204 802E1A04 24840008 */ addiu $a0, $a0, 8 -.L802023B8: -/* 0A1208 802E1A08 10A0001B */ beqz $a1, .L80202428 -/* 0A120C 802E1A0C 00801825 */ move $v1, $a0 -/* 0A1210 802E1A10 00801825 */ move $v1, $a0 -/* 0A1214 802E1A14 3C180800 */ lui $t8, (0x08000200 >> 16) # lui $t8, 0x800 -/* 0A1218 802E1A18 37180200 */ ori $t8, (0x08000200 & 0xFFFF) # ori $t8, $t8, 0x200 -/* 0A121C 802E1A1C 24840008 */ addiu $a0, $a0, 8 -/* 0A1220 802E1A20 310FFFFF */ andi $t7, $t0, 0xffff -/* 0A1224 802E1A24 AC6F0004 */ sw $t7, 4($v1) -/* 0A1228 802E1A28 AC780000 */ sw $t8, ($v1) -/* 0A122C 802E1A2C 00804825 */ move $t1, $a0 -/* 0A1230 802E1A30 3C0E0400 */ lui $t6, 0x400 -/* 0A1234 802E1A34 AD2E0000 */ sw $t6, ($t1) -/* 0A1238 802E1A38 8E19000C */ lw $t9, 0xc($s0) -/* 0A123C 802E1A3C 3C018000 */ lui $at, (0x800000B0 >> 16) # lui $at, 0x8000 -/* 0A1240 802E1A40 342100B0 */ ori $at, (0x800000B0 & 0xFFFF) # ori $at, $at, 0xb0 -/* 0A1244 802E1A44 0321C021 */ addu $t8, $t9, $at -/* 0A1248 802E1A48 AD380004 */ sw $t8, %lo(0x80000004)($t1) -/* 0A124C 802E1A4C 24840008 */ addiu $a0, $a0, 8 -/* 0A1250 802E1A50 00805825 */ move $t3, $a0 -/* 0A1254 802E1A54 24B90200 */ addiu $t9, $a1, 0x200 -/* 0A1258 802E1A58 3C0F0A00 */ lui $t7, 0xa00 -/* 0A125C 802E1A5C AD6F0000 */ sw $t7, ($t3) -/* 0A1260 802E1A60 0019C400 */ sll $t8, $t9, 0x10 -/* 0A1264 802E1A64 03027825 */ or $t7, $t8, $v0 -/* 0A1268 802E1A68 AD6F0004 */ sw $t7, 4($t3) -/* 0A126C 802E1A6C 24840008 */ addiu $a0, $a0, 8 -/* 0A1270 802E1A70 1000001C */ b .L80202494 -/* 0A1274 802E1A74 30E5FFFF */ andi $a1, $a3, 0xffff -.L80202428: -/* 0A1278 802E1A78 3C010200 */ lui $at, 0x200 -/* 0A127C 802E1A7C 0041C825 */ or $t9, $v0, $at -/* 0A1280 802E1A80 3C0E0A00 */ lui $t6, 0xa00 -/* 0A1284 802E1A84 AC6E0000 */ sw $t6, ($v1) -/* 0A1288 802E1A88 AC790004 */ sw $t9, 4($v1) -/* 0A128C 802E1A8C 24840008 */ addiu $a0, $a0, 8 -/* 0A1290 802E1A90 10000014 */ b .L80202494 -/* 0A1294 802E1A94 30E5FFFF */ andi $a1, $a3, 0xffff -/* 0A1298 802E1A98 00801825 */ move $v1, $a0 -.L8020244C: -/* 0A129C 802E1A9C 3C020A00 */ lui $v0, %hi(0x0A000004) # $v0, 0xa00 -/* 0A12A0 802E1AA0 24840008 */ addiu $a0, $a0, 8 -/* 0A12A4 802E1AA4 34420200 */ ori $v0, (0x0A000200 & 0xFFFF) # ori $v0, $v0, 0x200 -/* 0A12A8 802E1AA8 00804025 */ move $t0, $a0 -/* 0A12AC 802E1AAC AC620000 */ sw $v0, ($v1) -/* 0A12B0 802E1AB0 AC650004 */ sw $a1, 4($v1) -/* 0A12B4 802E1AB4 24CE0200 */ addiu $t6, $a2, 0x200 -/* 0A12B8 802E1AB8 000ECC00 */ sll $t9, $t6, 0x10 -/* 0A12BC 802E1ABC AD180000 */ sw $t8, ($t0) -/* 0A12C0 802E1AC0 24840008 */ addiu $a0, $a0, 8 -/* 0A12C4 802E1AC4 0325C025 */ or $t8, $t9, $a1 -/* 0A12C8 802E1AC8 00804825 */ move $t1, $a0 -/* 0A12CC 802E1ACC AD180004 */ sw $t8, 4($t0) -/* 0A12D0 802E1AD0 3C0F0200 */ lui $t7, (0x02000200 >> 16) # lui $t7, 0x200 -/* 0A12D4 802E1AD4 35EF0200 */ ori $t7, (0x02000200 & 0xFFFF) # ori $t7, $t7, 0x200 -/* 0A12D8 802E1AD8 AD2F0000 */ sw $t7, ($t1) -/* 0A12DC 802E1ADC AD260004 */ sw $a2, %lo(0x80000004)($t1) -/* 0A12E0 802E1AE0 24840008 */ addiu $a0, $a0, 8 -.L80202494: -/* 0A12E4 802E1AE4 10C00012 */ beqz $a2, .L802024E0 -/* 0A12E8 802E1AE8 00801025 */ move $v0, $a0 -/* 0A12EC 802E1AEC 3C0E0800 */ lui $t6, 0x800 -/* 0A12F0 802E1AF0 AC4E0000 */ sw $t6, ($v0) -/* 0A12F4 802E1AF4 24F80200 */ addiu $t8, $a3, 0x200 -/* 0A12F8 802E1AF8 00187C00 */ sll $t7, $t8, 0x10 -/* 0A12FC 802E1AFC 30CEFFFF */ andi $t6, $a2, 0xffff -/* 0A1300 802E1B00 01EEC825 */ or $t9, $t7, $t6 -/* 0A1304 802E1B04 24840008 */ addiu $a0, $a0, 8 -/* 0A1308 802E1B08 AC590004 */ sw $t9, %lo(0x0A000004)($v0) -/* 0A130C 802E1B0C 00801825 */ move $v1, $a0 -/* 0A1310 802E1B10 3C180600 */ lui $t8, 0x600 -/* 0A1314 802E1B14 AC780000 */ sw $t8, ($v1) -/* 0A1318 802E1B18 8E0F000C */ lw $t7, 0xc($s0) -/* 0A131C 802E1B1C 3C018000 */ lui $at, (0x800000B0 >> 16) # lui $at, 0x8000 -/* 0A1320 802E1B20 342100B0 */ ori $at, (0x800000B0 & 0xFFFF) # ori $at, $at, 0xb0 -/* 0A1324 802E1B24 01E17021 */ addu $t6, $t7, $at -/* 0A1328 802E1B28 AC6E0004 */ sw $t6, 4($v1) -/* 0A132C 802E1B2C 24840008 */ addiu $a0, $a0, 8 -.L802024E0: -/* 0A1330 802E1B30 24860008 */ addiu $a2, $a0, 8 -/* 0A1334 802E1B34 3C190800 */ lui $t9, 0x800 -/* 0A1338 802E1B38 AC990000 */ sw $t9, ($a0) -/* 0A133C 802E1B3C AC850004 */ sw $a1, 4($a0) -/* 0A1340 802E1B40 3C180C00 */ lui $t8, (0x0C007FFF >> 16) # lui $t8, 0xc00 -/* 0A1344 802E1B44 314FFFFF */ andi $t7, $t2, 0xffff -/* 0A1348 802E1B48 3C010200 */ lui $at, 0x200 -/* 0A134C 802E1B4C 01E17025 */ or $t6, $t7, $at -/* 0A1350 802E1B50 37187FFF */ ori $t8, (0x0C007FFF & 0xFFFF) # ori $t8, $t8, 0x7fff -/* 0A1354 802E1B54 ACD80000 */ sw $t8, ($a2) -/* 0A1358 802E1B58 ACCE0004 */ sw $t6, 4($a2) -/* 0A135C 802E1B5C 24C20008 */ addiu $v0, $a2, 8 -.L80202510: -/* 0A1360 802E1B60 8FB00004 */ lw $s0, 4($sp) -/* 0A1364 802E1B64 03E00008 */ jr $ra -/* 0A1368 802E1B68 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/asm/non_matchings/eu/audio/prepare_reverb_ring_buffer.s b/asm/non_matchings/eu/audio/prepare_reverb_ring_buffer.s deleted file mode 100644 index 70e5fe0..0000000 --- a/asm/non_matchings/eu/audio/prepare_reverb_ring_buffer.s +++ /dev/null @@ -1,179 +0,0 @@ -glabel prepare_reverb_ring_buffer -/* 09EE50 802DF650 00067140 */ sll $t6, $a2, 5 -/* 09EE54 802DF654 01C67021 */ addu $t6, $t6, $a2 -/* 09EE58 802DF658 3C0F8022 */ lui $t7, %hi(gSynthesisReverbs) # $t7, 0x8022 -/* 09EE5C 802DF65C 25EFC1B0 */ addiu $t7, %lo(gSynthesisReverbs) # addiu $t7, $t7, -0x3e50 -/* 09EE60 802DF660 000E70C0 */ sll $t6, $t6, 3 -/* 09EE64 802DF664 01CF3821 */ addu $a3, $t6, $t7 -/* 09EE68 802DF668 90F80004 */ lbu $t8, 4($a3) -/* 09EE6C 802DF66C 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 09EE70 802DF670 24010001 */ li $at, 1 -/* 09EE74 802DF674 AFBF0014 */ sw $ra, 0x14($sp) -/* 09EE78 802DF678 AFA40040 */ sw $a0, 0x40($sp) -/* 09EE7C 802DF67C 13010062 */ beq $t8, $at, .L802001B8 -/* 09EE80 802DF680 AFA50044 */ sw $a1, 0x44($sp) -/* 09EE84 802DF684 90F90002 */ lbu $t9, 2($a3) -/* 09EE88 802DF688 00056080 */ sll $t4, $a1, 2 -/* 09EE8C 802DF68C 01856021 */ addu $t4, $t4, $a1 -/* 09EE90 802DF690 5720005E */ bnezl $t9, .L802001BC -/* 09EE94 802DF694 90E90004 */ lbu $t1, 4($a3) -/* 09EE98 802DF698 90E80003 */ lbu $t0, 3($a3) -/* 09EE9C 802DF69C 000C6080 */ sll $t4, $t4, 2 -/* 09EEA0 802DF6A0 24050280 */ li $a1, 640 -/* 09EEA4 802DF6A4 00084880 */ sll $t1, $t0, 2 -/* 09EEA8 802DF6A8 01284823 */ subu $t1, $t1, $t0 -/* 09EEAC 802DF6AC 000948C0 */ sll $t1, $t1, 3 -/* 09EEB0 802DF6B0 01284821 */ addu $t1, $t1, $t0 -/* 09EEB4 802DF6B4 00094880 */ sll $t1, $t1, 2 -/* 09EEB8 802DF6B8 00E95021 */ addu $t2, $a3, $t1 -/* 09EEBC 802DF6BC 014C3021 */ addu $a2, $t2, $t4 -/* 09EEC0 802DF6C0 24C60030 */ addiu $a2, $a2, 0x30 -/* 09EEC4 802DF6C4 8CC40004 */ lw $a0, 4($a2) -/* 09EEC8 802DF6C8 AFA70018 */ sw $a3, 0x18($sp) -/* 09EECC 802DF6CC 0C0BC448 */ jal osInvalDCache -/* 09EED0 802DF6D0 AFA6003C */ sw $a2, 0x3c($sp) -/* 09EED4 802DF6D4 8FA6003C */ lw $a2, 0x3c($sp) -/* 09EED8 802DF6D8 8FA70018 */ lw $a3, 0x18($sp) -/* 09EEDC 802DF6DC 00002825 */ move $a1, $zero -/* 09EEE0 802DF6E0 84CD0010 */ lh $t5, 0x10($a2) -/* 09EEE4 802DF6E4 00002025 */ move $a0, $zero -/* 09EEE8 802DF6E8 05A10003 */ bgez $t5, .L802000A8 -/* 09EEEC 802DF6EC 000D7043 */ sra $t6, $t5, 1 -/* 09EEF0 802DF6F0 25A10001 */ addiu $at, $t5, 1 -/* 09EEF4 802DF6F4 00017043 */ sra $t6, $at, 1 -.L802000A8: -/* 09EEF8 802DF6F8 59C00023 */ blezl $t6, .L80200138 -/* 09EEFC 802DF6FC 84CE0012 */ lh $t6, 0x12($a2) -/* 09EF00 802DF700 00001025 */ move $v0, $zero -/* 09EF04 802DF704 8CCF0004 */ lw $t7, 4($a2) -.L802000B8: -/* 09EF08 802DF708 8CC9000C */ lw $t1, 0xc($a2) -/* 09EF0C 802DF70C 8CE80018 */ lw $t0, 0x18($a3) -/* 09EF10 802DF710 00051840 */ sll $v1, $a1, 1 -/* 09EF14 802DF714 01E3C021 */ addu $t8, $t7, $v1 -/* 09EF18 802DF718 87190000 */ lh $t9, ($t8) -/* 09EF1C 802DF71C 00095840 */ sll $t3, $t1, 1 -/* 09EF20 802DF720 010B5021 */ addu $t2, $t0, $t3 -/* 09EF24 802DF724 01426021 */ addu $t4, $t2, $v0 -/* 09EF28 802DF728 A5990000 */ sh $t9, ($t4) -/* 09EF2C 802DF72C 8CCD0008 */ lw $t5, 8($a2) -/* 09EF30 802DF730 8CC9000C */ lw $t1, 0xc($a2) -/* 09EF34 802DF734 8CF8001C */ lw $t8, 0x1c($a3) -/* 09EF38 802DF738 01A37021 */ addu $t6, $t5, $v1 -/* 09EF3C 802DF73C 85CF0000 */ lh $t7, ($t6) -/* 09EF40 802DF740 00094040 */ sll $t0, $t1, 1 -/* 09EF44 802DF744 03085821 */ addu $t3, $t8, $t0 -/* 09EF48 802DF748 01625021 */ addu $t2, $t3, $v0 -/* 09EF4C 802DF74C A54F0000 */ sh $t7, ($t2) -/* 09EF50 802DF750 84CC0010 */ lh $t4, 0x10($a2) -/* 09EF54 802DF754 90F90004 */ lbu $t9, 4($a3) -/* 09EF58 802DF758 24840001 */ addiu $a0, $a0, 1 -/* 09EF5C 802DF75C 24420002 */ addiu $v0, $v0, 2 -/* 09EF60 802DF760 00B92821 */ addu $a1, $a1, $t9 -/* 09EF64 802DF764 05810003 */ bgez $t4, .L80200124 -/* 09EF68 802DF768 000C6843 */ sra $t5, $t4, 1 -/* 09EF6C 802DF76C 25810001 */ addiu $at, $t4, 1 -/* 09EF70 802DF770 00016843 */ sra $t5, $at, 1 -.L80200124: -/* 09EF74 802DF774 008D082A */ slt $at, $a0, $t5 -/* 09EF78 802DF778 5420FFE3 */ bnezl $at, .L802000B8 -/* 09EF7C 802DF77C 8CCF0004 */ lw $t7, 4($a2) -/* 09EF80 802DF780 00002025 */ move $a0, $zero -/* 09EF84 802DF784 84CE0012 */ lh $t6, 0x12($a2) -.L80200138: -/* 09EF88 802DF788 05C10003 */ bgez $t6, .L80200148 -/* 09EF8C 802DF78C 000E4843 */ sra $t1, $t6, 1 -/* 09EF90 802DF790 25C10001 */ addiu $at, $t6, 1 -/* 09EF94 802DF794 00014843 */ sra $t1, $at, 1 -.L80200148: -/* 09EF98 802DF798 5920001C */ blezl $t1, .L802001BC -/* 09EF9C 802DF79C 90E90004 */ lbu $t1, 4($a3) -/* 09EFA0 802DF7A0 00001025 */ move $v0, $zero -/* 09EFA4 802DF7A4 8CD80004 */ lw $t8, 4($a2) -.L80200158: -/* 09EFA8 802DF7A8 00051840 */ sll $v1, $a1, 1 -/* 09EFAC 802DF7AC 8CEF0018 */ lw $t7, 0x18($a3) -/* 09EFB0 802DF7B0 03034021 */ addu $t0, $t8, $v1 -/* 09EFB4 802DF7B4 850B0000 */ lh $t3, ($t0) -/* 09EFB8 802DF7B8 01E25021 */ addu $t2, $t7, $v0 -/* 09EFBC 802DF7BC 24840001 */ addiu $a0, $a0, 1 -/* 09EFC0 802DF7C0 A54B0000 */ sh $t3, ($t2) -/* 09EFC4 802DF7C4 8CD90008 */ lw $t9, 8($a2) -/* 09EFC8 802DF7C8 8CEE001C */ lw $t6, 0x1c($a3) -/* 09EFCC 802DF7CC 03236021 */ addu $t4, $t9, $v1 -/* 09EFD0 802DF7D0 858D0000 */ lh $t5, ($t4) -/* 09EFD4 802DF7D4 01C24821 */ addu $t1, $t6, $v0 -/* 09EFD8 802DF7D8 24420002 */ addiu $v0, $v0, 2 -/* 09EFDC 802DF7DC A52D0000 */ sh $t5, ($t1) -/* 09EFE0 802DF7E0 84C80012 */ lh $t0, 0x12($a2) -/* 09EFE4 802DF7E4 90F80004 */ lbu $t8, 4($a3) -/* 09EFE8 802DF7E8 00B82821 */ addu $a1, $a1, $t8 -/* 09EFEC 802DF7EC 05010003 */ bgez $t0, .L802001AC -/* 09EFF0 802DF7F0 00087843 */ sra $t7, $t0, 1 -/* 09EFF4 802DF7F4 25010001 */ addiu $at, $t0, 1 -/* 09EFF8 802DF7F8 00017843 */ sra $t7, $at, 1 -.L802001AC: -/* 09EFFC 802DF7FC 008F082A */ slt $at, $a0, $t7 -/* 09F000 802DF800 5420FFE9 */ bnezl $at, .L80200158 -/* 09F004 802DF804 8CD80004 */ lw $t8, 4($a2) -.L802001B8: -/* 09F008 802DF808 90E90004 */ lbu $t1, 4($a3) -.L802001BC: -/* 09F00C 802DF80C 8FAD0040 */ lw $t5, 0x40($sp) -/* 09F010 802DF810 90EB0003 */ lbu $t3, 3($a3) -/* 09F014 802DF814 8FAC0044 */ lw $t4, 0x44($sp) -/* 09F018 802DF818 01A9001A */ div $zero, $t5, $t1 -/* 09F01C 802DF81C 000B5080 */ sll $t2, $t3, 2 -/* 09F020 802DF820 8CF8000C */ lw $t8, 0xc($a3) -/* 09F024 802DF824 014B5023 */ subu $t2, $t2, $t3 -/* 09F028 802DF828 8CEF0014 */ lw $t7, 0x14($a3) -/* 09F02C 802DF82C 000A50C0 */ sll $t2, $t2, 3 -/* 09F030 802DF830 00001012 */ mflo $v0 -/* 09F034 802DF834 014B5021 */ addu $t2, $t2, $t3 -/* 09F038 802DF838 000C7080 */ sll $t6, $t4, 2 -/* 09F03C 802DF83C 000A5080 */ sll $t2, $t2, 2 -/* 09F040 802DF840 01CC7021 */ addu $t6, $t6, $t4 -/* 09F044 802DF844 03024021 */ addu $t0, $t8, $v0 -/* 09F048 802DF848 000E7080 */ sll $t6, $t6, 2 -/* 09F04C 802DF84C 00EAC821 */ addu $t9, $a3, $t2 -/* 09F050 802DF850 010F1823 */ subu $v1, $t0, $t7 -/* 09F054 802DF854 032E3021 */ addu $a2, $t9, $t6 -/* 09F058 802DF858 24C60030 */ addiu $a2, $a2, 0x30 -/* 09F05C 802DF85C 15200002 */ bnez $t1, .L80200218 -/* 09F060 802DF860 00000000 */ nop -/* 09F064 802DF864 0007000D */ break 7 -.L80200218: -/* 09F068 802DF868 2401FFFF */ li $at, -1 -/* 09F06C 802DF86C 15210004 */ bne $t1, $at, .L80200230 -/* 09F070 802DF870 3C018000 */ lui $at, 0x8000 -/* 09F074 802DF874 15A10002 */ bne $t5, $at, .L80200230 -/* 09F078 802DF878 00000000 */ nop -/* 09F07C 802DF87C 0006000D */ break 6 -.L80200230: -/* 09F080 802DF880 00437023 */ subu $t6, $v0, $v1 -/* 09F084 802DF884 0461000A */ bgez $v1, .L80200260 -/* 09F088 802DF888 00034840 */ sll $t1, $v1, 1 -/* 09F08C 802DF88C 00025840 */ sll $t3, $v0, 1 -/* 09F090 802DF890 A4CB0010 */ sh $t3, 0x10($a2) -/* 09F094 802DF894 A4C00012 */ sh $zero, 0x12($a2) -/* 09F098 802DF898 8CEA000C */ lw $t2, 0xc($a3) -/* 09F09C 802DF89C ACCA000C */ sw $t2, 0xc($a2) -/* 09F0A0 802DF8A0 8CEC000C */ lw $t4, 0xc($a3) -/* 09F0A4 802DF8A4 0182C821 */ addu $t9, $t4, $v0 -/* 09F0A8 802DF8A8 10000007 */ b .L80200278 -/* 09F0AC 802DF8AC ACF9000C */ sw $t9, 0xc($a3) -.L80200260: -/* 09F0B0 802DF8B0 000E6840 */ sll $t5, $t6, 1 -/* 09F0B4 802DF8B4 A4CD0010 */ sh $t5, 0x10($a2) -/* 09F0B8 802DF8B8 A4C90012 */ sh $t1, 0x12($a2) -/* 09F0BC 802DF8BC 8CF8000C */ lw $t8, 0xc($a3) -/* 09F0C0 802DF8C0 ACD8000C */ sw $t8, 0xc($a2) -/* 09F0C4 802DF8C4 ACE3000C */ sw $v1, 0xc($a3) -.L80200278: -/* 09F0C8 802DF8C8 A4C20000 */ sh $v0, ($a2) -/* 09F0CC 802DF8CC 8FA80040 */ lw $t0, 0x40($sp) -/* 09F0D0 802DF8D0 A4C80002 */ sh $t0, 2($a2) -/* 09F0D4 802DF8D4 8FBF0014 */ lw $ra, 0x14($sp) -/* 09F0D8 802DF8D8 27BD0040 */ addiu $sp, $sp, 0x40 -/* 09F0DC 802DF8DC 03E00008 */ jr $ra -/* 09F0E0 802DF8E0 00000000 */ nop diff --git a/asm/non_matchings/eu/audio/seq_channel_layer_process_script.s b/asm/non_matchings/eu/audio/seq_channel_layer_process_script.s index 5afbfde..7f85ce2 100644 --- a/asm/non_matchings/eu/audio/seq_channel_layer_process_script.s +++ b/asm/non_matchings/eu/audio/seq_channel_layer_process_script.s @@ -516,7 +516,7 @@ glabel L_EU_802E7B6C /* 0A75E4 802E7DE4 91E40006 */ lbu $a0, 6($t7) /* 0A75E8 802E7DE8 02584821 */ addu $t1, $s2, $t8 /* 0A75EC 802E7DEC 01289021 */ addu $s2, $t1, $t0 -/* 0A75F0 802E7DF0 0C0B93EE */ jal func_eu_802e4fb8 +/* 0A75F0 802E7DF0 0C0B93EE */ jal get_drum /* 0A75F4 802E7DF4 324500FF */ andi $a1, $s2, 0xff /* 0A75F8 802E7DF8 14400005 */ bnez $v0, .L80201E20 /* 0A75FC 802E7DFC 24430004 */ addiu $v1, $v0, 4 @@ -575,7 +575,7 @@ glabel L_EU_802E7B6C .L80201EC8: /* 0A76B8 802E7EB8 1080000A */ beqz $a0, .L80201EF4 /* 0A76BC 802E7EBC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A76C0 802E7EC0 0C0B9397 */ jal func_eu_802e4e5c +/* 0A76C0 802E7EC0 0C0B9397 */ jal instrument_get_audio_bank_sound /* 0A76C4 802E7EC4 00C02825 */ move $a1, $a2 /* 0A76C8 802E7EC8 8E2B0048 */ lw $t3, 0x48($s1) /* 0A76CC 802E7ECC 004B6826 */ xor $t5, $v0, $t3 @@ -674,7 +674,7 @@ glabel L_EU_802E7F50 .L80202030: /* 0A7820 802E8020 10800011 */ beqz $a0, .L80202078 /* 0A7824 802E8024 3C038030 */ lui $v1, %hi(gNoteFrequencies) -/* 0A7828 802E8028 0C0B9397 */ jal func_eu_802e4e5c +/* 0A7828 802E8028 0C0B9397 */ jal instrument_get_audio_bank_sound /* 0A782C 802E802C 00000000 */ nop /* 0A7830 802E8030 8E2C0048 */ lw $t4, 0x48($s1) /* 0A7834 802E8034 3C038030 */ lui $v1, %hi(gNoteFrequencies) # $v1, 0x8030 diff --git a/asm/non_matchings/eu/audio/sequence_channel_enable.s b/asm/non_matchings/eu/audio/sequence_channel_enable.s deleted file mode 100644 index 898e3b9..0000000 --- a/asm/non_matchings/eu/audio/sequence_channel_enable.s +++ /dev/null @@ -1,56 +0,0 @@ -glabel sequence_channel_enable -/* 0A6BE8 802E73E8 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0A6BEC 802E73EC 30AE00FF */ andi $t6, $a1, 0xff -/* 0A6BF0 802E73F0 000E7880 */ sll $t7, $t6, 2 -/* 0A6BF4 802E73F4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0A6BF8 802E73F8 AFB30020 */ sw $s3, 0x20($sp) -/* 0A6BFC 802E73FC AFB2001C */ sw $s2, 0x1c($sp) -/* 0A6C00 802E7400 AFB10018 */ sw $s1, 0x18($sp) -/* 0A6C04 802E7404 AFB00014 */ sw $s0, 0x14($sp) -/* 0A6C08 802E7408 AFA5002C */ sw $a1, 0x2c($sp) -/* 0A6C0C 802E740C 008FC021 */ addu $t8, $a0, $t7 -/* 0A6C10 802E7410 8F120030 */ lw $s2, 0x30($t8) -/* 0A6C14 802E7414 3C198023 */ lui $t9, %hi(gSequenceChannelNone) # $t9, 0x8023 -/* 0A6C18 802E7418 27398748 */ addiu $t9, %lo(gSequenceChannelNone) # addiu $t9, $t9, -0x78b8 -/* 0A6C1C 802E741C 1659000A */ bne $s2, $t9, .L80201458 -/* 0A6C20 802E7420 00008025 */ move $s0, $zero -/* 0A6C24 802E7424 3C098022 */ lui $t1, %hi(gSequencePlayers) # $t1, 0x8022 -/* 0A6C28 802E7428 25293D68 */ addiu $t1, %lo(gSequencePlayers) # addiu $t1, $t1, 0x3d68 -/* 0A6C2C 802E742C 10890019 */ beq $a0, $t1, .L802014A4 -/* 0A6C30 802E7430 3C0A8022 */ lui $t2, %hi(gSequencePlayers + 0x148) # $t2, 0x8022 -/* 0A6C34 802E7434 254A3EB0 */ addiu $t2, %lo(gSequencePlayers + 0x148) # addiu $t2, $t2, 0x3eb0 -/* 0A6C38 802E7438 548A0017 */ bnel $a0, $t2, .L802014A8 -/* 0A6C3C 802E743C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A6C40 802E7440 10000015 */ b .L802014A8 -/* 0A6C44 802E7444 8FBF0024 */ lw $ra, 0x24($sp) -.L80201458: -/* 0A6C48 802E7448 924C0000 */ lbu $t4, ($s2) -/* 0A6C4C 802E744C A2400078 */ sb $zero, 0x78($s2) -/* 0A6C50 802E7450 AE460060 */ sw $a2, 0x60($s2) -/* 0A6C54 802E7454 358E0080 */ ori $t6, $t4, 0x80 -/* 0A6C58 802E7458 A24E0000 */ sb $t6, ($s2) -/* 0A6C5C 802E745C 31CF00BF */ andi $t7, $t6, 0xbf -/* 0A6C60 802E7460 A24F0000 */ sb $t7, ($s2) -/* 0A6C64 802E7464 A640001A */ sh $zero, 0x1a($s2) -/* 0A6C68 802E7468 02408825 */ move $s1, $s2 -/* 0A6C6C 802E746C 24130004 */ li $s3, 4 -.L80201480: -/* 0A6C70 802E7470 8E380048 */ lw $t8, 0x48($s1) -/* 0A6C74 802E7474 02402025 */ move $a0, $s2 -/* 0A6C78 802E7478 53000004 */ beql $t8, $zero, .L8020149C -/* 0A6C7C 802E747C 26100001 */ addiu $s0, $s0, 1 -/* 0A6C80 802E7480 0C0B9C2D */ jal seq_channel_layer_free -/* 0A6C84 802E7484 02002825 */ move $a1, $s0 -/* 0A6C88 802E7488 26100001 */ addiu $s0, $s0, 1 -.L8020149C: -/* 0A6C8C 802E748C 1613FFF8 */ bne $s0, $s3, .L80201480 -/* 0A6C90 802E7490 26310004 */ addiu $s1, $s1, 4 -.L802014A4: -/* 0A6C94 802E7494 8FBF0024 */ lw $ra, 0x24($sp) -.L802014A8: -/* 0A6C98 802E7498 8FB00014 */ lw $s0, 0x14($sp) -/* 0A6C9C 802E749C 8FB10018 */ lw $s1, 0x18($sp) -/* 0A6CA0 802E74A0 8FB2001C */ lw $s2, 0x1c($sp) -/* 0A6CA4 802E74A4 8FB30020 */ lw $s3, 0x20($sp) -/* 0A6CA8 802E74A8 03E00008 */ jr $ra -/* 0A6CAC 802E74AC 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/asm/non_matchings/eu/audio/sequence_player_process_sequence.s b/asm/non_matchings/eu/audio/sequence_player_process_sequence.s deleted file mode 100644 index 1d8440b..0000000 --- a/asm/non_matchings/eu/audio/sequence_player_process_sequence.s +++ /dev/null @@ -1,698 +0,0 @@ -.late_rodata -.late_rodata_alignment 4 -glabel jtbl_EU_80306AD4 - .word L_EU_802E9530 - .word L_EU_802E9520, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9510 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9500 - .word L_EU_802E94D4, L_EU_802E94D4 - .word L_EU_802E94C4, L_EU_802E94B4 - .word L_EU_802E9488, L_EU_802E946C - .word L_EU_802E9450, L_EU_802E9024 - .word L_EU_802E9424, L_EU_802E9310 - .word L_EU_802E938C, L_EU_802E928C - .word L_EU_802E928C, L_EU_802E926C - .word L_EU_802E9268, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9258 - .word L_EU_802E9230, L_EU_802E91E8 - .word L_EU_802E91E8, L_EU_802E91E8 - .word L_EU_802E9190, L_EU_802E9024 - .word L_EU_802E9148, L_EU_802E9110 - .word L_EU_802E9190, L_EU_802E9190 - .word L_EU_802E9190, L_EU_802E90CC - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024 - -glabel jtbl_EU_80306BB4 - .word L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E95C0 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E95CC - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E95D4 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E95DC - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - .word L_EU_802E9024, L_EU_802E9024 - -.text -glabel sequence_player_process_sequence -/* 0A85E4 802E8DE4 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0A85E8 802E8DE8 AFBF002C */ sw $ra, 0x2c($sp) -/* 0A85EC 802E8DEC AFB30028 */ sw $s3, 0x28($sp) -/* 0A85F0 802E8DF0 AFB20024 */ sw $s2, 0x24($sp) -/* 0A85F4 802E8DF4 AFB10020 */ sw $s1, 0x20($sp) -/* 0A85F8 802E8DF8 AFB0001C */ sw $s0, 0x1c($sp) -/* 0A85FC 802E8DFC 8C820000 */ lw $v0, ($a0) -/* 0A8600 802E8E00 00808825 */ move $s1, $a0 -/* 0A8604 802E8E04 24010001 */ li $at, 1 -/* 0A8608 802E8E08 000277C2 */ srl $t6, $v0, 0x1f -/* 0A860C 802E8E0C 11C00212 */ beqz $t6, .L080201458 -/* 0A8610 802E8E10 00027900 */ sll $t7, $v0, 4 -/* 0A8614 802E8E14 000FC7C2 */ srl $t8, $t7, 0x1f -/* 0A8618 802E8E18 17010039 */ bne $t8, $at, .L080200D00 -/* 0A861C 802E8E1C 000268C0 */ sll $t5, $v0, 3 -/* 0A8620 802E8E20 24900108 */ addiu $s0, $a0, 0x108 -/* 0A8624 802E8E24 02002025 */ move $a0, $s0 -/* 0A8628 802E8E28 00002825 */ move $a1, $zero -/* 0A862C 802E8E2C 0C0BBDE0 */ jal osRecvMesg -/* 0A8630 802E8E30 00003025 */ move $a2, $zero -/* 0A8634 802E8E34 2401FFFF */ li $at, -1 -/* 0A8638 802E8E38 50410208 */ beql $v0, $at, .L08020145C -/* 0A863C 802E8E3C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0A8640 802E8E40 8E390144 */ lw $t9, 0x144($s1) -/* 0A8644 802E8E44 3C128023 */ lui $s2, %hi(gCtlEntries) # $s2, 0x8023 -/* 0A8648 802E8E48 265297D8 */ addiu $s2, %lo(gCtlEntries) # addiu $s2, $s2, -0x6828 -/* 0A864C 802E8E4C 57200024 */ bnezl $t9, .L080200CE0 -/* 0A8650 802E8E50 262C0124 */ addiu $t4, $s1, 0x124 -/* 0A8654 802E8E54 92220006 */ lbu $v0, 6($s1) -/* 0A8658 802E8E58 2413000C */ li $s3, 12 -/* 0A865C 802E8E5C 92280000 */ lbu $t0, ($s1) -/* 0A8660 802E8E60 00530019 */ multu $v0, $s3 -/* 0A8664 802E8E64 3C0C8023 */ lui $t4, %hi(gAlTbl) # $t4, 0x8023 -/* 0A8668 802E8E68 3109FFF7 */ andi $t1, $t0, 0xfff7 -/* 0A866C 802E8E6C A2290000 */ sb $t1, ($s1) -/* 0A8670 802E8E70 8E4A0000 */ lw $t2, ($s2) -/* 0A8674 802E8E74 8D8C97CC */ lw $t4, %lo(gAlTbl)($t4) -/* 0A8678 802E8E78 000268C0 */ sll $t5, $v0, 3 -/* 0A867C 802E8E7C 018D7021 */ addu $t6, $t4, $t5 -/* 0A8680 802E8E80 8DC50004 */ lw $a1, 4($t6) -/* 0A8684 802E8E84 00005812 */ mflo $t3 -/* 0A8688 802E8E88 014B8021 */ addu $s0, $t2, $t3 -/* 0A868C 802E8E8C 8E040004 */ lw $a0, 4($s0) -/* 0A8690 802E8E90 92060001 */ lbu $a2, 1($s0) -/* 0A8694 802E8E94 92070002 */ lbu $a3, 2($s0) -/* 0A8698 802E8E98 0C0B8F0E */ jal patch_audio_bank -/* 0A869C 802E8E9C 2484FFFC */ addiu $a0, $a0, -4 -/* 0A86A0 802E8EA0 92380006 */ lbu $t8, 6($s1) -/* 0A86A4 802E8EA4 8E4F0000 */ lw $t7, ($s2) -/* 0A86A8 802E8EA8 3C038022 */ lui $v1, %hi(gBankLoadStatus) # $v1, 0x8022 -/* 0A86AC 802E8EAC 03130019 */ multu $t8, $s3 -/* 0A86B0 802E8EB0 24632C18 */ addiu $v1, %lo(gBankLoadStatus) # addiu $v1, $v1, 0x2c18 -/* 0A86B4 802E8EB4 24040002 */ li $a0, 2 -/* 0A86B8 802E8EB8 0000C812 */ mflo $t9 -/* 0A86BC 802E8EBC 01F98021 */ addu $s0, $t7, $t9 -/* 0A86C0 802E8EC0 8E080004 */ lw $t0, 4($s0) -/* 0A86C4 802E8EC4 8D09FFFC */ lw $t1, -4($t0) -/* 0A86C8 802E8EC8 AE090008 */ sw $t1, 8($s0) -/* 0A86CC 802E8ECC 922A0006 */ lbu $t2, 6($s1) -/* 0A86D0 802E8ED0 006A5821 */ addu $t3, $v1, $t2 -/* 0A86D4 802E8ED4 100001E0 */ b .L080201458 -/* 0A86D8 802E8ED8 A1640000 */ sb $a0, ($t3) -/* 0A86DC 802E8EDC 262C0124 */ addiu $t4, $s1, 0x124 -.L080200CE0: -/* 0A86E0 802E8EE0 AFAC0010 */ sw $t4, 0x10($sp) -/* 0A86E4 802E8EE4 26240140 */ addiu $a0, $s1, 0x140 -/* 0A86E8 802E8EE8 2625013C */ addiu $a1, $s1, 0x13c -/* 0A86EC 802E8EEC 26260144 */ addiu $a2, $s1, 0x144 -/* 0A86F0 802E8EF0 0C0B8CEA */ jal audio_dma_partial_copy_async -/* 0A86F4 802E8EF4 02003825 */ move $a3, $s0 -/* 0A86F8 802E8EF8 100001D8 */ b .L08020145C -/* 0A86FC 802E8EFC 8FBF002C */ lw $ra, 0x2c($sp) -.L080200D00: -/* 0A8700 802E8F00 000D77C2 */ srl $t6, $t5, 0x1f -/* 0A8704 802E8F04 24010001 */ li $at, 1 -/* 0A8708 802E8F08 15C1000E */ bne $t6, $at, .L080200D44 -/* 0A870C 802E8F0C 262400D4 */ addiu $a0, $s1, 0xd4 -/* 0A8710 802E8F10 00002825 */ move $a1, $zero -/* 0A8714 802E8F14 0C0BBDE0 */ jal osRecvMesg -/* 0A8718 802E8F18 00003025 */ move $a2, $zero -/* 0A871C 802E8F1C 2401FFFF */ li $at, -1 -/* 0A8720 802E8F20 104101CD */ beq $v0, $at, .L080201458 -/* 0A8724 802E8F24 24040002 */ li $a0, 2 -/* 0A8728 802E8F28 92380000 */ lbu $t8, ($s1) -/* 0A872C 802E8F2C 92390004 */ lbu $t9, 4($s1) -/* 0A8730 802E8F30 3C018022 */ lui $at, %hi(gSeqLoadStatus) -/* 0A8734 802E8F34 330FFFEF */ andi $t7, $t8, 0xffef -/* 0A8738 802E8F38 A22F0000 */ sb $t7, ($s1) -/* 0A873C 802E8F3C 00390821 */ addu $at, $at, $t9 -/* 0A8740 802E8F40 A0242C58 */ sb $a0, %lo(gSeqLoadStatus)($at) -.L080200D44: -/* 0A8744 802E8F44 92280004 */ lbu $t0, 4($s1) -/* 0A8748 802E8F48 3C098022 */ lui $t1, %hi(gSeqLoadStatus) # $t1, 0x8022 -/* 0A874C 802E8F4C 25292C58 */ addiu $t1, %lo(gSeqLoadStatus) # addiu $t1, $t1, 0x2c58 -/* 0A8750 802E8F50 01091021 */ addu $v0, $t0, $t1 -/* 0A8754 802E8F54 904A0000 */ lbu $t2, ($v0) -/* 0A8758 802E8F58 24040002 */ li $a0, 2 -/* 0A875C 802E8F5C 294B0002 */ slti $t3, $t2, 2 -/* 0A8760 802E8F60 15600009 */ bnez $t3, .L080200D88 -/* 0A8764 802E8F64 00000000 */ nop -/* 0A8768 802E8F68 922C0005 */ lbu $t4, 5($s1) -/* 0A876C 802E8F6C 3C038022 */ lui $v1, %hi(gBankLoadStatus) # $v1, 0x8022 -/* 0A8770 802E8F70 24632C18 */ addiu $v1, %lo(gBankLoadStatus) # addiu $v1, $v1, 0x2c18 -/* 0A8774 802E8F74 006C6821 */ addu $t5, $v1, $t4 -/* 0A8778 802E8F78 91AE0000 */ lbu $t6, ($t5) -/* 0A877C 802E8F7C 29D80002 */ slti $t8, $t6, 2 -/* 0A8780 802E8F80 53000006 */ beql $t8, $zero, .L080200D9C -/* 0A8784 802E8F84 A0440000 */ sb $a0, ($v0) -.L080200D88: -/* 0A8788 802E8F88 0C0B9D2C */ jal sequence_player_disable -/* 0A878C 802E8F8C 02202025 */ move $a0, $s1 -/* 0A8790 802E8F90 100001B2 */ b .L08020145C -/* 0A8794 802E8F94 8FBF002C */ lw $ra, 0x2c($sp) -/* 0A8798 802E8F98 A0440000 */ sb $a0, ($v0) -.L080200D9C: -/* 0A879C 802E8F9C 922F0005 */ lbu $t7, 5($s1) -/* 0A87A0 802E8FA0 006FC821 */ addu $t9, $v1, $t7 -/* 0A87A4 802E8FA4 A3240000 */ sb $a0, ($t9) -/* 0A87A8 802E8FA8 8E280000 */ lw $t0, ($s1) -/* 0A87AC 802E8FAC 00085080 */ sll $t2, $t0, 2 -/* 0A87B0 802E8FB0 05430006 */ bgezl $t2, .L080200DCC -/* 0A87B4 802E8FB4 962D000A */ lhu $t5, 0xa($s1) -/* 0A87B8 802E8FB8 922B0003 */ lbu $t3, 3($s1) -/* 0A87BC 802E8FBC 316C0080 */ andi $t4, $t3, 0x80 -/* 0A87C0 802E8FC0 558001A6 */ bnezl $t4, .L08020145C -/* 0A87C4 802E8FC4 8FBF002C */ lw $ra, 0x2c($sp) -/* 0A87C8 802E8FC8 962D000A */ lhu $t5, 0xa($s1) -.L080200DCC: -/* 0A87CC 802E8FCC 962E0008 */ lhu $t6, 8($s1) -/* 0A87D0 802E8FD0 3C038023 */ lui $v1, %hi(gTempoInternalToExternal) # $v1, 0x8023 -/* 0A87D4 802E8FD4 01AEC021 */ addu $t8, $t5, $t6 -/* 0A87D8 802E8FD8 A638000A */ sh $t8, 0xa($s1) -/* 0A87DC 802E8FDC 8463980C */ lh $v1, %lo(gTempoInternalToExternal)($v1) -/* 0A87E0 802E8FE0 3302FFFF */ andi $v0, $t8, 0xffff -/* 0A87E4 802E8FE4 0043082A */ slt $at, $v0, $v1 -/* 0A87E8 802E8FE8 5420019C */ bnezl $at, .L08020145C -/* 0A87EC 802E8FEC 8FBF002C */ lw $ra, 0x2c($sp) -/* 0A87F0 802E8FF0 9624000E */ lhu $a0, 0xe($s1) -/* 0A87F4 802E8FF4 0043C823 */ subu $t9, $v0, $v1 -/* 0A87F8 802E8FF8 A639000A */ sh $t9, 0xa($s1) -/* 0A87FC 802E8FFC 28810002 */ slti $at, $a0, 2 -/* 0A8800 802E9000 14200003 */ bnez $at, .L080200E10 -/* 0A8804 802E9004 2488FFFF */ addiu $t0, $a0, -1 -/* 0A8808 802E9008 10000180 */ b .L08020140C -/* 0A880C 802E900C A628000E */ sh $t0, 0xe($s1) -.L080200E10: -/* 0A8810 802E9010 922A0000 */ lbu $t2, ($s1) -/* 0A8814 802E9014 26300070 */ addiu $s0, $s1, 0x70 -/* 0A8818 802E9018 354B0004 */ ori $t3, $t2, 4 -/* 0A881C 802E901C A22B0000 */ sb $t3, ($s1) -/* 0A8820 802E9020 8FB30058 */ lw $s3, 0x58($sp) -glabel L_EU_802E9024 -.L_EU_802E9024: -/* 0A8824 802E9024 0C0B9DA0 */ jal m64_read_u8 -/* 0A8828 802E9028 02002025 */ move $a0, $s0 -/* 0A882C 802E902C 240100FF */ li $at, 255 -/* 0A8830 802E9030 1441000E */ bne $v0, $at, .L080200E6C -/* 0A8834 802E9034 305200FF */ andi $s2, $v0, 0xff -/* 0A8838 802E9038 92040018 */ lbu $a0, 0x18($s0) -/* 0A883C 802E903C 14800005 */ bnez $a0, .L080200E54 -/* 0A8840 802E9040 2483FFFF */ addiu $v1, $a0, -1 -/* 0A8844 802E9044 0C0B9D2C */ jal sequence_player_disable -/* 0A8848 802E9048 02202025 */ move $a0, $s1 -/* 0A884C 802E904C 1000016F */ b .L08020140C -/* 0A8850 802E9050 00000000 */ nop -.L080200E54: -/* 0A8854 802E9054 306C00FF */ andi $t4, $v1, 0xff -/* 0A8858 802E9058 000C6880 */ sll $t5, $t4, 2 -/* 0A885C 802E905C 020D7021 */ addu $t6, $s0, $t5 -/* 0A8860 802E9060 A20C0018 */ sb $t4, 0x18($s0) -/* 0A8864 802E9064 8DD80004 */ lw $t8, 4($t6) -/* 0A8868 802E9068 AE180000 */ sw $t8, ($s0) -.L080200E6C: -/* 0A886C 802E906C 304300FF */ andi $v1, $v0, 0xff -/* 0A8870 802E9070 240100FD */ li $at, 253 -/* 0A8874 802E9074 14610005 */ bne $v1, $at, .L080200E8C -/* 0A8878 802E9078 306200F0 */ andi $v0, $v1, 0xf0 -/* 0A887C 802E907C 0C0B9DB1 */ jal m64_read_compressed_u16 -/* 0A8880 802E9080 02002025 */ move $a0, $s0 -/* 0A8884 802E9084 10000161 */ b .L08020140C -/* 0A8888 802E9088 A622000E */ sh $v0, 0xe($s1) -.L080200E8C: -/* 0A888C 802E908C 240100FE */ li $at, 254 -/* 0A8890 802E9090 14610004 */ bne $v1, $at, .L080200EA4 -/* 0A8894 802E9094 2479FF38 */ addiu $t9, $v1, -0xc8 -/* 0A8898 802E9098 240F0001 */ li $t7, 1 -/* 0A889C 802E909C 1000015B */ b .L08020140C -/* 0A88A0 802E90A0 A62F000E */ sh $t7, 0xe($s1) -.L080200EA4: -/* 0A88A4 802E90A4 286100C0 */ slti $at, $v1, 0xc0 -/* 0A88A8 802E90A8 14200125 */ bnez $at, .L080201340 -/* 0A88AC 802E90AC 2F210038 */ sltiu $at, $t9, 0x38 -/* 0A88B0 802E90B0 1020FFDC */ beqz $at, .L_EU_802E9024 -/* 0A88B4 802E90B4 0019C880 */ sll $t9, $t9, 2 -/* 0A88B8 802E90B8 3C018030 */ lui $at, %hi(jtbl_EU_80306AD4) -/* 0A88BC 802E90BC 00390821 */ addu $at, $at, $t9 -/* 0A88C0 802E90C0 8C396AD4 */ lw $t9, %lo(jtbl_EU_80306AD4)($at) -/* 0A88C4 802E90C4 03200008 */ jr $t9 -/* 0A88C8 802E90C8 00000000 */ nop -glabel L_EU_802E90CC -/* 0A88CC 802E90CC 0C0B9DA5 */ jal m64_read_s16 -/* 0A88D0 802E90D0 02002025 */ move $a0, $s0 -/* 0A88D4 802E90D4 92090018 */ lbu $t1, 0x18($s0) -/* 0A88D8 802E90D8 8E080000 */ lw $t0, ($s0) -/* 0A88DC 802E90DC 3058FFFF */ andi $t8, $v0, 0xffff -/* 0A88E0 802E90E0 00095080 */ sll $t2, $t1, 2 -/* 0A88E4 802E90E4 020A5821 */ addu $t3, $s0, $t2 -/* 0A88E8 802E90E8 AD680004 */ sw $t0, 4($t3) -/* 0A88EC 802E90EC 920C0018 */ lbu $t4, 0x18($s0) -/* 0A88F0 802E90F0 258D0001 */ addiu $t5, $t4, 1 -/* 0A88F4 802E90F4 A20D0018 */ sb $t5, 0x18($s0) -/* 0A88F8 802E90F8 8E2E0014 */ lw $t6, 0x14($s1) -/* 0A88FC 802E90FC 01D87821 */ addu $t7, $t6, $t8 -/* 0A8900 802E9100 1000FFC8 */ b .L_EU_802E9024 -/* 0A8904 802E9104 AE0F0000 */ sw $t7, ($s0) -/* 0A8908 802E9108 1000FFC6 */ b .L_EU_802E9024 -/* 0A890C 802E910C 00000000 */ nop -glabel L_EU_802E9110 -/* 0A8910 802E9110 0C0B9DA0 */ jal m64_read_u8 -/* 0A8914 802E9114 02002025 */ move $a0, $s0 -/* 0A8918 802E9118 92190018 */ lbu $t9, 0x18($s0) -/* 0A891C 802E911C 02194821 */ addu $t1, $s0, $t9 -/* 0A8920 802E9120 A1220014 */ sb $v0, 0x14($t1) -/* 0A8924 802E9124 92080018 */ lbu $t0, 0x18($s0) -/* 0A8928 802E9128 8E0A0000 */ lw $t2, ($s0) -/* 0A892C 802E912C 00085880 */ sll $t3, $t0, 2 -/* 0A8930 802E9130 020B6021 */ addu $t4, $s0, $t3 -/* 0A8934 802E9134 AD8A0004 */ sw $t2, 4($t4) -/* 0A8938 802E9138 920D0018 */ lbu $t5, 0x18($s0) -/* 0A893C 802E913C 25AE0001 */ addiu $t6, $t5, 1 -/* 0A8940 802E9140 1000FFB8 */ b .L_EU_802E9024 -/* 0A8944 802E9144 A20E0018 */ sb $t6, 0x18($s0) -glabel L_EU_802E9148 -/* 0A8948 802E9148 92180018 */ lbu $t8, 0x18($s0) -/* 0A894C 802E914C 02181021 */ addu $v0, $s0, $t8 -/* 0A8950 802E9150 904F0013 */ lbu $t7, 0x13($v0) -/* 0A8954 802E9154 25F9FFFF */ addiu $t9, $t7, -1 -/* 0A8958 802E9158 A0590013 */ sb $t9, 0x13($v0) -/* 0A895C 802E915C 92040018 */ lbu $a0, 0x18($s0) -/* 0A8960 802E9160 02044821 */ addu $t1, $s0, $a0 -/* 0A8964 802E9164 91280013 */ lbu $t0, 0x13($t1) -/* 0A8968 802E9168 00801825 */ move $v1, $a0 -/* 0A896C 802E916C 00035880 */ sll $t3, $v1, 2 -/* 0A8970 802E9170 11000005 */ beqz $t0, .L080200F88 -/* 0A8974 802E9174 248DFFFF */ addiu $t5, $a0, -1 -/* 0A8978 802E9178 020B5021 */ addu $t2, $s0, $t3 -/* 0A897C 802E917C 8D4C0000 */ lw $t4, ($t2) -/* 0A8980 802E9180 1000FFA8 */ b .L_EU_802E9024 -/* 0A8984 802E9184 AE0C0000 */ sw $t4, ($s0) -.L080200F88: -/* 0A8988 802E9188 1000FFA6 */ b .L_EU_802E9024 -/* 0A898C 802E918C A20D0018 */ sb $t5, 0x18($s0) -glabel L_EU_802E9190 -/* 0A8990 802E9190 0C0B9DA5 */ jal m64_read_s16 -/* 0A8994 802E9194 02002025 */ move $a0, $s0 -/* 0A8998 802E9198 240100FA */ li $at, 250 -/* 0A899C 802E919C 16410003 */ bne $s2, $at, .L080200FAC -/* 0A89A0 802E91A0 02401825 */ move $v1, $s2 -/* 0A89A4 802E91A4 1660FF9F */ bnez $s3, .L_EU_802E9024 -/* 0A89A8 802E91A8 00000000 */ nop -.L080200FAC: -/* 0A89AC 802E91AC 240100F9 */ li $at, 249 -/* 0A89B0 802E91B0 54610004 */ bnel $v1, $at, .L080200FC4 -/* 0A89B4 802E91B4 240100F5 */ li $at, 245 -/* 0A89B8 802E91B8 0661FF9A */ bgez $s3, .L_EU_802E9024 -/* 0A89BC 802E91BC 00000000 */ nop -/* 0A89C0 802E91C0 240100F5 */ li $at, 245 -.L080200FC4: -/* 0A89C4 802E91C4 54610004 */ bnel $v1, $at, .L080200FD8 -/* 0A89C8 802E91C8 8E2E0014 */ lw $t6, 0x14($s1) -/* 0A89CC 802E91CC 0660FF95 */ bltz $s3, .L_EU_802E9024 -/* 0A89D0 802E91D0 00000000 */ nop -/* 0A89D4 802E91D4 8E2E0014 */ lw $t6, 0x14($s1) -.L080200FD8: -/* 0A89D8 802E91D8 3058FFFF */ andi $t8, $v0, 0xffff -/* 0A89DC 802E91DC 01D87821 */ addu $t7, $t6, $t8 -/* 0A89E0 802E91E0 1000FF90 */ b .L_EU_802E9024 -/* 0A89E4 802E91E4 AE0F0000 */ sw $t7, ($s0) -glabel L_EU_802E91E8 -/* 0A89E8 802E91E8 0C0B9DA0 */ jal m64_read_u8 -/* 0A89EC 802E91EC 02002025 */ move $a0, $s0 -/* 0A89F0 802E91F0 240100F3 */ li $at, 243 -/* 0A89F4 802E91F4 16410003 */ bne $s2, $at, .L080201004 -/* 0A89F8 802E91F8 02401825 */ move $v1, $s2 -/* 0A89FC 802E91FC 1660FF89 */ bnez $s3, .L_EU_802E9024 -/* 0A8A00 802E9200 00000000 */ nop -.L080201004: -/* 0A8A04 802E9204 240100F2 */ li $at, 242 -/* 0A8A08 802E9208 54610004 */ bnel $v1, $at, .L08020101C -/* 0A8A0C 802E920C 8E190000 */ lw $t9, ($s0) -/* 0A8A10 802E9210 0661FF84 */ bgez $s3, .L_EU_802E9024 -/* 0A8A14 802E9214 00000000 */ nop -/* 0A8A18 802E9218 8E190000 */ lw $t9, ($s0) -.L08020101C: -/* 0A8A1C 802E921C 00024E00 */ sll $t1, $v0, 0x18 -/* 0A8A20 802E9220 00094603 */ sra $t0, $t1, 0x18 -/* 0A8A24 802E9224 03285821 */ addu $t3, $t9, $t0 -/* 0A8A28 802E9228 1000FF7E */ b .L_EU_802E9024 -/* 0A8A2C 802E922C AE0B0000 */ sw $t3, ($s0) -glabel L_EU_802E9230 -/* 0A8A30 802E9230 26240094 */ addiu $a0, $s1, 0x94 -/* 0A8A34 802E9234 0C0B9671 */ jal note_pool_clear -/* 0A8A38 802E9238 AFA40038 */ sw $a0, 0x38($sp) -/* 0A8A3C 802E923C 0C0B9DA0 */ jal m64_read_u8 -/* 0A8A40 802E9240 02002025 */ move $a0, $s0 -/* 0A8A44 802E9244 8FA40038 */ lw $a0, 0x38($sp) -/* 0A8A48 802E9248 0C0B96C9 */ jal note_pool_fill -/* 0A8A4C 802E924C 00402825 */ move $a1, $v0 -/* 0A8A50 802E9250 1000FF74 */ b .L_EU_802E9024 -/* 0A8A54 802E9254 00000000 */ nop -glabel L_EU_802E9258 -/* 0A8A58 802E9258 0C0B9671 */ jal note_pool_clear -/* 0A8A5C 802E925C 26240094 */ addiu $a0, $s1, 0x94 -/* 0A8A60 802E9260 1000FF70 */ b .L_EU_802E9024 -/* 0A8A64 802E9264 00000000 */ nop -glabel L_EU_802E9268 -/* 0A8A68 802E9268 A620000C */ sh $zero, 0xc($s1) -glabel L_EU_802E926C -/* 0A8A6C 802E926C 0C0B9DA0 */ jal m64_read_u8 -/* 0A8A70 802E9270 02002025 */ move $a0, $s0 -/* 0A8A74 802E9274 862A000C */ lh $t2, 0xc($s1) -/* 0A8A78 802E9278 00026600 */ sll $t4, $v0, 0x18 -/* 0A8A7C 802E927C 000C6E03 */ sra $t5, $t4, 0x18 -/* 0A8A80 802E9280 014D7021 */ addu $t6, $t2, $t5 -/* 0A8A84 802E9284 1000FF67 */ b .L_EU_802E9024 -/* 0A8A88 802E9288 A62E000C */ sh $t6, 0xc($s1) -glabel L_EU_802E928C -/* 0A8A8C 802E928C 0C0B9DA0 */ jal m64_read_u8 -/* 0A8A90 802E9290 02002025 */ move $a0, $s0 -/* 0A8A94 802E9294 240100DD */ li $at, 221 -/* 0A8A98 802E9298 16410007 */ bne $s2, $at, .L0802010B8 -/* 0A8A9C 802E929C 3C038023 */ lui $v1, %hi(gTempoInternalToExternal) # $v1, 0x8023 -/* 0A8AA0 802E92A0 305800FF */ andi $t8, $v0, 0xff -/* 0A8AA4 802E92A4 00187880 */ sll $t7, $t8, 2 -/* 0A8AA8 802E92A8 01F87823 */ subu $t7, $t7, $t8 -/* 0A8AAC 802E92AC 000F7900 */ sll $t7, $t7, 4 -/* 0A8AB0 802E92B0 10000009 */ b .L0802010D8 -/* 0A8AB4 802E92B4 A62F0008 */ sh $t7, 8($s1) -.L0802010B8: -/* 0A8AB8 802E92B8 0002CE00 */ sll $t9, $v0, 0x18 -/* 0A8ABC 802E92BC 00194603 */ sra $t0, $t9, 0x18 -/* 0A8AC0 802E92C0 96290008 */ lhu $t1, 8($s1) -/* 0A8AC4 802E92C4 00085880 */ sll $t3, $t0, 2 -/* 0A8AC8 802E92C8 01685823 */ subu $t3, $t3, $t0 -/* 0A8ACC 802E92CC 000B5900 */ sll $t3, $t3, 4 -/* 0A8AD0 802E92D0 012B6021 */ addu $t4, $t1, $t3 -/* 0A8AD4 802E92D4 A62C0008 */ sh $t4, 8($s1) -.L0802010D8: -/* 0A8AD8 802E92D8 8463980C */ lh $v1, %lo(gTempoInternalToExternal)($v1) -/* 0A8ADC 802E92DC 96220008 */ lhu $v0, 8($s1) -/* 0A8AE0 802E92E0 240E0001 */ li $t6, 1 -/* 0A8AE4 802E92E4 0062082A */ slt $at, $v1, $v0 -/* 0A8AE8 802E92E8 50200004 */ beql $at, $zero, .L0802010FC -/* 0A8AEC 802E92EC 00025400 */ sll $t2, $v0, 0x10 -/* 0A8AF0 802E92F0 A6230008 */ sh $v1, 8($s1) -/* 0A8AF4 802E92F4 3062FFFF */ andi $v0, $v1, 0xffff -/* 0A8AF8 802E92F8 00025400 */ sll $t2, $v0, 0x10 -.L0802010FC: -/* 0A8AFC 802E92FC 000A6C03 */ sra $t5, $t2, 0x10 -/* 0A8B00 802E9300 1DA0FF48 */ bgtz $t5, .L_EU_802E9024 -/* 0A8B04 802E9304 00000000 */ nop -/* 0A8B08 802E9308 1000FF46 */ b .L_EU_802E9024 -/* 0A8B0C 802E930C A62E0008 */ sh $t6, 8($s1) -glabel L_EU_802E9310 -/* 0A8B10 802E9310 0C0B9DA0 */ jal m64_read_u8 -/* 0A8B14 802E9314 02002025 */ move $a0, $s0 -/* 0A8B18 802E9318 305200FF */ andi $s2, $v0, 0xff -/* 0A8B1C 802E931C 0C0B9DA5 */ jal m64_read_s16 -/* 0A8B20 802E9320 02002025 */ move $a0, $s0 -/* 0A8B24 802E9324 12400008 */ beqz $s2, .L080201148 -/* 0A8B28 802E9328 02401825 */ move $v1, $s2 -/* 0A8B2C 802E932C 24010001 */ li $at, 1 -/* 0A8B30 802E9330 10610005 */ beq $v1, $at, .L080201148 -/* 0A8B34 802E9334 24010002 */ li $at, 2 -/* 0A8B38 802E9338 1061000A */ beq $v1, $at, .L080201164 -/* 0A8B3C 802E933C 304FFFFF */ andi $t7, $v0, 0xffff -/* 0A8B40 802E9340 1000FF38 */ b .L_EU_802E9024 -/* 0A8B44 802E9344 00000000 */ nop -.L080201148: -/* 0A8B48 802E9348 92380001 */ lbu $t8, 1($s1) -/* 0A8B4C 802E934C 24010002 */ li $at, 2 -/* 0A8B50 802E9350 1301FF34 */ beq $t8, $at, .L_EU_802E9024 -/* 0A8B54 802E9354 00000000 */ nop -/* 0A8B58 802E9358 A6220012 */ sh $v0, 0x12($s1) -/* 0A8B5C 802E935C 1000FF31 */ b .L_EU_802E9024 -/* 0A8B60 802E9360 A2320001 */ sb $s2, 1($s1) -.L080201164: -/* 0A8B64 802E9364 448F5000 */ mtc1 $t7, $f10 -/* 0A8B68 802E9368 44802000 */ mtc1 $zero, $f4 -/* 0A8B6C 802E936C C6260018 */ lwc1 $f6, 0x18($s1) -/* 0A8B70 802E9370 46805420 */ cvt.s.w $f16, $f10 -/* 0A8B74 802E9374 A6220010 */ sh $v0, 0x10($s1) -/* 0A8B78 802E9378 A2320001 */ sb $s2, 1($s1) -/* 0A8B7C 802E937C 46062201 */ sub.s $f8, $f4, $f6 -/* 0A8B80 802E9380 46104483 */ div.s $f18, $f8, $f16 -/* 0A8B84 802E9384 1000FF27 */ b .L_EU_802E9024 -/* 0A8B88 802E9388 E632001C */ swc1 $f18, 0x1c($s1) -glabel L_EU_802E938C -/* 0A8B8C 802E938C 0C0B9DA0 */ jal m64_read_u8 -/* 0A8B90 802E9390 02002025 */ move $a0, $s0 -/* 0A8B94 802E9394 92230001 */ lbu $v1, 1($s1) -/* 0A8B98 802E9398 24010001 */ li $at, 1 -/* 0A8B9C 802E939C 5060000B */ beql $v1, $zero, .L0802011CC -/* 0A8BA0 802E93A0 96230012 */ lhu $v1, 0x12($s1) -/* 0A8BA4 802E93A4 10610005 */ beq $v1, $at, .L0802011BC -/* 0A8BA8 802E93A8 24010002 */ li $at, 2 -/* 0A8BAC 802E93AC 1061FF1D */ beq $v1, $at, .L_EU_802E9024 -/* 0A8BB0 802E93B0 00000000 */ nop -/* 0A8BB4 802E93B4 1000FF1B */ b .L_EU_802E9024 -/* 0A8BB8 802E93B8 00000000 */ nop -.L0802011BC: -/* 0A8BBC 802E93BC 44802000 */ mtc1 $zero, $f4 -/* 0A8BC0 802E93C0 A2200001 */ sb $zero, 1($s1) -/* 0A8BC4 802E93C4 E6240018 */ swc1 $f4, 0x18($s1) -/* 0A8BC8 802E93C8 96230012 */ lhu $v1, 0x12($s1) -.L0802011CC: -/* 0A8BCC 802E93CC 1060000E */ beqz $v1, .L080201208 -/* 0A8BD0 802E93D0 A6230010 */ sh $v1, 0x10($s1) -/* 0A8BD4 802E93D4 44823000 */ mtc1 $v0, $f6 -/* 0A8BD8 802E93D8 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0A8BDC 802E93DC 44814000 */ mtc1 $at, $f8 -/* 0A8BE0 802E93E0 468032A0 */ cvt.s.w $f10, $f6 -/* 0A8BE4 802E93E4 3079FFFF */ andi $t9, $v1, 0xffff -/* 0A8BE8 802E93E8 44993000 */ mtc1 $t9, $f6 -/* 0A8BEC 802E93EC C6320018 */ lwc1 $f18, 0x18($s1) -/* 0A8BF0 802E93F0 46085403 */ div.s $f16, $f10, $f8 -/* 0A8BF4 802E93F4 468032A0 */ cvt.s.w $f10, $f6 -/* 0A8BF8 802E93F8 46128101 */ sub.s $f4, $f16, $f18 -/* 0A8BFC 802E93FC 460A2203 */ div.s $f8, $f4, $f10 -/* 0A8C00 802E9400 1000FF08 */ b .L_EU_802E9024 -/* 0A8C04 802E9404 E628001C */ swc1 $f8, 0x1c($s1) -.L080201208: -/* 0A8C08 802E9408 44828000 */ mtc1 $v0, $f16 -/* 0A8C0C 802E940C 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0A8C10 802E9410 44813000 */ mtc1 $at, $f6 -/* 0A8C14 802E9414 468084A0 */ cvt.s.w $f18, $f16 -/* 0A8C18 802E9418 46069103 */ div.s $f4, $f18, $f6 -/* 0A8C1C 802E941C 1000FF01 */ b .L_EU_802E9024 -/* 0A8C20 802E9420 E6240018 */ swc1 $f4, 0x18($s1) -glabel L_EU_802E9424 -/* 0A8C24 802E9424 0C0B9DA0 */ jal m64_read_u8 -/* 0A8C28 802E9428 02002025 */ move $a0, $s0 -/* 0A8C2C 802E942C 00024600 */ sll $t0, $v0, 0x18 -/* 0A8C30 802E9430 00084E03 */ sra $t1, $t0, 0x18 -/* 0A8C34 802E9434 44895000 */ mtc1 $t1, $f10 -/* 0A8C38 802E9438 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0A8C3C 802E943C 44818000 */ mtc1 $at, $f16 -/* 0A8C40 802E9440 46805220 */ cvt.s.w $f8, $f10 -/* 0A8C44 802E9444 46104483 */ div.s $f18, $f8, $f16 -/* 0A8C48 802E9448 1000FEF6 */ b .L_EU_802E9024 -/* 0A8C4C 802E944C E6320028 */ swc1 $f18, 0x28($s1) -glabel L_EU_802E9450 -/* 0A8C50 802E9450 0C0B9DA5 */ jal m64_read_s16 -/* 0A8C54 802E9454 02002025 */ move $a0, $s0 -/* 0A8C58 802E9458 02202025 */ move $a0, $s1 -/* 0A8C5C 802E945C 0C0B9C7B */ jal sequence_player_init_channels -/* 0A8C60 802E9460 3045FFFF */ andi $a1, $v0, 0xffff -/* 0A8C64 802E9464 1000FEEF */ b .L_EU_802E9024 -/* 0A8C68 802E9468 00000000 */ nop -glabel L_EU_802E946C -/* 0A8C6C 802E946C 0C0B9DA5 */ jal m64_read_s16 -/* 0A8C70 802E9470 02002025 */ move $a0, $s0 -/* 0A8C74 802E9474 02202025 */ move $a0, $s1 -/* 0A8C78 802E9478 0C0B9CC6 */ jal sequence_player_disable_channels -/* 0A8C7C 802E947C 3045FFFF */ andi $a1, $v0, 0xffff -/* 0A8C80 802E9480 1000FEE8 */ b .L_EU_802E9024 -/* 0A8C84 802E9484 00000000 */ nop -glabel L_EU_802E9488 -/* 0A8C88 802E9488 0C0B9DA0 */ jal m64_read_u8 -/* 0A8C8C 802E948C 02002025 */ move $a0, $s0 -/* 0A8C90 802E9490 00025E00 */ sll $t3, $v0, 0x18 -/* 0A8C94 802E9494 000B6603 */ sra $t4, $t3, 0x18 -/* 0A8C98 802E9498 448C3000 */ mtc1 $t4, $f6 -/* 0A8C9C 802E949C 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0A8CA0 802E94A0 44815000 */ mtc1 $at, $f10 -/* 0A8CA4 802E94A4 46803120 */ cvt.s.w $f4, $f6 -/* 0A8CA8 802E94A8 460A2203 */ div.s $f8, $f4, $f10 -/* 0A8CAC 802E94AC 1000FEDD */ b .L_EU_802E9024 -/* 0A8CB0 802E94B0 E6280024 */ swc1 $f8, 0x24($s1) -glabel L_EU_802E94B4 -/* 0A8CB4 802E94B4 922D0000 */ lbu $t5, ($s1) -/* 0A8CB8 802E94B8 35AE0020 */ ori $t6, $t5, 0x20 -/* 0A8CBC 802E94BC 1000FED9 */ b .L_EU_802E9024 -/* 0A8CC0 802E94C0 A22E0000 */ sb $t6, ($s1) -glabel L_EU_802E94C4 -/* 0A8CC4 802E94C4 0C0B9DA0 */ jal m64_read_u8 -/* 0A8CC8 802E94C8 02002025 */ move $a0, $s0 -/* 0A8CCC 802E94CC 1000FED5 */ b .L_EU_802E9024 -/* 0A8CD0 802E94D0 A2220003 */ sb $v0, 3($s1) -glabel L_EU_802E94D4 -/* 0A8CD4 802E94D4 0C0B9DA5 */ jal m64_read_s16 -/* 0A8CD8 802E94D8 02002025 */ move $a0, $s0 -/* 0A8CDC 802E94DC 8E380014 */ lw $t8, 0x14($s1) -/* 0A8CE0 802E94E0 304FFFFF */ andi $t7, $v0, 0xffff -/* 0A8CE4 802E94E4 240100D2 */ li $at, 210 -/* 0A8CE8 802E94E8 16410003 */ bne $s2, $at, .L0802012F8 -/* 0A8CEC 802E94EC 030F1821 */ addu $v1, $t8, $t7 -/* 0A8CF0 802E94F0 1000FECC */ b .L_EU_802E9024 -/* 0A8CF4 802E94F4 AE23008C */ sw $v1, 0x8c($s1) -.L0802012F8: -/* 0A8CF8 802E94F8 1000FECA */ b .L_EU_802E9024 -/* 0A8CFC 802E94FC AE230090 */ sw $v1, 0x90($s1) -glabel L_EU_802E9500 -/* 0A8D00 802E9500 0C0B9DA0 */ jal m64_read_u8 -/* 0A8D04 802E9504 02002025 */ move $a0, $s0 -/* 0A8D08 802E9508 1000FEC6 */ b .L_EU_802E9024 -/* 0A8D0C 802E950C A2220002 */ sb $v0, 2($s1) -glabel L_EU_802E9510 -/* 0A8D10 802E9510 0C0B9DA0 */ jal m64_read_u8 -/* 0A8D14 802E9514 02002025 */ move $a0, $s0 -/* 0A8D18 802E9518 1000FEC2 */ b .L_EU_802E9024 -/* 0A8D1C 802E951C 00409825 */ move $s3, $v0 -glabel L_EU_802E9520 -/* 0A8D20 802E9520 0C0B9DA0 */ jal m64_read_u8 -/* 0A8D24 802E9524 02002025 */ move $a0, $s0 -/* 0A8D28 802E9528 1000FEBE */ b .L_EU_802E9024 -/* 0A8D2C 802E952C 02629824 */ and $s3, $s3, $v0 -glabel L_EU_802E9530 -/* 0A8D30 802E9530 0C0B9DA0 */ jal m64_read_u8 -/* 0A8D34 802E9534 02002025 */ move $a0, $s0 -/* 0A8D38 802E9538 1000FEBA */ b .L_EU_802E9024 -/* 0A8D3C 802E953C 02629823 */ subu $s3, $s3, $v0 -.L080201340: -/* 0A8D40 802E9540 28410011 */ slti $at, $v0, 0x11 -/* 0A8D44 802E9544 14200010 */ bnez $at, .L080201388 -/* 0A8D48 802E9548 28410021 */ slti $at, $v0, 0x21 -/* 0A8D4C 802E954C 14200009 */ bnez $at, .L080201374 -/* 0A8D50 802E9550 2459FFC0 */ addiu $t9, $v0, -0x40 -/* 0A8D54 802E9554 2F210061 */ sltiu $at, $t9, 0x61 -/* 0A8D58 802E9558 1020FEB2 */ beqz $at, .L_EU_802E9024 -/* 0A8D5C 802E955C 0019C880 */ sll $t9, $t9, 2 -/* 0A8D60 802E9560 3C018030 */ lui $at, %hi(jtbl_EU_80306BB4) -/* 0A8D64 802E9564 00390821 */ addu $at, $at, $t9 -/* 0A8D68 802E9568 8C396BB4 */ lw $t9, %lo(jtbl_EU_80306BB4)($at) -/* 0A8D6C 802E956C 03200008 */ jr $t9 -/* 0A8D70 802E9570 00000000 */ nop -.L080201374: -/* 0A8D74 802E9574 24010020 */ li $at, 32 -/* 0A8D78 802E9578 1041FEAA */ beq $v0, $at, .L_EU_802E9024 -/* 0A8D7C 802E957C 00000000 */ nop -/* 0A8D80 802E9580 1000FEA8 */ b .L_EU_802E9024 -/* 0A8D84 802E9584 00000000 */ nop -.L080201388: -/* 0A8D88 802E9588 10400006 */ beqz $v0, .L0802013A4 -/* 0A8D8C 802E958C 3069000F */ andi $t1, $v1, 0xf -/* 0A8D90 802E9590 24010010 */ li $at, 16 -/* 0A8D94 802E9594 1041FEA3 */ beq $v0, $at, .L_EU_802E9024 -/* 0A8D98 802E9598 00000000 */ nop -/* 0A8D9C 802E959C 1000FEA1 */ b .L_EU_802E9024 -/* 0A8DA0 802E95A0 00000000 */ nop -.L0802013A4: -/* 0A8DA4 802E95A4 00095880 */ sll $t3, $t1, 2 -/* 0A8DA8 802E95A8 022B6021 */ addu $t4, $s1, $t3 -/* 0A8DAC 802E95AC 8D8A0030 */ lw $t2, 0x30($t4) -/* 0A8DB0 802E95B0 8D530000 */ lw $s3, ($t2) -/* 0A8DB4 802E95B4 00136840 */ sll $t5, $s3, 1 -/* 0A8DB8 802E95B8 1000FE9A */ b .L_EU_802E9024 -/* 0A8DBC 802E95BC 000D9FC2 */ srl $s3, $t5, 0x1f -glabel L_EU_802E95C0 -/* 0A8DC0 802E95C0 82380007 */ lb $t8, 7($s1) -/* 0A8DC4 802E95C4 1000FE97 */ b .L_EU_802E9024 -/* 0A8DC8 802E95C8 02789823 */ subu $s3, $s3, $t8 -glabel L_EU_802E95CC -/* 0A8DCC 802E95CC 1000FE95 */ b .L_EU_802E9024 -/* 0A8DD0 802E95D0 A2330007 */ sb $s3, 7($s1) -glabel L_EU_802E95D4 -/* 0A8DD4 802E95D4 1000FE93 */ b .L_EU_802E9024 -/* 0A8DD8 802E95D8 82330007 */ lb $s3, 7($s1) -glabel L_EU_802E95DC -/* 0A8DDC 802E95DC 0C0B9DA5 */ jal m64_read_s16 -/* 0A8DE0 802E95E0 02002025 */ move $a0, $s0 -/* 0A8DE4 802E95E4 8E390014 */ lw $t9, 0x14($s1) -/* 0A8DE8 802E95E8 02402825 */ move $a1, $s2 -/* 0A8DEC 802E95EC 30AF000F */ andi $t7, $a1, 0xf -/* 0A8DF0 802E95F0 3048FFFF */ andi $t0, $v0, 0xffff -/* 0A8DF4 802E95F4 01E02825 */ move $a1, $t7 -/* 0A8DF8 802E95F8 02202025 */ move $a0, $s1 -/* 0A8DFC 802E95FC 0C0B9CFA */ jal sequence_channel_enable -/* 0A8E00 802E9600 03283021 */ addu $a2, $t9, $t0 -/* 0A8E04 802E9604 1000FE87 */ b .L_EU_802E9024 -/* 0A8E08 802E9608 00000000 */ nop -.L08020140C: -/* 0A8E0C 802E960C 3C108023 */ lui $s0, %hi(gSequenceChannelNone) # $s0, 0x8023 -/* 0A8E10 802E9610 02201825 */ move $v1, $s1 -/* 0A8E14 802E9614 24110040 */ li $s1, 64 -/* 0A8E18 802E9618 26108748 */ addiu $s0, %lo(gSequenceChannelNone) # addiu $s0, $s0, -0x78b8 -/* 0A8E1C 802E961C 00001025 */ move $v0, $zero -.L080201420: -/* 0A8E20 802E9620 8C640030 */ lw $a0, 0x30($v1) -/* 0A8E24 802E9624 24010001 */ li $at, 1 -/* 0A8E28 802E9628 02044826 */ xor $t1, $s0, $a0 -/* 0A8E2C 802E962C 0009482B */ sltu $t1, $zero, $t1 -/* 0A8E30 802E9630 55210007 */ bnel $t1, $at, .L080201450 -/* 0A8E34 802E9634 24420004 */ addiu $v0, $v0, 4 -/* 0A8E38 802E9638 AFA20034 */ sw $v0, 0x34($sp) -/* 0A8E3C 802E963C 0C0BA0AE */ jal sequence_channel_process_script -/* 0A8E40 802E9640 AFA30030 */ sw $v1, 0x30($sp) -/* 0A8E44 802E9644 8FA20034 */ lw $v0, 0x34($sp) -/* 0A8E48 802E9648 8FA30030 */ lw $v1, 0x30($sp) -/* 0A8E4C 802E964C 24420004 */ addiu $v0, $v0, 4 -.L080201450: -/* 0A8E50 802E9650 1451FFF3 */ bne $v0, $s1, .L080201420 -/* 0A8E54 802E9654 24630004 */ addiu $v1, $v1, 4 -.L080201458: -/* 0A8E58 802E9658 8FBF002C */ lw $ra, 0x2c($sp) -.L08020145C: -/* 0A8E5C 802E965C 8FB0001C */ lw $s0, 0x1c($sp) -/* 0A8E60 802E9660 8FB10020 */ lw $s1, 0x20($sp) -/* 0A8E64 802E9664 8FB20024 */ lw $s2, 0x24($sp) -/* 0A8E68 802E9668 8FB30028 */ lw $s3, 0x28($sp) -/* 0A8E6C 802E966C 03E00008 */ jr $ra -/* 0A8E70 802E9670 27BD0060 */ addiu $sp, $sp, 0x60 diff --git a/asm/non_matchings/eu/audio/synthesis_do_one_audio_update.s b/asm/non_matchings/eu/audio/synthesis_do_one_audio_update.s deleted file mode 100644 index 04a57ef..0000000 --- a/asm/non_matchings/eu/audio/synthesis_do_one_audio_update.s +++ /dev/null @@ -1,331 +0,0 @@ -glabel synthesis_do_one_audio_update -/* 09FA28 802E0228 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 09FA2C 802E022C 3C0A8022 */ lui $t2, %hi(gNumSynthesisReverbs) # $t2, 0x8022 -/* 09FA30 802E0230 254AC5E3 */ addiu $t2, %lo(gNumSynthesisReverbs) # addiu $t2, $t2, -0x3a1d -/* 09FA34 802E0234 81480000 */ lb $t0, ($t2) -/* 09FA38 802E0238 AFBE0040 */ sw $fp, 0x40($sp) -/* 09FA3C 802E023C AFB40030 */ sw $s4, 0x30($sp) -/* 09FA40 802E0240 AFB20028 */ sw $s2, 0x28($sp) -/* 09FA44 802E0244 00C0A025 */ move $s4, $a2 -/* 09FA48 802E0248 00E0F025 */ move $fp, $a3 -/* 09FA4C 802E024C AFBF0044 */ sw $ra, 0x44($sp) -/* 09FA50 802E0250 AFB7003C */ sw $s7, 0x3c($sp) -/* 09FA54 802E0254 AFB60038 */ sw $s6, 0x38($sp) -/* 09FA58 802E0258 AFB50034 */ sw $s5, 0x34($sp) -/* 09FA5C 802E025C AFB3002C */ sw $s3, 0x2c($sp) -/* 09FA60 802E0260 AFB10024 */ sw $s1, 0x24($sp) -/* 09FA64 802E0264 AFB00020 */ sw $s0, 0x20($sp) -/* 09FA68 802E0268 AFA400C0 */ sw $a0, 0xc0($sp) -/* 09FA6C 802E026C AFA500C4 */ sw $a1, 0xc4($sp) -/* 09FA70 802E0270 1500001D */ bnez $t0, .L80200C98 -/* 09FA74 802E0274 00009025 */ move $s2, $zero -/* 09FA78 802E0278 3C048023 */ lui $a0, %hi(gMaxSimultaneousNotes) # $a0, 0x8023 -/* 09FA7C 802E027C 8C849808 */ lw $a0, %lo(gMaxSimultaneousNotes)($a0) -/* 09FA80 802E0280 00008825 */ move $s1, $zero -/* 09FA84 802E0284 18800016 */ blez $a0, .L80200C90 -/* 09FA88 802E0288 00000000 */ nop -/* 09FA8C 802E028C 00870019 */ multu $a0, $a3 -/* 09FA90 802E0290 3C0E8022 */ lui $t6, %hi(gNoteSubsEu) # $t6, 0x8022 -/* 09FA94 802E0294 8DCEC5E4 */ lw $t6, %lo(gNoteSubsEu)($t6) -/* 09FA98 802E0298 27A50084 */ addiu $a1, $sp, 0x84 -/* 09FA9C 802E029C 00007812 */ mflo $t7 -/* 09FAA0 802E02A0 000FC100 */ sll $t8, $t7, 4 -/* 09FAA4 802E02A4 01D81021 */ addu $v0, $t6, $t8 -.L80200C58: -/* 09FAA8 802E02A8 8C590000 */ lw $t9, ($v0) -/* 09FAAC 802E02AC 00B26021 */ addu $t4, $a1, $s2 -/* 09FAB0 802E02B0 00195FC2 */ srl $t3, $t9, 0x1f -/* 09FAB4 802E02B4 51600006 */ beql $t3, $zero, .L80200C80 -/* 09FAB8 802E02B8 26310001 */ addiu $s1, $s1, 1 -/* 09FABC 802E02BC 26520001 */ addiu $s2, $s2, 1 -/* 09FAC0 802E02C0 00126C00 */ sll $t5, $s2, 0x10 -/* 09FAC4 802E02C4 000D9403 */ sra $s2, $t5, 0x10 -/* 09FAC8 802E02C8 A1910000 */ sb $s1, ($t4) -/* 09FACC 802E02CC 26310001 */ addiu $s1, $s1, 1 -.L80200C80: -/* 09FAD0 802E02D0 0224082A */ slt $at, $s1, $a0 -/* 09FAD4 802E02D4 1420FFF4 */ bnez $at, .L80200C58 -/* 09FAD8 802E02D8 24420010 */ addiu $v0, $v0, 0x10 -/* 09FADC 802E02DC 00008825 */ move $s1, $zero -.L80200C90: -/* 09FAE0 802E02E0 10000049 */ b .L80200DB8 -/* 09FAE4 802E02E4 00009825 */ move $s3, $zero -.L80200C98: -/* 09FAE8 802E02E8 19000026 */ blez $t0, .L80200D34 -/* 09FAEC 802E02EC 00009825 */ move $s3, $zero -/* 09FAF0 802E02F0 3C048023 */ lui $a0, %hi(gMaxSimultaneousNotes) # $a0, 0x8023 -/* 09FAF4 802E02F4 8C849808 */ lw $a0, %lo(gMaxSimultaneousNotes)($a0) -/* 09FAF8 802E02F8 27A50084 */ addiu $a1, $sp, 0x84 -.L80200CAC: -/* 09FAFC 802E02FC 1880001A */ blez $a0, .L80200D18 -/* 09FB00 802E0300 00008825 */ move $s1, $zero -/* 09FB04 802E0304 009E0019 */ multu $a0, $fp -/* 09FB08 802E0308 3C098022 */ lui $t1, %hi(gNoteSubsEu) # $t1, 0x8022 -/* 09FB0C 802E030C 8D29C5E4 */ lw $t1, %lo(gNoteSubsEu)($t1) -/* 09FB10 802E0310 00001812 */ mflo $v1 -/* 09FB14 802E0314 00000000 */ nop -/* 09FB18 802E0318 00000000 */ nop -.L80200CCC: -/* 09FB1C 802E031C 00037100 */ sll $t6, $v1, 4 -/* 09FB20 802E0320 01C91021 */ addu $v0, $t6, $t1 -/* 09FB24 802E0324 8C580000 */ lw $t8, ($v0) -/* 09FB28 802E0328 0018CFC2 */ srl $t9, $t8, 0x1f -/* 09FB2C 802E032C 5320000B */ beql $t9, $zero, .L80200D0C -/* 09FB30 802E0330 26310001 */ addiu $s1, $s1, 1 -/* 09FB34 802E0334 904B0001 */ lbu $t3, 1($v0) -/* 09FB38 802E0338 00B26821 */ addu $t5, $a1, $s2 -/* 09FB3C 802E033C 000B6142 */ srl $t4, $t3, 5 -/* 09FB40 802E0340 566C0006 */ bnel $s3, $t4, .L80200D0C -/* 09FB44 802E0344 26310001 */ addiu $s1, $s1, 1 -/* 09FB48 802E0348 26520001 */ addiu $s2, $s2, 1 -/* 09FB4C 802E034C 00127C00 */ sll $t7, $s2, 0x10 -/* 09FB50 802E0350 000F9403 */ sra $s2, $t7, 0x10 -/* 09FB54 802E0354 A1B10000 */ sb $s1, ($t5) -/* 09FB58 802E0358 26310001 */ addiu $s1, $s1, 1 -.L80200D0C: -/* 09FB5C 802E035C 0224082A */ slt $at, $s1, $a0 -/* 09FB60 802E0360 1420FFEE */ bnez $at, .L80200CCC -/* 09FB64 802E0364 24630001 */ addiu $v1, $v1, 1 -.L80200D18: -/* 09FB68 802E0368 26730001 */ addiu $s3, $s3, 1 -/* 09FB6C 802E036C 0013C400 */ sll $t8, $s3, 0x10 -/* 09FB70 802E0370 00189C03 */ sra $s3, $t8, 0x10 -/* 09FB74 802E0374 0268082A */ slt $at, $s3, $t0 -/* 09FB78 802E0378 1420FFE0 */ bnez $at, .L80200CAC -/* 09FB7C 802E037C 00000000 */ nop -/* 09FB80 802E0380 00009825 */ move $s3, $zero -.L80200D34: -/* 09FB84 802E0384 3C048023 */ lui $a0, %hi(gMaxSimultaneousNotes) # $a0, 0x8023 -/* 09FB88 802E0388 8C849808 */ lw $a0, %lo(gMaxSimultaneousNotes)($a0) -/* 09FB8C 802E038C 27A50084 */ addiu $a1, $sp, 0x84 -/* 09FB90 802E0390 00008825 */ move $s1, $zero -/* 09FB94 802E0394 5880001D */ blezl $a0, .L80200DBC -/* 09FB98 802E0398 02801025 */ move $v0, $s4 -/* 09FB9C 802E039C 009E0019 */ multu $a0, $fp -/* 09FBA0 802E03A0 3C098022 */ lui $t1, %hi(gNoteSubsEu) # $t1, 0x8022 -/* 09FBA4 802E03A4 8D29C5E4 */ lw $t1, %lo(gNoteSubsEu)($t1) -/* 09FBA8 802E03A8 00001812 */ mflo $v1 -/* 09FBAC 802E03AC 00000000 */ nop -/* 09FBB0 802E03B0 00000000 */ nop -.L80200D64: -/* 09FBB4 802E03B4 00035900 */ sll $t3, $v1, 4 -/* 09FBB8 802E03B8 01691021 */ addu $v0, $t3, $t1 -/* 09FBBC 802E03BC 8C4C0000 */ lw $t4, ($v0) -/* 09FBC0 802E03C0 000C6FC2 */ srl $t5, $t4, 0x1f -/* 09FBC4 802E03C4 51A0000C */ beql $t5, $zero, .L80200DA8 -/* 09FBC8 802E03C8 26310001 */ addiu $s1, $s1, 1 -/* 09FBCC 802E03CC 904F0001 */ lbu $t7, 1($v0) -/* 09FBD0 802E03D0 00B2C021 */ addu $t8, $a1, $s2 -/* 09FBD4 802E03D4 000F7142 */ srl $t6, $t7, 5 -/* 09FBD8 802E03D8 01C8082A */ slt $at, $t6, $t0 -/* 09FBDC 802E03DC 54200006 */ bnezl $at, .L80200DA8 -/* 09FBE0 802E03E0 26310001 */ addiu $s1, $s1, 1 -/* 09FBE4 802E03E4 26520001 */ addiu $s2, $s2, 1 -/* 09FBE8 802E03E8 0012CC00 */ sll $t9, $s2, 0x10 -/* 09FBEC 802E03EC 00199403 */ sra $s2, $t9, 0x10 -/* 09FBF0 802E03F0 A3110000 */ sb $s1, ($t8) -/* 09FBF4 802E03F4 26310001 */ addiu $s1, $s1, 1 -.L80200DA8: -/* 09FBF8 802E03F8 0224082A */ slt $at, $s1, $a0 -/* 09FBFC 802E03FC 1420FFED */ bnez $at, .L80200D64 -/* 09FC00 802E0400 24630001 */ addiu $v1, $v1, 1 -/* 09FC04 802E0404 00008825 */ move $s1, $zero -.L80200DB8: -/* 09FC08 802E0408 02801025 */ move $v0, $s4 -.L80200DBC: -/* 09FC0C 802E040C 3C0C0200 */ lui $t4, (0x020004C0 >> 16) # lui $t4, 0x200 -/* 09FC10 802E0410 358C04C0 */ ori $t4, (0x020004C0 & 0xFFFF) # ori $t4, $t4, 0x4c0 -/* 09FC14 802E0414 240D0280 */ li $t5, 640 -/* 09FC18 802E0418 AC4D0004 */ sw $t5, 4($v0) -/* 09FC1C 802E041C AC4C0000 */ sw $t4, ($v0) -/* 09FC20 802E0420 814F0000 */ lb $t7, ($t2) -/* 09FC24 802E0424 3C178022 */ lui $s7, %hi(gNotes) # $s7, 0x8022 -/* 09FC28 802E0428 26940008 */ addiu $s4, $s4, 8 -/* 09FC2C 802E042C 19E00053 */ blez $t7, .L80200F2C -/* 09FC30 802E0430 26F73D60 */ addiu $s7, %lo(gNotes) # addiu $s7, $s7, 0x3d60 -/* 09FC34 802E0434 3C158022 */ lui $s5, %hi(gNoteSubsEu) # $s5, 0x8022 -/* 09FC38 802E0438 26B5C5E4 */ addiu $s5, %lo(gNoteSubsEu) # addiu $s5, $s5, -0x3a1c -/* 09FC3C 802E043C 241600C0 */ li $s6, 192 -/* 09FC40 802E0440 00137140 */ sll $t6, $s3, 5 -.L80200DF4: -/* 09FC44 802E0444 01D37021 */ addu $t6, $t6, $s3 -/* 09FC48 802E0448 3C188022 */ lui $t8, %hi(gSynthesisReverbs) # $t8, 0x8022 -/* 09FC4C 802E044C 2718C1B0 */ addiu $t8, %lo(gSynthesisReverbs) # addiu $t8, $t8, -0x3e50 -/* 09FC50 802E0450 000E70C0 */ sll $t6, $t6, 3 -/* 09FC54 802E0454 01D8C821 */ addu $t9, $t6, $t8 -/* 09FC58 802E0458 AFB90060 */ sw $t9, 0x60($sp) -/* 09FC5C 802E045C 932B0001 */ lbu $t3, 1($t9) -/* 09FC60 802E0460 3C018022 */ lui $at, %hi(gUseReverb) # $at, 0x8022 -/* 09FC64 802E0464 02802025 */ move $a0, $s4 -/* 09FC68 802E0468 000B6600 */ sll $t4, $t3, 0x18 -/* 09FC6C 802E046C 000C6E03 */ sra $t5, $t4, 0x18 -/* 09FC70 802E0470 11A0000A */ beqz $t5, .L80200E4C -/* 09FC74 802E0474 A02BC5E2 */ sb $t3, %lo(gUseReverb)($at) -/* 09FC78 802E0478 00133400 */ sll $a2, $s3, 0x10 -/* 09FC7C 802E047C 001E3C00 */ sll $a3, $fp, 0x10 -/* 09FC80 802E0480 00077403 */ sra $t6, $a3, 0x10 -/* 09FC84 802E0484 00067C03 */ sra $t7, $a2, 0x10 -/* 09FC88 802E0488 01E03025 */ move $a2, $t7 -/* 09FC8C 802E048C 01C03825 */ move $a3, $t6 -/* 09FC90 802E0490 0C0B7F60 */ jal synthesis_resample_and_mix_reverb -/* 09FC94 802E0494 8FA500C4 */ lw $a1, 0xc4($sp) -/* 09FC98 802E0498 0040A025 */ move $s4, $v0 -.L80200E4C: -/* 09FC9C 802E049C 0232082A */ slt $at, $s1, $s2 -/* 09FCA0 802E04A0 10200022 */ beqz $at, .L80200EDC -/* 09FCA4 802E04A4 27B80084 */ addiu $t8, $sp, 0x84 -/* 09FCA8 802E04A8 02388021 */ addu $s0, $s1, $t8 -.L80200E5C: -/* 09FCAC 802E04AC 3C198023 */ lui $t9, %hi(gMaxSimultaneousNotes) # $t9, 0x8023 -/* 09FCB0 802E04B0 8F399808 */ lw $t9, %lo(gMaxSimultaneousNotes)($t9) -/* 09FCB4 802E04B4 92030000 */ lbu $v1, ($s0) -/* 09FCB8 802E04B8 8EA90000 */ lw $t1, ($s5) -/* 09FCBC 802E04BC 03D90019 */ multu $fp, $t9 -/* 09FCC0 802E04C0 00035900 */ sll $t3, $v1, 4 -/* 09FCC4 802E04C4 012B6021 */ addu $t4, $t1, $t3 -/* 09FCC8 802E04C8 00001012 */ mflo $v0 -/* 09FCCC 802E04CC 00026900 */ sll $t5, $v0, 4 -/* 09FCD0 802E04D0 018D7821 */ addu $t7, $t4, $t5 -/* 09FCD4 802E04D4 91EE0001 */ lbu $t6, 1($t7) -/* 09FCD8 802E04D8 000EC142 */ srl $t8, $t6, 5 -/* 09FCDC 802E04DC 56780014 */ bnel $s3, $t8, .L80200EE0 -/* 09FCE0 802E04E0 8FAE0060 */ lw $t6, 0x60($sp) -/* 09FCE4 802E04E4 00760019 */ multu $v1, $s6 -/* 09FCE8 802E04E8 8EEB0000 */ lw $t3, ($s7) -/* 09FCEC 802E04EC 8FAF00C4 */ lw $t7, 0xc4($sp) -/* 09FCF0 802E04F0 00626021 */ addu $t4, $v1, $v0 -/* 09FCF4 802E04F4 000C6900 */ sll $t5, $t4, 4 -/* 09FCF8 802E04F8 01A92821 */ addu $a1, $t5, $t1 -/* 09FCFC 802E04FC 8FA700C0 */ lw $a3, 0xc0($sp) -/* 09FD00 802E0500 AFB40014 */ sw $s4, 0x14($sp) -/* 09FD04 802E0504 AFAF0010 */ sw $t7, 0x10($sp) -/* 09FD08 802E0508 0000C812 */ mflo $t9 -/* 09FD0C 802E050C 032B2021 */ addu $a0, $t9, $t3 -/* 09FD10 802E0510 0C0B81BC */ jal synthesis_process_note -/* 09FD14 802E0514 24860010 */ addiu $a2, $a0, 0x10 -/* 09FD18 802E0518 26310001 */ addiu $s1, $s1, 1 -/* 09FD1C 802E051C 0232082A */ slt $at, $s1, $s2 -/* 09FD20 802E0520 0040A025 */ move $s4, $v0 -/* 09FD24 802E0524 1420FFE1 */ bnez $at, .L80200E5C -/* 09FD28 802E0528 26100001 */ addiu $s0, $s0, 1 -.L80200EDC: -/* 09FD2C 802E052C 8FAE0060 */ lw $t6, 0x60($sp) -.L80200EE0: -/* 09FD30 802E0530 00132C00 */ sll $a1, $s3, 0x10 -/* 09FD34 802E0534 0005CC03 */ sra $t9, $a1, 0x10 -/* 09FD38 802E0538 91D80001 */ lbu $t8, 1($t6) -/* 09FD3C 802E053C 03202825 */ move $a1, $t9 -/* 09FD40 802E0540 02802025 */ move $a0, $s4 -/* 09FD44 802E0544 13000005 */ beqz $t8, .L80200F0C -/* 09FD48 802E0548 001E3400 */ sll $a2, $fp, 0x10 -/* 09FD4C 802E054C 00065C03 */ sra $t3, $a2, 0x10 -/* 09FD50 802E0550 0C0B8036 */ jal func_eu_802e00d8 -/* 09FD54 802E0554 01603025 */ move $a2, $t3 -/* 09FD58 802E0558 0040A025 */ move $s4, $v0 -.L80200F0C: -/* 09FD5C 802E055C 3C0F8022 */ lui $t7, %hi(gNumSynthesisReverbs) # $t7, 0x8022 -/* 09FD60 802E0560 81EFC5E3 */ lb $t7, %lo(gNumSynthesisReverbs)($t7) -/* 09FD64 802E0564 26730001 */ addiu $s3, $s3, 1 -/* 09FD68 802E0568 00136400 */ sll $t4, $s3, 0x10 -/* 09FD6C 802E056C 000C9C03 */ sra $s3, $t4, 0x10 -/* 09FD70 802E0570 026F082A */ slt $at, $s3, $t7 -/* 09FD74 802E0574 5420FFB3 */ bnezl $at, .L80200DF4 -/* 09FD78 802E0578 00137140 */ sll $t6, $s3, 5 -.L80200F2C: -/* 09FD7C 802E057C 3C158022 */ lui $s5, %hi(gNoteSubsEu) # $s5, 0x8022 -/* 09FD80 802E0580 3C178022 */ lui $s7, %hi(gNotes) # $s7, 0x8022 -/* 09FD84 802E0584 0232082A */ slt $at, $s1, $s2 -/* 09FD88 802E0588 26F73D60 */ addiu $s7, %lo(gNotes) # addiu $s7, $s7, 0x3d60 -/* 09FD8C 802E058C 26B5C5E4 */ addiu $s5, %lo(gNoteSubsEu) # addiu $s5, $s5, -0x3a1c -/* 09FD90 802E0590 1020002E */ beqz $at, .L80200FFC -/* 09FD94 802E0594 241600C0 */ li $s6, 192 -/* 09FD98 802E0598 27AE0084 */ addiu $t6, $sp, 0x84 -/* 09FD9C 802E059C 022E8021 */ addu $s0, $s1, $t6 -/* 09FDA0 802E05A0 24130001 */ li $s3, 1 -.L80200F54: -/* 09FDA4 802E05A4 3C188023 */ lui $t8, %hi(gMaxSimultaneousNotes) # $t8, 0x8023 -/* 09FDA8 802E05A8 8F189808 */ lw $t8, %lo(gMaxSimultaneousNotes)($t8) -/* 09FDAC 802E05AC 92030000 */ lbu $v1, ($s0) -/* 09FDB0 802E05B0 8EA90000 */ lw $t1, ($s5) -/* 09FDB4 802E05B4 03D80019 */ multu $fp, $t8 -/* 09FDB8 802E05B8 0003C900 */ sll $t9, $v1, 4 -/* 09FDBC 802E05BC 01395821 */ addu $t3, $t1, $t9 -/* 09FDC0 802E05C0 3C0F8022 */ lui $t7, %hi(gBankLoadStatus) -/* 09FDC4 802E05C4 3C011000 */ lui $at, 0x1000 -/* 09FDC8 802E05C8 00001012 */ mflo $v0 -/* 09FDCC 802E05CC 00026100 */ sll $t4, $v0, 4 -/* 09FDD0 802E05D0 016C6821 */ addu $t5, $t3, $t4 -/* 09FDD4 802E05D4 91A40002 */ lbu $a0, 2($t5) -/* 09FDD8 802E05D8 01E47821 */ addu $t7, $t7, $a0 -/* 09FDDC 802E05DC 91EF2C18 */ lbu $t7, %lo(gBankLoadStatus)($t7) -/* 09FDE0 802E05E0 29EE0002 */ slti $t6, $t7, 2 -/* 09FDE4 802E05E4 39CE0001 */ xori $t6, $t6, 1 -/* 09FDE8 802E05E8 166E0010 */ bne $s3, $t6, .L80200FDC -/* 09FDEC 802E05EC 00117A00 */ sll $t7, $s1, 8 -/* 09FDF0 802E05F0 00760019 */ multu $v1, $s6 -/* 09FDF4 802E05F4 8EF90000 */ lw $t9, ($s7) -/* 09FDF8 802E05F8 8FAD00C4 */ lw $t5, 0xc4($sp) -/* 09FDFC 802E05FC 00625821 */ addu $t3, $v1, $v0 -/* 09FE00 802E0600 000B6100 */ sll $t4, $t3, 4 -/* 09FE04 802E0604 01892821 */ addu $a1, $t4, $t1 -/* 09FE08 802E0608 8FA700C0 */ lw $a3, 0xc0($sp) -/* 09FE0C 802E060C AFB40014 */ sw $s4, 0x14($sp) -/* 09FE10 802E0610 AFAD0010 */ sw $t5, 0x10($sp) -/* 09FE14 802E0614 0000C012 */ mflo $t8 -/* 09FE18 802E0618 03192021 */ addu $a0, $t8, $t9 -/* 09FE1C 802E061C 0C0B81BC */ jal synthesis_process_note -/* 09FE20 802E0620 24860010 */ addiu $a2, $a0, 0x10 -/* 09FE24 802E0624 10000005 */ b .L80200FEC -/* 09FE28 802E0628 0040A025 */ move $s4, $v0 -.L80200FDC: -/* 09FE2C 802E062C 008F7021 */ addu $t6, $a0, $t7 -/* 09FE30 802E0630 01C1C021 */ addu $t8, $t6, $at -/* 09FE34 802E0634 3C018023 */ lui $at, %hi(gAudioErrorFlags) # $at, 0x8023 -/* 09FE38 802E0638 AC3898F0 */ sw $t8, %lo(gAudioErrorFlags)($at) -.L80200FEC: -/* 09FE3C 802E063C 26310001 */ addiu $s1, $s1, 1 -/* 09FE40 802E0640 0232082A */ slt $at, $s1, $s2 -/* 09FE44 802E0644 1420FFD7 */ bnez $at, .L80200F54 -/* 09FE48 802E0648 26100001 */ addiu $s0, $s0, 1 -.L80200FFC: -/* 09FE4C 802E064C 3C080800 */ lui $t0, 0x800 -/* 09FE50 802E0650 02802025 */ move $a0, $s4 -/* 09FE54 802E0654 AC880000 */ sw $t0, ($a0) -/* 09FE58 802E0658 8FA300C4 */ lw $v1, 0xc4($sp) -/* 09FE5C 802E065C 26940008 */ addiu $s4, $s4, 8 -/* 09FE60 802E0660 02802825 */ move $a1, $s4 -/* 09FE64 802E0664 0003C840 */ sll $t9, $v1, 1 -/* 09FE68 802E0668 332BFFFF */ andi $t3, $t9, 0xffff -/* 09FE6C 802E066C AC8B0004 */ sw $t3, 4($a0) -/* 09FE70 802E0670 26940008 */ addiu $s4, $s4, 8 -/* 09FE74 802E0674 3C0D04C0 */ lui $t5, (0x04C00600 >> 16) # lui $t5, 0x4c0 -/* 09FE78 802E0678 35AD0600 */ ori $t5, (0x04C00600 & 0xFFFF) # ori $t5, $t5, 0x600 -/* 09FE7C 802E067C 3C0C0D00 */ lui $t4, 0xd00 -/* 09FE80 802E0680 02803025 */ move $a2, $s4 -/* 09FE84 802E0684 ACAC0000 */ sw $t4, ($a1) -/* 09FE88 802E0688 ACAD0004 */ sw $t5, 4($a1) -/* 09FE8C 802E068C 00197840 */ sll $t7, $t9, 1 -/* 09FE90 802E0690 31EEFFFF */ andi $t6, $t7, 0xffff -/* 09FE94 802E0694 26940008 */ addiu $s4, $s4, 8 -/* 09FE98 802E0698 ACCE0004 */ sw $t6, 4($a2) -/* 09FE9C 802E069C ACC80000 */ sw $t0, ($a2) -/* 09FEA0 802E06A0 02803825 */ move $a3, $s4 -/* 09FEA4 802E06A4 3C180600 */ lui $t8, 0x600 -/* 09FEA8 802E06A8 ACF80000 */ sw $t8, ($a3) -/* 09FEAC 802E06AC 8FB900C0 */ lw $t9, 0xc0($sp) -/* 09FEB0 802E06B0 3C018000 */ lui $at, 0x8000 -/* 09FEB4 802E06B4 26820008 */ addiu $v0, $s4, 8 -/* 09FEB8 802E06B8 03215821 */ addu $t3, $t9, $at -/* 09FEBC 802E06BC ACEB0004 */ sw $t3, 4($a3) -/* 09FEC0 802E06C0 8FBF0044 */ lw $ra, 0x44($sp) -/* 09FEC4 802E06C4 8FBE0040 */ lw $fp, 0x40($sp) -/* 09FEC8 802E06C8 8FB7003C */ lw $s7, 0x3c($sp) -/* 09FECC 802E06CC 8FB60038 */ lw $s6, 0x38($sp) -/* 09FED0 802E06D0 8FB50034 */ lw $s5, 0x34($sp) -/* 09FED4 802E06D4 8FB40030 */ lw $s4, 0x30($sp) -/* 09FED8 802E06D8 8FB3002C */ lw $s3, 0x2c($sp) -/* 09FEDC 802E06DC 8FB20028 */ lw $s2, 0x28($sp) -/* 09FEE0 802E06E0 8FB10024 */ lw $s1, 0x24($sp) -/* 09FEE4 802E06E4 8FB00020 */ lw $s0, 0x20($sp) -/* 09FEE8 802E06E8 03E00008 */ jr $ra -/* 09FEEC 802E06EC 27BD00C0 */ addiu $sp, $sp, 0xc0 diff --git a/asm/non_matchings/eu/audio/synthesis_execute.s b/asm/non_matchings/eu/audio/synthesis_execute.s deleted file mode 100644 index 4b1fd3e..0000000 --- a/asm/non_matchings/eu/audio/synthesis_execute.s +++ /dev/null @@ -1,178 +0,0 @@ -glabel synthesis_execute -/* 09F2FC 802DFAFC 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 09F300 802DFB00 AFB60030 */ sw $s6, 0x30($sp) -/* 09F304 802DFB04 3C168023 */ lui $s6, %hi(gAudioBufferParameters) # $s6, 0x8023 -/* 09F308 802DFB08 26D697E0 */ addiu $s6, %lo(gAudioBufferParameters) # addiu $s6, $s6, -0x6820 -/* 09F30C 802DFB0C AFB40028 */ sw $s4, 0x28($sp) -/* 09F310 802DFB10 86D4000C */ lh $s4, 0xc($s6) -/* 09F314 802DFB14 AFB70034 */ sw $s7, 0x34($sp) -/* 09F318 802DFB18 AFB1001C */ sw $s1, 0x1c($sp) -/* 09F31C 802DFB1C 00C08825 */ move $s1, $a2 -/* 09F320 802DFB20 00E0B825 */ move $s7, $a3 -/* 09F324 802DFB24 AFBF003C */ sw $ra, 0x3c($sp) -/* 09F328 802DFB28 AFBE0038 */ sw $fp, 0x38($sp) -/* 09F32C 802DFB2C AFB5002C */ sw $s5, 0x2c($sp) -/* 09F330 802DFB30 AFB30024 */ sw $s3, 0x24($sp) -/* 09F334 802DFB34 AFB20020 */ sw $s2, 0x20($sp) -/* 09F338 802DFB38 AFB00018 */ sw $s0, 0x18($sp) -/* 09F33C 802DFB3C AFA40060 */ sw $a0, 0x60($sp) -/* 09F340 802DFB40 1A800009 */ blez $s4, .L80200518 -/* 09F344 802DFB44 AFA50064 */ sw $a1, 0x64($sp) -.L802004F8: -/* 09F348 802DFB48 2690FFFF */ addiu $s0, $s4, -1 -/* 09F34C 802DFB4C 0C0BA59D */ jal process_sequences -/* 09F350 802DFB50 02002025 */ move $a0, $s0 -/* 09F354 802DFB54 86CE000C */ lh $t6, 0xc($s6) -/* 09F358 802DFB58 0C0B7E91 */ jal synthesis_load_note_subs_eu -/* 09F35C 802DFB5C 01D42023 */ subu $a0, $t6, $s4 -/* 09F360 802DFB60 1E00FFF9 */ bgtz $s0, .L802004F8 -/* 09F364 802DFB64 0200A025 */ move $s4, $s0 -.L80200518: -/* 09F368 802DFB68 8FAF0060 */ lw $t7, 0x60($sp) -/* 09F36C 802DFB6C 3C190700 */ lui $t9, 0x700 -/* 09F370 802DFB70 0220F025 */ move $fp, $s1 -/* 09F374 802DFB74 25F80008 */ addiu $t8, $t7, 8 -/* 09F378 802DFB78 AFB80048 */ sw $t8, 0x48($sp) -/* 09F37C 802DFB7C ADE00004 */ sw $zero, 4($t7) -/* 09F380 802DFB80 ADF90000 */ sw $t9, ($t7) -/* 09F384 802DFB84 86D4000C */ lh $s4, 0xc($s6) -/* 09F388 802DFB88 8FB50040 */ lw $s5, 0x40($sp) -/* 09F38C 802DFB8C 01E01025 */ move $v0, $t7 -/* 09F390 802DFB90 1A800056 */ blez $s4, .L8020069C -.L80200544: -/* 09F394 802DFB94 24010001 */ li $at, 1 -/* 09F398 802DFB98 86D2000C */ lh $s2, 0xc($s6) -/* 09F39C 802DFB9C 1681000B */ bne $s4, $at, .L8020057C -/* 09F3A0 802DFBA0 00008825 */ move $s1, $zero -/* 09F3A4 802DFBA4 3C098022 */ lui $t1, %hi(gLeftVolRampings) # $t1, 0x8022 -/* 09F3A8 802DFBA8 3C0B8022 */ lui $t3, %hi(gRightVolRampings) # $t3, 0x8022 -/* 09F3AC 802DFBAC 256BF5E8 */ addiu $t3, %lo(gRightVolRampings) # addiu $t3, $t3, -0xa18 -/* 09F3B0 802DFBB0 2529C5E8 */ addiu $t1, %lo(gLeftVolRampings) # addiu $t1, $t1, -0x3a18 -/* 09F3B4 802DFBB4 00154300 */ sll $t0, $s5, 0xc -/* 09F3B8 802DFBB8 00155300 */ sll $t2, $s5, 0xc -/* 09F3BC 802DFBBC 014B2021 */ addu $a0, $t2, $t3 -/* 09F3C0 802DFBC0 01091821 */ addu $v1, $t0, $t1 -/* 09F3C4 802DFBC4 10000026 */ b .L80200610 -/* 09F3C8 802DFBC8 02E09825 */ move $s3, $s7 -.L8020057C: -/* 09F3CC 802DFBCC 02F4001A */ div $zero, $s7, $s4 -/* 09F3D0 802DFBD0 16800002 */ bnez $s4, .L8020058C -/* 09F3D4 802DFBD4 00000000 */ nop -/* 09F3D8 802DFBD8 0007000D */ break 7 -.L8020058C: -/* 09F3DC 802DFBDC 2401FFFF */ li $at, -1 -/* 09F3E0 802DFBE0 16810004 */ bne $s4, $at, .L802005A4 -/* 09F3E4 802DFBE4 3C018000 */ lui $at, 0x8000 -/* 09F3E8 802DFBE8 16E10002 */ bne $s7, $at, .L802005A4 -/* 09F3EC 802DFBEC 00000000 */ nop -/* 09F3F0 802DFBF0 0006000D */ break 6 -.L802005A4: -/* 09F3F4 802DFBF4 86C50010 */ lh $a1, 0x10($s6) -/* 09F3F8 802DFBF8 00001012 */ mflo $v0 -/* 09F3FC 802DFBFC 24150002 */ li $s5, 2 -/* 09F400 802DFC00 0045082A */ slt $at, $v0, $a1 -/* 09F404 802DFC04 14200006 */ bnez $at, .L802005D0 -/* 09F408 802DFC08 00A09825 */ move $s3, $a1 -/* 09F40C 802DFC0C 3C038022 */ lui $v1, %hi(gLeftVolRampings + 0x2000) # $v1, 0x8022 -/* 09F410 802DFC10 3C048022 */ lui $a0, %hi(gRightVolRampings + 0x2000) # $a0, 0x8022 -/* 09F414 802DFC14 248415E8 */ addiu $a0, %lo(gRightVolRampings + 0x2000) # addiu $a0, $a0, 0x15e8 -/* 09F418 802DFC18 10000011 */ b .L80200610 -/* 09F41C 802DFC1C 2463E5E8 */ addiu $v1, %lo(gLeftVolRampings + 0x2000) # addiu $v1, $v1, -0x1a18 -.L802005D0: -/* 09F420 802DFC20 86C50012 */ lh $a1, 0x12($s6) -/* 09F424 802DFC24 3C038022 */ lui $v1, %hi(gLeftVolRampings + 0x1000) # $v1, 0x8022 -/* 09F428 802DFC28 2463D5E8 */ addiu $v1, %lo(gLeftVolRampings + 0x1000) # addiu $v1, $v1, -0x2a18 -/* 09F42C 802DFC2C 00A2082A */ slt $at, $a1, $v0 -/* 09F430 802DFC30 14200008 */ bnez $at, .L80200604 -/* 09F434 802DFC34 24150001 */ li $s5, 1 -/* 09F438 802DFC38 3C038022 */ lui $v1, %hi(gLeftVolRampings) # $v1, 0x8022 -/* 09F43C 802DFC3C 3C048022 */ lui $a0, %hi(gRightVolRampings) # $a0, 0x8022 -/* 09F440 802DFC40 2484F5E8 */ addiu $a0, %lo(gRightVolRampings) # addiu $a0, $a0, -0xa18 -/* 09F444 802DFC44 2463C5E8 */ addiu $v1, %lo(gLeftVolRampings) # addiu $v1, $v1, -0x3a18 -/* 09F448 802DFC48 00A09825 */ move $s3, $a1 -/* 09F44C 802DFC4C 10000004 */ b .L80200610 -/* 09F450 802DFC50 0000A825 */ move $s5, $zero -.L80200604: -/* 09F454 802DFC54 3C048022 */ lui $a0, %hi(gRightVolRampings + 0x1000) # $a0, 0x8022 -/* 09F458 802DFC58 248405E8 */ addiu $a0, %lo(gRightVolRampings + 0x1000) # addiu $a0, $a0, 0x5e8 -/* 09F45C 802DFC5C 86D3000E */ lh $s3, 0xe($s6) -.L80200610: -/* 09F460 802DFC60 3C028022 */ lui $v0, %hi(gNumSynthesisReverbs) # $v0, 0x8022 -/* 09F464 802DFC64 8042C5E3 */ lb $v0, %lo(gNumSynthesisReverbs)($v0) -/* 09F468 802DFC68 3C018022 */ lui $at, %hi(gCurrentLeftVolRamping) # $at, 0x8022 -/* 09F46C 802DFC6C AC2325E8 */ sw $v1, %lo(gCurrentLeftVolRamping)($at) -/* 09F470 802DFC70 3C018022 */ lui $at, %hi(gCurrentRightVolRamping) # $at, 0x8022 -/* 09F474 802DFC74 18400011 */ blez $v0, .L8020066C -/* 09F478 802DFC78 AC2425EC */ sw $a0, %lo(gCurrentRightVolRamping)($at) -/* 09F47C 802DFC7C 3C108022 */ lui $s0, %hi(gSynthesisReverbs) # $s0, 0x8022 -/* 09F480 802DFC80 2610C1B0 */ addiu $s0, %lo(gSynthesisReverbs) # addiu $s0, $s0, -0x3e50 -.L80200634: -/* 09F484 802DFC84 920C0001 */ lbu $t4, 1($s0) -/* 09F488 802DFC88 02602025 */ move $a0, $s3 -/* 09F48C 802DFC8C 02542823 */ subu $a1, $s2, $s4 -/* 09F490 802DFC90 51800007 */ beql $t4, $zero, .L80200660 -/* 09F494 802DFC94 26310001 */ addiu $s1, $s1, 1 -/* 09F498 802DFC98 0C0B7D94 */ jal prepare_reverb_ring_buffer -/* 09F49C 802DFC9C 02203025 */ move $a2, $s1 -/* 09F4A0 802DFCA0 3C028022 */ lui $v0, %hi(gNumSynthesisReverbs) # $v0, 0x8022 -/* 09F4A4 802DFCA4 8042C5E3 */ lb $v0, %lo(gNumSynthesisReverbs)($v0) -/* 09F4A8 802DFCA8 86D2000C */ lh $s2, 0xc($s6) -/* 09F4AC 802DFCAC 26310001 */ addiu $s1, $s1, 1 -.L80200660: -/* 09F4B0 802DFCB0 0222082A */ slt $at, $s1, $v0 -/* 09F4B4 802DFCB4 1420FFF3 */ bnez $at, .L80200634 -/* 09F4B8 802DFCB8 26100108 */ addiu $s0, $s0, 0x108 -.L8020066C: -/* 09F4BC 802DFCBC 03C02025 */ move $a0, $fp -/* 09F4C0 802DFCC0 02602825 */ move $a1, $s3 -/* 09F4C4 802DFCC4 8FA60048 */ lw $a2, 0x48($sp) -/* 09F4C8 802DFCC8 0C0B808A */ jal synthesis_do_one_audio_update -/* 09F4CC 802DFCCC 02543823 */ subu $a3, $s2, $s4 -/* 09F4D0 802DFCD0 2694FFFF */ addiu $s4, $s4, -1 -/* 09F4D4 802DFCD4 00136880 */ sll $t5, $s3, 2 -/* 09F4D8 802DFCD8 AFA20048 */ sw $v0, 0x48($sp) -/* 09F4DC 802DFCDC 02F3B823 */ subu $s7, $s7, $s3 -/* 09F4E0 802DFCE0 1E80FFAC */ bgtz $s4, .L80200544 -/* 09F4E4 802DFCE4 03CDF021 */ addu $fp, $fp, $t5 -/* 09F4E8 802DFCE8 AFB50040 */ sw $s5, 0x40($sp) -.L8020069C: -/* 09F4EC 802DFCEC 3C028022 */ lui $v0, %hi(gNumSynthesisReverbs) # $v0, 0x8022 -/* 09F4F0 802DFCF0 8042C5E3 */ lb $v0, %lo(gNumSynthesisReverbs)($v0) -/* 09F4F4 802DFCF4 3C0E8022 */ lui $t6, %hi(gSynthesisReverbs) -/* 09F4F8 802DFCF8 25D0C1B0 */ addiu $s0, $t6, %lo(gSynthesisReverbs) -/* 09F4FC 802DFCFC 1840000E */ blez $v0, .L802006E8 -/* 09F500 802DFD00 00027940 */ sll $t7, $v0, 5 -/* 09F504 802DFD04 01E27821 */ addu $t7, $t7, $v0 -/* 09F508 802DFD08 000F78C0 */ sll $t7, $t7, 3 -/* 09F50C 802DFD0C 01F01821 */ addu $v1, $t7, $s0 -.L802006C0: -/* 09F510 802DFD10 92020002 */ lbu $v0, 2($s0) -/* 09F514 802DFD14 10400002 */ beqz $v0, .L802006D0 -/* 09F518 802DFD18 2458FFFF */ addiu $t8, $v0, -1 -/* 09F51C 802DFD1C A2180002 */ sb $t8, 2($s0) -.L802006D0: -/* 09F520 802DFD20 92190003 */ lbu $t9, 3($s0) -/* 09F524 802DFD24 26100108 */ addiu $s0, $s0, 0x108 -/* 09F528 802DFD28 0203082B */ sltu $at, $s0, $v1 -/* 09F52C 802DFD2C 3B280001 */ xori $t0, $t9, 1 -/* 09F530 802DFD30 1420FFF7 */ bnez $at, .L802006C0 -/* 09F534 802DFD34 A208FEFB */ sb $t0, -0x105($s0) -.L802006E8: -/* 09F538 802DFD38 8FA20048 */ lw $v0, 0x48($sp) -/* 09F53C 802DFD3C 8FAA0060 */ lw $t2, 0x60($sp) -/* 09F540 802DFD40 8FAD0064 */ lw $t5, 0x64($sp) -/* 09F544 802DFD44 004A5823 */ subu $t3, $v0, $t2 -/* 09F548 802DFD48 000B60C3 */ sra $t4, $t3, 3 -/* 09F54C 802DFD4C ADAC0000 */ sw $t4, ($t5) -/* 09F550 802DFD50 8FBF003C */ lw $ra, 0x3c($sp) -/* 09F554 802DFD54 8FBE0038 */ lw $fp, 0x38($sp) -/* 09F558 802DFD58 8FB70034 */ lw $s7, 0x34($sp) -/* 09F55C 802DFD5C 8FB60030 */ lw $s6, 0x30($sp) -/* 09F560 802DFD60 8FB5002C */ lw $s5, 0x2c($sp) -/* 09F564 802DFD64 8FB40028 */ lw $s4, 0x28($sp) -/* 09F568 802DFD68 8FB30024 */ lw $s3, 0x24($sp) -/* 09F56C 802DFD6C 8FB20020 */ lw $s2, 0x20($sp) -/* 09F570 802DFD70 8FB1001C */ lw $s1, 0x1c($sp) -/* 09F574 802DFD74 8FB00018 */ lw $s0, 0x18($sp) -/* 09F578 802DFD78 03E00008 */ jr $ra -/* 09F57C 802DFD7C 27BD0060 */ addiu $sp, $sp, 0x60 diff --git a/asm/non_matchings/eu/audio/synthesis_resample_and_mix_reverb.s b/asm/non_matchings/eu/audio/synthesis_resample_and_mix_reverb.s deleted file mode 100644 index 46b68a8..0000000 --- a/asm/non_matchings/eu/audio/synthesis_resample_and_mix_reverb.s +++ /dev/null @@ -1,220 +0,0 @@ -glabel synthesis_resample_and_mix_reverb -/* 09F580 802DFD80 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 09F584 802DFD84 AFB10020 */ sw $s1, 0x20($sp) -/* 09F588 802DFD88 00068C00 */ sll $s1, $a2, 0x10 -/* 09F58C 802DFD8C 00117403 */ sra $t6, $s1, 0x10 -/* 09F590 802DFD90 000EC940 */ sll $t9, $t6, 5 -/* 09F594 802DFD94 032EC821 */ addu $t9, $t9, $t6 -/* 09F598 802DFD98 3C0D8022 */ lui $t5, %hi(gSynthesisReverbs) # $t5, 0x8022 -/* 09F59C 802DFD9C 25ADC1B0 */ addiu $t5, %lo(gSynthesisReverbs) # addiu $t5, $t5, -0x3e50 -/* 09F5A0 802DFDA0 0019C8C0 */ sll $t9, $t9, 3 -/* 09F5A4 802DFDA4 01C08825 */ move $s1, $t6 -/* 09F5A8 802DFDA8 032D1821 */ addu $v1, $t9, $t5 -/* 09F5AC 802DFDAC 906E0003 */ lbu $t6, 3($v1) -/* 09F5B0 802DFDB0 AFA7006C */ sw $a3, 0x6c($sp) -/* 09F5B4 802DFDB4 00077C00 */ sll $t7, $a3, 0x10 -/* 09F5B8 802DFDB8 000F3C03 */ sra $a3, $t7, 0x10 -/* 09F5BC 802DFDBC 000E7880 */ sll $t7, $t6, 2 -/* 09F5C0 802DFDC0 01EE7823 */ subu $t7, $t7, $t6 -/* 09F5C4 802DFDC4 000F78C0 */ sll $t7, $t7, 3 -/* 09F5C8 802DFDC8 01EE7821 */ addu $t7, $t7, $t6 -/* 09F5CC 802DFDCC AFBF0024 */ sw $ra, 0x24($sp) -/* 09F5D0 802DFDD0 AFB0001C */ sw $s0, 0x1c($sp) -/* 09F5D4 802DFDD4 AFA50064 */ sw $a1, 0x64($sp) -/* 09F5D8 802DFDD8 AFA60068 */ sw $a2, 0x68($sp) -/* 09F5DC 802DFDDC 3C0D0200 */ lui $t5, (0x02000740 >> 16) # lui $t5, 0x200 -/* 09F5E0 802DFDE0 000F7880 */ sll $t7, $t7, 2 -/* 09F5E4 802DFDE4 35AD0740 */ ori $t5, (0x02000740 & 0xFFFF) # ori $t5, $t5, 0x740 -/* 09F5E8 802DFDE8 240E0280 */ li $t6, 640 -/* 09F5EC 802DFDEC 006FC021 */ addu $t8, $v1, $t7 -/* 09F5F0 802DFDF0 0007C880 */ sll $t9, $a3, 2 -/* 09F5F4 802DFDF4 AC8E0004 */ sw $t6, 4($a0) -/* 09F5F8 802DFDF8 AC8D0000 */ sw $t5, ($a0) -/* 09F5FC 802DFDFC 906F0004 */ lbu $t7, 4($v1) -/* 09F600 802DFE00 0327C821 */ addu $t9, $t9, $a3 -/* 09F604 802DFE04 0019C880 */ sll $t9, $t9, 2 -/* 09F608 802DFE08 03194021 */ addu $t0, $t8, $t9 -/* 09F60C 802DFE0C 24010001 */ li $at, 1 -/* 09F610 802DFE10 25080030 */ addiu $t0, $t0, 0x30 -/* 09F614 802DFE14 15E10033 */ bne $t7, $at, .L80200894 -/* 09F618 802DFE18 24900008 */ addiu $s0, $a0, 8 -/* 09F61C 802DFE1C 9506000E */ lhu $a2, 0xe($t0) -/* 09F620 802DFE20 85070010 */ lh $a3, 0x10($t0) -/* 09F624 802DFE24 AFA8005C */ sw $t0, 0x5c($sp) -/* 09F628 802DFE28 AFA30028 */ sw $v1, 0x28($sp) -/* 09F62C 802DFE2C AFB10010 */ sw $s1, 0x10($sp) -/* 09F630 802DFE30 02002025 */ move $a0, $s0 -/* 09F634 802DFE34 0C0B7E39 */ jal synthesis_load_reverb_ring_buffer -/* 09F638 802DFE38 24050740 */ li $a1, 1856 -/* 09F63C 802DFE3C 8FA8005C */ lw $t0, 0x5c($sp) -/* 09F640 802DFE40 00408025 */ move $s0, $v0 -/* 09F644 802DFE44 8FA30028 */ lw $v1, 0x28($sp) -/* 09F648 802DFE48 85070012 */ lh $a3, 0x12($t0) -/* 09F64C 802DFE4C 02002025 */ move $a0, $s0 -/* 09F650 802DFE50 00003025 */ move $a2, $zero -/* 09F654 802DFE54 50E0000A */ beql $a3, $zero, .L80200830 -/* 09F658 802DFE58 3C0A0800 */ lui $t2, 0x800 -/* 09F65C 802DFE5C 85050010 */ lh $a1, 0x10($t0) -/* 09F660 802DFE60 AFA30028 */ sw $v1, 0x28($sp) -/* 09F664 802DFE64 AFB10010 */ sw $s1, 0x10($sp) -/* 09F668 802DFE68 24A50740 */ addiu $a1, $a1, 0x740 -/* 09F66C 802DFE6C 30B8FFFF */ andi $t8, $a1, 0xffff -/* 09F670 802DFE70 0C0B7E39 */ jal synthesis_load_reverb_ring_buffer -/* 09F674 802DFE74 03002825 */ move $a1, $t8 -/* 09F678 802DFE78 8FA30028 */ lw $v1, 0x28($sp) -/* 09F67C 802DFE7C 3C0A0800 */ lui $t2, 0x800 -.L80200830: -/* 09F680 802DFE80 24500008 */ addiu $s0, $v0, 8 -/* 09F684 802DFE84 24190280 */ li $t9, 640 -/* 09F688 802DFE88 AC590004 */ sw $t9, 4($v0) -/* 09F68C 802DFE8C AC4A0000 */ sw $t2, ($v0) -/* 09F690 802DFE90 02002825 */ move $a1, $s0 -/* 09F694 802DFE94 3C0D0C00 */ lui $t5, (0x0C007FFF >> 16) # lui $t5, 0xc00 -/* 09F698 802DFE98 3C0E0740 */ lui $t6, (0x074004C0 >> 16) # lui $t6, 0x740 -/* 09F69C 802DFE9C 35CE04C0 */ ori $t6, (0x074004C0 & 0xFFFF) # ori $t6, $t6, 0x4c0 -/* 09F6A0 802DFEA0 35AD7FFF */ ori $t5, (0x0C007FFF & 0xFFFF) # ori $t5, $t5, 0x7fff -/* 09F6A4 802DFEA4 ACAD0000 */ sw $t5, ($a1) -/* 09F6A8 802DFEA8 ACAE0004 */ sw $t6, 4($a1) -/* 09F6AC 802DFEAC 946F0008 */ lhu $t7, 8($v1) -/* 09F6B0 802DFEB0 34018000 */ li $at, 32768 -/* 09F6B4 802DFEB4 26100008 */ addiu $s0, $s0, 8 -/* 09F6B8 802DFEB8 01E1C021 */ addu $t8, $t7, $at -/* 09F6BC 802DFEBC 3319FFFF */ andi $t9, $t8, 0xffff -/* 09F6C0 802DFEC0 3C010C00 */ lui $at, 0xc00 -/* 09F6C4 802DFEC4 02003025 */ move $a2, $s0 -/* 09F6C8 802DFEC8 3C0E0740 */ lui $t6, (0x07400740 >> 16) # lui $t6, 0x740 -/* 09F6CC 802DFECC 35CE0740 */ ori $t6, (0x07400740 & 0xFFFF) # ori $t6, $t6, 0x740 -/* 09F6D0 802DFED0 03216825 */ or $t5, $t9, $at -/* 09F6D4 802DFED4 ACCD0000 */ sw $t5, ($a2) -/* 09F6D8 802DFED8 ACCE0004 */ sw $t6, 4($a2) -/* 09F6DC 802DFEDC 10000078 */ b .L80200A70 -/* 09F6E0 802DFEE0 26100008 */ addiu $s0, $s0, 8 -.L80200894: -/* 09F6E4 802DFEE4 8D02000C */ lw $v0, 0xc($t0) -/* 09F6E8 802DFEE8 850D0010 */ lh $t5, 0x10($t0) -/* 09F6EC 802DFEEC 2401FFF0 */ li $at, -16 -/* 09F6F0 802DFEF0 304F0007 */ andi $t7, $v0, 7 -/* 09F6F4 802DFEF4 000FC440 */ sll $t8, $t7, 0x11 -/* 09F6F8 802DFEF8 0018CC03 */ sra $t9, $t8, 0x10 -/* 09F6FC 802DFEFC 032D5021 */ addu $t2, $t9, $t5 -/* 09F700 802DFF00 254A000F */ addiu $t2, $t2, 0xf -/* 09F704 802DFF04 03204825 */ move $t1, $t9 -/* 09F708 802DFF08 314EFFF0 */ andi $t6, $t2, 0xfff0 -/* 09F70C 802DFF0C 000E7C00 */ sll $t7, $t6, 0x10 -/* 09F710 802DFF10 000FC403 */ sra $t8, $t7, 0x10 -/* 09F714 802DFF14 03005025 */ move $t2, $t8 -/* 09F718 802DFF18 A7AA0058 */ sh $t2, 0x58($sp) -/* 09F71C 802DFF1C A7A9005A */ sh $t1, 0x5a($sp) -/* 09F720 802DFF20 AFA8005C */ sw $t0, 0x5c($sp) -/* 09F724 802DFF24 AFA30028 */ sw $v1, 0x28($sp) -/* 09F728 802DFF28 AFB10010 */ sw $s1, 0x10($sp) -/* 09F72C 802DFF2C 02002025 */ move $a0, $s0 -/* 09F730 802DFF30 24050020 */ li $a1, 32 -/* 09F734 802DFF34 05210003 */ bgez $t1, .L802008F4 -/* 09F738 802DFF38 0009C843 */ sra $t9, $t1, 1 -/* 09F73C 802DFF3C 25210001 */ addiu $at, $t1, 1 -/* 09F740 802DFF40 0001C843 */ sra $t9, $at, 1 -.L802008F4: -/* 09F744 802DFF44 00593023 */ subu $a2, $v0, $t9 -/* 09F748 802DFF48 30CDFFFF */ andi $t5, $a2, 0xffff -/* 09F74C 802DFF4C 01A03025 */ move $a2, $t5 -/* 09F750 802DFF50 0C0B7E39 */ jal synthesis_load_reverb_ring_buffer -/* 09F754 802DFF54 24070140 */ li $a3, 320 -/* 09F758 802DFF58 8FA8005C */ lw $t0, 0x5c($sp) -/* 09F75C 802DFF5C 00408025 */ move $s0, $v0 -/* 09F760 802DFF60 8FA30028 */ lw $v1, 0x28($sp) -/* 09F764 802DFF64 850E0012 */ lh $t6, 0x12($t0) -/* 09F768 802DFF68 87A9005A */ lh $t1, 0x5a($sp) -/* 09F76C 802DFF6C 87AA0058 */ lh $t2, 0x58($sp) -/* 09F770 802DFF70 11C0000D */ beqz $t6, .L80200958 -/* 09F774 802DFF74 02002025 */ move $a0, $s0 -/* 09F778 802DFF78 25450020 */ addiu $a1, $t2, 0x20 -/* 09F77C 802DFF7C 30AFFFFF */ andi $t7, $a1, 0xffff -/* 09F780 802DFF80 24180140 */ li $t8, 320 -/* 09F784 802DFF84 030A3823 */ subu $a3, $t8, $t2 -/* 09F788 802DFF88 01E02825 */ move $a1, $t7 -/* 09F78C 802DFF8C 00003025 */ move $a2, $zero -/* 09F790 802DFF90 AFB10010 */ sw $s1, 0x10($sp) -/* 09F794 802DFF94 AFA30028 */ sw $v1, 0x28($sp) -/* 09F798 802DFF98 0C0B7E39 */ jal synthesis_load_reverb_ring_buffer -/* 09F79C 802DFF9C A7A9005A */ sh $t1, 0x5a($sp) -/* 09F7A0 802DFFA0 8FA30028 */ lw $v1, 0x28($sp) -/* 09F7A4 802DFFA4 87A9005A */ lh $t1, 0x5a($sp) -.L80200958: -/* 09F7A8 802DFFA8 25390020 */ addiu $t9, $t1, 0x20 -/* 09F7AC 802DFFAC 3C0A0800 */ lui $t2, 0x800 -/* 09F7B0 802DFFB0 332DFFFF */ andi $t5, $t9, 0xffff -/* 09F7B4 802DFFB4 01AA7025 */ or $t6, $t5, $t2 -/* 09F7B8 802DFFB8 AC4E0000 */ sw $t6, ($v0) -/* 09F7BC 802DFFBC 8FA50064 */ lw $a1, 0x64($sp) -/* 09F7C0 802DFFC0 3C010740 */ lui $at, 0x740 -/* 09F7C4 802DFFC4 3C0B0500 */ lui $t3, 0x500 -/* 09F7C8 802DFFC8 00057840 */ sll $t7, $a1, 1 -/* 09F7CC 802DFFCC 31E5FFFF */ andi $a1, $t7, 0xffff -/* 09F7D0 802DFFD0 00A1C825 */ or $t9, $a1, $at -/* 09F7D4 802DFFD4 AC590004 */ sw $t9, 4($v0) -/* 09F7D8 802DFFD8 90790000 */ lbu $t9, ($v1) -/* 09F7DC 802DFFDC 946E000A */ lhu $t6, 0xa($v1) -/* 09F7E0 802DFFE0 24500008 */ addiu $s0, $v0, 8 -/* 09F7E4 802DFFE4 00196C00 */ sll $t5, $t9, 0x10 -/* 09F7E8 802DFFE8 01CB7825 */ or $t7, $t6, $t3 -/* 09F7EC 802DFFEC 01ED7025 */ or $t6, $t7, $t5 -/* 09F7F0 802DFFF0 02003025 */ move $a2, $s0 -/* 09F7F4 802DFFF4 ACCE0000 */ sw $t6, ($a2) -/* 09F7F8 802DFFF8 8C780020 */ lw $t8, 0x20($v1) -/* 09F7FC 802DFFFC 3C0C8000 */ lui $t4, 0x8000 -/* 09F800 802E0000 26100008 */ addiu $s0, $s0, 8 -/* 09F804 802E0004 252F0160 */ addiu $t7, $t1, 0x160 -/* 09F808 802E0008 030CC821 */ addu $t9, $t8, $t4 -/* 09F80C 802E000C ACD90004 */ sw $t9, 4($a2) -/* 09F810 802E0010 31EDFFFF */ andi $t5, $t7, 0xffff -/* 09F814 802E0014 02003825 */ move $a3, $s0 -/* 09F818 802E0018 3C010880 */ lui $at, 0x880 -/* 09F81C 802E001C 00A1C025 */ or $t8, $a1, $at -/* 09F820 802E0020 01AA7025 */ or $t6, $t5, $t2 -/* 09F824 802E0024 ACEE0000 */ sw $t6, ($a3) -/* 09F828 802E0028 ACF80004 */ sw $t8, 4($a3) -/* 09F82C 802E002C 90780000 */ lbu $t8, ($v1) -/* 09F830 802E0030 946F000A */ lhu $t7, 0xa($v1) -/* 09F834 802E0034 26100008 */ addiu $s0, $s0, 8 -/* 09F838 802E0038 0018CC00 */ sll $t9, $t8, 0x10 -/* 09F83C 802E003C 01EB6825 */ or $t5, $t7, $t3 -/* 09F840 802E0040 01B97825 */ or $t7, $t5, $t9 -/* 09F844 802E0044 02004025 */ move $t0, $s0 -/* 09F848 802E0048 AD0F0000 */ sw $t7, ($t0) -/* 09F84C 802E004C 8C6E0024 */ lw $t6, 0x24($v1) -/* 09F850 802E0050 26100008 */ addiu $s0, $s0, 8 -/* 09F854 802E0054 02001025 */ move $v0, $s0 -/* 09F858 802E0058 01CCC021 */ addu $t8, $t6, $t4 -/* 09F85C 802E005C AD180004 */ sw $t8, 4($t0) -/* 09F860 802E0060 26100008 */ addiu $s0, $s0, 8 -/* 09F864 802E0064 240D0280 */ li $t5, 640 -/* 09F868 802E0068 AC4D0004 */ sw $t5, 4($v0) -/* 09F86C 802E006C AC4A0000 */ sw $t2, ($v0) -/* 09F870 802E0070 02002025 */ move $a0, $s0 -/* 09F874 802E0074 3C0F0740 */ lui $t7, (0x074004C0 >> 16) # lui $t7, 0x740 -/* 09F878 802E0078 3C190C00 */ lui $t9, (0x0C007FFF >> 16) # lui $t9, 0xc00 -/* 09F87C 802E007C 37397FFF */ ori $t9, (0x0C007FFF & 0xFFFF) # ori $t9, $t9, 0x7fff -/* 09F880 802E0080 35EF04C0 */ ori $t7, (0x074004C0 & 0xFFFF) # ori $t7, $t7, 0x4c0 -/* 09F884 802E0084 AC8F0004 */ sw $t7, 4($a0) -/* 09F888 802E0088 AC990000 */ sw $t9, ($a0) -/* 09F88C 802E008C 946E0008 */ lhu $t6, 8($v1) -/* 09F890 802E0090 34018000 */ li $at, 32768 -/* 09F894 802E0094 26100008 */ addiu $s0, $s0, 8 -/* 09F898 802E0098 01C1C021 */ addu $t8, $t6, $at -/* 09F89C 802E009C 02002825 */ move $a1, $s0 -/* 09F8A0 802E00A0 330DFFFF */ andi $t5, $t8, 0xffff -/* 09F8A4 802E00A4 3C010C00 */ lui $at, 0xc00 -/* 09F8A8 802E00A8 3C0F0740 */ lui $t7, (0x07400740 >> 16) # lui $t7, 0x740 -/* 09F8AC 802E00AC 35EF0740 */ ori $t7, (0x07400740 & 0xFFFF) # ori $t7, $t7, 0x740 -/* 09F8B0 802E00B0 01A1C825 */ or $t9, $t5, $at -/* 09F8B4 802E00B4 ACB90000 */ sw $t9, ($a1) -/* 09F8B8 802E00B8 ACAF0004 */ sw $t7, 4($a1) -/* 09F8BC 802E00BC 26100008 */ addiu $s0, $s0, 8 -.L80200A70: -/* 09F8C0 802E00C0 8FBF0024 */ lw $ra, 0x24($sp) -/* 09F8C4 802E00C4 02001025 */ move $v0, $s0 -/* 09F8C8 802E00C8 8FB0001C */ lw $s0, 0x1c($sp) -/* 09F8CC 802E00CC 8FB10020 */ lw $s1, 0x20($sp) -/* 09F8D0 802E00D0 03E00008 */ jr $ra -/* 09F8D4 802E00D4 27BD0060 */ addiu $sp, $sp, 0x60 diff --git a/asm/non_matchings/eu/handle_dialog_text_and_pages.s b/asm/non_matchings/eu/handle_dialog_text_and_pages.s deleted file mode 100644 index 1e15402..0000000 --- a/asm/non_matchings/eu/handle_dialog_text_and_pages.s +++ /dev/null @@ -1,370 +0,0 @@ -.late_rodata -.late_rodata_alignment 8 -glabel jtbl_803059A0 -.word L_EU_802AFB00, L_EU_802AFB18, L_EU_802AFB50, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFB88, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFB9C, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AF99C, L_EU_802AF990 - -glabel jtbl_80305A60 -.word L_EU_802AF9CC, L_EU_802AF9CC, L_EU_802AF9CC, L_EU_802AFBD0 -.word L_EU_802AF9EC, L_EU_802AF9EC, L_EU_802AF9EC, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFA0C, L_EU_802AFA0C, L_EU_802AFA0C, L_EU_802AFA0C -.word L_EU_802AFA2C, L_EU_802AFA2C, L_EU_802AFA2C, L_EU_802AFA2C -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFA4C, L_EU_802AFA4C, L_EU_802AFA4C, L_EU_802AFBD0 -.word L_EU_802AFA6C, L_EU_802AFA6C, L_EU_802AFA6C, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFA8C, L_EU_802AFA8C, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFAAC, L_EU_802AFAAC, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFBD0, L_EU_802AFAEC, L_EU_802AFBD0 -.word L_EU_802AFBD0, L_EU_802AFACC, L_EU_802AFACC - -.text -glabel handle_dialog_text_and_pages # EU: func_802AF808 -/* 06F008 802AF808 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 06F00C 802AF80C AFB50034 */ sw $s5, 0x34($sp) -/* 06F010 802AF810 0006AE00 */ sll $s5, $a2, 0x18 -/* 06F014 802AF814 00157603 */ sra $t6, $s5, 0x18 -/* 06F018 802AF818 AFBF0044 */ sw $ra, 0x44($sp) -/* 06F01C 802AF81C AFBE0040 */ sw $fp, 0x40($sp) -/* 06F020 802AF820 AFB7003C */ sw $s7, 0x3c($sp) -/* 06F024 802AF824 AFB60038 */ sw $s6, 0x38($sp) -/* 06F028 802AF828 AFB40030 */ sw $s4, 0x30($sp) -/* 06F02C 802AF82C AFB3002C */ sw $s3, 0x2c($sp) -/* 06F030 802AF830 AFB20028 */ sw $s2, 0x28($sp) -/* 06F034 802AF834 AFB10024 */ sw $s1, 0x24($sp) -/* 06F038 802AF838 AFB00020 */ sw $s0, 0x20($sp) -/* 06F03C 802AF83C AFA40070 */ sw $a0, 0x70($sp) -/* 06F040 802AF840 AFA60078 */ sw $a2, 0x78($sp) -/* 06F044 802AF844 00A08825 */ move $s1, $a1 -/* 06F048 802AF848 01C0A825 */ move $s5, $t6 -/* 06F04C 802AF84C 0C09A4BC */ jal segmented_to_virtual -/* 06F050 802AF850 8CA4000C */ lw $a0, 0xc($a1) -/* 06F054 802AF854 3C088030 */ lui $t0, %hi(gDialogBoxState) # $t0, 0x8030 -/* 06F058 802AF858 2508D630 */ addiu $t0, %lo(gDialogBoxState) # addiu $t0, $t0, -0x29d0 -/* 06F05C 802AF85C 81180000 */ lb $t8, ($t0) -/* 06F060 802AF860 240F0001 */ li $t7, 1 -/* 06F064 802AF864 24070002 */ li $a3, 2 -/* 06F068 802AF868 AFA20060 */ sw $v0, 0x60($sp) -/* 06F06C 802AF86C A3A0005D */ sb $zero, 0x5d($sp) -/* 06F070 802AF870 A3AF005B */ sb $t7, 0x5b($sp) -/* 06F074 802AF874 24130001 */ li $s3, 1 -/* 06F078 802AF878 14F80005 */ bne $a3, $t8, .L802AF890 -/* 06F07C 802AF87C 82360004 */ lb $s6, 4($s1) -/* 06F080 802AF880 0016C840 */ sll $t9, $s6, 1 -/* 06F084 802AF884 27290001 */ addiu $t1, $t9, 1 -/* 06F088 802AF888 10000003 */ b .L802AF898 -/* 06F08C 802AF88C A3A9005E */ sb $t1, 0x5e($sp) -.L802AF890: -/* 06F090 802AF890 26CA0001 */ addiu $t2, $s6, 1 -/* 06F094 802AF894 A3AA005E */ sb $t2, 0x5e($sp) -.L802AF898: -/* 06F098 802AF898 3C068031 */ lui $a2, %hi(gDisplayListHead) # $a2, 0x8031 -/* 06F09C 802AF89C 24C692A8 */ addiu $a2, %lo(gDisplayListHead) # addiu $a2, $a2, -0x6d58 -/* 06F0A0 802AF8A0 8CC30000 */ lw $v1, ($a2) -/* 06F0A4 802AF8A4 3C0D0200 */ lui $t5, %hi(dl_ia_text_begin) # $t5, 0x200 -/* 06F0A8 802AF8A8 25AD73B0 */ addiu $t5, %lo(dl_ia_text_begin) # addiu $t5, $t5, 0x73b0 -/* 06F0AC 802AF8AC 246B0008 */ addiu $t3, $v1, 8 -/* 06F0B0 802AF8B0 ACCB0000 */ sw $t3, ($a2) -/* 06F0B4 802AF8B4 3C0C0600 */ lui $t4, 0x600 -/* 06F0B8 802AF8B8 3C128033 */ lui $s2, %hi(gDialogX) # $s2, 0x8033 -/* 06F0BC 802AF8BC 3C178030 */ lui $s7, %hi(gDialogTextPos) # $s7, 0x8030 -/* 06F0C0 802AF8C0 AC6C0000 */ sw $t4, ($v1) -/* 06F0C4 802AF8C4 AC6D0004 */ sw $t5, 4($v1) -/* 06F0C8 802AF8C8 2652F69A */ addiu $s2, %lo(gDialogX) # addiu $s2, $s2, -0x966 -/* 06F0CC 802AF8CC 86F7D64C */ lh $s7, %lo(gDialogTextPos)($s7) -/* 06F0D0 802AF8D0 A6400000 */ sh $zero, ($s2) -/* 06F0D4 802AF8D4 240E000E */ li $t6, 14 -/* 06F0D8 802AF8D8 3C018033 */ lui $at, %hi(gDialogY) # $at, 0x8033 -/* 06F0DC 802AF8DC A42EF69C */ sh $t6, %lo(gDialogY)($at) -/* 06F0E0 802AF8E0 810F0000 */ lb $t7, ($t0) -/* 06F0E4 802AF8E4 3C1E8033 */ lui $fp, %hi(gDialogY) # $fp, 0x8033 -/* 06F0E8 802AF8E8 27DEF69C */ addiu $fp, %lo(gDialogY) # addiu $fp, $fp, -0x964 -/* 06F0EC 802AF8EC 14EF0005 */ bne $a3, $t7, .L802AF904 -/* 06F0F0 802AF8F0 3C198030 */ lui $t9, %hi(gDialogScrollOffsetY) # $t9, 0x8030 -/* 06F0F4 802AF8F4 87D80000 */ lh $t8, ($fp) -/* 06F0F8 802AF8F8 8739D63C */ lh $t9, %lo(gDialogScrollOffsetY)($t9) -/* 06F0FC 802AF8FC 03194823 */ subu $t1, $t8, $t9 -/* 06F100 802AF900 A7C90000 */ sh $t1, ($fp) -.L802AF904: -/* 06F104 802AF904 83AA005D */ lb $t2, 0x5d($sp) -/* 06F108 802AF908 3C1E8033 */ lui $fp, %hi(gDialogY) # $fp, 0x8033 -/* 06F10C 802AF90C 27DEF69C */ addiu $fp, %lo(gDialogY) # addiu $fp, $fp, -0x964 -/* 06F110 802AF910 154000C8 */ bnez $t2, .L802AFC34 -/* 06F114 802AF914 3C148030 */ lui $s4, %hi(gDialogCharWidths) # $s4, 0x8030 -/* 06F118 802AF918 2694D530 */ addiu $s4, %lo(gDialogCharWidths) # addiu $s4, $s4, -0x2ad0 -.L802AF91C: -/* 06F11C 802AF91C 00132E00 */ sll $a1, $s3, 0x18 -/* 06F120 802AF920 00055E03 */ sra $t3, $a1, 0x18 -/* 06F124 802AF924 01602825 */ move $a1, $t3 -/* 06F128 802AF928 0C0ABBFE */ jal change_and_flash_dialog_text_color_lines # func_802AEFF8 -/* 06F12C 802AF92C 83A40073 */ lb $a0, 0x73($sp) -/* 06F130 802AF930 8FAC0060 */ lw $t4, 0x60($sp) -/* 06F134 802AF934 02EC6821 */ addu $t5, $s7, $t4 -/* 06F138 802AF938 91B00000 */ lbu $s0, ($t5) -/* 06F13C 802AF93C 2A0100A3 */ slti $at, $s0, 0xa3 -/* 06F140 802AF940 1420000A */ bnez $at, .L802AF96C -/* 06F144 802AF944 02001025 */ move $v0, $s0 -/* 06F148 802AF948 244EFF30 */ addiu $t6, $v0, -0xd0 -/* 06F14C 802AF94C 2DC10030 */ sltiu $at, $t6, 0x30 -/* 06F150 802AF950 1020009F */ beqz $at, .L802AFBD0 -/* 06F154 802AF954 000E7080 */ sll $t6, $t6, 2 -/* 06F158 802AF958 3C018030 */ lui $at, %hi(jtbl_803059A0) # 0x8030 -/* 06F15C 802AF95C 002E0821 */ addu $at, $at, $t6 -/* 06F160 802AF960 8C2E59A0 */ lw $t6, %lo(jtbl_803059A0)($at) # 0x59a0($at) -/* 06F164 802AF964 01C00008 */ jr $t6 -/* 06F168 802AF968 00000000 */ nop -.L802AF96C: -/* 06F16C 802AF96C 244FFFA0 */ addiu $t7, $v0, -0x60 -/* 06F170 802AF970 2DE10043 */ sltiu $at, $t7, 0x43 -/* 06F174 802AF974 10200096 */ beqz $at, .L802AFBD0 -/* 06F178 802AF978 000F7880 */ sll $t7, $t7, 2 -/* 06F17C 802AF97C 3C018030 */ lui $at, %hi(jtbl_80305A60) # 0x8030 -/* 06F180 802AF980 002F0821 */ addu $at, $at, $t7 -/* 06F184 802AF984 8C2F5A60 */ lw $t7, %lo(jtbl_80305A60)($at) # 0x5a60($at) -/* 06F188 802AF988 01E00008 */ jr $t7 -/* 06F18C 802AF98C 00000000 */ nop -glabel L_EU_802AF990 -/* 06F190 802AF990 24180002 */ li $t8, 2 -/* 06F194 802AF994 1000009D */ b .L802AFC0C -/* 06F198 802AF998 A3B8005D */ sb $t8, 0x5d($sp) -glabel L_EU_802AF99C -/* 06F19C 802AF99C 26730001 */ addiu $s3, $s3, 1 -/* 06F1A0 802AF9A0 0013CE00 */ sll $t9, $s3, 0x18 -/* 06F1A4 802AF9A4 00199E03 */ sra $s3, $t9, 0x18 -/* 06F1A8 802AF9A8 00132600 */ sll $a0, $s3, 0x18 -/* 06F1AC 802AF9AC 00045603 */ sra $t2, $a0, 0x18 -/* 06F1B0 802AF9B0 01402025 */ move $a0, $t2 -/* 06F1B4 802AF9B4 83A5005E */ lb $a1, 0x5e($sp) -/* 06F1B8 802AF9B8 27A6005D */ addiu $a2, $sp, 0x5d -/* 06F1BC 802AF9BC 0C0ABD0B */ jal handle_dialog_scroll_page_state # func_802AF42C -/* 06F1C0 802AF9C0 27A7005B */ addiu $a3, $sp, 0x5b -/* 06F1C4 802AF9C4 10000091 */ b .L802AFC0C -/* 06F1C8 802AF9C8 A6400000 */ sh $zero, ($s2) -glabel L_EU_802AF9CC -/* 06F1CC 802AF9CC 00403025 */ move $a2, $v0 -/* 06F1D0 802AF9D0 30CB000F */ andi $t3, $a2, 0xf -/* 06F1D4 802AF9D4 01603025 */ move $a2, $t3 -/* 06F1D8 802AF9D8 02202025 */ move $a0, $s1 -/* 06F1DC 802AF9DC 0C0ABDB5 */ jal render_dialog_lowercase_diacritic -/* 06F1E0 802AF9E0 24050024 */ li $a1, 36 -/* 06F1E4 802AF9E4 1000008A */ b .L802AFC10 -/* 06F1E8 802AF9E8 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AF9EC -/* 06F1EC 802AF9EC 00403025 */ move $a2, $v0 -/* 06F1F0 802AF9F0 30CC000F */ andi $t4, $a2, 0xf -/* 06F1F4 802AF9F4 01803025 */ move $a2, $t4 -/* 06F1F8 802AF9F8 02202025 */ move $a0, $s1 -/* 06F1FC 802AF9FC 0C0ABDD6 */ jal render_dialog_uppercase_diacritic -/* 06F200 802AFA00 2405000A */ li $a1, 10 -/* 06F204 802AFA04 10000082 */ b .L802AFC10 -/* 06F208 802AFA08 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFA0C -/* 06F20C 802AFA0C 00403025 */ move $a2, $v0 -/* 06F210 802AFA10 30CD000F */ andi $t5, $a2, 0xf -/* 06F214 802AFA14 01A03025 */ move $a2, $t5 -/* 06F218 802AFA18 02202025 */ move $a0, $s1 -/* 06F21C 802AFA1C 0C0ABDB5 */ jal render_dialog_lowercase_diacritic -/* 06F220 802AFA20 24050028 */ li $a1, 40 -/* 06F224 802AFA24 1000007A */ b .L802AFC10 -/* 06F228 802AFA28 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFA2C -/* 06F22C 802AFA2C 00403025 */ move $a2, $v0 -/* 06F230 802AFA30 30CE000F */ andi $t6, $a2, 0xf -/* 06F234 802AFA34 01C03025 */ move $a2, $t6 -/* 06F238 802AFA38 02202025 */ move $a0, $s1 -/* 06F23C 802AFA3C 0C0ABDD6 */ jal render_dialog_uppercase_diacritic -/* 06F240 802AFA40 2405000E */ li $a1, 14 -/* 06F244 802AFA44 10000072 */ b .L802AFC10 -/* 06F248 802AFA48 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFA4C -/* 06F24C 802AFA4C 00403025 */ move $a2, $v0 -/* 06F250 802AFA50 30CF000F */ andi $t7, $a2, 0xf -/* 06F254 802AFA54 01E03025 */ move $a2, $t7 -/* 06F258 802AFA58 02202025 */ move $a0, $s1 -/* 06F25C 802AFA5C 0C0ABDB5 */ jal render_dialog_lowercase_diacritic -/* 06F260 802AFA60 24050038 */ li $a1, 56 -/* 06F264 802AFA64 1000006A */ b .L802AFC10 -/* 06F268 802AFA68 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFA6C -/* 06F26C 802AFA6C 00403025 */ move $a2, $v0 -/* 06F270 802AFA70 30D8000F */ andi $t8, $a2, 0xf -/* 06F274 802AFA74 03003025 */ move $a2, $t8 -/* 06F278 802AFA78 02202025 */ move $a0, $s1 -/* 06F27C 802AFA7C 0C0ABDD6 */ jal render_dialog_uppercase_diacritic -/* 06F280 802AFA80 2405001E */ li $a1, 30 -/* 06F284 802AFA84 10000062 */ b .L802AFC10 -/* 06F288 802AFA88 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFA8C -/* 06F28C 802AFA8C 00403025 */ move $a2, $v0 -/* 06F290 802AFA90 30D9000F */ andi $t9, $a2, 0xf -/* 06F294 802AFA94 03203025 */ move $a2, $t9 -/* 06F298 802AFA98 02202025 */ move $a0, $s1 -/* 06F29C 802AFA9C 0C0ABDB5 */ jal render_dialog_lowercase_diacritic -/* 06F2A0 802AFAA0 24050032 */ li $a1, 50 -/* 06F2A4 802AFAA4 1000005A */ b .L802AFC10 -/* 06F2A8 802AFAA8 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFAAC -/* 06F2AC 802AFAAC 00403025 */ move $a2, $v0 -/* 06F2B0 802AFAB0 30C9000F */ andi $t1, $a2, 0xf -/* 06F2B4 802AFAB4 01203025 */ move $a2, $t1 -/* 06F2B8 802AFAB8 02202025 */ move $a0, $s1 -/* 06F2BC 802AFABC 0C0ABDD6 */ jal render_dialog_uppercase_diacritic -/* 06F2C0 802AFAC0 24050018 */ li $a1, 24 -/* 06F2C4 802AFAC4 10000052 */ b .L802AFC10 -/* 06F2C8 802AFAC8 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFACC -/* 06F2CC 802AFACC 00403025 */ move $a2, $v0 -/* 06F2D0 802AFAD0 30CA000F */ andi $t2, $a2, 0xf -/* 06F2D4 802AFAD4 01403025 */ move $a2, $t2 -/* 06F2D8 802AFAD8 02202025 */ move $a0, $s1 -/* 06F2DC 802AFADC 0C0ABDB5 */ jal render_dialog_lowercase_diacritic -/* 06F2E0 802AFAE0 240500EB */ li $a1, 235 -/* 06F2E4 802AFAE4 1000004A */ b .L802AFC10 -/* 06F2E8 802AFAE8 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFAEC -/* 06F2EC 802AFAEC 864B0000 */ lh $t3, ($s2) -/* 06F2F0 802AFAF0 928C009E */ lbu $t4, 0x9e($s4) -/* 06F2F4 802AFAF4 016C6821 */ addu $t5, $t3, $t4 -/* 06F2F8 802AFAF8 10000044 */ b .L802AFC0C -/* 06F2FC 802AFAFC A64D0000 */ sh $t5, ($s2) -glabel L_EU_802AFB00 -/* 06F300 802AFB00 928F009E */ lbu $t7, 0x9e($s4) -/* 06F304 802AFB04 864E0000 */ lh $t6, ($s2) -/* 06F308 802AFB08 000FC040 */ sll $t8, $t7, 1 -/* 06F30C 802AFB0C 01D8C821 */ addu $t9, $t6, $t8 -/* 06F310 802AFB10 1000003E */ b .L802AFC0C -/* 06F314 802AFB14 A6590000 */ sh $t9, ($s2) -glabel L_EU_802AFB18 -/* 06F318 802AFB18 00132E00 */ sll $a1, $s3, 0x18 -/* 06F31C 802AFB1C 00163600 */ sll $a2, $s6, 0x18 -/* 06F320 802AFB20 00065603 */ sra $t2, $a2, 0x18 -/* 06F324 802AFB24 00054E03 */ sra $t1, $a1, 0x18 -/* 06F328 802AFB28 01202825 */ move $a1, $t1 -/* 06F32C 802AFB2C 01403025 */ move $a2, $t2 -/* 06F330 802AFB30 00002025 */ move $a0, $zero -/* 06F334 802AFB34 83A7005B */ lb $a3, 0x5b($sp) -/* 06F338 802AFB38 AFB50010 */ sw $s5, 0x10($sp) -/* 06F33C 802AFB3C 0C0ABD64 */ jal render_multi_text_string_lines -/* 06F340 802AFB40 AFB10014 */ sw $s1, 0x14($sp) -/* 06F344 802AFB44 240B0001 */ li $t3, 1 -/* 06F348 802AFB48 10000030 */ b .L802AFC0C -/* 06F34C 802AFB4C A3AB005B */ sb $t3, 0x5b($sp) -glabel L_EU_802AFB50 -/* 06F350 802AFB50 00132E00 */ sll $a1, $s3, 0x18 -/* 06F354 802AFB54 00163600 */ sll $a2, $s6, 0x18 -/* 06F358 802AFB58 00066E03 */ sra $t5, $a2, 0x18 -/* 06F35C 802AFB5C 00056603 */ sra $t4, $a1, 0x18 -/* 06F360 802AFB60 01802825 */ move $a1, $t4 -/* 06F364 802AFB64 01A03025 */ move $a2, $t5 -/* 06F368 802AFB68 24040001 */ li $a0, 1 -/* 06F36C 802AFB6C 83A7005B */ lb $a3, 0x5b($sp) -/* 06F370 802AFB70 AFB50010 */ sw $s5, 0x10($sp) -/* 06F374 802AFB74 0C0ABD64 */ jal render_multi_text_string_lines -/* 06F378 802AFB78 AFB10014 */ sw $s1, 0x14($sp) -/* 06F37C 802AFB7C 240F0001 */ li $t7, 1 -/* 06F380 802AFB80 10000022 */ b .L802AFC0C -/* 06F384 802AFB84 A3AF005B */ sb $t7, 0x5b($sp) -glabel L_EU_802AFB88 -/* 06F388 802AFB88 02202025 */ move $a0, $s1 -/* 06F38C 802AFB8C 0C0ABD1E */ jal render_star_count_dialog_text -/* 06F390 802AFB90 27A5005B */ addiu $a1, $sp, 0x5b -/* 06F394 802AFB94 1000001E */ b .L802AFC10 -/* 06F398 802AFB98 83A9005D */ lb $t1, 0x5d($sp) -glabel L_EU_802AFB9C -/* 06F39C 802AFB9C 87C60000 */ lh $a2, ($fp) -/* 06F3A0 802AFBA0 02202025 */ move $a0, $s1 -/* 06F3A4 802AFBA4 86450000 */ lh $a1, ($s2) -/* 06F3A8 802AFBA8 24C60008 */ addiu $a2, $a2, 8 -/* 06F3AC 802AFBAC 00067400 */ sll $t6, $a2, 0x10 -/* 06F3B0 802AFBB0 000E3403 */ sra $a2, $t6, 0x10 -/* 06F3B4 802AFBB4 0C0ABC6E */ jal render_generic_dialog_char_at_pos -/* 06F3B8 802AFBB8 240700F6 */ li $a3, 246 -/* 06F3BC 802AFBBC 86590000 */ lh $t9, ($s2) -/* 06F3C0 802AFBC0 928900F6 */ lbu $t1, 0xf6($s4) -/* 06F3C4 802AFBC4 03295021 */ addu $t2, $t9, $t1 -/* 06F3C8 802AFBC8 10000010 */ b .L802AFC0C -/* 06F3CC 802AFBCC A64A0000 */ sh $t2, ($s2) -glabel L_EU_802AFBD0 -.L802AFBD0: -/* 06F3D0 802AFBD0 0275082A */ slt $at, $s3, $s5 -/* 06F3D4 802AFBD4 14200008 */ bnez $at, .L802AFBF8 -/* 06F3D8 802AFBD8 02B65821 */ addu $t3, $s5, $s6 -/* 06F3DC 802AFBDC 0173082A */ slt $at, $t3, $s3 -/* 06F3E0 802AFBE0 14200005 */ bnez $at, .L802AFBF8 -/* 06F3E4 802AFBE4 02202025 */ move $a0, $s1 -/* 06F3E8 802AFBE8 86450000 */ lh $a1, ($s2) -/* 06F3EC 802AFBEC 87C60000 */ lh $a2, ($fp) -/* 06F3F0 802AFBF0 0C0ABC6E */ jal render_generic_dialog_char_at_pos -/* 06F3F4 802AFBF4 320700FF */ andi $a3, $s0, 0xff -.L802AFBF8: -/* 06F3F8 802AFBF8 02906821 */ addu $t5, $s4, $s0 -/* 06F3FC 802AFBFC 91AF0000 */ lbu $t7, ($t5) -/* 06F400 802AFC00 864C0000 */ lh $t4, ($s2) -/* 06F404 802AFC04 018F7021 */ addu $t6, $t4, $t7 -/* 06F408 802AFC08 A64E0000 */ sh $t6, ($s2) -.L802AFC0C: -/* 06F40C 802AFC0C 83A9005D */ lb $t1, 0x5d($sp) -.L802AFC10: -/* 06F410 802AFC10 26F70001 */ addiu $s7, $s7, 1 -/* 06F414 802AFC14 0017C400 */ sll $t8, $s7, 0x10 -/* 06F418 802AFC18 1120FF40 */ beqz $t1, .L802AF91C -/* 06F41C 802AFC1C 0018BC03 */ sra $s7, $t8, 0x10 -/* 06F420 802AFC20 3C088030 */ lui $t0, %hi(gDialogBoxState) # $t0, 0x8030 -/* 06F424 802AFC24 3C068031 */ lui $a2, %hi(gDisplayListHead) # $a2, 0x8031 -/* 06F428 802AFC28 24C692A8 */ addiu $a2, %lo(gDisplayListHead) # addiu $a2, $a2, -0x6d58 -/* 06F42C 802AFC2C 2508D630 */ addiu $t0, %lo(gDialogBoxState) # addiu $t0, $t0, -0x29d0 -/* 06F430 802AFC30 24070002 */ li $a3, 2 -.L802AFC34: -/* 06F434 802AFC34 8CC30000 */ lw $v1, ($a2) -/* 06F438 802AFC38 3C0D0200 */ lui $t5, %hi(dl_ia_text_end) # $t5, 0x200 -/* 06F43C 802AFC3C 25AD7418 */ addiu $t5, %lo(dl_ia_text_end) # addiu $t5, $t5, 0x7418 -/* 06F440 802AFC40 246A0008 */ addiu $t2, $v1, 8 -/* 06F444 802AFC44 ACCA0000 */ sw $t2, ($a2) -/* 06F448 802AFC48 3C0B0600 */ lui $t3, 0x600 -/* 06F44C 802AFC4C AC6B0000 */ sw $t3, ($v1) -/* 06F450 802AFC50 AC6D0004 */ sw $t5, 4($v1) -/* 06F454 802AFC54 810C0000 */ lb $t4, ($t0) -/* 06F458 802AFC58 24010001 */ li $at, 1 -/* 06F45C 802AFC5C 83AF005D */ lb $t7, 0x5d($sp) -/* 06F460 802AFC60 55810009 */ bnel $t4, $at, .L802AFC88 -/* 06F464 802AFC64 8FBF0044 */ lw $ra, 0x44($sp) -/* 06F468 802AFC68 15E70005 */ bne $t7, $a3, .L802AFC80 -/* 06F46C 802AFC6C 3C018030 */ lui $at, %hi(gLastDialogPageStrPos) -/* 06F470 802AFC70 240EFFFF */ li $t6, -1 -/* 06F474 802AFC74 3C018030 */ lui $at, %hi(gLastDialogPageStrPos) # $at, 0x8030 -/* 06F478 802AFC78 10000002 */ b .L802AFC84 -/* 06F47C 802AFC7C A42ED648 */ sh $t6, %lo(gLastDialogPageStrPos)($at) -.L802AFC80: -/* 06F480 802AFC80 A437D648 */ sh $s7, %lo(gLastDialogPageStrPos)($at) -.L802AFC84: -/* 06F484 802AFC84 8FBF0044 */ lw $ra, 0x44($sp) -.L802AFC88: -/* 06F488 802AFC88 3C018033 */ lui $at, %hi(gLastDialogLineNum) # $at, 0x8033 -/* 06F48C 802AFC8C A033F692 */ sb $s3, %lo(gLastDialogLineNum)($at) -/* 06F490 802AFC90 8FB3002C */ lw $s3, 0x2c($sp) -/* 06F494 802AFC94 8FB00020 */ lw $s0, 0x20($sp) -/* 06F498 802AFC98 8FB10024 */ lw $s1, 0x24($sp) -/* 06F49C 802AFC9C 8FB20028 */ lw $s2, 0x28($sp) -/* 06F4A0 802AFCA0 8FB40030 */ lw $s4, 0x30($sp) -/* 06F4A4 802AFCA4 8FB50034 */ lw $s5, 0x34($sp) -/* 06F4A8 802AFCA8 8FB60038 */ lw $s6, 0x38($sp) -/* 06F4AC 802AFCAC 8FB7003C */ lw $s7, 0x3c($sp) -/* 06F4B0 802AFCB0 8FBE0040 */ lw $fp, 0x40($sp) -/* 06F4B4 802AFCB4 03E00008 */ jr $ra -/* 06F4B8 802AFCB8 27BD0070 */ addiu $sp, $sp, 0x70 - diff --git a/asm/non_matchings/eu/libultra_unk_802aeeb0.s b/asm/non_matchings/eu/libultra_unk_802aeeb0.s deleted file mode 100644 index 825fbb5..0000000 --- a/asm/non_matchings/eu/libultra_unk_802aeeb0.s +++ /dev/null @@ -1,55 +0,0 @@ - -glabel func_802aeeb0 -/* 0AEEB0 80200000 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0AEEB4 80200004 AFBF0014 */ sw $ra, 0x14($sp) -/* 0AEEB8 80200008 0C0BD400 */ jal __osDisableInt -/* 0AEEBC 8020000C AFA40020 */ sw $a0, 0x20($sp) -/* 0AEEC0 80200010 3C0F8030 */ lui $t7, %hi(D_80334914) # $t7, 0x8030 -/* 0AEEC4 80200014 8DEF2EE4 */ lw $t7, %lo(D_80334914)($t7) -/* 0AEEC8 80200018 8FAE0020 */ lw $t6, 0x20($sp) -/* 0AEECC 8020001C AFA2001C */ sw $v0, 0x1c($sp) -/* 0AEED0 80200020 3C188030 */ lui $t8, %hi(D_80334914) # $t8, 0x8030 -/* 0AEED4 80200024 ADEE0004 */ sw $t6, 4($t7) -/* 0AEED8 80200028 8F182EE4 */ lw $t8, %lo(D_80334914)($t8) -/* 0AEEDC 8020002C 97190000 */ lhu $t9, ($t8) -/* 0AEEE0 80200030 37280010 */ ori $t0, $t9, 0x10 -/* 0AEEE4 80200034 A7080000 */ sh $t0, ($t8) -/* 0AEEE8 80200038 0C0BD408 */ jal __osRestoreInt -/* 0AEEEC 8020003C 8FA4001C */ lw $a0, 0x1c($sp) -/* 0AEEF0 80200040 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AEEF4 80200044 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0AEEF8 80200048 03E00008 */ jr $ra -/* 0AEEFC 8020004C 00000000 */ nop - -glabel func_802aef00 -/* 0AEF00 80200050 3C028030 */ lui $v0, %hi(D_8033489C) -/* 0AEF04 80200054 03E00008 */ jr $ra -/* 0AEF08 80200058 8C422EFC */ lw $v0, %lo(D_8033489C)($v0) - -glabel func_802aef0c -/* 0AEF0C 8020005C 00000000 */ nop -/* 0AEF10 80200060 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0AEF14 80200064 AFBF001C */ sw $ra, 0x1c($sp) -/* 0AEF18 80200068 AFA40028 */ sw $a0, 0x28($sp) -/* 0AEF1C 8020006C AFA5002C */ sw $a1, 0x2c($sp) -/* 0AEF20 80200070 AFA60030 */ sw $a2, 0x30($sp) -/* 0AEF24 80200074 0C0BD400 */ jal __osDisableInt -/* 0AEF28 80200078 AFB00018 */ sw $s0, 0x18($sp) -/* 0AEF2C 8020007C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0AEF30 80200080 3C188033 */ lui $t8, %hi(D_80363830) # $t8, 0x8033 -/* 0AEF34 80200084 8FA8002C */ lw $t0, 0x2c($sp) -/* 0AEF38 80200088 271836D0 */ addiu $t8, %lo(D_80363830) # addiu $t8, $t8, 0x36d0 -/* 0AEF3C 8020008C 000E78C0 */ sll $t7, $t6, 3 -/* 0AEF40 80200090 01F8C821 */ addu $t9, $t7, $t8 -/* 0AEF44 80200094 AFB90020 */ sw $t9, 0x20($sp) -/* 0AEF48 80200098 AF280000 */ sw $t0, ($t9) -/* 0AEF4C 8020009C 8FAA0020 */ lw $t2, 0x20($sp) -/* 0AEF50 802000A0 8FA90030 */ lw $t1, 0x30($sp) -/* 0AEF54 802000A4 00408025 */ move $s0, $v0 -/* 0AEF58 802000A8 02002025 */ move $a0, $s0 -/* 0AEF5C 802000AC 0C0BD408 */ jal __osRestoreInt -/* 0AEF60 802000B0 AD490004 */ sw $t1, 4($t2) -/* 0AEF64 802000B4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AEF68 802000B8 8FB00018 */ lw $s0, 0x18($sp) -/* 0AEF6C 802000BC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0AEF70 802000C0 03E00008 */ jr $ra diff --git a/asm/non_matchings/eu/libultra_unk_802aef80.s b/asm/non_matchings/eu/libultra_unk_802aef80.s deleted file mode 100644 index 5d7aa55..0000000 --- a/asm/non_matchings/eu/libultra_unk_802aef80.s +++ /dev/null @@ -1,87 +0,0 @@ -glabel func_802aef80 -/* 0AEF80 80200000 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0AEF84 80200004 AFBF001C */ sw $ra, 0x1c($sp) -/* 0AEF88 80200008 AFA40028 */ sw $a0, 0x28($sp) -/* 0AEF8C 8020000C AFA5002C */ sw $a1, 0x2c($sp) -/* 0AEF90 80200010 AFA60030 */ sw $a2, 0x30($sp) -/* 0AEF94 80200014 AFB10018 */ sw $s1, 0x18($sp) -/* 0AEF98 80200018 0C0BD400 */ jal __osDisableInt -/* 0AEF9C 8020001C AFB00014 */ sw $s0, 0x14($sp) -/* 0AEFA0 80200020 8FAE0028 */ lw $t6, 0x28($sp) -/* 0AEFA4 80200024 00408025 */ move $s0, $v0 -/* 0AEFA8 80200028 8DCF0008 */ lw $t7, 8($t6) -/* 0AEFAC 8020002C 15E00012 */ bnez $t7, .L80200078 -/* 0AEFB0 80200030 00000000 */ nop -.L80200034: -/* 0AEFB4 80200034 8FB80030 */ lw $t8, 0x30($sp) -/* 0AEFB8 80200038 17000005 */ bnez $t8, .L80200050 -/* 0AEFBC 8020003C 00000000 */ nop -/* 0AEFC0 80200040 0C0BD408 */ jal __osRestoreInt -/* 0AEFC4 80200044 02002025 */ move $a0, $s0 -/* 0AEFC8 80200048 10000036 */ b .L80200124 -/* 0AEFCC 8020004C 2402FFFF */ li $v0, -1 -.L80200050: -/* 0AEFD0 80200050 3C088030 */ lui $t0, %hi(D_803348A0) # $t0, 0x8030 -/* 0AEFD4 80200054 8D082F00 */ lw $t0, %lo(D_803348A0)($t0) -/* 0AEFD8 80200058 24190008 */ li $t9, 8 -/* 0AEFDC 8020005C A5190010 */ sh $t9, 0x10($t0) -/* 0AEFE0 80200060 0C0BCFC3 */ jal __osEnqueueAndYield -/* 0AEFE4 80200064 8FA40028 */ lw $a0, 0x28($sp) -/* 0AEFE8 80200068 8FA90028 */ lw $t1, 0x28($sp) -/* 0AEFEC 8020006C 8D2A0008 */ lw $t2, 8($t1) -/* 0AEFF0 80200070 1140FFF0 */ beqz $t2, .L80200034 -/* 0AEFF4 80200074 00000000 */ nop -.L80200078: -/* 0AEFF8 80200078 8FAB002C */ lw $t3, 0x2c($sp) -/* 0AEFFC 8020007C 11600008 */ beqz $t3, .L802000A0 -/* 0AF000 80200080 00000000 */ nop -/* 0AF004 80200084 8FAC0028 */ lw $t4, 0x28($sp) -/* 0AF008 80200088 8D8E000C */ lw $t6, 0xc($t4) -/* 0AF00C 8020008C 8D8D0014 */ lw $t5, 0x14($t4) -/* 0AF010 80200090 000E7880 */ sll $t7, $t6, 2 -/* 0AF014 80200094 01AFC021 */ addu $t8, $t5, $t7 -/* 0AF018 80200098 8F190000 */ lw $t9, ($t8) -/* 0AF01C 8020009C AD790000 */ sw $t9, ($t3) -.L802000A0: -/* 0AF020 802000A0 8FA80028 */ lw $t0, 0x28($sp) -/* 0AF024 802000A4 8D09000C */ lw $t1, 0xc($t0) -/* 0AF028 802000A8 8D0C0010 */ lw $t4, 0x10($t0) -/* 0AF02C 802000AC 252A0001 */ addiu $t2, $t1, 1 -/* 0AF030 802000B0 014C001A */ div $zero, $t2, $t4 -/* 0AF034 802000B4 00007010 */ mfhi $t6 -/* 0AF038 802000B8 AD0E000C */ sw $t6, 0xc($t0) -/* 0AF03C 802000BC 8FAD0028 */ lw $t5, 0x28($sp) -/* 0AF040 802000C0 15800002 */ bnez $t4, .L802000CC -/* 0AF044 802000C4 00000000 */ nop -/* 0AF048 802000C8 0007000D */ break 7 -.L802000CC: -/* 0AF04C 802000CC 2401FFFF */ li $at, -1 -/* 0AF050 802000D0 15810004 */ bne $t4, $at, .L802000E4 -/* 0AF054 802000D4 3C018000 */ lui $at, 0x8000 -/* 0AF058 802000D8 15410002 */ bne $t2, $at, .L802000E4 -/* 0AF05C 802000DC 00000000 */ nop -/* 0AF060 802000E0 0006000D */ break 6 -.L802000E4: -/* 0AF064 802000E4 8DAF0008 */ lw $t7, 8($t5) -/* 0AF068 802000E8 25F8FFFF */ addiu $t8, $t7, -1 -/* 0AF06C 802000EC ADB80008 */ sw $t8, 8($t5) -/* 0AF070 802000F0 8FB90028 */ lw $t9, 0x28($sp) -/* 0AF074 802000F4 8F2B0004 */ lw $t3, 4($t9) -/* 0AF078 802000F8 8D690000 */ lw $t1, ($t3) -/* 0AF07C 802000FC 11200006 */ beqz $t1, .L80200118 -/* 0AF080 80200100 00000000 */ nop -/* 0AF084 80200104 0C0BD015 */ jal __osPopThread -/* 0AF088 80200108 27240004 */ addiu $a0, $t9, 4 -/* 0AF08C 8020010C 00408825 */ move $s1, $v0 -/* 0AF090 80200110 0C0BBEA0 */ jal osStartThread -/* 0AF094 80200114 02202025 */ move $a0, $s1 -.L80200118: -/* 0AF098 80200118 0C0BD408 */ jal __osRestoreInt -/* 0AF09C 8020011C 02002025 */ move $a0, $s0 -/* 0AF0A0 80200120 00001025 */ move $v0, $zero -.L80200124: -/* 0AF0A4 80200124 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AF0A8 80200128 8FB00014 */ lw $s0, 0x14($sp) -/* 0AF0AC 8020012C 8FB10018 */ lw $s1, 0x18($sp) -/* 0AF0B0 80200130 03E00008 */ jr $ra -/* 0AF0B4 80200134 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/asm/non_matchings/eu/play_sequence.s b/asm/non_matchings/eu/play_sequence.s deleted file mode 100644 index e806d0f..0000000 --- a/asm/non_matchings/eu/play_sequence.s +++ /dev/null @@ -1,86 +0,0 @@ -glabel play_sequence -/* 0AB0E8 80200000 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0AB0EC 80200004 AFA50034 */ sw $a1, 0x34($sp) -/* 0AB0F0 80200008 308700FF */ andi $a3, $a0, 0xff -/* 0AB0F4 8020000C 30AE00FF */ andi $t6, $a1, 0xff -/* 0AB0F8 80200010 01C02825 */ move $a1, $t6 -/* 0AB0FC 80200014 AFBF0014 */ sw $ra, 0x14($sp) -/* 0AB100 80200018 AFA40030 */ sw $a0, 0x30($sp) -/* 0AB104 8020001C AFA60038 */ sw $a2, 0x38($sp) -/* 0AB108 80200020 14E0000C */ bnez $a3, .L480200054 -/* 0AB10C 80200024 00E04025 */ move $t0, $a3 -/* 0AB110 80200028 31CF007F */ andi $t7, $t6, 0x7f -/* 0AB114 8020002C 3C018030 */ lui $at, %hi(sPlayer0CurSeqId) # $at, 0x8030 -/* 0AB118 80200030 A02F04CC */ sb $t7, %lo(sPlayer0CurSeqId)($at) -/* 0AB11C 80200034 240200FF */ li $v0, 255 -/* 0AB120 80200038 3C018030 */ lui $at, %hi(sBackgroundMusicForDynamics) # $at, 0x8030 -/* 0AB124 8020003C A02202E0 */ sb $v0, %lo(sBackgroundMusicForDynamics)($at) -/* 0AB128 80200040 3C018030 */ lui $at, %hi(sCurrentMusicDynamic) # $at, 0x8030 -/* 0AB12C 80200044 A02202DC */ sb $v0, %lo(sCurrentMusicDynamic)($at) -/* 0AB130 80200048 3C018030 */ lui $at, %hi(sMusicDynamicDelay) # $at, 0x8030 -/* 0AB134 8020004C 24180002 */ li $t8, 2 -/* 0AB138 80200050 A03804D0 */ sb $t8, %lo(sMusicDynamicDelay)($at) -.L480200054: -/* 0AB13C 80200054 3C0A8033 */ lui $t2, %hi(D_80360928) # $t2, 0x8033 -/* 0AB140 80200058 254AFF40 */ addiu $t2, %lo(D_80360928) # addiu $t2, $t2, -0xc0 -/* 0AB144 8020005C 0007CA00 */ sll $t9, $a3, 8 -/* 0AB148 80200060 032A1821 */ addu $v1, $t9, $t2 -/* 0AB14C 80200064 00001025 */ move $v0, $zero -/* 0AB150 80200068 00A03025 */ move $a2, $a1 -/* 0AB154 8020006C 30A9007F */ andi $t1, $a1, 0x7f -.L480200070: -/* 0AB158 80200070 00025900 */ sll $t3, $v0, 4 -/* 0AB15C 80200074 24420001 */ addiu $v0, $v0, 1 -/* 0AB160 80200078 304D00FF */ andi $t5, $v0, 0xff -/* 0AB164 8020007C 29A10010 */ slti $at, $t5, 0x10 -/* 0AB168 80200080 006B6021 */ addu $t4, $v1, $t3 -/* 0AB16C 80200084 01A01025 */ move $v0, $t5 -/* 0AB170 80200088 1420FFF9 */ bnez $at, .L480200070 -/* 0AB174 8020008C A580000C */ sh $zero, 0xc($t4) -/* 0AB178 80200090 30E200FF */ andi $v0, $a3, 0xff -/* 0AB17C 80200094 00027400 */ sll $t6, $v0, 0x10 -/* 0AB180 80200098 30C50080 */ andi $a1, $a2, 0x80 -/* 0AB184 8020009C 00057E00 */ sll $t7, $a1, 0x18 -/* 0AB188 802000A0 3C014600 */ lui $at, 0x4600 -/* 0AB18C 802000A4 01C12025 */ or $a0, $t6, $at -/* 0AB190 802000A8 000F2E03 */ sra $a1, $t7, 0x18 -/* 0AB194 802000AC 01C01025 */ move $v0, $t6 -/* 0AB198 802000B0 AFAE001C */ sw $t6, 0x1c($sp) -/* 0AB19C 802000B4 AFA80028 */ sw $t0, 0x28($sp) -/* 0AB1A0 802000B8 0C0BB7DC */ jal func_802ad770 -/* 0AB1A4 802000BC AFA90020 */ sw $t1, 0x20($sp) -/* 0AB1A8 802000C0 8FA90020 */ lw $t1, 0x20($sp) -/* 0AB1AC 802000C4 8FA2001C */ lw $v0, 0x1c($sp) -/* 0AB1B0 802000C8 3C018200 */ lui $at, 0x8200 -/* 0AB1B4 802000CC 312A00FF */ andi $t2, $t1, 0xff -/* 0AB1B8 802000D0 000A5A00 */ sll $t3, $t2, 8 -/* 0AB1BC 802000D4 0041C825 */ or $t9, $v0, $at -/* 0AB1C0 802000D8 032B2025 */ or $a0, $t9, $t3 -/* 0AB1C4 802000DC 0C0BB7D3 */ jal func_802ad74c -/* 0AB1C8 802000E0 97A5003A */ lhu $a1, 0x3a($sp) -/* 0AB1CC 802000E4 8FA80028 */ lw $t0, 0x28($sp) -/* 0AB1D0 802000E8 55000013 */ bnezl $t0, .L480200138 -/* 0AB1D4 802000EC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AB1D8 802000F0 0C0BB0F2 */ jal func_803200E4 -/* 0AB1DC 802000F4 00002025 */ move $a0, $zero -/* 0AB1E0 802000F8 240100FF */ li $at, 255 -/* 0AB1E4 802000FC 5041000E */ beql $v0, $at, .L480200138 -/* 0AB1E8 80200100 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AB1EC 80200104 44822000 */ mtc1 $v0, $f4 -/* 0AB1F0 80200108 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0AB1F4 8020010C 04410004 */ bgez $v0, .L480200120 -/* 0AB1F8 80200110 468021A0 */ cvt.s.w $f6, $f4 -/* 0AB1FC 80200114 44814000 */ mtc1 $at, $f8 -/* 0AB200 80200118 00000000 */ nop -/* 0AB204 8020011C 46083180 */ add.s $f6, $f6, $f8 -.L480200120: -/* 0AB208 80200120 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0AB20C 80200124 44815000 */ mtc1 $at, $f10 -/* 0AB210 80200128 3C018022 */ lui $at, %hi(gSequencePlayers + 0x28) # $at, 0x8022 -/* 0AB214 8020012C 460A3403 */ div.s $f16, $f6, $f10 -/* 0AB218 80200130 E4303D90 */ swc1 $f16, %lo(gSequencePlayers + 0x28)($at) -/* 0AB21C 80200134 8FBF0014 */ lw $ra, 0x14($sp) -.L480200138: -/* 0AB220 80200138 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0AB224 8020013C 03E00008 */ jr $ra -/* 0AB228 80200140 00000000 */ nop diff --git a/asm/non_matchings/eu/player_performed_grab_escape_action.s b/asm/non_matchings/eu/player_performed_grab_escape_action.s deleted file mode 100644 index ce1c054..0000000 --- a/asm/non_matchings/eu/player_performed_grab_escape_action.s +++ /dev/null @@ -1,36 +0,0 @@ -glabel player_performed_grab_escape_action -/* 0D8190 80200000 3C028030 */ lui $v0, %hi(gPlayer1Controller) # $v0, 0x8030 -/* 0D8194 80200004 8C429794 */ lw $v0, %lo(gPlayer1Controller)($v0) -/* 0D8198 80200008 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 0D819C 8020000C 44812000 */ mtc1 $at, $f4 -/* 0D81A0 80200010 C440000C */ lwc1 $f0, 0xc($v0) -/* 0D81A4 80200014 00001825 */ move $v1, $zero -/* 0D81A8 80200018 3C018039 */ lui $at, %hi(sGrabReleaseState) # $at, 0x8039 -/* 0D81AC 8020001C 4604003C */ c.lt.s $f0, $f4 -/* 0D81B0 80200020 3C0E8039 */ lui $t6, %hi(sGrabReleaseState) # $t6, 0x8039 -/* 0D81B4 80200024 45000002 */ bc1f .L81_80200030 -/* 0D81B8 80200028 00000000 */ nop -/* 0D81BC 8020002C AC209C70 */ sw $zero, %lo(sGrabReleaseState)($at) -.L81_80200030: -/* 0D81C0 80200030 8DCE9C70 */ lw $t6, %lo(sGrabReleaseState)($t6) -/* 0D81C4 80200034 3C014220 */ li $at, 0x42200000 # 40.000000 -/* 0D81C8 80200038 55C0000B */ bnezl $t6, .L81_80200068 -/* 0D81CC 8020003C 94580012 */ lhu $t8, 0x12($v0) -/* 0D81D0 80200040 44813000 */ mtc1 $at, $f6 -/* 0D81D4 80200044 3C018039 */ lui $at, %hi(sGrabReleaseState) # $at, 0x8039 -/* 0D81D8 80200048 240F0001 */ li $t7, 1 -/* 0D81DC 8020004C 4600303C */ c.lt.s $f6, $f0 -/* 0D81E0 80200050 00000000 */ nop -/* 0D81E4 80200054 45020004 */ bc1fl .L81_80200068 -/* 0D81E8 80200058 94580012 */ lhu $t8, 0x12($v0) -/* 0D81EC 8020005C AC2F9C70 */ sw $t7, %lo(sGrabReleaseState)($at) -/* 0D81F0 80200060 24030001 */ li $v1, 1 -/* 0D81F4 80200064 94580012 */ lhu $t8, 0x12($v0) -.L81_80200068: -/* 0D81F8 80200068 33198000 */ andi $t9, $t8, 0x8000 -/* 0D81FC 8020006C 13200002 */ beqz $t9, .L81_80200078 -/* 0D8200 80200070 00000000 */ nop -/* 0D8204 80200074 24030001 */ li $v1, 1 -.L81_80200078: -/* 0D8208 80200078 03E00008 */ jr $ra -/* 0D820C 8020007C 00601025 */ move $v0, $v1 diff --git a/asm/rom_header.s b/asm/rom_header.s index aa06865..06d8464 100644 --- a/asm/rom_header.s +++ b/asm/rom_header.s @@ -5,10 +5,12 @@ .byte 0x80, 0x37, 0x12, 0x40 /* PI BSD Domain 1 register */ .word 0x0000000F /* Clockrate setting*/ -.word EntryPoint /* Entrypoint */ +.word entry_point /* Entrypoint */ /* Revision */ -.if VERSION_EU == 1 +.if VERSION_SH == 1 + .word 0x00001448 +.elseif VERSION_EU == 1 .word 0x00001446 .else /* NTSC-U and NTSC-J 1.0 */ .word 0x00001444 @@ -18,7 +20,11 @@ .word 0x74757C24 /* Checksum 2 */ .word 0x00000000 /* Unknown */ .word 0x00000000 /* Unknown */ +.if VERSION_SH == 1 +.ascii "SUPERMARIO64 " /* Internal ROM name */ +.else .ascii "SUPER MARIO 64 " /* Internal ROM name */ +.endif .word 0x00000000 /* Unknown */ .word 0x0000004E /* Cartridge */ .ascii "SM" /* Cartridge ID */ @@ -26,7 +32,7 @@ /* Region */ .if VERSION_US == 1 .ascii "E" /* NTSC-U (North America) */ -.elseif VERSION_JP == 1 +.elseif (VERSION_JP == 1 || VERSION_SH == 1) .ascii "J" /* NTSC-J (Japan) */ .else .ascii "P" /* PAL (Europe) */ diff --git a/assets.json b/assets.json index c64b3b8..1b03279 100644 --- a/assets.json +++ b/assets.json @@ -436,10 +436,10 @@ "actors/water_splash/water_splash_5.rgba16.png": [32,64,4096,{"jp":[1125200,193992],"us":[1132368,193992],"eu":[1004336,193992]}], "actors/water_splash/water_splash_6.rgba16.png": [32,64,4096,{"jp":[1125200,198088],"us":[1132368,198088],"eu":[1004336,198088]}], "actors/water_splash/water_splash_7.rgba16.png": [32,64,4096,{"jp":[1125200,202184],"us":[1132368,202184],"eu":[1004336,202184]}], -"actors/water_waves/water_waves_0.ia16.png": [32,32,2048,{"jp":[1125200,152408],"us":[1132368,152408],"eu":[1004336,152408]}], -"actors/water_waves/water_waves_1.ia16.png": [32,32,2048,{"jp":[1125200,154456],"us":[1132368,154456],"eu":[1004336,154456]}], -"actors/water_waves/water_waves_2.ia16.png": [32,32,2048,{"jp":[1125200,156504],"us":[1132368,156504],"eu":[1004336,156504]}], -"actors/water_waves/water_waves_3.ia16.png": [32,32,2048,{"jp":[1125200,158552],"us":[1132368,158552],"eu":[1004336,158552]}], +"actors/water_wave/water_wave_0.ia16.png": [32,32,2048,{"jp":[1125200,152408],"us":[1132368,152408],"eu":[1004336,152408]}], +"actors/water_wave/water_wave_1.ia16.png": [32,32,2048,{"jp":[1125200,154456],"us":[1132368,154456],"eu":[1004336,154456]}], +"actors/water_wave/water_wave_2.ia16.png": [32,32,2048,{"jp":[1125200,156504],"us":[1132368,156504],"eu":[1004336,156504]}], +"actors/water_wave/water_wave_3.ia16.png": [32,32,2048,{"jp":[1125200,158552],"us":[1132368,158552],"eu":[1004336,158552]}], "actors/whirlpool/whirlpool.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848]}], "actors/white_particle/snow_particle.rgba16.png": [16,16,512,{"jp":[2094912,181920],"us":[2102288,181920],"eu":[1974256,181920]}], "actors/white_particle_small/small_snow_particle.rgba16.png": [16,16,512,{"jp":[1125200,206720],"us":[1132368,206720],"eu":[1004336,206720]}], @@ -1730,8 +1730,7 @@ "textures/snow/ccm_textures.09000.ia16.png": [32,32,2048,{"jp":[3405536,36864],"us":[3412288,36864],"eu":[3285888,36864]}], "textures/snow/ccm_textures.09800.ia16.png": [32,32,2048,{"jp":[3405536,38912],"us":[3412288,38912],"eu":[3285888,38912]}], "textures/spooky/bbh_textures.00000.rgba16.png": [32,32,2048,{"jp":[3298272,0],"us":[3305024,0],"eu":[3178624,0]}], -"textures/spooky/bbh_textures.00800.rgba16.png": [32,32,2048,{"jp":[3298272,2048],"us":[3305024,2048],"eu":[3178624,2048]}], -"textures/spooky/bbh_textures.01000.rgba16.png": [32,32,2048,{"jp":[3298272,4096],"us":[3305024,4096],"eu":[3178624,4096]}], +"textures/spooky/bbh_textures.00800.rgba16.png": [32,64,4096,{"jp":[3298272,2048],"us":[3305024,2048],"eu":[3178624,2048]}], "textures/spooky/bbh_textures.01800.rgba16.png": [32,64,4096,{"jp":[3298272,6144],"us":[3305024,6144],"eu":[3178624,6144]}], "textures/spooky/bbh_textures.02800.rgba16.png": [32,64,4096,{"jp":[3298272,10240],"us":[3305024,10240],"eu":[3178624,10240]}], "textures/spooky/bbh_textures.03800.rgba16.png": [32,64,4096,{"jp":[3298272,14336],"us":[3305024,14336],"eu":[3178624,14336]}], diff --git a/bin/segment2.c b/bin/segment2.c index 97763d9..3ef8dc1 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -82,7 +82,7 @@ ALIGNED8 static const u8 texture_hud_char_I[] = { #include "textures/segment2/segment2.02400.rgba16.inc.c" }; -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_J[] = { #include "textures/segment2/segment2.02600.rgba16.inc.c" }; @@ -112,7 +112,7 @@ ALIGNED8 static const u8 texture_hud_char_P[] = { #include "textures/segment2/segment2.03200.rgba16.inc.c" }; -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_Q[] = { #include "textures/segment2/segment2.03400.rgba16.inc.c" }; @@ -134,7 +134,7 @@ ALIGNED8 static const u8 texture_hud_char_U[] = { #include "textures/segment2/segment2.03C00.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_EU) +#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_V[] = { #include "textures/segment2/segment2.03E00.rgba16.inc.c" }; @@ -144,7 +144,7 @@ ALIGNED8 static const u8 texture_hud_char_W[] = { #include "textures/segment2/segment2.04000.rgba16.inc.c" }; -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_X[] = { #include "textures/segment2/segment2.04200.rgba16.inc.c" }; @@ -154,7 +154,7 @@ ALIGNED8 static const u8 texture_hud_char_Y[] = { #include "textures/segment2/segment2.04400.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_EU) +#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_Z[] = { #include "textures/segment2/segment2.04600.rgba16.inc.c" }; @@ -174,7 +174,7 @@ ALIGNED8 static const u8 texture_hud_char_umlaut[] = { }; #endif -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_exclamation[] = { #include "textures/segment2/segment2.04C00.rgba16.inc.c"// JP ! }; @@ -212,13 +212,13 @@ ALIGNED8 static const u8 texture_hud_char_star[] = { #include "textures/segment2/segment2.05C00.rgba16.inc.c" }; -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_decimal_point[] = { #include "textures/segment2/segment2.05E00.rgba16.inc.c" }; #endif -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_hud_char_beta_key[] = { #include "textures/segment2/segment2.06000.rgba16.inc.c" }; @@ -345,7 +345,7 @@ ALIGNED8 static const u8 texture_credits_char_period[] = { }; // JP Small Font -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const u8 texture_font_char_jp_0[] = { #include "textures/segment2/segment2.07100.ia1.inc.c" }; @@ -1987,7 +1987,7 @@ const u8 *const main_font_lut[] = { texture_font_char_us_question, texture_font_char_us_double_quote_open, texture_font_char_us_double_quote_close, texture_font_char_us_tilde, 0x0, texture_font_char_us_coin, texture_font_char_us_star_filled, texture_font_char_us_multiply, texture_font_char_us_interpunct, texture_font_char_us_star_hollow, 0x0, 0x0, -#elif defined(VERSION_JP) +#elif defined(VERSION_JP) || defined(VERSION_SH) texture_font_char_jp_0, texture_font_char_jp_1, texture_font_char_jp_2, texture_font_char_jp_3, texture_font_char_jp_4, texture_font_char_jp_5, texture_font_char_jp_6, texture_font_char_jp_7, texture_font_char_jp_8, texture_font_char_jp_9, texture_font_char_jp_A, texture_font_char_jp_B, @@ -2078,7 +2078,7 @@ const u8 *const main_hud_camera_lut[] = { // If you change the language here, the following Makefile rule also needs to // change, to generate the right version of define_text.inc.c: // $(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/$(VERSION)/define_text.inc.c -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #include "text/jp/define_text.inc.c" #elif defined(VERSION_US) #include "text/us/define_text.inc.c" @@ -2773,11 +2773,12 @@ const Gfx dl_paintings_draw_ripples[] = { gsSPEndDisplayList(), }; -// 14A60-15BAD: count and triangles? // 14A60: triangle mesh // 0x02014A60 -const s16 seg2_triangle_mesh[] = { - 157, +const s16 seg2_painting_triangle_mesh[] = { + 157, // numVtx + // format: + // 2D point (x, y), ripple (0 or 1) 614, 583, 0, // 0 614, 614, 0, // 1 562, 614, 0, // 2 @@ -3201,128 +3202,172 @@ const s16 seg2_triangle_mesh[] = { 118, 154, 140, // 261 140, 135, 130, // 262 117, 154, 118, // 263 - 0, // TODO: alignment? }; -// 0x02015444: TODO -const s16 seg2_mesh_order[] = { - 3, 1, 2, 3, 1, 1, 4, - 1, 2, 4, 5, 6, 2, 3, 5, - 14, 59, 62, 3, 3, 58, 59, 6, - 4, 5, 13, 14, 15, 16, 2, 4, - 13, 2, 6, 7, 6, 0, 6, 7, - 8, 9, 10, 4, 6, 10, 11, 12, - 4, 7, 8, 154, 155, 6, 8, 9, - 77, 154, 163, 194, 6, 0, 9, 72, - 73, 75, 77, 6, 0, 10, 11, 19, - 70, 72, 6, 11, 12, 17, 18, 19, - 20, 4, 13, 16, 17, 18, 6, 14, - 15, 53, 61, 62, 64, 6, 15, 16, - 18, 20, 64, 67, 6, 19, 20, 66, - 67, 69, 70, 8, 21, 22, 27, 31, - 80, 81, 149, 150, 3, 21, 22, 26, - 6, 23, 24, 25, 28, 57, 60, 3, - 24, 25, 26, 6, 22, 24, 26, 27, - 28, 29, 6, 27, 29, 30, 31, 32, - 33, 8, 30, 33, 39, 40, 78, 79, - 146, 147, 6, 34, 35, 37, 44, 63, - 65, 6, 23, 28, 29, 32, 34, 35, - 6, 23, 35, 53, 60, 61, 63, 6, - 38, 39, 40, 41, 42, 43, 6, 32, - 33, 34, 37, 38, 39, 8, 41, 42, - 48, 52, 76, 82, 148, 151, 6, 44, - 46, 65, 66, 68, 69, 6, 45, 46, - 47, 56, 68, 71, 6, 37, 38, 43, - 44, 45, 46, 6, 42, 43, 45, 47, - 48, 49, 6, 36, 48, 49, 50, 51, - 52, 8, 50, 51, 152, 153, 170, 174, - 214, 215, 6, 36, 47, 49, 54, 55, - 56, 6, 54, 55, 74, 169, 178, 196, - 6, 54, 56, 71, 73, 74, 75, 3, - 25, 57, 58, 6, 57, 58, 59, 60, - 61, 62, 6, 53, 63, 64, 65, 66, - 67, 6, 68, 69, 70, 71, 72, 73, - 6, 74, 75, 77, 194, 195, 196, 6, - 79, 82, 125, 137, 146, 148, 6, 78, - 80, 129, 130, 147, 149, 6, 76, 144, - 145, 151, 152, 153, 3, 84, 85, 86, - 1, 85, 4, 85, 86, 91, 95, 6, - 83, 87, 88, 90, 119, 124, 3, 84, - 87, 88, 6, 89, 91, 92, 93, 94, - 95, 6, 84, 86, 87, 89, 90, 91, - 4, 93, 94, 101, 105, 2, 94, 95, - 6, 96, 97, 100, 108, 126, 131, 6, - 83, 89, 90, 92, 96, 97, 6, 83, - 97, 123, 124, 126, 127, 6, 99, 101, - 102, 103, 104, 105, 6, 92, 93, 96, - 99, 100, 101, 4, 98, 103, 104, 110, - 2, 104, 105, 6, 99, 100, 102, 106, - 107, 108, 6, 106, 107, 111, 117, 134, - 138, 6, 106, 108, 131, 132, 134, 135, - 6, 98, 109, 110, 112, 113, 114, 6, - 102, 103, 107, 109, 110, 111, 4, 113, - 114, 221, 223, 2, 98, 114, 6, 115, - 116, 142, 213, 226, 236, 6, 109, 111, - 112, 115, 116, 117, 6, 116, 117, 138, - 140, 141, 142, 3, 88, 118, 119, 6, - 120, 121, 122, 130, 149, 150, 3, 118, - 120, 121, 6, 118, 119, 120, 122, 123, - 124, 6, 125, 128, 129, 133, 146, 147, - 6, 122, 123, 127, 128, 129, 130, 6, - 126, 127, 128, 131, 132, 133, 6, 136, - 137, 139, 145, 148, 151, 6, 125, 132, - 133, 135, 136, 137, 6, 134, 135, 136, - 138, 139, 140, 6, 143, 144, 153, 215, - 246, 252, 6, 139, 140, 141, 143, 144, - 145, 6, 154, 155, 162, 163, 164, 165, - 1, 157, 3, 157, 158, 159, 4, 157, - 159, 160, 161, 6, 158, 159, 160, 167, - 205, 206, 6, 156, 160, 161, 166, 167, - 168, 6, 162, 163, 194, 195, 197, 199, - 6, 162, 164, 166, 168, 199, 202, 4, - 156, 164, 165, 166, 6, 167, 168, 201, - 202, 204, 205, 6, 36, 50, 55, 169, - 170, 171, 6, 170, 171, 172, 173, 174, - 175, 8, 172, 173, 180, 184, 209, 210, - 211, 212, 6, 176, 177, 179, 188, 198, - 200, 6, 169, 171, 175, 176, 177, 178, - 6, 177, 178, 195, 196, 197, 198, 6, - 172, 175, 176, 179, 180, 181, 6, 180, - 181, 182, 183, 184, 185, 8, 182, 183, - 189, 192, 216, 217, 218, 219, 6, 186, - 187, 190, 193, 203, 207, 6, 179, 181, - 185, 186, 187, 188, 6, 187, 188, 200, - 201, 203, 204, 6, 182, 185, 186, 189, - 190, 191, 3, 189, 191, 192, 3, 193, - 207, 208, 6, 197, 198, 199, 200, 201, - 202, 6, 203, 204, 205, 206, 207, 208, - 6, 209, 210, 250, 251, 253, 258, 6, - 210, 211, 217, 219, 247, 258, 6, 209, - 212, 214, 215, 251, 252, 3, 216, 218, - 263, 6, 218, 219, 247, 259, 261, 263, - 6, 220, 221, 222, 223, 224, 225, 6, - 112, 113, 115, 213, 220, 221, 2, 223, - 224, 4, 224, 225, 230, 235, 6, 226, - 227, 236, 245, 248, 249, 6, 213, 220, - 222, 226, 227, 228, 6, 227, 228, 231, - 239, 249, 255, 6, 229, 230, 232, 233, - 234, 235, 6, 222, 225, 228, 229, 230, - 231, 2, 233, 235, 4, 233, 234, 241, - 243, 6, 237, 238, 242, 244, 257, 262, - 6, 229, 231, 232, 237, 238, 239, 6, - 238, 239, 254, 255, 256, 257, 3, 240, - 241, 243, 6, 232, 234, 237, 240, 241, - 242, 3, 244, 260, 262, 6, 141, 142, - 143, 236, 245, 246, 6, 245, 246, 248, - 250, 251, 252, 6, 248, 249, 250, 253, - 254, 255, 6, 247, 253, 254, 256, 258, - 259, 6, 256, 257, 259, 260, 261, 262, - 2, 12, 17, 2, 21, 81, 3, 81, - 121, 150, 4, 30, 31, 78, 80, 4, - 40, 41, 79, 82, 4, 51, 52, 76, - 152, 2, 155, 165, 3, 158, 206, 208, - 2, 156, 161, 4, 173, 174, 212, 214, - 4, 183, 184, 211, 217, 3, 190, 191, - 193, 2, 192, 216, 3, 260, 261, 263, - 3, 240, 242, 244, 1, 243, +/* 0x02015444: seg2_painting_mesh_neighbor_tris + * Lists the neighboring triangles for each vertex in the mesh. + * Used when applying gouraud shading to the generated ripple mesh + * + * Format: + * num neighbors, neighbor0, neighbor1, ... + * The nth entry corresponds to the nth vertex in seg2_painting_triangle_mesh + */ +const s16 seg2_painting_mesh_neighbor_tris[] = { + 3, 1, 2, 3, + 1, 1, + 4, 1, 2, 4, 5, + 6, 2, 3, 5, 14, 59, 62, + 3, 3, 58, 59, + 6, 4, 5, 13, 14, 15, 16, + 2, 4, 13, + 2, 6, 7, + 6, 0, 6, 7, 8, 9, 10, + 4, 6, 10, 11, 12, + 4, 7, 8, 154, 155, + 6, 8, 9, 77, 154, 163, 194, + 6, 0, 9, 72, 73, 75, 77, + 6, 0, 10, 11, 19, 70, 72, + 6, 11, 12, 17, 18, 19, 20, + 4, 13, 16, 17, 18, + 6, 14, 15, 53, 61, 62, 64, + 6, 15, 16, 18, 20, 64, 67, + 6, 19, 20, 66, 67, 69, 70, + 8, 21, 22, 27, 31, 80, 81, 149, 150, + 3, 21, 22, 26, + 6, 23, 24, 25, 28, 57, 60, + 3, 24, 25, 26, + 6, 22, 24, 26, 27, 28, 29, + 6, 27, 29, 30, 31, 32, 33, + 8, 30, 33, 39, 40, 78, 79, 146, 147, + 6, 34, 35, 37, 44, 63, 65, + 6, 23, 28, 29, 32, 34, 35, + 6, 23, 35, 53, 60, 61, 63, + 6, 38, 39, 40, 41, 42, 43, + 6, 32, 33, 34, 37, 38, 39, + 8, 41, 42, 48, 52, 76, 82, 148, 151, + 6, 44, 46, 65, 66, 68, 69, + 6, 45, 46, 47, 56, 68, 71, + 6, 37, 38, 43, 44, 45, 46, + 6, 42, 43, 45, 47, 48, 49, + 6, 36, 48, 49, 50, 51, 52, + 8, 50, 51, 152, 153, 170, 174, 214, 215, + 6, 36, 47, 49, 54, 55, 56, + 6, 54, 55, 74, 169, 178, 196, + 6, 54, 56, 71, 73, 74, 75, + 3, 25, 57, 58, + 6, 57, 58, 59, 60, 61, 62, + 6, 53, 63, 64, 65, 66, 67, + 6, 68, 69, 70, 71, 72, 73, + 6, 74, 75, 77, 194, 195, 196, + 6, 79, 82, 125, 137, 146, 148, + 6, 78, 80, 129, 130, 147, 149, + 6, 76, 144, 145, 151, 152, 153, + 3, 84, 85, 86, + 1, 85, + 4, 85, 86, 91, 95, + 6, 83, 87, 88, 90, 119, 124, + 3, 84, 87, 88, + 6, 89, 91, 92, 93, 94, 95, + 6, 84, 86, 87, 89, 90, 91, + 4, 93, 94, 101, 105, + 2, 94, 95, + 6, 96, 97, 100, 108, 126, 131, + 6, 83, 89, 90, 92, 96, 97, + 6, 83, 97, 123, 124, 126, 127, + 6, 99, 101, 102, 103, 104, 105, + 6, 92, 93, 96, 99, 100, 101, + 4, 98, 103, 104, 110, + 2, 104, 105, + 6, 99, 100, 102, 106, 107, 108, + 6, 106, 107, 111, 117, 134, 138, + 6, 106, 108, 131, 132, 134, 135, + 6, 98, 109, 110, 112, 113, 114, + 6, 102, 103, 107, 109, 110, 111, + 4, 113, 114, 221, 223, + 2, 98, 114, + 6, 115, 116, 142, 213, 226, 236, + 6, 109, 111, 112, 115, 116, 117, + 6, 116, 117, 138, 140, 141, 142, + 3, 88, 118, 119, + 6, 120, 121, 122, 130, 149, 150, + 3, 118, 120, 121, + 6, 118, 119, 120, 122, 123, 124, + 6, 125, 128, 129, 133, 146, 147, + 6, 122, 123, 127, 128, 129, 130, + 6, 126, 127, 128, 131, 132, 133, + 6, 136, 137, 139, 145, 148, 151, + 6, 125, 132, 133, 135, 136, 137, + 6, 134, 135, 136, 138, 139, 140, + 6, 143, 144, 153, 215, 246, 252, + 6, 139, 140, 141, 143, 144, 145, + 6, 154, 155, 162, 163, 164, 165, + 1, 157, + 3, 157, 158, 159, + 4, 157, 159, 160, 161, + 6, 158, 159, 160, 167, 205, 206, + 6, 156, 160, 161, 166, 167, 168, + 6, 162, 163, 194, 195, 197, 199, + 6, 162, 164, 166, 168, 199, 202, + 4, 156, 164, 165, 166, + 6, 167, 168, 201, 202, 204, 205, + 6, 36, 50, 55, 169, 170, 171, + 6, 170, 171, 172, 173, 174, 175, + 8, 172, 173, 180, 184, 209, 210, 211, 212, + 6, 176, 177, 179, 188, 198, 200, + 6, 169, 171, 175, 176, 177, 178, + 6, 177, 178, 195, 196, 197, 198, + 6, 172, 175, 176, 179, 180, 181, + 6, 180, 181, 182, 183, 184, 185, + 8, 182, 183, 189, 192, 216, 217, 218, 219, + 6, 186, 187, 190, 193, 203, 207, + 6, 179, 181, 185, 186, 187, 188, + 6, 187, 188, 200, 201, 203, 204, + 6, 182, 185, 186, 189, 190, 191, + 3, 189, 191, 192, + 3, 193, 207, 208, + 6, 197, 198, 199, 200, 201, 202, + 6, 203, 204, 205, 206, 207, 208, + 6, 209, 210, 250, 251, 253, 258, + 6, 210, 211, 217, 219, 247, 258, + 6, 209, 212, 214, 215, 251, 252, + 3, 216, 218, 263, + 6, 218, 219, 247, 259, 261, 263, + 6, 220, 221, 222, 223, 224, 225, + 6, 112, 113, 115, 213, 220, 221, + 2, 223, 224, + 4, 224, 225, 230, 235, + 6, 226, 227, 236, 245, 248, 249, + 6, 213, 220, 222, 226, 227, 228, + 6, 227, 228, 231, 239, 249, 255, + 6, 229, 230, 232, 233, 234, 235, + 6, 222, 225, 228, 229, 230, 231, + 2, 233, 235, + 4, 233, 234, 241, 243, + 6, 237, 238, 242, 244, 257, 262, + 6, 229, 231, 232, 237, 238, 239, + 6, 238, 239, 254, 255, 256, 257, + 3, 240, 241, 243, + 6, 232, 234, 237, 240, 241, 242, + 3, 244, 260, 262, + 6, 141, 142, 143, 236, 245, 246, + 6, 245, 246, 248, 250, 251, 252, + 6, 248, 249, 250, 253, 254, 255, + 6, 247, 253, 254, 256, 258, 259, + 6, 256, 257, 259, 260, 261, 262, + 2, 12, 17, + 2, 21, 81, + 3, 81, 121, 150, + 4, 30, 31, 78, 80, + 4, 40, 41, 79, 82, + 4, 51, 52, 76, 152, + 2, 155, 165, + 3, 158, 206, 208, + 2, 156, 161, + 4, 173, 174, 212, 214, + 4, 183, 184, 211, 217, + 3, 190, 191, 193, + 2, 192, 216, + 3, 260, 261, 263, + 3, 240, 242, 244, + 1, 243, }; diff --git a/bin/spooky.c b/bin/spooky.c index 148dcad..391519e 100644 --- a/bin/spooky.c +++ b/bin/spooky.c @@ -12,11 +12,6 @@ ALIGNED8 const u8 spooky_09000800[] = { #include "textures/spooky/bbh_textures.00800.rgba16.inc.c" }; -// 0x09001000 -ALIGNED8 const u8 spooky_09001000[] = { -#include "textures/spooky/bbh_textures.01000.rgba16.inc.c" -}; - // 0x09001800 ALIGNED8 const u8 spooky_09001800[] = { #include "textures/spooky/bbh_textures.01800.rgba16.inc.c" diff --git a/data/behavior_data.c b/data/behavior_data.c index a9742a2..1845952 100644 --- a/data/behavior_data.c +++ b/data/behavior_data.c @@ -288,8 +288,8 @@ #define DISABLE_RENDERING() \ BC_B(0x35) -// Spawns a water splash with the given parameters. -#define SPAWN_WATER_SPLASH(params) \ +// Spawns a water droplet with the given parameters. +#define SPAWN_WATER_DROPLET(params) \ BC_B(0x37), \ BC_PTR(params) @@ -379,7 +379,7 @@ const BehaviorScript bhvPoleGrabbing[] = { CALL_NATIVE(bhv_pole_init), SET_INT(oIntangibleTimer, 0), BEGIN_LOOP(), - CALL_NATIVE(BehClimbDetectLoop), + CALL_NATIVE(bhv_pole_base_loop), END_LOOP(), }; @@ -778,7 +778,7 @@ const BehaviorScript bhvFadingWarp[] = { SET_INT(oInteractType, INTERACT_WARP), SET_INT(oIntangibleTimer, 0), BEGIN_LOOP(), - CALL_NATIVE(BehFadingWarpLoop), + CALL_NATIVE(bhv_fading_warp_loop), END_LOOP(), }; @@ -1209,8 +1209,8 @@ const BehaviorScript bhvBreakBoxTriangle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(18), - CALL_NATIVE(obj_rotate_face_angle_using_vel), - CALL_NATIVE(obj_move_using_fvel_and_gravity), + CALL_NATIVE(cur_obj_rotate_face_angle_using_vel), + CALL_NATIVE(cur_obj_move_using_fvel_and_gravity), END_REPEAT(), DEACTIVATE(), }; @@ -1251,7 +1251,7 @@ const BehaviorScript bhvGroundSand[] = { BEGIN(OBJ_LIST_DEFAULT), BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), - CALL_NATIVE(bhv_unused_0e40_init), + CALL_NATIVE(bhv_ground_sand_init), DELAY(1), DEACTIVATE(), }; @@ -1278,7 +1278,7 @@ const BehaviorScript bhvEndToad[] = { LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58), ANIMATE(0), BEGIN_LOOP(), - CALL_NATIVE(BehEndToadLoop), + CALL_NATIVE(bhv_end_toad_loop), END_LOOP(), }; @@ -1288,7 +1288,7 @@ const BehaviorScript bhvEndPeach[] = { LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C), ANIMATE(0), BEGIN_LOOP(), - CALL_NATIVE(BehEndPeachLoop), + CALL_NATIVE(bhv_end_peach_loop), END_LOOP(), }; @@ -1371,7 +1371,7 @@ const BehaviorScript bhvDddMovingPole[] = { SET_INT(oIntangibleTimer, 0), BEGIN_LOOP(), CALL_NATIVE(bhv_ddd_moving_pole_loop), - CALL_NATIVE(BehClimbDetectLoop), + CALL_NATIVE(bhv_pole_base_loop), END_LOOP(), }; @@ -1971,7 +1971,7 @@ const BehaviorScript bhvTiltingBowserLavaPlatform[] = { SET_INT(oFaceAngleYaw, 0), SET_HOME(), BEGIN_LOOP(), - CALL_NATIVE(obj_rotate_face_angle_using_vel), + CALL_NATIVE(cur_obj_rotate_face_angle_using_vel), CALL_NATIVE(load_object_collision_model), END_LOOP(), }; @@ -2082,7 +2082,7 @@ const BehaviorScript bhvBlueFish[] = { LOAD_ANIMATIONS(oAnimations, blue_fish_seg3_anims_0301C2B0), ANIMATE(0), BEGIN_LOOP(), - CALL_NATIVE(bhv_blue_fish_loop), + CALL_NATIVE(bhv_blue_fish_movement_loop), END_LOOP(), }; @@ -2503,16 +2503,16 @@ const BehaviorScript bhvLargeFishGroup[] = { DISABLE_RENDERING(), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), - CALL_NATIVE(bhv_fish_loop), + CALL_NATIVE(bhv_large_fish_group_loop), END_LOOP(), }; -const BehaviorScript bhvFishGroup2[] = { +const BehaviorScript bhvFish[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), - CALL_NATIVE(bhv_fish_group_2_loop), + CALL_NATIVE(bhv_fish_loop), END_LOOP(), }; @@ -2547,7 +2547,7 @@ const BehaviorScript bhvChirpChirpUnused[] = { DISABLE_RENDERING(), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), - CALL_NATIVE(bhv_bird_chirp_chirp_loop), + CALL_NATIVE(bhv_bub_spawner_loop), END_LOOP(), }; @@ -2562,7 +2562,7 @@ const BehaviorScript bhvBub[] = { SET_HOME(), SET_INT(oIntangibleTimer, 0), BEGIN_LOOP(), - CALL_NATIVE(bhv_cheep_cheep_loop), + CALL_NATIVE(bhv_bub_loop), END_LOOP(), }; @@ -2583,7 +2583,7 @@ const BehaviorScript bhvRotatingExclamationMark[] = { OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SCALE(200), BEGIN_LOOP(), - CALL_NATIVE(bhv_rotatin_exclamation_box_loop), + CALL_NATIVE(bhv_rotating_exclamation_box_loop), ADD_INT(oMoveAngleYaw, 0x800), END_LOOP(), }; @@ -2771,7 +2771,7 @@ const BehaviorScript bhvWhitePuffSmoke2[] = { SET_INT(oAnimState, -1), BEGIN_REPEAT(7), CALL_NATIVE(bhv_white_puff_2_loop), - CALL_NATIVE(obj_move_using_fvel_and_gravity), + CALL_NATIVE(cur_obj_move_using_fvel_and_gravity), ADD_INT(oAnimState, 1), END_REPEAT(), DEACTIVATE(), @@ -3151,7 +3151,7 @@ const BehaviorScript bhvTree[] = { SET_HITBOX(/*Radius*/ 80, /*Height*/ 500), SET_INT(oIntangibleTimer, 0), BEGIN_LOOP(), - CALL_NATIVE(BehClimbDetectLoop), + CALL_NATIVE(bhv_pole_base_loop), END_LOOP(), }; @@ -3237,6 +3237,7 @@ const BehaviorScript bhvSmallWhomp[] = { END_LOOP(), }; +// The large splash Mario makes when he jumps into a pool of water. const BehaviorScript bhvWaterSplash[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), @@ -3244,9 +3245,9 @@ const BehaviorScript bhvWaterSplash[] = { SET_INT(oAnimState, -1), BEGIN_REPEAT(3), ADD_INT(oAnimState, 1), - CALL_NATIVE(bhv_water_splash_loop), + CALL_NATIVE(bhv_water_splash_spawn_droplets), DELAY(1), - CALL_NATIVE(bhv_water_splash_loop), + CALL_NATIVE(bhv_water_splash_spawn_droplets), END_REPEAT(), BEGIN_REPEAT(5), ADD_INT(oAnimState, 1), @@ -3256,16 +3257,18 @@ const BehaviorScript bhvWaterSplash[] = { DEACTIVATE(), }; -const BehaviorScript bhvWaterDrops[] = { +// Droplets of water that spawn as a result of various water splashes. +const BehaviorScript bhvWaterDroplet[] = { BEGIN(OBJ_LIST_UNIMPORTANT), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), - CALL_NATIVE(bhv_water_drops_loop), + CALL_NATIVE(bhv_water_droplet_loop), END_LOOP(), }; -const BehaviorScript bhvWaterSurfaceWhiteWave[] = { +// Small splashes that are seen when a water droplet lands back into the water. +const BehaviorScript bhvWaterDropletSplash[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifndef VERSION_JP @@ -3273,7 +3276,7 @@ const BehaviorScript bhvWaterSurfaceWhiteWave[] = { SET_INT(oFaceAngleYaw, 0), SET_INT(oFaceAngleRoll, 0), #endif - CALL_NATIVE(bhv_water_surface_white_wave_init), + CALL_NATIVE(bhv_water_droplet_splash_init), ADD_FLOAT(oPosY, 5), SET_INT(oAnimState, -1), BEGIN_REPEAT(6), @@ -3282,7 +3285,8 @@ const BehaviorScript bhvWaterSurfaceWhiteWave[] = { DEACTIVATE(), }; -const BehaviorScript bhvObjectBubbleRipples[] = { +// The splash created when an air bubble hits the surface of the water. +const BehaviorScript bhvBubbleSplash[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifdef VERSION_JP @@ -3296,14 +3300,15 @@ const BehaviorScript bhvObjectBubbleRipples[] = { SET_INT(oFaceAngleRoll, 0), #endif SET_INT(oAnimState, -1), - CALL_NATIVE(bhv_object_bubble_ripples_init), + CALL_NATIVE(bhv_bubble_splash_init), BEGIN_REPEAT(6), ADD_INT(oAnimState, 1), END_REPEAT(), DEACTIVATE(), }; -const BehaviorScript bhvSurfaceWaves[] = { +// The water wave surrounding Mario when he is idle in a pool of water. +const BehaviorScript bhvIdleWaterWave[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifdef VERSION_JP @@ -3319,16 +3324,18 @@ const BehaviorScript bhvSurfaceWaves[] = { SET_INT(oAnimState, -1), ADD_INT(oAnimState, 1), BEGIN_LOOP(), - CALL_NATIVE(bhv_surface_waves_loop), + CALL_NATIVE(bhv_idle_water_wave_loop), ADD_INT(oAnimState, 1), BEGIN_REPEAT(6), - CALL_NATIVE(bhv_surface_waves_loop), + CALL_NATIVE(bhv_idle_water_wave_loop), END_REPEAT(), - CALL_NATIVE(bhv_surface_waves_loop), + CALL_NATIVE(bhv_idle_water_wave_loop), END_LOOP(), }; -const BehaviorScript bhvWaterSurfaceWhiteWave2[] = { +// Water splashes similar to the splashes created by water droplets, but are created by other objects. +// Unlike water droplet splashes, they are unimportant objects. +const BehaviorScript bhvObjectWaterSplash[] = { BEGIN(OBJ_LIST_UNIMPORTANT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifdef VERSION_JP @@ -3348,41 +3355,48 @@ const BehaviorScript bhvWaterSurfaceWhiteWave2[] = { DEACTIVATE(), }; -const BehaviorScript bhvWavesGenerator[] = { +// Waves that are generated when running in shallow water. +const BehaviorScript bhvShallowWaterWave[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), BEGIN_REPEAT(5), - SPAWN_WATER_SPLASH(&D_8032FE18), + SPAWN_WATER_DROPLET(&sShallowWaterWaveDropletParams), END_REPEAT_CONTINUE(), DELAY(1), - BIT_CLEAR_INT32(oActiveParticleFlags, ACTIVE_PARTICLE_8), + BIT_CLEAR_INT32(oActiveParticleFlags, ACTIVE_PARTICLE_SHALLOW_WATER_WAVE), DEACTIVATE(), }; -const BehaviorScript bhvSurfaceWaveShrinking[] = { +// A small water splash that occurs when jumping in and out of shallow water. +// Unlike the larger water splash it has no visible model of its own. +// It has a 1 in 256 chance of spawning the fish particle easter egg. +const BehaviorScript bhvShallowWaterSplash[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), BEGIN_REPEAT(18), - SPAWN_WATER_SPLASH(&D_8032FDD0), + SPAWN_WATER_DROPLET(&sShallowWaterSplashDropletParams), END_REPEAT_CONTINUE(), - CALL_NATIVE(bhv_surface_wave_shrinking_init), + CALL_NATIVE(bhv_shallow_water_splash_init), DELAY(1), - BIT_CLEAR_INT32(oActiveParticleFlags, ACTIVE_PARTICLE_12), + BIT_CLEAR_INT32(oActiveParticleFlags, ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH), DEACTIVATE(), }; -const BehaviorScript bhvWaterType[] = { +// Waves created by other objects along the water's surface, specifically the koopa shell and Sushi. +// Unlike Mario's waves, they are unimportant objects. +const BehaviorScript bhvObjectWaveTrail[] = { BEGIN(OBJ_LIST_UNIMPORTANT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), - GOTO(bhvWaveTrailOnSurface + 1 + 1 + 2), + GOTO(bhvWaveTrail + 1 + 1 + 2), // Wave trail - common }; -const BehaviorScript bhvWaveTrailOnSurface[] = { +// The waves created by Mario while he is swimming. +const BehaviorScript bhvWaveTrail[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), - BIT_CLEAR_INT32(oActiveParticleFlags, ACTIVE_PARTICLE_10), + BIT_CLEAR_INT32(oActiveParticleFlags, ACTIVE_PARTICLE_WAVE_TRAIL), // Wave trail - common: SET_FLOAT(oFaceAnglePitch, 0), SET_FLOAT(oFaceAngleYaw, 0), @@ -3390,41 +3404,47 @@ const BehaviorScript bhvWaveTrailOnSurface[] = { SET_INT(oAnimState, -1), BEGIN_REPEAT(8), ADD_INT(oAnimState, 1), - CALL_NATIVE(bhv_wave_trail_loop), + CALL_NATIVE(bhv_wave_trail_shrink), DELAY(1), - CALL_NATIVE(bhv_wave_trail_loop), + CALL_NATIVE(bhv_wave_trail_shrink), END_REPEAT(), DEACTIVATE(), }; -const BehaviorScript bhvTinyWhiteWindParticle[] = { +// Tiny wind particles that provide aesthetics to the strong winds generated by the Snowman and Fwoosh. +// As they are unimportant objects, they don't have collision with Mario. +const BehaviorScript bhvTinyStrongWindParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), - CALL_NATIVE(bhv_white_wind_particle_loop), + CALL_NATIVE(bhv_strong_wind_particle_loop), END_LOOP(), }; -const BehaviorScript bhvWindParticle[] = { +// Strong wind particles generated by the Snowman and Fwoosh that blow Mario back and knock his cap off. +const BehaviorScript bhvStrongWindParticle[] = { BEGIN(OBJ_LIST_POLELIKE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), - CALL_NATIVE(bhv_white_wind_particle_loop), + CALL_NATIVE(bhv_strong_wind_particle_loop), END_LOOP(), }; -const BehaviorScript bhvSnowmanWindBlowing[] = { +// The handler for the strong wind blown by the Snowman in SL. Triggers dialog and then aims towards Mario. +const BehaviorScript bhvSLSnowmanWind[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), - CALL_NATIVE(bhv_snowman_wind_blowing_loop), + CALL_NATIVE(bhv_sl_snowman_wind_loop), END_LOOP(), }; -const BehaviorScript bhvWalkingPenguin[] = { +// The penguin that walks erratically along the ice bridge in front of the Snowman in SL. +// Blocks strong wind particles, allowing Mario to walk behind it. +const BehaviorScript bhvSLWalkingPenguin[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(penguin_seg5_collision_05008B88), @@ -3434,7 +3454,7 @@ const BehaviorScript bhvWalkingPenguin[] = { SCALE(600), SET_HOME(), BEGIN_LOOP(), - CALL_NATIVE(bhv_walking_penguin_loop), + CALL_NATIVE(bhv_sl_walking_penguin_loop), CALL_NATIVE(load_object_collision_model), END_LOOP(), }; @@ -3469,18 +3489,18 @@ const BehaviorScript bhvToadMessage[] = { SET_HITBOX(/*Radius*/ 80, /*Height*/ 100), SET_INT(oIntangibleTimer, 0), CALL_NATIVE(bhv_init_room), - CALL_NATIVE(bhvToadMessage_init), + CALL_NATIVE(bhv_toad_message_init), BEGIN_LOOP(), - CALL_NATIVE(bhvToadMessage_loop), + CALL_NATIVE(bhv_toad_message_loop), END_LOOP(), }; const BehaviorScript bhvUnlockDoorStar[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), - CALL_NATIVE(bhvUnlockDoorStar_init), + CALL_NATIVE(bhv_unlock_door_star_init), BEGIN_LOOP(), - CALL_NATIVE(bhvUnlockDoorStar_loop), + CALL_NATIVE(bhv_unlock_door_star_loop), END_LOOP(), }; @@ -3695,7 +3715,7 @@ const BehaviorScript bhvBobombFuseSmoke[] = { CALL_NATIVE(bhv_bobomb_fuse_smoke_init), DELAY(1), BEGIN_LOOP(), - CALL_NATIVE(BehDustSmokeLoop), + CALL_NATIVE(bhv_dust_smoke_loop), ADD_INT(oAnimState, 1), END_LOOP(), }; @@ -3944,7 +3964,7 @@ const BehaviorScript bhvBobombBullyDeathSmoke[] = { CALL_NATIVE(bhv_bobomb_bully_death_smoke_init), DELAY(1), BEGIN_LOOP(), - CALL_NATIVE(BehDustSmokeLoop), + CALL_NATIVE(bhv_dust_smoke_loop), ADD_INT(oAnimState, 1), END_LOOP(), }; @@ -3956,7 +3976,7 @@ const BehaviorScript bhvSmoke[] = { SET_INT(oAnimState, -1), DELAY(1), BEGIN_LOOP(), - CALL_NATIVE(BehDustSmokeLoop), + CALL_NATIVE(bhv_dust_smoke_loop), ADD_INT(oAnimState, 1), END_LOOP(), }; @@ -4634,7 +4654,7 @@ const BehaviorScript bhvLllVolcanoFallingTrap[] = { LOAD_COLLISION_DATA(lll_seg7_collision_falling_wall), SET_HOME(), BEGIN_LOOP(), - CALL_NATIVE(bhvLllVolcanoFallingTrap_loop), + CALL_NATIVE(bhv_volcano_trap_loop), CALL_NATIVE(load_object_collision_model), END_LOOP(), }; @@ -5016,7 +5036,7 @@ const BehaviorScript bhvYoshi[] = { CALL_NATIVE(bhv_yoshi_init), BEGIN_LOOP(), SET_INT(oIntangibleTimer, 0), - CALL_NATIVE(BehYoshiLoop), + CALL_NATIVE(bhv_yoshi_loop), END_LOOP(), }; @@ -5056,7 +5076,7 @@ const BehaviorScript bhvKoopaFlag[] = { LOAD_ANIMATIONS(oAnimations, koopa_flag_seg6_anims_06001028), ANIMATE(0), BEGIN_LOOP(), - CALL_NATIVE(BehClimbDetectLoop), + CALL_NATIVE(bhv_pole_base_loop), END_LOOP(), }; @@ -5422,7 +5442,7 @@ const BehaviorScript bhvTTCTreadmill[] = { DELAY(1), BEGIN_LOOP(), CALL_NATIVE(bhv_ttc_treadmill_update), - CALL_NATIVE(obj_compute_vel_xz), + CALL_NATIVE(cur_obj_compute_vel_xz), CALL_NATIVE(load_object_collision_model), END_LOOP(), }; @@ -5759,7 +5779,7 @@ const BehaviorScript bhvSnufit[] = { SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), CALL_NATIVE(bhv_init_room), BEGIN_LOOP(), - SET_INT(oSnufitUnkF4, 0), + SET_INT(oSnufitRecoil, 0), CALL_NATIVE(bhv_snufit_loop), END_LOOP(), }; @@ -5787,7 +5807,7 @@ const BehaviorScript bhvHorizontalGrindel[] = { SCALE(90), CALL_NATIVE(bhv_horizontal_grindel_init), BEGIN_LOOP(), - CALL_NATIVE(obj_update_floor_and_walls), + CALL_NATIVE(cur_obj_update_floor_and_walls), CALL_NATIVE(bhv_horizontal_grindel_update), CALL_NATIVE(load_object_collision_model), END_LOOP(), @@ -5960,7 +5980,7 @@ const BehaviorScript bhvDDDPole[] = { SET_FLOAT(oDDDPoleVel, 10), BEGIN_LOOP(), CALL_NATIVE(bhv_ddd_pole_update), - CALL_NATIVE(BehClimbDetectLoop), + CALL_NATIVE(bhv_pole_base_loop), END_LOOP(), }; diff --git a/diff.py b/diff.py old mode 100644 new mode 100755 diff --git a/enhancements/mem_error_screen.patch b/enhancements/mem_error_screen.patch index 3dfe2ac..6429a67 100644 --- a/enhancements/mem_error_screen.patch +++ b/enhancements/mem_error_screen.patch @@ -37,7 +37,7 @@ index 2fda11d7..8ba0a1c9 100644 +#define TEXT_PJ64 _("If you are using PJ64 1.6, go to:\nOptions > Settings > Rom Settings Tab > Memory Size\nthen select 8 MB from the drop-down box.") +#define TEXT_PJ64_2 _("If you are using PJ64 2.X, go to:\nOptions > Settings > Config: > Memory Size, select 8 MB") + - #ifdef VERSION_JP + #if defined(VERSION_JP) || defined(VERSION_SH) /** diff --git a/levels/entry.c b/levels/entry.c @@ -274,10 +274,10 @@ index 00000000..20eeef8f + + addr = segmented_to_virtual(level_script_entry_error_screen); + -+ func_80247ED8(); ++ rendering_init(); + + while (1) { -+ func_80247FAC(); ++ config_gfx_pool(); + addr = level_script_execute(addr); + display_and_vsync(); + } diff --git a/extract_assets.py b/extract_assets.py index 91e5dd5..c83d3bf 100755 --- a/extract_assets.py +++ b/extract_assets.py @@ -20,6 +20,8 @@ def read_local_asset_list(f): def asset_needs_update(asset, version): + if version <= 5 and asset == "textures/spooky/bbh_textures.00800.rgba16.png": + return True if version <= 4 and asset in ["textures/mountain/ttm_textures.01800.rgba16.png", "textures/mountain/ttm_textures.05800.rgba16.png"]: return True if version <= 3 and asset == "textures/cave/hmc_textures.01800.rgba16.png": @@ -57,7 +59,7 @@ def clean_assets(local_asset_file): def main(): # In case we ever need to change formats of generated files, we keep a # revision ID in the local asset file. - new_version = 5 + new_version = 6 try: local_asset_file = open(".assets-local.txt") diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index b0f0cb2..9b5abd2 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -6,7 +6,7 @@ /* Types */ typedef struct { -#ifndef VERSION_EU +#if !defined(VERSION_EU) && !defined(VERSION_SH) u32 errStatus; #endif void *dramAddr; @@ -22,7 +22,7 @@ typedef struct { u16 blockNum; // 6 s32 sectorNum; // 8 uintptr_t devAddr; // c -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) u32 unk10; //error status added moved to blockinfo #endif u32 bmCtlShadow; // 10 @@ -60,7 +60,7 @@ typedef struct { /*0x08*/ void *dramAddr; /*0x0C*/ uintptr_t devAddr; /*0x10*/ size_t size; -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) OSPiHandle *piHandle; // from the official definition #endif } OSIoMesg; diff --git a/include/behavior_data.h b/include/behavior_data.h index 83f1f1e..3334adf 100644 --- a/include/behavior_data.h +++ b/include/behavior_data.h @@ -211,7 +211,7 @@ extern const BehaviorScript bhvFish2[]; extern const BehaviorScript bhvFish3[]; extern const BehaviorScript bhvLargeFishGroup[]; extern const BehaviorScript bhvFishCommon[]; -extern const BehaviorScript bhvFishGroup2[]; +extern const BehaviorScript bhvFish[]; extern const BehaviorScript bhvWdwExpressElevator[]; extern const BehaviorScript bhvWdwExpressElevatorPlatform[]; extern const BehaviorScript bhvChirpChirp[]; @@ -285,19 +285,19 @@ extern const BehaviorScript bhvScuttlebugSpawn[]; extern const BehaviorScript bhvWhompKingBoss[]; extern const BehaviorScript bhvSmallWhomp[]; extern const BehaviorScript bhvWaterSplash[]; -extern const BehaviorScript bhvWaterDrops[]; -extern const BehaviorScript bhvWaterSurfaceWhiteWave[]; -extern const BehaviorScript bhvObjectBubbleRipples[]; -extern const BehaviorScript bhvSurfaceWaves[]; -extern const BehaviorScript bhvWaterSurfaceWhiteWave2[]; -extern const BehaviorScript bhvWavesGenerator[]; -extern const BehaviorScript bhvSurfaceWaveShrinking[]; -extern const BehaviorScript bhvWaterType[]; -extern const BehaviorScript bhvWaveTrailOnSurface[]; -extern const BehaviorScript bhvTinyWhiteWindParticle[]; -extern const BehaviorScript bhvWindParticle[]; -extern const BehaviorScript bhvSnowmanWindBlowing[]; -extern const BehaviorScript bhvWalkingPenguin[]; +extern const BehaviorScript bhvWaterDroplet[]; +extern const BehaviorScript bhvWaterDropletSplash[]; +extern const BehaviorScript bhvBubbleSplash[]; +extern const BehaviorScript bhvIdleWaterWave[]; +extern const BehaviorScript bhvObjectWaterSplash[]; +extern const BehaviorScript bhvShallowWaterWave[]; +extern const BehaviorScript bhvShallowWaterSplash[]; +extern const BehaviorScript bhvObjectWaveTrail[]; +extern const BehaviorScript bhvWaveTrail[]; +extern const BehaviorScript bhvTinyStrongWindParticle[]; +extern const BehaviorScript bhvStrongWindParticle[]; +extern const BehaviorScript bhvSLSnowmanWind[]; +extern const BehaviorScript bhvSLWalkingPenguin[]; extern const BehaviorScript bhvYellowBall[]; extern const BehaviorScript bhvMario[]; extern const BehaviorScript bhvToadMessage[]; diff --git a/src/game/eu_translation.h b/include/eu_translation.h similarity index 77% rename from src/game/eu_translation.h rename to include/eu_translation.h index e2e53f8..fc476ed 100644 --- a/src/game/eu_translation.h +++ b/include/eu_translation.h @@ -3,6 +3,14 @@ #include "types.h" +// PAL changes most text to arrays for each language. This define allows these +// differences to be combined. +#ifdef VERSION_EU + #define LANGUAGE_ARRAY(cmd) cmd[LANGUAGE_FUNCTION] +#else + #define LANGUAGE_ARRAY(cmd) cmd +#endif + // EU translations are contained in three segment 0x19 compressed data blocks extern u8 _translation_en_mio0SegmentRomStart[]; extern u8 _translation_en_mio0SegmentRomEnd[]; diff --git a/include/model_ids.h b/include/model_ids.h index e3b3c93..8b6e299 100644 --- a/include/model_ids.h +++ b/include/model_ids.h @@ -498,10 +498,10 @@ #define MODEL_WHITE_PARTICLE 0xA0 // white_particle_dl #define MODEL_PEBBLE 0xA1 // pebble_seg3_dl_0301CB00 #define MODEL_LEAVES 0xA2 // leaves_geo -#define MODEL_WATER_WAVES 0xA3 // water_waves_geo +#define MODEL_WAVE_TRAIL 0xA3 // wave_trail_geo #define MODEL_WHITE_PARTICLE_SMALL 0xA4 // white_particle_small_dl -#define MODEL_SPOT_ON_GROUND 0xA5 // spot_on_ground_geo -#define MODEL_WATER_WAVES_SURF 0xA6 // water_waves_surface_geo +#define MODEL_SMALL_WATER_SPLASH 0xA5 // small_water_splash_geo +#define MODEL_IDLE_WATER_WAVE 0xA6 // idle_water_wave_geo #define MODEL_WATER_SPLASH 0xA7 // water_splash_geo #define MODEL_BUBBLE 0xA8 // bubble_geo // find me diff --git a/include/object_constants.h b/include/object_constants.h index 51f45fa..b828b6e 100644 --- a/include/object_constants.h +++ b/include/object_constants.h @@ -106,24 +106,26 @@ OBJ_MOVE_UNDERWATER_ON_GROUND) /* oActiveParticleFlags */ -#define ACTIVE_PARTICLE_0 0x00000001 -#define ACTIVE_PARTICLE_3 0x00000008 -#define ACTIVE_PARTICLE_4 0x00000010 -#define ACTIVE_PARTICLE_5 0x00000020 -#define ACTIVE_PARTICLE_6 0x00000040 -#define ACTIVE_PARTICLE_7 0x00000080 -#define ACTIVE_PARTICLE_8 0x00000100 -#define ACTIVE_PARTICLE_9 0x00000200 -#define ACTIVE_PARTICLE_10 0x00000400 -#define ACTIVE_PARTICLE_11 0x00000800 -#define ACTIVE_PARTICLE_12 0x00001000 -#define ACTIVE_PARTICLE_13 0x00002000 -#define ACTIVE_PARTICLE_14 0x00004000 -#define ACTIVE_PARTICLE_15 0x00008000 -#define ACTIVE_PARTICLE_16 0x00010000 -#define ACTIVE_PARTICLE_17 0x00020000 -#define ACTIVE_PARTICLE_18 0x00040000 -#define ACTIVE_PARTICLE_19 0x00080000 +#define ACTIVE_PARTICLE_0 (1 << 0) // 0x00000001 +#define ACTIVE_PARTICLE_UNUSED_1 (1 << 1) // 0x00000002 +#define ACTIVE_PARTICLE_UNUSED_2 (1 << 2) // 0x00000004 +#define ACTIVE_PARTICLE_3 (1 << 3) // 0x00000008 +#define ACTIVE_PARTICLE_4 (1 << 4) // 0x00000010 +#define ACTIVE_PARTICLE_5 (1 << 5) // 0x00000020 +#define ACTIVE_PARTICLE_6 (1 << 6) // 0x00000040 +#define ACTIVE_PARTICLE_IDLE_WATER_WAVE (1 << 7) // 0x00000080 +#define ACTIVE_PARTICLE_SHALLOW_WATER_WAVE (1 << 8) // 0x00000100 +#define ACTIVE_PARTICLE_9 (1 << 9) // 0x00000200 +#define ACTIVE_PARTICLE_WAVE_TRAIL (1 << 10) // 0x00000400 +#define ACTIVE_PARTICLE_11 (1 << 11) // 0x00000800 +#define ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH (1 << 12) // 0x00001000 +#define ACTIVE_PARTICLE_13 (1 << 13) // 0x00002000 +#define ACTIVE_PARTICLE_14 (1 << 14) // 0x00004000 +#define ACTIVE_PARTICLE_15 (1 << 15) // 0x00008000 +#define ACTIVE_PARTICLE_16 (1 << 16) // 0x00010000 +#define ACTIVE_PARTICLE_17 (1 << 17) // 0x00020000 +#define ACTIVE_PARTICLE_18 (1 << 18) // 0x00040000 +#define ACTIVE_PARTICLE_19 (1 << 19) // 0x00080000 /* oAction */ #define OBJ_ACT_LAVA_DEATH 100 @@ -197,6 +199,24 @@ #define BOBOMB_BUDDY_HAS_NOT_TALKED 0 #define BOBOMB_BUDDY_HAS_TALKED 2 +/* Fish */ + /* oAction */ + #define FISH_ACT_INIT 0 + #define FISH_ACT_ACTIVE 1 + #define FISH_ACT_RESPAWN 2 + +/* Blue_Fish */ + /* oAction */ + #define BLUE_FISH_ACT_DIVE 0 + #define BLUE_FISH_ACT_TURN 1 + #define BLUE_FISH_ACT_ASCEND 2 + #define BLUE_FISH_ACT_TURN_BACK 3 + + /* oAction: bhv_blue_fish_spawn_loop */ + #define BLUE_FISH_ACT_SPAWN 0 + #define BLUE_FISH_ACT_ROOM 1 + #define BLUE_FISH_ACT_DUPLICATE 2 + /* Cannon Trap Door */ /* oAction */ #define CANNON_TRAP_DOOR_ACT_CLOSED 0 @@ -733,10 +753,37 @@ #define PYRAMID_WALL_BP_POSITION_MIDDLE 1 #define PYRAMID_WALL_BP_POSITION_LOW 2 -/* Tuxie */ +/* Penguins (general) */ /* Walking sounds */ #define PENGUIN_WALK_BABY 0 #define PENGUIN_WALK_BIG 1 + + /* Animations */ + #define PENGUIN_ANIM_WALK 0 + #define PENGUIN_ANIM_IDLE 3 + +/* Racing penguin */ + /* oAction */ + #define RACING_PENGUIN_ACT_WAIT_FOR_MARIO 0 + #define RACING_PENGUIN_ACT_SHOW_INIT_TEXT 1 + #define RACING_PENGUIN_ACT_PREPARE_FOR_RACE 2 + #define RACING_PENGUIN_ACT_RACE 3 + #define RACING_PENGUIN_ACT_FINISH_RACE 4 + #define RACING_PENGUIN_ACT_SHOW_FINAL_TEXT 5 + +/* SL walking penguin */ + /* oAction */ + #define SL_WALKING_PENGUIN_ACT_MOVING_FORWARDS 0 + #define SL_WALKING_PENGUIN_ACT_TURNING_BACK 1 + #define SL_WALKING_PENGUIN_ACT_RETURNING 2 + #define SL_WALKING_PENGUIN_ACT_TURNING_FORWARDS 3 + +/* Snowman wind */ + /* oSubAction */ + #define SL_SNOWMAN_WIND_ACT_IDLE 0 + #define SL_SNOWMAN_WIND_ACT_TALKING 1 + #define SL_SNOWMAN_WIND_ACT_BLOWING 2 + /* Water bomb */ /* oAction */ @@ -850,21 +897,17 @@ #define BIRD_BP_SPAWNED 0 #define BIRD_BP_SPAWNER 1 -/* Racing penguin */ - /* oAction */ - #define RACING_PENGUIN_ACT_WAIT_FOR_MARIO 0 - #define RACING_PENGUIN_ACT_SHOW_INIT_TEXT 1 - #define RACING_PENGUIN_ACT_PREPARE_FOR_RACE 2 - #define RACING_PENGUIN_ACT_RACE 3 - #define RACING_PENGUIN_ACT_FINISH_RACE 4 - #define RACING_PENGUIN_ACT_SHOW_FINAL_TEXT 5 - /* Skeeter */ /* oAction */ #define SKEETER_ACT_IDLE 0 #define SKEETER_ACT_LUNGE 1 #define SKEETER_ACT_WALK 2 +/* Snufit */ + /* oAction */ + #define SNUFIT_ACT_IDLE 0 + #define SNUFIT_ACT_SHOOT 1 + /* Tweester */ /* oAction */ #define TWEESTER_ACT_IDLE 0 diff --git a/include/object_fields.h b/include/object_fields.h index bff69be..4eb50ed 100644 --- a/include/object_fields.h +++ b/include/object_fields.h @@ -483,19 +483,19 @@ #define /*0x0F4*/ oFireSpitterScaleVel OBJECT_FIELD_F32(0x1B) /* Blue Fish */ -#define /*0x0F4*/ oBlueFishUnkF4 OBJECT_FIELD_F32(0x1B) -#define /*0x0F8*/ oBlueFishUnkF8 OBJECT_FIELD_S32(0x1C) -#define /*0x100*/ oBlueFishUnk100 OBJECT_FIELD_F32(0x1E) +#define /*0x0F4*/ oBlueFishRandomVel OBJECT_FIELD_F32(0x1B) +#define /*0x0F8*/ oBlueFishRandomTime OBJECT_FIELD_S32(0x1C) +#define /*0x100*/ oBlueFishRandomAngle OBJECT_FIELD_F32(0x1E) /* Fish Group */ -#define /*0x0F4*/ oFishGroupUnkF4 OBJECT_FIELD_F32(0x1B) -#define /*0x0F8*/ oFishGroupUnkF8 OBJECT_FIELD_F32(0x1C) -#define /*0x0FC*/ oFishGroupUnkFC OBJECT_FIELD_F32(0x1D) -#define /*0x100*/ oFishGroupUnk100 OBJECT_FIELD_S32(0x1E) -#define /*0x104*/ oFishGroupUnk104 OBJECT_FIELD_F32(0x1F) -#define /*0x108*/ oFishGroupUnk108 OBJECT_FIELD_F32(0x20) -#define /*0x10C*/ oFishGroupUnk10C OBJECT_FIELD_F32(0x21) -#define /*0x110*/ oFishGroupUnk110 OBJECT_FIELD_F32(0x22) +#define /*0x0F4*/ oFishWaterLevel OBJECT_FIELD_F32(0x1B) +#define /*0x0F8*/ oFishPosY OBJECT_FIELD_F32(0x1C) +#define /*0x0FC*/ oFishRandomOffset OBJECT_FIELD_F32(0x1D) +#define /*0x100*/ oFishRandomSpeed OBJECT_FIELD_S32(0x1E) +#define /*0x104*/ oFishRespawnDistance OBJECT_FIELD_F32(0x1F) +#define /*0x108*/ oFishRandomVel OBJECT_FIELD_F32(0x20) +#define /*0x10C*/ oFishDepthDistance OBJECT_FIELD_F32(0x21) +#define /*0x110*/ oFishActiveDistance OBJECT_FIELD_F32(0x22) /* Flame */ #define /*0x0F4*/ oFlameUnkF4 OBJECT_FIELD_F32(0x1B) @@ -752,11 +752,11 @@ #define /*0x108*/ oSmallPenguinUnk108 OBJECT_FIELD_F32(0x20) #define /*0x110*/ oSmallPenguinUnk110 OBJECT_FIELD_S32(0x22) -/* Walking Penguin */ -#define /*0x100*/ oWalkingPenguinUnk100 OBJECT_FIELD_F32(0x1E) -#define /*0x104*/ oWalkingPenguinUnk104 OBJECT_FIELD_F32(0x1F) -#define /*0x10C*/ oWalkingPenguinUnk10C OBJECT_FIELD_S32(0x21) -#define /*0x110*/ oWalkingPenguinUnk110 OBJECT_FIELD_S32(0x22) +/* SL Walking Penguin */ +#define /*0x100*/ oSLWalkingPenguinWindCollisionXPos OBJECT_FIELD_F32(0x1E) +#define /*0x104*/ oSLWalkingPenguinWindCollisionZPos OBJECT_FIELD_F32(0x1F) +#define /*0x10C*/ oSLWalkingPenguinCurStep OBJECT_FIELD_S32(0x21) +#define /*0x110*/ oSLWalkingPenguinCurStepTimer OBJECT_FIELD_S32(0x22) /* Piranha Plant */ #define /*0x0F4*/ oPiranhaPlantSleepMusicState OBJECT_FIELD_S32(0x1B) @@ -884,19 +884,19 @@ #define /*0x0F4*/ oSnowmansHeadUnkF4 OBJECT_FIELD_S32(0x1B) /* Snowman Wind Blowing */ -#define /*0x0F4*/ oSnowmanWindBlowingUnkF4 OBJECT_FIELD_S32(0x1B) +#define /*0x0F4*/ oSLSnowmanWindOriginalYaw OBJECT_FIELD_S32(0x1B) /* Snufit */ -#define /*0x0F4*/ oSnufitUnkF4 OBJECT_FIELD_S32(0x1B) -#define /*0x0F8*/ oSnufitUnkF8 OBJECT_FIELD_F32(0x1C) -#define /*0x100*/ oSnufitUnk100 OBJECT_FIELD_S32(0x1E) -#define /*0x104*/ oSnufitUnk104 OBJECT_FIELD_S32(0x1F) -#define /*0x108*/ oSnufitUnk108 OBJECT_FIELD_S32(0x20) -#define /*0x10C*/ oSnufitUnk10C OBJECT_FIELD_S32(0x21) -#define /*0x1AC*/ oSnufitUnk1AC OBJECT_FIELD_S16(0x49, 0) -#define /*0x1AE*/ oSnufitUnk1AE OBJECT_FIELD_S16(0x49, + 1) -#define /*0x1B0*/ oSnufitUnk1B0 OBJECT_FIELD_S16(0x4A, 0) -#define /*0x1B2*/ oSnufitUnk1B2 OBJECT_FIELD_S16(0x4A, + 1) +#define /*0x0F4*/ oSnufitRecoil OBJECT_FIELD_S32(0x1B) +#define /*0x0F8*/ oSnufitScale OBJECT_FIELD_F32(0x1C) +#define /*0x100*/ oSnufitCircularPeriod OBJECT_FIELD_S32(0x1E) +#define /*0x104*/ oSnufitBodyScalePeriod OBJECT_FIELD_S32(0x1F) +#define /*0x108*/ oSnufitBodyBaseScale OBJECT_FIELD_S32(0x20) +#define /*0x10C*/ oSnufitBullets OBJECT_FIELD_S32(0x21) +#define /*0x1AC*/ oSnufitXOffset OBJECT_FIELD_S16(0x49, 0) +#define /*0x1AE*/ oSnufitYOffset OBJECT_FIELD_S16(0x49, + 1) +#define /*0x1B0*/ oSnufitZOffset OBJECT_FIELD_S16(0x4A, 0) +#define /*0x1B2*/ oSnufitBodyScale OBJECT_FIELD_S16(0x4A, + 1) /* Spindel */ #define /*0x0F4*/ oSpindelUnkF4 OBJECT_FIELD_S32(0x1B) @@ -1118,7 +1118,7 @@ #define /*0x0F8*/ oWaterRingMgrLastRingCollected OBJECT_FIELD_S32(0x1C) /* Wave Trail */ -#define /*0x0F8*/ oWaveTrailUnkF8 OBJECT_FIELD_F32(0x1C) +#define /*0x0F8*/ oWaveTrailSize OBJECT_FIELD_F32(0x1C) /* Whirlpool */ #define /*0x0F4*/ oWhirlpoolInitFacePitch OBJECT_FIELD_S32(0x1B) @@ -1130,7 +1130,7 @@ #define /*0x0FC*/ oWhitePuffUnkFC OBJECT_FIELD_S32(0x1D) /* White Wind Particle */ -#define /*0x0F4*/ oWhiteWindParticleUnkF4 OBJECT_FIELD_OBJ(0x1B) +#define /*0x0F4*/ oStrongWindParticlePenguinObj OBJECT_FIELD_OBJ(0x1B) /* Whomp */ #define /*0x0F8*/ oWhompUnkF8 OBJECT_FIELD_S32(0x1C) diff --git a/include/segments.h b/include/segments.h index a3fd2ee..c98040a 100644 --- a/include/segments.h +++ b/include/segments.h @@ -22,6 +22,8 @@ #ifdef VERSION_EU #define SEG_MAIN 0x80241800 // TODO: Investigate why it's different? +#elif defined(VERSION_SH) +#define SEG_MAIN 0x80249000 #else #define SEG_MAIN 0x80246000 #endif diff --git a/include/sm64.h b/include/sm64.h index 0f1358f..714e1ec 100644 --- a/include/sm64.h +++ b/include/sm64.h @@ -88,26 +88,26 @@ #define WATER_STEP_CANCELLED 3 #define WATER_STEP_HIT_WALL 4 -#define PARTICLE_DUST /* 0x00000001 */ (1 << 0) -#define PARTICLE_1 /* 0x00000002 */ (1 << 1) -#define PARTICLE_2 /* 0x00000004 */ (1 << 2) -#define PARTICLE_SPARKLES /* 0x00000008 */ (1 << 3) -#define PARTICLE_4 /* 0x00000010 */ (1 << 4) -#define PARTICLE_5 /* 0x00000020 */ (1 << 5) -#define PARTICLE_6 /* 0x00000040 */ (1 << 6) -#define PARTICLE_7 /* 0x00000080 */ (1 << 7) -#define PARTICLE_8 /* 0x00000100 */ (1 << 8) -#define PARTICLE_9 /* 0x00000200 */ (1 << 9) -#define PARTICLE_10 /* 0x00000400 */ (1 << 10) -#define PARTICLE_11 /* 0x00000800 */ (1 << 11) -#define PARTICLE_12 /* 0x00001000 */ (1 << 12) -#define PARTICLE_LEAVES /* 0x00002000 */ (1 << 13) -#define PARTICLE_14 /* 0x00004000 */ (1 << 14) -#define PARTICLE_15 /* 0x00008000 */ (1 << 15) -#define PARTICLE_16 /* 0x00010000 */ (1 << 16) -#define PARTICLE_17 /* 0x00020000 */ (1 << 17) -#define PARTICLE_18 /* 0x00040000 */ (1 << 18) -#define PARTICLE_19 /* 0x00080000 */ (1 << 19) +#define PARTICLE_DUST /* 0x00000001 */ (1 << 0) +#define PARTICLE_1 /* 0x00000002 */ (1 << 1) +#define PARTICLE_2 /* 0x00000004 */ (1 << 2) +#define PARTICLE_SPARKLES /* 0x00000008 */ (1 << 3) +#define PARTICLE_4 /* 0x00000010 */ (1 << 4) +#define PARTICLE_5 /* 0x00000020 */ (1 << 5) +#define PARTICLE_WATER_SPLASH /* 0x00000040 */ (1 << 6) +#define PARTICLE_IDLE_WATER_WAVE /* 0x00000080 */ (1 << 7) +#define PARTICLE_SHALLOW_WATER_WAVE /* 0x00000100 */ (1 << 8) +#define PARTICLE_9 /* 0x00000200 */ (1 << 9) +#define PARTICLE_WAVE_TRAIL /* 0x00000400 */ (1 << 10) +#define PARTICLE_11 /* 0x00000800 */ (1 << 11) +#define PARTICLE_SHALLOW_WATER_SPLASH /* 0x00001000 */ (1 << 12) +#define PARTICLE_LEAVES /* 0x00002000 */ (1 << 13) +#define PARTICLE_14 /* 0x00004000 */ (1 << 14) +#define PARTICLE_15 /* 0x00008000 */ (1 << 15) +#define PARTICLE_16 /* 0x00010000 */ (1 << 16) +#define PARTICLE_17 /* 0x00020000 */ (1 << 17) +#define PARTICLE_18 /* 0x00040000 */ (1 << 18) +#define PARTICLE_19 /* 0x00080000 */ (1 << 19) #define MODEL_STATE_NOISE_ALPHA 0x180 #define MODEL_STATE_METAL 0x200 diff --git a/include/text_strings.h.in b/include/text_strings.h.in index 3166597..4e36eb9 100644 --- a/include/text_strings.h.in +++ b/include/text_strings.h.in @@ -25,7 +25,7 @@ #define TEXT_PAUSE _("PAUSE") // Pause text, Castle Courses #define TEXT_HUD_CONGRATULATIONS _("CONGRATULATIONS") // Course Complete Text, Bowser Courses -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) /** * File Select Text diff --git a/levels/bbh/areas/1/geo.inc.c b/levels/bbh/areas/1/geo.inc.c index d1f6522..6a7deeb 100644 --- a/levels/bbh/areas/1/geo.inc.c +++ b/levels/bbh/areas/1/geo.inc.c @@ -517,7 +517,7 @@ const GeoLayout geo_bbh_000F00[] = { GEO_BRANCH(1, geo_bbh_000EB0), // 0x0E000EB0 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bitdw/areas/1/geo.inc.c b/levels/bitdw/areas/1/geo.inc.c index 4bddd60..39f6143 100644 --- a/levels/bitdw/areas/1/geo.inc.c +++ b/levels/bitdw/areas/1/geo.inc.c @@ -17,7 +17,7 @@ const GeoLayout geo_bitdw_000618[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_070020C8), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bitfs/areas/1/geo.inc.c b/levels/bitfs/areas/1/geo.inc.c index 82b61ad..847c6ca 100644 --- a/levels/bitfs/areas/1/geo.inc.c +++ b/levels/bitfs/areas/1/geo.inc.c @@ -21,7 +21,7 @@ const GeoLayout bitfs_geo_0007A0[] = { GEO_ASM(0x1902, geo_movtex_draw_nocolor), GEO_ASM(0x1903, geo_movtex_draw_nocolor), GEO_RENDER_OBJ(), - GEO_ASM( 12, geo_enfvx_main), + GEO_ASM( 12, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bits/areas/1/geo.inc.c b/levels/bits/areas/1/geo.inc.c index 0638a81..50e96cc 100644 --- a/levels/bits/areas/1/geo.inc.c +++ b/levels/bits/areas/1/geo.inc.c @@ -17,7 +17,7 @@ const GeoLayout bits_geo_000718[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07002918), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bob/areas/1/geo.inc.c b/levels/bob/areas/1/geo.inc.c index c5b1c97..c7c6fc2 100644 --- a/levels/bob/areas/1/geo.inc.c +++ b/levels/bob/areas/1/geo.inc.c @@ -22,7 +22,7 @@ const GeoLayout bob_geo_000488[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_0700DD18), GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_0700E338), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bowser_1/areas/1/geo.inc.c b/levels/bowser_1/areas/1/geo.inc.c index 1257abf..f6acd67 100644 --- a/levels/bowser_1/areas/1/geo.inc.c +++ b/levels/bowser_1/areas/1/geo.inc.c @@ -17,7 +17,7 @@ const GeoLayout bowser_1_geo_0000D0[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_1_seg7_dl_07002768), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bowser_2/areas/1/geo.inc.c b/levels/bowser_2/areas/1/geo.inc.c index 78523fe..2b0d120 100644 --- a/levels/bowser_2/areas/1/geo.inc.c +++ b/levels/bowser_2/areas/1/geo.inc.c @@ -17,7 +17,7 @@ const GeoLayout bowser_2_geo_000188[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_2_seg7_dl_07001930), GEO_RENDER_OBJ(), - GEO_ASM(12, geo_enfvx_main), + GEO_ASM(12, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/bowser_3/areas/1/geo.inc.c b/levels/bowser_3/areas/1/geo.inc.c index 75c90f6..9c6e02d 100644 --- a/levels/bowser_3/areas/1/geo.inc.c +++ b/levels/bowser_3/areas/1/geo.inc.c @@ -17,7 +17,7 @@ const GeoLayout bowser_3_geo_000398[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070046B0), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/castle_courtyard/areas/1/geo.inc.c b/levels/castle_courtyard/areas/1/geo.inc.c index 8df1993..1d1d1de 100644 --- a/levels/castle_courtyard/areas/1/geo.inc.c +++ b/levels/castle_courtyard/areas/1/geo.inc.c @@ -21,7 +21,7 @@ const GeoLayout castle_courtyard_geo_000218[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x2601, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/castle_grounds/areas/1/geo.inc.c b/levels/castle_grounds/areas/1/geo.inc.c index 309cc73..9623394 100644 --- a/levels/castle_grounds/areas/1/geo.inc.c +++ b/levels/castle_grounds/areas/1/geo.inc.c @@ -26,7 +26,7 @@ const GeoLayout castle_grounds_geo_00073C[] = { GEO_ASM(0x1601, geo_movtex_draw_nocolor), GEO_ASM(0x1601, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/castle_inside/areas/1/geo.inc.c b/levels/castle_inside/areas/1/geo.inc.c index c864dc8..78d3e44 100644 --- a/levels/castle_inside/areas/1/geo.inc.c +++ b/levels/castle_inside/areas/1/geo.inc.c @@ -48,8 +48,8 @@ const GeoLayout castle_geo_000FD0[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07032FC0), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07033158), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(256, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(0, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -61,8 +61,8 @@ const GeoLayout castle_geo_001000[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07034D88), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07035178), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07035288), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(258, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(2, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -77,8 +77,8 @@ const GeoLayout castle_geo_001038[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07037DE8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, dl_castle_aquarium_light), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07038350), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(259, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(3, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -91,8 +91,8 @@ const GeoLayout castle_geo_001088[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0703A808), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070234C0), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07023520), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(257, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(1, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -172,8 +172,8 @@ const GeoLayout castle_geo_001200[] = { GEO_ASM( 0, geo_exec_inside_castle_light), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07032FC0), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07033158), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(256, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(256, geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -191,8 +191,8 @@ const GeoLayout castle_geo_001260[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07034D88), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07035178), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07035288), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(258, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(258, geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -213,8 +213,8 @@ const GeoLayout castle_geo_0012C8[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07037DE8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, dl_castle_aquarium_light), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07038350), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(259, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(3, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -233,8 +233,8 @@ const GeoLayout castle_geo_001348[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0703A808), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070234C0), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07023520), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(257, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(1, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -292,7 +292,7 @@ const GeoLayout castle_geo_001400[] = { GEO_BRANCH(1, castle_geo_0013B8), // 0x0E0013B8 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/castle_inside/areas/2/geo.inc.c b/levels/castle_inside/areas/2/geo.inc.c index b8af3df..29748a6 100644 --- a/levels/castle_inside/areas/2/geo.inc.c +++ b/levels/castle_inside/areas/2/geo.inc.c @@ -14,9 +14,9 @@ const GeoLayout castle_geo_001578[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07043028), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07043B48), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07043CD8), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(264, Geo18_802D5B98), - GEO_ASM(266, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(8, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(10, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -28,8 +28,8 @@ const GeoLayout castle_geo_0015B8[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704A0E8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_0704A2E0), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704AA98), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(268, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(12, 1), geo_painting_draw), GEO_ASM( 0, geo_render_mirror_mario), GEO_CLOSE_NODE(), GEO_RETURN(), @@ -40,9 +40,9 @@ const GeoLayout castle_geo_0015F8[] = { GEO_NODE_START(), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704C7D8), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(265, Geo18_802D5B98), - GEO_ASM(269, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(9, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(13, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -55,8 +55,8 @@ const GeoLayout castle_geo_001628[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07051678), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_070519C8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07051B60), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(267, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -80,9 +80,9 @@ const GeoLayout castle_geo_001690[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07043028), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07043B48), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07043CD8), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(264, Geo18_802D5B98), - GEO_ASM(266, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(8, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(10, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -97,10 +97,10 @@ const GeoLayout castle_geo_0016D8[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704A0E8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_0704A2E0), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704AA98), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(264, Geo18_802D5B98), - GEO_ASM(266, Geo18_802D5B98), - GEO_ASM(268, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(8, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(10, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(12, 1), geo_painting_draw), GEO_ASM( 0, geo_render_mirror_mario), GEO_CLOSE_NODE(), GEO_RETURN(), @@ -114,11 +114,11 @@ const GeoLayout castle_geo_001740[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07043B48), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07043CD8), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704C7D8), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(264, Geo18_802D5B98), - GEO_ASM(265, Geo18_802D5B98), - GEO_ASM(266, Geo18_802D5B98), - GEO_ASM(269, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(8, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(9, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(10, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(13, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -134,10 +134,10 @@ const GeoLayout castle_geo_001798[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07051678), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_070519C8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07051B60), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(264, Geo18_802D5B98), - GEO_ASM(266, Geo18_802D5B98), - GEO_ASM(267, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(8, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(10, 1), geo_painting_draw), + GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -153,8 +153,8 @@ const GeoLayout castle_geo_001800[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070558D0), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070572A0), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07057F00), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(267, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -191,7 +191,7 @@ const GeoLayout castle_geo_001858[] = { GEO_BRANCH(1, castle_geo_001800), // 0x0E001800 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/castle_inside/areas/3/geo.inc.c b/levels/castle_inside/areas/3/geo.inc.c index 1e32262..70b295f 100644 --- a/levels/castle_inside/areas/3/geo.inc.c +++ b/levels/castle_inside/areas/3/geo.inc.c @@ -15,9 +15,9 @@ const GeoLayout castle_geo_001980[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070616E8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM( 260, Geo18_802D5B98), - GEO_ASM( 261, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM( PAINTING_ID(4, 1), geo_painting_draw), + GEO_ASM( PAINTING_ID(5, 1), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x0600, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), @@ -30,8 +30,8 @@ const GeoLayout castle_geo_0019C8[] = { GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07064B78), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07064D58), - GEO_ASM(0, Geo18_802D5D0C), - GEO_ASM(262, Geo18_802D5B98), + GEO_ASM(0, geo_painting_update), + GEO_ASM(PAINTING_ID(6, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -54,8 +54,8 @@ const GeoLayout castle_geo_001A30[] = { GEO_NODE_START(), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07068850), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(263, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(7, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -69,9 +69,9 @@ const GeoLayout castle_geo_001A58[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_0705E450), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070616E8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM( 260, Geo18_802D5B98), - GEO_ASM( 261, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM( PAINTING_ID(4, 1), geo_painting_draw), + GEO_ASM( PAINTING_ID(5, 1), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x0600, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), @@ -86,8 +86,8 @@ const GeoLayout castle_geo_001AB8[] = { GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0705E2A0), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_0705E450), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07068850), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM(263, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(7, 1), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -117,9 +117,9 @@ const GeoLayout castle_geo_001B48[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07066CE0), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07066E90), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07066FA0), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM( 260, Geo18_802D5B98), - GEO_ASM( 261, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM( PAINTING_ID(4, 1), geo_painting_draw), + GEO_ASM( PAINTING_ID(5, 1), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x0600, geo_movtex_draw_water_regions), GEO_ASM(0x0612, geo_movtex_draw_water_regions), @@ -135,10 +135,10 @@ const GeoLayout castle_geo_001BB0[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07064B78), GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07064D58), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM( 260, Geo18_802D5B98), - GEO_ASM( 261, Geo18_802D5B98), - GEO_ASM( 262, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM( PAINTING_ID(4, 1), geo_painting_draw), + GEO_ASM( PAINTING_ID(5, 1), geo_painting_draw), + GEO_ASM( PAINTING_ID(6, 1), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x0600, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), @@ -176,7 +176,7 @@ const GeoLayout castle_geo_001C10[] = { GEO_BRANCH(1, castle_geo_001BB0), // 0x0E001BB0 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/castle_inside/painting.inc.c b/levels/castle_inside/painting.inc.c index 94209ae..105b605 100644 --- a/levels/castle_inside/painting.inc.c +++ b/levels/castle_inside/painting.inc.c @@ -98,8 +98,10 @@ static const Gfx inside_castle_seg7_painting_dl_07021AC0[] = { }; // 0x07021AE0 - 0x07021FFA -static const PaintingData inside_castle_seg7_painting_points_07021AE0[] = { - 85, +static const PaintingData inside_castle_seg7_painting_texture_map_bottom_07021AE0[] = { + 85, // num mappings + // Format: + // mesh vtx ID, texture X, texture Y 49, 2016, 889, 53, 2016, 685, 55, 1843, 787, @@ -186,8 +188,9 @@ static const PaintingData inside_castle_seg7_painting_points_07021AE0[] = { 150, 649, 0, 153, -32, 0, -// inside_castle_seg7_painting_triangles_07021CE0: - 132, + 132, // num groups + // Grouped by 5 + one remainder group, + // = 15 vertices per group + a few extra triangles 13, 8, 5, 0, 1, 2, 3, 0, 4, @@ -324,8 +327,10 @@ static const PaintingData inside_castle_seg7_painting_points_07021AE0[] = { // 0x07021FFC - 0x07022516 -static const PaintingData inside_castle_seg7_painting_points_07021FFC[] = { - 85, +static const PaintingData inside_castle_seg7_painting_texture_map_top_07021FFC[] = { + 85, // num mappings + // Format: + // mesh vtx ID, texture X, texture Y 0, 2016, 72, 1, 2016, 0, 2, 1843, 0, @@ -412,8 +417,9 @@ static const PaintingData inside_castle_seg7_painting_points_07021FFC[] = { 152, -32, 685, 153, -32, 992, -// inside_castle_seg7_painting_triangles_070221FC: - 132, + 132, // num groups + // Grouped by 5 + one remainder group, + // = 15 vertices per group + a few extra triangles 10, 7, 13, 0, 1, 2, 3, 0, 2, @@ -550,9 +556,9 @@ static const PaintingData inside_castle_seg7_painting_points_07021FFC[] = { // 0x07022518 -static const PaintingData *const inside_castle_seg7_painting_data_07022518[] = { - inside_castle_seg7_painting_points_07021AE0, - inside_castle_seg7_painting_points_07021FFC, +static const PaintingData *const inside_castle_seg7_painting_texture_maps_07022518[] = { + inside_castle_seg7_painting_texture_map_bottom_07021AE0, + inside_castle_seg7_painting_texture_map_top_07021FFC, }; UNUSED static const u64 castle_inside_unused_0 = 0x0; @@ -619,8 +625,10 @@ static const Gfx inside_castle_seg7_painting_dl_07022640[] = { }; // 0x07022660 - 0x07023042 -static const PaintingData inside_castle_seg7_painting_points_07022660[] = { - 157, +static const PaintingData inside_castle_seg7_painting_env_map_texture_map_07022660[] = { + 157, // num mappings + // Format: + // mesh vtx ID, texture X, texture Y 0, 6100, -4832, 1, 6100, -5142, 2, 5582, -5142, @@ -780,7 +788,9 @@ static const PaintingData inside_castle_seg7_painting_points_07022660[] = { 156, 0, 990, // inside_castle_seg7_painting_triangles_07022A10: - 264, + 264, // num groups + // Grouped by 5 + one remainder group, + // = 15 vertices per group + a few extra triangles 8, 12, 13, 0, 1, 2, 3, 0, 2, @@ -1049,8 +1059,8 @@ static const PaintingData inside_castle_seg7_painting_points_07022660[] = { // 0x07023044 - 0x07023048 -static const PaintingData *const inside_castle_seg7_painting_data_07023044[] = { - inside_castle_seg7_painting_points_07022660, +static const PaintingData *const inside_castle_seg7_painting_env_map_texture_maps_07023044[] = { + inside_castle_seg7_painting_env_map_texture_map_07022660, }; UNUSED static const u64 castle_inside_unused_1 = 0x0; @@ -1345,335 +1355,377 @@ static const u8 *const inside_castle_seg7_painting_textures_07023618[] = { // 0x07023620 - 0x07023698 struct Painting bob_painting = { /* id */ 0x0000, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 90.0f, /* Position */ -5222.4f, 409.6f, -153.6f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023050, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235C0, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023050, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235C0, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x07023698 - 0x07023710 struct Painting ccm_painting = { /* id */ 0x0001, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 0.0f, /* Position */ -2611.2f, -307.2f, -4352.0f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_070230B0, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235C8, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_070230B0, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235C8, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x07023710 - 0x07023788 struct Painting wf_painting = { /* id */ 0x0002, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 0.0f, /* Position */ -51.2f, -204.8f, -4505.6f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023110, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235D0, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023110, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235D0, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x07023788 - 0x07023800 struct Painting jrb_painting = { /* id */ 0x0003, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 270.0f, /* Position */ 4300.8f, 409.6f, -537.6f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023170, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235D8, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023170, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235D8, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x07023800 - 0x07023878 struct Painting lll_painting = { /* id */ 0x0004, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 0.0f, /* Position */ -1689.6f, -1126.4f, -3942.4f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_070231D0, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235E0, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_070231D0, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235E0, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x07023878 - 0x070238F0 struct Painting ssl_painting = { /* id */ 0x0005, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 180.0f, /* Position */ -2611.2f, -1177.6f, -1075.2f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023230, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235E8, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023230, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235E8, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x070238F0 - 0x07023968 struct Painting hmc_painting = { /* id */ 0x000E, - /* Face Count */ 0x01, - /* Ripple Shape */ RIPPLE_SHAPE_CONCENTRIC, + /* Image Count */ 0x01, + /* Texture Type */ PAINTING_ENV_MAP, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 270.0f, 0.0f, /* Position */ 2099.2f, -1484.8f, -2278.4f, + /* curr passive entry */ /* Ripple Magnitude */ 0.0f, 10.0f, 30.0f, - 1.0f, 1.0f, 0.98f, - 0.0f, 0.05f, 0.05f, - 0.0f, 15.0f, 15.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023580, - inside_castle_seg7_painting_data_07023044, - inside_castle_seg7_painting_textures_070235F0, - 32, 32, - inside_castle_seg7_painting_dl_07022640, - RIPPLE_TRIGGER_CONTINUOUS, 0xFF, 0x00, 0x00, 0x00, - 768.0f, + /* Ripple Decay */ 1.0f, 1.0f, 0.98f, + /* Ripple Rate */ 0.0f, 0.05f, 0.05f, + /* Ripple Dispersion */ 0.0f, 15.0f, 15.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023580, + /* Texture Maps */ inside_castle_seg7_painting_env_map_texture_maps_07023044, + /* Textures */ inside_castle_seg7_painting_textures_070235F0, + /* Texture w, h */ 32, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07022640, + /* Ripple Trigger */ RIPPLE_TRIGGER_CONTINUOUS, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 768.0f, }; // 0x07023968 - 0x070239E0 struct Painting ddd_painting = { /* id */ 0x0007, - /* Face Count */ 0x01, - /* Ripple Shape */ RIPPLE_SHAPE_CONCENTRIC, + /* Image Count */ 0x01, + /* Texture Type */ PAINTING_ENV_MAP, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 270.0f, /* Position */ 3456.0f, -1075.2f, 1587.2f, - /* Ripple Magnitude */ 0.0f, 10.0f, 30.0f, - 1.0f, 1.0f, 0.98f, - 0.0f, 0.05f, 0.05f, - 0.0f, 15.0f, 15.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_070235B8, - inside_castle_seg7_painting_data_07023044, - inside_castle_seg7_painting_textures_070235F4, - 32, 32, - inside_castle_seg7_painting_dl_07022640, - RIPPLE_TRIGGER_CONTINUOUS, 0xB4, 0x00, 0x00, 0x00, - 819.2f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 10.0f, 30.0f, + /* Ripple Decay */ 1.0f, 1.0f, 0.98f, + /* Ripple Rate */ 0.0f, 0.05f, 0.05f, + /* Ripple Dispersion */ 0.0f, 15.0f, 15.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_070235B8, + /* Texture Maps */ inside_castle_seg7_painting_env_map_texture_maps_07023044, + /* Textures */ inside_castle_seg7_painting_textures_070235F4, + /* Texture w, h */ 32, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07022640, + /* Ripple Trigger */ RIPPLE_TRIGGER_CONTINUOUS, + /* Alpha */ 0xB4, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 819.2f, }; // 0x070239E0 - 0x07023A58 struct Painting wdw_painting = { /* id */ 0x0008, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 0.0f, /* Position */ -966.656f, 1305.6f, -143.36f, - /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023290, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_070235F8, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 614.0f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023290, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_070235F8, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 614.0f, }; // 0x07023A58 - 0x07023AD0 struct Painting thi_tiny_painting = { /* id */ 0x0009, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 180.0f, /* Position */ -4598.7842f, 1354.752f, 3005.44f, - /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_070232F0, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_07023600, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 393.216f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_070232F0, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_07023600, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 393.216f, }; // 0x07023AD0 - 0x07023B48 struct Painting ttm_painting = { /* id */ 0x000A, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 180.0f, /* Position */ -546.816f, 1356.8f, 3813.376f, - /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023350, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_07023608, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 256.0f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023350, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_07023608, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 256.0f, }; // 0x07023B48 - 0x07023BC0 struct Painting ttc_painting = { /* id */ 0x000B, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 180.0f, /* Position */ 0.0f, 2713.6f, 7232.5122f, - /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_070233B0, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_07023610, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 409.6f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_070233B0, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_07023610, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 409.6f, }; // 0x07023BC0 - 0x07023C38 struct Painting sl_painting = { /* id */ 0x000C, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 0.0f, /* Position */ 3179.52f, 1408.0f, -271.36f, - /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_07023410, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_07023618, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 716.8f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_07023410, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_07023618, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 716.8f, }; // 0x07023C38 - 0x07023CB0 struct Painting thi_huge_painting = { /* id */ 0x000D, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 0.0f, /* Position */ -5614.5918f, 1510.4f, -3292.16f, - /* Ripple Magnitude */ 0.0f, 40.0f, 160.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.12f, 0.07f, - 0.0f, 80.0f, 60.0f, - 0.0f, - 0.0f, 0.0f, - inside_castle_seg7_painting_dl_070232F0, - inside_castle_seg7_painting_data_07022518, - inside_castle_seg7_painting_textures_07023600, - 64, 32, - inside_castle_seg7_painting_dl_07021AC0, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 1638.4f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 40.0f, 160.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.12f, 0.07f, + /* Ripple Dispersion */ 0.0f, 80.0f, 60.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ inside_castle_seg7_painting_dl_070232F0, + /* Texture Maps */ inside_castle_seg7_painting_texture_maps_07022518, + /* Textures */ inside_castle_seg7_painting_textures_07023600, + /* Texture w, h */ 64, 32, + /* Ripple DList */ inside_castle_seg7_painting_dl_07021AC0, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 1638.4f, }; diff --git a/levels/ccm/areas/1/geo.inc.c b/levels/ccm/areas/1/geo.inc.c index 8832d45..2a0dfe3 100644 --- a/levels/ccm/areas/1/geo.inc.c +++ b/levels/ccm/areas/1/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout ccm_geo_00051C[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x0501, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 1, geo_enfvx_main), + GEO_ASM( 1, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ccm/areas/2/geo.inc.c b/levels/ccm/areas/2/geo.inc.c index fdb3f06..11f4058 100644 --- a/levels/ccm/areas/2/geo.inc.c +++ b/levels/ccm/areas/2/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout ccm_geo_0005E8[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_0701FE60), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_070207F0), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/cotmc/areas/1/geo.inc.c b/levels/cotmc/areas/1/geo.inc.c index 25d022f..26fc0a4 100644 --- a/levels/cotmc/areas/1/geo.inc.c +++ b/levels/cotmc/areas/1/geo.inc.c @@ -21,7 +21,7 @@ const GeoLayout cotmc_geo_0001A0[] = { GEO_ASM(0x2801, geo_movtex_draw_nocolor), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, cotmc_seg7_dl_0700A4B8), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ddd/areas/1/geo.inc.c b/levels/ddd/areas/1/geo.inc.c index 0453c73..e58d7e1 100644 --- a/levels/ddd/areas/1/geo.inc.c +++ b/levels/ddd/areas/1/geo.inc.c @@ -22,7 +22,7 @@ const GeoLayout ddd_geo_0004C0[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x2301, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 13, geo_enfvx_main), + GEO_ASM( 13, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ddd/areas/2/geo.inc.c b/levels/ddd/areas/2/geo.inc.c index efcac70..68201f7 100644 --- a/levels/ddd/areas/2/geo.inc.c +++ b/levels/ddd/areas/2/geo.inc.c @@ -24,7 +24,7 @@ const GeoLayout ddd_geo_000570[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x2302, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 14, geo_enfvx_main), + GEO_ASM( 14, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/hmc/areas/1/geo.inc.c b/levels/hmc/areas/1/geo.inc.c index 9bca4d1..5a2baac 100644 --- a/levels/hmc/areas/1/geo.inc.c +++ b/levels/hmc/areas/1/geo.inc.c @@ -83,8 +83,8 @@ const GeoLayout hmc_geo_000748[] = { GEO_NODE_START(), GEO_OPEN_NODE(), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07020FD0), - GEO_ASM(0, Geo18_802D5D0C), - GEO_ASM(0, Geo18_802D5B98), + GEO_ASM(0, geo_painting_update), + GEO_ASM(PAINTING_ID(0, 0), geo_painting_draw), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -246,8 +246,8 @@ const GeoLayout hmc_geo_000A88[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07020FD0), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM( 0, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM( PAINTING_ID(0, 0), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x0701, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), @@ -326,7 +326,7 @@ const GeoLayout hmc_geo_000B90[] = { GEO_BRANCH(1, hmc_geo_000B48), // 0x0E000B48 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/hmc/areas/1/painting.inc.c b/levels/hmc/areas/1/painting.inc.c index 5ab36d2..f2ff45d 100644 --- a/levels/hmc/areas/1/painting.inc.c +++ b/levels/hmc/areas/1/painting.inc.c @@ -61,8 +61,10 @@ static const Gfx hmc_seg7_painting_dl_070242D0[] = { }; // 0x070242F0 - 0x07024CD2 -static const PaintingData hmc_seg7_pool_points_070242F0[] = { - 157, +static const PaintingData hmc_seg7_pool_texture_map_070242F0[] = { + 157, // num mappings + // Format: + // mesh vtx ID, texture X, texture Y 0, 6100, -4832, 1, 6100, -5142, 2, 5582, -5142, @@ -221,8 +223,9 @@ static const PaintingData hmc_seg7_pool_points_070242F0[] = { 155, 0, 70, 156, 0, 990, -// hmc_seg7_triangles_070246A0: - 264, + 264, // num groups + // Grouped by 5 + one remainder group, + // = 15 vertices per group + a few extra triangles 8, 12, 13, 0, 1, 2, 3, 0, 2, @@ -490,8 +493,8 @@ static const PaintingData hmc_seg7_pool_points_070242F0[] = { }; // 0x07024CD4 -static const PaintingData *const hmc_seg7_painting_data_07024CD4[] = { - hmc_seg7_pool_points_070242F0, +static const PaintingData *const hmc_seg7_painting_texture_maps_07024CD4[] = { + hmc_seg7_pool_texture_map_070242F0, }; UNUSED static const u64 hmc_unused_0 = 0; @@ -520,23 +523,26 @@ const u8 *const hmc_seg7_painting_textures_07025518[] = { // 0x0702551C (PaintingData) struct Painting cotmc_painting = { /* id */ 0x000E, - /* Face Count */ 0x01, - /* Ripple Shape */ RIPPLE_SHAPE_CONCENTRIC, + /* Image Count */ 0x01, + /* Texture Type */ PAINTING_ENV_MAP, /* Floor Status */ 0x00, 0x00 , 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 270.0f, 0.0f, /* Position */ 2989.055908f, -4485.120117f, 5135.359863f, - /* Ripple Magnitude */ 0.0f, 10.0f, 30.0f, - 1.0f, 1.0f, 0.98f, - 0.0f, 0.05f, 0.05f, - 0.0f, 15.0f, 15.0f, - 0.0f, - 0.0f, 0.0f, - hmc_seg7_painting_dl_070254E0, - hmc_seg7_painting_data_07024CD4, - hmc_seg7_painting_textures_07025518, - 32, 32, - hmc_seg7_painting_dl_070242D0, - RIPPLE_TRIGGER_CONTINUOUS, 0xFF, 0x00, 0x00, 0x00, - 723.968018f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 10.0f, 30.0f, + /* Ripple Decay */ 1.0f, 1.0f, 0.98f, + /* Ripple Rate */ 0.0f, 0.05f, 0.05f, + /* Ripple Dispersion */ 0.0f, 15.0f, 15.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ hmc_seg7_painting_dl_070254E0, + /* Texture Maps */ hmc_seg7_painting_texture_maps_07024CD4, + /* Textures */ hmc_seg7_painting_textures_07025518, + /* Texture w, h */ 32, 32, + /* Ripple DList */ hmc_seg7_painting_dl_070242D0, + /* Ripple Trigger */ RIPPLE_TRIGGER_CONTINUOUS, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 723.968018f, }; diff --git a/levels/jrb/areas/1/geo.inc.c b/levels/jrb/areas/1/geo.inc.c index adb1f96..2a38df5 100644 --- a/levels/jrb/areas/1/geo.inc.c +++ b/levels/jrb/areas/1/geo.inc.c @@ -26,7 +26,7 @@ const GeoLayout jrb_geo_000A18[] = { GEO_ASM(0x1201, geo_movtex_draw_water_regions), GEO_ASM(0x1205, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 14, geo_enfvx_main), + GEO_ASM( 14, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/jrb/areas/2/geo.inc.c b/levels/jrb/areas/2/geo.inc.c index e0868a6..c9a15fb 100644 --- a/levels/jrb/areas/2/geo.inc.c +++ b/levels/jrb/areas/2/geo.inc.c @@ -21,7 +21,7 @@ const GeoLayout jrb_geo_000AFC[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x1202, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 2, geo_enfvx_main), + GEO_ASM( 2, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/jrb/wooden_ship/geo.inc.c b/levels/jrb/wooden_ship/geo.inc.c index 383627b..80b97de 100644 --- a/levels/jrb/wooden_ship/geo.inc.c +++ b/levels/jrb/wooden_ship/geo.inc.c @@ -11,7 +11,7 @@ const GeoLayout jrb_geo_000978[] = { const GeoLayout jrb_geo_000990[] = { GEO_CULLING_RADIUS(5000), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, jrb_seg7_dl_070090B0), GEO_CLOSE_NODE(), GEO_END(), @@ -30,7 +30,7 @@ const GeoLayout jrb_geo_0009B0[] = { const GeoLayout jrb_geo_0009C8[] = { GEO_CULLING_RADIUS(5000), GEO_OPEN_NODE(), - GEO_ASM(0, Geo18_8029D924), + GEO_ASM(0, geo_update_layer_transparency), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, jrb_seg7_dl_07009B30), GEO_CLOSE_NODE(), GEO_END(), diff --git a/levels/lll/areas/1/geo.inc.c b/levels/lll/areas/1/geo.inc.c index db1d325..865cdc9 100644 --- a/levels/lll/areas/1/geo.inc.c +++ b/levels/lll/areas/1/geo.inc.c @@ -21,7 +21,7 @@ const GeoLayout lll_geo_000E00[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x2201, geo_movtex_draw_nocolor), GEO_RENDER_OBJ(), - GEO_ASM( 12, geo_enfvx_main), + GEO_ASM( 12, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/lll/areas/2/geo.inc.c b/levels/lll/areas/2/geo.inc.c index 07b845c..a12fc82 100644 --- a/levels/lll/areas/2/geo.inc.c +++ b/levels/lll/areas/2/geo.inc.c @@ -24,7 +24,7 @@ const GeoLayout lll_geo_000EC0[] = { GEO_ASM(0x2202, geo_movtex_draw_nocolor), GEO_ASM(0x2202, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/pss/areas/1/geo.inc.c b/levels/pss/areas/1/geo.inc.c index dafecd5..bf3c5b3 100644 --- a/levels/pss/areas/1/geo.inc.c +++ b/levels/pss/areas/1/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout pss_geo_000100[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700E2B0), GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, pss_seg7_dl_0700E3E8), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/rr/areas/1/geo.inc.c b/levels/rr/areas/1/geo.inc.c index 00d99f2..f899c99 100644 --- a/levels/rr/areas/1/geo.inc.c +++ b/levels/rr/areas/1/geo.inc.c @@ -18,7 +18,7 @@ const GeoLayout rr_geo_0009D0[] = { GEO_ASM(0, geo_exec_flying_carpet_timer_update), GEO_DISPLAY_LIST(LAYER_ALPHA, dl_cruiser_metal_holes), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/sa/areas/1/geo.inc.c b/levels/sa/areas/1/geo.inc.c index 43f0e51..4920f40 100644 --- a/levels/sa/areas/1/geo.inc.c +++ b/levels/sa/areas/1/geo.inc.c @@ -18,7 +18,7 @@ const GeoLayout sa_geo_000170[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, sa_seg7_dl_07002DE8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sa_seg7_dl_07002FD0), GEO_RENDER_OBJ(), - GEO_ASM(2, geo_enfvx_main), + GEO_ASM(2, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/scripts.c b/levels/scripts.c index 1a94174..ac5776c 100644 --- a/levels/scripts.c +++ b/levels/scripts.c @@ -67,10 +67,10 @@ const LevelScript level_main_scripts_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_SMOKE, smoke_geo), LOAD_MODEL_FROM_GEO(MODEL_SPARKLES, sparkles_geo), LOAD_MODEL_FROM_GEO(MODEL_BUBBLE, bubble_geo), - LOAD_MODEL_FROM_GEO(MODEL_SPOT_ON_GROUND, spot_on_ground_geo), - LOAD_MODEL_FROM_GEO(MODEL_WATER_WAVES_SURF, water_waves_surface_geo), + LOAD_MODEL_FROM_GEO(MODEL_SMALL_WATER_SPLASH, small_water_splash_geo), + LOAD_MODEL_FROM_GEO(MODEL_IDLE_WATER_WAVE, idle_water_wave_geo), LOAD_MODEL_FROM_GEO(MODEL_WATER_SPLASH, water_splash_geo), - LOAD_MODEL_FROM_GEO(MODEL_WATER_WAVES, water_waves_geo), + LOAD_MODEL_FROM_GEO(MODEL_WAVE_TRAIL, wave_trail_geo), LOAD_MODEL_FROM_GEO(MODEL_YELLOW_COIN, yellow_coin_geo), LOAD_MODEL_FROM_GEO(MODEL_STAR, star_geo), LOAD_MODEL_FROM_GEO(MODEL_TRANSPARENT_STAR, transparent_star_geo), diff --git a/levels/sl/areas/1/geo.inc.c b/levels/sl/areas/1/geo.inc.c index 537513b..0631851 100644 --- a/levels/sl/areas/1/geo.inc.c +++ b/levels/sl/areas/1/geo.inc.c @@ -25,7 +25,7 @@ const GeoLayout sl_geo_0003A8[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x1001, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 1, geo_enfvx_main), + GEO_ASM( 1, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/sl/areas/2/geo.inc.c b/levels/sl/areas/2/geo.inc.c index 37d72c1..1cef0ca 100644 --- a/levels/sl/areas/2/geo.inc.c +++ b/levels/sl/areas/2/geo.inc.c @@ -20,7 +20,7 @@ const GeoLayout sl_geo_000484[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_0700C9E8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_0700CB58), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/sl/script.c b/levels/sl/script.c index ea90a9f..59ff7a3 100644 --- a/levels/sl/script.c +++ b/levels/sl/script.c @@ -29,8 +29,8 @@ static const LevelScript script_func_local_2[] = { }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_PENGUIN, /*pos*/ 1715, 3328, 518, /*angle*/ 0, -51, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWalkingPenguin), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 700, 3428, 700, /*angle*/ 0, 30, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnowmanWindBlowing), + OBJECT(/*model*/ MODEL_PENGUIN, /*pos*/ 1715, 3328, 518, /*angle*/ 0, -51, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSLWalkingPenguin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 700, 3428, 700, /*angle*/ 0, 30, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSLSnowmanWind), OBJECT(/*model*/ MODEL_NONE, /*pos*/ 480, 2300, 1370, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvIgloo), OBJECT(/*model*/ MODEL_BIG_CHILL_BULLY, /*pos*/ 315, 1331, -4852, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvBigChillBully), OBJECT(/*model*/ MODEL_MR_BLIZZARD_HIDDEN, /*pos*/ 2954, 970, 750, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvMrBlizzard), diff --git a/levels/ssl/areas/1/geo.inc.c b/levels/ssl/areas/1/geo.inc.c index a746675..08ca901 100644 --- a/levels/ssl/areas/1/geo.inc.c +++ b/levels/ssl/areas/1/geo.inc.c @@ -27,7 +27,7 @@ const GeoLayout ssl_geo_000648[] = { GEO_ASM(0x0802, geo_movtex_draw_colored), GEO_ASM(0x0803, geo_movtex_draw_colored), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ssl/areas/2/geo.inc.c b/levels/ssl/areas/2/geo.inc.c index dd1d30f..f421c32 100644 --- a/levels/ssl/areas/2/geo.inc.c +++ b/levels/ssl/areas/2/geo.inc.c @@ -24,7 +24,7 @@ const GeoLayout ssl_geo_0007CC[] = { GEO_ASM(0x802, geo_movtex_draw_nocolor), GEO_ASM(0x803, geo_movtex_draw_nocolor), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ssl/areas/3/geo.inc.c b/levels/ssl/areas/3/geo.inc.c index 0dfa476..ab01ed2 100644 --- a/levels/ssl/areas/3/geo.inc.c +++ b/levels/ssl/areas/3/geo.inc.c @@ -18,7 +18,7 @@ const GeoLayout ssl_geo_00088C[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07021A08), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ssl_seg7_dl_07021DE8), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/thi/areas/1/geo.inc.c b/levels/thi/areas/1/geo.inc.c index b8c45ce..d08e130 100644 --- a/levels/thi/areas/1/geo.inc.c +++ b/levels/thi/areas/1/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout thi_geo_000608[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x1301, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/thi/areas/2/geo.inc.c b/levels/thi/areas/2/geo.inc.c index ee90554..eefb745 100644 --- a/levels/thi/areas/2/geo.inc.c +++ b/levels/thi/areas/2/geo.inc.c @@ -28,7 +28,7 @@ const GeoLayout thi_geo_0006D4[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x1302, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/thi/areas/3/geo.inc.c b/levels/thi/areas/3/geo.inc.c index 2440471..e3a6eba 100644 --- a/levels/thi/areas/3/geo.inc.c +++ b/levels/thi/areas/3/geo.inc.c @@ -20,7 +20,7 @@ const GeoLayout thi_geo_00079C[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07009D50), GEO_DISPLAY_LIST(LAYER_ALPHA, thi_seg7_dl_07009F58), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/totwc/areas/1/geo.inc.c b/levels/totwc/areas/1/geo.inc.c index dfd16ac..57c11e9 100644 --- a/levels/totwc/areas/1/geo.inc.c +++ b/levels/totwc/areas/1/geo.inc.c @@ -19,7 +19,7 @@ const GeoLayout totwc_geo_000188[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, totwc_seg7_dl_07007048), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, totwc_seg7_dl_070078B8), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ttc/areas/1/geo.inc.c b/levels/ttc/areas/1/geo.inc.c index 95a1351..9773fc7 100644 --- a/levels/ttc/areas/1/geo.inc.c +++ b/levels/ttc/areas/1/geo.inc.c @@ -22,7 +22,7 @@ const GeoLayout ttc_geo_0003B8[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttc_seg7_dl_0700B1D8), GEO_DISPLAY_LIST(LAYER_ALPHA, ttc_seg7_dl_0700E878), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ttm/areas/1/geo.inc.c b/levels/ttm/areas/1/geo.inc.c index 5be9bbe..b93b3c1 100644 --- a/levels/ttm/areas/1/geo.inc.c +++ b/levels/ttm/areas/1/geo.inc.c @@ -18,8 +18,8 @@ const GeoLayout ttm_geo_000A70[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A120), GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A2E0), GEO_RENDER_OBJ(), - GEO_ASM( 0, Geo18_802D5D0C), - GEO_ASM( 512, Geo18_802D5B98), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(0, 2), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x3601, geo_movtex_draw_nocolor), GEO_ASM(0x3602, geo_movtex_draw_nocolor), @@ -27,7 +27,7 @@ const GeoLayout ttm_geo_000A70[] = { GEO_ASM(0x3604, geo_movtex_draw_nocolor), GEO_ASM(0x3605, geo_movtex_draw_nocolor), GEO_ASM(0x3601, geo_movtex_draw_water_regions), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ttm/areas/1/painting.inc.c b/levels/ttm/areas/1/painting.inc.c index db0b375..f66a4a1 100644 --- a/levels/ttm/areas/1/painting.inc.c +++ b/levels/ttm/areas/1/painting.inc.c @@ -62,8 +62,10 @@ static const Gfx ttm_seg7_painting_dl_07012430[] = { }; // 0x07012450 - 0x0701296A -static const PaintingData ttm_seg7_painting_points_07012450[] = { - 85, +static const PaintingData ttm_seg7_painting_texture_map_bottom_07012450[] = { + 85, // num mappings + // Format: + // mesh vtx ID, texture X, texture Y 49, 2016, 889, 53, 2016, 685, 55, 1843, 787, @@ -150,8 +152,9 @@ static const PaintingData ttm_seg7_painting_points_07012450[] = { 150, 649, 0, 153, -32, 0, -// ttm_seg7_painting_triangles_07012650: - 132, + 132, // num groups + // Grouped by 5 + one remainder group, + // = 15 vertices per group + a few extra triangles 13, 8, 5, 0, 1, 2, 3, 0, 4, @@ -288,8 +291,10 @@ static const PaintingData ttm_seg7_painting_points_07012450[] = { // 0x0701296C - 0x07012E84 -static const PaintingData ttm_seg7_painting_points_0701296C[] = { - 85, +static const PaintingData ttm_seg7_painting_top_0701296C[] = { + 85, // num mappings + // Format: + // mesh vtx ID, texture X, texture Y 0, 2016, 72, 1, 2016, 0, 2, 1843, 0, @@ -376,8 +381,9 @@ static const PaintingData ttm_seg7_painting_points_0701296C[] = { 152, -32, 685, 153, -32, 992, -// ttm_seg7_painting_triangles_07012B6C: - 132, + 132, // num groups + // Grouped by 5 + one remainder group, + // = 15 vertices per group + a few extra triangles 10, 7, 13, 0, 1, 2, 3, 0, 2, @@ -514,9 +520,9 @@ static const PaintingData ttm_seg7_painting_points_0701296C[] = { // 0x07012E88 -static const PaintingData *const ttm_seg7_painting_data_07012E88[] = { - ttm_seg7_painting_points_07012450, - ttm_seg7_painting_points_0701296C, +static const PaintingData *const ttm_seg7_painting_texture_maps_07012E88[] = { + ttm_seg7_painting_texture_map_bottom_07012450, + ttm_seg7_painting_top_0701296C, }; UNUSED static const u64 ttm_unused_0 = 0x0; @@ -546,23 +552,26 @@ static const u8 *const ttm_seg7_painting_textures_07012EF8[] = { // 0x07012F00 (PaintingData) struct Painting ttm_slide_painting = { /* id */ 0x0000, - /* Face Count */ 0x02, - /* Ripple Shape */ RIPPLE_SHAPE_WAVE, + /* Image Count */ 0x02, + /* Texture Type */ PAINTING_IMAGE, /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */, /* Ripple Status */ 0x00, /* Rotation */ 0.0f, 90.0f, /* Position */ 3072.0f, 921.6f, -819.2f, - /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, - 1.0f, 0.9608f, 0.9524f, - 0.0f, 0.24f, 0.14f, - 0.0f, 40.0f, 30.0f, - 0.0f, - 0.0f, 0.0f, - ttm_seg7_painting_dl_07012E98, - ttm_seg7_painting_data_07012E88, - ttm_seg7_painting_textures_07012EF8, - 64, 32, - ttm_seg7_painting_dl_07012430, - RIPPLE_TRIGGER_PROXIMITY, 0xFF, 0x00, 0x00, 0x00, - 460.8f, + /* curr passive entry */ + /* Ripple Magnitude */ 0.0f, 20.0f, 80.0f, + /* Ripple Decay */ 1.0f, 0.9608f, 0.9524f, + /* Ripple Rate */ 0.0f, 0.24f, 0.14f, + /* Ripple Dispersion */ 0.0f, 40.0f, 30.0f, + /* Curr Ripple Timer */ 0.0f, + /* Curr Ripple x, y */ 0.0f, 0.0f, + /* Normal DList */ ttm_seg7_painting_dl_07012E98, + /* Texture Maps */ ttm_seg7_painting_texture_maps_07012E88, + /* Textures */ ttm_seg7_painting_textures_07012EF8, + /* Texture w, h */ 64, 32, + /* Ripple DList */ ttm_seg7_painting_dl_07012430, + /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY, + /* Alpha */ 0xFF, + /* Mario Below */ 0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */ + /* Size */ 460.8f, }; diff --git a/levels/ttm/areas/2/geo.inc.c b/levels/ttm/areas/2/geo.inc.c index f41c79c..9af13cd 100644 --- a/levels/ttm/areas/2/geo.inc.c +++ b/levels/ttm/areas/2/geo.inc.c @@ -18,7 +18,7 @@ const GeoLayout ttm_geo_000B5C[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0701D798), GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0701DBB8), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ttm/areas/3/geo.inc.c b/levels/ttm/areas/3/geo.inc.c index 840096a..a59642d 100644 --- a/levels/ttm/areas/3/geo.inc.c +++ b/levels/ttm/areas/3/geo.inc.c @@ -19,7 +19,7 @@ const GeoLayout ttm_geo_000BEC[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07024C78), GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07025F48), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/ttm/areas/4/geo.inc.c b/levels/ttm/areas/4/geo.inc.c index 7e59def..5dc981f 100644 --- a/levels/ttm/areas/4/geo.inc.c +++ b/levels/ttm/areas/4/geo.inc.c @@ -18,7 +18,7 @@ const GeoLayout ttm_geo_000C84[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0702A1B8), GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0702A8A0), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/vcutm/areas/1/geo.inc.c b/levels/vcutm/areas/1/geo.inc.c index 756e4a5..86b6094 100644 --- a/levels/vcutm/areas/1/geo.inc.c +++ b/levels/vcutm/areas/1/geo.inc.c @@ -20,7 +20,7 @@ const GeoLayout vcutm_geo_000208[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_070093E8), GEO_DISPLAY_LIST(LAYER_ALPHA, vcutm_seg7_dl_070080D0), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/wdw/areas/1/geo.inc.c b/levels/wdw/areas/1/geo.inc.c index 112be12..662c3b9 100644 --- a/levels/wdw/areas/1/geo.inc.c +++ b/levels/wdw/areas/1/geo.inc.c @@ -23,7 +23,7 @@ const GeoLayout wdw_geo_000658[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x1101, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/wdw/areas/2/geo.inc.c b/levels/wdw/areas/2/geo.inc.c index b1f70c4..352d124 100644 --- a/levels/wdw/areas/2/geo.inc.c +++ b/levels/wdw/areas/2/geo.inc.c @@ -21,7 +21,7 @@ const GeoLayout wdw_geo_000724[] = { GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x1102, geo_movtex_draw_water_regions), GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/wf/areas/1/geo.inc.c b/levels/wf/areas/1/geo.inc.c index 7f4fcc8..b1c794a 100644 --- a/levels/wf/areas/1/geo.inc.c +++ b/levels/wf/areas/1/geo.inc.c @@ -22,7 +22,7 @@ const GeoLayout wf_geo_000BF8[] = { GEO_RENDER_OBJ(), GEO_ASM( 0, geo_movtex_pause_control), GEO_ASM(0x2401, geo_movtex_draw_water_regions), - GEO_ASM( 0, geo_enfvx_main), + GEO_ASM( 0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/wmotr/areas/1/geo.inc.c b/levels/wmotr/areas/1/geo.inc.c index 915ea20..ba73389 100644 --- a/levels/wmotr/areas/1/geo.inc.c +++ b/levels/wmotr/areas/1/geo.inc.c @@ -19,7 +19,7 @@ const GeoLayout wmotr_geo_0001F0[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wmotr_seg7_dl_0700EFD8), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wmotr_seg7_dl_07010608), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_enfvx_main), + GEO_ASM(0, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/lib/asm/__osExceptionPreamble.s b/lib/asm/__osExceptionPreamble.s index e042bc3..21f3820 100644 --- a/lib/asm/__osExceptionPreamble.s +++ b/lib/asm/__osExceptionPreamble.s @@ -4,6 +4,9 @@ .include "macros.inc" +.ifdef VERSION_SH +.set VERSION_EU, 1 # HACK, someone fix this file, its poorly diff'd! +.endif .section .text, "ax" diff --git a/lib/src/D_802F4380.c b/lib/src/D_802F4380.c index 4da7dd2..cfc1ae2 100644 --- a/lib/src/D_802F4380.c +++ b/lib/src/D_802F4380.c @@ -2,7 +2,7 @@ #include "hardware.h" #include "new_func.h" #include "macros.h" -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) u32 D_802F4380() { u32 sp3c; u32 sp38; diff --git a/lib/src/osCreatePiManager.c b/lib/src/osCreatePiManager.c index 5b3d286..0bdc9d2 100644 --- a/lib/src/osCreatePiManager.c +++ b/lib/src/osCreatePiManager.c @@ -3,7 +3,7 @@ #define OS_PI_MGR_MESG_BUFF_SIZE 1 OSMgrArgs piMgrArgs = { 0 }; -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) OSPiHandle *D_80302DFC = NULL; #endif OSThread piMgrThread; diff --git a/lib/src/osInitialize.c b/lib/src/osInitialize.c index 0b9f712..3cbca8e 100644 --- a/lib/src/osInitialize.c +++ b/lib/src/osInitialize.c @@ -11,7 +11,7 @@ typedef struct { u32 instr03; } exceptionPreamble; -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) extern u32 EU_D_802f4330(u32, void (*)); extern void D_802F4380(); @@ -20,7 +20,7 @@ u32 D_80365CD0; // maybe initialized? u64 osClockRate = 62500000; u32 D_80334808 = 0; -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) u32 EU_D_80336C40; u32 EU_D_80336C44; @@ -41,7 +41,7 @@ void osInitialize(void) { u32 sp34; u32 sp30 = 0; -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) UNUSED u32 eu_sp34; UNUSED u32 eu_sp30; #endif @@ -73,7 +73,7 @@ void osInitialize(void) { if (osResetType == RESET_TYPE_COLD_RESET) { bzero(osAppNmiBuffer, sizeof(osAppNmiBuffer)); } -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) eu_sp30 = HW_REG(PI_STATUS_REG, u32); while (eu_sp30 & PI_STATUS_ERROR) { eu_sp30 = HW_REG(PI_STATUS_REG, u32); diff --git a/rename_sym.sh b/rename_sym.sh index c461935..fd7da9e 100755 --- a/rename_sym.sh +++ b/rename_sym.sh @@ -10,4 +10,4 @@ fi #echo "Replace $1 with $2?" #read -grep -rl "$1" text/**/*.{c,h} assets/**/*.c enhancements/**/*.{c,h,s} lib/**/*.{c,h,s} asm/**/*.s bin/**/*.c data/*.c levels/**/*.c actors/**/*.c src/**/*.{c,h} include/**/*.{h,in} undefined_syms.txt | xargs sed -i "s/\b$1\b/$2/g" +grep -rl "$1" text/**/*.{c,h} assets/**/*.c enhancements/*.patch lib/**/*.{c,h,s} asm/**/*.s bin/**/*.c data/*.c levels/**/*.c actors/**/*.c src/**/*.{c,h} include/**/*.{h,in} undefined_syms.txt | xargs sed -i "s/\b$1\b/$2/g" diff --git a/sm64.ld b/sm64.ld index 59a5a2a..05e3e2d 100755 --- a/sm64.ld +++ b/sm64.ld @@ -141,14 +141,14 @@ SECTIONS BUILD_DIR/src/game/obj_behaviors.o(.text); BUILD_DIR/src/game/obj_behaviors_2.o(.text); BUILD_DIR/src/audio/synthesis.o(.text); - BUILD_DIR/src/audio/memory.o(.text); + BUILD_DIR/src/audio/heap.o(.text); BUILD_DIR/src/audio/load.o(.text); BUILD_DIR/src/audio/playback.o(.text); BUILD_DIR/src/audio/effects.o(.text); BUILD_DIR/src/audio/seqplayer.o(.text); BUILD_DIR/src/audio/external.o(.text); BUILD_DIR/src/audio/port_eu.o(.text); -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) BUILD_DIR/libultra.a:string.o(.text); BUILD_DIR/libultra.a:_Printf.o(.text); BUILD_DIR/libultra.a:llmuldiv.o(.text); @@ -521,7 +521,7 @@ SECTIONS BUILD_DIR/src/game*.o(.rodata*); #endif BUILD_DIR/src/audio/synthesis.o(.rodata*); - BUILD_DIR/src/audio/memory.o(.rodata*); + BUILD_DIR/src/audio/heap.o(.rodata*); BUILD_DIR/src/audio/load.o(.rodata*); BUILD_DIR/src/audio/playback.o(.rodata*); BUILD_DIR/src/audio/effects.o(.rodata*); @@ -874,7 +874,7 @@ SECTIONS BUILD_DIR/src/audio/globals_start.o(.bss*); BUILD_DIR/src/audio/synthesis.o(.bss*); - BUILD_DIR/src/audio/memory.o(.bss*); + BUILD_DIR/src/audio/heap.o(.bss*); BUILD_DIR/src/audio/load.o(.bss*); BUILD_DIR/src/audio/data.o(.bss*); BUILD_DIR/src/audio/globals_end.o(.bss*); diff --git a/sm64.sh.sha1 b/sm64.sh.sha1 new file mode 100644 index 0000000..fd0d7f9 --- /dev/null +++ b/sm64.sh.sha1 @@ -0,0 +1 @@ +3f319ae697533a255a1003d09202379d78d5a2e0 build/sh/sm64.sh.z64 diff --git a/src/audio/data.c b/src/audio/data.c index b1ab8b1..10bbe19 100644 --- a/src/audio/data.c +++ b/src/audio/data.c @@ -4,10 +4,10 @@ #include "data.h" #include "effects.h" -extern struct OSMesgQueue *OSMesgQueue0; -extern struct OSMesgQueue *OSMesgQueue1; -extern struct OSMesgQueue *OSMesgQueue2; -extern struct OSMesgQueue *OSMesgQueue3; +extern struct OSMesgQueue OSMesgQueue0; +extern struct OSMesgQueue OSMesgQueue1; +extern struct OSMesgQueue OSMesgQueue2; +extern struct OSMesgQueue OSMesgQueue3; #ifdef VERSION_EU struct ReverbSettingsEU sReverbSettings[] = { @@ -182,7 +182,7 @@ struct AdsrEnvelope gDefaultEnvelope[] = { #ifdef VERSION_EU struct NoteSubEu gZeroNoteSub = { 0 }; -struct NoteSubEu gDefaultNoteSub = { 1, 1 }; +struct NoteSubEu gDefaultNoteSub = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { NULL } }; s16 sSawtoothWaves[256] = { 0, 1023, 2047, 3071, 4095, 5119, 6143, 7167, 8191, 9215, 10239, diff --git a/src/audio/effects.c b/src/audio/effects.c index 4ace804..2944609 100644 --- a/src/audio/effects.c +++ b/src/audio/effects.c @@ -13,47 +13,68 @@ #endif #ifdef VERSION_EU -void sequence_channel_process_sound(struct SequenceChannel *seqChannel, s32 arg1) { - f32 weight; +static void sequence_channel_process_sound(struct SequenceChannel *seqChannel, s32 recalculateVolume) { + f32 channelVolume; s32 i; - if (seqChannel->unk1.as_bitfields.unk0b40 || arg1) { - weight = seqChannel->volume * seqChannel->volumeScale * seqChannel->seqPlayer->unkEu2C; + if (seqChannel->changes.as_bitfields.volume || recalculateVolume) { + channelVolume = seqChannel->volume * seqChannel->volumeScale * seqChannel->seqPlayer->appliedFadeVolume; if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0) { - weight = seqChannel->seqPlayer->muteVolumeScale * weight; + channelVolume = seqChannel->seqPlayer->muteVolumeScale * channelVolume; } - seqChannel->panChannelWeight = weight; + seqChannel->appliedVolume = channelVolume; } - if (seqChannel->unk1.as_bitfields.unk0b20) { - seqChannel->pan = seqChannel->unk9 * seqChannel->unkA; + if (seqChannel->changes.as_bitfields.pan) { + seqChannel->pan = seqChannel->newPan * seqChannel->panChannelWeight; } for (i = 0; i < 4; ++i) { struct SequenceChannelLayer *layer = seqChannel->layers[i]; - if (layer && layer->enabled && layer->note) { - if (layer->unkEu0b4) { + if (layer != NULL && layer->enabled && layer->note != NULL) { + if (layer->notePropertiesNeedInit) { layer->noteFreqScale = layer->freqScale * seqChannel->freqScale; - layer->noteVelocity = layer->velocitySquare * seqChannel->panChannelWeight; - layer->notePan = (seqChannel->pan + layer->euUnk5 * (0x80 - seqChannel->unkA)) >> 7; - layer->unkEu0b4 = 0; + layer->noteVelocity = layer->velocitySquare * seqChannel->appliedVolume; + layer->notePan = (seqChannel->pan + layer->pan * (0x80 - seqChannel->panChannelWeight)) >> 7; + layer->notePropertiesNeedInit = FALSE; } else { - if (seqChannel->unk1.as_bitfields.unk0b80) { + if (seqChannel->changes.as_bitfields.freqScale) { layer->noteFreqScale = layer->freqScale * seqChannel->freqScale; } - if (seqChannel->unk1.as_bitfields.unk0b40 || arg1) { - layer->noteVelocity = layer->velocitySquare * seqChannel->panChannelWeight; + if (seqChannel->changes.as_bitfields.volume || recalculateVolume) { + layer->noteVelocity = layer->velocitySquare * seqChannel->appliedVolume; } - if (seqChannel->unk1.as_bitfields.unk0b20) { - layer->notePan = (seqChannel->pan + layer->euUnk5 * (0x80 - seqChannel->unkA)) >> 7; + if (seqChannel->changes.as_bitfields.pan) { + layer->notePan = (seqChannel->pan + layer->pan * (0x80 - seqChannel->panChannelWeight)) >> 7; } } } } - seqChannel->unk1.as_u8 = 0; + seqChannel->changes.as_u8 = 0; } #else -void func_80319E70(void) { +static void sequence_channel_process_sound(struct SequenceChannel *seqChannel) { + f32 channelVolume; + f32 panLayerWeight; + f32 panFromChannel; + s32 i; + + channelVolume = seqChannel->volume * seqChannel->volumeScale * seqChannel->seqPlayer->fadeVolume; + if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0) { + channelVolume *= seqChannel->seqPlayer->muteVolumeScale; + } + + panFromChannel = seqChannel->pan * seqChannel->panChannelWeight; + panLayerWeight = US_FLOAT(1.0) - seqChannel->panChannelWeight; + + for (i = 0; i < 4; i++) { + struct SequenceChannelLayer *layer = seqChannel->layers[i]; + if (layer != NULL && layer->enabled && layer->note != NULL) { + layer->noteFreqScale = layer->freqScale * seqChannel->freqScale; + layer->noteVelocity = layer->velocitySquare * channelVolume; + layer->notePan = (layer->pan * panLayerWeight) + panFromChannel; + } + } } #endif @@ -63,7 +84,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { if (seqPlayer->fadeTimer != 0) { seqPlayer->fadeVolume += seqPlayer->fadeVelocity; #ifdef VERSION_EU - seqPlayer->unk_eu = TRUE; + seqPlayer->recalculateVolume = TRUE; #endif if (seqPlayer->fadeVolume > US_FLOAT2(1)) { @@ -98,8 +119,8 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { } #ifdef VERSION_EU - if (seqPlayer->unk_eu) { - seqPlayer->unkEu2C = seqPlayer->fadeVolume * seqPlayer->unkEu28; + if (seqPlayer->recalculateVolume) { + seqPlayer->appliedFadeVolume = seqPlayer->fadeVolume * seqPlayer->fadeVolumeScale; } #endif @@ -108,37 +129,15 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { if (IS_SEQUENCE_CHANNEL_VALID(seqPlayer->channels[i]) == TRUE && seqPlayer->channels[i]->enabled == TRUE) { #ifdef VERSION_EU - sequence_channel_process_sound(seqPlayer->channels[i], seqPlayer->unk_eu); + sequence_channel_process_sound(seqPlayer->channels[i], seqPlayer->recalculateVolume); #else - f32 channelVolume; - f32 panLayerWeight; - f32 panFromChannel; - s32 layerIndex; - struct SequenceChannel *seqChannel = seqPlayer->channels[i]; - - channelVolume = - seqChannel->seqPlayer->fadeVolume * (seqChannel->volume * seqChannel->volumeScale); - if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0) { - channelVolume *= seqChannel->seqPlayer->muteVolumeScale; - } - - panFromChannel = seqChannel->panChannelWeight * seqChannel->pan; - panLayerWeight = US_FLOAT(1.0) - seqChannel->panChannelWeight; - - for (layerIndex = 0; layerIndex < 4; layerIndex++) { - struct SequenceChannelLayer *seqLayer = seqChannel->layers[layerIndex]; - if (seqLayer != NULL && seqLayer->enabled && seqLayer->note != NULL) { - seqLayer->noteFreqScale = seqChannel->freqScale * seqLayer->freqScale; - seqLayer->noteVelocity = seqLayer->velocitySquare * channelVolume; - seqLayer->notePan = (seqLayer->pan * panLayerWeight) + panFromChannel; - } - } + sequence_channel_process_sound(seqPlayer->channels[i]); #endif } } #ifdef VERSION_EU - seqPlayer->unk_eu = FALSE; + seqPlayer->recalculateVolume = FALSE; #endif } @@ -224,18 +223,10 @@ f32 get_vibrato_freq_scale(struct VibratoState *vib) { } vib->extentChangeTimer--; -#ifdef VERSION_EU - } else if ((s32) vib->extent != (*vib).seqChannel->vibratoExtentTarget) { + } else if (vib->seqChannel->vibratoExtentTarget != (s32) vib->extent) { if ((vib->extentChangeTimer = vib->seqChannel->vibratoExtentChangeDelay) == 0) { vib->extent = (s32) vib->seqChannel->vibratoExtentTarget; } -#else - } else if ((s32) vib->extent != vib->seqChannel->vibratoExtentTarget) { - vib->extentChangeTimer = vib->seqChannel->vibratoExtentChangeDelay; - if (vib->extentChangeTimer == 0) { - vib->extent = (s32) vib->seqChannel->vibratoExtentTarget; - } -#endif } if (vib->rateChangeTimer) { @@ -246,18 +237,10 @@ f32 get_vibrato_freq_scale(struct VibratoState *vib) { } vib->rateChangeTimer--; -#ifdef VERSION_EU - } else if ((s32) vib->rate != (*vib).seqChannel->vibratoRateTarget) { + } else if (vib->seqChannel->vibratoRateTarget != (s32) vib->rate) { if ((vib->rateChangeTimer = vib->seqChannel->vibratoRateChangeDelay) == 0) { vib->rate = (s32) vib->seqChannel->vibratoRateTarget; } -#else - } else if ((s32) vib->rate != vib->seqChannel->vibratoRateTarget) { - vib->rateChangeTimer = vib->seqChannel->vibratoRateChangeDelay; - if (vib->rateChangeTimer == 0) { - vib->rate = (s32) vib->seqChannel->vibratoRateTarget; - } -#endif } if (vib->extent == 0) { @@ -339,15 +322,13 @@ void note_vibrato_init(struct Note *note) { vib->seqChannel = note->parentLayer->seqChannel; seqChannel = vib->seqChannel; - vib->extentChangeTimer = seqChannel->vibratoExtentChangeDelay; - if (vib->extentChangeTimer == 0) { + if ((vib->extentChangeTimer = seqChannel->vibratoExtentChangeDelay) == 0) { vib->extent = seqChannel->vibratoExtentTarget; } else { vib->extent = seqChannel->vibratoExtentStart; } - vib->rateChangeTimer = seqChannel->vibratoRateChangeDelay; - if (vib->rateChangeTimer == 0) { + if ((vib->rateChangeTimer = seqChannel->vibratoRateChangeDelay) == 0) { vib->rate = seqChannel->vibratoRateTarget; } else { vib->rate = seqChannel->vibratoRateStart; @@ -396,11 +377,7 @@ s32 adsr_update(struct AdsrState *adsr) { #endif if (action & ADSR_ACTION_HANG) { adsr->state = ADSR_STATE_HANG; -#ifdef VERSION_EU break; -#else - goto CONT; -#endif } // fallthrough } @@ -446,11 +423,7 @@ s32 adsr_update(struct AdsrState *adsr) { break; } if (adsr->state != ADSR_STATE_FADE) { -#ifdef VERSION_EU break; -#else - goto CONT; -#endif } // fallthrough @@ -467,11 +440,7 @@ s32 adsr_update(struct AdsrState *adsr) { // fallthrough case ADSR_STATE_HANG: -#ifdef VERSION_EU break; -#else - goto CONT; -#endif case ADSR_STATE_DECAY: case ADSR_STATE_RELEASE: { @@ -490,11 +459,7 @@ s32 adsr_update(struct AdsrState *adsr) { #endif adsr->state = ADSR_STATE_SUSTAIN; } -#ifdef VERSION_EU break; -#else - goto CONT; -#endif } #ifdef VERSION_EU @@ -508,11 +473,7 @@ s32 adsr_update(struct AdsrState *adsr) { adsr->state = ADSR_STATE_DISABLED; } #endif -#ifdef VERSION_EU break; -#else - goto CONT; -#endif } case ADSR_STATE_SUSTAIN: @@ -520,17 +481,9 @@ s32 adsr_update(struct AdsrState *adsr) { if (adsr->delay == 0) { adsr->state = ADSR_STATE_RELEASE; } -#ifdef VERSION_EU break; -#else - goto CONT; -#endif } -#ifndef VERSION_EU -CONT: -#endif - if ((action & ADSR_ACTION_DECAY)) { adsr->state = ADSR_STATE_DECAY; adsr->action = action & ~ADSR_ACTION_DECAY; diff --git a/src/audio/external.c b/src/audio/external.c index 70c57d2..fcc8997 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -1,6 +1,6 @@ #include #include "sm64.h" -#include "memory.h" +#include "heap.h" #include "load.h" #include "data.h" #include "seqplayer.h" @@ -753,10 +753,8 @@ void func_8031D838(s32 player, FadeT fadeInTime, u8 targetVolume) { #ifdef VERSION_EU extern void func_802ad7a0(void); -void maybe_tick_game_sound(void) -{ - if (sGameLoopTicked != 0) - { +void maybe_tick_game_sound(void) { + if (sGameLoopTicked != 0) { update_game_sound(); sGameLoopTicked = 0; } @@ -764,6 +762,7 @@ void maybe_tick_game_sound(void) } void func_eu_802e9bec(s32 player, s32 channel, s32 arg2) { + // EU verson of unused_803209D8 // chan->stopSomething2 = arg2? func_802ad770(0x08000000 | (player & 0xff) << 16 | (channel & 0xff) << 8, (s8) arg2); } @@ -1607,12 +1606,6 @@ void update_game_sound(void) { #undef ARG2_VAL1 #undef ARG2_VAL2 -#if defined(VERSION_EU) && !defined(NON_MATCHING) -// Just regalloc differences -void play_sequence(u8 player, u8 seqId, u16 fadeTimer); -GLOBAL_ASM("asm/non_matchings/eu/play_sequence.s") -#else - void play_sequence(u8 player, u8 seqId, u16 fadeTimer) { u8 temp_ret; u8 i; @@ -1629,13 +1622,13 @@ void play_sequence(u8 player, u8 seqId, u16 fadeTimer) { } #ifdef VERSION_EU - func_802ad770(0x46000000 | (player & 0xff) << 16, seqId & 0x80); - func_802ad74c(0x82000000 | (player & 0xff) << 16 | ((seqId & 0x7f) & 0xff) << 8, fadeTimer); + func_802ad770(0x46000000 | ((u8)(u32)player) << 16, seqId & 0x80); + func_802ad74c(0x82000000 | ((u8)(u32)player) << 16 | ((u8)(seqId & 0x7f)) << 8, fadeTimer); if (player == 0) { temp_ret = func_803200E4(0); if (temp_ret != 0xff) { - gSequencePlayers[0].unkEu28 = (f32) temp_ret / US_FLOAT(127.0); + gSequencePlayers[0].fadeVolumeScale = (f32) temp_ret / US_FLOAT(127.0); } } #else @@ -1653,7 +1646,6 @@ void play_sequence(u8 player, u8 seqId, u16 fadeTimer) { } #endif } -#endif void sequence_player_fade_out(u8 player, u16 fadeTimer) { #ifdef VERSION_EU @@ -2440,7 +2432,7 @@ void sound_reset(u8 presetId) { sGameLoopTicked = 0; disable_all_sequence_players(); sound_init(); -#if defined(VERSION_JP) || defined(VERSION_US) +#if defined(VERSION_JP) || defined(VERSION_US) || defined(VERSION_SH) audio_reset_session(&gAudioSessionPresets[presetId]); #else audio_reset_session_eu(presetId); diff --git a/src/audio/memory.c b/src/audio/heap.c similarity index 87% rename from src/audio/memory.c rename to src/audio/heap.c index e1a37dd..a11a320 100644 --- a/src/audio/memory.c +++ b/src/audio/heap.c @@ -1,7 +1,7 @@ #include #include -#include "memory.h" +#include "heap.h" #include "data.h" #include "load.h" #include "synthesis.h" @@ -31,7 +31,7 @@ u8 sReverbDownsampleRateLog; // never read struct SoundAllocPool gAudioSessionPool; struct SoundAllocPool gAudioInitPool; struct SoundAllocPool gNotesAndBuffersPool; -u8 sAudioMemoryPad[0x20]; // probably two unused pools +u8 sAudioHeapPad[0x20]; // probably two unused pools struct SoundAllocPool gSeqAndBankPool; struct SoundAllocPool gPersistentCommonPool; struct SoundAllocPool gTemporaryCommonPool; @@ -95,8 +95,7 @@ f64 root_newton_step(f64 x, s32 k, f64 d) * * @return the root, or 1.0 if d is 0 */ -f64 kth_root(f64 d, s32 k) -{ +f64 kth_root(f64 d, s32 k) { f64 root = 1.5; f64 next; f64 diff; @@ -128,7 +127,7 @@ f64 kth_root(f64 d, s32 k) #endif #ifdef VERSION_EU -void func_eu_802e1cd0(s32 UNUSED unused, s32 len) { +void build_vol_rampings_table(s32 UNUSED unused, s32 len) { s32 i; s32 step; s32 d; @@ -308,30 +307,34 @@ static void unused_803163D4() { } #endif -#if defined(VERSION_EU) && !defined(NON_MATCHING) -GLOBAL_ASM("asm/non_matchings/eu/audio/alloc_bank_or_seq.s") -#else - -#ifdef NON_MATCHING void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg3, s32 id) { // arg3 = 0, 1 or 2? - u8 *table; // sp5C - u8 isSound; // sp5B + struct TemporaryPool *tp; // sp30 + struct PersistentPool *persistent = &arg0->persistent; struct SoundAllocPool *pool; void *ret; - u32 firstVal; - u32 secondVal; +#ifndef VERSION_EU + u16 UNUSED _firstVal; + u16 UNUSED _secondVal; +#else + u16 firstVal; + u16 secondVal; +#endif + u32 nullID = -1; + u8 *table; + u8 isSound; +#ifndef VERSION_EU + u16 firstVal; + u16 secondVal; u32 bothDiscardable; u32 leftDiscardable, rightDiscardable; u32 leftNotLoaded, rightNotLoaded; u32 leftAvail, rightAvail; - UNUSED s32 temp; - struct TemporaryPool *v1; // sp30 - struct PersistentPool *persistent = &arg0->persistent; +#endif if (arg3 == 0) { - v1 = &arg0->temporary; + tp = &arg0->temporary; if (arg0 == &gSeqLoadedPool) { table = gSeqLoadStatus; isSound = FALSE; @@ -340,10 +343,10 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg isSound = TRUE; } - firstVal = (v1->entries[0].id == -1 ? SOUND_LOAD_STATUS_NOT_LOADED - : table[v1->entries[0].id]); // a3, a2 - secondVal = - (v1->entries[1].id == -1 ? SOUND_LOAD_STATUS_NOT_LOADED : table[v1->entries[1].id]); // a1 + firstVal = (tp->entries[0].id == (s8)nullID ? SOUND_LOAD_STATUS_NOT_LOADED : table[tp->entries[0].id]); // a3, a2 + secondVal = (tp->entries[1].id == (s8)nullID ? SOUND_LOAD_STATUS_NOT_LOADED : table[tp->entries[1].id]); // a1 + +#ifndef VERSION_EU leftNotLoaded = (firstVal == SOUND_LOAD_STATUS_NOT_LOADED); leftDiscardable = (firstVal == SOUND_LOAD_STATUS_DISCARDABLE); // t0 leftAvail = (firstVal != SOUND_LOAD_STATUS_IN_PROGRESS); @@ -353,83 +356,111 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg bothDiscardable = (leftDiscardable && rightDiscardable); // a0 if (leftNotLoaded) { - v1->nextSide = 0; + tp->nextSide = 0; } else if (rightNotLoaded) { - v1->nextSide = 1; + tp->nextSide = 1; } else if (bothDiscardable) { // Use the opposite side from last time. - } else if (leftDiscardable) { - v1->nextSide = 0; + } else if (firstVal == SOUND_LOAD_STATUS_DISCARDABLE) { //??! + tp->nextSide = 0; } else if (rightDiscardable) { - v1->nextSide = 1; + tp->nextSide = 1; } else if (leftAvail) { - v1->nextSide = 0; + tp->nextSide = 0; } else if (rightAvail) { - v1->nextSide = 1; + tp->nextSide = 1; } else { // Both left and right sides are being loaded into. return NULL; } +#else + if (firstVal == SOUND_LOAD_STATUS_NOT_LOADED) { + tp->nextSide = 0; + } else if (secondVal == SOUND_LOAD_STATUS_NOT_LOADED) { + tp->nextSide = 1; + } else if ((firstVal == SOUND_LOAD_STATUS_DISCARDABLE) && (secondVal == SOUND_LOAD_STATUS_DISCARDABLE)) { + // Use the opposite side from last time. + } else if (firstVal == SOUND_LOAD_STATUS_DISCARDABLE) { + tp->nextSide = 0; + } else if (secondVal == SOUND_LOAD_STATUS_DISCARDABLE) { + tp->nextSide = 1; + } else if (firstVal != SOUND_LOAD_STATUS_IN_PROGRESS) { + tp->nextSide = 0; + } else if (secondVal != SOUND_LOAD_STATUS_IN_PROGRESS) { + tp->nextSide = 1; + } else { + // Both left and right sides are being loaded into. + return NULL; + } +#endif - if (v1->entries[v1->nextSide].id != -1) { - table[v1->entries[v1->nextSide].id] = SOUND_LOAD_STATUS_NOT_LOADED; + pool = &arg0->temporary.pool; // a1 + if (tp->entries[tp->nextSide].id != (s8)nullID) { + table[tp->entries[tp->nextSide].id] = SOUND_LOAD_STATUS_NOT_LOADED; if (isSound == TRUE) { - discard_bank(v1->entries[v1->nextSide].id); + discard_bank(tp->entries[tp->nextSide].id); } } - pool = &arg0->temporary.pool; // a1 - switch (v1->nextSide) { + switch (tp->nextSide) { case 0: - v1->entries[0].ptr = pool->start; - v1->entries[0].id = id; - v1->entries[0].size = size; + tp->entries[0].ptr = pool->start; + tp->entries[0].id = id; + tp->entries[0].size = size; pool->cur = pool->start + size; - if (v1->entries[1].ptr < pool->cur) { + if (tp->entries[1].ptr < pool->cur) { // Throw out the entry on the other side if it doesn't fit. // (possible @bug: what if it's currently being loaded?) - table[v1->entries[1].id] = SOUND_LOAD_STATUS_NOT_LOADED; + table[tp->entries[1].id] = SOUND_LOAD_STATUS_NOT_LOADED; switch (isSound) { case FALSE: - discard_sequence(v1->entries[1].id); + discard_sequence(tp->entries[1].id); break; case TRUE: - discard_bank(v1->entries[1].id); + discard_bank(tp->entries[1].id); break; } - v1->entries[1].id = -1; - v1->entries[1].ptr = pool->size + pool->start; + tp->entries[1].id = (s32)nullID; +#ifdef VERSION_EU + tp->entries[1].ptr = pool->start + pool->size; +#else + tp->entries[1].ptr = pool->size + pool->start; +#endif } - ret = v1->entries[0].ptr; + ret = tp->entries[0].ptr; break; case 1: - v1->entries[1].ptr = pool->size + pool->start - size - 0x10; - v1->entries[1].id = id; - v1->entries[1].size = size; +#ifdef VERSION_EU + tp->entries[1].ptr = pool->start + pool->size - size - 0x10; +#else + tp->entries[1].ptr = pool->size + pool->start - size - 0x10; +#endif + tp->entries[1].id = id; + tp->entries[1].size = size; - if (v1->entries[1].ptr < pool->cur) { - table[v1->entries[0].id] = SOUND_LOAD_STATUS_NOT_LOADED; + if (tp->entries[1].ptr < pool->cur) { + table[tp->entries[0].id] = SOUND_LOAD_STATUS_NOT_LOADED; switch (isSound) { case FALSE: - discard_sequence(v1->entries[0].id); + discard_sequence(tp->entries[0].id); break; case TRUE: - discard_bank(v1->entries[0].id); + discard_bank(tp->entries[0].id); break; } - v1->entries[0].id = -1; + tp->entries[0].id = (s32)nullID; pool->cur = pool->start; } - ret = v1->entries[1].ptr; + ret = tp->entries[1].ptr; break; default: @@ -438,19 +469,31 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg // Switch sides for next time in case both entries are // SOUND_LOAD_STATUS_DISCARDABLE. - v1->nextSide ^= 1; + tp->nextSide ^= 1; return ret; } +#ifdef VERSION_EU + ret = soundAlloc(&arg0->persistent.pool, arg1 * size); + arg0->persistent.entries[arg0->persistent.numEntries].ptr = ret; + + if (ret == NULL) +#else persistent->entries[persistent->numEntries].ptr = soundAlloc(&persistent->pool, arg1 * size); - if (persistent->entries[persistent->numEntries].ptr == NULL) { + if (persistent->entries[persistent->numEntries].ptr == NULL) +#endif + { switch (arg3) { case 2: +#ifdef VERSION_EU + return alloc_bank_or_seq(arg0, arg1, size, 0, id); +#else // Prevent tail call optimization. ret = alloc_bank_or_seq(arg0, arg1, size, 0, id); return ret; +#endif case 1: return NULL; } @@ -460,14 +503,12 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg // Because the buffer is small enough that more don't fit? persistent->entries[persistent->numEntries].id = id; persistent->entries[persistent->numEntries].size = size; - persistent->numEntries++; - return persistent->entries[persistent->numEntries - 1].ptr; -} - +#ifdef VERSION_EU + return persistent->entries[persistent->numEntries++].ptr; #else -GLOBAL_ASM("asm/non_matchings/alloc_bank_or_seq.s") -#endif + persistent->numEntries++; return persistent->entries[persistent->numEntries - 1].ptr; #endif +} void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 id) { u32 i; @@ -548,7 +589,7 @@ void decrease_reverb_gain(void) { #endif #ifdef VERSION_EU -s32 func_eu_802E2AA0(void) { +s32 audio_shut_down_and_reset_step(void) { s32 i; s32 j; switch (gAudioResetStatus) { @@ -621,7 +662,6 @@ void wait_for_audio_frames(s32 frames) { void audio_reset_session(struct AudioSessionSettings *preset) { #else void audio_reset_session(void) { - // TODO: verify compilation again and try to match better struct AudioSessionSettingsEU *preset = &gAudioSessionPresets[gAudioResetPresetIdToLoad]; struct ReverbSettingsEU *reverbSettings; #endif @@ -886,7 +926,7 @@ void audio_reset_session(void) { init_sample_dma_buffers(gMaxSimultaneousNotes); #ifdef VERSION_EU - func_eu_802e1cd0(0, gAudioBufferParameters.samplesPerUpdate); + build_vol_rampings_table(0, gAudioBufferParameters.samplesPerUpdate); #endif osWritebackDCacheAll(); diff --git a/src/audio/memory.h b/src/audio/heap.h similarity index 94% rename from src/audio/memory.h rename to src/audio/heap.h index 141c5d4..5226baa 100644 --- a/src/audio/memory.h +++ b/src/audio/heap.h @@ -1,5 +1,5 @@ -#ifndef AUDIO_MEMORY_H -#define AUDIO_MEMORY_H +#ifndef AUDIO_HEAP_H +#define AUDIO_HEAP_H #include "internal.h" @@ -63,9 +63,10 @@ void sound_init_main_pools(s32 sizeForAudioInitPool); void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg3, s32 id); void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 arg2); #ifdef VERSION_EU +s32 audio_shut_down_and_reset_step(void); void audio_reset_session(void); #else void audio_reset_session(struct AudioSessionSettings *preset); #endif -#endif /* AUDIO_MEMORY_H */ +#endif /* AUDIO_HEAP_H */ diff --git a/src/audio/internal.h b/src/audio/internal.h index ff09828..19a91bb 100644 --- a/src/audio/internal.h +++ b/src/audio/internal.h @@ -215,7 +215,7 @@ struct SequencePlayer /*0x000, 0x000*/ u8 seqDmaInProgress : 1; /*0x000, 0x000*/ u8 bankDmaInProgress : 1; #ifdef VERSION_EU - /* 0x000*/ u8 unk_eu : 1; + /* 0x000*/ u8 recalculateVolume : 1; #endif #ifndef VERSION_EU /*0x001 */ s8 seqVariation; @@ -251,8 +251,8 @@ struct SequencePlayer /*0x020, 0x020*/ f32 volume; // set to 0.0f /*0x024, 0x024*/ f32 muteVolumeScale; // set to 0.5f #ifdef VERSION_EU - /* , 0x028*/ f32 unkEu28; - /* , 0x02C*/ f32 unkEu2C; + /* , 0x028*/ f32 fadeVolumeScale; + /* , 0x02C*/ f32 appliedFadeVolume; #else /* */ u8 pad2[4]; #endif @@ -340,12 +340,12 @@ struct SequenceChannel #ifdef VERSION_EU /* , 0x01*/ union { struct { - u8 unk0b80 : 1; - u8 unk0b40 : 1; - u8 unk0b20 : 1; + u8 freqScale : 1; + u8 volume : 1; + u8 pan : 1; } as_bitfields; u8 as_u8; - } unk1; + } changes; #endif /*0x01, 0x02*/ u8 noteAllocPolicy; /*0x02, 0x03*/ u8 muteBehavior; @@ -354,9 +354,9 @@ struct SequenceChannel /*0x05, 0x06*/ u8 bankId; #ifdef VERSION_EU /* , 0x07*/ u8 reverbIndex; - /* , 0x08*/ u8 unk8; - /* , 0x09*/ u8 unk9; - /* , 0x0A*/ u8 unkA; + /* , 0x08*/ u8 bookOffset; + /* , 0x09*/ u8 newPan; + /* , 0x0A*/ u8 panChannelWeight; // proportion of pan that comes from the channel (0..128) #else /*0x06, */ u8 updatesPerFrameUnused; #endif @@ -374,11 +374,12 @@ struct SequenceChannel /*0x1C, 0x20*/ f32 volumeScale; /*0x20, 0x24*/ f32 volume; #ifndef VERSION_EU - /*0x24, 0x28*/ f32 pan; + /*0x24, */ f32 pan; + /*0x28, */ f32 panChannelWeight; // proportion of pan that comes from the channel (0..1) #else - /*0x24, 0x28*/ s32 pan; + /* , 0x28*/ s32 pan; + /* , 0x2C*/ f32 appliedVolume; #endif - /*0x28, 0x2C*/ f32 panChannelWeight; // proportion of pan that comes from the channel (0..1) /*0x2C, 0x30*/ f32 freqScale; /*0x30, 0x34*/ u8 (*dynTable)[][2]; /*0x34, ????*/ struct Note *noteUnused; // never read @@ -401,16 +402,16 @@ struct SequenceChannelLayer // Maybe SequenceTrack? /*0x00, 0x00*/ u8 stopSomething : 1; // ? /*0x00, 0x00*/ u8 continuousNotes : 1; // keep the same note for consecutive notes with the same sound #ifdef VERSION_EU - /* , 0x00*/ u8 unkEu0b8 : 1; - /* , 0x00*/ u8 unkEu0b4 : 1; - /* , 0x00*/ u8 unkEu0b2 : 1; - /* , 0x01*/ u8 euUnk1; // euInstOrWave? + /* , 0x00*/ u8 unusedEu0b8 : 1; + /* , 0x00*/ u8 notePropertiesNeedInit : 1; + /* , 0x00*/ u8 ignoreDrumPan : 1; + /* , 0x01*/ u8 instOrWave; #endif /*0x01, 0x02*/ u8 status; /*0x02, 0x03*/ u8 noteDuration; // set to 0x80 /*0x03, 0x04*/ u8 portamentoTargetNote; #ifdef VERSION_EU - /* , 0x05*/ u8 euUnk5; // contains US/JP pan * 128.0f + /* , 0x05*/ u8 pan; // 0..128 /* , 0x06*/ u8 notePan; #endif /*0x04, 0x08*/ struct Portamento portamento; @@ -422,7 +423,7 @@ struct SequenceChannelLayer // Maybe SequenceTrack? /*0x20, 0x24*/ f32 freqScale; /*0x24, 0x28*/ f32 velocitySquare; #ifndef VERSION_EU - /*0x28*/ f32 pan; + /*0x28, */ f32 pan; // 0..1 #endif /*0x2C, 0x2C*/ f32 noteVelocity; #ifndef VERSION_EU @@ -452,7 +453,7 @@ struct NoteSynthesisState /*0x01*/ u8 sampleDmaIndex; /*0x02*/ u8 prevHeadsetPanRight; /*0x03*/ u8 prevHeadsetPanLeft; - /* */ u16 samplePosFrac; //? + /*0x04*/ u16 samplePosFrac; /*0x08*/ s32 samplePosInt; /*0x0C*/ struct NoteSynthesisBuffers *synthesisBuffers; /*0x10*/ s16 curVolLeft; @@ -485,8 +486,8 @@ struct NoteSubEu /*0x00*/ u8 stereoStrongLeft : 1; /*0x00*/ u8 stereoHeadsetEffects : 1; /*0x00*/ u8 usesHeadsetPanEffects : 1; - /*0x01*/ u8 unk1b567 : 3; - /*0x01*/ u8 unk1b234 : 3; + /*0x01*/ u8 reverbIndex : 3; + /*0x01*/ u8 bookOffset : 3; /*0x01*/ u8 isSyntheticWave : 1; /*0x01*/ u8 hasTwoAdpcmParts : 1; /*0x02*/ u8 bankId; @@ -506,7 +507,9 @@ struct Note /* U/J, EU */ /*0xA4, 0x00*/ struct AudioListItem listItem; /* 0x10*/ struct NoteSynthesisState synthesisState; +#ifdef TARGET_N64 u8 pad0[12]; +#endif /*0x04, 0x30*/ u8 priority; /* 0x31*/ u8 waveId; /* 0x32*/ u8 sampleCountIndex; @@ -643,20 +646,40 @@ struct AudioBufferParametersEU { struct EuAudioCmd { union { +#if IS_BIG_ENDIAN struct { u8 op; u8 arg1; u8 arg2; u8 arg3; } s; +#else + struct { + u8 arg3; + u8 arg2; + u8 arg1; + u8 op; + } s; +#endif s32 first; } u; union { s32 as_s32; u32 as_u32; f32 as_f32; +#if IS_BIG_ENDIAN u8 as_u8; s8 as_s8; +#else + struct { + u8 pad0[3]; + u8 as_u8; + }; + struct { + u8 pad1[3]; + s8 as_s8; + }; +#endif } u2; }; diff --git a/src/audio/load.c b/src/audio/load.c index 6cbad7b..5077500 100644 --- a/src/audio/load.c +++ b/src/audio/load.c @@ -2,7 +2,7 @@ #include #include "load.h" -#include "memory.h" +#include "heap.h" #include "data.h" #include "seqplayer.h" @@ -19,8 +19,7 @@ struct SharedDma { }; // size = 0x10 // EU only -void func_802ada64(void); -s32 func_eu_802E2AA0(void); +void port_eu_init(void); struct Note *gNotes; @@ -425,27 +424,27 @@ void patch_sound(UNUSED struct AudioBankSound *sound, UNUSED u8 *memBase, UNUSED } #ifndef VERSION_EU -#define PATCH_SOUND(_sound, mem, offset) \ -{ \ - struct AudioBankSound *sound = _sound; \ - struct AudioBankSample *sample; \ - void *patched; \ - if ((*sound).sample != (void *) 0) \ - { \ - patched = (void *)(((unsigned int)(*sound).sample) + ((unsigned int)((unsigned char *) mem))); \ - (*sound).sample = patched; \ - sample = (*sound).sample; \ - if ((*sample).loaded == 0) \ - { \ - patched = (void *)(((unsigned int)(*sample).sampleAddr) + ((unsigned int) offset)); \ - (*sample).sampleAddr = patched; \ - patched = (void *)(((unsigned int)(*sample).loop) + ((unsigned int)((unsigned char *) mem))); \ - (*sample).loop = patched; \ - patched = (void *)(((unsigned int)(*sample).book) + ((unsigned int)((unsigned char *) mem))); \ - (*sample).book = patched; \ - (*sample).loaded = 1; \ - } \ - } \ +#define PATCH_SOUND(_sound, mem, offset) \ +{ \ + struct AudioBankSound *sound = _sound; \ + struct AudioBankSample *sample; \ + void *patched; \ + if ((*sound).sample != (void *) 0) \ + { \ + patched = (void *)(((uintptr_t)(*sound).sample) + ((uintptr_t)((u8 *) mem))); \ + (*sound).sample = patched; \ + sample = (*sound).sample; \ + if ((*sample).loaded == 0) \ + { \ + patched = (void *)(((uintptr_t)(*sample).sampleAddr) + ((uintptr_t) offset)); \ + (*sample).sampleAddr = patched; \ + patched = (void *)(((uintptr_t)(*sample).loop) + ((uintptr_t)((u8 *) mem))); \ + (*sample).loop = patched; \ + patched = (void *)(((uintptr_t)(*sample).book) + ((uintptr_t)((u8 *) mem))); \ + (*sample).book = patched; \ + (*sample).loaded = 1; \ + } \ + } \ } #endif @@ -469,7 +468,7 @@ void patch_audio_bank(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 drums = mem->drums; #ifndef VERSION_EU if (drums != NULL && numDrums > 0) { - mem->drums = (void *)((unsigned int) drums + (unsigned int) mem); + mem->drums = (void *)((uintptr_t) drums + (uintptr_t) mem); if (numDrums > 0) //! unneeded when -sopt is enabled for (i = 0; i < numDrums; i++) { #else @@ -923,7 +922,7 @@ void audio_init() { D_EU_802298D0 = 20.03042f; gRefreshRate = 50; - func_802ada64(); + port_eu_init(); if (k) { } #endif @@ -958,7 +957,7 @@ void audio_init() { #ifdef VERSION_EU gAudioResetPresetIdToLoad = 0; gAudioResetStatus = 1; - func_eu_802E2AA0(); + audio_shut_down_and_reset_step(); #else audio_reset_session(&gAudioSessionPresets[0]); #endif diff --git a/src/audio/playback.c b/src/audio/playback.c index 445b3ce..376f181 100644 --- a/src/audio/playback.c +++ b/src/audio/playback.c @@ -1,7 +1,7 @@ #include #include -#include "memory.h" +#include "heap.h" #include "data.h" #include "load.h" #include "seqplayer.h" @@ -102,7 +102,7 @@ void note_set_resampling_rate(struct Note *note, f32 resamplingRateInput) { note->noteSubEu.resamplingRateFixedPoint = (s32) (resamplingRate * 32768.0f); } -struct AudioBankSound *func_eu_802e4e5c(struct Instrument *instrument, s32 semitone) { +struct AudioBankSound *instrument_get_audio_bank_sound(struct Instrument *instrument, s32 semitone) { struct AudioBankSound *sound; if (semitone < instrument->normalRangeLo) { sound = &instrument->lowNotesSound; @@ -114,7 +114,7 @@ struct AudioBankSound *func_eu_802e4e5c(struct Instrument *instrument, s32 semit return sound; } -struct Instrument *func_eu_802e4e98(s32 bankId, s32 instId) { +struct Instrument *get_instrument_inner(s32 bankId, s32 instId) { struct Instrument *inst; if (IS_BANK_LOAD_COMPLETE(bankId) == FALSE) { @@ -146,7 +146,7 @@ struct Instrument *func_eu_802e4e98(s32 bankId, s32 instId) { return NULL; } -struct Drum *func_eu_802e4fb8(s32 bankId, s32 drumId) { +struct Drum *get_drum(s32 bankId, s32 drumId) { struct Drum *drum; if (drumId >= gCtlEntries[bankId].numDrums) { gAudioErrorFlags = ((bankId << 8) + drumId) + 0x4000000; @@ -223,7 +223,7 @@ void process_notes(void) { u8 reverb; UNUSED u8 pad3; u8 pan; - u8 unk; + u8 bookOffset; #endif struct NoteAttributes *attributes; #ifndef VERSION_EU @@ -321,13 +321,13 @@ void process_notes(void) { reverb = attributes->reverb; if (1) { } - unk = noteSubEu->unk1b234; + bookOffset = noteSubEu->bookOffset; } else { frequency = playbackState->parentLayer->noteFreqScale; velocity = playbackState->parentLayer->noteVelocity; pan = playbackState->parentLayer->notePan; reverb = playbackState->parentLayer->seqChannel->reverb; - unk = playbackState->parentLayer->seqChannel->unk8 & 0x7; // bitfield? + bookOffset = playbackState->parentLayer->seqChannel->bookOffset & 0x7; } frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale; @@ -335,7 +335,7 @@ void process_notes(void) { velocity = velocity * scale * scale; note_set_resampling_rate(note, frequency); note_set_vel_pan_reverb(note, velocity, pan, reverb); - noteSubEu->unk1b234 = unk; + noteSubEu->bookOffset = bookOffset; skip:; } #else @@ -589,7 +589,7 @@ void init_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLaye #ifdef VERSION_EU s32 sampleCountIndex; s32 waveSampleCountIndex; - s32 waveId = seqLayer->euUnk1; + s32 waveId = seqLayer->instOrWave; if (waveId == 0xff) { waveId = seqLayer->seqChannel->instOrWave; } @@ -799,14 +799,14 @@ void note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLaye note->prevParentLayer = NO_LAYER; note->parentLayer = seqLayer; note->priority = seqLayer->seqChannel->notePriority; - seqLayer->unkEu0b4 = TRUE; + seqLayer->notePropertiesNeedInit = TRUE; seqLayer->status = SOUND_LOAD_STATUS_DISCARDABLE; // "loaded" seqLayer->note = note; seqLayer->seqChannel->noteUnused = note; seqLayer->seqChannel->layerUnused = seqLayer; seqLayer->noteVelocity = 0.0f; note_init(note); - instId = seqLayer->euUnk1; + instId = seqLayer->instOrWave; if (instId == 0xff) { instId = seqLayer->seqChannel->instOrWave; } @@ -823,7 +823,7 @@ void note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLaye } sub->bankId = seqLayer->seqChannel->bankId; sub->stereoHeadsetEffects = seqLayer->seqChannel->stereoHeadsetEffects; - sub->unk1b567 = seqLayer->seqChannel->reverbIndex & 3; + sub->reverbIndex = seqLayer->seqChannel->reverbIndex & 3; } #else s32 note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLayer) { diff --git a/src/audio/playback.h b/src/audio/playback.h index b69665d..b267fd0 100644 --- a/src/audio/playback.h +++ b/src/audio/playback.h @@ -29,8 +29,9 @@ void reclaim_notes(void); void note_init_all(void); #ifdef VERSION_EU -struct AudioBankSound *func_eu_802e4e5c(struct Instrument *instrument, s32 semitone); -struct Drum *func_eu_802e4fb8(s32 bankId, s32 drumId); +struct AudioBankSound *instrument_get_audio_bank_sound(struct Instrument *instrument, s32 semitone); +struct Instrument *get_instrument_inner(s32 bankId, s32 instId); +struct Drum *get_drum(s32 bankId, s32 drumId); void note_init_volume(struct Note *note); void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverb); void note_set_frequency(struct Note *note, f32 frequency); diff --git a/src/audio/port_eu.c b/src/audio/port_eu.c index 539f66b..461f988 100644 --- a/src/audio/port_eu.c +++ b/src/audio/port_eu.c @@ -29,9 +29,9 @@ extern struct EuAudioCmd sAudioCmd[0x100]; void func_8031D690(s32 player, FadeT fadeInTime); void sequence_player_fade_out_internal(s32 player, FadeT fadeOutTime); -void func_802ad668(void); +void port_eu_init_queues(void); void decrease_sample_dma_ttls(void); -s32 func_eu_802E2AA0(void); +s32 audio_shut_down_and_reset_step(void); void func_802ad7ec(u32); struct SPTask *create_next_audio_frame_task(void) { @@ -76,7 +76,7 @@ struct SPTask *create_next_audio_frame_task(void) { } if (gAudioResetStatus != 0) { - if (func_eu_802E2AA0() == 0) { + if (audio_shut_down_and_reset_step() == 0) { if (gAudioResetStatus == 0) { osSendMesg(OSMesgQueues[3], (OSMesg) (s32) gAudioResetPresetIdToLoad, OS_MESG_NOBLOCK); } @@ -164,14 +164,14 @@ void eu_process_audio_cmd(struct EuAudioCmd *cmd) { case 0xf1: for (i = 0; i < 4; i++) { gSequencePlayers[i].muted = TRUE; - gSequencePlayers[i].unk_eu = TRUE; + gSequencePlayers[i].recalculateVolume = TRUE; } break; case 0xf2: for (i = 0; i < 4; i++) { gSequencePlayers[i].muted = FALSE; - gSequencePlayers[i].unk_eu = TRUE; + gSequencePlayers[i].recalculateVolume = TRUE; } break; } @@ -207,7 +207,7 @@ void func_8031D690(s32 player, FadeT fadeInTime) { } } -void func_802ad668(void) { +void port_eu_init_queues(void) { D_EU_80302010 = 0; D_EU_80302014 = 0; osCreateMesgQueue(OSMesgQueues[0], &OSMesg0, 1); @@ -262,8 +262,8 @@ void func_802ad7ec(u32 arg0) { else if ((cmd->u.s.op & 0x40) != 0) { switch (cmd->u.s.op) { case 0x41: - seqPlayer->unkEu28 = cmd->u2.as_f32; - seqPlayer->unk_eu = TRUE; + seqPlayer->fadeVolumeScale = cmd->u2.as_f32; + seqPlayer->recalculateVolume = TRUE; break; case 0x47: @@ -286,19 +286,19 @@ void func_802ad7ec(u32 arg0) { switch (cmd->u.s.op) { case 1: chan->volumeScale = cmd->u2.as_f32; - chan->unk1.as_bitfields.unk0b40 = TRUE; + chan->changes.as_bitfields.volume = TRUE; break; case 2: chan->volume = cmd->u2.as_f32; - chan->unk1.as_bitfields.unk0b40 = TRUE; + chan->changes.as_bitfields.volume = TRUE; break; case 3: - chan->unk9 = cmd->u2.as_s8; - chan->unk1.as_bitfields.unk0b20 = TRUE; + chan->newPan = cmd->u2.as_s8; + chan->changes.as_bitfields.pan = TRUE; break; case 4: chan->freqScale = cmd->u2.as_f32; - chan->unk1.as_bitfields.unk0b80 = TRUE; + chan->changes.as_bitfields.freqScale = TRUE; break; case 5: chan->reverb = cmd->u2.as_s8; @@ -319,8 +319,8 @@ void func_802ad7ec(u32 arg0) { } } -void func_802ada64(void) { - func_802ad668(); +void port_eu_init(void) { + port_eu_init_queues(); } #endif diff --git a/src/audio/seqplayer.c b/src/audio/seqplayer.c index c6fb651..7e66a22 100644 --- a/src/audio/seqplayer.c +++ b/src/audio/seqplayer.c @@ -1,7 +1,7 @@ #include #include -#include "memory.h" +#include "heap.h" #include "data.h" #include "load.h" #include "seqplayer.h" @@ -33,11 +33,11 @@ void sequence_channel_init(struct SequenceChannel *seqChannel) { seqChannel->transposition = 0; seqChannel->largeNotes = FALSE; #ifdef VERSION_EU - seqChannel->unk8 = 0; - seqChannel->unk1.as_u8 = 0xff; + seqChannel->bookOffset = 0; + seqChannel->changes.as_u8 = 0xff; seqChannel->scriptState.depth = 0; - seqChannel->unk9 = 0x40; - seqChannel->unkA = 0x80; + seqChannel->newPan = 0x40; + seqChannel->panChannelWeight = 0x80; seqChannel->noteUnused = NULL; seqChannel->reverbIndex = 0; #else @@ -105,14 +105,14 @@ s32 seq_channel_set_layer(struct SequenceChannel *seqChannel, s32 layerIndex) { layer->continuousNotes = FALSE; layer->finished = FALSE; #ifdef VERSION_EU - layer->unkEu0b2 = FALSE; + layer->ignoreDrumPan = FALSE; #endif layer->portamento.mode = 0; layer->scriptState.depth = 0; layer->status = SOUND_LOAD_STATUS_NOT_LOADED; layer->noteDuration = 0x80; #ifdef VERSION_EU - layer->euUnk5 = 0x40; + layer->pan = 0x40; #endif layer->transposition = 0; layer->delay = 0; @@ -123,7 +123,7 @@ s32 seq_channel_set_layer(struct SequenceChannel *seqChannel, s32 layerIndex) { #ifdef VERSION_EU layer->freqScale = 1.0f; layer->velocitySquare = 0.0f; - layer->euUnk1 = 0xff; + layer->instOrWave = 0xff; #else layer->velocitySquare = 0.0f; layer->pan = 0.5f; @@ -244,18 +244,18 @@ void sequence_player_disable_channels(struct SequencePlayer *seqPlayer, u16 chan } } -#if defined(VERSION_EU) && !defined(NON_MATCHING) -GLOBAL_ASM("asm/non_matchings/eu/audio/sequence_channel_enable.s") -#else void sequence_channel_enable(struct SequencePlayer *seqPlayer, u8 channelIndex, void *arg2) { struct SequenceChannel *seqChannel = seqPlayer->channels[channelIndex]; s32 i; #ifdef VERSION_EU if (IS_SEQUENCE_CHANNEL_VALID(seqChannel) == FALSE) { - // not matching exactly, but this is the logic at least (stubbed printfs?) - if (seqPlayer == &gSequencePlayers[0]) { - } else if (seqPlayer == &gSequencePlayers[1]) { + struct SequencePlayer *bgMusic = &gSequencePlayers[0]; + struct SequencePlayer *miscMusic = &gSequencePlayers[1]; + + if (seqPlayer == bgMusic) { + } else if (seqPlayer == miscMusic) { + } else { } } else { #else @@ -273,7 +273,6 @@ void sequence_channel_enable(struct SequencePlayer *seqPlayer, u8 channelIndex, } } } -#endif void sequence_player_disable(struct SequencePlayer *seqPlayer) { sequence_player_disable_channels(seqPlayer, 0xffff); @@ -464,7 +463,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { seqPlayer = seqChannel->seqPlayer; #ifdef VERSION_EU - layer->unkEu0b4 = TRUE; + layer->notePropertiesNeedInit = TRUE; #endif for (;;) { @@ -553,7 +552,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { layer->velocitySquare = (f32)(temp_a0_5 * temp_a0_5); } else { #ifdef VERSION_EU - layer->euUnk5 = temp_a0_5; + layer->pan = temp_a0_5; #else layer->pan = (f32) temp_a0_5 / US_FLOAT(128.0); #endif @@ -624,9 +623,9 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { if (instId >= 0x7f) { #ifdef VERSION_EU if (instId == 0x7f) { - layer->euUnk1 = 0; + layer->instOrWave = 0; } else { - layer->euUnk1 = instId; + layer->instOrWave = instId; layer->instrument = NULL; } if (instId != 0xff) { @@ -639,11 +638,11 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { #ifdef VERSION_EU instId = get_instrument(seqChannel, instId, &layer->instrument, &layer->adsr); - layer->euUnk1 = instId; + layer->instOrWave = instId; if (instId == 0) { - layer->euUnk1 = 0xff; + layer->instOrWave = 0xff; } - //layer->euUnk1 = instId == 0 ? 0xff : instId; + //layer->instOrWave = instId == 0 ? 0xff : instId; break; #else bankId = seqChannel->bankId; // maybe a temp, to match get_instrument @@ -732,7 +731,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { break; case 0xcc: - layer->unkEu0b2 = TRUE; + layer->ignoreDrumPan = TRUE; break; #endif @@ -869,9 +868,9 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { layer->stopSomething = TRUE; } else { #ifdef VERSION_EU - if ((layer->euUnk1 == 0xff ? seqChannel->instOrWave : layer->euUnk1) == 0) { + if ((layer->instOrWave == 0xff ? seqChannel->instOrWave : layer->instOrWave) == 0) { drumIndex = cmdSemitone + seqChannel->transposition + layer->transposition; - drum = func_eu_802e4fb8(seqChannel->bankId, drumIndex); + drum = get_drum(seqChannel->bankId, drumIndex); #else if (seqChannel->instOrWave == 0) { // drum drumIndex = cmdSemitone + seqChannel->transposition + layer->transposition; @@ -893,8 +892,8 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { layer->adsr.envelope = drum->envelope; layer->adsr.releaseRate = drum->releaseRate; #ifdef VERSION_EU - if (!layer->unkEu0b2) { - layer->euUnk5 = drum->pan; + if (!layer->ignoreDrumPan) { + layer->pan = drum->pan; } #else layer->pan = FLOAT_CAST(drum->pan) / US_FLOAT(128.0); @@ -912,7 +911,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { layer->stopSomething = TRUE; } else { #ifdef VERSION_EU - if (layer->euUnk1 == 0xff) { + if (layer->instOrWave == 0xff) { instrument = seqChannel->instrument; } else { instrument = layer->instrument; @@ -931,7 +930,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { } if (instrument != NULL) { #ifdef VERSION_EU - sound = func_eu_802e4e5c(instrument, usedSemitone); + sound = instrument_get_audio_bank_sound(instrument, usedSemitone); #else if (usedSemitone < instrument->normalRangeLo) { sound = &instrument->lowNotesSound; @@ -990,7 +989,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { } } else if (instrument != NULL) { #ifdef VERSION_EU - sound = func_eu_802e4e5c(instrument, semitone); + sound = instrument_get_audio_bank_sound(instrument, semitone); #else if (semitone < instrument->normalRangeLo) { sound = &instrument->lowNotesSound; @@ -1055,14 +1054,12 @@ GLOBAL_ASM("asm/non_matchings/seq_channel_layer_process_script_jp.s") GLOBAL_ASM("asm/non_matchings/seq_channel_layer_process_script_us.s") #endif -struct Instrument *func_eu_802e4e98(s32 bankId, s32 instId); - u8 get_instrument(struct SequenceChannel *seqChannel, u8 instId, struct Instrument **instOut, struct AdsrSettings *adsr) { struct Instrument *inst; #ifdef VERSION_EU - inst = func_eu_802e4e98(seqChannel->bankId, instId); + inst = get_instrument_inner(seqChannel->bankId, instId); if (inst == NULL) { *instOut = NULL; @@ -1362,21 +1359,21 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xdf: // chan_setvol sequence_channel_set_volume(seqChannel, m64_read_u8(state)); #ifdef VERSION_EU - seqChannel->unk1.as_bitfields.unk0b40 = TRUE; + seqChannel->changes.as_bitfields.volume = TRUE; #endif break; case 0xe0: // chan_setvolscale seqChannel->volumeScale = FLOAT_CAST(m64_read_u8(state)) / US_FLOAT(128.0); #ifdef VERSION_EU - seqChannel->unk1.as_bitfields.unk0b40 = TRUE; + seqChannel->changes.as_bitfields.volume = TRUE; #endif break; case 0xde: // chan_freqscale; pitch bend using raw frequency multiplier N/2^15 (N is u16) sp5A = m64_read_s16(state); #ifdef VERSION_EU - seqChannel->unk1.as_bitfields.unk0b80 = TRUE; + seqChannel->changes.as_bitfields.freqScale = TRUE; #endif seqChannel->freqScale = FLOAT_CAST(sp5A) / US_FLOAT(32768.0); break; @@ -1386,14 +1383,14 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { temp = m64_read_u8(state) + 127; seqChannel->freqScale = gPitchBendFrequencyScale[temp]; #ifdef VERSION_EU - seqChannel->unk1.as_bitfields.unk0b80 = TRUE; + seqChannel->changes.as_bitfields.freqScale = TRUE; #endif break; case 0xdd: // chan_setpan #ifdef VERSION_EU - seqChannel->unk9 = m64_read_u8(state); - seqChannel->unk1.as_bitfields.unk0b20 = TRUE; + seqChannel->newPan = m64_read_u8(state); + seqChannel->changes.as_bitfields.pan = TRUE; #else seqChannel->pan = FLOAT_CAST(m64_read_u8(state)) / US_FLOAT(128.0); #endif @@ -1401,8 +1398,8 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xdc: // chan_setpanmix; set proportion of pan to come from channel (0..128) #ifdef VERSION_EU - seqChannel->unkA = m64_read_u8(state); - seqChannel->unk1.as_bitfields.unk0b20 = TRUE; + seqChannel->panChannelWeight = m64_read_u8(state); + seqChannel->changes.as_bitfields.pan = TRUE; #else seqChannel->panChannelWeight = FLOAT_CAST(m64_read_u8(state)) / US_FLOAT(128.0); #endif @@ -1544,7 +1541,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { #ifdef VERSION_EU case 0xe6: - seqChannel->unk8 = m64_read_u8(state); + seqChannel->bookOffset = m64_read_u8(state); break; case 0xe7: @@ -1554,11 +1551,11 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { seqChannel->noteAllocPolicy = *arr++; seqChannel->notePriority = *arr++; seqChannel->transposition = (s8) *arr++; - seqChannel->unk9 = *arr++; - seqChannel->unkA = *arr++; + seqChannel->newPan = *arr++; + seqChannel->panChannelWeight = *arr++; seqChannel->reverb = *arr++; seqChannel->reverbIndex = *arr++; // reverb index? - seqChannel->unk1.as_bitfields.unk0b20 = TRUE; + seqChannel->changes.as_bitfields.pan = TRUE; break; case 0xe8: @@ -1566,11 +1563,11 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { seqChannel->noteAllocPolicy = m64_read_u8(state); seqChannel->notePriority = m64_read_u8(state); seqChannel->transposition = (s8) m64_read_u8(state); - seqChannel->unk9 = m64_read_u8(state); - seqChannel->unkA = m64_read_u8(state); + seqChannel->newPan = m64_read_u8(state); + seqChannel->panChannelWeight = m64_read_u8(state); seqChannel->reverb = m64_read_u8(state); seqChannel->reverbIndex = m64_read_u8(state); - seqChannel->unk1.as_bitfields.unk0b20 = TRUE; + seqChannel->changes.as_bitfields.pan = TRUE; break; case 0xec: @@ -1689,14 +1686,10 @@ GLOBAL_ASM("asm/non_matchings/sequence_channel_process_script_jp.s") GLOBAL_ASM("asm/non_matchings/sequence_channel_process_script_us.s") #endif -#if defined(VERSION_EU) && !defined(NON_MATCHING) -GLOBAL_ASM("asm/non_matchings/eu/audio/sequence_player_process_sequence.s") -#else void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { u8 cmd; u8 loBits; u8 temp; - s8 tempSigned; s32 value; s32 i; u16 u16v; @@ -1758,6 +1751,10 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { if (osRecvMesg(&seqPlayer->seqDmaMesgQueue, NULL, 0) == -1) { return; } +#ifndef AVOID_UB + if (temp) { + } +#endif #else if (seqPlayer->seqDmaMesg == NULL) { return; @@ -1791,10 +1788,14 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { state = &seqPlayer->scriptState; if (seqPlayer->delay > 1) { +#ifndef AVOID_UB + if (temp) { + } +#endif seqPlayer->delay--; } else { #ifdef VERSION_EU - seqPlayer->unk_eu = 1; + seqPlayer->recalculateVolume = 1; #endif for (;;) { cmd = m64_read_u8(state); @@ -1804,7 +1805,11 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { sequence_player_disable(seqPlayer); break; } +#ifdef VERSION_EU + state->pc = state->stack[--state->depth]; +#else state->depth--, state->pc = state->stack[state->depth]; +#endif } if (cmd == 0xfd) // seq_delay @@ -1873,14 +1878,14 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { case 0xf4: case 0xf3: case 0xf2: - tempSigned = m64_read_u8(state); + temp = m64_read_u8(state); if (cmd == 0xf3 && value != 0) { break; } if (cmd == 0xf2 && value >= 0) { break; } - state->pc += tempSigned; + state->pc += (s8)temp; break; #endif @@ -1942,7 +1947,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { case SEQUENCE_PLAYER_STATE_2: seqPlayer->fadeTimer = u16v; seqPlayer->state = temp; - seqPlayer->fadeVelocity = (0.0f - seqPlayer->fadeVolume) / (s32) u16v; + seqPlayer->fadeVelocity = (0.0f - seqPlayer->fadeVolume) / (s32) (u16v & 0xFFFFu); break; } break; @@ -1988,16 +1993,16 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; case 0xda: // seq_changevol - tempSigned = m64_read_u8(state); + temp = m64_read_u8(state); seqPlayer->fadeVolume = - seqPlayer->fadeVolume + (f32) tempSigned / US_FLOAT(127.0); + seqPlayer->fadeVolume + (f32) (s8)temp / US_FLOAT(127.0); break; #endif #ifdef VERSION_EU case 0xd9: - tempSigned = m64_read_u8(state); - seqPlayer->unkEu28 = tempSigned / 127.0f; + temp = m64_read_u8(state); + seqPlayer->fadeVolumeScale = (s8)temp / 127.0f; break; #endif @@ -2012,8 +2017,8 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; case 0xd5: // seq_setmutescale - tempSigned = m64_read_u8(state); - seqPlayer->muteVolumeScale = (f32) tempSigned / US_FLOAT(127.0); + temp = m64_read_u8(state); + seqPlayer->muteVolumeScale = (f32) (s8)temp / US_FLOAT(127.0); break; case 0xd4: // seq_mute @@ -2125,7 +2130,6 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { #endif } } -#endif // This runs 240 times per second. void process_sequences(UNUSED s32 iterationsRemaining) { @@ -2172,7 +2176,7 @@ void init_sequence_player(u32 player) { seqPlayer->shortNoteDurationTable = gDefaultShortNoteDurationTable; seqPlayer->fadeVolume = 1.0f; #ifdef VERSION_EU - seqPlayer->unkEu28 = 1.0f; + seqPlayer->fadeVolumeScale = 1.0f; #endif seqPlayer->fadeVelocity = 0.0f; seqPlayer->volume = 0.0f; diff --git a/src/audio/synthesis.c b/src/audio/synthesis.c index 5d1f7e3..e051d63 100644 --- a/src/audio/synthesis.c +++ b/src/audio/synthesis.c @@ -2,7 +2,7 @@ #include #include "synthesis.h" -#include "memory.h" +#include "heap.h" #include "data.h" #include "load.h" #include "seqplayer.h" @@ -81,19 +81,16 @@ u8 sAudioSynthesisPad[0x20]; #endif #if defined(VERSION_EU) -#ifndef NON_MATCHING -GLOBAL_ASM("asm/non_matchings/eu/audio/prepare_reverb_ring_buffer.s") -#else // Equivalent functionality as the US/JP version, // just that the reverb structure is chosen from an array with index void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex, s32 reverbIndex) { - struct SynthesisReverb *reverb = &gSynthesisReverbs[reverbIndex]; struct ReverbRingBufferItem *item; + struct SynthesisReverb *reverb = &gSynthesisReverbs[reverbIndex]; s32 srcPos; s32 dstPos; s32 nSamples; - //s32 numSamplesAfterDownsampling; s32 excessiveSamples; + s32 UNUSED pad[3]; if (reverb->downsampleRate != 1) { if (reverb->framesLeftToIgnore == 0) { // Now that the RSP has finished, downsample the samples produced two frames ago by skipping @@ -105,9 +102,9 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex, s32 reverbIndex) for (srcPos = 0, dstPos = 0; dstPos < item->lengths[0] / 2; srcPos += reverb->downsampleRate, dstPos++) { - reverb->ringBuffer.left[dstPos + item->startPos] = + reverb->ringBuffer.left[item->startPos + dstPos] = item->toDownsampleLeft[srcPos]; - reverb->ringBuffer.right[dstPos + item->startPos] = + reverb->ringBuffer.right[item->startPos + dstPos] = item->toDownsampleRight[srcPos]; } for (dstPos = 0; dstPos < item->lengths[1] / 2; srcPos += reverb->downsampleRate, dstPos++) { @@ -117,11 +114,9 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex, s32 reverbIndex) } } - //numSamplesAfterDownsampling = - nSamples = chunkLen / reverb->downsampleRate; - excessiveSamples = - (nSamples + reverb->nextRingBufferPos) - reverb->bufSizePerChannel; item = &reverb->items[reverb->curFrame][updateIndex]; + nSamples = chunkLen / reverb->downsampleRate; + excessiveSamples = (nSamples + reverb->nextRingBufferPos) - reverb->bufSizePerChannel; if (excessiveSamples < 0) { // There is space in the ring buffer before it wraps around item->lengths[0] = nSamples * 2; @@ -130,7 +125,6 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex, s32 reverbIndex) reverb->nextRingBufferPos += nSamples; } else { // Ring buffer wrapped around - //nSamples = numSamplesAfterDownsampling - excessiveSamples; item->lengths[0] = (nSamples - excessiveSamples) * 2; item->lengths[1] = excessiveSamples * 2; item->startPos = reverb->nextRingBufferPos; @@ -140,7 +134,6 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex, s32 reverbIndex) item->numSamplesAfterDownsampling = nSamples; item->chunkLen = chunkLen; } -#endif #else void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex) { struct ReverbRingBufferItem *item; @@ -261,50 +254,33 @@ s32 get_volume_ramping(u16 sourceVol, u16 targetVol, s32 arg2) { #endif #ifdef VERSION_EU -#ifndef NON_MATCHING -GLOBAL_ASM("asm/non_matchings/eu/audio/synthesis_execute.s") -#else +//TODO: (Scrub C) pointless mask and whitespace u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, u16 *aiBuf, s32 bufLen) { - s32 nextVolRampTable; - s32 temp; - s32 i; - s32 remaining; + s32 i, j; f32 *leftVolRamp; f32 *rightVolRamp; - s32 chunkLen; - s32 j; u32 *aiBufPtr; u64 *cmd = cmdBuf; + s32 chunkLen; + s32 nextVolRampTable; for (i = gAudioBufferParameters.updatesPerFrame; i > 0; i--) { process_sequences(i - 1); synthesis_load_note_subs_eu(gAudioBufferParameters.updatesPerFrame - i); } aSegment(cmd++, 0, 0); - remaining = bufLen; aiBufPtr = (u32 *) aiBuf; for (i = gAudioBufferParameters.updatesPerFrame; i > 0; i--) { if (i == 1) { - leftVolRamp = gLeftVolRampings[nextVolRampTable]; - rightVolRamp = gRightVolRampings[nextVolRampTable]; - chunkLen = remaining; + // self-assignment has no affect when added here, could possibly simplify a macro definition + chunkLen = bufLen; nextVolRampTable = nextVolRampTable; leftVolRamp = gLeftVolRampings[nextVolRampTable]; rightVolRamp = gRightVolRampings[nextVolRampTable & 0xFFFFFFFF]; } else { - temp = remaining / i; - if (temp >= gAudioBufferParameters.samplesPerUpdateMax) { - leftVolRamp = gLeftVolRampings[2]; - rightVolRamp = gRightVolRampings[2]; - chunkLen = gAudioBufferParameters.samplesPerUpdateMax; - nextVolRampTable = 2; - } else if (temp <= gAudioBufferParameters.samplesPerUpdateMin) { - leftVolRamp = gLeftVolRampings[0]; - rightVolRamp = gRightVolRampings[0]; - chunkLen = gAudioBufferParameters.samplesPerUpdateMin; - nextVolRampTable = 0; + if (bufLen / i >= gAudioBufferParameters.samplesPerUpdateMax) { + chunkLen = gAudioBufferParameters.samplesPerUpdateMax; nextVolRampTable = 2; leftVolRamp = gLeftVolRampings[2]; rightVolRamp = gRightVolRampings[2]; + } else if (bufLen / i <= gAudioBufferParameters.samplesPerUpdateMin) { + chunkLen = gAudioBufferParameters.samplesPerUpdateMin; nextVolRampTable = 0; leftVolRamp = gLeftVolRampings[0]; rightVolRamp = gRightVolRampings[0]; } else { - leftVolRamp = gLeftVolRampings[1]; - rightVolRamp = gRightVolRampings[1]; - chunkLen = gAudioBufferParameters.samplesPerUpdate; - nextVolRampTable = 1; + chunkLen = gAudioBufferParameters.samplesPerUpdate; nextVolRampTable = 1; leftVolRamp = gLeftVolRampings[1]; rightVolRamp = gRightVolRampings[1]; } } gCurrentLeftVolRamping = leftVolRamp; @@ -315,19 +291,19 @@ u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, u16 *aiBuf, s32 bufLen) { } } cmd = synthesis_do_one_audio_update((u16 *) aiBufPtr, chunkLen, cmd, gAudioBufferParameters.updatesPerFrame - i); - remaining -= chunkLen; + bufLen -= chunkLen; aiBufPtr += chunkLen; } - for (i = 0; i < gNumSynthesisReverbs; i++) { - if (gSynthesisReverbs[i].framesLeftToIgnore != 0) { - gSynthesisReverbs[i].framesLeftToIgnore--; + + for (j = 0; j < gNumSynthesisReverbs; j++) { + if (gSynthesisReverbs[j].framesLeftToIgnore != 0) { + gSynthesisReverbs[j].framesLeftToIgnore--; } - gSynthesisReverbs[i].curFrame ^= 1; + gSynthesisReverbs[j].curFrame ^= 1; } *writtenCmds = cmd - cmdBuf; return cmd; } -#endif #else // bufLen will be divisible by 16 u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, u16 *aiBuf, s32 bufLen) { @@ -372,171 +348,153 @@ u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, u16 *aiBuf, s32 bufLen) { #ifdef VERSION_EU -#ifndef NON_MATCHING -GLOBAL_ASM("asm/non_matchings/eu/audio/synthesis_resample_and_mix_reverb.s") -u64 *synthesis_resample_and_mix_reverb(u64 *cmd, s32 bufLen, s16 reverbIndex, s16 updateIndex); -#else u64 *synthesis_resample_and_mix_reverb(u64 *cmd, s32 bufLen, s16 reverbIndex, s16 updateIndex) { - struct ReverbRingBufferItem *item; // sp5C + struct ReverbRingBufferItem *item; s16 temp_t9; // sp5a s16 sp58; // sp58 - struct SynthesisReverb *reverb; - reverb = &gSynthesisReverbs[reverbIndex]; - item = &reverb->items[reverb->curFrame][updateIndex]; + item = &gSynthesisReverbs[reverbIndex].items[gSynthesisReverbs[reverbIndex].curFrame][updateIndex]; aClearBuffer(cmd++, DMEM_ADDR_WET_LEFT_CH, DEFAULT_LEN_2CH); - if (reverb->downsampleRate == 1) { + if (gSynthesisReverbs[reverbIndex].downsampleRate == 1) { cmd = synthesis_load_reverb_ring_buffer(cmd, DMEM_ADDR_WET_LEFT_CH, item->startPos, item->lengths[0], reverbIndex); if (item->lengths[1] != 0) { cmd = synthesis_load_reverb_ring_buffer(cmd, DMEM_ADDR_WET_LEFT_CH + item->lengths[0], 0, item->lengths[1], reverbIndex); } aSetBuffer(cmd++, 0, 0, 0, DEFAULT_LEN_2CH); aMix(cmd++, 0, 0x7fff, DMEM_ADDR_WET_LEFT_CH, DMEM_ADDR_LEFT_CH); - aMix(cmd++, 0, 0x8000 + reverb->reverbGain, DMEM_ADDR_WET_LEFT_CH, DMEM_ADDR_WET_LEFT_CH); + aMix(cmd++, 0, 0x8000 + gSynthesisReverbs[reverbIndex].reverbGain, DMEM_ADDR_WET_LEFT_CH, DMEM_ADDR_WET_LEFT_CH); } else { - temp_t9 = (item->startPos & 7) * 2; - sp58 = ALIGN(temp_t9 + item->lengths[0], 4); + temp_t9 = (item->startPos % 8u) * 2; + sp58 = ALIGN(item->lengths[0] + (sp58=temp_t9), 4); + cmd = synthesis_load_reverb_ring_buffer(cmd, 0x20, (item->startPos - temp_t9 / 2), DEFAULT_LEN_1CH, reverbIndex); if (item->lengths[1] != 0) { cmd = synthesis_load_reverb_ring_buffer(cmd, 0x20 + sp58, 0, DEFAULT_LEN_1CH - sp58, reverbIndex); } aSetBuffer(cmd++, 0, temp_t9 + DMEM_ADDR_ADPCM_RESAMPLED, DMEM_ADDR_WET_LEFT_CH, bufLen * 2); - aResample(cmd++, reverb->resampleFlags, reverb->resampleRate, VIRTUAL_TO_PHYSICAL2(reverb->resampleStateLeft)); + aResample(cmd++, gSynthesisReverbs[reverbIndex].resampleFlags, gSynthesisReverbs[reverbIndex].resampleRate, VIRTUAL_TO_PHYSICAL2(gSynthesisReverbs[reverbIndex].resampleStateLeft)); aSetBuffer(cmd++, 0, temp_t9 + DMEM_ADDR_ADPCM_RESAMPLED2, DMEM_ADDR_WET_RIGHT_CH, bufLen * 2); - aResample(cmd++, reverb->resampleFlags, reverb->resampleRate, VIRTUAL_TO_PHYSICAL2(reverb->resampleStateRight)); + aResample(cmd++, gSynthesisReverbs[reverbIndex].resampleFlags, gSynthesisReverbs[reverbIndex].resampleRate, VIRTUAL_TO_PHYSICAL2(gSynthesisReverbs[reverbIndex].resampleStateRight)); aSetBuffer(cmd++, 0, 0, 0, DEFAULT_LEN_2CH); aMix(cmd++, 0, 0x7fff, DMEM_ADDR_WET_LEFT_CH, DMEM_ADDR_LEFT_CH); - aMix(cmd++, 0, 0x8000 + reverb->reverbGain, DMEM_ADDR_WET_LEFT_CH, DMEM_ADDR_WET_LEFT_CH); + aMix(cmd++, 0, 0x8000 + gSynthesisReverbs[reverbIndex].reverbGain, DMEM_ADDR_WET_LEFT_CH, DMEM_ADDR_WET_LEFT_CH); } return cmd; } -#endif -#ifndef NON_MATCHING -GLOBAL_ASM("asm/non_matchings/eu/audio/func_eu_802e00d8.s") -u64 *func_eu_802e00d8(u64 *cmd, s16 reverbIndex, s16 updateIndex); -#else -u64 *func_eu_802e00d8(u64 *cmd, s16 reverbIndex, s16 updateIndex) { - struct SynthesisReverb *reverb; +u64 *synthesis_save_reverb_samples(u64 *cmdBuf, s16 reverbIndex, s16 updateIndex) { struct ReverbRingBufferItem *item; + struct SynthesisReverb *reverb; + u64 *cmd = cmdBuf; reverb = &gSynthesisReverbs[reverbIndex]; item = &reverb->items[reverb->curFrame][updateIndex]; if (reverb->useReverb != 0) { + if (1) { + } if (reverb->downsampleRate == 1) { - cmd = synthesis_save_reverb_ring_buffer(cmd, DMEM_ADDR_WET_LEFT_CH, item->startPos, item->lengths[0], reverbIndex); + // Put the oldest samples in the ring buffer into the wet channels + cmd = cmdBuf = synthesis_save_reverb_ring_buffer(cmd, DMEM_ADDR_WET_LEFT_CH, item->startPos, item->lengths[0], reverbIndex); if (item->lengths[1] != 0) { + // Ring buffer wrapped cmd = synthesis_save_reverb_ring_buffer(cmd, DMEM_ADDR_WET_LEFT_CH + item->lengths[0], 0, item->lengths[1], reverbIndex); + cmdBuf = cmd; } } else { - aSetBuffer(cmd++, 0, 0, DMEM_ADDR_WET_LEFT_CH, DEFAULT_LEN_2CH); - aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(reverb->items[reverb->curFrame][updateIndex].toDownsampleLeft)); + // Downsampling is done later by CPU when RSP is done, therefore we need to have double + // buffering. Left and right buffers are adjacent in memory. + aSetBuffer(cmdBuf++, 0, 0, DMEM_ADDR_WET_LEFT_CH, DEFAULT_LEN_2CH); + aSaveBuffer(cmdBuf++, VIRTUAL_TO_PHYSICAL2(reverb->items[reverb->curFrame][updateIndex].toDownsampleLeft)); reverb->resampleFlags = 0; } } - return cmd; + return cmdBuf; } #endif -#endif #ifdef VERSION_EU -#ifndef NON_MATCHING -GLOBAL_ASM("asm/non_matchings/eu/audio/synthesis_do_one_audio_update.s") -#else u64 *synthesis_do_one_audio_update(u16 *aiBuf, s32 bufLen, u64 *cmd, u32 updateIndex) { - u8 sp84[60]; - struct SynthesisReverb *sp60; - s32 temp_lo; - s32 temp_lo_2; - u8 temp_v1; - u8 temp_v1_2; - struct NoteSubEu *temp_t5; - struct NoteSubEu *temp_v0; - s32 phi_s1; - s16 phi_s2; - s16 phi_s3; - s32 phi_s1_2; - s32 phi_v1_2; - s32 phi_s1_3; - s16 phi_s3_2; - s32 phi_s1_4; - u8 *phi_s0_2; - s32 bufLen2; + struct NoteSubEu *noteSubEu; + u8 noteIndices[56]; + s32 temp; + s32 i; + s16 j; + s16 notePos = 0; if (gNumSynthesisReverbs == 0) { - phi_s2 = 0; - for (phi_s1 = 0; phi_s1 < gMaxSimultaneousNotes; phi_s1++) { - if (gNoteSubsEu[gMaxSimultaneousNotes * updateIndex + phi_s1].enabled) { - sp84[phi_s2++] = phi_s1; + for (i = 0; i < gMaxSimultaneousNotes; i++) { + temp = updateIndex; + if (gNoteSubsEu[gMaxSimultaneousNotes * temp + i].enabled) { + noteIndices[notePos++] = i; } } } else { - phi_s2 = 0; - for (phi_s3 = 0; phi_s3 < gNumSynthesisReverbs; phi_s3++) { - for (phi_s1_2 = 0; phi_s1_2 < gMaxSimultaneousNotes; phi_s1_2++) { - temp_v0 = &gNoteSubsEu[gMaxSimultaneousNotes * updateIndex + phi_s1_2]; - if (temp_v0->enabled) { - if (phi_s3 == temp_v0->unk1b567) { - sp84[phi_s2++] = phi_s1_2; - } + for (j = 0; j < gNumSynthesisReverbs; j++) { + for (i = 0; i < gMaxSimultaneousNotes; i++) { + temp = updateIndex; + noteSubEu = &gNoteSubsEu[gMaxSimultaneousNotes * temp + i]; + if (noteSubEu->enabled && j == noteSubEu->reverbIndex) { + noteIndices[notePos++] = i; } } } - phi_v1_2 = gMaxSimultaneousNotes * updateIndex; - for (phi_s1_3 = 0; phi_s1_3 < gMaxSimultaneousNotes; phi_s1_3++) { - if (gNoteSubsEu[phi_v1_2].enabled) { - if (temp_v0->unk1b567 >= gNumSynthesisReverbs) { - sp84[phi_s2++] = phi_s1_3; - } + + for (i = 0; i < gMaxSimultaneousNotes; i++) { + temp = updateIndex; + noteSubEu = &gNoteSubsEu[gMaxSimultaneousNotes * temp + i]; + if (noteSubEu->enabled && noteSubEu->reverbIndex >= gNumSynthesisReverbs) { + noteIndices[notePos++] = i; } - phi_v1_2++; } } aClearBuffer(cmd++, DMEM_ADDR_LEFT_CH, DEFAULT_LEN_2CH); - phi_s1_4 = 0; - for (phi_s3_2 = 0; phi_s3_2 < gNumSynthesisReverbs; phi_s3_2++) { - sp60 = &gSynthesisReverbs[phi_s3_2]; - gUseReverb = sp60->useReverb; + i = 0; + for (j = 0; j < gNumSynthesisReverbs; j++) { + gUseReverb = gSynthesisReverbs[j].useReverb; if (gUseReverb != 0) { - cmd = synthesis_resample_and_mix_reverb(cmd, bufLen, phi_s3_2, (s16) updateIndex); + cmd = synthesis_resample_and_mix_reverb(cmd, bufLen, j, updateIndex); } - for (; phi_s1_4 < phi_s2; phi_s1_4++) { - temp_v1 = sp84[phi_s1_4]; - temp_lo = updateIndex * gMaxSimultaneousNotes; - if (phi_s3_2 == gNoteSubsEu[temp_v1 + temp_lo].unk1b567) { - cmd = synthesis_process_note(&gNotes[temp_v1], &gNoteSubsEu[temp_v1 + temp_lo], &gNotes[temp_v1].synthesisState, aiBuf, bufLen, cmd); + for (; i < notePos; i++) { + temp = updateIndex; + temp *= gMaxSimultaneousNotes; + if (j == gNoteSubsEu[temp + noteIndices[i]].reverbIndex) { + cmd = synthesis_process_note(&gNotes[noteIndices[i]], + &gNoteSubsEu[temp + noteIndices[i]], + &gNotes[noteIndices[i]].synthesisState, + aiBuf, bufLen, cmd); + continue; } else { break; } } - if (sp60->useReverb != 0) { - cmd = func_eu_802e00d8(cmd, phi_s3_2, (s16) updateIndex); + if (gSynthesisReverbs[j].useReverb != 0) { + cmd = synthesis_save_reverb_samples(cmd, j, updateIndex); } } - phi_s0_2 = &sp84[phi_s1_4]; - for (; phi_s1_4 < phi_s2; phi_s1_4++) { - temp_v1_2 = *phi_s0_2; - temp_lo_2 = updateIndex * gMaxSimultaneousNotes; - temp_t5 = &gNoteSubsEu[temp_v1_2 + temp_lo_2]; - if (IS_BANK_LOAD_COMPLETE(temp_t5->bankId) == TRUE) { - cmd = synthesis_process_note(&gNotes[temp_v1_2], &gNoteSubsEu[temp_v1_2 + temp_lo_2], &gNotes[temp_v1_2].synthesisState, aiBuf, bufLen, cmd); + for (; i < notePos; i++) { + temp = updateIndex; + temp *= gMaxSimultaneousNotes; + if (IS_BANK_LOAD_COMPLETE(gNoteSubsEu[temp + noteIndices[i]].bankId) == TRUE) { + cmd = synthesis_process_note(&gNotes[noteIndices[i]], + &gNoteSubsEu[temp + noteIndices[i]], + &gNotes[noteIndices[i]].synthesisState, + aiBuf, bufLen, cmd); } else { - gAudioErrorFlags = (temp_t5->bankId + (phi_s1_4 << 8)) + 0x10000000; + gAudioErrorFlags = (gNoteSubsEu[temp + noteIndices[i]].bankId + (i << 8)) + 0x10000000; } - phi_s0_2++; } - bufLen2 = bufLen * 2; - aSetBuffer(cmd++, 0, 0, DMEM_ADDR_TEMP, bufLen2); + + temp = bufLen * 2; + aSetBuffer(cmd++, 0, 0, DMEM_ADDR_TEMP, temp); aInterleave(cmd++, DMEM_ADDR_LEFT_CH, DMEM_ADDR_RIGHT_CH); - aSetBuffer(cmd++, 0, 0, DMEM_ADDR_TEMP, bufLen2 * 2); + aSetBuffer(cmd++, 0, 0, DMEM_ADDR_TEMP, temp * 2); aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(aiBuf)); return cmd; } -#endif #else u64 *synthesis_do_one_audio_update(u16 *aiBuf, s32 bufLen, u64 *cmd, u32 updateIndex) { UNUSED s32 pad1[1]; @@ -738,8 +696,8 @@ u64 *synthesis_process_notes(u16 *aiBuf, s32 bufLen, u64 *cmd) { if (noteSubEu->isSyntheticWave) { noteSamplesDmemAddrBeforeResampling = DMEM_ADDR_UNCOMPRESSED_NOTE + synthesisState->samplePosInt * 2; - synthesisState->samplePosInt += (samplesLenFixedPoint >> 10); - cmd = load_wave_samples(cmd, noteSubEu, synthesisState, samplesLenFixedPoint >> 10); + synthesisState->samplePosInt += (samplesLenFixedPoint >> 0x10); + cmd = load_wave_samples(cmd, noteSubEu, synthesisState, samplesLenFixedPoint >> 0x10); } #else if (note->sound == NULL) { @@ -798,11 +756,15 @@ u64 *synthesis_process_notes(u16 *aiBuf, s32 bufLen, u64 *cmd) { u32 nEntries; // v1 curLoadedBook = audioBookSample->book->book; nEntries = audioBookSample->book->order * audioBookSample->book->npredictors; +#ifdef VERSION_EU + aLoadADPCM(cmd++, nEntries * 16, VIRTUAL_TO_PHYSICAL2(curLoadedBook + noteSubEu->bookOffset)); +#else aLoadADPCM(cmd++, nEntries * 16, VIRTUAL_TO_PHYSICAL2(curLoadedBook)); +#endif } #ifdef VERSION_EU - if (noteSubEu->unk1b234) { + if (noteSubEu->bookOffset) { curLoadedBook = (s16 *) &euUnknownData_80301950; // what's this? never read } #endif @@ -952,8 +914,8 @@ u64 *synthesis_process_notes(u16 *aiBuf, s32 bufLen, u64 *cmd) { (samplesLenAdjusted - nAdpcmSamplesProcessed) * 2); #ifdef VERSION_EU noteSubEu->finished = 1; - noteSubEu->finished = 1; - noteSubEu->enabled = 0; + note->noteSubEu.finished = 1; + note->noteSubEu.enabled = 0; #else note->samplePosInt = 0; note->finished = 1; @@ -1049,6 +1011,9 @@ u64 *synthesis_process_notes(u16 *aiBuf, s32 bufLen, u64 *cmd) { flags = A_INIT; noteSubEu->needsInit = FALSE; } + + cmd = final_resample(cmd, synthesisState, bufLen * 2, resamplingRateFixedPoint, + noteSamplesDmemAddrBeforeResampling, flags); #else if (note->needsInit == TRUE) { flags = A_INIT; @@ -1075,8 +1040,6 @@ u64 *synthesis_process_notes(u16 *aiBuf, s32 bufLen, u64 *cmd) { } #ifdef VERSION_EU - cmd = final_resample(cmd, synthesisState, bufLen * 2, resamplingRateFixedPoint, - noteSamplesDmemAddrBeforeResampling, flags); cmd = process_envelope(cmd, noteSubEu, synthesisState, bufLen, 0, s0); #else cmd = process_envelope(cmd, note, bufLen, 0, s0, flags); @@ -1105,7 +1068,7 @@ u64 *synthesis_process_notes(u16 *aiBuf, s32 bufLen, u64 *cmd) { return cmd; } -#elif defined(VERSION_JP) +#elif defined(VERSION_JP) || defined(VERSION_SH) // todo: extract this nonmatching if applicable. GLOBAL_ASM("asm/non_matchings/synthesis_process_notes_jp.s") #elif defined(VERSION_US) GLOBAL_ASM("asm/non_matchings/synthesis_process_notes_us.s") @@ -1335,41 +1298,44 @@ u64 *process_envelope(u64 *cmd, struct NoteSubEu *note, struct NoteSynthesisStat return cmd; } -#if defined(VERSION_EU) && !defined(NON_MATCHING) -GLOBAL_ASM("asm/non_matchings/eu/audio/note_apply_headset_pan_effects.s") -#else #ifdef VERSION_EU u64 *note_apply_headset_pan_effects(u64 *cmd, struct NoteSubEu *noteSubEu, struct NoteSynthesisState *note, s32 bufLen, s32 flags, s32 leftRight) { #else u64 *note_apply_headset_pan_effects(u64 *cmd, struct Note *note, s32 bufLen, s32 flags, s32 leftRight) { #endif u16 dest; - u16 prevPanShift; - u16 panShift; u16 pitch; // t2 #ifndef VERSION_EU + u16 prevPanShift; + u16 panShift; UNUSED s32 padding[11]; +#else + u8 prevPanShift; + u8 panShift; + UNUSED u8 unkDebug; #endif switch (leftRight) { case 1: dest = DMEM_ADDR_LEFT_CH; - note->prevHeadsetPanLeft = 0; #ifndef VERSION_EU + note->prevHeadsetPanLeft = 0; panShift = note->headsetPanRight; #else panShift = noteSubEu->headsetPanRight; + note->prevHeadsetPanLeft = 0; #endif prevPanShift = note->prevHeadsetPanRight; note->prevHeadsetPanRight = panShift; break; case 2: dest = DMEM_ADDR_RIGHT_CH; - note->prevHeadsetPanRight = 0; #ifndef VERSION_EU + note->prevHeadsetPanRight = 0; panShift = note->headsetPanLeft; #else panShift = noteSubEu->headsetPanLeft; + note->prevHeadsetPanRight = 0; #endif prevPanShift = note->prevHeadsetPanLeft; @@ -1392,13 +1358,23 @@ u64 *note_apply_headset_pan_effects(u64 *cmd, struct Note *note, s32 bufLen, s32 aSetBuffer(cmd++, 0, 0, DMEM_ADDR_TEMP, 32); aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(note->synthesisBuffers->panResampleState)); +#ifdef VERSION_EU + pitch = (bufLen << 0xf) / (bufLen + panShift - prevPanShift + 8); + if (pitch) { + } +#else pitch = (bufLen << 0xf) / (panShift + bufLen - prevPanShift + 8); +#endif aSetBuffer(cmd++, 0, DMEM_ADDR_NOTE_PAN_TEMP + 8, DMEM_ADDR_TEMP, panShift + bufLen - prevPanShift); aResample(cmd++, 0, pitch, VIRTUAL_TO_PHYSICAL2(note->synthesisBuffers->panResampleState)); } else { pitch = (panShift == 0) ? (bufLen << 0xf) / (bufLen - prevPanShift - 4) : (bufLen << 0xf) / (bufLen + panShift - prevPanShift); +#if defined(VERSION_EU) && !defined(AVOID_UB) + if (unkDebug) { // UB + } +#endif aSetBuffer(cmd++, 0, DMEM_ADDR_NOTE_PAN_TEMP, DMEM_ADDR_TEMP, panShift + bufLen - prevPanShift); aResample(cmd++, 0, pitch, VIRTUAL_TO_PHYSICAL2(note->synthesisBuffers->panResampleState)); @@ -1430,7 +1406,6 @@ u64 *note_apply_headset_pan_effects(u64 *cmd, struct Note *note, s32 bufLen, s32 return cmd; } -#endif #if !defined(VERSION_EU) // Moved to playback.c in EU diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index d8b5ac2..3e96322 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -92,7 +92,7 @@ static void Unknown80383E44(void) // ? } static s32 beh_cmd_hide(void) { - obj_hide(); + cur_obj_hide(); gBehCommand++; return BEH_CONTINUE; } @@ -122,7 +122,7 @@ static s32 beh_cmd_spawn_child(void) { struct Object *child = spawn_object_at_origin(gCurrentObject, 0, model, behavior); - copy_object_pos_and_angle(child, gCurrentObject); + obj_copy_pos_and_angle(child, gCurrentObject); gBehCommand += 3; return BEH_CONTINUE; @@ -134,7 +134,7 @@ static s32 beh_cmd_spawn_obj(void) { struct Object *object = spawn_object_at_origin(gCurrentObject, 0, model, behavior); - copy_object_pos_and_angle(object, gCurrentObject); + obj_copy_pos_and_angle(object, gCurrentObject); gCurrentObject->prevObj = object; @@ -149,7 +149,7 @@ static s32 beh_cmd_spawn_child_with_param(void) { struct Object *child = spawn_object_at_origin(gCurrentObject, 0, model, behavior); - copy_object_pos_and_angle(child, gCurrentObject); + obj_copy_pos_and_angle(child, gCurrentObject); child->oBehParams2ndByte = behParam; @@ -562,13 +562,13 @@ static s32 Behavior24(void) { } static s32 beh_cmd_begin(void) { - if (obj_has_behavior(bhvHauntedChair)) { + if (cur_obj_has_behavior(bhvHauntedChair)) { bhv_init_room(); } - if (obj_has_behavior(bhvMadPiano)) { + if (cur_obj_has_behavior(bhvMadPiano)) { bhv_init_room(); } - if (obj_has_behavior(bhvMessagePanel)) { + if (cur_obj_has_behavior(bhvMessagePanel)) { gCurrentObject->oCollisionDistance = 150.0f; } gBehCommand++; @@ -622,7 +622,7 @@ static s32 beh_cmd_scale(void) { UNUSED u8 sp1f = (u8)((gBehCommand[0] >> 16) & 0xFF); s16 sp1c = gBehCommand[0] & 0xFFFF; - obj_scale((f32) sp1c / 100.0f); + cur_obj_scale((f32) sp1c / 100.0f); gBehCommand++; return BEH_CONTINUE; @@ -658,9 +658,10 @@ static s32 beh_cmd_bit_clear_int32(void) { return BEH_CONTINUE; } -static s32 beh_cmd_spawn_water_splash(void) { - struct WaterSplashParams *arg0 = (struct WaterSplashParams *) gBehCommand[1]; - spawn_water_splash(gCurrentObject, arg0); +static s32 beh_cmd_spawn_water_droplet(void) { + struct WaterDropletParams *dropletParams = (struct WaterDropletParams *) gBehCommand[1]; + spawn_water_droplet(gCurrentObject, dropletParams); + gBehCommand += 2; return BEH_CONTINUE; } @@ -738,7 +739,7 @@ static BehCommandProc BehaviorJumpTable[] = { beh_cmd_tex_anim_rate, beh_cmd_disable_rendering, Behavior36, - beh_cmd_spawn_water_splash, + beh_cmd_spawn_water_droplet, }; void cur_object_exec_behavior(void) { @@ -757,7 +758,7 @@ void cur_object_exec_behavior(void) { } if (flagsLo & OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO) { - gCurrentObject->oAngleToMario = angle_to_object(gCurrentObject, gMarioObject); + gCurrentObject->oAngleToMario = obj_angle_to_object(gCurrentObject, gMarioObject); } if (gCurrentObject->oAction != gCurrentObject->oPrevAction) { @@ -786,7 +787,7 @@ void cur_object_exec_behavior(void) { flagsLo = (s16) gCurrentObject->oFlags; if (flagsLo & OBJ_FLAG_0010) { - obj_set_facing_to_move_angles(gCurrentObject); + obj_set_face_angle_to_move_angle(gCurrentObject); } if (flagsLo & OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW) { @@ -794,19 +795,19 @@ void cur_object_exec_behavior(void) { } if (flagsLo & OBJ_FLAG_MOVE_XZ_USING_FVEL) { - obj_move_xz_using_fvel_and_yaw(); + cur_obj_move_xz_using_fvel_and_yaw(); } if (flagsLo & OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL) { - obj_move_y_with_terminal_vel(); + cur_obj_move_y_with_terminal_vel(); } if (flagsLo & OBJ_FLAG_TRANSFORM_RELATIVE_TO_PARENT) { - build_object_transform_relative_to_parent(gCurrentObject); + obj_build_transform_relative_to_parent(gCurrentObject); } if (flagsLo & OBJ_FLAG_0800) { - func_802A2270(gCurrentObject); + obj_set_throw_matrix_from_transform(gCurrentObject); } if (flagsLo & OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE) { @@ -814,7 +815,7 @@ void cur_object_exec_behavior(void) { } if (gCurrentObject->oRoom != -1) { - obj_enable_rendering_if_mario_in_room(); + cur_obj_enable_rendering_if_mario_in_room(); } else if ((flagsLo & OBJ_FLAG_COMPUTE_DIST_TO_MARIO) && gCurrentObject->collisionData == NULL) { if (!(flagsLo & OBJ_FLAG_ACTIVE_FROM_AFAR)) { if (distanceFromMario > gCurrentObject->oDrawingDistance) { diff --git a/src/engine/level_script.c b/src/engine/level_script.c index 328b672..7a28953 100644 --- a/src/engine/level_script.c +++ b/src/engine/level_script.c @@ -295,7 +295,7 @@ static void level_cmd_load_mario_head(void) { } static void level_cmd_load_mio0_texture(void) { - func_80278304(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8)); + load_segment_decompress_heap(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8)); sCurrentCmd = CMD_NEXT; } @@ -310,7 +310,7 @@ static void level_cmd_init_level(void) { static void level_cmd_clear_level(void) { clear_objects(); - func_8027A7C4(); + clear_area_graph_nodes(); clear_areas(); main_pool_pop_state(); @@ -630,8 +630,8 @@ static void level_cmd_load_area(void) { sCurrentCmd = CMD_NEXT; } -static void level_cmd_2A(void) { - func_8027A998(); +static void level_cmd_unload_area(void) { + unload_area(); sCurrentCmd = CMD_NEXT; } @@ -649,7 +649,7 @@ static void level_cmd_set_mario_start_pos(void) { } static void level_cmd_2C(void) { - func_8027AA88(); + unload_mario_area(); sCurrentCmd = CMD_NEXT; } @@ -692,7 +692,7 @@ static void level_cmd_set_menu_music(void) { } static void level_cmd_38(void) { - func_802491FC(CMD_GET(s16, 2)); + fadeout_music(CMD_GET(s16, 2)); sCurrentCmd = CMD_NEXT; } @@ -781,7 +781,7 @@ static void (*LevelScriptJumpTable[])(void) = { /*27*/ level_cmd_create_painting_warp_node, /*28*/ level_cmd_create_instant_warp, /*29*/ level_cmd_load_area, - /*2A*/ level_cmd_2A, + /*2A*/ level_cmd_unload_area, /*2B*/ level_cmd_set_mario_start_pos, /*2C*/ level_cmd_2C, /*2D*/ level_cmd_2D, diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 32a6a24..704e752 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -623,10 +623,10 @@ void transform_object_vertices(s16 **data, s16 *vertexData) { if (gCurrentObject->header.gfx.throwMatrix == NULL) { gCurrentObject->header.gfx.throwMatrix = objectTransform; - build_object_transform_from_pos_and_angle(gCurrentObject, O_POS_INDEX, O_FACE_ANGLE_INDEX); + obj_build_transform_from_pos_and_angle(gCurrentObject, O_POS_INDEX, O_FACE_ANGLE_INDEX); } - apply_object_scale_to_matrix(gCurrentObject, m, *objectTransform); + obj_apply_scale_to_matrix(gCurrentObject, m, *objectTransform); // Go through all vertices, rotating and translating them to transform the object. while (numVertices--) { diff --git a/src/game/area.c b/src/game/area.c index 126bca4..8253a33 100644 --- a/src/game/area.c +++ b/src/game/area.c @@ -76,7 +76,7 @@ const char *gNoControllerMsg[] = { }; #endif -void func_8027A220(Vp *a, Vp *b, u8 c, u8 d, u8 e) { +void override_viewport_and_clip(Vp *a, Vp *b, u8 c, u8 d, u8 e) { u16 sp6 = ((c >> 3) << 11) | ((d >> 3) << 6) | ((e >> 3) << 1) | 1; gFBSetColor = (sp6 << 16) | sp6; @@ -138,13 +138,13 @@ struct ObjectWarpNode *area_get_warp_node(u8 id) { return node; } -struct ObjectWarpNode *func_8027A478(struct Object *o) { +struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *o) { u8 sp1F = (o->oBehParams & 0x00FF0000) >> 16; return area_get_warp_node(sp1F); } -void func_8027A4C4(void) { +void load_obj_warp_nodes(void) { struct ObjectWarpNode *sp24; struct Object *sp20 = (struct Object *) gObjParentGraphNode.children; @@ -152,7 +152,7 @@ void func_8027A4C4(void) { struct Object *sp1C = sp20; if (sp1C->activeFlags && get_mario_spawn_type(sp1C) != 0) { - sp24 = func_8027A478(sp1C); + sp24 = area_get_warp_node_from_params(sp1C); if (sp24 != NULL) { sp24->object = sp1C; } @@ -192,7 +192,7 @@ void clear_areas(void) { } } -void func_8027A7C4(void) { +void clear_area_graph_nodes(void) { s32 i; if (gCurrentArea != NULL) { @@ -223,12 +223,12 @@ void load_area(s32 index) { spawn_objects_from_info(0, gCurrentArea->objectSpawnInfos); } - func_8027A4C4(); + load_obj_warp_nodes(); geo_call_global_function_nodes(gCurrentArea->unk04, GEO_CONTEXT_AREA_LOAD); } } -void func_8027A998(void) { +void unload_area(void) { if (gCurrentArea != NULL) { unload_objects_from_area(0, gCurrentArea->index); geo_call_global_function_nodes(gCurrentArea->unk04, GEO_CONTEXT_AREA_UNLOAD); @@ -249,13 +249,13 @@ void load_mario_area(void) { } } -void func_8027AA88(void) { +void unload_mario_area(void) { if (gCurrentArea != NULL && (gCurrentArea->flags & 0x01)) { unload_objects_from_area(0, gMarioSpawnInfo->activeAreaIndex); gCurrentArea->flags &= ~0x01; if (gCurrentArea->flags == 0) { - func_8027A998(); + unload_area(); } } } @@ -264,7 +264,7 @@ void change_area(s32 index) { s32 areaFlags = gCurrentArea->flags; if (gCurrAreaIndex != index) { - func_8027A998(); + unload_area(); load_area(index); gCurrentArea->flags = areaFlags; diff --git a/src/game/area.h b/src/game/area.h index 67c02d9..2452d86 100644 --- a/src/game/area.h +++ b/src/game/area.h @@ -134,16 +134,16 @@ extern s16 gCurrSaveFileNum; extern s16 gCurrLevelNum; -void func_8027A220(Vp *a, Vp *b, u8 c, u8 d, u8 e); +void override_viewport_and_clip(Vp *a, Vp *b, u8 c, u8 d, u8 e); void print_intro_text(void); u32 get_mario_spawn_type(struct Object *o); struct ObjectWarpNode *area_get_warp_node(u8 id); void clear_areas(void); -void func_8027A7C4(void); +void clear_area_graph_nodes(void); void load_area(s32 index); -void func_8027A998(void); +void unload_area(void); void load_mario_area(void); -void func_8027AA88(void); +void unload_mario_area(void); void change_area(s32 index); void area_update_objects(void); void play_transition(s16 transType, s16 time, u8 red, u8 green, u8 blue); diff --git a/src/game/behavior_actions.c b/src/game/behavior_actions.c index 028530e..73c96f4 100644 --- a/src/game/behavior_actions.c +++ b/src/game/behavior_actions.c @@ -74,13 +74,6 @@ struct Struct802C0DF0 { const BehaviorScript *behavior; }; -struct Struct8032FE4C { - s32 unk0; - s32 unk1; - f32 unk2; - f32 unk3; -}; - struct Struct8032F754 { s32 unk0; Vec3f unk1; @@ -93,7 +86,7 @@ struct Struct8032FCE8 { void *unk2; }; -extern void BehClimbDetectLoop(); +extern void bhv_pole_base_loop(); extern s16 gDebugInfo[][8]; extern s8 gDoorAdjacentRooms[][2]; extern u8 inside_castle_seg7_collision_ddd_warp_2[]; @@ -107,7 +100,7 @@ extern struct Animation *blue_fish_seg3_anims_0301C2B0[]; extern struct Animation *cyan_fish_seg6_anims_0600E264[]; extern struct Animation *blue_fish_seg3_anims_0301C2B0[]; -void func_802A8D18(f32, f32, s32); +void common_anchor_mario_behavior(f32, f32, s32); s32 mario_moving_fast_enough_to_make_piranha_plant_bite(void); void obj_set_secondary_camera_focus(void); @@ -141,7 +134,7 @@ s16 D_8032F0CC[] = { 6047, 5664, 5292, 4934, 4587, 4254, 3933, 3624, 3329, 3046, struct SpawnParticlesInfo D_8032F270 = { 2, 20, MODEL_MIST, 0, 40, 5, 30, 20, 252, 30, 330.0f, 10.0f }; // generate_wind_puffs/dust (something like that) -void func_802AA618(s32 sp18, s32 sp1C, f32 sp20) { +void spawn_mist_particles_variable(s32 sp18, s32 sp1C, f32 sp20) { D_8032F270.sizeBase = sp20; D_8032F270.sizeRange = sp20 / 20.0; D_8032F270.offsetY = sp1C; @@ -152,7 +145,7 @@ void func_802AA618(s32 sp18, s32 sp1C, f32 sp20) { } else { D_8032F270.count = 4; } - obj_spawn_particles(&D_8032F270); + cur_obj_spawn_particles(&D_8032F270); } #include "behaviors/sparkle_spawn_star.inc.c" @@ -187,16 +180,16 @@ void func_802AA618(s32 sp18, s32 sp1C, f32 sp20) { #include "behaviors/breakable_box.inc.c" // not sure what this is doing here. not in a behavior file. -Gfx *Geo18_802B1BB0(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { +Gfx *geo_move_mario_part_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { Mat4 sp20; struct Object *sp1C; if (run == TRUE) { sp1C = (struct Object *) gCurGraphNodeObject; if (sp1C == gMarioObject && sp1C->prevObj != NULL) { - func_8029D704(sp20, mtx, gCurGraphNodeCamera->matrixPtr); - func_8029D558(sp20, sp1C->prevObj); - func_8029EA0C(sp1C->prevObj); + create_transformation_from_matrices(sp20, mtx, gCurGraphNodeCamera->matrixPtr); + obj_update_pos_from_parent_transformation(sp20, sp1C->prevObj); + obj_set_gfx_pos_from_pos(sp1C->prevObj); } } return NULL; @@ -211,7 +204,7 @@ Gfx *Geo18_802B1BB0(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { // not in behavior file // n is the number of objects to spawn, r if the rate of change of phase (frequency?) -void func_802B2328(s32 n, s32 a1, s32 a2, s32 r) { +void spawn_sparkle_particles(s32 n, s32 a1, s32 a2, s32 r) { s32 i; s16 separation = 0x10000 / n; // Evenly spread around a circle for (i = 0; i < n; i++) { @@ -232,6 +225,15 @@ void func_802B2328(s32 n, s32 a1, s32 a2, s32 r) { #include "behaviors/bullet_bill.inc.c" #include "behaviors/bowser.inc.c" #include "behaviors/blue_fish.inc.c" + +// Not in behavior file, duplicate of vec3f_copy except without bad return. +// Used in a few behavior files. +void vec3f_copy_2(Vec3f dest, Vec3f src) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; +} + #include "behaviors/checkerboard_platform.inc.c" #include "behaviors/ddd_warp.inc.c" #include "behaviors/water_pillar.inc.c" @@ -252,6 +254,18 @@ void func_802B2328(s32 n, s32 a1, s32 a2, s32 r) { #include "behaviors/tox_box.inc.c" #include "behaviors/piranha_plant.inc.c" #include "behaviors/bowser_puzzle_piece.inc.c" + +s32 set_obj_anim_with_accel_and_sound(s16 a0, s16 a1, s32 a2) { + f32 sp1C; + if ((sp1C = o->header.gfx.unk38.animAccel / (f32) 0x10000) == 0) + sp1C = 1.0f; + if (cur_obj_check_anim_frame_in_range(a0, sp1C) || cur_obj_check_anim_frame_in_range(a1, sp1C)) { + cur_obj_play_sound_2(a2); + return 1; + } + return 0; +} + #include "behaviors/tuxie.inc.c" #include "behaviors/fish.inc.c" #include "behaviors/express_elevator.inc.c" @@ -280,7 +294,7 @@ void func_802B2328(s32 n, s32 a1, s32 a2, s32 r) { #include "behaviors/sparkle_spawn.inc.c" #include "behaviors/scuttlebug.inc.c" // :scuttleeyes: #include "behaviors/whomp.inc.c" -#include "behaviors/water_splash.inc.c" -#include "behaviors/wind_particle.inc.c" -#include "behaviors/snowman_wind.inc.c" -#include "behaviors/walking_penguin.inc.c" +#include "behaviors/water_splashes_and_waves.inc.c" +#include "behaviors/strong_wind_particle.inc.c" +#include "behaviors/sl_snowman_wind.inc.c" +#include "behaviors/sl_walking_penguin.inc.c" diff --git a/src/game/behavior_actions.h b/src/game/behavior_actions.h index 5e6989c..7607d78 100644 --- a/src/game/behavior_actions.h +++ b/src/game/behavior_actions.h @@ -1,20 +1,21 @@ #ifndef _BEHAVIOR_ACTIONS_H #define _BEHAVIOR_ACTIONS_H -extern void func_802AA618(s32,s32,f32); +extern void spawn_mist_particles_variable(s32,s32,f32); extern void bhv_spawn_star_no_level_exit(u32); extern void bhv_star_door_loop_2(); extern void spawn_triangle_break_particles(s16,s16,f32,s16); -extern void func_802ADA94(void); -extern void func_802ADBBC(u32); -extern void func_802ADC20(s16,s16); -extern s32 func_802B0C54(f32,f32); -extern s32 func_802B2894(f32*,f32*,f32,f32); -void func_802B8F7C(Vec3f dest,Vec3f src); -extern void func_802BCFC4(f32,f32,s16,s16); + +extern void spawn_mist_from_global(void); +extern void clear_particle_flags(u32); +extern void spawn_wind_particles(s16,s16); +extern s32 check_if_moving_over_floor(f32,f32); +extern s32 arc_to_goal_pos(f32*,f32*,f32,f32); +void vec3f_copy_2(Vec3f dest,Vec3f src); +extern void tox_box_move(f32,f32,s16,s16); extern void play_penguin_walking_sound(s32); -extern s32 func_802C5A64(s32*); -extern void func_802C76E0(s32, f32, f32, f32, f32); +extern s32 update_angle_from_move_flags(s32*); +extern void cur_obj_spawn_strong_wind_particles(s32, f32, f32, f32, f32); void bhv_cap_switch_loop(void); void bhv_tiny_star_particles_init(void); @@ -29,7 +30,7 @@ void bhv_mr_i_particle_loop(void); void bhv_piranha_particle_loop(void); void bhv_giant_pole_loop(void); void bhv_pole_init(void); -void BehClimbDetectLoop(void); +void bhv_pole_base_loop(void); void bhv_thi_huge_island_top_loop(void); void bhv_thi_tiny_island_top_loop(void); void bhv_king_bobomb_loop(void); @@ -58,7 +59,7 @@ void bhv_kickable_board_loop(void); void bhv_tower_door_loop(void); void bhv_wf_rotating_wooden_platform_loop(void); void bhv_koopa_shell_underwater_loop(void); -void BehFadingWarpLoop(void); +void bhv_fading_warp_loop(void); void bhv_warp_loop(void); void bhv_white_puff_exploding_loop(void); void bhv_spawned_star_init(void); @@ -85,7 +86,7 @@ void bhv_water_mist_loop(void); void bhv_water_mist_spawn_loop(void); void bhv_water_mist_2_loop(void); void bhv_pound_white_puffs_init(void); -void bhv_unused_0e40_init(void); +void bhv_ground_sand_init(void); void bhv_ground_snow_init(void); void bhv_wind_loop(void); void bhv_unused_particle_spawn_loop(void); @@ -161,7 +162,7 @@ void bhv_flame_moving_forward_growing_loop(void); void bhv_flame_bowser_init(void); void bhv_flame_bowser_loop(void); void bhv_flame_large_burning_out_init(void); -void bhv_blue_fish_loop(void); +void bhv_blue_fish_movement_loop(void); void bhv_tank_fish_group_loop(void); void bhv_checkerboard_elevator_group_init(void); void bhv_checkerboard_platform_init(void); @@ -194,13 +195,13 @@ void bhv_lll_bowser_puzzle_piece_loop(void); void bhv_lll_bowser_puzzle_loop(void); void bhv_tuxies_mother_loop(void); void bhv_small_penguin_loop(void); +void bhv_large_fish_group_loop(void); void bhv_fish_loop(void); -void bhv_fish_group_2_loop(void); void bhv_wdw_express_elevator_loop(void); -void bhv_bird_chirp_chirp_loop(void); -void bhv_cheep_cheep_loop(void); +void bhv_bub_spawner_loop(void); +void bhv_bub_loop(void); void bhv_exclamation_box_loop(void); -void bhv_rotatin_exclamation_box_loop(void); +void bhv_rotating_exclamation_box_loop(void); void bhv_sound_spawner_init(void); void bhv_bowsers_sub_loop(void); void bhv_sushi_shark_loop(void); @@ -241,16 +242,16 @@ void bhv_sparkle_spawn_loop(void); void bhv_scuttlebug_loop(void); void bhv_scuttlebug_spawn_loop(void); void bhv_whomp_loop(void); -void bhv_water_splash_loop(void); -void bhv_water_drops_loop(void); -void bhv_water_surface_white_wave_init(void); -void bhv_object_bubble_ripples_init(void); -void bhv_surface_waves_loop(void); -void bhv_surface_wave_shrinking_init(void); -void bhv_wave_trail_loop(void); -void bhv_white_wind_particle_loop(void); -void bhv_snowman_wind_blowing_loop(void); -void bhv_walking_penguin_loop(void); +void bhv_water_splash_spawn_droplets(void); +void bhv_water_droplet_loop(void); +void bhv_water_droplet_splash_init(void); +void bhv_bubble_splash_init(void); +void bhv_idle_water_wave_loop(void); +void bhv_shallow_water_splash_init(void); +void bhv_wave_trail_shrink(void); +void bhv_strong_wind_particle_loop(void); +void bhv_sl_snowman_wind_loop(void); +void bhv_sl_walking_penguin_loop(void); void bhv_menu_button_init(void); void bhv_menu_button_loop(void); void bhv_menu_button_manager_init(void); @@ -544,32 +545,32 @@ void bhv_intro_peach_loop(void); void bhv_end_birds_1_loop(void); void bhv_end_birds_2_loop(void); void bhv_intro_scene_loop(void); -void BehDustSmokeLoop(void); -void BehYoshiLoop(void); -void bhvLllVolcanoFallingTrap_loop(void); +void bhv_dust_smoke_loop(void); +void bhv_yoshi_loop(void); +void bhv_volcano_trap_loop(void); -extern Gfx *Geo18_802B1BB0(s32 run, UNUSED struct GraphNode *node, Mat4 mtx); +extern Gfx *geo_move_mario_part_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx); // Bowser -extern Gfx *Geo18_802B7D44(s32 a0, struct GraphNode *node, UNUSED s32 a2); -extern Gfx *Geo18_802B798C(s32 run, UNUSED struct GraphNode *node, Mat4 mtx); +extern Gfx *geo_bits_bowser_coloring(s32 a0, struct GraphNode *node, UNUSED s32 a2); +extern Gfx *geo_update_body_rot_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx); extern Gfx *geo_switch_bowser_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx); // Tuxie extern Gfx *geo_switch_tuxie_mother_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx); // Cap switch -extern Gfx *Geo18_802A719C(s32 run, UNUSED struct GraphNode *node, Mat4 mtx); +extern Gfx *geo_update_held_mario_pos(s32 run, UNUSED struct GraphNode *node, Mat4 mtx); // Snufit -extern Gfx *Geo18_8030D93C(s32 arg0, struct GraphNode *node, UNUSED void *arg2); -extern Gfx *Geo18_8030D9AC(s32 arg0, struct GraphNode *node, UNUSED void *arg2); +extern Gfx *geo_snufit_move_mask(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c); +extern Gfx *geo_snufit_scale_body(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c); // Bowser key cutscene -extern Gfx *Geo18_802BA2B0(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]); +extern Gfx *geo_scale_bowser_key(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]); // Water splash -extern struct WaterSplashParams D_8032FDD0; -extern struct WaterSplashParams D_8032FE18; +extern struct WaterDropletParams sShallowWaterSplashDropletParams; +extern struct WaterDropletParams sShallowWaterWaveDropletParams; #endif // _BEHAVIOR_ACTIONS_H diff --git a/src/game/behaviors/amp.inc.c b/src/game/behaviors/amp.inc.c index 2faa47a..a8ea0e0 100644 --- a/src/game/behaviors/amp.inc.c +++ b/src/game/behaviors/amp.inc.c @@ -31,7 +31,7 @@ void bhv_homing_amp_init(void) { // Homing amps start at 1/10th their normal size. // They grow when they "appear" to Mario. - obj_scale(0.1f); + cur_obj_scale(0.1f); // Hide the amp (until Mario gets near). o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE; @@ -44,7 +44,7 @@ static void check_amp_attack(void) { // Strange placement for this call. The hitbox is never cleared. // For perspective, this code is run every frame of bhv_circling_amp_loop // and every frame of a homing amp's HOMING_AMP_ACT_CHASE action. - set_object_hitbox(o, &sAmpHitbox); + obj_set_hitbox(o, &sAmpHitbox); if (o->oInteractStatus & INT_STATUS_INTERACTED) { // Unnecessary if statement, maybe caused by a macro for @@ -77,11 +77,11 @@ static void homing_amp_appear_loop(void) { o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, targetYaw, 0x1000); // For 30 frames, make the amp "appear" by increasing its size by 0.03 each frame, - // except for the first frame (when oTimer == 0) because the expression in obj_scale + // except for the first frame (when oTimer == 0) because the expression in cur_obj_scale // evaluates to 0.1, which is the same as it was before. After 30 frames, it ends at // a scale factor of 0.97. The amp remains at 97% of its real height for 60 more frames. if (o->oTimer < 30) { - obj_scale(0.1 + 0.9 * (f32)(o->oTimer / 30.0f)); + cur_obj_scale(0.1 + 0.9 * (f32)(o->oTimer / 30.0f)); } else { o->oAnimState = 1; } @@ -89,7 +89,7 @@ static void homing_amp_appear_loop(void) { // Once the timer becomes greater than 90, i.e. 91 frames have passed, // reset the amp's size and start chasing Mario. if (o->oTimer >= 91) { - obj_scale(1.0f); + cur_obj_scale(1.0f); o->oAction = HOMING_AMP_ACT_CHASE; o->oAmpYPhase = 0; } @@ -181,7 +181,7 @@ static void amp_attack_cooldown_loop(void) { o->header.gfx.unk38.animFrame += 2; o->oForwardVel = 0; - obj_become_intangible(); + cur_obj_become_intangible(); if (o->oTimer >= 31) { o->oAnimState = 0; @@ -189,7 +189,7 @@ static void amp_attack_cooldown_loop(void) { if (o->oTimer >= 91) { o->oAnimState = 1; - obj_become_tangible(); + cur_obj_become_tangible(); o->oAction = HOMING_AMP_ACT_CHASE; } } @@ -213,7 +213,7 @@ void bhv_homing_amp_loop(void) { case HOMING_AMP_ACT_CHASE: homing_amp_chase_loop(); - PlaySound(SOUND_AIR_AMP_BUZZ); + cur_obj_play_sound_1(SOUND_AIR_AMP_BUZZ); break; case HOMING_AMP_ACT_GIVE_UP: @@ -292,7 +292,7 @@ static void fixed_circling_amp_idle_loop(void) { // Oscillate o->oAmpYPhase++; - // Where there is a PlaySound call in the main circling amp update function, + // Where there is a cur_obj_play_sound_1 call in the main circling amp update function, // there is nothing here. Fixed amps are the only amps that never play // the "amp buzzing" sound. } @@ -318,7 +318,7 @@ static void circling_amp_idle_loop(void) { // Oscillate o->oAmpYPhase++; - PlaySound(SOUND_AIR_AMP_BUZZ); + cur_obj_play_sound_1(SOUND_AIR_AMP_BUZZ); } /** diff --git a/src/game/behaviors/animated_floor_switch.inc.c b/src/game/behaviors/animated_floor_switch.inc.c index 82a72d6..1f3bc97 100644 --- a/src/game/behaviors/animated_floor_switch.inc.c +++ b/src/game/behaviors/animated_floor_switch.inc.c @@ -32,7 +32,7 @@ struct Struct80331A54 D_80331A54[][5] = { s16 D_80331ACC[] = { 250, 200, 200 }; void bhv_animates_on_floor_switch_press_init(void) { - o->parentObj = obj_nearest_object_with_behavior(bhvFloorSwitchAnimatesObject); + o->parentObj = cur_obj_nearest_object_with_behavior(bhvFloorSwitchAnimatesObject); } void bhv_animates_on_floor_switch_press_loop(void) { @@ -53,9 +53,9 @@ void bhv_animates_on_floor_switch_press_loop(void) { if (o->oFloorSwitchPressAnimationUnkF4 != 0) { if (o->oFloorSwitchPressAnimationUnkF4 < 60) { - PlaySound(SOUND_GENERAL2_SWITCH_TICK_SLOW); + cur_obj_play_sound_1(SOUND_GENERAL2_SWITCH_TICK_SLOW); } else { - PlaySound(SOUND_GENERAL2_SWITCH_TICK_FAST); + cur_obj_play_sound_1(SOUND_GENERAL2_SWITCH_TICK_FAST); } if (--o->oFloorSwitchPressAnimationUnkF4 == 0) { @@ -73,5 +73,5 @@ void bhv_animates_on_floor_switch_press_loop(void) { o->collisionData = segmented_to_virtual( D_80331A54[o->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].unk00); - obj_set_model(D_80331A54[o->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].unk04); + cur_obj_set_model(D_80331A54[o->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].unk04); } diff --git a/src/game/behaviors/bbh_haunted_bookshelf.inc.c b/src/game/behaviors/bbh_haunted_bookshelf.inc.c index a8ccdca..8a7eff1 100644 --- a/src/game/behaviors/bbh_haunted_bookshelf.inc.c +++ b/src/game/behaviors/bbh_haunted_bookshelf.inc.c @@ -32,11 +32,11 @@ void bhv_haunted_bookshelf_loop(void) { case HAUNTED_BOOKSHELF_ACT_RECEDE: // Move the bookshelf and play the sound o->oPosX += 5.0f; - PlaySound(SOUND_ENV_ELEVATOR4_2); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR4_2); // Delete the object after 102 frames if (o->oTimer > 101) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } break; diff --git a/src/game/behaviors/bbh_merry_go_round.inc.c b/src/game/behaviors/bbh_merry_go_round.inc.c index ab10aa0..827b2e6 100644 --- a/src/game/behaviors/bbh_merry_go_round.inc.c +++ b/src/game/behaviors/bbh_merry_go_round.inc.c @@ -33,10 +33,10 @@ static void handle_merry_go_round_music(void) { } // All floors in the merry-go-round's enclosure have surface type 0x1A. - // The obj_is_mario_on_platform check is redundant since the merry-go-round + // The cur_obj_is_mario_on_platform check is redundant since the merry-go-round // has surface type 0x1A, so Mario cannot be on the merry-go-round // without being on a floor with surface type 0x1A (SURFACE_MGR_MUSIC). - if (obj_is_mario_on_platform() || marioFloorType == SURFACE_MGR_MUSIC) { + if (cur_obj_is_mario_on_platform() || marioFloorType == SURFACE_MGR_MUSIC) { // If Mario is in the merry-go-round's enclosure, play only the merry-go-round music. play_secondary_music(SEQ_EVENT_MERRY_GO_ROUND, 0, 78, 50); gMarioOnMerryGoRound = TRUE; @@ -57,7 +57,7 @@ static void handle_merry_go_round_music(void) { func_80321080(300); // Switch to BBH music? FIXME: Audio needs labelling o->oMerryGoRoundMusicShouldPlay = FALSE; } else { - PlaySound(SOUND_ENV_MERRY_GO_ROUND_CREAKING); + cur_obj_play_sound_1(SOUND_ENV_MERRY_GO_ROUND_CREAKING); } } } diff --git a/src/game/behaviors/beta_boo_key.inc.c b/src/game/behaviors/beta_boo_key.inc.c index f418601..27a85de 100644 --- a/src/game/behaviors/beta_boo_key.inc.c +++ b/src/game/behaviors/beta_boo_key.inc.c @@ -25,7 +25,7 @@ void bhv_alpha_boo_key_loop(void) { o->oFaceAngleRoll += 0x200; o->oFaceAngleYaw += 0x200; - if (are_objects_collided(o, gMarioObject)) { + if (obj_check_if_collided_with_object(o, gMarioObject)) { // This line makes the object inside the key's parent boo drop. // Was this intended to make the boo die when the key is collected? // Boos don't read from oBooDeathStatus, they only set it to let the @@ -38,7 +38,7 @@ void bhv_alpha_boo_key_loop(void) { o->parentObj->oBooDeathStatus = BOO_DEATH_STATUS_DYING; // Delete the object and spawn sparkles - mark_object_for_deletion(o); + obj_mark_for_deletion(o); spawn_object(o, MODEL_SPARKLES, bhvGoldenCoinSparkles); } } @@ -51,8 +51,8 @@ void bhv_alpha_boo_key_loop(void) { */ static void beta_boo_key_dropped_loop(void) { // Apply standard physics to the key - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); // Slowly increase the Y offset to make the model aligned correctly. // This is spread out over 13 frames so that it's not noticable. @@ -82,9 +82,9 @@ static void beta_boo_key_dropped_loop(void) { // If the key hits the floor or 90 frames have elapsed since it was dropped, // become tangible and handle collision. if (o->oTimer > 90 || o->oMoveFlags & OBJ_MOVE_LANDED) { - obj_become_tangible(); + cur_obj_become_tangible(); - if (are_objects_collided(o, gMarioObject)) { + if (obj_check_if_collided_with_object(o, gMarioObject)) { // This interaction status is 0x01, the first interaction status flag. // It was only used for Hoot in the final game, but it seems it could've // done something else or held some special meaning in beta. @@ -97,7 +97,7 @@ static void beta_boo_key_dropped_loop(void) { o->parentObj->oInteractStatus = INT_STATUS_HOOT_GRABBED_BY_MARIO; // Delete the object and spawn sparkles - mark_object_for_deletion(o); + obj_mark_for_deletion(o); spawn_object(o, MODEL_SPARKLES, bhvGoldenCoinSparkles); } } @@ -113,7 +113,7 @@ static void beta_boo_key_drop(void) { // Update the key to be inside the boo struct Object *parent = o->parentObj; - copy_object_pos(o, parent); + obj_copy_pos(o, parent); // This if statement to only run this code on the first frame // is redundant, since it instantly sets the action to BETA_BOO_KEY_ACT_DROPPED @@ -147,7 +147,7 @@ static void beta_boo_key_drop(void) { static void beta_boo_key_inside_boo_loop(void) { // Update the key to be inside the boo at all times struct Object *parent = o->parentObj; - copy_object_pos(o, parent); + obj_copy_pos(o, parent); // Use a Y offset of 40 to make the key model aligned correctly. // (Why didn't they use oGraphYOffset?) @@ -170,5 +170,5 @@ static void (*sBetaBooKeyActions[])(void) = { beta_boo_key_inside_boo_loop, beta * Update function for bhvBetaBooKey. */ void bhv_beta_boo_key_loop(void) { - obj_call_action_function(sBetaBooKeyActions); + cur_obj_call_action_function(sBetaBooKeyActions); } diff --git a/src/game/behaviors/beta_bowser_anchor.inc.c b/src/game/behaviors/beta_bowser_anchor.inc.c index 0dd12a2..e12d204 100644 --- a/src/game/behaviors/beta_bowser_anchor.inc.c +++ b/src/game/behaviors/beta_bowser_anchor.inc.c @@ -14,10 +14,10 @@ void bhv_beta_bowser_anchor_loop(void) { // Set the object's position to be 30 units above Mario's feet, // and 300 units in front of him. - obj_set_pos_relative(gMarioObject, 0, 30.0f, 300.0f); + cur_obj_set_pos_relative(gMarioObject, 0, 30.0f, 300.0f); o->hitboxRadius = gDebugInfo[4][0] + 100; o->hitboxHeight = gDebugInfo[4][1] + 300; - attack_collided_non_mario_object(o); + obj_attack_collided_from_other_object(o); } diff --git a/src/game/behaviors/beta_chest.inc.c b/src/game/behaviors/beta_chest.inc.c index 51872fa..07c2daf 100644 --- a/src/game/behaviors/beta_chest.inc.c +++ b/src/game/behaviors/beta_chest.inc.c @@ -12,7 +12,7 @@ */ void bhv_beta_chest_bottom_init(void) { // Set the object's model - obj_set_model(MODEL_TREASURE_CHEST_BASE); + cur_obj_set_model(MODEL_TREASURE_CHEST_BASE); // ??? Pointless code? // Maybe chests were originally intended to have random yaws. @@ -33,7 +33,7 @@ void bhv_beta_chest_bottom_init(void) { * with radius 200 units and height 200 units. */ void bhv_beta_chest_bottom_loop(void) { - obj_push_mario_away_from_cylinder(200.0f, 200.0f); + cur_obj_push_mario_away_from_cylinder(200.0f, 200.0f); } /** diff --git a/src/game/behaviors/beta_holdable_object.inc.c b/src/game/behaviors/beta_holdable_object.inc.c index c451f20..b4ec61f 100644 --- a/src/game/behaviors/beta_holdable_object.inc.c +++ b/src/game/behaviors/beta_holdable_object.inc.c @@ -21,9 +21,9 @@ void bhv_beta_holdable_object_init(void) { */ static void beta_holdable_object_drop(void) { // Re-enable rendering - obj_enable_rendering(); + cur_obj_enable_rendering(); - obj_get_dropped(); + cur_obj_get_dropped(); o->oHeldState = HELD_FREE; @@ -35,10 +35,10 @@ static void beta_holdable_object_drop(void) { * Throw the object. */ static void beta_holdable_object_throw(void) { - // obj_enable_rendering_2 just calls obj_enable_rendering and does + // cur_obj_enable_rendering_2 just calls cur_obj_enable_rendering and does // nothing else; it's useless here. Maybe it originally did more? - obj_enable_rendering_2(); - obj_enable_rendering(); + cur_obj_enable_rendering_2(); + cur_obj_enable_rendering(); o->oHeldState = HELD_FREE; @@ -64,7 +64,7 @@ void bhv_beta_holdable_object_loop(void) { case HELD_HELD: // Disable rendering to hide the object while it's held - obj_disable_rendering(); + cur_obj_disable_rendering(); break; case HELD_THROWN: diff --git a/src/game/behaviors/beta_trampoline.inc.c b/src/game/behaviors/beta_trampoline.inc.c index efeaf12..f9c248f 100644 --- a/src/game/behaviors/beta_trampoline.inc.c +++ b/src/game/behaviors/beta_trampoline.inc.c @@ -20,8 +20,8 @@ void bhv_beta_trampoline_spring_loop(void) { f32 yDisplacement; // Update to be 75 units under the trampoline top - copy_object_pos_and_angle(o, o->parentObj); - copy_object_graph_y_offset(o, o->parentObj); + obj_copy_pos_and_angle(o, o->parentObj); + obj_copy_graph_y_offset(o, o->parentObj); o->oPosY -= 75.0f; // If the trampoline top is above its original position, @@ -42,7 +42,7 @@ void bhv_beta_trampoline_spring_loop(void) { } // Scale the spring - scale_object_xyz(o, 1.0f, yScale, 1.0f); + obj_scale_xyz(o, 1.0f, yScale, 1.0f); } /** @@ -53,7 +53,7 @@ void bhv_beta_trampoline_spring_loop(void) { * do anything. */ void bhv_beta_trampoline_top_loop(void) { - obj_set_model(MODEL_TRAMPOLINE); + cur_obj_set_model(MODEL_TRAMPOLINE); // When initialized, spawn the rest of the trampoline if (o->oTimer == 0) { @@ -83,5 +83,5 @@ void bhv_beta_trampoline_top_loop(void) { // that the trampoline is currently in use. This potential // trampoline infrastructure is found in mario_step.c. See // that file for more details. - nop_80254E50(); + stub_mario_step_2(); } diff --git a/src/game/behaviors/bird.inc.c b/src/game/behaviors/bird.inc.c index c6ef8e1..f59081d 100644 --- a/src/game/behaviors/bird.inc.c +++ b/src/game/behaviors/bird.inc.c @@ -21,7 +21,7 @@ static void bird_act_inactive(void) { if (o->oBehParams2ndByte != BIRD_BP_SPAWNED) { s32 i; - PlaySound2(SOUND_GENERAL_BIRDS_FLY_AWAY); + cur_obj_play_sound_2(SOUND_GENERAL_BIRDS_FLY_AWAY); for (i = 0; i < 6; i++) { spawn_object(o, MODEL_BIRDS, bhvBird); @@ -42,7 +42,7 @@ static void bird_act_inactive(void) { o->oBirdSpeed = 40.0f; - obj_unhide(); + cur_obj_unhide(); } } @@ -63,12 +63,12 @@ static void bird_act_fly(void) { // is itself. In other words, when a group of birds has its spawner bird // fly past Y=8000, they will all despawn simultaneously. Otherwise, fly. if (o->parentObj->oPosY > 8000.0f) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { // If the bird is a spawner bird, fly towards its home; otherwise, // fly towards the bird's spawner bird. if (o->oBehParams2ndByte != BIRD_BP_SPAWNED) { - distance = obj_lateral_dist_to_home(); + distance = cur_obj_lateral_dist_to_home(); // The spawner bird will start with its downwards (positive) pitch // and will continuously decrease its pitch (i.e. make itself face more upwards) @@ -76,13 +76,13 @@ static void bird_act_fly(void) { // This is done by making its target pitch the arctangent of its distance // to its home and its position - 10,000 (which is always negative). o->oBirdTargetPitch = atan2s(distance, o->oPosY - 10000.0f); - o->oBirdTargetYaw = obj_angle_to_home(); + o->oBirdTargetYaw = cur_obj_angle_to_home(); } else { distance = lateral_dist_between_objects(o, o->parentObj); // The bird's target pitch will face directly to its spawner bird. o->oBirdTargetPitch = atan2s(distance, o->oPosY - o->parentObj->oPosY); - o->oBirdTargetYaw = angle_to_object(o, o->parentObj); + o->oBirdTargetYaw = obj_angle_to_object(o, o->parentObj); // The bird goes faster the farther it is from its spawner bird so it can catch up. o->oBirdSpeed = 0.04f * dist_between_objects(o, o->parentObj) + 20.0f; @@ -90,7 +90,7 @@ static void bird_act_fly(void) { // Approach to match the bird's target yaw and pitch. obj_move_pitch_approach(o->oBirdTargetPitch, 140); - obj_rotate_yaw_toward(o->oBirdTargetYaw, 800); + cur_obj_rotate_yaw_toward(o->oBirdTargetYaw, 800); obj_roll_to_match_yaw_turn(o->oBirdTargetYaw, 0x3000, 600); } @@ -100,7 +100,7 @@ static void bird_act_fly(void) { // a constant added to its Y position every frame since // its Y velocity is reset every frame by // obj_compute_vel_from_move_pitch. - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } /** diff --git a/src/game/behaviors/blue_coin.inc.c b/src/game/behaviors/blue_coin.inc.c index 8429648..6f90fa5 100644 --- a/src/game/behaviors/blue_coin.inc.c +++ b/src/game/behaviors/blue_coin.inc.c @@ -13,11 +13,11 @@ void bhv_hidden_blue_coin_loop(void) { switch (o->oAction) { case HIDDEN_BLUE_COIN_ACT_INACTIVE: // Become invisible and intangible - obj_disable_rendering(); - obj_become_intangible(); + cur_obj_disable_rendering(); + cur_obj_become_intangible(); // Set action to HIDDEN_BLUE_COIN_ACT_WAITING after the blue coin switch is found. - o->oHiddenBlueCoinSwitch = obj_nearest_object_with_behavior(bhvBlueCoinSwitch); + o->oHiddenBlueCoinSwitch = cur_obj_nearest_object_with_behavior(bhvBlueCoinSwitch); if (o->oHiddenBlueCoinSwitch != NULL) { o->oAction++; @@ -35,19 +35,19 @@ void bhv_hidden_blue_coin_loop(void) { break; case HIDDEN_BLUE_COIN_ACT_ACTIVE: // Become tangible - obj_enable_rendering(); - obj_become_tangible(); + cur_obj_enable_rendering(); + cur_obj_become_tangible(); // Delete the coin once collected if (o->oInteractStatus & INT_STATUS_INTERACTED) { spawn_object(o, MODEL_SPARKLES, bhvGoldenCoinSparkles); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } // After 200 frames of waiting and 20 2-frame blinks (for 240 frames total), // delete the object. - if (obj_wait_then_blink(200, 20)) { - mark_object_for_deletion(o); + if (cur_obj_wait_then_blink(200, 20)) { + obj_mark_for_deletion(o); } break; @@ -61,7 +61,7 @@ void bhv_hidden_blue_coin_loop(void) { */ void bhv_blue_coin_switch_loop(void) { // The switch's model is 1/3 size. - obj_scale(3.0f); + cur_obj_scale(3.0f); switch (o->oAction) { case BLUE_COIN_SWITCH_ACT_IDLE: @@ -77,7 +77,7 @@ void bhv_blue_coin_switch_loop(void) { // Set gravity to 0 so it doesn't accelerate when receding. o->oGravity = 0.0f; - PlaySound2(SOUND_GENERAL_SWITCH_DOOR_OPEN); + cur_obj_play_sound_2(SOUND_GENERAL_SWITCH_DOOR_OPEN); } } @@ -90,7 +90,7 @@ void bhv_blue_coin_switch_loop(void) { // This is probably an off-by-one error, since the switch is 100 units tall // and recedes at 20 units/frame, which means it will fully recede after 5 frames. if (o->oTimer > 5) { - obj_hide(); + cur_obj_hide(); // Set to BLUE_COIN_SWITCH_ACT_TICKING o->oAction++; @@ -98,13 +98,13 @@ void bhv_blue_coin_switch_loop(void) { o->oPosY = gMarioObject->oPosY - 40.0f; // Spawn particles. There's a function that calls this same function - // with the same arguments, func_802A3004, why didn't they just call that? - func_802AA618(0, 0, 46.0f); + // with the same arguments, spawn_mist_particles, why didn't they just call that? + spawn_mist_particles_variable(0, 0, 46.0f); } else { // Have collision while receding load_object_collision_model(); // Recede - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } break; @@ -118,8 +118,8 @@ void bhv_blue_coin_switch_loop(void) { // Delete the switch (which stops the sound) after the last coin is collected, // or after the coins unload after the 240-frame timer expires. - if (obj_nearest_object_with_behavior(bhvHiddenBlueCoin) == NULL || o->oTimer > 240) { - mark_object_for_deletion(o); + if (cur_obj_nearest_object_with_behavior(bhvHiddenBlueCoin) == NULL || o->oTimer > 240) { + obj_mark_for_deletion(o); } break; diff --git a/src/game/behaviors/blue_fish.inc.c b/src/game/behaviors/blue_fish.inc.c index bddb80c..c9cea52 100644 --- a/src/game/behaviors/blue_fish.inc.c +++ b/src/game/behaviors/blue_fish.inc.c @@ -1,76 +1,127 @@ -// blue_fish.c.inc +/** + * @file blue_fish.inc.c + * Implements behaviour and spawning for bhvBlueFish located in the castle aquarium outside of SA. + */ -void bhv_blue_fish_loop(void) { - f32 sp24; +/** + * Determines fish movement. + */ +void bhv_blue_fish_movement_loop(void) { + f32 randomSwitch; switch (o->oAction) { - case 0: - func_8029ED98(0, 1.0f); + // Initial dive phase after spawning + case BLUE_FISH_ACT_DIVE: + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); + + // Assigns random values to variables that help determine natural motion. if (o->oTimer == 0) { - o->oBlueFishUnk100 = RandomSign() << 11; - o->oBlueFishUnkF4 = RandomFloat() * 2; - o->oBlueFishUnkF8 = (s32)(RandomFloat() * 30) & 0xFE; - sp24 = RandomFloat() * 5; - if (sp24 < 2.0f) + o->oBlueFishRandomAngle = RandomSign() << 11; + o->oBlueFishRandomVel = RandomFloat() * 2; + o->oBlueFishRandomTime = (s32)(RandomFloat() * 30) & 0xFE; + + // Adjusts pitch velocity or sets to zero dependant on outcome of randomSwitch. + randomSwitch = RandomFloat() * 5; + if (randomSwitch < 2.0f) { o->oAngleVelPitch = random_f32_around_zero(128); - else + } else { o->oAngleVelPitch = 0; + } } - o->oForwardVel = o->oBlueFishUnkF4 + 3.0f; - if (o->oTimer >= o->oBlueFishUnkF8 + 60) + + // Set forward velocity and progress oAction to BLUE_FISH_ACT_TURN. + o->oForwardVel = o->oBlueFishRandomVel + 3.0f; + if (o->oTimer >= o->oBlueFishRandomTime + 60) { o->oAction++; - if (o->oTimer < (o->oBlueFishUnkF8 + 60) / 2) + } + + // Set pitch velocity + if (o->oTimer < (o->oBlueFishRandomTime + 60) / 2) { o->oFaceAnglePitch += o->oAngleVelPitch; - else + } else { o->oFaceAnglePitch -= o->oAngleVelPitch; + } + + // Calculate new Y velocity o->oVelY = -sins(o->oFaceAnglePitch) * o->oForwardVel; break; - case 1: - func_8029ED98(0, 2.0f); - o->oMoveAngleYaw = (s32)(o->oBlueFishUnk100 + o->oMoveAngleYaw); - if (o->oTimer == 15) + // Animates and adjusts fish yaw angle. + case BLUE_FISH_ACT_TURN: + cur_obj_init_animation_with_accel_and_sound(0, 2.0f); + o->oMoveAngleYaw = (s32)(o->oBlueFishRandomAngle + o->oMoveAngleYaw); + if (o->oTimer == 15) { o->oAction++; - break; - case 2: - func_8029ED98(0, 1.0f); - if (o->oTimer >= o->oBlueFishUnkF8 + 60) + } + break; + // Animates and adjusts pitch to an upward direction. + case BLUE_FISH_ACT_ASCEND: + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); + + // Progresses oAction to BLUE_FISH_ACT_TURN_BACK after elapsed time. + if (o->oTimer >= o->oBlueFishRandomTime + 60) { o->oAction++; - if (o->oTimer < (o->oBlueFishUnkF8 + 60) / 2) + } + + // Adjusts pitch angle. Direction relies on time not passed. + if (o->oTimer < (o->oBlueFishRandomTime + 60) / 2) { o->oFaceAnglePitch -= o->oAngleVelPitch; - else + } else { o->oFaceAnglePitch += o->oAngleVelPitch; - break; - case 3: - func_8029ED98(0, 2.0f); - o->oMoveAngleYaw = (s32)(o->oBlueFishUnk100 + o->oMoveAngleYaw); - if (o->oTimer == 15) - o->oAction = 0; + } + break; + // Animates and turns fish around + case BLUE_FISH_ACT_TURN_BACK: + cur_obj_init_animation_with_accel_and_sound(0, 2.0f); + o->oMoveAngleYaw = (s32)(o->oBlueFishRandomAngle + o->oMoveAngleYaw); + + // Sets the fish back to the BLUE_FISH_ACT_DIVE phase. + if (o->oTimer == 15) { + o->oAction = BLUE_FISH_ACT_DIVE; + } break; } + + // Calculates Y velocity and calls physics engine. o->oVelY = -sins(o->oFaceAnglePitch) * o->oForwardVel; - obj_move_using_fvel_and_gravity(); - if (o->parentObj->oAction == 2) - mark_object_for_deletion(o); + cur_obj_move_using_fvel_and_gravity(); + + // Deletes object if the parent has oAction set to BLUE_FISH_ACT_DUPLICATE. + if (o->parentObj->oAction == BLUE_FISH_ACT_DUPLICATE) { + obj_mark_for_deletion(o); + } } +/** + * Spawns fifteen fish if Mario resides in room fifteen or seven. + * They move at random within 200.0f + */ void bhv_tank_fish_group_loop(void) { struct Object *fish; s32 i; switch (o->oAction) { - case 0: + case BLUE_FISH_ACT_SPAWN: if (gMarioCurrentRoom == 15 || gMarioCurrentRoom == 7) { + + // spawns fifteen fish and moves them within 200.0f for (i = 0; i < 15; i++) { fish = spawn_object_relative(0, 300, 0, -200, o, MODEL_FISH, bhvBlueFish); - translate_object_xyz_random(fish, 200.0f); + obj_translate_xyz_random(fish, 200.0f); } + + // Proceed to BLUE_FISH_ACT_ROOM phase. o->oAction++; } break; - case 1: - if (gMarioCurrentRoom != 15 && gMarioCurrentRoom != 7) + + // Sets next oAction phase if Mario is not in rooms fifteen and seven. + case BLUE_FISH_ACT_ROOM: + if (gMarioCurrentRoom != 15 && gMarioCurrentRoom != 7) { o->oAction++; + } break; - case 2: - o->oAction = 0; + + // Sets oAction to the BLUE_FISH_ACT_SPAWN phase. + case BLUE_FISH_ACT_DUPLICATE: + o->oAction = BLUE_FISH_ACT_SPAWN; break; } } diff --git a/src/game/behaviors/bobomb.inc.c b/src/game/behaviors/bobomb.inc.c index f5510f0..a05d38d 100644 --- a/src/game/behaviors/bobomb.inc.c +++ b/src/game/behaviors/bobomb.inc.c @@ -19,7 +19,7 @@ void bhv_bobomb_init(void) { o->oInteractionSubtype = INT_SUBTYPE_KICKABLE; } -void func_802E5B7C(void) { +void bobomb_spawn_coin(void) { if (((o->oBehParams >> 8) & 0x1) == 0) { obj_spawn_yellow_coins(o, 1); o->oBehParams = 0x100; @@ -27,22 +27,23 @@ void func_802E5B7C(void) { } } -void BobombExplodeLoop(void) { +void bobomb_act_explode(void) { struct Object *explosion; if (o->oTimer < 5) - obj_scale(1.0 + (f32) o->oTimer / 5.0); + cur_obj_scale(1.0 + (f32) o->oTimer / 5.0); else { explosion = spawn_object(o, MODEL_EXPLOSION, bhvExplosion); explosion->oGraphYOffset += 100.0f; - func_802E5B7C(); + bobomb_spawn_coin(); create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000); o->activeFlags = 0; } } -void CheckBobombInteractions(void) { - set_object_hitbox(o, &sBobombHitbox); + +void bobomb_check_interactions(void) { + obj_set_hitbox(o, &sBobombHitbox); if ((o->oInteractStatus & INT_STATUS_INTERACTED) != 0) /* bit 15 */ { if ((o->oInteractStatus & INTERACT_GRABBABLE) != 0) /* bit 1 */ @@ -59,11 +60,11 @@ void CheckBobombInteractions(void) { o->oInteractStatus = 0; } - if (attack_collided_non_mario_object(o) == 1) + if (obj_attack_collided_from_other_object(o) == 1) o->oAction = BOBOMB_ACT_EXPLODE; } -void BobombPatrolLoop(void) { +void bobomb_act_patrol(void) { UNUSED s8 filler[4]; UNUSED s16 sp22; s16 collisionFlags; @@ -80,7 +81,7 @@ void BobombPatrolLoop(void) { obj_check_floor_death(collisionFlags, sObjFloor); } -void BobombChaseMarioLoop(void) { +void bobomb_act_chase_mario(void) { UNUSED u8 filler[4]; s16 sp1a, collisionFlags; @@ -90,35 +91,35 @@ void BobombChaseMarioLoop(void) { collisionFlags = object_step(); if (sp1a == 5 || sp1a == 16) - PlaySound2(SOUND_OBJ_BOBOMB_WALK); + cur_obj_play_sound_2(SOUND_OBJ_BOBOMB_WALK); obj_turn_toward_object(o, gMarioObject, 16, 0x800); obj_check_floor_death(collisionFlags, sObjFloor); } -void BobombLaunchedLoop(void) { +void bobomb_act_launched(void) { s16 collisionFlags = 0; collisionFlags = object_step(); if ((collisionFlags & OBJ_COL_FLAG_GROUNDED) == OBJ_COL_FLAG_GROUNDED) o->oAction = BOBOMB_ACT_EXPLODE; /* bit 0 */ } -void GenericBobombFreeLoop(void) { +void generic_bobomb_free_loop(void) { switch (o->oAction) { case BOBOMB_ACT_PATROL: - BobombPatrolLoop(); + bobomb_act_patrol(); break; case BOBOMB_ACT_LAUNCHED: - BobombLaunchedLoop(); + bobomb_act_launched(); break; case BOBOMB_ACT_CHASE_MARIO: - BobombChaseMarioLoop(); + bobomb_act_chase_mario(); break; case BOBOMB_ACT_EXPLODE: - BobombExplodeLoop(); + bobomb_act_explode(); break; case BOBOMB_ACT_LAVA_DEATH: @@ -132,20 +133,20 @@ void GenericBobombFreeLoop(void) { break; } - CheckBobombInteractions(); + bobomb_check_interactions(); if (o->oBobombFuseTimer >= 151) o->oAction = 3; } -void StationaryBobombFreeLoop(void) { +void stationary_bobomb_free_loop(void) { switch (o->oAction) { case BOBOMB_ACT_LAUNCHED: - BobombLaunchedLoop(); + bobomb_act_launched(); break; case BOBOMB_ACT_EXPLODE: - BobombExplodeLoop(); + bobomb_act_explode(); break; case BOBOMB_ACT_LAVA_DEATH: @@ -159,28 +160,28 @@ void StationaryBobombFreeLoop(void) { break; } - CheckBobombInteractions(); + bobomb_check_interactions(); if (o->oBobombFuseTimer >= 151) o->oAction = 3; } -void BobombFreeLoop(void) { +void bobomb_free_loop(void) { if (o->oBehParams2ndByte == BOBOMB_BP_STYPE_GENERIC) - GenericBobombFreeLoop(); + generic_bobomb_free_loop(); else - StationaryBobombFreeLoop(); + stationary_bobomb_free_loop(); } -void BobombHeldLoop(void) { +void bobomb_held_loop(void) { o->header.gfx.node.flags |= 0x10; /* bit 4 */ - SetObjAnimation(1); - obj_set_pos_relative(gMarioObject, 0, 60.0f, 100.0); + cur_obj_init_animation(1); + cur_obj_set_pos_relative(gMarioObject, 0, 60.0f, 100.0); o->oBobombFuseLit = 1; if (o->oBobombFuseTimer >= 151) { //! Although the Bob-omb's action is set to explode when the fuse timer expires, - // BobombExplodeLoop() will not execute until the bob-omb's held state changes. + // bobomb_act_explode() will not execute until the bob-omb's held state changes. // This allows the Bob-omb to be regrabbed indefinitely. gMarioObject->oInteractStatus |= INTERACT_DAMAGE; /* bit 3 */ @@ -188,18 +189,18 @@ void BobombHeldLoop(void) { } } -void BobombDroppedLoop(void) { - obj_get_dropped(); +void bobomb_dropped_loop(void) { + cur_obj_get_dropped(); o->header.gfx.node.flags &= ~0x10; /* bit 4 = 0 */ - SetObjAnimation(0); + cur_obj_init_animation(0); o->oHeldState = 0; o->oAction = BOBOMB_ACT_PATROL; } -void BobombThrownLoop(void) { - obj_enable_rendering_2(); +void bobomb_thrown_loop(void) { + cur_obj_enable_rendering_2(); o->header.gfx.node.flags &= ~0x10; /* bit 4 = 0 */ o->oHeldState = 0; @@ -211,7 +212,7 @@ void BobombThrownLoop(void) { // sp18 = blinkTimer -void ObjRandomBlink(s32 *blinkTimer) { +void curr_obj_random_blink(s32 *blinkTimer) { if (*blinkTimer == 0) { if ((s16)(RandomFloat() * 100.0f) == 0) { o->oAnimState = 1; @@ -235,23 +236,23 @@ void bhv_bobomb_loop(void) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 4000) != 0) { switch (o->oHeldState) { case HELD_FREE: - BobombFreeLoop(); + bobomb_free_loop(); break; case HELD_HELD: - BobombHeldLoop(); + bobomb_held_loop(); break; case HELD_THROWN: - BobombThrownLoop(); + bobomb_thrown_loop(); break; case HELD_DROPPED: - BobombDroppedLoop(); + bobomb_dropped_loop(); break; } - ObjRandomBlink(&o->oBobombBlinkTimer); + curr_obj_random_blink(&o->oBobombBlinkTimer); if (o->oBobombFuseLit == 1) { if (o->oBobombFuseTimer >= 121) @@ -263,7 +264,7 @@ void bhv_bobomb_loop(void) { == 0) /* oBobombFuseTimer % 2 or oBobombFuseTimer % 8 */ spawn_object(o, MODEL_SMOKE, bhvBobombFuseSmoke); - PlaySound(SOUND_AIR_BOBOMB_LIT_FUSE); + cur_obj_play_sound_1(SOUND_AIR_BOBOMB_LIT_FUSE); o->oBobombFuseTimer++; } @@ -274,7 +275,7 @@ void bhv_bobomb_fuse_smoke_init(void) { o->oPosX += (s32)(RandomFloat() * 80.0f) - 40; o->oPosY += (s32)(RandomFloat() * 80.0f) + 60; o->oPosZ += (s32)(RandomFloat() * 80.0f) - 40; - obj_scale(1.2f); + cur_obj_scale(1.2f); } void bhv_bobomb_buddy_init(void) { @@ -284,7 +285,7 @@ void bhv_bobomb_buddy_init(void) { o->oInteractionSubtype = INT_SUBTYPE_NPC; } -void BobombBuddyIdleLoop(void) { +void bobomb_buddy_act_idle(void) { UNUSED u8 filler[4]; s16 sp1a = o->header.gfx.unk38.animFrame; UNUSED s16 collisionFlags = 0; @@ -296,7 +297,7 @@ void BobombBuddyIdleLoop(void) { collisionFlags = object_step(); if ((sp1a == 5) || (sp1a == 16)) - PlaySound2(SOUND_OBJ_BOBOMB_WALK); + cur_obj_play_sound_2(SOUND_OBJ_BOBOMB_WALK); if (o->oDistanceToMario < 1000.0f) o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 0x140); @@ -313,7 +314,7 @@ void BobombBuddyIdleLoop(void) { * dialogSecondText is called after Bob-omb Buddy has the cannon(s) ready and * then tells Mario that is "Ready for blastoff". */ -void BobombBuddyCannonLoop(s16 dialogFirstText, s16 dialogSecondText) { +void bobomb_buddy_cannon_dialog(s16 dialogFirstText, s16 dialogSecondText) { struct Object *cannonClosed; s16 buddyText, cutscene; @@ -322,7 +323,7 @@ void BobombBuddyCannonLoop(s16 dialogFirstText, s16 dialogSecondText) { buddyText = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogFirstText); if (buddyText != 0) { save_file_set_cannon_unlocked(); - cannonClosed = obj_nearest_object_with_behavior(bhvCannonClosed); + cannonClosed = cur_obj_nearest_object_with_behavior(bhvCannonClosed); if (cannonClosed != 0) o->oBobombBuddyCannonStatus = BOBOMB_BUDDY_CANNON_OPENING; else @@ -331,7 +332,7 @@ void BobombBuddyCannonLoop(s16 dialogFirstText, s16 dialogSecondText) { break; case BOBOMB_BUDDY_CANNON_OPENING: - cannonClosed = obj_nearest_object_with_behavior(bhvCannonClosed); + cannonClosed = cur_obj_nearest_object_with_behavior(bhvCannonClosed); cutscene = cutscene_object(CUTSCENE_PREPARE_CANNON, cannonClosed); if (cutscene == -1) o->oBobombBuddyCannonStatus = BOBOMB_BUDDY_CANNON_OPENED; @@ -355,7 +356,7 @@ void BobombBuddyCannonLoop(s16 dialogFirstText, s16 dialogSecondText) { } } -void BobombBuddyTalkLoop(void) { +void bobomb_buddy_act_talk(void) { if (set_mario_npc_dialog(1) == 2) { o->activeFlags |= 0x20; /* bit 5 */ @@ -374,38 +375,38 @@ void BobombBuddyTalkLoop(void) { case BOBOMB_BUDDY_ROLE_CANNON: if (gCurrCourseNum == COURSE_BOB) - BobombBuddyCannonLoop(DIALOG_004, DIALOG_105); + bobomb_buddy_cannon_dialog(DIALOG_004, DIALOG_105); else - BobombBuddyCannonLoop(DIALOG_047, DIALOG_106); + bobomb_buddy_cannon_dialog(DIALOG_047, DIALOG_106); break; } } } -void BobombBuddyTurnToTalkLoop(void) { +void bobomb_buddy_act_turn_to_talk(void) { s16 sp1e = o->header.gfx.unk38.animFrame; if ((sp1e == 5) || (sp1e == 16)) - PlaySound2(SOUND_OBJ_BOBOMB_WALK); + cur_obj_play_sound_2(SOUND_OBJ_BOBOMB_WALK); o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 0x1000); if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario) o->oAction = BOBOMB_BUDDY_ACT_TALK; - PlaySound2(SOUND_ACTION_READ_SIGN); + cur_obj_play_sound_2(SOUND_ACTION_READ_SIGN); } -void BobombBuddyActionLoop(void) { +void bobomb_buddy_actions(void) { switch (o->oAction) { case BOBOMB_BUDDY_ACT_IDLE: - BobombBuddyIdleLoop(); + bobomb_buddy_act_idle(); break; case BOBOMB_BUDDY_ACT_TURN_TO_TALK: - BobombBuddyTurnToTalkLoop(); + bobomb_buddy_act_turn_to_talk(); break; case BOBOMB_BUDDY_ACT_TALK: - BobombBuddyTalkLoop(); + bobomb_buddy_act_talk(); break; } @@ -413,9 +414,9 @@ void BobombBuddyActionLoop(void) { } void bhv_bobomb_buddy_loop(void) { - BobombBuddyActionLoop(); + bobomb_buddy_actions(); - ObjRandomBlink(&o->oBobombBuddyBlinkTimer); + curr_obj_random_blink(&o->oBobombBuddyBlinkTimer); o->oInteractStatus = 0; } diff --git a/src/game/behaviors/bomp.inc.c b/src/game/behaviors/bomp.inc.c index 8626546..d2e56a1 100644 --- a/src/game/behaviors/bomp.inc.c +++ b/src/game/behaviors/bomp.inc.c @@ -24,7 +24,7 @@ void bhv_small_bomp_loop(void) { if (o->oTimer == 15.0) { o->oAction = BOMP_ACT_EXTEND; o->oForwardVel = 40.0f; - PlaySound2(SOUND_OBJ_UNKNOWN2); + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2); } break; @@ -38,7 +38,7 @@ void bhv_small_bomp_loop(void) { o->oAction = BOMP_ACT_RETRACT; o->oForwardVel = 10.0f; o->oMoveAngleYaw -= 0x8000; - PlaySound2(SOUND_OBJ_UNKNOWN2); + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2); } break; @@ -80,7 +80,7 @@ void bhv_large_bomp_loop(void) { if (o->oTimer == 15.0) { o->oAction = BOMP_ACT_EXTEND; o->oForwardVel = 10.0f; - PlaySound2(SOUND_OBJ_UNKNOWN2); + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2); } break; @@ -94,7 +94,7 @@ void bhv_large_bomp_loop(void) { o->oAction = BOMP_ACT_RETRACT; o->oForwardVel = 10.0f; o->oMoveAngleYaw -= 0x8000; - PlaySound2(SOUND_OBJ_UNKNOWN2); + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2); } break; diff --git a/src/game/behaviors/boo.inc.c b/src/game/behaviors/boo.inc.c index 71cc885..7a7ddb3 100644 --- a/src/game/behaviors/boo.inc.c +++ b/src/game/behaviors/boo.inc.c @@ -30,7 +30,7 @@ void bhv_boo_init(void) { } static s32 boo_should_be_stopped(void) { - if (obj_has_behavior(bhvMerryGoRoundBigBoo) || obj_has_behavior(bhvMerryGoRoundBoo)) { + if (cur_obj_has_behavior(bhvMerryGoRoundBigBoo) || cur_obj_has_behavior(bhvMerryGoRoundBoo)) { if (gMarioOnMerryGoRound == FALSE) { return TRUE; } else { @@ -54,13 +54,13 @@ static s32 boo_should_be_stopped(void) { static s32 boo_should_be_active(void) { f32 activationRadius; - if (obj_has_behavior(bhvBalconyBigBoo)) { + if (cur_obj_has_behavior(bhvBalconyBigBoo)) { activationRadius = 5000.0f; } else { activationRadius = 1500.0f; } - if (obj_has_behavior(bhvMerryGoRoundBigBoo) || obj_has_behavior(bhvMerryGoRoundBoo)) { + if (cur_obj_has_behavior(bhvMerryGoRoundBigBoo) || cur_obj_has_behavior(bhvMerryGoRoundBoo)) { if (gMarioOnMerryGoRound == TRUE) { return TRUE; } else { @@ -87,7 +87,7 @@ void bhv_courtyard_boo_triplet_init(void) { struct Object *boo; if (gHudDisplay.stars < 12) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { for (i = 0; i < 3; i++) { boo = spawn_object_relative( @@ -125,7 +125,7 @@ static void boo_approach_target_opacity_and_update_scale(void) { } scale = (o->oOpacity/255.0f * 0.4 + 0.6) * o->oBooBaseScale; - scale_object(o, scale); // why no obj_scale? was obj_scale written later? + obj_scale(o, scale); // why no cur_obj_scale? was cur_obj_scale written later? } static void boo_oscillate(s32 ignoreOpacity) { @@ -156,7 +156,7 @@ static s32 boo_vanish_or_appear(void) { ) { if (o->oOpacity == 40) { o->oBooTargetOpacity = 255; - PlaySound2(SOUND_OBJ_BOO_LAUGH_LONG); + cur_obj_play_sound_2(SOUND_OBJ_BOO_LAUGH_LONG); } if (o->oOpacity > 180) { @@ -170,7 +170,7 @@ static s32 boo_vanish_or_appear(void) { } static void boo_set_move_yaw_for_during_hit(s32 hurt) { - obj_become_intangible(); + cur_obj_become_intangible(); o->oFlags &= ~OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW; o->oBooMoveYawBeforeHit = (f32) o->oMoveAngleYaw; @@ -225,7 +225,7 @@ static s32 boo_update_after_bounced_on(f32 a0) { if (o->oTimer < 32) { boo_move_during_hit(FALSE, D_8032F0CC[o->oTimer]/5000.0f * a0); } else { - obj_become_tangible(); + cur_obj_become_tangible(); boo_reset_after_hit(); o->oAction = 1; return TRUE; @@ -247,7 +247,7 @@ static s32 big_boo_update_during_nonlethal_hit(f32 a0) { } else if (o->oTimer < 48) { big_boo_shake_after_hit(); } else { - obj_become_tangible(); + cur_obj_become_tangible(); boo_reset_after_hit(); o->oAction = 1; @@ -274,14 +274,14 @@ static s32 boo_update_during_death(void) { } if (o->oTimer > 30 || o->oMoveFlags & 0x200) { - func_802A3004(); + spawn_mist_particles(); o->oBooDeathStatus = BOO_DEATH_STATUS_DEAD; if (o->oBooParentBigBoo != NULL) { parentBigBoo = o->oBooParentBigBoo; #ifndef VERSION_JP - if (!obj_has_behavior(bhvBoo)) { + if (!cur_obj_has_behavior(bhvBoo)) { parentBigBoo->oBigBooNumMinionBoosKilled++; } #else @@ -313,15 +313,15 @@ static s32 boo_get_attack_status(void) { if (o->oInteractStatus & INT_STATUS_INTERACTED) { if ((o->oInteractStatus & INT_STATUS_WAS_ATTACKED) && obj_has_attack_type(ATTACK_FROM_ABOVE) == FALSE) { - obj_become_intangible(); + cur_obj_become_intangible(); o->oInteractStatus = 0; - PlaySound2(SOUND_OBJ_BOO_LAUGH_SHORT); + cur_obj_play_sound_2(SOUND_OBJ_BOO_LAUGH_SHORT); attackStatus = BOO_ATTACKED; } else { - PlaySound2(SOUND_OBJ_BOO_BOUNCE_TOP); + cur_obj_play_sound_2(SOUND_OBJ_BOO_BOUNCE_TOP); o->oInteractStatus = 0; @@ -340,23 +340,23 @@ static void boo_chase_mario(f32 a0, s16 a1, f32 a2) { if (boo_vanish_or_appear()) { o->oInteractType = 0x8000; - if (obj_lateral_dist_from_mario_to_home() > 1500.0f) { - sp1A = obj_angle_to_home(); + if (cur_obj_lateral_dist_from_mario_to_home() > 1500.0f) { + sp1A = cur_obj_angle_to_home(); } else { sp1A = o->oAngleToMario; } - obj_rotate_yaw_toward(sp1A, a1); + cur_obj_rotate_yaw_toward(sp1A, a1); o->oVelY = 0.0f; if (mario_is_in_air_action() == 0) { sp1C = o->oPosY - gMarioObject->oPosY; if (a0 < sp1C && sp1C < 500.0f) { - o->oVelY = func_802A0BF4(o->oPosY, gMarioObject->oPosY + 50.0f, 10.f, 2.0f); + o->oVelY = increment_velocity_toward_range(o->oPosY, gMarioObject->oPosY + 50.0f, 10.f, 2.0f); } } - func_8029F684(10.0f - o->oBooNegatedAggressiveness, a2); + cur_obj_set_vel_from_mario_vel(10.0f - o->oBooNegatedAggressiveness, a2); if (o->oForwardVel != 0.0f) { boo_oscillate(FALSE); @@ -370,18 +370,18 @@ static void boo_chase_mario(f32 a0, s16 a1, f32 a2) { } } -static void ActionBoo0(void) { +static void boo_act_0(void) { o->activeFlags |= ACTIVE_FLAG_MOVE_THROUGH_GRATE; if (o->oBehParams2ndByte == 2) { o->oRoom = 10; } - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->oMoveAngleYaw = o->oBooInitialMoveYaw; boo_stop(); - o->oBooParentBigBoo = obj_nearest_object_with_behavior(bhvGhostHuntBigBoo); + o->oBooParentBigBoo = cur_obj_nearest_object_with_behavior(bhvGhostHuntBigBoo); o->oBooBaseScale = 1.0f; o->oBooTargetOpacity = 0xFF; @@ -396,7 +396,7 @@ static void ActionBoo0(void) { } } -static void ActionBoo5(void) { +static void boo_act_5(void) { if (o->oTimer < 30) { o->oVelY = 0.0f; o->oForwardVel = 13.0f; @@ -408,7 +408,7 @@ static void ActionBoo5(void) { } } -static void ActionBoo1(void) { +static void boo_act_1(void) { s32 attackStatus; if (o->oTimer == 0) { @@ -436,37 +436,37 @@ static void ActionBoo1(void) { } } -static void ActionBoo2(void) { +static void boo_act_2(void) { if (boo_update_after_bounced_on(20.0f)) { o->oAction = 1; } } -static void ActionBoo3(void) { +static void boo_act_3(void) { if (boo_update_during_death()) { if (o->oBehParams2ndByte != 0) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { o->oAction = 4; - obj_disable(); + cur_obj_disable(); } } } // Called when a Go on a Ghost Hunt boo dies -static void ActionBoo4(void) { +static void boo_act_4(void) { s32 dialogID; // If there are no remaining "minion" boos, show the dialog of the Big Boo - if (obj_nearest_object_with_behavior(bhvGhostHuntBoo) == NULL) { + if (cur_obj_nearest_object_with_behavior(bhvGhostHuntBoo) == NULL) { dialogID = DIALOG_108; } else { dialogID = DIALOG_107; } - if (obj_update_dialog(2, 2, dialogID, 0)) { + if (cur_obj_update_dialog(2, 2, dialogID, 0)) { create_sound_spawner(SOUND_OBJ_DYING_ENEMY1); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (dialogID == DIALOG_108) { // If the Big Boo should spawn, play the jingle play_puzzle_jingle(); @@ -475,23 +475,23 @@ static void ActionBoo4(void) { } static void (*sBooActions[])(void) = { - ActionBoo0, - ActionBoo1, - ActionBoo2, - ActionBoo3, - ActionBoo4, - ActionBoo5 + boo_act_0, + boo_act_1, + boo_act_2, + boo_act_3, + boo_act_4, + boo_act_5 }; void bhv_boo_loop(void) { //PARTIAL_UPDATE - obj_update_floor_and_walls(); - obj_call_action_function(sBooActions); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sBooActions); + cur_obj_move_standard(78); boo_approach_target_opacity_and_update_scale(); - if (object_has_behavior(o->parentObj, bhvMerryGoRoundBooManager)) { + if (obj_has_behavior(o->parentObj, bhvMerryGoRoundBooManager)) { if (o->activeFlags == 0) { o->parentObj->oMerryGoRoundBooManagerNumBoosKilled++; } @@ -500,8 +500,8 @@ void bhv_boo_loop(void) { o->oInteractStatus = 0; } -static void ActionBooGivingStar0(void) { - if (obj_has_behavior(bhvBalconyBigBoo)) { +static void big_boo_act_0(void) { + if (cur_obj_has_behavior(bhvBalconyBigBoo)) { obj_set_secondary_camera_focus(); // number of killed boos set > 5 so that boo always loads // redundant? this is also done in behavior_data.s @@ -517,25 +517,25 @@ static void ActionBooGivingStar0(void) { #endif o->oAction = 1; - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->oMoveAngleYaw = o->oBooInitialMoveYaw; - obj_unhide(); + cur_obj_unhide(); o->oBooTargetOpacity = 0xFF; o->oBooBaseScale = 3.0f; o->oHealth = 3; - obj_scale(3.0f); - obj_become_tangible(); + cur_obj_scale(3.0f); + cur_obj_become_tangible(); } else { - obj_hide(); - obj_become_intangible(); + cur_obj_hide(); + cur_obj_become_intangible(); boo_stop(); } } -static void ActionBooGivingStar1(void) { +static void big_boo_act_1(void) { s32 attackStatus; s16 sp22; f32 sp1C; @@ -553,7 +553,7 @@ static void ActionBooGivingStar1(void) { attackStatus = boo_get_attack_status(); // redundant; this check is in boo_should_be_stopped - if (obj_has_behavior(bhvMerryGoRoundBigBoo)) { + if (cur_obj_has_behavior(bhvMerryGoRoundBigBoo)) { if (gMarioOnMerryGoRound == FALSE) { o->oAction = 0; } @@ -574,44 +574,44 @@ static void ActionBooGivingStar1(void) { } } -static void ActionBooGivingStar2(void) { +static void big_boo_act_2(void) { if (boo_update_after_bounced_on(20.0f)) { o->oAction = 1; } } static void big_boo_spawn_ghost_hunt_star(void) { - create_star(980.0f, 1100.0f, 250.0f); + spawn_default_star(980.0f, 1100.0f, 250.0f); } static void big_boo_spawn_balcony_star(void) { - create_star(700.0f, 3200.0f, 1900.0f); + spawn_default_star(700.0f, 3200.0f, 1900.0f); } static void big_boo_spawn_merry_go_round_star(void) { struct Object *merryGoRound; - create_star(-1600.0f, -2100.0f, 205.0f); + spawn_default_star(-1600.0f, -2100.0f, 205.0f); - merryGoRound = obj_nearest_object_with_behavior(bhvMerryGoRound); + merryGoRound = cur_obj_nearest_object_with_behavior(bhvMerryGoRound); if (merryGoRound != NULL) { merryGoRound->oMerryGoRoundStopped = TRUE; } } -static void ActionBooGivingStar3(void) { +static void big_boo_act_3(void) { if (o->oTimer == 0) { o->oHealth--; } if (o->oHealth == 0) { if (boo_update_during_death()) { - obj_disable(); + cur_obj_disable(); o->oAction = 4; - set_object_angle(o, 0, 0, 0); + obj_set_angle(o, 0, 0, 0); if (o->oBehParams2ndByte == 0) { big_boo_spawn_ghost_hunt_star(); @@ -623,7 +623,7 @@ static void ActionBooGivingStar3(void) { } } else { if (o->oTimer == 0) { - func_802A3004(); + spawn_mist_particles(); o->oBooBaseScale -= 0.5; } @@ -633,65 +633,65 @@ static void ActionBooGivingStar3(void) { } } -static void ActionBooGivingStar4(void) { +static void big_boo_act_4(void) { #ifndef VERSION_JP boo_stop(); #endif if (o->oBehParams2ndByte == 0) { - set_object_pos(o, 973, 0, 626); + obj_set_pos(o, 973, 0, 626); if (o->oTimer > 60 && o->oDistanceToMario < 600.0f) { - set_object_pos(o, 973, 0, 717); + obj_set_pos(o, 973, 0, 717); spawn_object_relative(0, 0, 0, 0, o, MODEL_BBH_STAIRCASE_STEP, bhvBooBossSpawnedBridge); spawn_object_relative(1, 0, 0, -200, o, MODEL_BBH_STAIRCASE_STEP, bhvBooBossSpawnedBridge); spawn_object_relative(2, 0, 0, 200, o, MODEL_BBH_STAIRCASE_STEP, bhvBooBossSpawnedBridge); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } else { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } static void (*sBooGivingStarActions[])(void) = { - ActionBooGivingStar0, - ActionBooGivingStar1, - ActionBooGivingStar2, - ActionBooGivingStar3, - ActionBooGivingStar4 + big_boo_act_0, + big_boo_act_1, + big_boo_act_2, + big_boo_act_3, + big_boo_act_4 }; void bhv_big_boo_loop(void) { //PARTIAL_UPDATE - set_object_hitbox(o, &sBooGivingStarHitbox); + obj_set_hitbox(o, &sBooGivingStarHitbox); o->oGraphYOffset = o->oBooBaseScale * 60.0f; - obj_update_floor_and_walls(); - obj_call_action_function(sBooGivingStarActions); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sBooGivingStarActions); + cur_obj_move_standard(78); boo_approach_target_opacity_and_update_scale(); o->oInteractStatus = 0; } -static void ActionBooWithCage0(void) { +static void boo_with_cage_act_0(void) { o->oBooParentBigBoo = NULL; o->oBooTargetOpacity = 0xFF; o->oBooBaseScale = 2.0f; - obj_scale(2.0f); - obj_become_tangible(); + cur_obj_scale(2.0f); + cur_obj_become_tangible(); if (boo_should_be_active()) { o->oAction = 1; } } -static void ActionBooWithCage1(void) { +static void boo_with_cage_act_1(void) { s32 attackStatus; boo_chase_mario(100.0f, 512, 0.5f); @@ -711,15 +711,15 @@ static void ActionBooWithCage1(void) { } } -static void ActionBooWithCage2(void) { +static void boo_with_cage_act_2(void) { if (boo_update_after_bounced_on(20.0f)) { o->oAction = 1; } } -static void ActionBooWithCage3(void) { +static void boo_with_cage_act_3(void) { if (boo_update_during_death()) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } @@ -727,7 +727,7 @@ void bhv_boo_with_cage_init(void) { struct Object* cage; if (gHudDisplay.stars < 12) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { cage = spawn_object(o, MODEL_HAUNTED_CAGE, bhvBooCage); cage->oBehParams = o->oBehParams; @@ -735,20 +735,20 @@ void bhv_boo_with_cage_init(void) { } static void (*sBooWithCageActions[])(void) = { - ActionBooWithCage0, - ActionBooWithCage1, - ActionBooWithCage2, - ActionBooWithCage3 + boo_with_cage_act_0, + boo_with_cage_act_1, + boo_with_cage_act_2, + boo_with_cage_act_3 }; void bhv_boo_with_cage_loop(void) { //PARTIAL_UPDATE - obj_update_floor_and_walls(); - obj_call_action_function(sBooWithCageActions); - obj_move_standard(78); - + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sBooWithCageActions); + cur_obj_move_standard(78); + boo_approach_target_opacity_and_update_scale(); o->oInteractStatus = 0; } @@ -770,7 +770,7 @@ void bhv_merry_go_round_boo_manager_loop(void) { if (o->oMerryGoRoundBooManagerNumBoosKilled > 4) { struct Object *boo = spawn_object(o, MODEL_BOO, bhvMerryGoRoundBigBoo); - copy_object_behavior_params(boo, o); + obj_copy_behavior_params(boo, o); o->oAction = 2; @@ -799,7 +799,7 @@ void obj_set_secondary_camera_focus(void) { } void bhv_animated_texture_loop(void) { - func_802A3470(); + cur_obj_set_pos_to_home_with_debug(); } void bhv_boo_in_castle_loop(void) { @@ -808,38 +808,38 @@ void bhv_boo_in_castle_loop(void) { o->oBooBaseScale = 2.0f; if (o->oAction == 0) { - obj_hide(); + cur_obj_hide(); if (gHudDisplay.stars < 12) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } if (gMarioCurrentRoom == 1) { o->oAction++; } } else if (o->oAction == 1) { - obj_unhide(); + cur_obj_unhide(); o->oOpacity = 180; if (o->oTimer == 0) { - obj_scale(o->oBooBaseScale); + cur_obj_scale(o->oBooBaseScale); } if (o->oDistanceToMario < 1000.0f) { o->oAction++; - PlaySound2(SOUND_OBJ_BOO_LAUGH_LONG); + cur_obj_play_sound_2(SOUND_OBJ_BOO_LAUGH_LONG); } o->oForwardVel = 0.0f; targetAngle = o->oAngleToMario; } else { - obj_forward_vel_approach_upward(32.0f, 1.0f); + cur_obj_forward_vel_approach_upward(32.0f, 1.0f); o->oHomeX = -1000.0f; o->oHomeZ = -9000.0f; - targetAngle = obj_angle_to_home(); + targetAngle = cur_obj_angle_to_home(); if (o->oPosZ < -5000.0f) { if (o->oOpacity > 0) { @@ -856,11 +856,11 @@ void bhv_boo_in_castle_loop(void) { o->oVelY = 0.0f; - targetAngle = obj_angle_to_home(); + targetAngle = cur_obj_angle_to_home(); - obj_rotate_yaw_toward(targetAngle, 0x5A8); + cur_obj_rotate_yaw_toward(targetAngle, 0x5A8); boo_oscillate(TRUE); - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } void bhv_boo_boss_spawned_bridge_loop(void) { @@ -885,7 +885,7 @@ void bhv_boo_boss_spawned_bridge_loop(void) { // fallthrough case 1: o->oPosY += 8.0f; - PlaySound(SOUND_ENV_ELEVATOR2); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR2); if (o->oPosY > targetY) { o->oPosY = targetY; @@ -895,10 +895,10 @@ void bhv_boo_boss_spawned_bridge_loop(void) { break; case 2: if (o->oTimer == 0) { - PlaySound2(SOUND_GENERAL_UNKNOWN4_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN4_LOWPRIO); } - if (func_802A362C(o->oTimer)) { + if (cur_obj_move_up_and_down(o->oTimer)) { o->oAction++; } diff --git a/src/game/behaviors/boo_cage.inc.c b/src/game/behaviors/boo_cage.inc.c index 6cfc8f8..24e4e06 100644 --- a/src/game/behaviors/boo_cage.inc.c +++ b/src/game/behaviors/boo_cage.inc.c @@ -27,16 +27,16 @@ static struct ObjectHitbox sBooCageHitbox = { void bhv_boo_cage_loop(void) { UNUSED s32 unused; - set_object_hitbox(o, &sBooCageHitbox); + obj_set_hitbox(o, &sBooCageHitbox); switch (o->oAction) { case BOO_CAGE_ACT_IN_BOO: // Don't let Mario enter BBH until the boo is killed - obj_become_intangible(); + cur_obj_become_intangible(); // Useless scale. This is also found in the code for BOO_CAGE_ACT_ON_GROUND. // Was the boo cage originally meant to have been shrunk and grow while falling? - obj_scale(1.0f); + cur_obj_scale(1.0f); // If the cage's parent boo is killed, set the action to BOO_CAGE_ACT_FALLING, // give the cage an initial Y velocity of 60 units/frame, and play the puzzle jingle. @@ -46,7 +46,7 @@ void bhv_boo_cage_loop(void) { o->oVelY = 60.0f; play_puzzle_jingle(); } else { - copy_object_pos_and_angle(o, o->parentObj); + obj_copy_pos_and_angle(o, o->parentObj); } break; @@ -57,15 +57,15 @@ void bhv_boo_cage_loop(void) { o->oFaceAngleRoll = 0; // Apply standard physics to the cage. - obj_update_floor_and_walls(); - obj_move_standard(-78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(-78); // Spawn sparkles while the cage falls. spawn_object(o, MODEL_NONE, bhvSparkleSpawn); // When the cage lands/bounces, play a landing/bouncing sound. if (o->oMoveFlags & OBJ_MOVE_LANDED) { - PlaySound2(SOUND_GENERAL_SOFT_LANDING); + cur_obj_play_sound_2(SOUND_GENERAL_SOFT_LANDING); } // Once the cage stops bouncing and settles on the ground, @@ -80,13 +80,13 @@ void bhv_boo_cage_loop(void) { break; case BOO_CAGE_ACT_ON_GROUND: // Allow Mario to enter the cage once it's still on the ground. - obj_become_tangible(); + cur_obj_become_tangible(); // The other useless scale - obj_scale(1.0f); + cur_obj_scale(1.0f); // Set the action to BOO_CAGE_ACT_MARIO_JUMPING_IN when Mario jumps in. - if (are_objects_collided(o, gMarioObject)) { + if (obj_check_if_collided_with_object(o, gMarioObject)) { o->oAction++; } diff --git a/src/game/behaviors/boulder.inc.c b/src/game/behaviors/boulder.inc.c index cc9a712..e83d950 100644 --- a/src/game/behaviors/boulder.inc.c +++ b/src/game/behaviors/boulder.inc.c @@ -10,13 +10,13 @@ void bhv_big_boulder_init(void) { o->oBuoyancy = 2.0f; } -void func_802F05DC(void) { +void boulder_act_1(void) { s16 sp1E; sp1E = object_step_without_floor_orient(); if ((sp1E & 0x09) == 0x01 && o->oVelY > 10.0f) { - PlaySound2(SOUND_GENERAL_GRINDEL_ROLL); - func_802A3004(); + cur_obj_play_sound_2(SOUND_GENERAL_GRINDEL_ROLL); + spawn_mist_particles(); } if (o->oForwardVel > 70.0) @@ -27,7 +27,7 @@ void func_802F05DC(void) { } void bhv_big_boulder_loop(void) { - obj_scale(1.5f); + cur_obj_scale(1.5f); o->oGraphYOffset = 270.0f; switch (o->oAction) { case 0: @@ -36,13 +36,13 @@ void bhv_big_boulder_loop(void) { break; case 1: - func_802F05DC(); - func_802EFB84(1.5f); - PlaySound(SOUND_ENV_UNKNOWN2); + boulder_act_1(); + adjust_rolling_face_pitch(1.5f); + cur_obj_play_sound_1(SOUND_ENV_UNKNOWN2); break; } - func_802EFB2C(); + set_rolling_sphere_hitbox(); } void bhv_big_boulder_generator_loop(void) { diff --git a/src/game/behaviors/bouncing_fireball.inc.c b/src/game/behaviors/bouncing_fireball.inc.c index 3b0b718..a9cb1ed 100644 --- a/src/game/behaviors/bouncing_fireball.inc.c +++ b/src/game/behaviors/bouncing_fireball.inc.c @@ -2,7 +2,7 @@ void bhv_bouncing_fireball_flame_loop(void) { o->activeFlags |= 0x400; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case 0: if (o->oTimer == 0) { @@ -18,12 +18,12 @@ void bhv_bouncing_fireball_flame_loop(void) { o->oForwardVel = 30.0f; } if (o->oMoveFlags & (0x40 | 0x10 | 0x2) && o->oTimer > 100) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); break; } if (o->oTimer > 300) - mark_object_for_deletion(o); - obj_move_standard(78); + obj_mark_for_deletion(o); + cur_obj_move_standard(78); o->oInteractStatus = 0; } @@ -38,9 +38,9 @@ void bhv_bouncing_fireball_loop(void) { case 1: sp2C = spawn_object(o, MODEL_RED_FLAME, bhvBouncingFireballFlame); sp28 = (10 - o->oTimer) * 0.5; - scale_object_xyz(sp2C, sp28, sp28, sp28); + obj_scale_xyz(sp2C, sp28, sp28, sp28); if (o->oTimer == 0) - make_object_tangible(sp2C); + obj_become_tangible(sp2C); if (o->oTimer > 10) o->oAction++; break; diff --git a/src/game/behaviors/bowling_ball.inc.c b/src/game/behaviors/bowling_ball.inc.c index 00ff840..b7ec7d1 100644 --- a/src/game/behaviors/bowling_ball.inc.c +++ b/src/game/behaviors/bowling_ball.inc.c @@ -32,14 +32,14 @@ void bhv_bowling_ball_init(void) { o->oBuoyancy = 2.0f; } -void func_802EDA14(void) { - set_object_hitbox(o, &sBowlingBallHitbox); +void bowling_ball_set_hitbox(void) { + obj_set_hitbox(o, &sBowlingBallHitbox); if (o->oInteractStatus & INT_STATUS_INTERACTED) o->oInteractStatus = 0; } -void func_802EDA6C(void) { +void bowling_ball_set_waypoints(void) { switch (o->oBehParams2ndByte) { case BBALL_BP_STYPE_BOB_UPPER: o->oPathedWaypointsS16 = segmented_to_virtual(bob_seg7_metal_ball_path0); @@ -67,11 +67,11 @@ void bhv_bowling_ball_roll_loop(void) { s16 collisionFlags; s32 sp18; - func_802EDA6C(); + bowling_ball_set_waypoints(); collisionFlags = object_step(); //! Uninitialzed parameter, but the parameter is unused in the called function - sp18 = obj_follow_path(sp18); + sp18 = cur_obj_follow_path(sp18); o->oBowlingBallTargetYaw = o->oPathedTargetYaw; o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oBowlingBallTargetYaw, 0x400); @@ -79,28 +79,28 @@ void bhv_bowling_ball_roll_loop(void) { o->oForwardVel = 70.0; } - func_802EDA14(); + bowling_ball_set_hitbox(); if (sp18 == -1) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 7000)) { - func_802A3004(); - func_802AA618(0, 0, 92.0f); + spawn_mist_particles(); + spawn_mist_particles_variable(0, 0, 92.0f); } o->activeFlags = 0; } if ((collisionFlags & OBJ_COL_FLAG_GROUNDED) && (o->oVelY > 5.0f)) - PlaySound2(SOUND_GENERAL_QUIET_POUND1_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_POUND1_LOWPRIO); } void bhv_bowling_ball_initializeLoop(void) { s32 sp1c; - func_802EDA6C(); + bowling_ball_set_waypoints(); //! Uninitialzed parameter, but the parameter is unused in the called function - sp1c = obj_follow_path(sp1c); + sp1c = cur_obj_follow_path(sp1c); o->oMoveAngleYaw = o->oPathedTargetYaw; @@ -123,7 +123,7 @@ void bhv_bowling_ball_initializeLoop(void) { case BBALL_BP_STYPE_THI_SMALL: o->oForwardVel = 10.0f; - obj_scale(0.3f); + cur_obj_scale(0.3f); o->oGraphYOffset = 39.0f; break; } @@ -221,9 +221,9 @@ void bhv_bob_pit_bowling_ball_loop(void) { if ((sp1c->normalX == 0) && (sp1c->normalZ == 0)) o->oForwardVel = 28.0f; - func_802EDA14(); + bowling_ball_set_hitbox(); set_camera_shake_from_point(SHAKE_POS_BOWLING_BALL, o->oPosX, o->oPosY, o->oPosZ); - PlaySound(SOUND_ENV_UNKNOWN2); + cur_obj_play_sound_1(SOUND_ENV_UNKNOWN2); set_object_visibility(o, 3000); } @@ -240,19 +240,19 @@ void bhv_free_bowling_ball_init(void) { void bhv_free_bowling_ball_roll_loop(void) { s16 collisionFlags = object_step(); - func_802EDA14(); + bowling_ball_set_hitbox(); if (o->oForwardVel > 10.0f) { set_camera_shake_from_point(SHAKE_POS_BOWLING_BALL, o->oPosX, o->oPosY, o->oPosZ); - PlaySound(SOUND_ENV_UNKNOWN2); + cur_obj_play_sound_1(SOUND_ENV_UNKNOWN2); } if ((collisionFlags & OBJ_COL_FLAG_GROUNDED) && !(collisionFlags & OBJ_COL_FLAGS_LANDED)) - PlaySound2(SOUND_GENERAL_QUIET_POUND1_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_POUND1_LOWPRIO); if (!is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 6000)) { o->header.gfx.node.flags |= 0x10; /* bit 4 */ - obj_become_intangible(); + cur_obj_become_intangible(); o->oPosX = o->oHomeX; o->oPosY = o->oHomeY; @@ -270,7 +270,7 @@ void bhv_free_bowling_ball_loop(void) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 3000)) { o->oAction = FREE_BBALL_ACT_ROLL; o->header.gfx.node.flags &= ~0x10; /* bit 4 */ - obj_become_tangible(); + cur_obj_become_tangible(); } break; diff --git a/src/game/behaviors/bowser.inc.c b/src/game/behaviors/bowser.inc.c index 2f4fb51..ae4e69d 100644 --- a/src/game/behaviors/bowser.inc.c +++ b/src/game/behaviors/bowser.inc.c @@ -1,33 +1,33 @@ // bowser.c.inc -void ActionBowserTailAnchor0(void) { +void bowser_tail_anchor_act_0(void) { struct Object *bowser = o->parentObj; - obj_become_tangible(); - obj_scale(1.0f); + cur_obj_become_tangible(); + cur_obj_scale(1.0f); if (bowser->oAction == 19) bowser->oIntangibleTimer = -1; - else if (are_objects_collided(o, gMarioObject)) { + else if (obj_check_if_collided_with_object(o, gMarioObject)) { bowser->oIntangibleTimer = 0; o->oAction = 2; } else bowser->oIntangibleTimer = -1; } -void ActionBowserTailAnchor1(void) { +void bowser_tail_anchor_act_1(void) { if (o->oTimer > 30) o->oAction = 0; } -void ActionBowserTailAnchor2(void) { +void bowser_tail_anchor_act_2(void) { if (o->parentObj->oAction == 19) { o->parentObj->oIntangibleTimer = -1; o->oAction = 0; } - obj_become_intangible(); + cur_obj_become_intangible(); } -void (*sBowserTailAnchorActions[])(void) = { ActionBowserTailAnchor0, ActionBowserTailAnchor1, - ActionBowserTailAnchor2 }; +void (*sBowserTailAnchorActions[])(void) = { bowser_tail_anchor_act_0, bowser_tail_anchor_act_1, + bowser_tail_anchor_act_2 }; s8 D_8032F4FC[] = { 7, 8, 9, 12, 13, 14, 15, 4, 3, 16, 17, 19, 3, 3, 3, 3 }; s16 D_8032F50C[] = { 60, 0 }; s16 D_8032F510[] = { 50, 0 }; @@ -38,7 +38,7 @@ s16 D_8032F520[][3] = { { 1, 10, 40 }, { 0, 0, 74 }, { -1, -10, 114 }, { 1 { -1, 80, 184 }, { 1, 160, 186 }, { -1, -160, 186 }, { 1, 0, 0 }, }; void bhv_bowser_tail_anchor_loop(void) { - obj_call_action_function(sBowserTailAnchorActions); + cur_obj_call_action_function(sBowserTailAnchorActions); o->oParentRelativePosX = 90.0f; if (o->parentObj->oAction == 4) o->parentObj->oIntangibleTimer = -1; @@ -58,7 +58,7 @@ void bhv_bowser_flame_spawn_loop(void) { if (bowser->header.gfx.unk38.curAnim->unk08 == sp30) sp30 = 0; if (sp30 > 45 && sp30 < 85) { - PlaySound(SOUND_AIR_BOWSER_SPIT_FIRE); + cur_obj_play_sound_1(SOUND_AIR_BOWSER_SPIT_FIRE); sp2C = sp1C[5 * sp30]; sp28 = sp1C[5 * sp30 + 2]; o->oPosX = bowser->oPosX + (sp28 * sp20 + sp2C * sp24); @@ -73,7 +73,7 @@ void bhv_bowser_flame_spawn_loop(void) { } void bhv_bowser_body_anchor_loop(void) { - copy_object_pos_and_angle(o, o->parentObj); + obj_copy_pos_and_angle(o, o->parentObj); if (o->parentObj->oAction == 4) { #ifndef VERSION_JP if (o->parentObj->oSubAction == 11) @@ -86,16 +86,16 @@ void bhv_bowser_body_anchor_loop(void) { } else { o->oInteractType = 8; if (o->parentObj->oOpacity < 100) - obj_become_intangible(); + cur_obj_become_intangible(); else - obj_become_tangible(); + cur_obj_become_tangible(); } if (o->parentObj->oHeldState != HELD_FREE) - obj_become_intangible(); + cur_obj_become_intangible(); o->oInteractStatus = 0; } -s32 func_802B38B4(void) { +s32 bowser_spawn_shockwave(void) { struct Object *wave; if (o->oBehParams2ndByte == 2) { wave = spawn_object(o, MODEL_BOWSER_WAVE, bhvBowserShockWave); @@ -105,13 +105,13 @@ s32 func_802B38B4(void) { return 0; } -void func_802B392C(s32 *a) { +void bowser_bounce(s32 *a) { if (o->oMoveFlags & 1) { a[0]++; if (a[0] < 4) { - obj_start_cam_event(o, CAM_EVENT_BOWSER_THROW_BOUNCE); - func_802AA618(0, 0, 60.0f); - PlaySound2(SOUND_OBJ_BOWSER_WALK); + cur_obj_start_cam_event(o, CAM_EVENT_BOWSER_THROW_BOUNCE); + spawn_mist_particles_variable(0, 0, 60.0f); + cur_obj_play_sound_2(SOUND_OBJ_BOWSER_WALK); } } } @@ -120,36 +120,36 @@ void func_802B392C(s32 *a) { #define BITFS (o->oBehParams2ndByte == 1) #define BITS (o->oBehParams2ndByte == 2) -s32 func_802B39B8(void) { - set_obj_animation_and_sound_state(15); - if (obj_check_anim_frame(21)) +s32 bowser_set_anim_look_up_and_walk(void) { + cur_obj_init_animation_with_sound(15); + if (cur_obj_check_anim_frame(21)) o->oForwardVel = 3.0f; - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) return 1; else return 0; } -s32 func_802B3A30(void) { +s32 bowser_set_anim_slow_gait(void) { o->oForwardVel = 3.0f; - set_obj_animation_and_sound_state(13); - if (func_8029F788()) + cur_obj_init_animation_with_sound(13); + if (cur_obj_check_if_near_animation_end()) return 1; else return 0; } -s32 func_802B3A98(void) { - set_obj_animation_and_sound_state(14); - if (obj_check_anim_frame(20)) +s32 bowser_set_anim_look_down(void) { + cur_obj_init_animation_with_sound(14); + if (cur_obj_check_anim_frame(20)) o->oForwardVel = 0.0f; - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) return 1; else return 0; } -void func_802B3B0C(void) { +void bowser_initialize_action(void) { if (o->oBowserUnk88 == 0) o->oAction = 5; else if (o->oBowserUnk88 == 1) @@ -160,28 +160,28 @@ void func_802B3B0C(void) { o->oAction = 0; } -void ActionBowser5() // not much +void bowser_act_text_wait() // not much { o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(12); - func_802B3B0C(); + cur_obj_init_animation_with_sound(12); + bowser_initialize_action(); } -void ActionBowser6(void) { +void bowser_act_intro_walk(void) { if (o->oSubAction == 0) { - if (func_802B39B8()) + if (bowser_set_anim_look_up_and_walk()) o->oSubAction++; } else if (o->oSubAction == 1) { - if (func_802B3A30()) + if (bowser_set_anim_slow_gait()) o->oSubAction++; - } else if (func_802B3A98()) { + } else if (bowser_set_anim_look_down()) { if (o->oBowserUnk88 == 1) o->oBowserUnk88 = 0; - func_802B3B0C(); + bowser_initialize_action(); } } -static void Unknown802B3CCC(void) // unused +static void bowser_debug_actions(void) // unused { if (gDebugInfo[5][1] != 0) { o->oAction = D_8032F4FC[gDebugInfo[5][2] & 0xf]; @@ -189,7 +189,7 @@ static void Unknown802B3CCC(void) // unused } } -void func_802B3D24(void) { +void bowser_bitdw_act_controller(void) { f32 rand = RandomFloat(); if (o->oBowserUnk110 == 0) { if (o->oBowserUnkF4 & 2) { @@ -220,7 +220,7 @@ void func_802B3D24(void) { } } -void func_802B3E44(void) { +void bowser_bitfs_act_controller(void) { f32 rand = RandomFloat(); if (o->oBowserUnk110 == 0) { if (o->oBowserUnkF4 & 2) { @@ -246,7 +246,7 @@ void func_802B3E44(void) { } } -void func_802B3FDC(void) { +void bowser_general_bits_act_controller(void) { f32 rand = RandomFloat(); if (o->oBowserUnkF4 & 2) { if (o->oDistanceToMario < 1000.0f) { @@ -264,17 +264,17 @@ void func_802B3FDC(void) { o->oAction = 14; } -void func_802B4124(void) { +void bowser_set_act_jump(void) { o->oAction = 13; } -void func_802B4144(void) { +void bowser_bits_act_controller(void) { switch (o->oBowserUnk110) { case 0: if (o->oBowserUnk106 == 0) - func_802B3FDC(); + bowser_general_bits_act_controller(); else - func_802B4124(); + bowser_set_act_jump(); o->oBowserUnk110 = 1; break; case 1: @@ -285,7 +285,7 @@ void func_802B4144(void) { } #ifndef VERSION_JP -void func_u_802B4AF4(void) { +void bowser_reset_fallen_off_stage(void) { if (o->oVelY < 0 && o->oPosY < (o->oHomeY - 300.0f)) { o->oPosX = o->oPosZ = 0; o->oPosY = o->oHomeY + 2000.0f; @@ -295,38 +295,38 @@ void func_u_802B4AF4(void) { } #endif -void ActionBowser18() // unused? +void bowser_act_unused_slow_walk() // unused? { - if (func_802A4AB0(12)) + if (cur_obj_init_animation_and_check_if_near_end(12)) o->oAction = 0; } -void ActionBowser0() // only lasts one frame +void bowser_act_default() // only lasts one frame { o->oBowserEyesShut = 0; - set_obj_animation_and_sound_state(12); + cur_obj_init_animation_with_sound(12); // stop him still o->oAngleVelYaw = 0; o->oForwardVel = 0.0f; o->oVelY = 0.0f; if (BITDW) - func_802B3D24(); + bowser_bitdw_act_controller(); else if (BITFS) - func_802B3E44(); + bowser_bitfs_act_controller(); else - func_802B4144(); + bowser_bits_act_controller(); // Action 14 commonly follows } -void ActionBowser15(void) { +void bowser_act_breath_fire(void) { o->oForwardVel = 0.0f; if (o->oTimer == 0) - PlaySound2(SOUND_OBJ_BOWSER_INHALING); - if (func_802A4AB0(6)) + cur_obj_play_sound_2(SOUND_OBJ_BOWSER_INHALING); + if (cur_obj_init_animation_and_check_if_near_end(6)) o->oAction = 0; } -void ActionBowser14() // turn towards Mario +void bowser_act_walk_to_mario() // turn towards Mario { UNUSED s32 facing; // is Bowser facing Mario? s16 turnSpeed; @@ -339,13 +339,13 @@ void ActionBowser14() // turn towards Mario turnSpeed = 0x300; else turnSpeed = 0x200; - facing = obj_rotate_yaw_toward(o->oAngleToMario, turnSpeed); + facing = cur_obj_rotate_yaw_toward(o->oAngleToMario, turnSpeed); if (o->oSubAction == 0) { o->oBowserUnkF8 = 0; - if (func_802B39B8()) + if (bowser_set_anim_look_up_and_walk()) o->oSubAction++; } else if (o->oSubAction == 1) { - if (func_802B3A30()) { + if (bowser_set_anim_slow_gait()) { o->oBowserUnkF8++; if (o->oBowserUnkF4 & 0x20000) { if (o->oBowserUnkF8 > 4) @@ -353,18 +353,18 @@ void ActionBowser14() // turn towards Mario } else if (angleFromMario < 0x2000) o->oSubAction++; } - } else if (func_802B3A98()) + } else if (bowser_set_anim_look_down()) o->oAction = 0; } -void ActionBowser16(void) { +void bowser_act_teleport(void) { switch (o->oSubAction) { case 0: - obj_become_intangible(); + cur_obj_become_intangible(); o->oBowserUnk1AC = 0; o->oBowserUnkF8 = 30; if (o->oTimer == 0) - PlaySound2(SOUND_OBJ2_BOWSER_TELEPORT); + cur_obj_play_sound_2(SOUND_OBJ2_BOWSER_TELEPORT); if (o->oOpacity == 0) { o->oSubAction++; o->oMoveAngleYaw = o->oAngleToMario; @@ -381,7 +381,7 @@ void ActionBowser16(void) { if (o->oDistanceToMario > 500.0f) { o->oSubAction = 2; o->oMoveAngleYaw = o->oAngleToMario; // large change in angle? - PlaySound2(SOUND_OBJ2_BOWSER_TELEPORT); + cur_obj_play_sound_2(SOUND_OBJ2_BOWSER_TELEPORT); } break; case 2: @@ -389,29 +389,29 @@ void ActionBowser16(void) { o->oBowserUnk1AC = 0xFF; if (o->oOpacity == 0xFF) o->oAction = 0; - obj_become_tangible(); + cur_obj_become_tangible(); break; } } -void ActionBowser8(void) // only in sky +void bowser_act_spit_fire_into_sky(void) // only in sky { s32 frame; - set_obj_animation_and_sound_state(11); + cur_obj_init_animation_with_sound(11); frame = o->header.gfx.unk38.animFrame; if (frame > 24 && frame < 36) { - PlaySound(SOUND_AIR_BOWSER_SPIT_FIRE); + cur_obj_play_sound_1(SOUND_AIR_BOWSER_SPIT_FIRE); if (frame == 35) spawn_object_relative(1, 0, 0x190, 0x64, o, MODEL_RED_FLAME, bhvBlueBowserFlame); else spawn_object_relative(0, 0, 0x190, 0x64, o, MODEL_RED_FLAME, bhvBlueBowserFlame); } - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) o->oAction = 0; o->oBowserUnkF4 |= 0x20000; } -void ActionBowser12(void) { +void bowser_act_hit_mine(void) { if (o->oTimer == 0) { o->oForwardVel = -400.0f; o->oVelY = 100.0f; @@ -419,21 +419,21 @@ void ActionBowser12(void) { o->oBowserEyesShut = 1; } if (o->oSubAction == 0) { - set_obj_animation_and_sound_state(25); + cur_obj_init_animation_with_sound(25); o->oSubAction++; o->oBowserUnkF8 = 0; } else if (o->oSubAction == 1) { - set_obj_animation_and_sound_state(25); - func_8029F728(); - func_802B392C(&o->oBowserUnkF8); + cur_obj_init_animation_with_sound(25); + cur_obj_extend_animation_if_at_end(); + bowser_bounce(&o->oBowserUnkF8); if ((o->oBowserUnkF8 > 2)) { - set_obj_animation_and_sound_state(26); + cur_obj_init_animation_with_sound(26); o->oVelY = 0.0f; o->oForwardVel = 0.0f; o->oSubAction++; } } else if (o->oSubAction == 2) { - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { if (o->oHealth == 1) o->oAction = 3; else @@ -444,22 +444,22 @@ void ActionBowser12(void) { } } -s32 func_802B4A44(void) { - set_obj_animation_and_sound_state(9); - if (obj_check_anim_frame(11)) +s32 bowser_set_anim_in_air(void) { + cur_obj_init_animation_with_sound(9); + if (cur_obj_check_anim_frame(11)) return 1; else return 0; } -s32 func_802B4A94(void) { +s32 bowser_land(void) { if (o->oMoveFlags & 1) { o->oForwardVel = 0; o->oVelY = 0; - func_802AA618(0, 0, 60.0f); - set_obj_animation_and_sound_state(8); + spawn_mist_particles_variable(0, 0, 60.0f); + cur_obj_init_animation_with_sound(8); o->header.gfx.unk38.animFrame = 0; - obj_start_cam_event(o, CAM_EVENT_BOWSER_JUMP); + cur_obj_start_cam_event(o, CAM_EVENT_BOWSER_JUMP); if (BITDW) { if (o->oDistanceToMario < 850.0f) gMarioObject->oInteractStatus |= INTERACT_GRABBABLE; @@ -471,112 +471,102 @@ s32 func_802B4A94(void) { return 0; } -void func_802B4BA4(void) { +void bowser_short_second_hop(void) { if (BITS && o->oBowserUnkF4 & 0x10000) if (o->oBowserDistToCentre > 1000.0f) o->oForwardVel = 60.0f; } -void ActionBowser13(void) { +void bowser_act_jump(void) { UNUSED s32 unused; if (o->oSubAction == 0) { - if (func_802B4A44()) { + if (bowser_set_anim_in_air()) { if (BITS && o->oBowserUnkF4 & 0x10000) o->oVelY = 70.0f; else o->oVelY = 80.0f; o->oBowserUnkF8 = 0; - func_802B4BA4(); + bowser_short_second_hop(); o->oSubAction++; } } else if (o->oSubAction == 1) { #ifndef VERSION_JP if (o->oBehParams2ndByte == 2 && o->oBowserUnkF4 & 0x10000) - func_u_802B4AF4(); - if (func_802B4A94()) { - o->oBowserUnkF4 &= 0xfffeffff; - o->oForwardVel = 0.0f; - o->oSubAction++; - func_802B38B4(); - if (BITFS) - o->oAction = 19; - } else { - } -#else - if (func_802B4A94()) { - o->oBowserUnkF4 &= 0xfffeffff; - o->oForwardVel = 0.0f; - o->oSubAction++; - func_802B38B4(); - if (BITFS) - o->oAction = 19; - } else { - } + bowser_reset_fallen_off_stage(); #endif - } else if (func_8029F788()) + if (bowser_land()) { + o->oBowserUnkF4 &= ~0x10000; + o->oForwardVel = 0.0f; + o->oSubAction++; + bowser_spawn_shockwave(); + if (BITFS) + o->oAction = 19; + } else { + } + } else if (cur_obj_check_if_near_animation_end()) o->oAction = 0; } -void ActionBowser17(void) { +void bowser_act_jump_towards_mario(void) { f32 sp1C = D_8032F50C[0]; f32 sp18 = D_8032F510[0]; if (o->oSubAction == 0) { - if (func_802B4A44()) { + if (bowser_set_anim_in_air()) { o->oVelY = sp1C; o->oForwardVel = sp18; o->oBowserUnkF8 = 0; o->oSubAction++; } } else if (o->oSubAction == 1) { - if (func_802B4A94()) + if (bowser_land()) o->oSubAction++; - } else if (func_8029F788()) + } else if (cur_obj_check_if_near_animation_end()) o->oAction = 0; } -void ActionBowser10(void) { +void bowser_act_hit_edge(void) { o->oForwardVel = 0.0f; if (o->oTimer == 0) o->oBowserUnkF8 = 0; switch (o->oSubAction) { case 0: - set_obj_animation_and_sound_state(23); - if (func_8029F788()) + cur_obj_init_animation_with_sound(23); + if (cur_obj_check_if_near_animation_end()) o->oBowserUnkF8++; if (o->oBowserUnkF8 > 0) o->oSubAction++; break; case 1: - set_obj_animation_and_sound_state(24); - if (func_8029F788()) + cur_obj_init_animation_with_sound(24); + if (cur_obj_check_if_near_animation_end()) o->oAction = 11; break; } } -void ActionBowser9(void) { +void bowser_act_spit_fire_onto_floor(void) { if (gHudDisplay.wedges < 4) o->oBowserUnk108 = 3; else o->oBowserUnk108 = RandomFloat() * 3.0f + 1.0f; - set_obj_animation_and_sound_state(22); - if (obj_check_anim_frame(5)) + cur_obj_init_animation_with_sound(22); + if (cur_obj_check_anim_frame(5)) obj_spit_fire(0, 200, 180, 7.0f, MODEL_RED_FLAME, 30.0f, 10.0f, 0x1000); - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) o->oSubAction++; if (o->oSubAction >= o->oBowserUnk108) o->oAction = 0; } -s32 func_802B5108(s32 a0, s16 a1) { +s32 bowser_turn_on_timer(s32 a0, s16 a1) { if (o->oSubAction == 0) { - if (func_802A4AB0(15)) + if (cur_obj_init_animation_and_check_if_near_end(15)) o->oSubAction++; } else if (o->oSubAction == 1) { - if (func_802A4AB0(14)) + if (cur_obj_init_animation_and_check_if_near_end(14)) o->oSubAction++; } else - set_obj_animation_and_sound_state(12); + cur_obj_init_animation_with_sound(12); o->oForwardVel = 0.0f; o->oMoveAngleYaw += a1; if (o->oTimer >= a0) @@ -585,24 +575,24 @@ s32 func_802B5108(s32 a0, s16 a1) { return 0; } -void ActionBowser11(void) { - if (func_802B5108(63, 0x200)) +void bowser_act_turn_from_edge(void) { + if (bowser_turn_on_timer(63, 0x200)) o->oAction = 0; } -void ActionBowser7(void) { +void bowser_act_charge_mario(void) { s32 sp34; if (o->oTimer == 0) o->oForwardVel = 0.0f; switch (o->oSubAction) { case 0: o->oBowserUnkF8 = 0; - if (func_802A4AB0(18)) + if (cur_obj_init_animation_and_check_if_near_end(18)) o->oSubAction = 1; break; case 1: o->oForwardVel = 50.0f; - if (func_802A4AB0(0x13) != 0) { + if (cur_obj_init_animation_and_check_if_near_end(0x13) != 0) { o->oBowserUnkF8++; if (o->oBowserUnkF8 >= 6) o->oSubAction = 3; @@ -610,22 +600,22 @@ void ActionBowser7(void) { if (abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw) > 0x2000) o->oSubAction = 3; } - obj_rotate_yaw_toward(o->oAngleToMario, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); break; case 3: o->oBowserUnkF8 = 0; - set_obj_animation_and_sound_state(21); + cur_obj_init_animation_with_sound(21); spawn_object_relative_with_scale(0, 100, -50, 0, 3.0f, o, MODEL_SMOKE, bhvWhitePuffSmoke2); spawn_object_relative_with_scale(0, -100, -50, 0, 3.0f, o, MODEL_SMOKE, bhvWhitePuffSmoke2); if (approach_f32_signed(&o->oForwardVel, 0, -1.0f)) o->oSubAction = 2; - func_8029F728(); + cur_obj_extend_animation_if_at_end(); break; case 2: o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(20); - if (func_8029F788()) { + cur_obj_init_animation_with_sound(20); + if (cur_obj_check_if_near_animation_end()) { if (BITS) sp34 = 10; else @@ -634,17 +624,17 @@ void ActionBowser7(void) { o->oAction = 0; o->oBowserUnkF8++; } - func_8029F728(); + cur_obj_extend_animation_if_at_end(); break; } if (o->oMoveFlags & 0x400) o->oAction = 10; } -s32 func_802B5588(void) { +s32 bowser_check_hit_mine(void) { struct Object *mine; f32 sp18; - mine = obj_find_nearest_object_with_behavior(bhvBowserBomb, &sp18); + mine = cur_obj_find_nearest_object_with_behavior(bhvBowserBomb, &sp18); if (mine != NULL && sp18 < 800.0f) { mine->oInteractStatus |= INTERACT_MR_BLIZZARD; return 1; @@ -652,21 +642,21 @@ s32 func_802B5588(void) { return 0; } -void ActionBowser1(void) // unused? +void bowser_act_thrown_dropped(void) { UNUSED s32 unused; if (o->oTimer < 2) o->oBowserUnkF8 = 0; if (o->oSubAction == 0) { - set_obj_animation_and_sound_state(2); - func_802B392C(&o->oBowserUnkF8); + cur_obj_init_animation_with_sound(2); + bowser_bounce(&o->oBowserUnkF8); if (o->oMoveFlags & 2) { o->oForwardVel = 0.0f; o->oSubAction++; } - } else if (func_802A4AB0(0)) + } else if (cur_obj_init_animation_and_check_if_near_end(0)) o->oAction = 0; - if (func_802B5588()) { + if (bowser_check_hit_mine()) { o->oHealth--; if (o->oHealth <= 0) o->oAction = 4; @@ -675,7 +665,7 @@ void ActionBowser1(void) // unused? } } -void func_802B5738(void) { +void bowser_set_goal_invisible(void) { o->oBowserUnk1AC = 0; if (o->oOpacity == 0) { o->oForwardVel = 0.0f; @@ -684,11 +674,11 @@ void func_802B5738(void) { } } -void ActionBowser2(void) { +void bowser_act_jump_onto_stage(void) { s32 sp2C; UNUSED s32 unused; - s8 *sp24 = (s8 *) o->oFloor; - if (sp24 != NULL && sp24[4] & 1) + struct Surface *sp24 = o->oFloor; + if (sp24 != NULL && sp24->flags & 1) sp2C = 1; else sp2C = 0; @@ -703,18 +693,18 @@ void ActionBowser2(void) { o->oFaceAngleRoll += 0x800; if (!(o->oFaceAnglePitch & 0xFFFF)) o->oSubAction++; - func_802B5738(); + bowser_set_goal_invisible(); break; case 1: - set_obj_animation_and_sound_state(9); - if (obj_check_anim_frame(11)) { + cur_obj_init_animation_with_sound(9); + if (cur_obj_check_anim_frame(11)) { o->oMoveAngleYaw = o->oBowserAngleToCentre; o->oVelY = 150.0f; o->oBowserUnk1AC = 0xFF; o->oBowserUnkF8 = 0; o->oSubAction++; } else - func_802B5738(); + bowser_set_goal_invisible(); break; case 2: if (o->oPosY > o->oHomeY) { @@ -723,22 +713,22 @@ void ActionBowser2(void) { if (absf(o->oFloorHeight - o->oHomeY) < 100.0f) approach_f32_signed(&o->oForwardVel, 0, -5.0f); else - obj_forward_vel_approach_upward(150.0f, 2.0f); + cur_obj_forward_vel_approach_upward(150.0f, 2.0f); } else - obj_forward_vel_approach_upward(150.0f, 2.0f); + cur_obj_forward_vel_approach_upward(150.0f, 2.0f); } - if (func_802B4A94()) { + if (bowser_land()) { o->oDragStrength = 10.0f; o->oSubAction++; if (sp2C == 0) - func_802B38B4(); + bowser_spawn_shockwave(); else if (BITS) o->oAction = 13; if (BITFS) o->oAction = 19; } #ifndef VERSION_JP - func_u_802B4AF4(); + bowser_reset_fallen_off_stage(); #else if (o->oVelY < 0.0f && o->oPosY < o->oHomeY - 300.0f) { o->oPosZ = 0.0f, o->oPosX = o->oPosZ; @@ -748,35 +738,35 @@ void ActionBowser2(void) { #endif break; case 3: - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = 0; o->oBowserUnkF4 &= ~0x10000; - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } break; } print_debug_bottom_up("sp %d", o->oForwardVel); } -void ActionBowser3(void) { - if (item_in_array(o->oTimer, D_8032F514)) - PlaySound2(SOUND_OBJ_BOWSER_WALK); - if (func_802A4AB0(10)) +void bowser_act_dance(void) { + if (is_item_in_array(o->oTimer, D_8032F514)) + cur_obj_play_sound_2(SOUND_OBJ_BOWSER_WALK); + if (cur_obj_init_animation_and_check_if_near_end(10)) o->oAction = 0; } -void func_802B5C78(void) { +void bowser_spawn_grand_star_key(void) { if (BITS) gSecondCameraFocus = spawn_object(o, MODEL_STAR, bhvGrandStar); else { gSecondCameraFocus = spawn_object(o, MODEL_BOWSER_KEY, bhvBowserKey); - PlaySound2(SOUND_GENERAL2_BOWSER_KEY); + cur_obj_play_sound_2(SOUND_GENERAL2_BOWSER_KEY); } gSecondCameraFocus->oAngleVelYaw = o->oAngleVelYaw; } -void func_802B5D18(void) { - set_obj_animation_and_sound_state(16); +void bowser_fly_back_dead(void) { + cur_obj_init_animation_with_sound(16); if (BITS) o->oForwardVel = -400.0f; else @@ -787,29 +777,29 @@ void func_802B5D18(void) { o->oSubAction++; } -void func_802B5DD8(void) { +void bowser_dead_bounce(void) { o->oBowserEyesShut = 1; - func_802B392C(&o->oBowserUnkF8); + bowser_bounce(&o->oBowserUnkF8); if (o->oMoveFlags & 1) - PlaySound2(SOUND_OBJ_BOWSER_WALK); + cur_obj_play_sound_2(SOUND_OBJ_BOWSER_WALK); if (o->oMoveFlags & 2) { o->oForwardVel = 0.0f; o->oSubAction++; } } -s32 func_802B5E7C(void) { +s32 bowser_dead_wait_for_mario(void) { s32 ret = 0; - obj_become_intangible(); - if (func_802A4AB0(17) && o->oDistanceToMario < 700.0f + cur_obj_become_intangible(); + if (cur_obj_init_animation_and_check_if_near_end(17) && o->oDistanceToMario < 700.0f && abs_angle_diff(gMarioObject->oMoveAngleYaw, o->oAngleToMario) > 0x6000) ret = 1; - func_8029F728(); + cur_obj_extend_animation_if_at_end(); o->oBowserUnkF8 = 0; return ret; } -s32 func_802B5F20(void) { +s32 bowser_dead_twirl_into_trophy(void) { s32 ret = 0; if (o->header.gfx.scale[0] < 0.8) o->oAngleVelYaw += 0x80; @@ -829,37 +819,37 @@ s32 func_802B5F20(void) { return ret; } -void func_802B60B8(void) { - obj_scale(0); +void bowser_dead_hide(void) { + cur_obj_scale(0); o->oForwardVel = 0; o->oVelY = 0; o->oGravity = 0; } -s32 func_802B6120(void) { +s32 bowser_dead_not_bits_end(void) { s32 ret = 0; if (o->oBowserUnkF8 < 2) { if (o->oBowserUnkF8 == 0) { func_8031FFB4(0, 60, 40); o->oBowserUnkF8++; } - if (obj_update_dialog(2, 18, sBowserDefeatedDialogText[o->oBehParams2ndByte], 0)) { + if (cur_obj_update_dialog(2, 18, sBowserDefeatedDialogText[o->oBehParams2ndByte], 0)) { o->oBowserUnkF8++; - PlaySound2(SOUND_GENERAL2_BOWSER_EXPLODE); + cur_obj_play_sound_2(SOUND_GENERAL2_BOWSER_EXPLODE); sequence_player_unlower(0, 60); sequence_player_fade_out(0, 1); } - } else if (func_802B5F20()) { - func_802B60B8(); + } else if (bowser_dead_twirl_into_trophy()) { + bowser_dead_hide(); spawn_triangle_break_particles(20, 116, 1.0f, 0); - func_802B5C78(); + bowser_spawn_grand_star_key(); set_mario_npc_dialog(0); ret = 1; } return ret; } -s32 func_802B6254(void) { +s32 bowser_dead_bits_end(void) { UNUSED s32 unused; s32 ret = 0; s32 dialogID; @@ -872,32 +862,32 @@ s32 func_802B6254(void) { func_8031FFB4(0, 60, 40); o->oBowserUnkF8++; } - if (obj_update_dialog(2, 18, dialogID, 0)) { - obj_set_model(MODEL_BOWSER2); + if (cur_obj_update_dialog(2, 18, dialogID, 0)) { + cur_obj_set_model(MODEL_BOWSER2); sequence_player_unlower(0, 60); sequence_player_fade_out(0, 1); - func_802B5C78(); + bowser_spawn_grand_star_key(); o->oBowserUnkF8++; } } else if (o->oOpacity > 4) o->oOpacity -= 4; else { - func_802B60B8(); + bowser_dead_hide(); ret = 1; } return ret; } -void ActionBowser4(void) { +void bowser_act_dead(void) { switch (o->oSubAction) { case 0: - func_802B5D18(); + bowser_fly_back_dead(); break; case 1: - func_802B5DD8(); + bowser_dead_bounce(); break; case 2: - if (func_802B5E7C()) { + if (bowser_dead_wait_for_mario()) { o->oBowserUnkF8 = 0; if (BITS) o->oSubAction = 10; @@ -908,13 +898,13 @@ void ActionBowser4(void) { } break; case 3: - if (func_802B6120()) + if (bowser_dead_not_bits_end()) o->oSubAction++; break; case 4: break; case 10: - if (func_802B6254()) + if (bowser_dead_bits_end()) o->oSubAction++; break; case 11: @@ -922,15 +912,15 @@ void ActionBowser4(void) { } } -void func_802B64E8(struct Object *bowser, s16 a1) { +void bowser_tilt_platform(struct Object *platform, s16 a1) { s16 angle; angle = o->oBowserAngleToCentre + 0x8000; - bowser->oAngleVelPitch = coss(angle) * a1; - bowser->oAngleVelRoll = -sins(angle) * a1; + platform->oAngleVelPitch = coss(angle) * a1; + platform->oAngleVelRoll = -sins(angle) * a1; } -void ActionBowser19(void) { - struct Object *platform = obj_nearest_object_with_behavior(bhvTiltingBowserLavaPlatform); +void bowser_act_ride_tilting_platform(void) { + struct Object *platform = cur_obj_nearest_object_with_behavior(bhvTiltingBowserLavaPlatform); UNUSED s16 sp2A = o->oBowserAngleToCentre + 0x8000; s16 sp28; UNUSED s32 unused; @@ -948,7 +938,7 @@ void ActionBowser19(void) { sp28 = (D_8032F520[i][2] - o->oTimer - 1) * sp28; else sp28 = (o->oTimer - D_8032F520[i - 1][2]) * sp28; - func_802B64E8(platform, sp28); + bowser_tilt_platform(platform, sp28); if (sp28 != 0) play_sound(SOUND_ENV_UNKNOWN4, platform->header.gfx.cameraToObject); sp1C = 0; @@ -964,10 +954,10 @@ void ActionBowser19(void) { platform->oFaceAngleRoll = 0; } } - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } -s32 func_802B67C4(void) // bowser off stage? +s32 bowser_check_fallen_off_stage(void) // bowser off stage? { if (o->oAction != 2 && o->oAction != 19) { if (o->oPosY < o->oHomeY - 1000.0f) @@ -982,11 +972,11 @@ s32 func_802B67C4(void) // bowser off stage? return 0; } -void (*sBowserActions[])(void) = { ActionBowser0, ActionBowser1, ActionBowser2, ActionBowser3, - ActionBowser4, ActionBowser5, ActionBowser6, ActionBowser7, - ActionBowser8, ActionBowser9, ActionBowser10, ActionBowser11, - ActionBowser12, ActionBowser13, ActionBowser14, ActionBowser15, - ActionBowser16, ActionBowser17, ActionBowser18, ActionBowser19 }; +void (*sBowserActions[])(void) = { bowser_act_default, bowser_act_thrown_dropped, bowser_act_jump_onto_stage, bowser_act_dance, + bowser_act_dead, bowser_act_text_wait, bowser_act_intro_walk, bowser_act_charge_mario, + bowser_act_spit_fire_into_sky, bowser_act_spit_fire_onto_floor, bowser_act_hit_edge, bowser_act_turn_from_edge, + bowser_act_hit_mine, bowser_act_jump, bowser_act_walk_to_mario, bowser_act_breath_fire, + bowser_act_teleport, bowser_act_jump_towards_mario, bowser_act_unused_slow_walk, bowser_act_ride_tilting_platform }; struct SoundState D_8032F5B8[] = { { 0, 0, 0, NO_SOUND }, { 0, 0, 0, NO_SOUND }, { 0, 0, 0, NO_SOUND }, @@ -1038,17 +1028,17 @@ struct Struct8032F698 D_8032F698[] = { { NULL, 0, 0, 0, 0 }, { bowser_3_seg7_collision_07004FB4, 800, -1000, -31744, 0 }, { bowser_3_seg7_collision_07005038, -800, -1000, 31744, 0 } }; -void func_802B688C(void) { +void bowser_free_update(void) { struct Surface *floor; struct Object *platform; UNUSED f32 floorHeight; if ((platform = o->platform) != NULL) apply_platform_displacement(0, platform); o->oBowserUnk10E = 0; - obj_update_floor_and_walls(); - obj_call_action_function(sBowserActions); - obj_move_standard(-78); - if (func_802B67C4()) + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sBowserActions); + cur_obj_move_standard(-78); + if (bowser_check_fallen_off_stage()) o->oAction = 2; // bowser go home? floorHeight = find_floor(o->oPosX, o->oPosY, o->oPosZ, &floor); if ((floor != NULL) && (floor->object != 0)) @@ -1058,18 +1048,18 @@ void func_802B688C(void) { exec_anim_sound_state(D_8032F5B8); } -void func_802B697C(void) { +void bowser_held_update(void) { o->oBowserUnkF4 &= ~0x20000; - obj_become_intangible(); + cur_obj_become_intangible(); switch (o->oBowserUnk10E) { case 0: - PlaySound2(SOUND_OBJ_BOWSER_TAIL_PICKUP); - func_8029FA5C(3, 1); + cur_obj_play_sound_2(SOUND_OBJ_BOWSER_TAIL_PICKUP); + cur_obj_unrender_and_reset_state(3, 1); o->oBowserUnk10E++; break; case 1: - if (func_8029F788()) { - set_obj_animation_and_sound_state(2); + if (cur_obj_check_if_near_animation_end()) { + cur_obj_init_animation_with_sound(2); o->oBowserUnk10E++; } break; @@ -1082,10 +1072,10 @@ void func_802B697C(void) { o->oMoveAngleYaw = gMarioObject->oMoveAngleYaw; } -void func_802B6AC0(void) { +void bowser_thrown_dropped_update(void) { f32 sp1C; o->oBowserUnk10E = 0; - obj_get_thrown_or_placed(1.0f, 1.0f, 1); + cur_obj_get_thrown_or_placed(1.0f, 1.0f, 1); sp1C = o->oBowserHeldAngleVelYaw / 3000.0 * 70.0f; if (sp1C < 0.0f) sp1C = -sp1C; @@ -1093,7 +1083,7 @@ void func_802B6AC0(void) { sp1C *= 2.5; // > 90 => get bigger? o->oForwardVel = coss(o->oBowserHeldAnglePitch) * sp1C; o->oVelY = -sins(o->oBowserHeldAnglePitch) * sp1C; - obj_become_intangible(); + cur_obj_become_intangible(); o->prevObj->oAction = 1; // not sure what prevObj is o->prevObj->oTimer = 0; o->prevObj->oSubAction = 0; @@ -1120,19 +1110,19 @@ void bhv_bowser_loop(void) { o->oBowserUnkF4 |= 8; switch (o->oHeldState) { case HELD_FREE: - func_802B688C(); + bowser_free_update(); break; case HELD_HELD: - func_802B697C(); + bowser_held_update(); break; case HELD_THROWN: - func_802B6AC0(); + bowser_thrown_dropped_update(); break; case HELD_DROPPED: - func_802B6AC0(); + bowser_thrown_dropped_update(); break; } - obj_align_gfx_with_floor(); + cur_obj_align_gfx_with_floor(); if (o->oAction != 4) if (o->oBowserUnk1AC != o->oOpacity) { if (o->oBowserUnk1AC > o->oOpacity) { @@ -1161,7 +1151,7 @@ void bhv_bowser_init(void) { o->oBehParams2ndByte = level; o->oBowserUnk1B2 = D_8032F690[level]; o->oHealth = D_8032F694[level]; - obj_start_cam_event(o, CAM_EVENT_BOWSER_INIT); + cur_obj_start_cam_event(o, CAM_EVENT_BOWSER_INIT); o->oAction = 5; o->oBowserUnk1AE = 0; o->oBowserEyesShut = 0; @@ -1171,22 +1161,22 @@ void bhv_bowser_init(void) { #undef BITFS #undef BITS -Gfx *Geo18_802B798C(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { +Gfx *geo_update_body_rot_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { Mat4 sp20; struct Object *sp1C; if (run == TRUE) { sp1C = (struct Object *) gCurGraphNodeObject; if (sp1C->prevObj != NULL) { - func_8029D704(sp20, mtx, gCurGraphNodeCamera->matrixPtr); - func_8029D558(sp20, sp1C->prevObj); - func_8029EA0C(sp1C->prevObj); + create_transformation_from_matrices(sp20, mtx, gCurGraphNodeCamera->matrixPtr); + obj_update_pos_from_parent_transformation(sp20, sp1C->prevObj); + obj_set_gfx_pos_from_pos(sp1C->prevObj); } } return NULL; } -void func_802B70C8(struct Object *a0, struct GraphNodeSwitchCase *switchCase) { +void bowser_open_eye_switch(struct Object *a0, struct GraphNodeSwitchCase *switchCase) { s32 sp1C; s16 sp1A; sp1A = abs_angle_diff(a0->oMoveAngleYaw, a0->oAngleToMario); @@ -1257,7 +1247,7 @@ Gfx *geo_switch_bowser_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx) { obj = gCurGraphNodeHeldObject->objNode; switch (sp36 = obj->oBowserEyesShut) { case 0: // eyes open, handle eye looking direction - func_802B70C8(obj, switchCase); + bowser_open_eye_switch(obj, switchCase); break; case 1: // eyes closed, blinking switchCase->selectedCase = 2; @@ -1268,7 +1258,7 @@ Gfx *geo_switch_bowser_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx) { return NULL; } -Gfx *Geo18_802B7D44(s32 a0, struct GraphNode *node, UNUSED s32 a2) { +Gfx *geo_bits_bowser_coloring(s32 a0, struct GraphNode *node, UNUSED s32 a2) { Gfx *sp2C = NULL; Gfx *sp28; struct Object *sp24; @@ -1293,14 +1283,14 @@ Gfx *Geo18_802B7D44(s32 a0, struct GraphNode *node, UNUSED s32 a2) { return sp2C; } -void ActionFallingBowserPlatform0(void) { - o->oPlatformUnkF8 = obj_nearest_object_with_behavior(bhvBowser); - set_object_collision_data(o, D_8032F698[o->oBehParams2ndByte].unk0); +void falling_bowser_plat_act_0(void) { + o->oPlatformUnkF8 = cur_obj_nearest_object_with_behavior(bhvBowser); + obj_set_collision_data(o, D_8032F698[o->oBehParams2ndByte].unk0); if (o->oPlatformUnkF8 != 0) o->oAction = 1; } -void ActionFallingBowserPlatform1(void) { +void falling_bowser_plat_act_1(void) { UNUSED s32 unused; struct Object *sp0 = o->oPlatformUnkF8; if (sp0->platform == o) @@ -1317,13 +1307,13 @@ void ActionFallingBowserPlatform1(void) { } } -void ActionFallingBowserPlatform2(void) { +void falling_bowser_plat_act_2(void) { Vec3f sp24; s16 sp22; f32 sp1C; UNUSED struct Object *sp18 = o->oPlatformUnkF8; if (o->oTimer == 0 || o->oTimer == 22) - PlaySound2(SOUND_GENERAL_BOWSER_PLATFORM_2); + cur_obj_play_sound_2(SOUND_GENERAL_BOWSER_PLATFORM_2); if (o->oTimer < 22) { set_environmental_camera_shake(SHAKE_ENV_FALLING_BITS_PLAT); o->oVelY = 8.0f; @@ -1333,24 +1323,24 @@ void ActionFallingBowserPlatform2(void) { if ((o->oTimer & 1) == 0 && o->oTimer < 14) { sp22 = D_8032F698[o->oBehParams2ndByte].unk3 + (gDebugInfo[4][1] << 8); sp1C = -(o->oTimer / 2) * 290 + 1740; - func_802B8F7C(sp24, &o->oPosX); + vec3f_copy_2(sp24, &o->oPosX); o->oPosX = D_8032F698[o->oBehParams2ndByte].unk1 + sins(sp22 + 5296) * sp1C; o->oPosZ = D_8032F698[o->oBehParams2ndByte].unk2 + coss(sp22 + 5296) * sp1C; o->oPosY = 307.0f; - func_802AA618(4, 0, 100.0f); + spawn_mist_particles_variable(4, 0, 100.0f); o->oPosX = D_8032F698[o->oBehParams2ndByte].unk1 + sins(sp22 - 5296) * sp1C; o->oPosZ = D_8032F698[o->oBehParams2ndByte].unk2 + coss(sp22 - 5296) * sp1C; - func_802AA618(4, 0, 100); - func_802B8F7C(&o->oPosX, sp24); + spawn_mist_particles_variable(4, 0, 100); + vec3f_copy_2(&o->oPosX, sp24); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (o->oTimer > 300) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void (*sFallingBowserPlatformActions[])(void) = { ActionFallingBowserPlatform0, - ActionFallingBowserPlatform1, - ActionFallingBowserPlatform2 }; +void (*sFallingBowserPlatformActions[])(void) = { falling_bowser_plat_act_0, + falling_bowser_plat_act_1, + falling_bowser_plat_act_2 }; struct ObjectHitbox sGrowingBowserFlameHitbox = { /* interactType: */ INTERACT_FLAME, @@ -1379,17 +1369,17 @@ struct ObjectHitbox sBowserFlameHitbox = { f32 D_8032F748[] = { -8.0f, -6.0f, -3.0f }; void bhv_falling_bowser_platform_loop(void) { - obj_call_action_function(sFallingBowserPlatformActions); + cur_obj_call_action_function(sFallingBowserPlatformActions); } -void func_802B7A58(void) { - mark_object_for_deletion(o); +void bowser_flame_despawn(void) { + obj_mark_for_deletion(o); spawn_object_with_scale(o, MODEL_NONE, bhvBlackSmokeUpward, 1.0f); if (RandomFloat() < 0.1) spawn_object(o, MODEL_YELLOW_COIN, bhvTemporaryYellowCoin); } -s32 func_802B7ADC(s32 a0) { +s32 bowser_flame_should_despawn(s32 a0) { if (a0 < o->oTimer) return 1; if (o->oFloorType == 1) @@ -1419,7 +1409,7 @@ void bhv_flame_large_burning_out_init(void) { o->oFlameUnkF4 = 7.0f; } -void func_802B7CFC(void) { +void bowser_flame_move(void) { s32 sp4; sp4 = ((o->oFlameUnkF8 + gGlobalTimer) & 0x3F) << 10; o->oPosX += sins(o->oMoveAngleYaw) * sins(sp4) * 4.0f; @@ -1427,16 +1417,16 @@ void func_802B7CFC(void) { } void bhv_flame_bowser_loop(void) { - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); if (o->oVelY < -4.0f) o->oVelY = -4.0f; if (o->oAction == 0) { - obj_become_intangible(); - func_802B7CFC(); + cur_obj_become_intangible(); + bowser_flame_move(); if (o->oMoveFlags & 1) { o->oAction++; - if (obj_has_behavior(bhvFlameLargeBurningOut)) + if (cur_obj_has_behavior(bhvFlameLargeBurningOut)) o->oFlameUnkF4 = 8.0f; else o->oFlameUnkF4 = RandomFloat() * 2 + 6.0f; @@ -1445,21 +1435,21 @@ void bhv_flame_bowser_loop(void) { o->oGravity = 0; } } else { - obj_become_tangible(); + cur_obj_become_tangible(); if (o->oTimer > o->oFlameUnkF4 * 10 + 5.0f) { o->oFlameUnkF4 -= 0.15; if (o->oFlameUnkF4 <= 0) - func_802B7A58(); + bowser_flame_despawn(); } } - obj_scale(o->oFlameUnkF4); + cur_obj_scale(o->oFlameUnkF4); o->oGraphYOffset = o->header.gfx.scale[1] * 14.0f; - set_object_hitbox(o, &sBowserFlameHitbox); + obj_set_hitbox(o, &sBowserFlameHitbox); } void bhv_flame_moving_forward_growing_init(void) { o->oForwardVel = 30.0f; - translate_object_xz_random(o, 80.0f); + obj_translate_xz_random(o, 80.0f); o->oAnimState = (s32)(RandomFloat() * 10.0f); o->oFlameUnkF4 = 3.0f; } @@ -1467,19 +1457,19 @@ void bhv_flame_moving_forward_growing_init(void) { void bhv_flame_moving_forward_growing_loop(void) { UNUSED s32 unused; UNUSED struct Object *sp18; - set_object_hitbox(o, &sGrowingBowserFlameHitbox); + obj_set_hitbox(o, &sGrowingBowserFlameHitbox); o->oFlameUnkF4 = o->oFlameUnkF4 + 0.5; - obj_scale(o->oFlameUnkF4); + cur_obj_scale(o->oFlameUnkF4); if (o->oMoveAnglePitch > 0x800) o->oMoveAnglePitch -= 0x200; - func_802A2A38(); - obj_update_floor_height(); + cur_obj_set_pos_via_transform(); + cur_obj_update_floor_height(); if (o->oFlameUnkF4 > 30.0f) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->oPosY < o->oFloorHeight) { o->oPosY = o->oFloorHeight; sp18 = spawn_object(o, MODEL_RED_FLAME, bhvFlameBowser); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } @@ -1497,11 +1487,11 @@ void bhv_flame_floating_landing_init(void) { void bhv_flame_floating_landing_loop(void) { UNUSED s32 unused; - obj_update_floor_and_walls(); - obj_move_standard(0x4e); - func_802B7CFC(); - if (func_802B7ADC(900)) - mark_object_for_deletion(o); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(0x4e); + bowser_flame_move(); + if (bowser_flame_should_despawn(900)) + obj_mark_for_deletion(o); if (o->oVelY < D_8032F748[o->oBehParams2ndByte]) o->oVelY = D_8032F748[o->oBehParams2ndByte]; if (o->oMoveFlags & 1) { @@ -1509,13 +1499,13 @@ void bhv_flame_floating_landing_loop(void) { spawn_object(o, MODEL_RED_FLAME, bhvFlameLargeBurningOut); else spawn_object(o, MODEL_NONE, bhvBlueFlamesGroup); //? wonder if they meant MODEL_BLUE_FLAME? - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } o->oGraphYOffset = o->header.gfx.scale[1] * 14.0f; } void bhv_blue_bowser_flame_init(void) { - translate_object_xz_random(o, 80.0f); + obj_translate_xz_random(o, 80.0f); o->oAnimState = (s32)(RandomFloat() * 10.0f); o->oVelY = 7.0f; o->oForwardVel = 35.0f; @@ -1527,12 +1517,12 @@ void bhv_blue_bowser_flame_init(void) { void bhv_blue_bowser_flame_loop(void) { s32 i; - set_object_hitbox(o, &sGrowingBowserFlameHitbox); + obj_set_hitbox(o, &sGrowingBowserFlameHitbox); if (o->oFlameUnkF4 < 16.0f) o->oFlameUnkF4 = o->oFlameUnkF4 + 0.5; - obj_scale(o->oFlameUnkF4); - obj_update_floor_and_walls(); - obj_move_standard(0x4e); + cur_obj_scale(o->oFlameUnkF4); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(0x4e); if (o->oTimer > 0x14) { if (o->oBehParams2ndByte == 0) for (i = 0; i < 3; i++) @@ -1544,7 +1534,7 @@ void bhv_blue_bowser_flame_loop(void) { spawn_object_relative_with_scale(2, 0, 0, 0, 8.0f, o, MODEL_BLUE_FLAME, bhvFlameFloatingLanding); } - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } @@ -1559,27 +1549,27 @@ void bhv_flame_bouncing_init(void) { void bhv_flame_bouncing_loop(void) { struct Object *sp1C; if (o->oTimer == 0) - o->oFlameUnk100 = obj_nearest_object_with_behavior(bhvBowser); + o->oFlameUnk100 = cur_obj_nearest_object_with_behavior(bhvBowser); sp1C = o->oFlameUnk100; o->oForwardVel = 15.0f; o->oBounce = -1.0f; - obj_scale(o->oFlameUnkF4); - set_object_hitbox(o, &sGrowingBowserFlameHitbox); - obj_update_floor_and_walls(); - obj_move_standard(78); - if (func_802B7ADC(300)) - mark_object_for_deletion(o); + cur_obj_scale(o->oFlameUnkF4); + obj_set_hitbox(o, &sGrowingBowserFlameHitbox); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); + if (bowser_flame_should_despawn(300)) + obj_mark_for_deletion(o); if (sp1C != NULL) if (sp1C->oHeldState == 0) if (lateral_dist_between_objects(o, sp1C) < 300.0f) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_blue_flames_group_loop(void) { struct Object *flame; s32 i; if (o->oTimer == 0) { - o->oMoveAngleYaw = angle_to_object(o, gMarioObject); + o->oMoveAngleYaw = obj_angle_to_object(o, gMarioObject); o->oBlueFlameUnkF8 = 5.0f; } if (o->oTimer < 16) { @@ -1592,5 +1582,5 @@ void bhv_blue_flames_group_loop(void) { o->oBlueFlameUnkF8 -= 0.5; } } else - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/bowser_bomb.inc.c b/src/game/behaviors/bowser_bomb.inc.c index e342048..80383ae 100644 --- a/src/game/behaviors/bowser_bomb.inc.c +++ b/src/game/behaviors/bowser_bomb.inc.c @@ -1,7 +1,7 @@ // bowser_bomb.c.inc void bhv_bowser_bomb_loop(void) { - if (are_objects_collided(o, gMarioObject) == 1) { + if (obj_check_if_collided_with_object(o, gMarioObject) == 1) { o->oInteractStatus &= ~INT_STATUS_INTERACTED; /* bit 15 */ spawn_object(o, MODEL_EXPLOSION, bhvExplosion); o->activeFlags = 0; @@ -21,7 +21,7 @@ void bhv_bowser_bomb_loop(void) { void bhv_bowser_bomb_explosion_loop(void) { struct Object *mineSmoke; - obj_scale((f32) o->oTimer / 14.0f * 9.0 + 1.0); + cur_obj_scale((f32) o->oTimer / 14.0f * 9.0 + 1.0); if ((o->oTimer % 4 == 0) && (o->oTimer < 20)) { mineSmoke = spawn_object(o, MODEL_BOWSER_SMOKE, bhvBowserBombSmoke); mineSmoke->oPosX += RandomFloat() * 600.0f - 400.0f; @@ -36,7 +36,7 @@ void bhv_bowser_bomb_explosion_loop(void) { } void bhv_bowser_bomb_smoke_loop(void) { - obj_scale((f32) o->oTimer / 14.0f * 9.0 + 1.0); + cur_obj_scale((f32) o->oTimer / 14.0f * 9.0 + 1.0); if (o->oTimer % 2 == 0) o->oAnimState++; diff --git a/src/game/behaviors/bowser_key.inc.c b/src/game/behaviors/bowser_key.inc.c index e22647d..584b190 100644 --- a/src/game/behaviors/bowser_key.inc.c +++ b/src/game/behaviors/bowser_key.inc.c @@ -13,7 +13,7 @@ struct ObjectHitbox sBowserKeyHitbox = { }; void bhv_bowser_key_loop(void) { - obj_scale(0.5f); + cur_obj_scale(0.5f); if (o->oAngleVelYaw > 0x400) o->oAngleVelYaw -= 0x100; o->oFaceAngleYaw += o->oAngleVelYaw; @@ -22,20 +22,20 @@ void bhv_bowser_key_loop(void) { if (o->oAction == 0) { if (o->oTimer == 0) o->oVelY = 70.0f; - func_802B2328(3, 200, 80, -60); + spawn_sparkle_particles(3, 200, 80, -60); spawn_object(o, MODEL_NONE, bhvSparkleSpawn); - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); if (o->oMoveFlags & OBJ_MOVE_ON_GROUND) o->oAction++; else if (o->oMoveFlags & OBJ_MOVE_LANDED) #ifndef VERSION_JP - PlaySound2(SOUND_GENERAL_UNKNOWN3_2); + cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN3_2); #else - PlaySound2(SOUND_GENERAL_UNKNOWN3_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN3_LOWPRIO); #endif } else { - set_object_hitbox(o, &sBowserKeyHitbox); + obj_set_hitbox(o, &sBowserKeyHitbox); if (o->oInteractStatus & INT_STATUS_INTERACTED) { mark_obj_for_deletion(o); o->oInteractStatus = 0; diff --git a/src/game/behaviors/bowser_key_cutscene.inc.c b/src/game/behaviors/bowser_key_cutscene.inc.c index 108f726..d3fa47f 100644 --- a/src/game/behaviors/bowser_key_cutscene.inc.c +++ b/src/game/behaviors/bowser_key_cutscene.inc.c @@ -1,6 +1,6 @@ // bowser_key_cutscene.inc.c -Gfx *Geo18_802BA2B0(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { +Gfx *geo_scale_bowser_key(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { struct Object *sp4; if (run == TRUE) { sp4 = (struct Object *) gCurGraphNodeObject; @@ -12,7 +12,7 @@ Gfx *Geo18_802BA2B0(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { void bhv_bowser_key_unlock_door_loop(void) { s32 animTimer; animTimer = o->header.gfx.unk38.animFrame; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); if (animTimer < 38) o->oBowserKeyScale = 0.0f; else if (animTimer < 49) @@ -26,12 +26,12 @@ void bhv_bowser_key_unlock_door_loop(void) { else o->oBowserKeyScale = 1.0f; if (o->oTimer > 150) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_bowser_key_course_exit_loop(void) { s32 animTimer = o->header.gfx.unk38.animFrame; - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (animTimer < 38) o->oBowserKeyScale = 0.2f; else if (animTimer < 52) @@ -43,5 +43,5 @@ void bhv_bowser_key_course_exit_loop(void) { else o->oBowserKeyScale = 0.2f; if (o->oTimer > 138) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/bowser_puzzle_piece.inc.c b/src/game/behaviors/bowser_puzzle_piece.inc.c index f747d54..14db4de 100644 --- a/src/game/behaviors/bowser_puzzle_piece.inc.c +++ b/src/game/behaviors/bowser_puzzle_piece.inc.c @@ -170,7 +170,7 @@ void bhv_lll_bowser_puzzle_piece_update(void) { // If we should advance to the next action... if (o->oBowserPuzzlePieceContinuePerformingAction == 0) { // Start doing the next action. - obj_change_action(*nextAction); + cur_obj_change_action(*nextAction); // Advance the pointer to the next action. nextAction++; @@ -200,7 +200,7 @@ void bhv_lll_bowser_puzzle_piece_move(f32 xOffset, f32 zOffset, s32 duration, UN } else { // On frame 20, play the shifting sound. if (o->oTimer == 20) - PlaySound2(SOUND_OBJ2_BOWSER_PUZZLE_PIECE_MOVE); + cur_obj_play_sound_2(SOUND_OBJ2_BOWSER_PUZZLE_PIECE_MOVE); // For the number of frames specified by duration, move the piece. if (o->oTimer < duration + 20) { @@ -208,7 +208,7 @@ void bhv_lll_bowser_puzzle_piece_move(f32 xOffset, f32 zOffset, s32 duration, UN o->oBowserPuzzlePieceOffsetZ += zOffset; } else { // This doesn't actually accomplish anything since - // obj_change_action is going to be called before the + // cur_obj_change_action is going to be called before the // next action is performed anyway. o->oAction = 2; @@ -255,7 +255,7 @@ void (*sBowserPuzzlePieceActions[])(void) = { void bhv_lll_bowser_puzzle_piece_loop(void) { bhv_lll_bowser_puzzle_piece_update(); - obj_call_action_function(sBowserPuzzlePieceActions); + cur_obj_call_action_function(sBowserPuzzlePieceActions); o->oPosX = o->oBowserPuzzlePieceOffsetX + o->oHomeX; o->oPosY = o->oBowserPuzzlePieceOffsetY + o->oHomeY; diff --git a/src/game/behaviors/break_particles.inc.c b/src/game/behaviors/break_particles.inc.c index 64cbfb3..f8ebea7 100644 --- a/src/game/behaviors/break_particles.inc.c +++ b/src/game/behaviors/break_particles.inc.c @@ -19,6 +19,6 @@ void spawn_triangle_break_particles(s16 numTris, s16 triModel, f32 triSize, s16 triangle->oAngleVelPitch = 0x80 * (s32)(RandomFloat() + 50.0f); triangle->oForwardVel = 30.0f; } - scale_object(triangle, triSize); + obj_scale(triangle, triSize); } } diff --git a/src/game/behaviors/breakable_box.inc.c b/src/game/behaviors/breakable_box.inc.c index 9960aaf..f46954c 100644 --- a/src/game/behaviors/breakable_box.inc.c +++ b/src/game/behaviors/breakable_box.inc.c @@ -1,12 +1,12 @@ // breakable_box.c.inc void bhv_breakable_box_loop(void) { - set_object_hitbox(o, &sBreakableBoxHitbox); - obj_set_model(MODEL_BREAKABLE_BOX_SMALL); + obj_set_hitbox(o, &sBreakableBoxHitbox); + cur_obj_set_model(MODEL_BREAKABLE_BOX_SMALL); if (o->oTimer == 0) - func_802B0E74(); - if (obj_was_attacked_or_ground_pounded() != 0) { - func_802A3C98(46.0f, 1); + breakable_box_init(); + if (cur_obj_was_attacked_or_ground_pounded() != 0) { + obj_explode_and_spawn_coins(46.0f, 1); create_sound_spawner(SOUND_GENERAL_BREAK_BOX); } } diff --git a/src/game/behaviors/breakable_box_small.inc.c b/src/game/behaviors/breakable_box_small.inc.c index d5f89e9..3910fc7 100644 --- a/src/game/behaviors/breakable_box_small.inc.c +++ b/src/game/behaviors/breakable_box_small.inc.c @@ -16,33 +16,33 @@ void bhv_breakable_box_small_init(void) { o->oGravity = 2.5f; o->oFriction = 0.99f; o->oBuoyancy = 1.4f; - obj_scale(0.4f); - set_object_hitbox(o, &sBreakableBoxSmallHitbox); + cur_obj_scale(0.4f); + obj_set_hitbox(o, &sBreakableBoxSmallHitbox); o->oAnimState = 1; o->activeFlags |= 0x200; } -void func_802F4CE8(void) { +void small_breakable_box_spawn_dust(void) { struct Object *sp24 = spawn_object(o, MODEL_SMOKE, bhvSmoke); sp24->oPosX += (s32)(RandomFloat() * 80.0f) - 40; sp24->oPosZ += (s32)(RandomFloat() * 80.0f) - 40; } -void func_802F4DB4(void) { +void small_breakable_box_act_move(void) { s16 sp1E = object_step(); - attack_collided_non_mario_object(o); + obj_attack_collided_from_other_object(o); if (sp1E == 1) - PlaySound2(SOUND_GENERAL_BOX_LANDING_2); + cur_obj_play_sound_2(SOUND_GENERAL_BOX_LANDING_2); if (sp1E & 1) { if (o->oForwardVel > 20.0f) { - PlaySound2(SOUND_ENV_SLIDING); - func_802F4CE8(); + cur_obj_play_sound_2(SOUND_ENV_SLIDING); + small_breakable_box_spawn_dust(); } } if (sp1E & 2) { - func_802A3004(); + spawn_mist_particles(); spawn_triangle_break_particles(20, 138, 0.7f, 3); obj_spawn_yellow_coins(o, 3); create_sound_spawner(SOUND_GENERAL_BREAK_BOX); @@ -73,7 +73,7 @@ void breakable_box_small_released_loop(void) { void breakable_box_small_idle_loop(void) { switch (o->oAction) { case 0: - func_802F4DB4(); + small_breakable_box_act_move(); break; case 100: @@ -91,9 +91,9 @@ void breakable_box_small_idle_loop(void) { } void breakable_box_small_get_dropped(void) { - obj_become_tangible(); - obj_enable_rendering(); - obj_get_dropped(); + cur_obj_become_tangible(); + cur_obj_enable_rendering(); + cur_obj_get_dropped(); o->header.gfx.node.flags &= ~0x10; o->oHeldState = 0; o->oBreakableBoxSmallReleased = 1; @@ -101,9 +101,9 @@ void breakable_box_small_get_dropped(void) { } void breakable_box_small_get_thrown(void) { - obj_become_tangible(); - obj_enable_rendering_2(); - obj_enable_rendering(); + cur_obj_become_tangible(); + cur_obj_enable_rendering_2(); + cur_obj_enable_rendering(); o->header.gfx.node.flags &= ~0x10; o->oHeldState = 0; o->oFlags &= ~0x08; @@ -121,8 +121,8 @@ void bhv_breakable_box_small_loop(void) { break; case 1: - obj_disable_rendering(); - obj_become_intangible(); + cur_obj_disable_rendering(); + cur_obj_become_intangible(); break; case 2: diff --git a/src/game/behaviors/breakable_wall.inc.c b/src/game/behaviors/breakable_wall.inc.c index b85b780..997d220 100644 --- a/src/game/behaviors/breakable_wall.inc.c +++ b/src/game/behaviors/breakable_wall.inc.c @@ -2,15 +2,15 @@ void bhv_wf_breakable_wall_loop(void) { if (gMarioStates->action == ACT_SHOT_FROM_CANNON) { - obj_become_tangible(); - if (are_objects_collided(o, gMarioObject)) { - if (obj_has_behavior(bhvWfBreakableWallRight)) + cur_obj_become_tangible(); + if (obj_check_if_collided_with_object(o, gMarioObject)) { + if (cur_obj_has_behavior(bhvWfBreakableWallRight)) play_puzzle_jingle(); create_sound_spawner(SOUND_GENERAL_WALL_EXPLOSION); o->oInteractType = 8; o->oDamageOrCoinValue = 1; - func_802A3C98(80.0f, 0); + obj_explode_and_spawn_coins(80.0f, 0); } } else - obj_become_intangible(); + cur_obj_become_intangible(); } diff --git a/src/game/behaviors/bub.inc.c b/src/game/behaviors/bub.inc.c index 7d292df..42b98f2 100644 --- a/src/game/behaviors/bub.inc.c +++ b/src/game/behaviors/bub.inc.c @@ -5,7 +5,7 @@ // to do nothing, which indicates this behavior set is incomplete. // TODO: Rename these. These have nothing to do with birds. -void ActionBirdChirpChirp0(void) { +void bub_spawner_act_0(void) { s32 i; s32 sp18 = o->oBirdChirpChirpUnkF4; if (o->oDistanceToMario < 1500.0f) { @@ -15,27 +15,27 @@ void ActionBirdChirpChirp0(void) { } } -void ActionBirdChirpChirp1(void) { +void bub_spawner_act_1(void) { if (gMarioObject->oPosY - o->oPosY > 2000.0f) o->oAction = 2; } -void ActionBirdChirpChirp2(void) { +void bub_spawner_act_2(void) { o->oAction = 3; } -void ActionBirdChirpChirp3(void) { +void bub_spawner_act_3(void) { o->oAction = 0; } -void (*sBirdChirpChirpActions[])(void) = { ActionBirdChirpChirp0, ActionBirdChirpChirp1, - ActionBirdChirpChirp2, ActionBirdChirpChirp3 }; +void (*sBirdChirpChirpActions[])(void) = { bub_spawner_act_0, bub_spawner_act_1, + bub_spawner_act_2, bub_spawner_act_3 }; -void bhv_bird_chirp_chirp_loop(void) { - obj_call_action_function(sBirdChirpChirpActions); +void bhv_bub_spawner_loop(void) { + cur_obj_call_action_function(sBirdChirpChirpActions); } -void func_802C0240(s32 a0) { +void bub_move_vertically(s32 a0) { f32 sp1C = o->parentObj->oPosY; if (sp1C - 100.0f - o->oCheepCheepUnk104 < o->oPosY && o->oPosY < sp1C + 1000.0f + o->oCheepCheepUnk104) @@ -44,13 +44,13 @@ void func_802C0240(s32 a0) { } } -void ActionCheepCheep0(void) { +void bub_act_0(void) { o->oCheepCheepUnkFC = RandomFloat() * 100.0f; o->oCheepCheepUnk104 = RandomFloat() * 300.0f; o->oAction = 1; } -void ActionCheepCheep1(void) { +void bub_act_1(void) { f32 dy; if (o->oTimer == 0) { o->oForwardVel = RandomFloat() * 2 + 2; @@ -61,17 +61,17 @@ void ActionCheepCheep1(void) { if (dy < 0.0f) dy = 0.0f - dy; if (dy < 500.0f) - func_802C0240(1); + bub_move_vertically(1); else - func_802C0240(4); + bub_move_vertically(4); } else { o->oPosY = o->oCheepCheepUnkF4 - 50.0f; if (dy > 300.0f) o->oPosY = o->oPosY - 1.0f; } - if (800.0f < obj_lateral_dist_from_mario_to_home()) - o->oAngleToMario = obj_angle_to_home(); - obj_rotate_yaw_toward(o->oAngleToMario, 0x100); + if (800.0f < cur_obj_lateral_dist_from_mario_to_home()) + o->oAngleToMario = cur_obj_angle_to_home(); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x100); if (o->oDistanceToMario < 200.0f) if (o->oCheepCheepUnk108 < 0.5) o->oAction = 2; @@ -79,7 +79,7 @@ void ActionCheepCheep1(void) { o->oAction = 2; } -void ActionCheepCheep2(void) { +void bub_act_2(void) { f32 dy; if (o->oTimer < 20) { if (o->oInteractStatus & INT_STATUS_INTERACTED) @@ -87,7 +87,7 @@ void ActionCheepCheep2(void) { } else o->oInteractStatus = 0; if (o->oTimer == 0) - PlaySound2(SOUND_GENERAL_MOVING_WATER); + cur_obj_play_sound_2(SOUND_GENERAL_MOVING_WATER); if (o->oForwardVel == 0.0f) o->oForwardVel = 6.0f; dy = o->oPosY - gMarioObject->oPosY; @@ -95,30 +95,30 @@ void ActionCheepCheep2(void) { if (dy < 0.0f) dy = 0.0f - dy; if (dy < 500.0f) - func_802C0240(2); + bub_move_vertically(2); else - func_802C0240(4); + bub_move_vertically(4); } else { o->oPosY = o->oCheepCheepUnkF4 - 50.0f; if (dy > 300.0f) o->oPosY -= 1.0f; } - if (obj_lateral_dist_from_mario_to_home() > 800.0f) - o->oAngleToMario = obj_angle_to_home(); - obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x400); + if (cur_obj_lateral_dist_from_mario_to_home() > 800.0f) + o->oAngleToMario = cur_obj_angle_to_home(); + cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x400); if (o->oTimer > 200 && o->oDistanceToMario > 600.0f) o->oAction = 1; } -void (*sCheepCheepActions[])(void) = { ActionCheepCheep0, ActionCheepCheep1, ActionCheepCheep2 }; +void (*sCheepCheepActions[])(void) = { bub_act_0, bub_act_1, bub_act_2 }; -void bhv_cheep_cheep_loop(void) { +void bhv_bub_loop(void) { o->oCheepCheepUnkF4 = find_water_level(o->oPosX, o->oPosZ); o->oCheepCheepUnkF8 = gMarioObject->oPosY + o->oCheepCheepUnkFC; o->oWallHitboxRadius = 30.0f; - obj_update_floor_and_walls(); - obj_call_action_function(sCheepCheepActions); - obj_move_using_fvel_and_gravity(); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sCheepCheepActions); + cur_obj_move_using_fvel_and_gravity(); if (o->parentObj->oAction == 2) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/bubba.inc.c b/src/game/behaviors/bubba.inc.c index a095b5b..5fddd4e 100644 --- a/src/game/behaviors/bubba.inc.c +++ b/src/game/behaviors/bubba.inc.c @@ -15,7 +15,7 @@ static struct ObjectHitbox sBubbaHitbox = { void bubba_act_0(void) { f32 sp24; - sp24 = obj_lateral_dist_to_home(); + sp24 = cur_obj_lateral_dist_to_home(); treat_far_home_as_mario(2000.0f); o->oAnimState = 0; @@ -34,7 +34,7 @@ void bubba_act_0(void) { } if ((o->oBubbaUnkFC = o->oMoveFlags & 0x00000200) != 0) { - o->oBubbaUnk1AE = obj_reflect_move_angle_off_wall(); + o->oBubbaUnk1AE = cur_obj_reflect_move_angle_off_wall(); } else if (o->oTimer > 30 && o->oDistanceToMario < 2000.0f) { o->oAction = 1; } else if (o->oBubbaUnkF8 != 0) { @@ -55,7 +55,7 @@ void bubba_act_1(void) { o->oAction = 0; } else if (o->oBubbaUnk100 != 0) { if (--o->oBubbaUnk100 == 0) { - PlaySound2(SOUND_OBJ_BUBBA_CHOMP); + cur_obj_play_sound_2(SOUND_OBJ_BUBBA_CHOMP); o->oAction = 0; } else if (o->oBubbaUnk100 < 15) { o->oAnimState = 1; @@ -71,7 +71,7 @@ void bubba_act_1(void) { o->oBubbaUnk1AE = o->oAngleToMario; o->oBubbaUnk1AC = o->oBubbaUnk104; - obj_rotate_yaw_toward(o->oBubbaUnk1AE, 400); + cur_obj_rotate_yaw_toward(o->oBubbaUnk1AE, 400); obj_move_pitch_approach(o->oBubbaUnk1AC, 400); } } else { @@ -119,7 +119,7 @@ void bhv_bubba_loop(void) { o->hurtboxRadius = 150.0f; } - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case 0: @@ -134,7 +134,7 @@ void bhv_bubba_loop(void) { if (o->oMoveFlags & 0x00000008) { sp38 = spawn_object(o, MODEL_WATER_SPLASH, bhvWaterSplash); if (sp38 != NULL) { - scale_object(sp38, 3.0f); + obj_scale(sp38, 3.0f); } o->oBubbaUnk108 = o->oVelY; @@ -163,7 +163,7 @@ void bhv_bubba_loop(void) { obj_face_pitch_approach(o->oMoveAnglePitch, 400); obj_check_attacks(&sBubbaHitbox, o->oAction); - obj_move_standard(78); + cur_obj_move_standard(78); o->oFloorHeight += 150.0f; if (o->oPosY < o->oFloorHeight) { diff --git a/src/game/behaviors/bubble.inc.c b/src/game/behaviors/bubble.inc.c index a5e447c..000d369 100644 --- a/src/game/behaviors/bubble.inc.c +++ b/src/game/behaviors/bubble.inc.c @@ -7,16 +7,16 @@ void bhv_object_bubble_init(void) { } void bhv_object_bubble_loop(void) { - struct Object *bubbleRipples; + struct Object *bubbleSplash; f32 waterY = find_water_level(o->oPosX, o->oPosZ); f32 bubbleY = o->oPosY; if (bubbleY > waterY) { if (gFreeObjectList.next) { - bubbleRipples = spawn_object_at_origin(o, 0, MODEL_SPOT_ON_GROUND, bhvObjectBubbleRipples); - bubbleRipples->oPosX = o->oPosX; - bubbleRipples->oPosY = bubbleY + 5.0f; - bubbleRipples->oPosZ = o->oPosZ; + bubbleSplash = spawn_object_at_origin(o, 0, MODEL_SMALL_WATER_SPLASH, bhvBubbleSplash); + bubbleSplash->oPosX = o->oPosX; + bubbleSplash->oPosY = bubbleY + 5.0f; + bubbleSplash->oPosZ = o->oPosZ; } o->activeFlags = 0; diff --git a/src/game/behaviors/bullet_bill.inc.c b/src/game/behaviors/bullet_bill.inc.c index 02d8725..a94fe4b 100644 --- a/src/game/behaviors/bullet_bill.inc.c +++ b/src/game/behaviors/bullet_bill.inc.c @@ -2,31 +2,31 @@ // bullet bill smoke void bhv_white_puff_smoke_init(void) { - obj_scale(RandomFloat() * 2 + 2.0); + cur_obj_scale(RandomFloat() * 2 + 2.0); } void bhv_bullet_bill_init(void) { o->oBulletBillUnkF8 = o->oMoveAngleYaw; } -void ActionBulletBill0(void) { - obj_become_tangible(); +void bullet_bill_act_0(void) { + cur_obj_become_tangible(); o->oForwardVel = 0.0f; o->oMoveAngleYaw = o->oBulletBillUnkF8; o->oFaceAnglePitch = 0; o->oFaceAngleRoll = 0; o->oMoveFlags = 0; - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->oAction = 1; } -void ActionBulletBill1(void) { +void bullet_bill_act_1(void) { s16 sp1E = abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw); if (sp1E < 0x2000 && 400.0f < o->oDistanceToMario && o->oDistanceToMario < 1500.0f) o->oAction = 2; } -void ActionBulletBill2(void) { +void bullet_bill_act_2(void) { if (o->oTimer < 40) o->oForwardVel = 3.0f; else if (o->oTimer < 50) { @@ -36,30 +36,30 @@ void ActionBulletBill2(void) { o->oForwardVel = -3.0f; } else { if (o->oTimer > 70) - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); spawn_object(o, MODEL_SMOKE, bhvWhitePuffSmoke); o->oForwardVel = 30.0f; if (o->oDistanceToMario > 300.0f) - obj_rotate_yaw_toward(o->oAngleToMario, 0x100); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x100); if (o->oTimer == 50) { - PlaySound2(SOUND_OBJ_POUNDING_CANNON); - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_play_sound_2(SOUND_OBJ_POUNDING_CANNON); + cur_obj_shake_screen(SHAKE_POS_SMALL); } if (o->oTimer > 150 || o->oMoveFlags & 0x200) { o->oAction = 3; - func_802A3004(); + spawn_mist_particles(); } } } -void ActionBulletBill3(void) { +void bullet_bill_act_3(void) { o->oAction = 0; } -void ActionBulletBill4(void) { +void bullet_bill_act_4(void) { if (o->oTimer == 0) { o->oForwardVel = -30.0f; - obj_become_intangible(); + cur_obj_become_intangible(); } o->oFaceAnglePitch += 0x1000; o->oFaceAngleRoll += 0x1000; @@ -68,11 +68,11 @@ void ActionBulletBill4(void) { o->oAction = 0; } -void (*sBulletBillActions[])(void) = { ActionBulletBill0, ActionBulletBill1, ActionBulletBill2, - ActionBulletBill3, ActionBulletBill4 }; +void (*sBulletBillActions[])(void) = { bullet_bill_act_0, bullet_bill_act_1, bullet_bill_act_2, + bullet_bill_act_3, bullet_bill_act_4 }; void bhv_bullet_bill_loop(void) { - obj_call_action_function(sBulletBillActions); - if (obj_check_interacted()) + cur_obj_call_action_function(sBulletBillActions); + if (cur_obj_check_interacted()) o->oAction = 4; } diff --git a/src/game/behaviors/bully.inc.c b/src/game/behaviors/bully.inc.c index 8e3df29..6e2bd26 100644 --- a/src/game/behaviors/bully.inc.c +++ b/src/game/behaviors/bully.inc.c @@ -25,7 +25,7 @@ static struct ObjectHitbox sBigBullyHitbox = { }; void bhv_small_bully_init(void) { - SetObjAnimation(0); + cur_obj_init_animation(0); o->oHomeX = o->oPosX; o->oHomeZ = o->oPosZ; @@ -34,11 +34,11 @@ void bhv_small_bully_init(void) { o->oFriction = 0.91; o->oBuoyancy = 1.3; - set_object_hitbox(o, &sSmallBullyHitbox); + obj_set_hitbox(o, &sSmallBullyHitbox); } void bhv_big_bully_init(void) { - SetObjAnimation(0); + cur_obj_init_animation(0); o->oHomeX = o->oPosX; o->oHomeY = o->oPosY; @@ -48,25 +48,25 @@ void bhv_big_bully_init(void) { o->oFriction = 0.93; o->oBuoyancy = 1.3; - set_object_hitbox(o, &sBigBullyHitbox); + obj_set_hitbox(o, &sBigBullyHitbox); } -void BullyCheckMarioCollision(void) { +void bully_check_mario_collision(void) { if (o->oInteractStatus & INT_STATUS_INTERACTED) { if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) - PlaySound2(SOUND_OBJ2_BULLY_ATTACKED); + cur_obj_play_sound_2(SOUND_OBJ2_BULLY_ATTACKED); else - PlaySound2(SOUND_OBJ2_LARGE_BULLY_ATTACKED); + cur_obj_play_sound_2(SOUND_OBJ2_LARGE_BULLY_ATTACKED); o->oInteractStatus &= ~INT_STATUS_INTERACTED; o->oAction = BULLY_ACT_KNOCKBACK; o->oFlags &= ~0x8; /* bit 3 */ - SetObjAnimation(3); + cur_obj_init_animation(3); o->oBullyMarioCollisionAngle = o->oMoveAngleYaw; } } -void BullyChaseMarioLoop(void) { +void bully_act_chase_mario(void) { f32 homeX = o->oHomeX; f32 posY = o->oPosY; f32 homeZ = o->oHomeZ; @@ -86,11 +86,11 @@ void BullyChaseMarioLoop(void) { if (!is_point_within_radius_of_mario(homeX, posY, homeZ, 1000)) { o->oAction = BULLY_ACT_PATROL; - SetObjAnimation(0); + cur_obj_init_animation(0); } } -void BullyKnockbackLoop(void) { +void bully_act_knockback(void) { if (o->oForwardVel < 10.0 && (s32) o->oVelY == 0) { o->oForwardVel = 1.0; o->oBullyKBTimerAndMinionKOCounter++; @@ -103,11 +103,11 @@ void BullyKnockbackLoop(void) { if (o->oBullyKBTimerAndMinionKOCounter == 18) { o->oAction = BULLY_ACT_CHASE_MARIO; o->oBullyKBTimerAndMinionKOCounter = 0; - SetObjAnimation(1); + cur_obj_init_animation(1); } } -void BullyBackUpLoop(void) { +void bully_act_back_up(void) { if (o->oTimer == 0) { o->oFlags &= ~0x8; /* bit 3 */ o->oMoveAngleYaw += 0x8000; @@ -115,7 +115,7 @@ void BullyBackUpLoop(void) { o->oForwardVel = 5.0; - //! BullyBackUpCheck() happens after this function, and has the potential to reset + //! bully_backup_check() happens after this function, and has the potential to reset // the bully's action to BULLY_ACT_BACK_UP. Because the back up action is only // set to end when the timer EQUALS 15, if this happens on that frame, the bully // will be stuck in BULLY_ACT_BACK_UP forever until Mario hits it or its death @@ -129,7 +129,7 @@ void BullyBackUpLoop(void) { } } -void BullyBackUpCheck(s16 collisionFlags) { +void bully_backup_check(s16 collisionFlags) { if (!(collisionFlags & 0x8) && o->oAction != BULLY_ACT_KNOCKBACK) /* bit 3 */ { o->oPosX = o->oBullyPrevX; @@ -138,15 +138,15 @@ void BullyBackUpCheck(s16 collisionFlags) { } } -void PlayBullyStompingSound(void) { +void bully_play_stomping_sound(void) { s16 sp26 = o->header.gfx.unk38.animFrame; switch (o->oAction) { case BULLY_ACT_PATROL: if (sp26 == 0 || sp26 == 12) { if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) - PlaySound2(SOUND_OBJ_BULLY_WALK); + cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALK); else - PlaySound2(SOUND_OBJ_BULLY_WALKING); + cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALKING); } break; @@ -154,19 +154,19 @@ void PlayBullyStompingSound(void) { case BULLY_ACT_BACK_UP: if (sp26 == 0 || sp26 == 5) { if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) - PlaySound2(SOUND_OBJ_BULLY_WALK); + cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALK); else - PlaySound2(SOUND_OBJ_BULLY_WALKING); + cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALKING); } break; } } -void BullyStep(void) { +void bully_step(void) { s16 collisionFlags = 0; collisionFlags = object_step(); - BullyBackUpCheck(collisionFlags); - PlayBullyStompingSound(); + bully_backup_check(collisionFlags); + bully_play_stomping_sound(); obj_check_floor_death(collisionFlags, sObjFloor); if (o->oBullySubtype & BULLY_STYPE_CHILL) { @@ -175,14 +175,14 @@ void BullyStep(void) { } } -void BullySpawnCoin(void) { +void bully_spawn_coin(void) { struct Object *coin = spawn_object(o, MODEL_YELLOW_COIN, bhvMovingYellowCoin); #ifdef VERSION_JP //TODO: maybe move this ifdef logic to the header? - PlaySound2(SOUND_GENERAL_COIN_SPURT); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT); #elif VERSION_EU - PlaySound2(SOUND_GENERAL_COIN_SPURT_EU); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT_EU); #else - PlaySound2(SOUND_GENERAL_COIN_SPURT_2); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT_2); #endif coin->oForwardVel = 10.0f; coin->oVelY = 100.0f; @@ -190,19 +190,19 @@ void BullySpawnCoin(void) { coin->oMoveAngleYaw = (f32)(o->oBullyMarioCollisionAngle + 0x8000) + RandomFloat() * 1024.0f; } -void BullyLavaDeath(void) { +void bully_act_level_death(void) { if (obj_lava_death() == 1) { if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) { if (o->oBullySubtype == BULLY_STYPE_MINION) o->parentObj->oBullyKBTimerAndMinionKOCounter++; - BullySpawnCoin(); + bully_spawn_coin(); } else { - func_802A3004(); + spawn_mist_particles(); if (o->oBullySubtype == BULLY_STYPE_CHILL) - create_star(130.0f, 1600.0f, -4335.0f); + spawn_default_star(130.0f, 1600.0f, -4335.0f); else { - create_star(0, 950.0f, -6800.0f); + spawn_default_star(0, 950.0f, -6800.0f); spawn_object_abs_with_rot(o, 0, MODEL_NONE, bhvLllTumblingBridge, 0, 154, -5631, 0, 0, 0); } @@ -219,7 +219,7 @@ void bhv_bully_loop(void) { // death action by colliding with it. Since the bully hitbox is tall enough to collide // with Mario even when it is under a lava floor, this can get the bully stuck OOB // if there is nothing under the lava floor. - BullyCheckMarioCollision(); + bully_check_mario_collision(); switch (o->oAction) { case BULLY_ACT_PATROL: @@ -227,29 +227,29 @@ void bhv_bully_loop(void) { if (obj_return_home_if_safe(o, o->oHomeX, o->oPosY, o->oHomeZ, 800) == 1) { o->oAction = BULLY_ACT_CHASE_MARIO; - SetObjAnimation(1); + cur_obj_init_animation(1); } - BullyStep(); + bully_step(); break; case BULLY_ACT_CHASE_MARIO: - BullyChaseMarioLoop(); - BullyStep(); + bully_act_chase_mario(); + bully_step(); break; case BULLY_ACT_KNOCKBACK: - BullyKnockbackLoop(); - BullyStep(); + bully_act_knockback(); + bully_step(); break; case BULLY_ACT_BACK_UP: - BullyBackUpLoop(); - BullyStep(); + bully_act_back_up(); + bully_step(); break; case BULLY_ACT_LAVA_DEATH: - BullyLavaDeath(); + bully_act_level_death(); break; case BULLY_ACT_DEATH_PLANE_DEATH: @@ -265,7 +265,7 @@ void bhv_bully_loop(void) { // sp40 = arg2 // sp44 = arg3 -void BigBullySpawnMinion(s32 arg0, s32 arg1, s32 arg2, s16 arg3) { +void big_bully_spawn_minion(s32 arg0, s32 arg1, s32 arg2, s16 arg3) { struct Object *bully = spawn_object_abs_with_rot(o, 0, MODEL_BULLY, bhvSmallBully, arg0, arg1, arg2, 0, arg3, 00); bully->oBullySubtype = BULLY_STYPE_MINION; @@ -273,21 +273,21 @@ void BigBullySpawnMinion(s32 arg0, s32 arg1, s32 arg2, s16 arg3) { } void bhv_big_bully_with_minions_init(void) { - BigBullySpawnMinion(4454, 307, -5426, 0); - BigBullySpawnMinion(3840, 307, -6041, 0); - BigBullySpawnMinion(3226, 307, -5426, 0); + big_bully_spawn_minion(4454, 307, -5426, 0); + big_bully_spawn_minion(3840, 307, -6041, 0); + big_bully_spawn_minion(3226, 307, -5426, 0); o->header.gfx.node.flags |= 0x10; /* bit 4 */ - obj_become_intangible(); + cur_obj_become_intangible(); o->oAction = BULLY_ACT_INACTIVE; } -void BigBullyWithMinionsLavaDeath(void) { +void big_bully_spawn_star(void) { if (obj_lava_death() == 1) { - func_802A3004(); - create_star(3700.0f, 600.0f, -5500.0f); + spawn_mist_particles(); + spawn_default_star(3700.0f, 600.0f, -5500.0f); } } @@ -302,7 +302,7 @@ void bhv_big_bully_with_minions_loop(void) { o->oBullyPrevY = o->oPosY; o->oBullyPrevZ = o->oPosZ; - BullyCheckMarioCollision(); + bully_check_mario_collision(); switch (o->oAction) { case BULLY_ACT_PATROL: @@ -310,25 +310,25 @@ void bhv_big_bully_with_minions_loop(void) { if (obj_return_home_if_safe(o, o->oHomeX, o->oPosY, o->oHomeZ, 1000) == 1) { o->oAction = BULLY_ACT_CHASE_MARIO; - SetObjAnimation(1); + cur_obj_init_animation(1); } - BullyStep(); + bully_step(); break; case BULLY_ACT_CHASE_MARIO: - BullyChaseMarioLoop(); - BullyStep(); + bully_act_chase_mario(); + bully_step(); break; case BULLY_ACT_KNOCKBACK: - BullyKnockbackLoop(); - BullyStep(); + bully_act_knockback(); + bully_step(); break; case BULLY_ACT_BACK_UP: - BullyBackUpLoop(); - BullyStep(); + bully_act_back_up(); + bully_step(); break; case BULLY_ACT_INACTIVE: @@ -350,17 +350,17 @@ void bhv_big_bully_with_minions_loop(void) { o->oAction = BULLY_ACT_PATROL; if (collisionFlags == 1) { - PlaySound2(SOUND_OBJ_THWOMP); + cur_obj_play_sound_2(SOUND_OBJ_THWOMP); set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ); - func_802A3004(); + spawn_mist_particles(); } o->header.gfx.node.flags &= ~0x10; /* bit 4 */ - obj_become_tangible(); + cur_obj_become_tangible(); break; case BULLY_ACT_LAVA_DEATH: - BigBullyWithMinionsLavaDeath(); + big_bully_spawn_star(); break; case BULLY_ACT_DEATH_PLANE_DEATH: diff --git a/src/game/behaviors/butterfly.inc.c b/src/game/behaviors/butterfly.inc.c index 94421e3..ed00551 100644 --- a/src/game/behaviors/butterfly.inc.c +++ b/src/game/behaviors/butterfly.inc.c @@ -1,7 +1,7 @@ // butterfly.c.inc void bhv_butterfly_init(void) { - SetObjAnimation(1); + cur_obj_init_animation(1); o->oButterflyYPhase = RandomFloat() * 100.0f; o->header.gfx.unk38.animFrame = RandomFloat() * 7.0f; @@ -12,7 +12,7 @@ void bhv_butterfly_init(void) { // sp28 = speed -void ButterflyStep(s32 speed) { +void butterfly_step(s32 speed) { struct FloorGeometry *sp24; s16 yaw = o->oMoveAngleYaw; s16 pitch = o->oMoveAnglePitch; @@ -41,7 +41,7 @@ void ButterflyStep(s32 speed) { o->oButterflyYPhase = 0; } -void CalculateButterflyAngle(void) { +void butterfly_calculate_angle(void) { gMarioObject->oPosX += 5 * o->oButterflyYPhase / 4; gMarioObject->oPosZ += 5 * o->oButterflyYPhase / 4; obj_turn_toward_object(o, gMarioObject, 16, 0x300); @@ -53,25 +53,25 @@ void CalculateButterflyAngle(void) { gMarioObject->oPosY -= (5 * o->oButterflyYPhase + 0x100) / 4; } -void ButterflyRestingLoop(void) { +void butterfly_act_rest(void) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 1000)) { - SetObjAnimation(0); + cur_obj_init_animation(0); o->oAction = BUTTERFLY_ACT_FOLLOW_MARIO; o->oMoveAngleYaw = gMarioObject->header.gfx.angle[1]; } } -void ButterflyFollowMarioLoop(void) { - CalculateButterflyAngle(); +void butterfly_act_follow_mario(void) { + butterfly_calculate_angle(); - ButterflyStep(7); + butterfly_step(7); if (!is_point_within_radius_of_mario(o->oHomeX, o->oHomeY, o->oHomeZ, 1200)) o->oAction = BUTTERFLY_ACT_RETURN_HOME; } -void ButterflyReturnHomeLoop(void) { +void butterfly_act_return_home(void) { f32 homeDistX = o->oHomeX - o->oPosX; f32 homeDistY = o->oHomeY - o->oPosY; f32 homeDistZ = o->oHomeZ - o->oPosZ; @@ -81,10 +81,10 @@ void ButterflyReturnHomeLoop(void) { o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, hAngleToHome, 0x800); o->oMoveAnglePitch = approach_s16_symmetric(o->oMoveAnglePitch, vAngleToHome, 0x50); - ButterflyStep(7); + butterfly_step(7); if (homeDistX * homeDistX + homeDistY * homeDistY + homeDistZ * homeDistZ < 144.0f) { - SetObjAnimation(1); + cur_obj_init_animation(1); o->oAction = BUTTERFLY_ACT_RESTING; o->oPosX = o->oHomeX; @@ -96,15 +96,15 @@ void ButterflyReturnHomeLoop(void) { void bhv_butterfly_loop(void) { switch (o->oAction) { case BUTTERFLY_ACT_RESTING: - ButterflyRestingLoop(); + butterfly_act_rest(); break; case BUTTERFLY_ACT_FOLLOW_MARIO: - ButterflyFollowMarioLoop(); + butterfly_act_follow_mario(); break; case BUTTERFLY_ACT_RETURN_HOME: - ButterflyReturnHomeLoop(); + butterfly_act_return_home(); break; } diff --git a/src/game/behaviors/camera_lakitu.inc.c b/src/game/behaviors/camera_lakitu.inc.c index d1af453..cb5d838 100644 --- a/src/game/behaviors/camera_lakitu.inc.c +++ b/src/game/behaviors/camera_lakitu.inc.c @@ -14,7 +14,7 @@ void bhv_camera_lakitu_init(void) { if (o->oBehParams2ndByte != CAMERA_LAKITU_BP_FOLLOW_CAMERA) { // Despawn unless this is the very beginning of the game if (gShouldNotPlayCastleMusic != TRUE) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } else { spawn_object_relative_with_scale(CLOUD_BP_LAKITU_CLOUD, 0, 0, 0, 2.0f, o, MODEL_MIST, bhvCloud); @@ -64,7 +64,7 @@ static void camera_lakitu_intro_act_show_dialog(void) { s16 targetMovePitch; s16 targetMoveYaw; - PlaySound(SOUND_AIR_LAKITU_FLY); + cur_obj_play_sound_1(SOUND_AIR_LAKITU_FLY); // Face toward mario o->oFaceAnglePitch = obj_turn_pitch_toward_mario(120.0f, 0); @@ -74,7 +74,7 @@ static void camera_lakitu_intro_act_show_dialog(void) { if (o->oCameraLakituFinishedDialog) { approach_f32_ptr(&o->oCameraLakituSpeed, 60.0f, 3.0f); if (o->oDistanceToMario > 6000.0f) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } targetMovePitch = -0x3000; @@ -115,7 +115,7 @@ static void camera_lakitu_intro_act_show_dialog(void) { } } } - } else if (obj_update_dialog_with_cutscene(2, DIALOG_UNK2_FLAG_0, CUTSCENE_DIALOG, DIALOG_034) != 0) { + } else if (cur_obj_update_dialog_with_cutscene(2, DIALOG_UNK2_FLAG_0, CUTSCENE_DIALOG, DIALOG_034) != 0) { o->oCameraLakituFinishedDialog = TRUE; } } @@ -124,11 +124,11 @@ static void camera_lakitu_intro_act_show_dialog(void) { obj_move_pitch_approach(targetMovePitch, o->oCameraLakituPitchVel); o->oCameraLakituYawVel = approach_s16_symmetric(o->oCameraLakituYawVel, 0x7D0, 0x64); - obj_rotate_yaw_toward(targetMoveYaw, o->oCameraLakituYawVel); + cur_obj_rotate_yaw_toward(targetMoveYaw, o->oCameraLakituYawVel); // vel y is explicitly computed, so gravity doesn't apply obj_compute_vel_from_move_pitch(o->oCameraLakituSpeed); - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } /** @@ -153,9 +153,9 @@ void bhv_camera_lakitu_update(void) { } else { f32 val0C = (f32) 0x875C3D / 0x800 - gLakituState.curPos[0]; if (gLakituState.curPos[0] < 1700.0f || val0C < 0.0f) { - obj_hide(); + cur_obj_hide(); } else { - obj_unhide(); + cur_obj_unhide(); o->oPosX = gLakituState.curPos[0]; o->oPosY = gLakituState.curPos[1]; @@ -164,8 +164,8 @@ void bhv_camera_lakitu_update(void) { o->oHomeX = gLakituState.curFocus[0]; o->oHomeZ = gLakituState.curFocus[2]; - o->oFaceAngleYaw = -obj_angle_to_home(); - o->oFaceAnglePitch = atan2s(obj_lateral_dist_to_home(), + o->oFaceAngleYaw = -cur_obj_angle_to_home(); + o->oFaceAnglePitch = atan2s(cur_obj_lateral_dist_to_home(), o->oPosY - gLakituState.curFocus[1]); o->oPosX = (f32) 0x875C3D / 0x800 + val0C; diff --git a/src/game/behaviors/cannon.inc.c b/src/game/behaviors/cannon.inc.c index 65994aa..5f55ca8 100644 --- a/src/game/behaviors/cannon.inc.c +++ b/src/game/behaviors/cannon.inc.c @@ -4,7 +4,7 @@ void bhv_cannon_base_unused_loop(void) { o->oPosY += o->oVelY; } -void ActionOpenedCannon0(void) { +void opened_cannon_act_0(void) { if (o->oTimer == 0) { o->oInteractStatus = 0; o->oPosX = o->oHomeX; @@ -14,12 +14,12 @@ void ActionOpenedCannon0(void) { o->oMoveAngleYaw = (s16)(o->oBehParams2ndByte << 8); o->oCannonUnkF4 = 0; o->oCannonUnk10C = 0; - obj_enable_rendering(); - obj_become_tangible(); + cur_obj_enable_rendering(); + cur_obj_become_tangible(); } if (o->oDistanceToMario < 500.0f) { - obj_become_tangible(); - obj_enable_rendering(); + cur_obj_become_tangible(); + cur_obj_enable_rendering(); if (o->oInteractStatus & INT_STATUS_INTERACTED && (!(o->oInteractStatus & INT_STATUS_TOUCHED_BOB_OMB))) // bob-omb explodes when it gets into a cannon @@ -30,15 +30,15 @@ void ActionOpenedCannon0(void) { } else o->oInteractStatus = 0; } else { - obj_become_intangible(); - obj_disable_rendering(); + cur_obj_become_intangible(); + cur_obj_disable_rendering(); o->oCannonUnk10C = 0; } } -void ActionOpenedCannon4(void) { +void opened_cannon_act_4(void) { if (o->oTimer == 0) - PlaySound2(SOUND_OBJ_CANNON1); + cur_obj_play_sound_2(SOUND_OBJ_CANNON1); o->oPosY += 5.0f; o->oPosX += (f32)((o->oTimer / 2 & 1) - 0.5) * 2; o->oPosZ += (f32)((o->oTimer / 2 & 1) - 0.5) * 2; @@ -49,9 +49,9 @@ void ActionOpenedCannon4(void) { } } -void ActionOpenedCannon6(void) { +void opened_cannon_act_6(void) { if (o->oTimer == 0) - PlaySound2(SOUND_OBJ_CANNON2); + cur_obj_play_sound_2(SOUND_OBJ_CANNON2); if (o->oTimer < 4) { o->oPosX += (f32)((o->oTimer / 2 & 1) - 0.5) * 4.0f; o->oPosZ += (f32)((o->oTimer / 2 & 1) - 0.5) * 4.0f; @@ -71,9 +71,9 @@ void ActionOpenedCannon6(void) { } } -void ActionOpenedCannon5(void) { +void opened_cannon_act_5(void) { if (o->oTimer == 0) - PlaySound2(SOUND_OBJ_CANNON3); + cur_obj_play_sound_2(SOUND_OBJ_CANNON3); if (o->oTimer < 4) { } else { if (o->oTimer < 20) { @@ -85,34 +85,34 @@ void ActionOpenedCannon5(void) { } } -void ActionOpenedCannon1(void) { +void opened_cannon_act_1(void) { UNUSED s32 unused; - obj_become_intangible(); - obj_disable_rendering(); + cur_obj_become_intangible(); + cur_obj_disable_rendering(); o->oCannonUnk10C = 0; gMarioShotFromCannon = 1; } -void ActionOpenedCannon2(void) { +void opened_cannon_act_2(void) { o->oAction = 3; } -void ActionOpenedCannon3(void) { +void opened_cannon_act_3(void) { UNUSED s32 unused; if (o->oTimer > 3) o->oAction = 0; } -void (*sOpenedCannonActions[])(void) = { ActionOpenedCannon0, ActionOpenedCannon1, ActionOpenedCannon2, - ActionOpenedCannon3, ActionOpenedCannon4, ActionOpenedCannon5, - ActionOpenedCannon6 }; +void (*sOpenedCannonActions[])(void) = { opened_cannon_act_0, opened_cannon_act_1, opened_cannon_act_2, + opened_cannon_act_3, opened_cannon_act_4, opened_cannon_act_5, + opened_cannon_act_6 }; u8 unused0EA1FC[] = { 2, 0, 0, 0, 0, 0, 0, 0, 63, 128, 0, 0, 2, 0, 0, 0, 65, 32, 0, 0, 63, 128, 0, 0, 2, 0, 0, 0, 65, 160, 0, 0, 63, 128, 0, 0, 2, 0, 0, 0, 65, 160, 0, 0, 63, 128, 0, 0, 8, 0, 0, 0, 65, 32, 0, 0, 63, 128, 0, 0 }; void bhv_cannon_base_loop(void) { - obj_call_action_function(sOpenedCannonActions); + cur_obj_call_action_function(sOpenedCannonActions); if (o->oCannonUnkF8) o->oCannonUnkF8++; o->oInteractStatus = 0; @@ -121,10 +121,10 @@ void bhv_cannon_base_loop(void) { void bhv_cannon_barrel_loop(void) { struct Object *parent = o->parentObj; if (parent->header.gfx.node.flags & GRAPH_RENDER_ACTIVE) { - obj_enable_rendering(); - copy_object_pos(o, o->parentObj); + cur_obj_enable_rendering(); + obj_copy_pos(o, o->parentObj); o->oMoveAngleYaw = o->parentObj->oMoveAngleYaw; o->oFaceAnglePitch = o->parentObj->oMoveAnglePitch; } else - obj_disable_rendering(); + cur_obj_disable_rendering(); } diff --git a/src/game/behaviors/cannon_door.inc.c b/src/game/behaviors/cannon_door.inc.c index 661eb31..1bc440d 100644 --- a/src/game/behaviors/cannon_door.inc.c +++ b/src/game/behaviors/cannon_door.inc.c @@ -16,9 +16,9 @@ void bhv_cannon_closed_init(void) { } } -void CannonTrapDoorOpeningLoop(void) { +void cannon_door_act_opening(void) { if (o->oTimer == 0) - PlaySound2(SOUND_GENERAL_CANNON_UP); + cur_obj_play_sound_2(SOUND_GENERAL_CANNON_UP); if (o->oTimer < 30) { o->oVelY = -0.5f; @@ -55,7 +55,7 @@ void bhv_cannon_closed_loop(void) { break; case CANNON_TRAP_DOOR_ACT_OPENING: - CannonTrapDoorOpeningLoop(); + cannon_door_act_opening(); break; } } diff --git a/src/game/behaviors/cap.inc.c b/src/game/behaviors/cap.inc.c index fb8c14c..6234b35 100644 --- a/src/game/behaviors/cap.inc.c +++ b/src/game/behaviors/cap.inc.c @@ -12,8 +12,8 @@ static struct ObjectHitbox sCapHitbox = { /* hurtboxHeight: */ 90, }; -s32 func_802F0904(void) { - set_object_hitbox(o, &sCapHitbox); +s32 cap_set_hitbox(void) { + obj_set_hitbox(o, &sCapHitbox); if (o->oInteractStatus & INT_STATUS_INTERACTED) { o->activeFlags = 0; o->oInteractStatus = 0; @@ -23,13 +23,13 @@ s32 func_802F0904(void) { return 0; } -void func_802F0978(void) { +void cap_despawn(void) { if (o->oTimer > 300) { obj_flicker_and_disappear(o, 300); } } -void func_802F09C0(void) { +void cap_check_quicksand(void) { if (sObjFloor == NULL) return; @@ -74,7 +74,7 @@ void func_802F09C0(void) { } } -void func_802F0B68(void) { +void cap_sink_quicksand(void) { switch (o->oAction) { case 10: if (o->oTimer < 10) { @@ -106,7 +106,7 @@ void func_802F0B68(void) { break; } - func_802F09C0(); + cap_check_quicksand(); } void bhv_wing_cap_init(void) { @@ -116,7 +116,7 @@ void bhv_wing_cap_init(void) { o->oOpacity = 255; } -void func_802F0D70(void) { +void cap_scale_vertically(void) { o->oCapUnkF8 += 0x2000; o->header.gfx.scale[1] = coss(o->oCapUnkF8) * 0.3 + 0.7; if (o->oCapUnkF8 == 0x10000) { @@ -125,13 +125,13 @@ void func_802F0D70(void) { } } -void func_802F0E0C(void) { +void wing_vanish_cap_act_0(void) { s16 sp1E; o->oFaceAngleYaw += o->oForwardVel * 128.0f; sp1E = object_step(); if (sp1E & 0x01) { - func_802F09C0(); + cap_check_quicksand(); if (o->oVelY != 0.0f) { o->oCapUnkF4 = 1; o->oVelY = 0.0f; @@ -139,26 +139,26 @@ void func_802F0E0C(void) { } if (o->oCapUnkF4 == 1) - func_802F0D70(); + cap_scale_vertically(); } void bhv_wing_vanish_cap_loop(void) { switch (o->oAction) { case 0: - func_802F0E0C(); + wing_vanish_cap_act_0(); break; default: object_step(); - func_802F0B68(); + cap_sink_quicksand(); break; } if (o->oTimer > 20) - obj_become_tangible(); + cur_obj_become_tangible(); - func_802F0978(); - func_802F0904(); + cap_despawn(); + cap_set_hitbox(); } void bhv_metal_cap_init(void) { @@ -168,32 +168,32 @@ void bhv_metal_cap_init(void) { o->oOpacity = 0xFF; } -void func_802F0FE0(void) { +void metal_cap_act_0(void) { s16 sp1E; o->oFaceAngleYaw += o->oForwardVel * 128.0f; sp1E = object_step(); if (sp1E & 0x01) - func_802F09C0(); + cap_check_quicksand(); } void bhv_metal_cap_loop(void) { switch (o->oAction) { case 0: - func_802F0FE0(); + metal_cap_act_0(); break; default: object_step(); - func_802F0B68(); + cap_sink_quicksand(); break; } if (o->oTimer > 20) - obj_become_tangible(); + cur_obj_become_tangible(); - func_802F0904(); - func_802F0978(); + cap_set_hitbox(); + cap_despawn(); } void bhv_normal_cap_init(void) { @@ -205,7 +205,7 @@ void bhv_normal_cap_init(void) { save_file_set_cap_pos(o->oPosX, o->oPosY, o->oPosZ); } -void func_802F1190(void) { +void normal_cap_set_save_flags(void) { save_file_clear_flags(SAVE_FLAG_CAP_ON_GROUND); switch (gCurrCourseNum) { @@ -227,14 +227,14 @@ void func_802F1190(void) { } } -void func_802F1234(void) { +void normal_cap_act_0(void) { s16 sp1E; o->oFaceAngleYaw += o->oForwardVel * 128.0f; o->oFaceAnglePitch += o->oForwardVel * 80.0f; sp1E = object_step(); if (sp1E & 0x01) { - func_802F09C0(); + cap_check_quicksand(); if (o->oVelY != 0.0f) { o->oCapUnkF4 = 1; @@ -244,18 +244,18 @@ void func_802F1234(void) { } if (o->oCapUnkF4 == 1) - func_802F0D70(); + cap_scale_vertically(); } void bhv_normal_cap_loop(void) { switch (o->oAction) { case 0: - func_802F1234(); + normal_cap_act_0(); break; default: object_step(); - func_802F0B68(); + cap_sink_quicksand(); break; } @@ -263,9 +263,9 @@ void bhv_normal_cap_loop(void) { save_file_set_cap_pos(o->oPosX, o->oPosY, o->oPosZ); if (o->activeFlags == 0) - func_802F1190(); + normal_cap_set_save_flags(); - if (func_802F0904() == 1) + if (cap_set_hitbox() == 1) save_file_clear_flags(SAVE_FLAG_CAP_ON_GROUND); } diff --git a/src/game/behaviors/capswitch.inc.c b/src/game/behaviors/capswitch.inc.c index a417f22..091638b 100644 --- a/src/game/behaviors/capswitch.inc.c +++ b/src/game/behaviors/capswitch.inc.c @@ -1,8 +1,8 @@ // capswitch.c.inc -void ActionActivateCapSwitch0(void) { +void cap_switch_act_0(void) { o->oAnimState = o->oBehParams2ndByte; - obj_scale(0.5f); + cur_obj_scale(0.5f); o->oPosY += 71.0f; spawn_object_relative_with_scale(0, 0, -71, 0, 0.5f, o, MODEL_CAP_SWITCH_BASE, bhvCapSwitchBase); if (gCurrLevelNum != LEVEL_UNKNOWN_32) { @@ -15,51 +15,36 @@ void ActionActivateCapSwitch0(void) { o->oAction = 1; } -void ActionActivateCapSwitch1(void) { - if (obj_is_mario_on_platform()) { +void cap_switch_act_1(void) { + if (cur_obj_is_mario_on_platform()) { save_file_set_flags(D_8032F0C0[o->oBehParams2ndByte]); o->oAction = 2; - PlaySound2(SOUND_GENERAL_ACTIVATE_CAP_SWITCH); + cur_obj_play_sound_2(SOUND_GENERAL_ACTIVATE_CAP_SWITCH); } } -void ActionActivateCapSwitch2(void) { +void cap_switch_act_2(void) { s32 sp1C; if (o->oTimer < 5) { - func_802A3398(2, 4, 0.5f, 0.1f); + cur_obj_scale_over_time(2, 4, 0.5f, 0.1f); if (o->oTimer == 4) { - ShakeScreen(SHAKE_POS_SMALL); - func_802A3004(); + cur_obj_shake_screen(SHAKE_POS_SMALL); + spawn_mist_particles(); spawn_triangle_break_particles(60, 139, 0.3f, o->oBehParams2ndByte); } } else { - sp1C = obj_update_dialog_with_cutscene(1, 0x0C, CUTSCENE_CAP_SWITCH_PRESS, 0); + sp1C = cur_obj_update_dialog_with_cutscene(1, 0x0C, CUTSCENE_CAP_SWITCH_PRESS, 0); if (sp1C) o->oAction = 3; } } -void ActionActivateCapSwitch3() { +void cap_switch_act_3() { } // dead function -void (*sCapSwitchActions[])(void) = { ActionActivateCapSwitch0, ActionActivateCapSwitch1, - ActionActivateCapSwitch2, ActionActivateCapSwitch3 }; +void (*sCapSwitchActions[])(void) = { cap_switch_act_0, cap_switch_act_1, + cap_switch_act_2, cap_switch_act_3 }; void bhv_cap_switch_loop(void) { - obj_call_action_function(sCapSwitchActions); -} - -Gfx *Geo18_802A719C(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { - Mat4 sp20; - struct Object *sp1C; - - if (run == TRUE) { - sp1C = (struct Object *) gCurGraphNodeObject; - if (sp1C->prevObj != NULL) { - func_8029D704(sp20, mtx, gCurGraphNodeCamera->matrixPtr); - func_8029D558(sp20, sp1C->prevObj); - func_8029EA0C(sp1C->prevObj); - } - } - return NULL; + cur_obj_call_action_function(sCapSwitchActions); } diff --git a/src/game/behaviors/castle_floor_trap.inc.c b/src/game/behaviors/castle_floor_trap.inc.c index 12fb3f1..66f16ff 100644 --- a/src/game/behaviors/castle_floor_trap.inc.c +++ b/src/game/behaviors/castle_floor_trap.inc.c @@ -26,7 +26,7 @@ void bhv_castle_floor_trap_open_detect(void) { void bhv_castle_floor_trap_open(void) { if (o->oTimer == 0) - PlaySound2(SOUND_GENERAL_CASTLE_TRAP_OPEN); + cur_obj_play_sound_2(SOUND_GENERAL_CASTLE_TRAP_OPEN); o->oAngleVelRoll -= 0x100; o->oFaceAngleRoll += o->oAngleVelRoll; if (o->oFaceAngleRoll < -0x4000) { diff --git a/src/game/behaviors/celebration_star.inc.c b/src/game/behaviors/celebration_star.inc.c index 053b295..8782d88 100644 --- a/src/game/behaviors/celebration_star.inc.c +++ b/src/game/behaviors/celebration_star.inc.c @@ -11,24 +11,24 @@ void bhv_celebration_star_init(void) { o->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_BOWSER_KEY]; o->oFaceAnglePitch = 0; o->oFaceAngleRoll = 49152; - obj_scale(0.1f); + cur_obj_scale(0.1f); o->oCelebStarUnkF4 = 1; } else { o->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_STAR]; o->oFaceAnglePitch = 0; o->oFaceAngleRoll = 0; - obj_scale(0.4f); + cur_obj_scale(0.4f); o->oCelebStarUnkF4 = 0; } #else o->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_STAR]; - obj_scale(0.4f); + cur_obj_scale(0.4f); o->oFaceAnglePitch = 0; o->oFaceAngleRoll = 0; #endif } -void CelebrationStarSpinAroundMarioLoop(void) { +void celeb_star_act_spin_around_mario(void) { o->oPosX = o->oHomeX + sins(o->oMoveAngleYaw) * (f32)(o->oCelebStarDiameterOfRotation / 2); o->oPosZ = o->oHomeZ + coss(o->oMoveAngleYaw) * (f32)(o->oCelebStarDiameterOfRotation / 2); o->oPosY += 5.0f; @@ -44,17 +44,17 @@ void CelebrationStarSpinAroundMarioLoop(void) { o->oCelebStarDiameterOfRotation -= 20; } -void CelebrationStarFaceCameraLoop(void) { +void celeb_star_act_face_camera(void) { if (o->oTimer < 10) { #if BUGFIX_STAR_BOWSER_KEY if (o->oCelebStarUnkF4 == 0) { - obj_scale((f32) o->oTimer / 10.0); + cur_obj_scale((f32) o->oTimer / 10.0); } else { - obj_scale((f32) o->oTimer / 30.0); + cur_obj_scale((f32) o->oTimer / 30.0); } #else - obj_scale((f32) o->oTimer / 10.0); + cur_obj_scale((f32) o->oTimer / 10.0); #endif o->oFaceAngleYaw += 0x1000; } else { @@ -68,11 +68,11 @@ void CelebrationStarFaceCameraLoop(void) { void bhv_celebration_star_loop(void) { switch (o->oAction) { case CELEB_STAR_ACT_SPIN_AROUND_MARIO: - CelebrationStarSpinAroundMarioLoop(); + celeb_star_act_spin_around_mario(); break; case CELEB_STAR_ACT_FACE_CAMERA: - CelebrationStarFaceCameraLoop(); + celeb_star_act_face_camera(); break; } } @@ -85,6 +85,6 @@ void bhv_celebration_star_sparkle_loop(void) { } void bhv_star_key_collection_puff_spawner_loop(void) { - func_802AA618(0, 10, 30.0f); + spawn_mist_particles_variable(0, 10, 30.0f); o->activeFlags = 0; } diff --git a/src/game/behaviors/chain_chomp.inc.c b/src/game/behaviors/chain_chomp.inc.c index c28db1c..80d7459 100644 --- a/src/game/behaviors/chain_chomp.inc.c +++ b/src/game/behaviors/chain_chomp.inc.c @@ -31,7 +31,7 @@ void bhv_chain_chomp_chain_part_update(void) { struct ChainSegment *segment; if (o->parentObj->oAction == CHAIN_CHOMP_ACT_UNLOAD_CHAIN) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else if (o->oBehParams2ndByte != CHAIN_CHOMP_CHAIN_PART_BP_PIVOT) { segment = &o->parentObj->oChainChompSegments[o->oBehParams2ndByte]; @@ -41,8 +41,8 @@ void bhv_chain_chomp_chain_part_update(void) { o->oPosZ = o->parentObj->parentObj->oPosZ + segment->posZ; ; } else if (o->parentObj->oChainChompReleaseStatus != CHAIN_CHOMP_NOT_RELEASED) { - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); } } @@ -65,7 +65,7 @@ static void chain_chomp_act_uninitialized(void) { chain_segment_init(&segments[i]); } - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); // Spawn the pivot and set to parent if ((o->parentObj = @@ -78,7 +78,7 @@ static void chain_chomp_act_uninitialized(void) { } o->oAction = CHAIN_CHOMP_ACT_MOVE; - obj_unhide(); + cur_obj_unhide(); } } } @@ -174,15 +174,15 @@ static void chain_chomp_sub_act_turn(void) { obj_move_pitch_approach(0, 0x100); if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); if (abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw) < 0x800) { if (o->oTimer > 30) { - if (obj_check_anim_frame(0)) { - func_8029F6F0(); + if (cur_obj_check_anim_frame(0)) { + cur_obj_reverse_animation(); if (o->oTimer > 40) { // Increase the maximum distance from the pivot and enter // the lunging sub-action. - PlaySound2(SOUND_GENERAL_CHAIN_CHOMP2); + cur_obj_play_sound_2(SOUND_GENERAL_CHAIN_CHOMP2); o->oSubAction = CHAIN_CHOMP_SUB_ACT_LUNGE; o->oChainChompMaxDistFromPivotPerChainPart = 900.0f / 5; @@ -199,12 +199,12 @@ static void chain_chomp_sub_act_turn(void) { o->oForwardVel = 0.0f; } } else { - PlaySound2(SOUND_GENERAL_CHAIN_CHOMP1); + cur_obj_play_sound_2(SOUND_GENERAL_CHAIN_CHOMP1); o->oForwardVel = 10.0f; o->oVelY = 20.0f; } } else { - obj_rotate_yaw_toward(o->oAngleToMario, 0x190); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x190); o->oTimer = 0; } } @@ -231,7 +231,7 @@ static void chain_chomp_sub_act_lunge(void) { ; } else { // Turn toward pivot - obj_rotate_yaw_toward(atan2s(o->oChainChompSegments[0].posZ, o->oChainChompSegments[0].posX), + cur_obj_rotate_yaw_toward(atan2s(o->oChainChompSegments[0].posZ, o->oChainChompSegments[0].posX), 0x1000); if (o->oChainChompUnk104 != 0.0f) { @@ -247,7 +247,7 @@ static void chain_chomp_sub_act_lunge(void) { } if (o->oTimer < 30) { - func_8029F6F0(); + cur_obj_reverse_animation(); } } @@ -278,7 +278,7 @@ static void chain_chomp_released_lunge_around(void) { if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { // Before first bounce, turn toward mario and wait 2 seconds if (o->oChainChompNumLunges == 0) { - if (obj_rotate_yaw_toward(o->oAngleToMario, 0x320)) { + if (cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x320)) { if (o->oTimer > 60) { o->oChainChompNumLunges += 1; // enable wall collision @@ -289,7 +289,7 @@ static void chain_chomp_released_lunge_around(void) { } } else { if (++o->oChainChompNumLunges <= 5) { - PlaySound2(SOUND_GENERAL_CHAIN_CHOMP1); + cur_obj_play_sound_2(SOUND_GENERAL_CHAIN_CHOMP1); o->oMoveAngleYaw = o->oAngleToMario + RandomSign() * 0x2000; o->oForwardVel = 30.0f; o->oVelY = 50.0f; @@ -297,8 +297,8 @@ static void chain_chomp_released_lunge_around(void) { o->oChainChompReleaseStatus = CHAIN_CHOMP_RELEASED_BREAK_GATE; o->oHomeX = 1450.0f; o->oHomeZ = 562.0f; - o->oMoveAngleYaw = obj_angle_to_home(); - o->oForwardVel = obj_lateral_dist_to_home() / 8; + o->oMoveAngleYaw = cur_obj_angle_to_home(); + o->oForwardVel = cur_obj_lateral_dist_to_home() / 8; o->oVelY = 50.0f; } } @@ -318,15 +318,15 @@ static void chain_chomp_released_break_gate(void) { // in a softlock if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { o->oChainChompHitGate = TRUE; - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); o->oForwardVel *= 0.4f; } } else if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { o->oChainChompReleaseStatus = CHAIN_CHOMP_RELEASED_JUMP_AWAY; o->oHomeX = 3288.0f; o->oHomeZ = -1770.0f; - o->oMoveAngleYaw = obj_angle_to_home(); - o->oForwardVel = obj_lateral_dist_to_home() / 50.0f; + o->oMoveAngleYaw = cur_obj_angle_to_home(); + o->oForwardVel = cur_obj_lateral_dist_to_home() / 50.0f; o->oVelY = 120.0f; } } @@ -363,7 +363,7 @@ static void chain_chomp_act_move(void) { o->oAction = CHAIN_CHOMP_ACT_UNLOAD_CHAIN; o->oForwardVel = o->oVelY = 0.0f; } else { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oChainChompReleaseStatus) { case CHAIN_CHOMP_NOT_RELEASED: @@ -393,7 +393,7 @@ static void chain_chomp_act_move(void) { break; } - obj_move_standard(78); + cur_obj_move_standard(78); // Segment 0 connects the pivot to the chain chomp itself o->oChainChompSegments[0].posX = o->oPosX - o->parentObj->oPosX; @@ -454,13 +454,13 @@ static void chain_chomp_act_move(void) { * themselves when they see that the chain chomp is in this action. */ static void chain_chomp_act_unload_chain(void) { - obj_hide(); + cur_obj_hide(); mem_pool_free(gObjectMemoryPool, o->oChainChompSegments); o->oAction = CHAIN_CHOMP_ACT_UNINITIALIZED; if (o->oChainChompReleaseStatus != CHAIN_CHOMP_NOT_RELEASED) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } @@ -487,13 +487,13 @@ void bhv_chain_chomp_update(void) { void bhv_wooden_post_update(void) { // When ground pounded by mario, drop by -45 + -20 if (!o->oWoodenPostMarioPounding) { - if ((o->oWoodenPostMarioPounding = obj_is_mario_ground_pounding_platform())) { - PlaySound2(SOUND_GENERAL_POUND_WOOD_POST); + if ((o->oWoodenPostMarioPounding = cur_obj_is_mario_ground_pounding_platform())) { + cur_obj_play_sound_2(SOUND_GENERAL_POUND_WOOD_POST); o->oWoodenPostSpeedY = -70.0f; } } else if (approach_f32_ptr(&o->oWoodenPostSpeedY, 0.0f, 25.0f)) { // Stay still until mario is done ground pounding - o->oWoodenPostMarioPounding = obj_is_mario_ground_pounding_platform(); + o->oWoodenPostMarioPounding = cur_obj_is_mario_ground_pounding_platform(); } else if ((o->oWoodenPostOffsetY += o->oWoodenPostSpeedY) < -190.0f) { // Once pounded, if this is the chain chomp's post, release the chain // chomp @@ -516,7 +516,7 @@ void bhv_wooden_post_update(void) { // coins o->oWoodenPostTotalMarioAngle += (s16)(o->oAngleToMario - o->oWoodenPostPrevAngleToMario); if (absi(o->oWoodenPostTotalMarioAngle) > 0x30000 && o->oTimer < 200) { - spawn_object_loot_yellow_coins(o, 5, 20.0f); + obj_spawn_loot_yellow_coins(o, 5, 20.0f); set_object_respawn_info_bits(o, 1); } } @@ -529,7 +529,7 @@ void bhv_wooden_post_update(void) { * Init function for chain chomp gate. */ void bhv_chain_chomp_gate_init(void) { - o->parentObj = obj_nearest_object_with_behavior(bhvChainChomp); + o->parentObj = cur_obj_nearest_object_with_behavior(bhvChainChomp); } /** @@ -537,10 +537,10 @@ void bhv_chain_chomp_gate_init(void) { */ void bhv_chain_chomp_gate_update(void) { if (o->parentObj->oChainChompHitGate) { - func_802A3034(SOUND_GENERAL_WALL_EXPLOSION); + spawn_mist_particles_with_sound(SOUND_GENERAL_WALL_EXPLOSION); set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ); - func_802AA618(0, 0x7F, 200.0f); + spawn_mist_particles_variable(0, 0x7F, 200.0f); spawn_triangle_break_particles(30, 0x8A, 3.0f, 4); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } diff --git a/src/game/behaviors/checkerboard_platform.inc.c b/src/game/behaviors/checkerboard_platform.inc.c index 1203193..30235a0 100644 --- a/src/game/behaviors/checkerboard_platform.inc.c +++ b/src/game/behaviors/checkerboard_platform.inc.c @@ -3,12 +3,6 @@ struct Struct8032F754 D_8032F754[] = { { 145, { 0.7f, 1.5f, 0.7f }, 7.0f }, { 235, { 1.2f, 2.0f, 1.2f }, 11.6f } }; -void func_802B8F7C(Vec3f dest, Vec3f src) { - dest[0] = src[0]; - dest[1] = src[1]; - dest[2] = src[2]; -} - void bhv_checkerboard_elevator_group_init(void) { s32 sp3C; s32 sp38; @@ -28,11 +22,11 @@ void bhv_checkerboard_elevator_group_init(void) { sp2C = spawn_object_relative(i, 0, i * sp3C, sp38, o, MODEL_CHECKERBOARD_PLATFORM, bhvCheckerboardPlatformSub); sp2C->oCheckerBoardPlatformUnk1AC = D_8032F754[sp34].unk2; - func_802B8F7C(sp2C->header.gfx.scale, D_8032F754[sp34].unk1); + vec3f_copy_2(sp2C->header.gfx.scale, D_8032F754[sp34].unk1); } } -void func_802B9120(UNUSED s32 unused, f32 vel, s32 a2) { +void checkerboard_plat_act_move_y(UNUSED s32 unused, f32 vel, s32 a2) { o->oMoveAnglePitch = 0; o->oAngleVelPitch = 0; o->oForwardVel = 0.0f; @@ -41,7 +35,7 @@ void func_802B9120(UNUSED s32 unused, f32 vel, s32 a2) { o->oAction++; } -void func_802B91A0(s32 a0, s16 a1) { +void checkerboard_plat_act_rotate(s32 a0, s16 a1) { o->oVelY = 0.0f; o->oAngleVelPitch = a1; if (o->oTimer + 1 == 0x8000 / absi(a1)) @@ -57,7 +51,7 @@ void bhv_checkerboard_platform_loop(void) { f32 sp24 = o->oCheckerBoardPlatformUnk1AC; o->oCheckerBoardPlatformUnkF8 = 0; if (o->oDistanceToMario < 1000.0f) - PlaySound(SOUND_ENV_ELEVATOR4); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR4); switch (o->oAction) { case 0: if (o->oBehParams2ndByte == 0) @@ -66,16 +60,16 @@ void bhv_checkerboard_platform_loop(void) { o->oAction = 3; break; case 1: - func_802B9120(2, 10.0f, o->oCheckerBoardPlatformUnkFC); + checkerboard_plat_act_move_y(2, 10.0f, o->oCheckerBoardPlatformUnkFC); break; case 2: - func_802B91A0(3, 512); + checkerboard_plat_act_rotate(3, 512); break; case 3: - func_802B9120(4, -10.0f, o->oCheckerBoardPlatformUnkFC); + checkerboard_plat_act_move_y(4, -10.0f, o->oCheckerBoardPlatformUnkFC); break; case 4: - func_802B91A0(1, -512); + checkerboard_plat_act_rotate(1, -512); break; } o->oMoveAnglePitch += absi(o->oAngleVelPitch); @@ -88,8 +82,8 @@ void bhv_checkerboard_platform_loop(void) { if (o->oCheckerBoardPlatformUnkF8 == 1) { o->oAngleVelPitch = 0; o->oFaceAnglePitch &= ~0x7FFF; - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } else - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); load_object_collision_model(); } diff --git a/src/game/behaviors/chuckya.inc.c b/src/game/behaviors/chuckya.inc.c index b671990..aa50186 100644 --- a/src/game/behaviors/chuckya.inc.c +++ b/src/game/behaviors/chuckya.inc.c @@ -1,11 +1,11 @@ // chuckya.c.inc -void func_802A8D18(f32 sp28, f32 sp2C, s32 sp30) { +void common_anchor_mario_behavior(f32 sp28, f32 sp2C, s32 sp30) { switch (o->parentObj->oChuckyaUnk88) { case 0: break; case 1: - func_802A2008(gMarioObject, o); + obj_set_gfx_pos_at_obj_pos(gMarioObject, o); break; case 2: gMarioObject->oInteractStatus |= (sp30 + INT_STATUS_MARIO_UNK2); @@ -23,30 +23,30 @@ void func_802A8D18(f32 sp28, f32 sp2C, s32 sp30) { } o->oMoveAngleYaw = o->parentObj->oMoveAngleYaw; if (!o->parentObj->activeFlags) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_chuckya_anchor_mario_loop(void) { - func_802A8D18(40.0f, 40.0f, 64); + common_anchor_mario_behavior(40.0f, 40.0f, 64); } -s32 Unknown802A8EC8(s32 sp20, f32 sp24, f32 sp28, s32 sp2C) { +s32 unknown_chuckya_function(s32 sp20, f32 sp24, f32 sp28, s32 sp2C) { s32 sp1C = 0; if (o->oChuckyaUnkF8 != 4) { - if (sp24 < obj_lateral_dist_from_mario_to_home()) { - if (obj_lateral_dist_to_home() < 200.0f) + if (sp24 < cur_obj_lateral_dist_from_mario_to_home()) { + if (cur_obj_lateral_dist_to_home() < 200.0f) sp1C = 0; else { sp1C = 1; - o->oAngleToMario = obj_angle_to_home(); + o->oAngleToMario = cur_obj_angle_to_home(); } } else if (o->oDistanceToMario > sp28) { if (gGlobalTimer % (s16) sp2C == 0) - o->oAngleToMario = angle_to_object(o, gMarioObject); + o->oAngleToMario = obj_angle_to_object(o, gMarioObject); sp1C = 2; } else sp1C = 3; - if (sp20 && func_802C5A64(&o->oAngleToMario)) { + if (sp20 && update_angle_from_move_flags(&o->oAngleToMario)) { sp1C = 4; o->oChuckyaUnkF8 = 4; } @@ -55,7 +55,7 @@ s32 Unknown802A8EC8(s32 sp20, f32 sp24, f32 sp28, s32 sp2C) { return sp1C; } -s32 func_802A9050(f32 *arr, f32 spC, f32 sp10) { +s32 approach_forward_vel(f32 *arr, f32 spC, f32 sp10) { s32 sp4 = 0; if (arr[0] > spC) { arr[0] -= sp10; @@ -70,18 +70,18 @@ s32 func_802A9050(f32 *arr, f32 spC, f32 sp10) { return sp4; } -void ActionChuckya0(void) { +void chuckya_act_0(void) { s32 sp3C; UNUSED u8 pad[16]; s32 sp28; if (o->oTimer == 0) o->oChuckyaUnkFC = 0; - o->oAngleToMario = angle_to_object(o, gMarioObject); + o->oAngleToMario = obj_angle_to_object(o, gMarioObject); switch (sp28 = o->oSubAction) { case 0: o->oForwardVel = 0; - if (obj_lateral_dist_from_mario_to_home() < 2000.0f) { - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + if (cur_obj_lateral_dist_from_mario_to_home() < 2000.0f) { + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); if (o->oChuckyaUnkFC > 40 || abs_angle_diff(o->oMoveAngleYaw, o->oAngleToMario) < 0x1000) o->oSubAction = 1; @@ -89,26 +89,26 @@ void ActionChuckya0(void) { o->oSubAction = 3; break; case 1: - func_802A9050(&o->oForwardVel, 30.0f, 4.0f); + approach_forward_vel(&o->oForwardVel, 30.0f, 4.0f); if (abs_angle_diff(o->oMoveAngleYaw, o->oAngleToMario) > 0x4000) o->oSubAction = 2; - if (obj_lateral_dist_from_mario_to_home() > 2000.0f) + if (cur_obj_lateral_dist_from_mario_to_home() > 2000.0f) o->oSubAction = 3; break; case 2: - func_802A9050(&o->oForwardVel, 0, 4.0f); + approach_forward_vel(&o->oForwardVel, 0, 4.0f); if (o->oChuckyaUnkFC > 48) o->oSubAction = 0; break; case 3: - if (obj_lateral_dist_to_home() < 500.0f) + if (cur_obj_lateral_dist_to_home() < 500.0f) o->oForwardVel = 0; else { - func_802A9050(&o->oForwardVel, 10.0f, 4.0f); - o->oAngleToMario = obj_angle_to_home(); - obj_rotate_yaw_toward(o->oAngleToMario, 0x800); + approach_forward_vel(&o->oForwardVel, 10.0f, 4.0f); + o->oAngleToMario = cur_obj_angle_to_home(); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x800); } - if (obj_lateral_dist_from_mario_to_home() < 1900.0f) + if (cur_obj_lateral_dist_from_mario_to_home() < 1900.0f) o->oSubAction = 0; break; } @@ -116,16 +116,16 @@ void ActionChuckya0(void) { o->oChuckyaUnkFC = 0; else o->oChuckyaUnkFC++; - set_obj_animation_and_sound_state(4); + cur_obj_init_animation_with_sound(4); if (o->oForwardVel > 1.0f) - PlaySound(SOUND_AIR_CHUCKYA_MOVE); + cur_obj_play_sound_1(SOUND_AIR_CHUCKYA_MOVE); print_debug_bottom_up("fg %d", sp3C); print_debug_bottom_up("sp %d", o->oForwardVel); } -void ActionChuckya1(void) { +void chuckya_act_1(void) { if (o->oSubAction == 0) { - if (func_802A4AB0(0)) + if (cur_obj_init_animation_and_check_if_near_end(0)) o->oSubAction++; o->oChuckyaUnkFC = RandomFloat() * 30.0f + 10.0f; o->oChuckyaUnk100 = 0; @@ -139,18 +139,18 @@ void ActionChuckya1(void) { o->oAction = 3; o->oInteractStatus &= ~(INT_STATUS_GRABBED_MARIO); } else { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); o->oMoveAngleYaw += INT_STATUS_GRABBED_MARIO; if (o->oChuckyaUnkFC-- < 0) - if (func_802B0C54(50.0f, 150.0f) || o->oChuckyaUnkFC < -16) { + if (check_if_moving_over_floor(50.0f, 150.0f) || o->oChuckyaUnkFC < -16) { o->oSubAction++; ; } } } else { - set_obj_animation_and_sound_state(3); - if (obj_check_anim_frame(18)) { - PlaySound2(SOUND_OBJ_UNKNOWN4); + cur_obj_init_animation_with_sound(3); + if (cur_obj_check_anim_frame(18)) { + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN4); o->oChuckyaUnk88 = 2; o->oAction = 3; o->oInteractStatus &= ~(INT_STATUS_GRABBED_MARIO); @@ -159,50 +159,50 @@ void ActionChuckya1(void) { } } -void ActionChuckya3(void) { +void chuckya_act_3(void) { o->oForwardVel = 0; o->oVelY = 0; - set_obj_animation_and_sound_state(4); + cur_obj_init_animation_with_sound(4); if (o->oTimer > 100) o->oAction = 0; } -void ActionChuckya2(void) { +void chuckya_act_2(void) { if (o->oMoveFlags & (0x200 | 0x40 | 0x20 | 0x10 | 0x8 | 0x1)) { - mark_object_for_deletion(o); - spawn_object_loot_yellow_coins(o, 5, 20.0f); - func_802A3034(SOUND_OBJ_CHUCKYA_DEATH); + obj_mark_for_deletion(o); + obj_spawn_loot_yellow_coins(o, 5, 20.0f); + spawn_mist_particles_with_sound(SOUND_OBJ_CHUCKYA_DEATH); } } -void (*sChuckyaActions[])(void) = { ActionChuckya0, ActionChuckya1, ActionChuckya2, ActionChuckya3 }; +void (*sChuckyaActions[])(void) = { chuckya_act_0, chuckya_act_1, chuckya_act_2, chuckya_act_3 }; -void func_802A97B8(void) { - obj_update_floor_and_walls(); - obj_call_action_function(sChuckyaActions); - obj_move_standard(-30); +void chuckya_move(void) { + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sChuckyaActions); + cur_obj_move_standard(-30); if (o->oInteractStatus & INT_STATUS_GRABBED_MARIO) { o->oAction = 1; o->oChuckyaUnk88 = 1; - PlaySound2(SOUND_OBJ_UNKNOWN3); + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN3); } } void bhv_chuckya_loop(void) { f32 sp2C = 20.0f; f32 sp28 = 50.0f; - obj_scale(2.0f); + cur_obj_scale(2.0f); o->oInteractionSubtype |= INT_SUBTYPE_GRABS_MARIO; switch (o->oHeldState) { case HELD_FREE: - func_802A97B8(); + chuckya_move(); break; case HELD_HELD: - func_8029FA5C(2, 0); + cur_obj_unrender_and_reset_state(2, 0); break; case HELD_THROWN: case HELD_DROPPED: - obj_get_thrown_or_placed(sp2C, sp28, 2); + cur_obj_get_thrown_or_placed(sp2C, sp28, 2); break; } o->oInteractStatus = 0; diff --git a/src/game/behaviors/clam.inc.c b/src/game/behaviors/clam.inc.c index 6ea3a1d..6ce4402 100644 --- a/src/game/behaviors/clam.inc.c +++ b/src/game/behaviors/clam.inc.c @@ -14,18 +14,18 @@ struct ObjectHitbox sClamShellHitbox = { void clam_act_0(void) { if (func_802F92EC(0, 25)) { - PlaySound2(SOUND_GENERAL_CLAM_SHELL3); - func_802ADA94(); - obj_become_tangible(); + cur_obj_play_sound_2(SOUND_GENERAL_CLAM_SHELL3); + spawn_mist_from_global(); + cur_obj_become_tangible(); o->oClamUnkF4 = 10; o->oTimer = 0; } else if (o->oTimer > 150 && o->oDistanceToMario < 500.0f) { - PlaySound2(SOUND_GENERAL_CLAM_SHELL2); + cur_obj_play_sound_2(SOUND_GENERAL_CLAM_SHELL2); o->oAction = 1; } else if (o->oClamUnkF4 != 0) { o->oClamUnkF4 -= 1; - obj_shake_y(3.0f); + cur_obj_shake_y(3.0f); } } @@ -43,8 +43,8 @@ void clam_act_1(void) { spawn_object_relative(0, val04, 30, val02, o, MODEL_BUBBLE, bhvBubbleMaybe); } - } else if (obj_check_anim_frame(30)) { - obj_become_intangible(); + } else if (cur_obj_check_anim_frame(30)) { + cur_obj_become_intangible(); } } diff --git a/src/game/behaviors/clock_arm.inc.c b/src/game/behaviors/clock_arm.inc.c index a0b0d13..26ff894 100644 --- a/src/game/behaviors/clock_arm.inc.c +++ b/src/game/behaviors/clock_arm.inc.c @@ -22,7 +22,7 @@ void bhv_rotating_clock_arm_loop(void) { || marioSurface->type == SURFACE_TTC_PAINTING_2 || marioSurface->type == SURFACE_TTC_PAINTING_3)) { // And this is the minute hand... - if (obj_has_behavior(bhvClockMinuteHand)) { + if (cur_obj_has_behavior(bhvClockMinuteHand)) { // Set Tick Tick Clock's speed based on the angle of the hand. // The angle actually counting down from 0xFFFF to 0 so // 11 o'clock is a small value and 1 o'clock is a large value. @@ -46,5 +46,5 @@ void bhv_rotating_clock_arm_loop(void) { // Only rotate the hands until Mario enters the painting. if (o->oAction < 2) - obj_rotate_face_angle_using_vel(); + cur_obj_rotate_face_angle_using_vel(); } diff --git a/src/game/behaviors/cloud.inc.c b/src/game/behaviors/cloud.inc.c index addfa20..e5cb9be 100644 --- a/src/game/behaviors/cloud.inc.c +++ b/src/game/behaviors/cloud.inc.c @@ -34,7 +34,7 @@ static void cloud_act_spawn_parts(void) { // Spawn fwoosh's face spawn_object_relative(5, 0, 0, 0, o, MODEL_FWOOSH, bhvCloudPart); - obj_scale(3.0f); + cur_obj_scale(3.0f); o->oCloudCenterX = o->oPosX; o->oCloudCenterY = o->oPosY; @@ -48,7 +48,7 @@ static void cloud_act_spawn_parts(void) { */ static void cloud_act_fwoosh_hidden(void) { if (o->oDistanceToMario < 2000.0f) { - obj_unhide(); + cur_obj_unhide(); o->oAction = CLOUD_ACT_SPAWN_PARTS; } } @@ -69,10 +69,10 @@ static void cloud_fwoosh_update(void) { o->oCloudBlowing = o->oTimer = 0; } else if (o->oCloudGrowSpeed < -0.1f) { // Start blowing once we start shrinking faster than -0.1 - PlaySound(SOUND_AIR_BLOW_WIND); - func_802C76E0(12, 3.0f, 0.0f, -50.0f, 120.0f); + cur_obj_play_sound_1(SOUND_AIR_BLOW_WIND); + cur_obj_spawn_strong_wind_particles(12, 3.0f, 0.0f, -50.0f, 120.0f); } else { - PlaySound(SOUND_ENV_WIND1); + cur_obj_play_sound_1(SOUND_ENV_WIND1); } } else { // Return to normal size @@ -94,7 +94,7 @@ static void cloud_fwoosh_update(void) { o->oCloudCenterY = o->oHomeY; } - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); } } @@ -141,11 +141,11 @@ static void cloud_act_main(void) { */ static void cloud_act_unload(void) { if (o->oBehParams2ndByte != CLOUD_BP_FWOOSH) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { o->oAction = CLOUD_ACT_FWOOSH_HIDDEN; - obj_hide(); - obj_set_pos_to_home(); + cur_obj_hide(); + cur_obj_set_pos_to_home(); } } @@ -174,7 +174,7 @@ void bhv_cloud_update(void) { */ void bhv_cloud_part_update(void) { if (o->parentObj->oAction == CLOUD_ACT_UNLOAD) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { f32 size = 2.0f / 3.0f * o->parentObj->header.gfx.scale[0]; s16 angleFromCenter = o->parentObj->oFaceAngleYaw + 0x10000 / 5 * o->oBehParams2ndByte; @@ -185,7 +185,7 @@ void bhv_cloud_part_update(void) { f32 cloudRadius; - obj_scale(size); + cur_obj_scale(size); // Cap fwoosh's face size if (o->oBehParams2ndByte == 5 && size > 2.0f) { diff --git a/src/game/behaviors/coffin.inc.c b/src/game/behaviors/coffin.inc.c index ff8d575..5926bff 100644 --- a/src/game/behaviors/coffin.inc.c +++ b/src/game/behaviors/coffin.inc.c @@ -76,14 +76,14 @@ void coffin_act_idle(void) { // If the coffin landed... if (obj_face_pitch_approach(0, -o->oAngleVelPitch)) { - PlaySound2(SOUND_GENERAL_ELEVATOR_MOVE_2); + cur_obj_play_sound_2(SOUND_GENERAL_ELEVATOR_MOVE_2); // This bit changes the coffin's position, // spawns dust there, then resets the position. obj_perform_position_op(POS_OP_SAVE_POSITION); o->oMoveAngleYaw = o->oFaceAngleYaw - 0x4000; obj_set_dist_from_home(200.0f); - func_802ADA94(); + spawn_mist_from_global(); obj_perform_position_op(POS_OP_RESTORE_POSITION); } @@ -105,7 +105,7 @@ void coffin_act_idle(void) { && (o->oDistanceToMario > 100.0f || gMarioState->action == ACT_SQUISHED)) { if (gMarioObject->oPosY - o->oPosY < 200.0f && absf(distForwards) < 140.0f) { if (distSideways < 150.0f && distSideways > -450.0f) { - PlaySound2(SOUND_GENERAL_BUTTON_PRESS_2_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_BUTTON_PRESS_2_LOWPRIO); o->oAction = COFFIN_ACT_STAND_UP; } } @@ -131,7 +131,7 @@ void coffin_act_stand_up(void) { o->oFaceAngleRoll = 0; } else if (o->oTimer > 30) { if (gGlobalTimer % 4 == 0) { - PlaySound2(SOUND_GENERAL_ELEVATOR_MOVE_2); + cur_obj_play_sound_2(SOUND_GENERAL_ELEVATOR_MOVE_2); } // Shake the coffin while its standing o->oFaceAngleRoll = 400 * (gGlobalTimer % 2) - 200; @@ -148,7 +148,7 @@ void coffin_act_stand_up(void) { void bhv_coffin_loop(void) { // Gotta save those 6 object slots if (o->parentObj->oAction == COFFIN_SPAWNER_ACT_COFFINS_UNLOADED) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { // Scale the coffin vertically? Must have thought it was too short? o->header.gfx.scale[1] = 1.1f; diff --git a/src/game/behaviors/coin.inc.c b/src/game/behaviors/coin.inc.c index e593ba7..d7c27e3 100644 --- a/src/game/behaviors/coin.inc.c +++ b/src/game/behaviors/coin.inc.c @@ -18,7 +18,7 @@ s16 D_8032F2A4[][2] = { { 0, -150 }, { 0, -50 }, { 0, 50 }, { 0, 150 }, s32 bhv_coin_sparkles_init(void) { if (o->oInteractStatus & INT_STATUS_INTERACTED && !(o->oInteractStatus & INTERACT_TEXT)) { spawn_object(o, MODEL_SPARKLES, bhvGoldenCoinSparkles); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); return 1; } o->oInteractStatus = 0; @@ -26,14 +26,14 @@ s32 bhv_coin_sparkles_init(void) { } void bhv_yellow_coin_init(void) { - obj_set_behavior(bhvYellowCoin); - set_object_hitbox(o, &sYellowCoinHitbox); + cur_obj_set_behavior(bhvYellowCoin); + obj_set_hitbox(o, &sYellowCoinHitbox); bhv_init_room(); - obj_update_floor_height(); + cur_obj_update_floor_height(); if (500.0f < absf(o->oPosY - o->oFloorHeight)) - obj_set_model(MODEL_YELLOW_COIN_NO_SHADOW); + cur_obj_set_model(MODEL_YELLOW_COIN_NO_SHADOW); if (o->oFloorHeight < -10000.0f) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_yellow_coin_loop(void) { @@ -43,8 +43,8 @@ void bhv_yellow_coin_loop(void) { void bhv_temp_coin_loop(void) { o->oAnimState++; - if (obj_wait_then_blink(200, 20)) - mark_object_for_deletion(o); + if (cur_obj_wait_then_blink(200, 20)) + obj_mark_for_deletion(o); bhv_coin_sparkles_init(); } @@ -52,17 +52,17 @@ void bhv_coin_init(void) { o->oVelY = RandomFloat() * 10.0f + 30 + o->oCoinUnk110; o->oForwardVel = RandomFloat() * 10.0f; o->oMoveAngleYaw = RandomU16(); - obj_set_behavior(bhvYellowCoin); - set_object_hitbox(o, &sYellowCoinHitbox); - obj_become_intangible(); + cur_obj_set_behavior(bhvYellowCoin); + obj_set_hitbox(o, &sYellowCoinHitbox); + cur_obj_become_intangible(); } void bhv_coin_loop(void) { struct Surface *sp1C; s16 sp1A; - obj_update_floor_and_walls(); - obj_if_hit_wall_bounce_away(); - obj_move_standard(-62); + cur_obj_update_floor_and_walls(); + cur_obj_if_hit_wall_bounce_away(); + cur_obj_move_standard(-62); if ((sp1C = o->oFloor) != NULL) { if (o->oMoveFlags & OBJ_MOVE_ON_GROUND) o->oSubAction = 1; @@ -70,70 +70,70 @@ void bhv_coin_loop(void) { o->oBounce = 0; if (sp1C->normal.y < 0.9) { sp1A = atan2s(sp1C->normal.z, sp1C->normal.x); - obj_rotate_yaw_toward(sp1A, 0x400); + cur_obj_rotate_yaw_toward(sp1A, 0x400); } } } if (o->oTimer == 0) #ifdef VERSION_US - PlaySound2(SOUND_GENERAL_COIN_SPURT_2); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT_2); #elif VERSION_EU - PlaySound2(SOUND_GENERAL_COIN_SPURT_EU); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT_EU); #else - PlaySound2(SOUND_GENERAL_COIN_SPURT); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT); #endif if (o->oVelY < 0) - obj_become_tangible(); + cur_obj_become_tangible(); if (o->oMoveFlags & OBJ_MOVE_LANDED) { #ifndef VERSION_JP if (o->oMoveFlags & (OBJ_MOVE_ABOVE_DEATH_BARRIER | OBJ_MOVE_ABOVE_LAVA)) #else if (o->oMoveFlags & OBJ_MOVE_ABOVE_LAVA) #endif - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } #ifndef VERSION_JP if (o->oMoveFlags & OBJ_MOVE_13) { if (o->oCoinUnk1B0 < 5) - PlaySound2(0x30364081); + cur_obj_play_sound_2(0x30364081); o->oCoinUnk1B0++; } #else if (o->oMoveFlags & OBJ_MOVE_13) - PlaySound2(SOUND_GENERAL_COIN_DROP); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_DROP); #endif - if (obj_wait_then_blink(400, 20)) - mark_object_for_deletion(o); + if (cur_obj_wait_then_blink(400, 20)) + obj_mark_for_deletion(o); bhv_coin_sparkles_init(); } void bhv_coin_formation_spawn_loop(void) { if (o->oTimer == 0) { - obj_set_behavior(bhvYellowCoin); - set_object_hitbox(o, &sYellowCoinHitbox); + cur_obj_set_behavior(bhvYellowCoin); + obj_set_hitbox(o, &sYellowCoinHitbox); bhv_init_room(); if (o->oCoinUnkF8) { o->oPosY += 300.0f; - obj_update_floor_height(); + cur_obj_update_floor_height(); if (o->oPosY < o->oFloorHeight || o->oFloorHeight < -10000.0f) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); else o->oPosY = o->oFloorHeight; } else { - obj_update_floor_height(); + cur_obj_update_floor_height(); if (absf(o->oPosY - o->oFloorHeight) > 250.0f) - obj_set_model(MODEL_YELLOW_COIN_NO_SHADOW); + cur_obj_set_model(MODEL_YELLOW_COIN_NO_SHADOW); } } else { if (bhv_coin_sparkles_init()) - o->parentObj->oCoinUnkF4 |= func_802A377C(o->oBehParams2ndByte); + o->parentObj->oCoinUnkF4 |= bit_shift_left(o->oBehParams2ndByte); o->oAnimState++; } if (o->parentObj->oAction == 2) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void func_802AB364(s32 sp50, s32 sp54) { +void spawn_coin_in_formation(s32 sp50, s32 sp54) { struct Object *sp4C; Vec3i sp40; s32 sp3C = 1; @@ -187,7 +187,7 @@ void bhv_coin_formation_loop(void) { if (o->oDistanceToMario < 2000.0f) { for (bitIndex = 0; bitIndex < 8; bitIndex++) { if (!(o->oCoinUnkF4 & (1 << bitIndex))) - func_802AB364(bitIndex, o->oBehParams2ndByte); + spawn_coin_in_formation(bitIndex, o->oBehParams2ndByte); } o->oAction++; } @@ -205,34 +205,34 @@ void bhv_coin_formation_loop(void) { set_object_respawn_info_bits(o, o->oCoinUnkF4 & 0xFF); } -void ActionCoinInsideBoo1(void) { - obj_update_floor_and_walls(); - obj_if_hit_wall_bounce_away(); +void coin_inside_boo_act_1(void) { + cur_obj_update_floor_and_walls(); + cur_obj_if_hit_wall_bounce_away(); if (o->oMoveFlags & OBJ_MOVE_13) - PlaySound2(SOUND_GENERAL_COIN_DROP); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_DROP); if (o->oTimer > 90 || (o->oMoveFlags & OBJ_MOVE_LANDED)) { - set_object_hitbox(o, &sYellowCoinHitbox); - obj_become_tangible(); - obj_set_behavior(bhvYellowCoin); + obj_set_hitbox(o, &sYellowCoinHitbox); + cur_obj_become_tangible(); + cur_obj_set_behavior(bhvYellowCoin); } - obj_move_standard(-30); + cur_obj_move_standard(-30); bhv_coin_sparkles_init(); - if (obj_has_model(MODEL_BLUE_COIN)) + if (cur_obj_has_model(MODEL_BLUE_COIN)) o->oDamageOrCoinValue = 5; - if (obj_wait_then_blink(400, 20)) - mark_object_for_deletion(o); + if (cur_obj_wait_then_blink(400, 20)) + obj_mark_for_deletion(o); } -void ActionCoinInsideBoo0(void) { +void coin_inside_boo_act_0(void) { s16 sp26; f32 sp20; struct Object *parent = o->parentObj; - obj_become_intangible(); + cur_obj_become_intangible(); if (o->oTimer == 0 && gCurrLevelNum == LEVEL_BBH) { - obj_set_model(MODEL_BLUE_COIN); - obj_scale(0.7); + cur_obj_set_model(MODEL_BLUE_COIN); + cur_obj_scale(0.7); } - copy_object_pos(o, parent); + obj_copy_pos(o, parent); if (parent->oBooDeathStatus == BOO_DEATH_STATUS_DYING) { o->oAction = 1; sp26 = gMarioObject->oMoveAngleYaw; @@ -243,14 +243,14 @@ void ActionCoinInsideBoo0(void) { } } -void (*sCoinInsideBooActions[])(void) = { ActionCoinInsideBoo0, ActionCoinInsideBoo1 }; +void (*sCoinInsideBooActions[])(void) = { coin_inside_boo_act_0, coin_inside_boo_act_1 }; void bhv_coin_inside_boo_loop(void) { - obj_call_action_function(sCoinInsideBooActions); + cur_obj_call_action_function(sCoinInsideBooActions); } void bhv_coin_sparkles_loop(void) { - obj_scale(0.6f); + cur_obj_scale(0.6f); } void bhv_golden_coin_sparkles_loop(void) { diff --git a/src/game/behaviors/collide_particles.inc.c b/src/game/behaviors/collide_particles.inc.c index 775ebd8..ff93a51 100644 --- a/src/game/behaviors/collide_particles.inc.c +++ b/src/game/behaviors/collide_particles.inc.c @@ -11,15 +11,15 @@ void bhv_punch_tiny_triangle_loop(void) { if (o->oTimer == 0) { sp1E = o->oMoveAngleYaw; o->oCollisionParticleUnkF4 = 1.28f; - obj_set_pos_relative(gMarioObject, 0.0f, 60.0f, 100.0f); - o->oMoveAngleYaw = sp1E; // does obj_set_pos_relative modify currentObject? + cur_obj_set_pos_relative(gMarioObject, 0.0f, 60.0f, 100.0f); + o->oMoveAngleYaw = sp1E; } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); o->oAnimState = 5; - obj_scale(o->oCollisionParticleUnkF4); + cur_obj_scale(o->oCollisionParticleUnkF4); o->oCollisionParticleUnkF4 -= 0.2f; if (gDebugInfo[4][0] + 6 < o->oTimer) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_punch_tiny_triangle_init(void) { @@ -39,12 +39,12 @@ void bhv_wall_tiny_star_particle_loop(void) { if (o->oTimer == 0) { sp1E = o->oMoveAngleYaw; o->oCollisionParticleUnkF4 = 0.28f; - obj_set_pos_relative(gMarioObject, 0.0f, 30.0f, 110.0f); + cur_obj_set_pos_relative(gMarioObject, 0.0f, 30.0f, 110.0f); o->oMoveAngleYaw = sp1E; } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); o->oAnimState = 4; - obj_scale(o->oCollisionParticleUnkF4); + cur_obj_scale(o->oCollisionParticleUnkF4); o->oCollisionParticleUnkF4 -= 0.015f; } @@ -67,9 +67,9 @@ void bhv_pound_tiny_star_particle_loop(void) { o->oPosY -= 20.0f; o->oVelY = 14.0f; } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); o->oAnimState = 4; - obj_scale(o->oCollisionParticleUnkF4); + cur_obj_scale(o->oCollisionParticleUnkF4); o->oCollisionParticleUnkF4 -= 0.015f; } diff --git a/src/game/behaviors/controllable_platform.inc.c b/src/game/behaviors/controllable_platform.inc.c index 1f506ec..de0ee08 100644 --- a/src/game/behaviors/controllable_platform.inc.c +++ b/src/game/behaviors/controllable_platform.inc.c @@ -2,7 +2,7 @@ static s8 D_80331694 = 0; -void func_802F3BD8(void) { +void controllable_platform_act_1(void) { o->oParentRelativePosY -= 4.0f; if (o->oParentRelativePosY < 41.0f) { o->oParentRelativePosY = 41.0f; @@ -10,7 +10,7 @@ void func_802F3BD8(void) { } } -void func_802F3C50(void) { +void controllable_platform_act_2(void) { if (o->oBehParams2ndByte == D_80331694) return; @@ -30,16 +30,16 @@ void bhv_controllable_platform_sub_loop(void) { if (gMarioObject->platform == o) { D_80331694 = o->oBehParams2ndByte; o->oAction = 1; - PlaySound2(SOUND_GENERAL_MOVING_PLATFORM_SWITCH); + cur_obj_play_sound_2(SOUND_GENERAL_MOVING_PLATFORM_SWITCH); } break; case 1: - func_802F3BD8(); + controllable_platform_act_1(); break; case 2: - func_802F3C50(); + controllable_platform_act_2(); break; } @@ -70,22 +70,22 @@ void bhv_controllable_platform_init(void) { o->oControllablePlatformUnkFC = o->oPosY; } -void func_802F3F80(s8 sp1B) { +void controllable_platform_hit_wall(s8 sp1B) { o->oControllablePlatformUnkF8 = sp1B; o->oTimer = 0; D_80331694 = 5; - PlaySound2(SOUND_GENERAL_QUIET_POUND1); + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_POUND1); } -void func_802F3FD8(s8 sp1B, s8 sp1C[3], Vec3f sp20, UNUSED Vec3f sp24, Vec3f sp28) { +void controllable_platform_check_walls(s8 sp1B, s8 sp1C[3], Vec3f sp20, UNUSED Vec3f sp24, Vec3f sp28) { if (sp1C[1] == 1 || (sp1C[0] == 1 && sp1C[2] == 1)) - func_802F3F80(sp1B); + controllable_platform_hit_wall(sp1B); else { if (sp1C[0] == 1) { if (((sp1B == 1 || sp1B == 2) && (s32) sp20[2] != 0) || ((sp1B == 3 || sp1B == 4) && (s32) sp20[0] != 0)) { - func_802F3F80(sp1B); + controllable_platform_hit_wall(sp1B); } else { o->oPosX += sp20[0]; o->oPosZ += sp20[2]; @@ -95,7 +95,7 @@ void func_802F3FD8(s8 sp1B, s8 sp1C[3], Vec3f sp20, UNUSED Vec3f sp24, Vec3f sp2 if (sp1C[2] == 1) { if (((sp1B == 1 || sp1B == 2) && (s32) sp28[2] != 0) || ((sp1B == 3 || sp1B == 4) && (s32) sp28[0] != 0)) { - func_802F3F80(sp1B); + controllable_platform_hit_wall(sp1B); } else { o->oPosX += sp28[0]; o->oPosZ += sp28[2]; @@ -110,7 +110,7 @@ void func_802F3FD8(s8 sp1B, s8 sp1C[3], Vec3f sp20, UNUSED Vec3f sp24, Vec3f sp2 } } -void func_802F4230(void) { +void controllable_platform_shake_on_wall_hit(void) { if (o->oControllablePlatformUnkF8 == 1 || o->oControllablePlatformUnkF8 == 2) { o->oFaceAnglePitch = sins(o->oTimer * 0x1000) * 182.04444 * 10.0; o->oPosY = o->oControllablePlatformUnkFC + sins(o->oTimer * 0x2000) * 20.0f; @@ -127,12 +127,12 @@ void func_802F4230(void) { } } -void func_802F43EC(void) { +void controllable_platform_tilt_from_mario(void) { s16 sp1E = gMarioObject->header.gfx.pos[0] - o->oPosX; s16 sp1C = gMarioObject->header.gfx.pos[2] - o->oPosZ; if (gMarioObject->platform == o - || gMarioObject->platform == obj_nearest_object_with_behavior(bhvControllablePlatformSub)) { + || gMarioObject->platform == cur_obj_nearest_object_with_behavior(bhvControllablePlatformSub)) { o->oFaceAnglePitch = sp1C * 4; o->oFaceAngleRoll = -sp1E * 4; if (D_80331694 == 6) { @@ -170,7 +170,7 @@ void bhv_controllable_platform_loop(void) { sp54[0] = obj_find_wall_displacement(sp48, o->oPosX + 250.0, o->oPosY, o->oPosZ + 300.0, 50.0f); sp54[1] = obj_find_wall_displacement(sp3C, o->oPosX, o->oPosY, o->oPosZ + 300.0, 50.0f); sp54[2] = obj_find_wall_displacement(sp30, o->oPosX - 250.0, o->oPosY, o->oPosZ + 300.0, 50.0f); - func_802F3FD8(2, sp54, sp48, sp3C, sp30); + controllable_platform_check_walls(2, sp54, sp48, sp3C, sp30); break; case 2: @@ -178,7 +178,7 @@ void bhv_controllable_platform_loop(void) { sp54[0] = obj_find_wall_displacement(sp48, o->oPosX + 250.0, o->oPosY, o->oPosZ - 300.0, 50.0f); sp54[1] = obj_find_wall_displacement(sp3C, o->oPosX, o->oPosY, o->oPosZ - 300.0, 50.0f); sp54[2] = obj_find_wall_displacement(sp30, o->oPosX - 250.0, o->oPosY, o->oPosZ - 300.0, 50.0f); - func_802F3FD8(1, sp54, sp48, sp3C, sp30); + controllable_platform_check_walls(1, sp54, sp48, sp3C, sp30); break; case 3: @@ -186,7 +186,7 @@ void bhv_controllable_platform_loop(void) { sp54[0] = obj_find_wall_displacement(sp48, o->oPosX + 300.0, o->oPosY, o->oPosZ + 250.0, 50.0f); sp54[1] = obj_find_wall_displacement(sp3C, o->oPosX + 300.0, o->oPosY, o->oPosZ, 50.0f); sp54[2] = obj_find_wall_displacement(sp30, o->oPosX + 300.0, o->oPosY, o->oPosZ - 250.0, 50.0f); - func_802F3FD8(4, sp54, sp48, sp3C, sp30); + controllable_platform_check_walls(4, sp54, sp48, sp3C, sp30); break; case 4: @@ -194,11 +194,11 @@ void bhv_controllable_platform_loop(void) { sp54[0] = obj_find_wall_displacement(sp48, o->oPosX - 300.0, o->oPosY, o->oPosZ + 250.0, 50.0f); sp54[1] = obj_find_wall_displacement(sp3C, o->oPosX - 300.0, o->oPosY, o->oPosZ, 50.0f); sp54[2] = obj_find_wall_displacement(sp30, o->oPosX - 300.0, o->oPosY, o->oPosZ - 250.0, 50.0f); - func_802F3FD8(3, sp54, sp48, sp3C, sp30); + controllable_platform_check_walls(3, sp54, sp48, sp3C, sp30); break; case 5: - func_802F4230(); + controllable_platform_shake_on_wall_hit(); return; break; @@ -209,9 +209,9 @@ void bhv_controllable_platform_loop(void) { break; } - func_802F43EC(); + controllable_platform_tilt_from_mario(); o->oPosX += o->oVelX; o->oPosZ += o->oVelZ; if (D_80331694 != 0 && D_80331694 != 6) - PlaySound(SOUND_ENV_ELEVATOR2); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR2); } diff --git a/src/game/behaviors/corkbox.inc.c b/src/game/behaviors/corkbox.inc.c index f2edb6c..cbc50ea 100644 --- a/src/game/behaviors/corkbox.inc.c +++ b/src/game/behaviors/corkbox.inc.c @@ -4,11 +4,11 @@ void bhv_bobomb_bully_death_smoke_init(void) { o->oPosY -= 300.0f; - obj_scale(10.0f); + cur_obj_scale(10.0f); } void bhv_bobomb_explosion_bubble_init(void) { - scale_object_xyz(o, 2.0f, 2.0f, 1.0f); + obj_scale_xyz(o, 2.0f, 2.0f, 1.0f); o->oBobombExpBubGfxExpRateX = (s32)(RandomFloat() * 2048.0f) + 0x800; o->oBobombExpBubGfxExpRateY = (s32)(RandomFloat() * 2048.0f) + 0x800; @@ -28,7 +28,7 @@ void bhv_bobomb_explosion_bubble_loop(void) { if (o->oPosY > waterY) { o->activeFlags = 0; o->oPosY += 5.0f; - spawn_object(o, MODEL_SPOT_ON_GROUND, bhvWaterSurfaceWhiteWave2); + spawn_object(o, MODEL_SMALL_WATER_SPLASH, bhvObjectWaterSplash); } if (o->oTimer >= 61) diff --git a/src/game/behaviors/cruiser.inc.c b/src/game/behaviors/cruiser.inc.c index c866ad2..a705bb2 100644 --- a/src/game/behaviors/cruiser.inc.c +++ b/src/game/behaviors/cruiser.inc.c @@ -15,7 +15,7 @@ void bhv_rr_cruiser_wing_loop(void) { } #ifndef VERSION_JP if (o->oTimer == 64) { - PlaySound2(SOUND_GENERAL_BOAT_ROCK); + cur_obj_play_sound_2(SOUND_GENERAL_BOAT_ROCK); o->oTimer = 0; } #endif diff --git a/src/game/behaviors/ddd_pole.inc.c b/src/game/behaviors/ddd_pole.inc.c index a72e98c..58d7d61 100644 --- a/src/game/behaviors/ddd_pole.inc.c +++ b/src/game/behaviors/ddd_pole.inc.c @@ -1,7 +1,7 @@ void bhv_ddd_pole_init(void) { if (!(save_file_get_flags() & (SAVE_FLAG_HAVE_KEY_2 | SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR))) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { o->hitboxDownOffset = 100.0f; o->oDDDPoleMaxOffset = 100.0f * o->oBehParams2ndByte; diff --git a/src/game/behaviors/ddd_sub.inc.c b/src/game/behaviors/ddd_sub.inc.c index e9ed347..d8479c6 100644 --- a/src/game/behaviors/ddd_sub.inc.c +++ b/src/game/behaviors/ddd_sub.inc.c @@ -2,5 +2,5 @@ void bhv_bowsers_sub_loop(void) { if (save_file_get_flags() & (SAVE_FLAG_HAVE_KEY_2 | SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR)) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/ddd_warp.inc.c b/src/game/behaviors/ddd_warp.inc.c index 7e97ab6..617e850 100644 --- a/src/game/behaviors/ddd_warp.inc.c +++ b/src/game/behaviors/ddd_warp.inc.c @@ -1,7 +1,7 @@ // ddd_warp.c.inc void bhv_ddd_warp_loop(void) { - if (dddStatus & BOWSERS_SUB_BEATEN) + if (gDddPaintingStatus & BOWSERS_SUB_BEATEN) o->collisionData = segmented_to_virtual(inside_castle_seg7_collision_ddd_warp_2); else o->collisionData = segmented_to_virtual(inside_castle_seg7_collision_ddd_warp); diff --git a/src/game/behaviors/decorative_pendulum.inc.c b/src/game/behaviors/decorative_pendulum.inc.c index 7d05ccd..2aa9539 100644 --- a/src/game/behaviors/decorative_pendulum.inc.c +++ b/src/game/behaviors/decorative_pendulum.inc.c @@ -27,5 +27,5 @@ void bhv_decorative_pendulum_loop(void) { * actually one sound played twice in rapid succession. */ if (o->oAngleVelRoll == 0x10 || o->oAngleVelRoll == -0x10) - PlaySound2(SOUND_GENERAL_BIG_CLOCK); + cur_obj_play_sound_2(SOUND_GENERAL_BIG_CLOCK); } diff --git a/src/game/behaviors/donut_platform.inc.c b/src/game/behaviors/donut_platform.inc.c index c12f58c..afabb2a 100644 --- a/src/game/behaviors/donut_platform.inc.c +++ b/src/game/behaviors/donut_platform.inc.c @@ -47,25 +47,25 @@ void bhv_donut_platform_update(void) { & ((1 << o->oBehParams2ndByte) ^ 0xFFFFFFFF); if (o->oDistanceToMario > 2500.0f) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { - func_802A3C98(150.0f, 1); + obj_explode_and_spawn_coins(150.0f, 1); create_sound_spawner(SOUND_GENERAL_DONUT_PLATFORM_EXPLOSION); } } else { if (o->oGravity == 0.0f) { if (gMarioObject->platform == o) { - obj_shake_y(4.0f); + cur_obj_shake_y(4.0f); if (o->oTimer > 15) { o->oGravity = -0.1f; } } else { - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->oTimer = 0; } } else { - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); } load_object_collision_model(); diff --git a/src/game/behaviors/door.inc.c b/src/game/behaviors/door.inc.c index a174bee..ecd24d6 100644 --- a/src/game/behaviors/door.inc.c +++ b/src/game/behaviors/door.inc.c @@ -12,13 +12,13 @@ s32 D_8032F328[] = { SOUND_GENERAL_OPEN_WOOD_DOOR, SOUND_GENERAL_OPEN_IRON_DOOR s32 D_8032F330[] = { SOUND_GENERAL_CLOSE_WOOD_DOOR, SOUND_GENERAL_CLOSE_IRON_DOOR }; -void func_802AC070(s32 sp18) { - set_obj_animation_and_sound_state(sp18); - if (func_8029F788()) +void door_animation_and_reset(s32 sp18) { + cur_obj_init_animation_with_sound(sp18); + if (cur_obj_check_if_near_animation_end()) o->oAction = 0; } -void func_802AC0B8(void) { +void set_door_camera_event(void) { if (segmented_to_virtual(bhvDoor) == o->behavior) gPlayerCameraState->cameraEvent = CAM_EVENT_DOOR; else @@ -26,53 +26,53 @@ void func_802AC0B8(void) { gPlayerCameraState->usedObj = o; } -void func_802AC130(void) { - s32 sp1C = obj_has_model(MODEL_HMC_METAL_DOOR); +void play_door_open_noise(void) { + s32 sp1C = cur_obj_has_model(MODEL_HMC_METAL_DOOR); if (o->oTimer == 0) { - PlaySound2(D_8032F328[sp1C]); + cur_obj_play_sound_2(D_8032F328[sp1C]); gTimeStopState |= TIME_STOP_MARIO_OPENED_DOOR; } if (o->oTimer == 70) { - PlaySound2(D_8032F330[sp1C]); + cur_obj_play_sound_2(D_8032F330[sp1C]); } } -void func_802AC1CC(void) { - s32 sp1C = obj_has_model(MODEL_HMC_METAL_DOOR); +void play_warp_door_open_noise(void) { + s32 sp1C = cur_obj_has_model(MODEL_HMC_METAL_DOOR); if (o->oTimer == 30) - PlaySound2(D_8032F330[sp1C]); + cur_obj_play_sound_2(D_8032F330[sp1C]); } void bhv_door_loop(void) { s32 sp1C = 0; while (D_8032F300[sp1C].flag != (u32)~0) { - if (obj_clear_interact_status_flag(D_8032F300[sp1C].flag)) { - func_802AC0B8(); - obj_change_action(D_8032F300[sp1C].action); + if (cur_obj_clear_interact_status_flag(D_8032F300[sp1C].flag)) { + set_door_camera_event(); + cur_obj_change_action(D_8032F300[sp1C].action); } sp1C++; } switch (o->oAction) { case 0: - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); break; case 1: - func_802AC070(1); - func_802AC130(); + door_animation_and_reset(1); + play_door_open_noise(); break; case 2: - func_802AC070(2); - func_802AC130(); + door_animation_and_reset(2); + play_door_open_noise(); break; case 3: - func_802AC070(3); - func_802AC1CC(); + door_animation_and_reset(3); + play_warp_door_open_noise(); break; case 4: - func_802AC070(4); - func_802AC1CC(); + door_animation_and_reset(4); + play_warp_door_open_noise(); break; } if (o->oAction == 0) diff --git a/src/game/behaviors/dorrie.inc.c b/src/game/behaviors/dorrie.inc.c index 08b4371..6a522c7 100644 --- a/src/game/behaviors/dorrie.inc.c +++ b/src/game/behaviors/dorrie.inc.c @@ -23,10 +23,10 @@ void dorrie_act_move(void) { startYaw = o->oMoveAngleYaw; o->oDorrieNeckAngle = -0x26F4; - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (o->oDorrieForwardDistToMario < 320.0f && o->oDorrieGroundPounded) { - PlaySound2(SOUND_OBJ_DORRIE); + cur_obj_play_sound_2(SOUND_OBJ_DORRIE); o->collisionData = segmented_to_virtual(dorrie_seg6_collision_0600FBB8); o->oAction = DORRIE_ACT_LOWER_HEAD; o->oForwardVel = 0.0f; @@ -62,7 +62,7 @@ void dorrie_begin_head_raise(s32 liftingMario) { void dorrie_act_lower_head(void) { if (func_802F92EC(2, 35)) { - func_8029F6F0(); + cur_obj_reverse_animation(); #ifdef VERSION_JP if (o->oTimer > 150) { @@ -94,17 +94,17 @@ void dorrie_act_lower_head(void) { void dorrie_act_raise_head(void) { o->collisionData = segmented_to_virtual(dorrie_seg6_collision_0600F644); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = DORRIE_ACT_MOVE; } else if (o->oDorrieLiftingMario && o->header.gfx.unk38.animFrame < 74) { if (set_mario_npc_dialog(2) == 2) { o->oDorrieHeadRaiseSpeed += 0x1CC; - if (obj_check_anim_frame(73)) { + if (cur_obj_check_anim_frame(73)) { set_mario_npc_dialog(0); } dorrie_raise_head(); } else { - func_8029F6F0(); + cur_obj_reverse_animation(); } } } @@ -119,10 +119,10 @@ void bhv_dorrie_update(void) { o->oDorrieForwardDistToMario = o->oDistanceToMario * coss(o->oAngleToMario - o->oMoveAngleYaw); obj_perform_position_op(0); - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); - o->oDorrieAngleToHome = obj_angle_to_home(); - o->oDorrieDistToHome = obj_lateral_dist_to_home(); + o->oDorrieAngleToHome = cur_obj_angle_to_home(); + o->oDorrieDistToHome = cur_obj_lateral_dist_to_home(); // Shift dorrie's bounds to account for her neck boundsShift = @@ -133,7 +133,7 @@ void bhv_dorrie_update(void) { o->oPosZ = o->oHomeZ - o->oDorrieDistToHome * coss(o->oDorrieAngleToHome); } - o->oDorrieGroundPounded = obj_is_mario_ground_pounding_platform(); + o->oDorrieGroundPounded = cur_obj_is_mario_ground_pounding_platform(); if (gMarioObject->platform == o) { maxOffsetY = -17.0f; diff --git a/src/game/behaviors/drawbridge.inc.c b/src/game/behaviors/drawbridge.inc.c index 406503b..e23c163 100644 --- a/src/game/behaviors/drawbridge.inc.c +++ b/src/game/behaviors/drawbridge.inc.c @@ -36,7 +36,7 @@ void bhv_lll_drawbridge_loop(void) { // the game at regular intervals can leave the drawbridge raised indefinitely. if (o->oTimer >= 51 && (globalTimer % 8) == 0) { o->oAction = LLL_DRAWBRIDGE_ACT_LOWER; - PlaySound2(SOUND_GENERAL_BOAT_TILT1); + cur_obj_play_sound_2(SOUND_GENERAL_BOAT_TILT1); } } @@ -47,7 +47,7 @@ void bhv_lll_drawbridge_loop(void) { // the game at regular intervals can leave the drawbridge lowered indefinitely. if (o->oTimer >= 51 && (globalTimer % 8) == 0) { o->oAction = LLL_DRAWBRIDGE_ACT_RAISE; - PlaySound2(SOUND_GENERAL_BOAT_TILT2); + cur_obj_play_sound_2(SOUND_GENERAL_BOAT_TILT2); } } } diff --git a/src/game/behaviors/elevator.inc.c b/src/game/behaviors/elevator.inc.c index cd899ad..d2445ae 100644 --- a/src/game/behaviors/elevator.inc.c +++ b/src/game/behaviors/elevator.inc.c @@ -1,11 +1,11 @@ // elevator.c.inc -void func_802AD01C(void) { - PlaySound2(SOUND_GENERAL_QUIET_POUND1); - ShakeScreen(SHAKE_POS_SMALL); +void elevator_starting_shake(void) { + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_POUND1); + cur_obj_shake_screen(SHAKE_POS_SMALL); } -void ActionElevator0(void) { +void elevator_act_0(void) { o->oVelY = 0; if (o->oElevatorUnk100 == 2) { if (gMarioObject->platform == o) { @@ -25,10 +25,10 @@ void ActionElevator0(void) { } } -void ActionElevator1(void) { - PlaySound(SOUND_ENV_ELEVATOR1); - if (o->oTimer == 0 && obj_is_mario_on_platform()) - func_802AD01C(); +void elevator_act_1(void) { + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR1); + if (o->oTimer == 0 && cur_obj_is_mario_on_platform()) + elevator_starting_shake(); approach_f32_signed(&o->oVelY, 10.0f, 2.0f); o->oPosY += o->oVelY; if (o->oPosY > o->oElevatorUnkF8) { @@ -42,11 +42,11 @@ void ActionElevator1(void) { } } -void ActionElevator2() // Pretty similar code to action 1 +void elevator_act_2() // Pretty similar code to action 1 { - PlaySound(SOUND_ENV_ELEVATOR1); - if (o->oTimer == 0 && obj_is_mario_on_platform()) - func_802AD01C(); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR1); + if (o->oTimer == 0 && cur_obj_is_mario_on_platform()) + elevator_starting_shake(); approach_f32_signed(&o->oVelY, -10.0f, -2.0f); o->oPosY += o->oVelY; if (o->oPosY < o->oElevatorUnkF4) { @@ -62,24 +62,24 @@ void ActionElevator2() // Pretty similar code to action 1 } } -void ActionElevator4() { +void elevator_act_4() { o->oVelY = 0; if (o->oTimer == 0) { - ShakeScreen(SHAKE_POS_SMALL); - PlaySound2(SOUND_GENERAL_METAL_POUND); + cur_obj_shake_screen(SHAKE_POS_SMALL); + cur_obj_play_sound_2(SOUND_GENERAL_METAL_POUND); } - if (!mario_is_in_air_action() && !obj_is_mario_on_platform()) + if (!mario_is_in_air_action() && !cur_obj_is_mario_on_platform()) o->oAction = 1; } -void ActionElevator3() // nearly identical to action 2 +void elevator_act_3() // nearly identical to action 2 { o->oVelY = 0; if (o->oTimer == 0) { - ShakeScreen(SHAKE_POS_SMALL); - PlaySound2(SOUND_GENERAL_METAL_POUND); + cur_obj_shake_screen(SHAKE_POS_SMALL); + cur_obj_play_sound_2(SOUND_GENERAL_METAL_POUND); } - if (!mario_is_in_air_action() && !obj_is_mario_on_platform()) + if (!mario_is_in_air_action() && !cur_obj_is_mario_on_platform()) o->oAction = 0; } @@ -89,7 +89,7 @@ void bhv_elevator_init(void) { o->oElevatorUnkF4 = D_8032F38C[o->oBehParams2ndByte * 3]; o->oElevatorUnkF8 = o->oHomeY; o->oElevatorUnkFC = (o->oElevatorUnkF4 + o->oElevatorUnkF8) / 2; - o->oElevatorUnk100 = obj_has_behavior(bhvRrElevatorPlatform); + o->oElevatorUnk100 = cur_obj_has_behavior(bhvRrElevatorPlatform); } else { o->oElevatorUnkF4 = D_8032F38C[o->oBehParams2ndByte * 3]; o->oElevatorUnkF8 = D_8032F38C[o->oBehParams2ndByte * 3 + 1]; @@ -98,8 +98,8 @@ void bhv_elevator_init(void) { } } -void (*sElevatorActions[])(void) = { ActionElevator0, ActionElevator1, ActionElevator2, ActionElevator3, - ActionElevator4 }; +void (*sElevatorActions[])(void) = { elevator_act_0, elevator_act_1, elevator_act_2, elevator_act_3, + elevator_act_4 }; struct SpawnParticlesInfo D_8032F3CC = { 3, 20, MODEL_MIST, 20, 10, 5, 0, 0, 0, 30, 30.0f, 1.5f }; @@ -111,5 +111,5 @@ struct SpawnParticlesInfo D_8032F3FC = { 0, 5, MODEL_WHITE_PARTICLE_DL, 0, 2.0f, 2.0f }; void bhv_elevator_loop(void) { - obj_call_action_function(sElevatorActions); + cur_obj_call_action_function(sElevatorActions); } diff --git a/src/game/behaviors/end_birds_1.inc.c b/src/game/behaviors/end_birds_1.inc.c index 1aa75c3..b7526f7 100644 --- a/src/game/behaviors/end_birds_1.inc.c +++ b/src/game/behaviors/end_birds_1.inc.c @@ -6,7 +6,7 @@ void bhv_end_birds_1_loop(void) { switch (gCurrentObject->oAction) { case 0: - obj_scale(0.7f); + cur_obj_scale(0.7f); gCurrentObject->oIntroLakituUnk110 = -554.f; gCurrentObject->oIntroLakituUnk10C = 3044.f; gCurrentObject->oIntroLakituUnk108 = -1314.f; @@ -19,11 +19,11 @@ void bhv_end_birds_1_loop(void) { if (gCurrentObject->oTimer < 100) obj_rotate_towards_point(gCurrentObject, sp34, 0, 0, 0x20, 0x20); if ((gCurrentObject->oEndBirdUnk104 == 0.f) && (gCurrentObject->oTimer == 0)) - PlaySound2(SOUND_GENERAL_BIRDS_FLY_AWAY); + cur_obj_play_sound_2(SOUND_GENERAL_BIRDS_FLY_AWAY); if (gCutsceneTimer == 0) - mark_object_for_deletion(gCurrentObject); + obj_mark_for_deletion(gCurrentObject); break; } - func_802A2A38(); + cur_obj_set_pos_via_transform(); } diff --git a/src/game/behaviors/end_birds_2.inc.c b/src/game/behaviors/end_birds_2.inc.c index 3a7580c..5b0aafd 100644 --- a/src/game/behaviors/end_birds_2.inc.c +++ b/src/game/behaviors/end_birds_2.inc.c @@ -11,7 +11,7 @@ void bhv_end_birds_2_loop(void) { switch (gCurrentObject->oAction) { case 0: - obj_scale(0.7f); + cur_obj_scale(0.7f); gCurrentObject->oAction += 1; break; case 1: @@ -23,9 +23,9 @@ void bhv_end_birds_2_loop(void) { obj_rotate_towards_point(gCurrentObject, sp3C, 0, 0, 8, 8); if ((gCurrentObject->oEndBirdUnk104 == 0.f) && (gCurrentObject->oTimer == 0)) - PlaySound2(SOUND_GENERAL_BIRDS_FLY_AWAY); + cur_obj_play_sound_2(SOUND_GENERAL_BIRDS_FLY_AWAY); break; } - func_802A2A38(); + cur_obj_set_pos_via_transform(); } diff --git a/src/game/behaviors/enemy_lakitu.inc.c b/src/game/behaviors/enemy_lakitu.inc.c index 8ac298f..5fcaf5e 100644 --- a/src/game/behaviors/enemy_lakitu.inc.c +++ b/src/game/behaviors/enemy_lakitu.inc.c @@ -27,7 +27,7 @@ static void enemy_lakitu_act_uninitialized(void) { if (o->oDistanceToMario < 2000.0f) { spawn_object_relative_with_scale(CLOUD_BP_LAKITU_CLOUD, 0, 0, 0, 2.0f, o, MODEL_MIST, bhvCloud); - obj_unhide(); + cur_obj_unhide(); o->oAction = ENEMY_LAKITU_ACT_MAIN; } } @@ -85,7 +85,7 @@ static void enemy_lakitu_update_speed_and_angle(void) { // Change move angle toward mario faster when farther from mario turnSpeed = (s16)(distToMario * 2); clamp_s16(&turnSpeed, 0xC8, 0xFA0); - obj_rotate_yaw_toward(o->oAngleToMario, turnSpeed); + cur_obj_rotate_yaw_toward(o->oAngleToMario, turnSpeed); } /** @@ -93,7 +93,7 @@ static void enemy_lakitu_update_speed_and_angle(void) { * hold it, then enter the hold spiny sub-action. */ static void enemy_lakitu_sub_act_no_spiny(void) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (o->oEnemyLakituSpinyCooldown != 0) { o->oEnemyLakituSpinyCooldown -= 1; @@ -103,8 +103,7 @@ static void enemy_lakitu_sub_act_no_spiny(void) { if (spiny != NULL) { o->prevObj = spiny; spiny->oAction = SPINY_ACT_HELD_BY_LAKITU; - - func_8029EE20(spiny, spiny_egg_seg5_anims_050157E4, 0); + obj_init_animation_with_sound(spiny, spiny_egg_seg5_anims_050157E4, 0); o->oEnemyLakituNumSpinies += 1; o->oSubAction = ENEMY_LAKITU_SUB_ACT_HOLD_SPINY; @@ -137,11 +136,11 @@ static void enemy_lakitu_sub_act_hold_spiny(void) { */ static void enemy_lakitu_sub_act_throw_spiny(void) { if (func_802F92EC(2, 2)) { - PlaySound2(SOUND_OBJ_EVIL_LAKITU_THROW); + cur_obj_play_sound_2(SOUND_OBJ_EVIL_LAKITU_THROW); o->prevObj = NULL; } - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oSubAction = ENEMY_LAKITU_SUB_ACT_NO_SPINY; o->oEnemyLakituSpinyCooldown = random_linear_offset(100, 100); } @@ -151,13 +150,13 @@ static void enemy_lakitu_sub_act_throw_spiny(void) { * Main update function. */ static void enemy_lakitu_act_main(void) { - PlaySound(SOUND_AIR_LAKITU_FLY); + cur_obj_play_sound_1(SOUND_AIR_LAKITU_FLY); - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); enemy_lakitu_update_speed_and_angle(); if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); } obj_update_blinking(&o->oEnemyLakituBlinkTimer, 20, 40, 4); @@ -174,7 +173,7 @@ static void enemy_lakitu_act_main(void) { break; } - obj_move_standard(78); + cur_obj_move_standard(78); // Die and drop held spiny when attacked by mario if (obj_check_attacks(&sEnemyLakituHitbox, o->oAction)) { diff --git a/src/game/behaviors/exclamation_box.inc.c b/src/game/behaviors/exclamation_box.inc.c index a27ec59..3050a77 100644 --- a/src/game/behaviors/exclamation_box.inc.c +++ b/src/game/behaviors/exclamation_box.inc.c @@ -30,12 +30,12 @@ struct Struct802C0DF0 sExclamationBoxContents[] = { { 0, 0, 0, MODEL_MARIOS_WING { 14, 0, 5, MODEL_STAR, bhvSpawnedStar }, { 99, 0, 0, 0, NULL } }; -void bhv_rotatin_exclamation_box_loop(void) { +void bhv_rotating_exclamation_box_loop(void) { if (o->parentObj->oAction != 1) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void ActionExclamationBox0(void) { +void exclamation_box_act_0(void) { if (o->oBehParams2ndByte < 3) { o->oAnimState = o->oBehParams2ndByte; if ((save_file_get_flags() & D_8032F0C0[o->oBehParams2ndByte]) @@ -49,30 +49,30 @@ void ActionExclamationBox0(void) { } } -void ActionExclamationBox1(void) { - obj_become_intangible(); +void exclamation_box_act_1(void) { + cur_obj_become_intangible(); if (o->oTimer == 0) { spawn_object(o, MODEL_EXCLAMATION_POINT, bhvRotatingExclamationMark); - obj_set_model(MODEL_EXCLAMATION_BOX_OUTLINE); + cur_obj_set_model(MODEL_EXCLAMATION_BOX_OUTLINE); } if ((save_file_get_flags() & D_8032F0C0[o->oBehParams2ndByte]) || ((o->oBehParams >> 24) & 0xFF) != 0) { o->oAction = 2; - obj_set_model(MODEL_EXCLAMATION_BOX); + cur_obj_set_model(MODEL_EXCLAMATION_BOX); } } -void ActionExclamationBox2(void) { - set_object_hitbox(o, &sExclamationBoxHitbox); +void exclamation_box_act_2(void) { + obj_set_hitbox(o, &sExclamationBoxHitbox); if (o->oTimer == 0) { - obj_unhide(); - obj_become_tangible(); + cur_obj_unhide(); + cur_obj_become_tangible(); o->oInteractStatus = 0; o->oPosY = o->oHomeY; o->oGraphYOffset = 0.0f; } - if (obj_was_attacked_or_ground_pounded()) { - obj_become_intangible(); + if (cur_obj_was_attacked_or_ground_pounded()) { + cur_obj_become_intangible(); o->oExclamationBoxUnkFC = 0x4000; o->oVelY = 30.0f; o->oGravity = -8.0f; @@ -82,9 +82,9 @@ void ActionExclamationBox2(void) { load_object_collision_model(); } -void ActionExclamationBox3(void) { +void exclamation_box_act_3(void) { UNUSED s32 unused; - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (o->oVelY < 0.0f) { o->oVelY = 0.0f; o->oGravity = 0.0f; @@ -100,7 +100,7 @@ void ActionExclamationBox3(void) { o->oAction = 4; } -void func_802C0DF0(struct Struct802C0DF0 *a0, u8 a1) { +void exclamation_box_spawn_contents(struct Struct802C0DF0 *a0, u8 a1) { struct Object *sp1C = NULL; while (a0->unk0 != 99) { @@ -118,28 +118,28 @@ void func_802C0DF0(struct Struct802C0DF0 *a0, u8 a1) { } } -void ActionExclamationBox4(void) { - func_802C0DF0(sExclamationBoxContents, o->oBehParams2ndByte); - func_802AA618(0, 0, 46.0f); +void exclamation_box_act_4(void) { + exclamation_box_spawn_contents(sExclamationBoxContents, o->oBehParams2ndByte); + spawn_mist_particles_variable(0, 0, 46.0f); spawn_triangle_break_particles(20, 139, 0.3f, o->oAnimState); create_sound_spawner(SOUND_GENERAL_BREAK_BOX); if (o->oBehParams2ndByte < 3) { o->oAction = 5; - obj_hide(); + cur_obj_hide(); } else - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void ActionExclamationBox5(void) { +void exclamation_box_act_5(void) { if (o->oTimer > 300) o->oAction = 2; } -void (*sExclamationBoxActions[])(void) = { ActionExclamationBox0, ActionExclamationBox1, - ActionExclamationBox2, ActionExclamationBox3, - ActionExclamationBox4, ActionExclamationBox5 }; +void (*sExclamationBoxActions[])(void) = { exclamation_box_act_0, exclamation_box_act_1, + exclamation_box_act_2, exclamation_box_act_3, + exclamation_box_act_4, exclamation_box_act_5 }; void bhv_exclamation_box_loop(void) { - obj_scale(2.0f); - obj_call_action_function(sExclamationBoxActions); + cur_obj_scale(2.0f); + cur_obj_call_action_function(sExclamationBoxActions); } diff --git a/src/game/behaviors/explosion.inc.c b/src/game/behaviors/explosion.inc.c index 921df6d..2c79f88 100644 --- a/src/game/behaviors/explosion.inc.c +++ b/src/game/behaviors/explosion.inc.c @@ -22,5 +22,5 @@ void bhv_explosion_loop(void) { o->oOpacity -= 14; - obj_scale((f32) o->oTimer / 9.0f + 1.0); + cur_obj_scale((f32) o->oTimer / 9.0f + 1.0); } diff --git a/src/game/behaviors/express_elevator.inc.c b/src/game/behaviors/express_elevator.inc.c index 70d5400..f353638 100644 --- a/src/game/behaviors/express_elevator.inc.c +++ b/src/game/behaviors/express_elevator.inc.c @@ -3,12 +3,12 @@ void bhv_wdw_express_elevator_loop(void) { o->oVelY = 0.0f; if (o->oAction == 0) { - if (obj_is_mario_on_platform()) + if (cur_obj_is_mario_on_platform()) o->oAction++; } else if (o->oAction == 1) { o->oVelY = -20.0f; o->oPosY += o->oVelY; - PlaySound(SOUND_ENV_ELEVATOR4); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR4); if (o->oTimer > 132) o->oAction++; } else if (o->oAction == 2) { @@ -17,11 +17,11 @@ void bhv_wdw_express_elevator_loop(void) { } else if (o->oAction == 3) { o->oVelY = 10.0f; o->oPosY += o->oVelY; - PlaySound(SOUND_ENV_ELEVATOR4); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR4); if (o->oPosY >= o->oHomeY) { o->oPosY = o->oHomeY; o->oAction++; } - } else if (!obj_is_mario_on_platform()) + } else if (!cur_obj_is_mario_on_platform()) o->oAction = 0; } diff --git a/src/game/behaviors/eyerok.inc.c b/src/game/behaviors/eyerok.inc.c index c0f2f46..d519769 100644 --- a/src/game/behaviors/eyerok.inc.c +++ b/src/game/behaviors/eyerok.inc.c @@ -34,7 +34,7 @@ static void eyerok_boss_act_sleep(void) { eyerok_spawn_hand(-1, MODEL_EYEROK_LEFT_HAND, bhvEyerokHand); eyerok_spawn_hand(1, MODEL_EYEROK_RIGHT_HAND, bhvEyerokHand); } else if (o->oDistanceToMario < 500.0f) { - PlaySound2(SOUND_OBJ_EYEROK_EXPLODE); + cur_obj_play_sound_2(SOUND_OBJ_EYEROK_EXPLODE); o->oAction = EYEROK_BOSS_ACT_WAKE_UP; } } @@ -63,7 +63,7 @@ static void eyerok_boss_act_wake_up(void) { } static void eyerok_boss_act_show_intro_text(void) { - if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_117)) { + if (cur_obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_117)) { o->oAction = EYEROK_BOSS_ACT_FIGHT; } } @@ -117,14 +117,14 @@ static void eyerok_boss_act_fight(void) { static void eyerok_boss_act_die(void) { if (o->oTimer == 60) { - if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_118)) { - create_star(0.0f, -900.0f, -3700.0f); + if (cur_obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_118)) { + spawn_default_star(0.0f, -900.0f, -3700.0f); } else { o->oTimer -= 1; } } else if (o->oTimer > 120) { stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } @@ -150,7 +150,7 @@ void bhv_eyerok_boss_loop(void) { static s32 eyerok_hand_check_attacked(void) { if (o->oEyerokReceivedAttack != 0 && abs_angle_diff(o->oAngleToMario, o->oFaceAngleYaw) < 0x3000) { - PlaySound2(SOUND_OBJ2_EYEROK_SOUND_SHORT); + cur_obj_play_sound_2(SOUND_OBJ2_EYEROK_SOUND_SHORT); if (--o->oHealth >= 2) { o->oAction = EYEROK_HAND_ACT_ATTACKED; @@ -174,15 +174,15 @@ static s32 eyerok_hand_check_attacked(void) { } static void func_8030DBA8(void) { - PlaySound2(SOUND_OBJ_POUNDING_LOUD); + cur_obj_play_sound_2(SOUND_OBJ_POUNDING_LOUD); set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ); - func_802ADA94(); + spawn_mist_from_global(); } static void eyerok_hand_act_sleep(void) { if (o->parentObj->oAction != EYEROK_BOSS_ACT_SLEEP && ++o->oEyerokHandWakeUpTimer > -3 * o->oBehParams2ndByte) { - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->parentObj->oEyerokBossNumHands += 1; o->oAction = EYEROK_HAND_ACT_IDLE; o->collisionData = segmented_to_virtual(&ssl_seg7_collision_07028274); @@ -200,13 +200,13 @@ static void eyerok_hand_act_sleep(void) { o->collisionData = segmented_to_virtual(&ssl_seg7_collision_07028370); } - func_8029F6F0(); + cur_obj_reverse_animation(); o->oPosX = o->oHomeX + 724.0f * o->oBehParams2ndByte; } } static void eyerok_hand_act_idle(void) { - set_obj_animation_and_sound_state(2); + cur_obj_init_animation_with_sound(2); if (o->parentObj->oAction == EYEROK_BOSS_ACT_FIGHT) { if (o->parentObj->oEyerokBossUnk104 != 0) { @@ -267,14 +267,14 @@ static void eyerok_hand_act_open(void) { static void eyerok_hand_act_show_eye(void) { UNUSED s16 val06; - set_obj_animation_and_sound_state(5); + cur_obj_init_animation_with_sound(5); func_802F9378(0, 0, SOUND_OBJ_EYEROK_SHOW_EYE); if (!eyerok_hand_check_attacked()) { if (o->parentObj->oEyerokBossActiveHand == 0) { if (o->oAnimState < 3) { o->oAnimState += 1; - } else if (func_8029F788()) { + } else if (cur_obj_check_if_near_animation_end()) { val06 = (s16)(o->oAngleToMario - o->oFaceAngleYaw) * o->oBehParams2ndByte; o->oAction = EYEROK_HAND_ACT_CLOSE; } @@ -342,19 +342,19 @@ static void eyerok_hand_act_become_active(void) { static void eyerok_hand_act_die(void) { if (func_802F92B0(1)) { o->parentObj->oEyerokBossUnk1AC = 0; - func_802A3C98(150.0f, 1); + obj_explode_and_spawn_coins(150.0f, 1); create_sound_spawner(SOUND_OBJ2_EYEROK_SOUND_LONG); } if (o->oMoveFlags & 0x00000003) { - PlaySound2(SOUND_OBJ_POUNDING_LOUD); + cur_obj_play_sound_2(SOUND_OBJ_POUNDING_LOUD); o->oForwardVel = 0.0f; } } static void eyerok_hand_act_retreat(void) { - f32 distToHome = obj_lateral_dist_to_home(); - s16 angleToHome = obj_angle_to_home(); + f32 distToHome = cur_obj_lateral_dist_to_home(); + s16 angleToHome = cur_obj_angle_to_home(); if ((distToHome -= 40.0f) < 0.0f) { distToHome = 0.0f; @@ -386,7 +386,7 @@ static void eyerok_hand_act_target_mario(void) { } else { obj_forward_vel_approach(50.0f, 5.0f); approach_f32_ptr(&o->oPosY, o->oHomeY + 300.0f, 20.0f); - obj_rotate_yaw_toward(o->oAngleToMario, 4000); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 4000); } } @@ -493,7 +493,7 @@ void bhv_eyerok_hand_loop(void) { if (o->oAction == EYEROK_HAND_ACT_SLEEP) { eyerok_hand_act_sleep(); } else { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case EYEROK_HAND_ACT_IDLE: @@ -544,7 +544,7 @@ void bhv_eyerok_hand_loop(void) { } o->oEyerokReceivedAttack = obj_check_attacks(&sEyerokHitbox, o->oAction); - obj_move_standard(-78); + cur_obj_move_standard(-78); } load_object_collision_model(); diff --git a/src/game/behaviors/falling_pillar.inc.c b/src/game/behaviors/falling_pillar.inc.c index d5c0e02..3ed7b41 100644 --- a/src/game/behaviors/falling_pillar.inc.c +++ b/src/game/behaviors/falling_pillar.inc.c @@ -74,7 +74,7 @@ void bhv_falling_pillar_loop(void) { o->oAction = FALLING_PILLAR_ACT_TURNING; // Play the detaching sound. - PlaySound2(SOUND_GENERAL_POUND_ROCK); + cur_obj_play_sound_2(SOUND_GENERAL_POUND_ROCK); } break; @@ -106,7 +106,7 @@ void bhv_falling_pillar_loop(void) { // Make the camera shake and spawn dust clouds. set_camera_shake_from_point(SHAKE_POS_MEDIUM, o->oPosX, o->oPosY, o->oPosZ); - func_802AA618(0, 0, 92.0f); + spawn_mist_particles_variable(0, 0, 92.0f); // Go invisible. o->activeFlags = 0; @@ -136,7 +136,7 @@ void bhv_falling_pillar_hitbox_loop(void) { o->oPosZ = sins(pitch) * coss(yaw) * yOffset + z; // Give these a hitbox so they can collide with Mario. - set_object_hitbox(o, &sFallingPillarHitbox); + obj_set_hitbox(o, &sFallingPillarHitbox); // When the pillar goes inactive, the hitboxes also go inactive. if (o->parentObj->activeFlags == 0) diff --git a/src/game/behaviors/falling_rising_platform.inc.c b/src/game/behaviors/falling_rising_platform.inc.c index 4b97c01..4bd7ecd 100644 --- a/src/game/behaviors/falling_rising_platform.inc.c +++ b/src/game/behaviors/falling_rising_platform.inc.c @@ -14,7 +14,7 @@ void bhv_bitfs_sinking_platform_loop(void) { // TODO: Named incorrectly. fix void bhv_ddd_moving_pole_loop(void) { - copy_object_pos_and_angle(o, o->parentObj); + obj_copy_pos_and_angle(o, o->parentObj); } void bhv_bitfs_sinking_cage_platform_loop(void) { diff --git a/src/game/behaviors/fire_piranha_plant.inc.c b/src/game/behaviors/fire_piranha_plant.inc.c index cb9ff34..8cf1744 100644 --- a/src/game/behaviors/fire_piranha_plant.inc.c +++ b/src/game/behaviors/fire_piranha_plant.inc.c @@ -32,7 +32,7 @@ s32 sNumKilledFirePiranhaPlants; void bhv_fire_piranha_plant_init(void) { o->oFirePiranhaPlantNeutralScale = D_80331B5C[(u16)(o->oBehParams >> 16)]; - set_object_hitbox(o, &sFirePiranhaPlantHitbox); + obj_set_hitbox(o, &sFirePiranhaPlantHitbox); if ((u16)(o->oBehParams >> 16) != 0) { o->oFlags |= 0x00004000; @@ -52,21 +52,21 @@ static void fire_piranha_plant_act_hide(void) { o->oMoveAngleYaw += (s32) o->oFirePiranhaPlantDeathSpinVel; approach_f32_ptr(&o->oFirePiranhaPlantDeathSpinVel, 0.0f, 200.0f); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { if (--o->oFirePiranhaPlantDeathSpinTimer == 0) { - PlaySound2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); + cur_obj_play_sound_2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); } } } else if (approach_f32_ptr(&o->oFirePiranhaPlantScale, 0.0f, 0.04f * o->oFirePiranhaPlantNeutralScale)) { - obj_become_intangible(); + cur_obj_become_intangible(); if (o->oFirePiranhaPlantActive) { sNumActiveFirePiranhaPlants -= 1; o->oFirePiranhaPlantActive = FALSE; if ((u16)(o->oBehParams >> 16) != 0 && o->oHealth == 0) { if (++sNumKilledFirePiranhaPlants == 5) { - create_star(-6300.0f, -1850.0f, -6300.0f); + spawn_default_star(-6300.0f, -1850.0f, -6300.0f); } obj_die_if_health_non_positive(); @@ -74,20 +74,20 @@ static void fire_piranha_plant_act_hide(void) { } } else if (sNumActiveFirePiranhaPlants < 2 && o->oTimer > 100 && o->oDistanceToMario > 100.0f && o->oDistanceToMario < 800.0f) { - PlaySound2(SOUND_OBJ_PIRANHA_PLANT_APPEAR); + cur_obj_play_sound_2(SOUND_OBJ_PIRANHA_PLANT_APPEAR); o->oFirePiranhaPlantActive = TRUE; sNumActiveFirePiranhaPlants += 1; - obj_unhide(); + cur_obj_unhide(); o->oAction = FIRE_PIRANHA_PLANT_ACT_GROW; o->oMoveAngleYaw = o->oAngleToMario; } else { - obj_hide(); + cur_obj_hide(); } } - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } static void fire_piranha_plant_act_grow(void) { @@ -96,15 +96,15 @@ static void fire_piranha_plant_act_grow(void) { if (approach_f32_ptr(&o->oFirePiranhaPlantScale, o->oFirePiranhaPlantNeutralScale, 0.04f * o->oFirePiranhaPlantNeutralScale)) { if (o->oTimer > 80) { - PlaySound2(SOUND_OBJ_PIRANHA_PLANT_SHRINK); + cur_obj_play_sound_2(SOUND_OBJ_PIRANHA_PLANT_SHRINK); o->oAction = FIRE_PIRANHA_PLANT_ACT_HIDE; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); } else if (o->oTimer < 50) { - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); } else { // TODO: Check if we can put these conditionals on same line if (obj_is_rendering_enabled()) { - if (obj_check_anim_frame(56)) { - PlaySound2(SOUND_OBJ_FLAME_BLOWN); + if (cur_obj_check_anim_frame(56)) { + cur_obj_play_sound_2(SOUND_OBJ_FLAME_BLOWN); obj_spit_fire(0, (s32)(30.0f * o->oFirePiranhaPlantNeutralScale), (s32)(140.0f * o->oFirePiranhaPlantNeutralScale), 2.5f * o->oFirePiranhaPlantNeutralScale, MODEL_RED_FLAME_SHADOW, @@ -113,12 +113,12 @@ static void fire_piranha_plant_act_grow(void) { } } } else if (o->oFirePiranhaPlantScale > o->oFirePiranhaPlantNeutralScale / 2) { - obj_become_tangible(); + cur_obj_become_tangible(); } } void bhv_fire_piranha_plant_update(void) { - obj_scale(o->oFirePiranhaPlantScale); + cur_obj_scale(o->oFirePiranhaPlantScale); switch (o->oAction) { case FIRE_PIRANHA_PLANT_ACT_HIDE: @@ -135,13 +135,13 @@ void bhv_fire_piranha_plant_update(void) { sNumActiveFirePiranhaPlants -= 1; } } else { - set_obj_animation_and_sound_state(2); + cur_obj_init_animation_with_sound(2); } o->oAction = FIRE_PIRANHA_PLANT_ACT_HIDE; o->oFirePiranhaPlantDeathSpinTimer = 10; o->oFirePiranhaPlantDeathSpinVel = 8000.0f; - obj_become_intangible(); + cur_obj_become_intangible(); } } diff --git a/src/game/behaviors/fire_spitter.inc.c b/src/game/behaviors/fire_spitter.inc.c index d26ae6d..d64bcf7 100644 --- a/src/game/behaviors/fire_spitter.inc.c +++ b/src/game/behaviors/fire_spitter.inc.c @@ -20,16 +20,16 @@ static void fire_spitter_act_spit_fire(void) { if (scaleStatus < 0) { o->oAction = FIRE_SPITTER_ACT_IDLE; } else { - PlaySound2(SOUND_OBJ_FLAME_BLOWN); + cur_obj_play_sound_2(SOUND_OBJ_FLAME_BLOWN); obj_spit_fire(0, 0, 0, 5.0f, MODEL_RED_FLAME_SHADOW, 20.0f, 15.0f, 0x1000); } } } void bhv_fire_spitter_update(void) { - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); o->oGraphYOffset = 40.0f; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case FIRE_SPITTER_ACT_IDLE: @@ -40,5 +40,5 @@ void bhv_fire_spitter_update(void) { break; } - obj_move_standard(78); + cur_obj_move_standard(78); } diff --git a/src/game/behaviors/fish.inc.c b/src/game/behaviors/fish.inc.c index 8549fe3..31bb4eb 100644 --- a/src/game/behaviors/fish.inc.c +++ b/src/game/behaviors/fish.inc.c @@ -1,163 +1,280 @@ -// fish.c.inc +/** + * @file fish.inc.c + * Implements behaviour and spawning for fish located in the Secret Aquarium and other levels. + */ -void ActionFish0(void) { +/** + * Spawns fish with settings chosen by the field o->oBehParams2ndByte. + * These settings are animations, colour, and spawn quantity. + * Fish spawning restricted to within a set distance from Mario. + */ +void fish_act_spawn(void) { s32 i; - s32 sp38; + s32 schoolQuantity; s16 model; - f32 sp30; - struct Animation **sp2C; - struct Object *sp28; + f32 minDistToMario; + struct Animation **fishAnimation; + struct Object *fishObject; switch (o->oBehParams2ndByte) { + + // Blue fish with a quanitiy of twenty. case 0: - model = MODEL_FISH; sp38 = 20; sp30 = 1500.0f; sp2C = blue_fish_seg3_anims_0301C2B0; + model = MODEL_FISH; schoolQuantity = 20; minDistToMario = 1500.0f; fishAnimation = blue_fish_seg3_anims_0301C2B0; break; + + // Blue fish with a quanitiy of five. case 1: - model = MODEL_FISH; sp38 = 5; sp30 = 1500.0f; sp2C = blue_fish_seg3_anims_0301C2B0; + model = MODEL_FISH; schoolQuantity = 5; minDistToMario = 1500.0f; fishAnimation = blue_fish_seg3_anims_0301C2B0; break; + + // Cyan fish with a quanitiy of twenty. case 2: - model = MODEL_CYAN_FISH; sp38 = 20; sp30 = 1500.0f; sp2C = cyan_fish_seg6_anims_0600E264; + model = MODEL_CYAN_FISH; schoolQuantity = 20; minDistToMario = 1500.0f; fishAnimation = cyan_fish_seg6_anims_0600E264; break; + + // Cyan fish with a quanitiy of five. case 3: - model = MODEL_CYAN_FISH; sp38 = 5; sp30 = 1500.0f; sp2C = cyan_fish_seg6_anims_0600E264; + model = MODEL_CYAN_FISH; schoolQuantity = 5; minDistToMario = 1500.0f; fishAnimation = cyan_fish_seg6_anims_0600E264; break; } - if (o->oDistanceToMario < sp30 || gCurrLevelNum == LEVEL_SA) { - for (i = 0; i < sp38; i++) { - sp28 = spawn_object(o, model, bhvFishGroup2); - sp28->oBehParams2ndByte = o->oBehParams2ndByte; - func_8029EE20(sp28, sp2C, 0); - translate_object_xyz_random(sp28, 700.0f); + /** + * Spawn and animate the schoolQuantity of fish if Mario enters render distance + * If the current level is Secret Aquarium, ignore this requirement. + * Fish moves at random with a max-range of 700.0f. + */ + if (o->oDistanceToMario < minDistToMario || gCurrLevelNum == LEVEL_SA) { + for (i = 0; i < schoolQuantity; i++) { + fishObject = spawn_object(o, model, bhvFish); + fishObject->oBehParams2ndByte = o->oBehParams2ndByte; + obj_init_animation_with_sound(fishObject, fishAnimation, 0); + obj_translate_xyz_random(fishObject, 700.0f); } - o->oAction = 1; + o->oAction = FISH_ACT_ACTIVE; } } -void ActionFish1(void) { - if (gCurrLevelNum != LEVEL_SA) - if (gMarioObject->oPosY - o->oPosY > 2000.0f) - o->oAction = 2; +/** + * If the current level is not Secret Aquarium and the distance from Mario's + * Y coordinate is greater than 2000.0f then spawn another fish. + */ +void fish_act_respawn(void) { + if (gCurrLevelNum != LEVEL_SA) { + if (gMarioObject->oPosY - o->oPosY > 2000.0f) { + o->oAction = FISH_ACT_RESPAWN; + } + } } -void ActionFish2(void) { - o->oAction = 0; +/** + * Sets the next call of sFishActions to spawn a new fish. + */ +void fish_act_init(void) { + o->oAction = FISH_ACT_INIT; } -void (*sFishActions[])(void) = { ActionFish0, ActionFish1, ActionFish2 }; +/** + * An array of action methods chosen one at a time by bhv_fish_loop + */ +void (*sFishActions[])(void) = { + fish_act_spawn, fish_act_respawn, fish_act_init +}; -void bhv_fish_loop(void) { - obj_call_action_function(sFishActions); +void bhv_large_fish_group_loop(void) { + cur_obj_call_action_function(sFishActions); } -void func_802BF59C(s32 a0) { - f32 sp1C = o->parentObj->oPosY; +/** + * Adjusts the Y coordinate of fish depending on circumstances + * such as proximity to other fish. + */ +void fish_regroup(s32 speed) { + // Store parentY for calculating when the fish should move towards oFishPosY. + f32 parentY = o->parentObj->oPosY; + + // Sets speed of fish in SA to a leisurely speed of 10 when close to other fish. if (gCurrLevelNum == LEVEL_SA) { - if (500.0f < absf(o->oPosY - o->oFishGroupUnkF8)) - a0 = 10; - o->oPosY = approach_f32_symmetric(o->oPosY, o->oFishGroupUnkF8, a0); - } else if (sp1C - 100.0f - o->oFishGroupUnk10C < o->oPosY - && o->oPosY < sp1C + 1000.0f + o->oFishGroupUnk10C) - o->oPosY = approach_f32_symmetric(o->oPosY, o->oFishGroupUnkF8, a0); + if (500.0f < absf(o->oPosY - o->oFishPosY)) { + speed = 10; + } + // Applies movement to fish. + o->oPosY = approach_f32_symmetric(o->oPosY, o->oFishPosY, speed); + /** + * Brings fish Y coordinate towards another fish if they are too far apart. + */ + } else if (parentY - 100.0f - o->oFishDepthDistance < o->oPosY + && o->oPosY < parentY + 1000.0f + o->oFishDepthDistance) { + o->oPosY = approach_f32_symmetric(o->oPosY, o->oFishPosY, speed); + } } - -void ActionFishGroup1(void) { - f32 sp1C = o->oPosY - gMarioObject->oPosY; - if (o->oTimer < 10) - func_8029ED98(0, 2.0f); - else - func_8029ED98(0, 1.0f); +/** + * Moves fish forward at a random velocity and sets a random rotation. + */ +void fish_group_act_rotation(void) { + f32 fishY = o->oPosY - gMarioObject->oPosY; + + // Alters speed of animation for natural movement. + if (o->oTimer < 10) { + cur_obj_init_animation_with_accel_and_sound(0, 2.0f); + } else { + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); + } + + /** + * Assigns oForwardVel, oFishRandomOffset, & oFishRespawnDistance to a random floats. + * Determines fish movement. + */ if (o->oTimer == 0) { o->oForwardVel = RandomFloat() * 2 + 3.0f; - if (gCurrLevelNum == LEVEL_SA) - o->oFishGroupUnkFC = RandomFloat() * 700.0f; - else - o->oFishGroupUnkFC = RandomFloat() * 100.0f; - o->oFishGroupUnk104 = RandomFloat() * 500 + 200.0f; + if (gCurrLevelNum == LEVEL_SA) { + o->oFishRandomOffset = RandomFloat() * 700.0f; + } else { + o->oFishRandomOffset = RandomFloat() * 100.0f; + } + o->oFishRespawnDistance = RandomFloat() * 500 + 200.0f; } - o->oFishGroupUnkF8 = gMarioObject->oPosY + o->oFishGroupUnkFC; - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); - if (o->oPosY < o->oFishGroupUnkF4 - 50.0f) { - if (sp1C < 0.0f) - sp1C = 0.0f - sp1C; - if (sp1C < 500.0f) - func_802BF59C(2); - else - func_802BF59C(4); + + // Interact with Mario through rotating towards him. + o->oFishPosY = gMarioObject->oPosY + o->oFishRandomOffset; + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + + // If fish groups are too close, call fish_regroup() + if (o->oPosY < o->oFishWaterLevel - 50.0f) { + if (fishY < 0.0f) { + fishY = 0.0f - fishY; + } + if (fishY < 500.0f) { + fish_regroup(2); + } else { + fish_regroup(4); + } } else { - o->oPosY = o->oFishGroupUnkF4 - 50.0f; - if (sp1C > 300.0f) + o->oPosY = o->oFishWaterLevel - 50.0f; + if (fishY > 300.0f) { o->oPosY = o->oPosY - 1.0f; + } + } + + /** + * Delete current fish and create a new one if distance to Mario is + * smaller than his distance to oFishRespawnDistance + 150.0f. + */ + if (o->oDistanceToMario < o->oFishRespawnDistance + 150.0f) { + o->oAction = FISH_ACT_RESPAWN; } - if (o->oDistanceToMario < o->oFishGroupUnk104 + 150.0f) - o->oAction = 2; } -void ActionFishGroup2(void) { - f32 sp1C = o->oPosY - gMarioObject->oPosY; - s32 sp18; - o->oFishGroupUnkF8 = gMarioObject->oPosY + o->oFishGroupUnkFC; +/** + * Interactively maneuver fish in relation to its distance from other fish and Mario. + */ +void fish_group_act_move(void) { + f32 fishY = o->oPosY - gMarioObject->oPosY; + // Marked unused, but has arithmetic performed on it in a useless manner. + UNUSED s32 distance; + o->oFishPosY = gMarioObject->oPosY + o->oFishRandomOffset; + /** + * Set fish variables to random floats when timer reaches zero and plays sound effect. + * This allows fish to move in seemingly natural patterns. + */ if (o->oTimer == 0) { - o->oFishGroupUnk110 = RandomFloat() * 300.0f; - o->oFishGroupUnk100 = RandomFloat() * 1024.0f + 1024.0f; - o->oFishGroupUnk108 = RandomFloat() * 4.0f + 8.0f + 5.0f; - if (o->oDistanceToMario < 600.0f) - sp18 = 1; - else - sp18 = (s32)(1.0 / (o->oDistanceToMario / 600.0)); - sp18 *= 127; - PlaySound2(SOUND_GENERAL_MOVING_WATER); + o->oFishActiveDistance = RandomFloat() * 300.0f; + o->oFishRandomSpeed = RandomFloat() * 1024.0f + 1024.0f; + o->oFishRandomVel = RandomFloat() * 4.0f + 8.0f + 5.0f; + if (o->oDistanceToMario < 600.0f) { + distance = 1; + } else { + distance = (s32)(1.0 / (o->oDistanceToMario / 600.0)); + } + distance *= 127; + cur_obj_play_sound_2(SOUND_GENERAL_MOVING_WATER); } - if (o->oTimer < LEVEL_SA) - func_8029ED98(0, 4.0f); - else - func_8029ED98(0, 1.0f); - if (o->oForwardVel < o->oFishGroupUnk108) - o->oForwardVel = o->oForwardVel + 0.5; - o->oFishGroupUnkF8 = gMarioObject->oPosY + o->oFishGroupUnkFC; - obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, o->oFishGroupUnk100); - if (o->oPosY < o->oFishGroupUnkF4 - 50.0f) { - if (sp1C < 0.0f) - sp1C = 0.0f - sp1C; - if (sp1C < 500.0f) - func_802BF59C(2); - else - func_802BF59C(4); + // Enable fish animation in a natural manner. + if (o->oTimer < 20) { + cur_obj_init_animation_with_accel_and_sound(0, 4.0f); } else { - o->oPosY = o->oFishGroupUnkF4 - 50.0f; - if (sp1C > 300.0f) - o->oPosY -= 1.0f; + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); + } + // Set randomized forward velocity so fish have differing velocities + if (o->oForwardVel < o->oFishRandomVel) { + o->oForwardVel = o->oForwardVel + 0.5; + } + o->oFishPosY = gMarioObject->oPosY + o->oFishRandomOffset; + // Rotate fish away from Mario. + cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, o->oFishRandomSpeed); + // If fish groups are too close, call fish_regroup() + if (o->oPosY < o->oFishWaterLevel - 50.0f) { + if (fishY < 0.0f) { + fishY = 0.0f - fishY; + } + if (fishY < 500.0f) { + fish_regroup(2); + } else { + fish_regroup(4); + } + } else { + o->oPosY = o->oFishWaterLevel - 50.0f; + if (fishY > 300.0f) { + o->oPosY -= 1.0f; + } + } + // If distance to Mario is too great, then set fish to active. + if (o->oDistanceToMario > o->oFishActiveDistance + 500.0f) { + o->oAction = FISH_ACT_ACTIVE; } - if (o->oDistanceToMario > o->oFishGroupUnk110 + 500.0f) - o->oAction = 1; } - -void ActionFishGroup0(void) { - func_8029ED98(0, 1.0f); +/** + * Animate fish and alter scaling at random for a magnifying effect from the water. + */ +void fish_group_act_animate(void) { + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); o->header.gfx.unk38.animFrame = (s16)(RandomFloat() * 28.0f); - o->oFishGroupUnk10C = RandomFloat() * 300.0f; - obj_scale(RandomFloat() * 0.4 + 0.8); - o->oAction = 1; + o->oFishDepthDistance = RandomFloat() * 300.0f; + cur_obj_scale(RandomFloat() * 0.4 + 0.8); + o->oAction = FISH_ACT_ACTIVE; } -void (*sFishGroupActions[])(void) = { ActionFishGroup0, ActionFishGroup1, ActionFishGroup2 }; +void (*sFishGroupActions[])(void) = { + fish_group_act_animate, fish_group_act_rotation, fish_group_act_move +}; -void bhv_fish_group_2_loop(void) // TODO rename +/** + * Main loop for fish + */ +void bhv_fish_loop(void) { UNUSED s32 unused[4]; - obj_scale(1.0f); - o->oFishGroupUnkF4 = find_water_level(o->oPosX, o->oPosZ); - if (gCurrLevelNum == LEVEL_SA) - o->oFishGroupUnkF4 = 0.0f; + cur_obj_scale(1.0f); + + /** + * Tracks water level to delete fish outside of bounds. + * In SA oFishWaterLevel is set to zero because fish cannot exit the water. + * This prevents accidental deletion. + */ + o->oFishWaterLevel = find_water_level(o->oPosX, o->oPosZ); + if (gCurrLevelNum == LEVEL_SA) { + o->oFishWaterLevel = 0.0f; + } + // Apply hitbox and resolve wall collisions o->oWallHitboxRadius = 30.0f; - obj_resolve_wall_collisions(); + cur_obj_resolve_wall_collisions(); + + // Delete fish below the water depth bounds of -10000.0f. if (gCurrLevelNum != LEVEL_UNKNOWN_32) { - if (o->oFishGroupUnkF4 < -10000.0f) { - mark_object_for_deletion(o); + if (o->oFishWaterLevel < -10000.0f) { + obj_mark_for_deletion(o); return; } - } else - o->oFishGroupUnkF4 = 1000.0f; - obj_call_action_function(sFishGroupActions); - obj_move_using_fvel_and_gravity(); - if (o->parentObj->oAction == 2) - mark_object_for_deletion(o); + + // Unreachable code, perhaps for debugging or testing. + } else { + o->oFishWaterLevel = 1000.0f; + } + + // Call fish action methods and apply physics engine. + cur_obj_call_action_function(sFishGroupActions); + cur_obj_move_using_fvel_and_gravity(); + + // If the parent object has action set to two, then delete the fish object. + if (o->parentObj->oAction == FISH_ACT_RESPAWN) { + obj_mark_for_deletion(o); + } } diff --git a/src/game/behaviors/fishing_boo.inc.c b/src/game/behaviors/fishing_boo.inc.c index 212f652..1218946 100644 --- a/src/game/behaviors/fishing_boo.inc.c +++ b/src/game/behaviors/fishing_boo.inc.c @@ -31,7 +31,7 @@ void bhv_beta_moving_flames_spawn_loop(void) { } void bhv_beta_moving_flames_loop(void) { - obj_scale(5.0f); + cur_obj_scale(5.0f); o->oForwardVel = sins(o->oMovingFlameTimer) * 70.0f; o->oMovingFlameTimer += 0x800; } diff --git a/src/game/behaviors/flame.inc.c b/src/game/behaviors/flame.inc.c index c721634..5bc899c 100644 --- a/src/game/behaviors/flame.inc.c +++ b/src/game/behaviors/flame.inc.c @@ -5,7 +5,7 @@ void bhv_small_piranha_flame_loop(void) { if ((u16)(o->oBehParams >> 16) == 0) { if (o->oTimer > 0) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { sp2C = RandomFloat() - 0.5f; o->header.gfx.scale[1] = o->header.gfx.scale[2] * (1.0f + 0.7f * sp2C); @@ -14,13 +14,13 @@ void bhv_small_piranha_flame_loop(void) { o->oAnimState = RandomU16(); } } else { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (approach_f32_ptr(&o->oSmallPiranhaFlameUnkF4, o->oSmallPiranhaFlameUnkF8, 0.6f)) { - obj_rotate_yaw_toward(o->oAngleToMario, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); } obj_compute_vel_from_move_pitch(o->oSmallPiranhaFlameUnkF4); - obj_move_standard(-78); + cur_obj_move_standard(-78); spawn_object_with_scale(o, o->oSmallPiranhaFlameUnkFC, bhvSmallPiranhaFlame, 0.4f * o->header.gfx.scale[0]); @@ -43,11 +43,11 @@ void bhv_small_piranha_flame_loop(void) { } void bhv_fly_guy_flame_loop(void) { - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (approach_f32_ptr(&o->header.gfx.scale[0], 0.0f, 0.6f)) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); } diff --git a/src/game/behaviors/flame_mario.inc.c b/src/game/behaviors/flame_mario.inc.c index 42a23da..eacc297 100644 --- a/src/game/behaviors/flame_mario.inc.c +++ b/src/game/behaviors/flame_mario.inc.c @@ -17,7 +17,7 @@ void bhv_black_smoke_bowser_loop(void) { void bhv_black_smoke_mario_loop(void) { if (o->oTimer == 0) { - obj_set_pos_relative(gMarioObject, 0, 0, -30.0f); + cur_obj_set_pos_relative(gMarioObject, 0, 0, -30.0f); o->oForwardVel = RandomFloat() * 2 + 0.5; o->oMoveAngleYaw = (gMarioObject->oMoveAngleYaw + 0x7000) + RandomFloat() * 8192.0f; o->oVelY = 8; @@ -27,15 +27,15 @@ void bhv_black_smoke_mario_loop(void) { } void bhv_flame_mario_loop(void) { - obj_scale(2.0f); + cur_obj_scale(2.0f); if (o->oTimer != 0) if (o->oTimer & 1) spawn_object(o, MODEL_BURN_SMOKE, bhvBlackSmokeMario); gMarioObject->prevObj = o; // weird? - set_object_parent_relative_pos(o, 40, -120, 0); + obj_set_parent_relative_pos(o, 40, -120, 0); if (!(gMarioObject->oMarioParticleFlags & 0x800)) { o->parentObj->oActiveParticleFlags &= ~0x800; - mark_object_for_deletion(o); + obj_mark_for_deletion(o); gMarioObject->prevObj = NULL; } } diff --git a/src/game/behaviors/flamethrower.inc.c b/src/game/behaviors/flamethrower.inc.c index 6eaa2c4..e6bced9 100644 --- a/src/game/behaviors/flamethrower.inc.c +++ b/src/game/behaviors/flamethrower.inc.c @@ -5,7 +5,7 @@ void bhv_flamethrower_flame_loop(void) { s32 sp18; if (o->oTimer == 0) { o->oAnimState = (s32)(RandomFloat() * 10.0f); - translate_object_xyz_random(o, 10.0f); + obj_translate_xyz_random(o, 10.0f); } if (o->oBehParams2ndByte == 2) size = o->oTimer * (o->oForwardVel - 6.0f) / 100.0 + 2.0; @@ -15,7 +15,7 @@ void bhv_flamethrower_flame_loop(void) { o->hitboxHeight = 200.0f; o->hitboxDownOffset = 150.0f; o->oVelY = -28.0f; - obj_update_floor_height(); + cur_obj_update_floor_height(); if (o->oPosY - 25.0f * size < o->oFloorHeight) { o->oVelY = 0; o->oPosY = o->oFloorHeight + 25.0f * size; @@ -23,13 +23,13 @@ void bhv_flamethrower_flame_loop(void) { sp18 = o->parentObj->oFlameThowerFlameUnk110 / 1.2; } else sp18 = o->parentObj->oFlameThowerFlameUnk110; - obj_scale(size); + cur_obj_scale(size); if (o->oBehParams2ndByte == 4) o->oPosY += o->oForwardVel; // weird? else - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (o->oTimer > sp18) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); o->oInteractStatus = 0; } @@ -60,7 +60,7 @@ void bhv_flamethrower_loop(void) { o->oFlameThowerUnk110 = sp34; flame = spawn_object_relative(o->oBehParams2ndByte, 0, 0, 0, o, model, bhvFlamethrowerFlame); flame->oForwardVel = flameVel; - PlaySound(SOUND_AIR_BLOW_FIRE); + cur_obj_play_sound_1(SOUND_AIR_BLOW_FIRE); } else if (o->oTimer > 60) o->oAction = 0; } diff --git a/src/game/behaviors/floating_platform.inc.c b/src/game/behaviors/floating_platform.inc.c index 7cf4aef..79fe0ed 100644 --- a/src/game/behaviors/floating_platform.inc.c +++ b/src/game/behaviors/floating_platform.inc.c @@ -1,6 +1,6 @@ // floating_platform.c.inc -f32 func_802F54F8(void) { +f32 floating_platform_find_home_y(void) { struct Surface *sp24; f32 sp20; f32 sp1C; @@ -16,7 +16,7 @@ f32 func_802F54F8(void) { } } -void func_802F55CC(void) { +void floating_platform_act_0(void) { s16 sp6 = (gMarioObject->header.gfx.pos[0] - o->oPosX) * coss(-1*o->oMoveAngleYaw) + (gMarioObject->header.gfx.pos[2] - o->oPosZ) * sins(-1*o->oMoveAngleYaw); s16 sp4 = (gMarioObject->header.gfx.pos[2] - o->oPosZ) * coss(-1*o->oMoveAngleYaw) @@ -48,7 +48,7 @@ void func_802F55CC(void) { } void bhv_floating_platform_loop(void) { - o->oHomeY = func_802F54F8(); + o->oHomeY = floating_platform_find_home_y(); if (o->oFloatingPlatformUnkF4 == 0) o->oAction = 0; else @@ -56,7 +56,7 @@ void bhv_floating_platform_loop(void) { switch (o->oAction) { case 0: - func_802F55CC(); + floating_platform_act_0(); break; case 1: diff --git a/src/game/behaviors/fly_guy.inc.c b/src/game/behaviors/fly_guy.inc.c index 7224582..63cb45a 100644 --- a/src/game/behaviors/fly_guy.inc.c +++ b/src/game/behaviors/fly_guy.inc.c @@ -34,7 +34,7 @@ static void fly_guy_act_idle(void) { if (o->oDistanceToMario >= 25000.0f || o->oDistanceToMario < 2000.0f) { // Turn toward home or Mario obj_face_yaw_approach(o->oAngleToMario, 0x300); - if (obj_rotate_yaw_toward(o->oAngleToMario, 0x300)) { + if (cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x300)) { o->oAction = FLY_GUY_ACT_APPROACH_MARIO; } } else { @@ -62,7 +62,7 @@ static void fly_guy_act_approach_mario(void) { // Turn toward home or Mario obj_face_yaw_approach(o->oAngleToMario, 0x400); - obj_rotate_yaw_toward(o->oAngleToMario, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); // If facing toward mario and we are either near mario laterally or // far above him @@ -97,7 +97,7 @@ static void fly_guy_act_lunge(void) { o->oVelY += o->oFlyGuyLungeYDecel; - obj_rotate_yaw_toward(o->oFaceAngleYaw, 0x800); + cur_obj_rotate_yaw_toward(o->oFaceAngleYaw, 0x800); obj_face_pitch_approach(o->oFlyGuyLungeTargetPitch, 0x400); // Range [-0x1000, 0x2000] @@ -149,7 +149,7 @@ static void fly_guy_act_shoot_fire(void) { } else { // We have reached below scale 1.2 in the shrinking portion s16 fireMovePitch = obj_turn_pitch_toward_mario(0.0f, 0); - PlaySound2(SOUND_OBJ_FLAME_BLOWN); + cur_obj_play_sound_2(SOUND_OBJ_FLAME_BLOWN); clamp_s16(&fireMovePitch, 0x800, 0x3000); obj_spit_fire( @@ -179,12 +179,12 @@ void bhv_fly_guy_update(void) { if (!(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)) { o->oDeathSound = SOUND_OBJ_KOOPA_FLYGUY_DEATH; - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); treat_far_home_as_mario(2000.0f); - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); } else if (o->oMoveFlags & OBJ_MOVE_MASK_IN_WATER) { o->oVelY = 6.0f; } @@ -208,7 +208,7 @@ void bhv_fly_guy_update(void) { break; } - obj_move_standard(78); + cur_obj_move_standard(78); obj_check_attacks(&sFlyGuyHitbox, o->oAction); } } diff --git a/src/game/behaviors/flying_bookend_switch.inc.c b/src/game/behaviors/flying_bookend_switch.inc.c index 1cf9de4..48e949d 100644 --- a/src/game/behaviors/flying_bookend_switch.inc.c +++ b/src/game/behaviors/flying_bookend_switch.inc.c @@ -37,11 +37,11 @@ struct ObjectHitbox sBookSwitchHitbox = { void flying_bookend_act_0(void) { if (obj_is_near_to_and_facing_mario(400.0f, 0x3000)) { - PlaySound2(SOUND_OBJ_DEFAULT_DEATH); + cur_obj_play_sound_2(SOUND_OBJ_DEFAULT_DEATH); o->oAction = 1; o->oBookendUnkF4 = o->oFaceAnglePitch + 0x7FFF; o->oBookendUnkF8 = o->oFaceAngleRoll - 0x7FFF; - obj_set_model(MODEL_BOOKEND_PART); + cur_obj_set_model(MODEL_BOOKEND_PART); } } @@ -64,24 +64,24 @@ void flying_bookend_act_1(void) { } } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } void flying_bookend_act_2(void) { - set_obj_animation_and_sound_state(1); - obj_update_floor_and_walls(); + cur_obj_init_animation_with_sound(1); + cur_obj_update_floor_and_walls(); if (o->oForwardVel == 0.0f) { obj_turn_pitch_toward_mario(120.0f, 1000); o->oFaceAnglePitch = o->oMoveAnglePitch + 0x7FFF; - obj_rotate_yaw_toward(o->oAngleToMario, 1000); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 1000); if (o->oTimer > 30) { obj_compute_vel_from_move_pitch(50.0f); } } - obj_move_standard(78); + cur_obj_move_standard(78); } void flying_bookend_act_3(void) { @@ -94,13 +94,13 @@ void flying_bookend_act_3(void) { } obj_forward_vel_approach(50.0f, 2.0f); - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } void bhv_flying_bookend_loop(void) { if (!(o->activeFlags & 0x0008)) { o->oDeathSound = SOUND_OBJ_POUNDING1; - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); switch (o->oAction) { case 0: @@ -135,7 +135,7 @@ void bhv_bookend_spawn_loop(void) { sp1C = spawn_object(o, MODEL_BOOKEND, bhvFlyingBookend); if (sp1C != NULL) { sp1C->oAction = 3; - PlaySound2(SOUND_OBJ_DEFAULT_DEATH); + cur_obj_play_sound_2(SOUND_OBJ_DEFAULT_DEATH); } o->oTimer = 0; } @@ -177,7 +177,7 @@ void bookshelf_manager_act_2(void) { } else { if (o->oBookSwitchManagerUnkF4 >= 3) { if (o->oTimer > 100) { - o->parentObj = obj_nearest_object_with_behavior(bhvHauntedBookshelf); + o->parentObj = cur_obj_nearest_object_with_behavior(bhvHauntedBookshelf); o->parentObj->oAction = 1; o->oPosX = o->parentObj->oPosX; o->oAction = 3; @@ -204,7 +204,7 @@ void bookshelf_manager_act_3(void) { void bookshelf_manager_act_4(void) { if (o->oBookSwitchManagerUnkF4 >= 3) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { o->oAction = 0; } @@ -240,19 +240,19 @@ void bhv_book_switch_loop(void) { o->header.gfx.scale[1] = 0.9f; if (o->parentObj->oAction == 4) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { sp3C = obj_check_attacks(&sBookSwitchHitbox, o->oAction); if (o->parentObj->oBookSwitchManagerUnkF8 != 0 || o->oAction == 1) { if (o->oDistanceToMario < 100.0f) { - obj_become_tangible(); + cur_obj_become_tangible(); } else { - obj_become_intangible(); + cur_obj_become_intangible(); } o->oAction = 1; if (o->oBookSwitchUnkF4 == 0.0f) { - PlaySound2(SOUND_OBJ_DEFAULT_DEATH); + cur_obj_play_sound_2(SOUND_OBJ_DEFAULT_DEATH); } if (approach_f32_ptr(&o->oBookSwitchUnkF4, 50.0f, 20.0f)) { @@ -265,7 +265,7 @@ void bhv_book_switch_loop(void) { o->oTimer = 0; } } else { - obj_become_intangible(); + cur_obj_become_intangible(); if (approach_f32_ptr(&o->oBookSwitchUnkF4, 0.0f, 20.0f)) { if (o->oAction != 0) { if (o->parentObj->oBookSwitchManagerUnkF4 == o->oBehParams2ndByte) { @@ -298,6 +298,6 @@ void bhv_book_switch_loop(void) { o->oPosX += o->parentObj->oForwardVel; o->oPosZ = o->oHomeZ - o->oBookSwitchUnkF4; - obj_push_mario_away_from_cylinder(70.0f, 70.0f); + cur_obj_push_mario_away_from_cylinder(70.0f, 70.0f); } } diff --git a/src/game/behaviors/goomba.inc.c b/src/game/behaviors/goomba.inc.c index 71f5723..92ad478 100644 --- a/src/game/behaviors/goomba.inc.c +++ b/src/game/behaviors/goomba.inc.c @@ -115,7 +115,7 @@ void bhv_goomba_init(void) { o->oGoombaScale = sGoombaProperties[o->oGoombaSize].scale; o->oDeathSound = sGoombaProperties[o->oGoombaSize].deathSound; - set_object_hitbox(o, &sGoombaHitbox); + obj_set_hitbox(o, &sGoombaHitbox); o->oDrawingDistance = sGoombaProperties[o->oGoombaSize].drawDistance; o->oDamageOrCoinValue = sGoombaProperties[o->oGoombaSize].damage; @@ -127,7 +127,7 @@ void bhv_goomba_init(void) { * Enter the jump action and set initial y velocity. */ static void goomba_begin_jump(void) { - PlaySound2(SOUND_OBJ_GOOMBA_ALERT); + cur_obj_play_sound_2(SOUND_OBJ_GOOMBA_ALERT); o->oAction = GOOMBA_ACT_JUMP; o->oForwardVel = 0.0f; o->oVelY = 50.0f / 3.0f * o->oGoombaScale; @@ -209,7 +209,7 @@ static void goomba_act_walk(void) { } } - obj_rotate_yaw_toward(o->oGoombaTargetYaw, 0x200); + cur_obj_rotate_yaw_toward(o->oGoombaTargetYaw, 0x200); } } @@ -247,7 +247,7 @@ static void goomba_act_jump(void) { if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { o->oAction = GOOMBA_ACT_WALK; } else { - obj_rotate_yaw_toward(o->oGoombaTargetYaw, 0x800); + cur_obj_rotate_yaw_toward(o->oGoombaTargetYaw, 0x800); } } @@ -274,18 +274,18 @@ void bhv_goomba_update(void) { // unload if (o->parentObj != o) { if (o->parentObj->oAction == GOOMBA_TRIPLET_SPAWNER_ACT_UNLOADED) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } - obj_scale(o->oGoombaScale); + cur_obj_scale(o->oGoombaScale); obj_update_blinking(&o->oGoombaBlinkTimer, 30, 50, 5); - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if ((animSpeed = o->oForwardVel / o->oGoombaScale * 0.4f) < 1.0f) { animSpeed = 1.0f; } - func_8029ED98(0, animSpeed); + cur_obj_init_animation_with_accel_and_sound(0, animSpeed); switch (o->oAction) { case GOOMBA_ACT_WALK: @@ -310,7 +310,7 @@ void bhv_goomba_update(void) { mark_goomba_as_dead(); } - obj_move_standard(-78); + cur_obj_move_standard(-78); } else { o->oAnimState = TRUE; } diff --git a/src/game/behaviors/grand_star.inc.c b/src/game/behaviors/grand_star.inc.c index bb8d6e3..afdf085 100644 --- a/src/game/behaviors/grand_star.inc.c +++ b/src/game/behaviors/grand_star.inc.c @@ -1,6 +1,6 @@ // grand_star.c.inc -s32 func_802B2894(Vec3f a0, Vec3f a1, f32 yVel, f32 gravity) { +s32 arc_to_goal_pos(Vec3f a0, Vec3f a1, f32 yVel, f32 gravity) { f32 dx = a0[0] - a1[0]; f32 dz = a0[2] - a1[2]; f32 planarDist = sqrtf(dx * dx + dz * dz); @@ -13,7 +13,7 @@ s32 func_802B2894(Vec3f a0, Vec3f a1, f32 yVel, f32 gravity) { return time; } -void func_802B29B0(void) { +void grand_star_zero_velocity(void) { o->oGravity = 0.0f; o->oVelY = 0.0f; o->oForwardVel = 0.0f; @@ -25,48 +25,48 @@ void bhv_grand_star_loop(void) { sp28[0] = sp28[1] = sp28[2] = 0.0f; if (o->oAction == 0) { if (o->oTimer == 0) { - set_object_angle(o, 0, 0, 0); + obj_set_angle(o, 0, 0, 0); o->oAngleVelYaw = 0x400; - PlaySound2(SOUND_GENERAL2_STAR_APPEARS); + cur_obj_play_sound_2(SOUND_GENERAL2_STAR_APPEARS); } if (o->oTimer > 70) o->oAction++; - func_802B2328(3, 200, 80, -60); + spawn_sparkle_particles(3, 200, 80, -60); } else if (o->oAction == 1) { if (o->oTimer == 0) { - PlaySound2(SOUND_GENERAL_GRAND_STAR); + cur_obj_play_sound_2(SOUND_GENERAL_GRAND_STAR); cutscene_object(CUTSCENE_STAR_SPAWN, o); - o->oGrandStarUnk108 = func_802B2894(sp28, &o->oPosX, 80.0f, -2.0f); + o->oGrandStarUnk108 = arc_to_goal_pos(sp28, &o->oPosX, 80.0f, -2.0f); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (o->oSubAction == 0) { if (o->oPosY < o->oHomeY) { o->oPosY = o->oHomeY; o->oVelY = 60.0f; o->oForwardVel = 0.0f; o->oSubAction++; - PlaySound2(SOUND_GENERAL_GRAND_STAR_JUMP); + cur_obj_play_sound_2(SOUND_GENERAL_GRAND_STAR_JUMP); } } else if (o->oVelY < 0.0f && o->oPosY < o->oHomeY + 200.0f) { o->oPosY = o->oHomeY + 200.0f; - func_802B29B0(); + grand_star_zero_velocity(); gObjCutsceneDone = 1; set_mario_npc_dialog(0); o->oAction++; o->oInteractStatus = 0; - PlaySound2(SOUND_GENERAL_GRAND_STAR_JUMP); + cur_obj_play_sound_2(SOUND_GENERAL_GRAND_STAR_JUMP); } - func_802B2328(3, 200, 80, -60); + spawn_sparkle_particles(3, 200, 80, -60); } else { - obj_become_tangible(); + cur_obj_become_tangible(); if (o->oInteractStatus & INT_STATUS_INTERACTED) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); o->oInteractStatus = 0; } } if (o->oAngleVelYaw > 0x400) o->oAngleVelYaw -= 0x100; o->oFaceAngleYaw += o->oAngleVelYaw; - obj_scale(2.0f); + cur_obj_scale(2.0f); o->oGraphYOffset = 110.0f; } diff --git a/src/game/behaviors/grill_door.inc.c b/src/game/behaviors/grill_door.inc.c index a7b8a95..0062bf9 100644 --- a/src/game/behaviors/grill_door.inc.c +++ b/src/game/behaviors/grill_door.inc.c @@ -26,14 +26,14 @@ void bhv_openable_grill_loop(void) { sp3C = spawn_object_relative(-1, D_8032FCE8[sp38].unk0, 0, 0, o, D_8032FCE8[sp38].unk1, bhvOpenableCageDoor); sp3C->oMoveAngleYaw += 0x8000; - set_object_collision_data(sp3C, D_8032FCE8[sp38].unk2); + obj_set_collision_data(sp3C, D_8032FCE8[sp38].unk2); sp3C = spawn_object_relative(1, -D_8032FCE8[sp38].unk0, 0, 0, o, D_8032FCE8[sp38].unk1, bhvOpenableCageDoor); - set_object_collision_data(sp3C, D_8032FCE8[sp38].unk2); + obj_set_collision_data(sp3C, D_8032FCE8[sp38].unk2); o->oAction++; break; case 1: - if ((o->oOpenableGrillUnkF4 = obj_nearest_object_with_behavior(bhvFloorSwitchGrills)) + if ((o->oOpenableGrillUnkF4 = cur_obj_nearest_object_with_behavior(bhvFloorSwitchGrills)) != NULL) o->oAction++; break; @@ -41,7 +41,7 @@ void bhv_openable_grill_loop(void) { sp3C = o->oOpenableGrillUnkF4; if (sp3C->oAction == 2) { o->oOpenableGrillUnk88 = 2; - PlaySound2(SOUND_GENERAL_CAGE_OPEN); + cur_obj_play_sound_2(SOUND_GENERAL_CAGE_OPEN); o->oAction++; if (o->oBehParams2ndByte != 0) play_puzzle_jingle(); diff --git a/src/game/behaviors/ground_particles.inc.c b/src/game/behaviors/ground_particles.inc.c index 415aa58..26dd285 100644 --- a/src/game/behaviors/ground_particles.inc.c +++ b/src/game/behaviors/ground_particles.inc.c @@ -1,33 +1,33 @@ // ground_particles.c.inc void bhv_pound_white_puffs_init(void) { - func_802ADBBC(0x8000); - func_802ADA94(); + clear_particle_flags(0x8000); + spawn_mist_from_global(); } -void func_802ADA94(void) { - obj_spawn_particles(&D_8032F3CC); +void spawn_mist_from_global(void) { + cur_obj_spawn_particles(&D_8032F3CC); } -void bhv_unused_0e40_init(void) { - func_802ADBBC(0x4000); - obj_spawn_particles(&D_8032F3E0); +void bhv_ground_sand_init(void) { + clear_particle_flags(0x4000); + cur_obj_spawn_particles(&D_8032F3E0); } -void Unknown802ADAF4(void) { +void spawn_smoke_with_velocity(void) { struct Object *smoke = spawn_object_with_scale(o, MODEL_SMOKE, bhvWhitePuffSmoke2, 1.0f); smoke->oForwardVel = D_8032F3F4[0]; smoke->oVelY = D_8032F3F4[1]; smoke->oGravity = D_8032F3F4[2]; - translate_object_xyz_random(smoke, D_8032F3F4[3]); + obj_translate_xyz_random(smoke, D_8032F3F4[3]); } // TODO Fix name -void func_802ADBBC(u32 flags) { +void clear_particle_flags(u32 flags) { o->parentObj->oActiveParticleFlags &= flags ^ -1; // Clear the flags given (could just be ~flags) } void bhv_ground_snow_init(void) { - func_802ADBBC(1 << 16); - obj_spawn_particles(&D_8032F3FC); + clear_particle_flags(1 << 16); + cur_obj_spawn_particles(&D_8032F3FC); } diff --git a/src/game/behaviors/haunted_chair.inc.c b/src/game/behaviors/haunted_chair.inc.c index 466ac7e..e2646ca 100644 --- a/src/game/behaviors/haunted_chair.inc.c +++ b/src/game/behaviors/haunted_chair.inc.c @@ -16,7 +16,7 @@ void bhv_haunted_chair_init(void) { struct Object *val04; f32 val00; - val04 = obj_find_nearest_object_with_behavior(bhvMadPiano, &val00); + val04 = cur_obj_find_nearest_object_with_behavior(bhvMadPiano, &val00); if (val04 != NULL && val00 < 300.0f) { o->parentObj = val04; } else { @@ -31,7 +31,7 @@ void haunted_chair_act_0(void) { if (o->parentObj != o) { if (o->oHauntedChairUnk104 == 0) { if (lateral_dist_between_objects(o, o->parentObj) < 250.0f) { - val0E = angle_to_object(o, o->parentObj) - o->oFaceAngleYaw + 0x2000; + val0E = obj_angle_to_object(o, o->parentObj) - o->oFaceAngleYaw + 0x2000; if (val0E & 0x4000) { o->oHauntedChairUnk100 = &o->oFaceAngleRoll; if (val0E > 0) { @@ -66,7 +66,7 @@ void haunted_chair_act_0(void) { } else { if ((o->oTimer & 0x8) != 0) { if (o->oFaceAnglePitch < 0) { - PlaySound2(SOUND_GENERAL_HAUNTED_CHAIR_MOVE); + cur_obj_play_sound_2(SOUND_GENERAL_HAUNTED_CHAIR_MOVE); val08 = 4.0f; } else { val08 = -4.0f; @@ -89,11 +89,11 @@ void haunted_chair_act_0(void) { } } - obj_push_mario_away_from_cylinder(80.0f, 120.0f); + cur_obj_push_mario_away_from_cylinder(80.0f, 120.0f); } void haunted_chair_act_1(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->oTimer < 70) { if (o->oTimer < 50) { @@ -108,13 +108,13 @@ void haunted_chair_act_1(void) { } else { if (o->oHauntedChairUnkF4 != 0) { if (--o->oHauntedChairUnkF4 == 0) { - PlaySound2(SOUND_GENERAL_HAUNTED_CHAIR); + cur_obj_play_sound_2(SOUND_GENERAL_HAUNTED_CHAIR); o->oMoveAnglePitch = obj_turn_pitch_toward_mario(120.0f, 0); o->oMoveAngleYaw = o->oAngleToMario; obj_compute_vel_from_move_pitch(50.0f); } else if (o->oHauntedChairUnkF4 > 20) { if (gGlobalTimer % 4 == 0) { - PlaySound2(SOUND_GENERAL_SWISH_AIR_2); + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_AIR_2); } o->oFaceAngleYaw += 0x2710; } @@ -124,7 +124,7 @@ void haunted_chair_act_1(void) { } obj_check_attacks(&sHauntedChairHitbox, o->oAction); - obj_move_standard(78); + cur_obj_move_standard(78); } void bhv_haunted_chair_loop(void) { diff --git a/src/game/behaviors/heave_ho.inc.c b/src/game/behaviors/heave_ho.inc.c index c29cb2d..662bb0b 100644 --- a/src/game/behaviors/heave_ho.inc.c +++ b/src/game/behaviors/heave_ho.inc.c @@ -14,7 +14,7 @@ void bhv_heave_ho_throw_mario_loop(void) { case 1: break; case 2: - PlaySound2(SOUND_OBJ_HEAVEHO_TOSSED); + cur_obj_play_sound_2(SOUND_OBJ_HEAVEHO_TOSSED); gMarioObject->oInteractStatus |= INT_STATUS_MARIO_UNK2; gMarioStates->forwardVel = -45.0f; gMarioStates->vel[1] = 95.0f; @@ -23,28 +23,28 @@ void bhv_heave_ho_throw_mario_loop(void) { } } -void ActionHeaveHo1(void) { +void heave_ho_act_1(void) { s32 sp1C = 0; o->oForwardVel = 0.0f; - func_8029F6F0(); + cur_obj_reverse_animation(); while (1) { if (D_8032F460[sp1C][0] == -1) { o->oAction = 2; break; } if (o->oTimer < D_8032F460[sp1C][0]) { - func_8029ED98(2, D_8032F460[sp1C][1]); + cur_obj_init_animation_with_accel_and_sound(2, D_8032F460[sp1C][1]); break; } sp1C++; } } -void ActionHeaveHo2(void) { +void heave_ho_act_2(void) { UNUSED s32 unused; s16 angleVel; - if (1000.0f < obj_lateral_dist_from_mario_to_home()) - o->oAngleToMario = obj_angle_to_home(); + if (1000.0f < cur_obj_lateral_dist_from_mario_to_home()) + o->oAngleToMario = cur_obj_angle_to_home(); if (o->oTimer > 150) { o->oHeaveHoUnkF4 = (302 - o->oTimer) / 152.0f; if (o->oHeaveHoUnkF4 < 0.1) { @@ -53,48 +53,48 @@ void ActionHeaveHo2(void) { } } else o->oHeaveHoUnkF4 = 1.0f; - func_8029ED98(0, o->oHeaveHoUnkF4); + cur_obj_init_animation_with_accel_and_sound(0, o->oHeaveHoUnkF4); o->oForwardVel = o->oHeaveHoUnkF4 * 10.0f; angleVel = o->oHeaveHoUnkF4 * 0x400; o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, angleVel); } -void ActionHeaveHo3(void) { +void heave_ho_act_3(void) { o->oForwardVel = 0.0f; if (o->oTimer == 0) o->oHeaveHoUnk88 = 2; if (o->oTimer == 1) { - func_8029ED98(1, 1.0f); + cur_obj_init_animation_with_accel_and_sound(1, 1.0f); o->numCollidedObjs = 20; } - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) o->oAction = 1; } -void ActionHeaveHo0(void) { - obj_set_pos_to_home(); +void heave_ho_act_0(void) { + cur_obj_set_pos_to_home(); if (find_water_level(o->oPosX, o->oPosZ) < o->oPosY && o->oDistanceToMario < 4000.0f) { - obj_become_tangible(); - obj_unhide(); + cur_obj_become_tangible(); + cur_obj_unhide(); o->oAction = 1; } else { - obj_become_intangible(); - obj_hide(); + cur_obj_become_intangible(); + cur_obj_hide(); } } -void (*sHeaveHoActions[])(void) = { ActionHeaveHo0, ActionHeaveHo1, ActionHeaveHo2, ActionHeaveHo3 }; +void (*sHeaveHoActions[])(void) = { heave_ho_act_0, heave_ho_act_1, heave_ho_act_2, heave_ho_act_3 }; -void func_802B18B4(void) { - obj_update_floor_and_walls(); - obj_call_action_function(sHeaveHoActions); - obj_move_standard(-78); +void heave_ho_move(void) { + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sHeaveHoActions); + cur_obj_move_standard(-78); if (o->oMoveFlags & (0x40 | 0x20 | 0x10 | 0x8)) o->oGraphYOffset = -15.0f; else o->oGraphYOffset = 0.0f; if (o->oForwardVel > 3.0f) - PlaySound(SOUND_AIR_HEAVEHO_MOVE); + cur_obj_play_sound_1(SOUND_AIR_HEAVEHO_MOVE); if (o->oAction != 0 && o->oMoveFlags & (0x40 | 0x20 | 0x10 | 0x8)) o->oAction = 0; if (o->oInteractStatus & INT_STATUS_GRABBED_MARIO) { @@ -105,19 +105,19 @@ void func_802B18B4(void) { } void bhv_heave_ho_loop(void) { - obj_scale(2.0f); + cur_obj_scale(2.0f); switch (o->oHeldState) { case HELD_FREE: - func_802B18B4(); + heave_ho_move(); break; case HELD_HELD: - func_8029FA5C(0, 0); + cur_obj_unrender_and_reset_state(0, 0); break; case HELD_THROWN: - obj_get_dropped(); + cur_obj_get_dropped(); break; case HELD_DROPPED: - obj_get_dropped(); + cur_obj_get_dropped(); break; } o->oInteractStatus = 0; diff --git a/src/game/behaviors/hidden_star.inc.c b/src/game/behaviors/hidden_star.inc.c index ccd8a36..693c799 100644 --- a/src/game/behaviors/hidden_star.inc.c +++ b/src/game/behaviors/hidden_star.inc.c @@ -24,8 +24,8 @@ void bhv_hidden_star_loop(void) { case 1: if (o->oTimer > 2) { - func_802F1B84(o->oPosX, o->oPosY, o->oPosZ); - func_802A3004(); + spawn_red_coin_cutscene_star(o->oPosX, o->oPosY, o->oPosZ); + spawn_mist_particles(); o->activeFlags = 0; } break; @@ -35,8 +35,8 @@ void bhv_hidden_star_loop(void) { /* TODO: this is likely not a checkpoint but a Secret */ void bhv_hidden_star_trigger_loop(void) { struct Object *hiddenStar; - if (are_objects_collided(o, gMarioObject) == 1) { - hiddenStar = obj_nearest_object_with_behavior(bhvHiddenStar); + if (obj_check_if_collided_with_object(o, gMarioObject) == 1) { + hiddenStar = cur_obj_nearest_object_with_behavior(bhvHiddenStar); if (hiddenStar != NULL) { hiddenStar->oHiddenStarTriggerCounter++; if (hiddenStar->oHiddenStarTriggerCounter != 5) { @@ -66,8 +66,8 @@ void bhv_bowser_course_red_coin_star_loop(void) { case 1: if (o->oTimer > 2) { - func_802F1BD4(o->oPosX, o->oPosY, o->oPosZ); - func_802A3004(); + spawn_no_exit_star(o->oPosX, o->oPosY, o->oPosZ); + spawn_mist_particles(); o->activeFlags = 0; } break; diff --git a/src/game/behaviors/hoot.inc.c b/src/game/behaviors/hoot.inc.c index 6441965..b807d5d 100644 --- a/src/game/behaviors/hoot.inc.c +++ b/src/game/behaviors/hoot.inc.c @@ -1,20 +1,20 @@ // hoot.c.inc void bhv_hoot_init(void) { - SetObjAnimation(0); + cur_obj_init_animation(0); o->oHomeX = o->oPosX + 800.0f; o->oHomeY = o->oPosY - 150.0f; o->oHomeZ = o->oPosZ + 300.0f; o->header.gfx.node.flags |= 0x10; /* bit 4 */ - obj_become_intangible(); + cur_obj_become_intangible(); } // sp28 = arg0 // sp2c = arg1 -f32 HootFindNextFloor(struct FloorGeometry **arg0, f32 arg1) { +f32 hoot_find_next_floor(struct FloorGeometry **arg0, f32 arg1) { f32 sp24 = arg1 * sins(o->oMoveAngleYaw) + o->oPosX; UNUSED f32 sp20 = o->oPosY; f32 sp1c = arg1 * coss(o->oMoveAngleYaw) + o->oPosZ; @@ -23,19 +23,19 @@ f32 HootFindNextFloor(struct FloorGeometry **arg0, f32 arg1) { return floorY; } -void HootFloorBounce(void) { +void hoot_floor_bounce(void) { struct FloorGeometry *sp1c; f32 floorY; - floorY = HootFindNextFloor(&sp1c, 375.0f); + floorY = hoot_find_next_floor(&sp1c, 375.0f); if (floorY + 75.0f > o->oPosY) o->oMoveAnglePitch -= 3640.8888; - floorY = HootFindNextFloor(&sp1c, 200.0f); + floorY = hoot_find_next_floor(&sp1c, 200.0f); if (floorY + 125.0f > o->oPosY) o->oMoveAnglePitch -= 7281.7776; - floorY = HootFindNextFloor(&sp1c, 0); + floorY = hoot_find_next_floor(&sp1c, 0); if (floorY + 125.0f > o->oPosY) o->oPosY = floorY + 125.0f; if (o->oMoveAnglePitch < -21845.3328) @@ -45,7 +45,7 @@ void HootFloorBounce(void) { // sp30 = fastOscY // sp34 = speed -void HootFreeStep(s16 fastOscY, s32 speed) { +void hoot_free_step(s16 fastOscY, s32 speed) { struct FloorGeometry *sp2c; s16 yaw = o->oMoveAngleYaw; s16 pitch = o->oMoveAnglePitch; @@ -73,10 +73,10 @@ void HootFreeStep(s16 fastOscY, s32 speed) { } if (sp26 == 0) - PlaySound2(SOUND_GENERAL_SWISH_WATER); + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_WATER); } -void PlayerSetHootYaw(void) { +void hoot_player_set_yaw(void) { s16 stickX = gPlayer3Controller->rawStickX; s16 stickY = gPlayer3Controller->rawStickY; UNUSED s16 pitch = o->oMoveAnglePitch; @@ -92,7 +92,7 @@ void PlayerSetHootYaw(void) { // sp2c = xPrev // sp30 = zPrev -void HootCarryStep(s32 speed, UNUSED f32 xPrev, UNUSED f32 zPrev) { +void hoot_carry_step(s32 speed, UNUSED f32 xPrev, UNUSED f32 zPrev) { s16 yaw = o->oMoveAngleYaw; s16 pitch = o->oMoveAnglePitch; s16 sp22 = o->header.gfx.unk38.animFrame; @@ -108,14 +108,14 @@ void HootCarryStep(s32 speed, UNUSED f32 xPrev, UNUSED f32 zPrev) { o->oPosZ += o->oVelZ; if (sp22 == 0) - PlaySound2(SOUND_GENERAL_SWISH_WATER); + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_WATER); } // sp48 = xPrev // sp4c = yPrev // sp50 = zPrev -void HootSurfaceCollision(f32 xPrev, UNUSED f32 yPrev, f32 zPrev) { +void hoot_surface_collision(f32 xPrev, UNUSED f32 yPrev, f32 zPrev) { struct FloorGeometry *sp44; struct WallCollisionData hitbox; f32 floorY; @@ -151,7 +151,7 @@ void HootSurfaceCollision(f32 xPrev, UNUSED f32 yPrev, f32 zPrev) { // sp28 = xPrev // sp2c = zPrev -void HootAscentLoop(f32 xPrev, f32 zPrev) { +void hoot_act_ascent(f32 xPrev, f32 zPrev) { f32 negX = 0 - o->oPosX; f32 negZ = 0 - o->oPosZ; s16 angleToOrigin = atan2s(negZ, negX); @@ -160,28 +160,28 @@ void HootAscentLoop(f32 xPrev, f32 zPrev) { o->oMoveAnglePitch = 0xCE38; if (o->oTimer >= 29) { - PlaySound(SOUND_ENV_WIND2); + cur_obj_play_sound_1(SOUND_ENV_WIND2); o->header.gfx.unk38.animFrame = 1; } if (o->oPosY > 6500.0f) o->oAction = HOOT_ACT_CARRY; - HootCarryStep(60, xPrev, zPrev); + hoot_carry_step(60, xPrev, zPrev); } -void HootActionLoop(void) { +void hoot_action_loop(void) { f32 xPrev = o->oPosX; f32 yPrev = o->oPosY; f32 zPrev = o->oPosZ; switch (o->oAction) { case HOOT_ACT_ASCENT: - HootAscentLoop(xPrev, zPrev); + hoot_act_ascent(xPrev, zPrev); break; case HOOT_ACT_CARRY: - PlayerSetHootYaw(); + hoot_player_set_yaw(); o->oMoveAnglePitch = 0x71C; @@ -195,25 +195,25 @@ void HootActionLoop(void) { } } - HootCarryStep(20, xPrev, zPrev); + hoot_carry_step(20, xPrev, zPrev); break; case HOOT_ACT_TIRED: - PlayerSetHootYaw(); + hoot_player_set_yaw(); o->oMoveAnglePitch = 0; - HootCarryStep(20, xPrev, zPrev); + hoot_carry_step(20, xPrev, zPrev); if (o->oTimer >= 61) gMarioObject->oInteractStatus |= INT_STATUS_MARIO_UNK7; /* bit 7 */ break; } - HootSurfaceCollision(xPrev, yPrev, zPrev); + hoot_surface_collision(xPrev, yPrev, zPrev); } -void HootTurnToHome(void) { +void hoot_turn_to_home(void) { f32 homeDistX = o->oHomeX - o->oPosX; f32 homeDistY = o->oHomeY - o->oPosY; f32 homeDistZ = o->oHomeZ - o->oPosZ; @@ -224,17 +224,16 @@ void HootTurnToHome(void) { o->oMoveAnglePitch = approach_s16_symmetric(o->oMoveAnglePitch, vAngleToHome, 0x140); } -void HootAwakeLoop(void) { +void hoot_awake_loop(void) { if (o->oInteractStatus == INTERACT_HOOT) { - HootActionLoop(); - - SetObjAnimation(1); + hoot_action_loop(); + cur_obj_init_animation(1); } else { - SetObjAnimation(0); + cur_obj_init_animation(0); - HootTurnToHome(); - HootFloorBounce(); - HootFreeStep(0, 10); + hoot_turn_to_home(); + hoot_floor_bounce(); + hoot_free_step(0, 10); o->oAction = 0; o->oTimer = 0; @@ -253,19 +252,19 @@ void bhv_hoot_loop(void) { break; case HOOT_AVAIL_WANTS_TO_TALK: - HootAwakeLoop(); + hoot_awake_loop(); if (set_mario_npc_dialog(2) == 2 && cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_044)) { set_mario_npc_dialog(0); - obj_become_tangible(); + cur_obj_become_tangible(); o->oHootAvailability = HOOT_AVAIL_READY_TO_FLY; } break; case HOOT_AVAIL_READY_TO_FLY: - HootAwakeLoop(); + hoot_awake_loop(); break; } } diff --git a/src/game/behaviors/horizontal_grindel.inc.c b/src/game/behaviors/horizontal_grindel.inc.c index e864d0b..07733c0 100644 --- a/src/game/behaviors/horizontal_grindel.inc.c +++ b/src/game/behaviors/horizontal_grindel.inc.c @@ -6,22 +6,22 @@ void bhv_horizontal_grindel_init(void) { void bhv_horizontal_grindel_update(void) { if (o->oMoveFlags & 0x00000003) { if (!o->oHorizontalGrindelOnGround) { - PlaySound2(SOUND_OBJ_THWOMP); + cur_obj_play_sound_2(SOUND_OBJ_THWOMP); o->oHorizontalGrindelOnGround = TRUE; set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ); - o->oHorizontalGrindelDistToHome = obj_lateral_dist_to_home(); + o->oHorizontalGrindelDistToHome = cur_obj_lateral_dist_to_home(); o->oForwardVel = 0.0f; o->oTimer = 0; } - if (obj_rotate_yaw_toward(o->oHorizontalGrindelTargetYaw, 0x400)) { + if (cur_obj_rotate_yaw_toward(o->oHorizontalGrindelTargetYaw, 0x400)) { if (o->oTimer > 60) { if (o->oHorizontalGrindelDistToHome > 300.0f) { o->oHorizontalGrindelTargetYaw += 0x8000; o->oHorizontalGrindelDistToHome = 0.0f; } else { - PlaySound2(SOUND_OBJ_KING_BOBOMB_JUMP); + cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB_JUMP); o->oForwardVel = 11.0f; o->oVelY = 70.0f; o->oGravity = -4.0f; @@ -39,5 +39,5 @@ void bhv_horizontal_grindel_update(void) { } o->oFaceAngleYaw = o->oMoveAngleYaw + 0x4000; - obj_move_standard(78); + cur_obj_move_standard(78); } diff --git a/src/game/behaviors/intro_lakitu.inc.c b/src/game/behaviors/intro_lakitu.inc.c index 8b06a04..4947adc 100644 --- a/src/game/behaviors/intro_lakitu.inc.c +++ b/src/game/behaviors/intro_lakitu.inc.c @@ -63,7 +63,7 @@ void bhv_intro_lakitu_loop(void) { switch (gCurrentObject->oAction) { case 0: - obj_disable_rendering(); + cur_obj_disable_rendering(); gCurrentObject->oIntroLakituSplineSegment = 0.f; gCurrentObject->oIntroLakituSplineSegmentProgress = 0.f; gCurrentObject->oIntroLakituCloud = @@ -75,14 +75,14 @@ void bhv_intro_lakitu_loop(void) { break; case 1: - obj_enable_rendering(); + cur_obj_enable_rendering(); if ((gCutsceneTimer > 350) && (gCutsceneTimer < 458)) { gCurrentObject->oPosX = gCamera->pos[0]; gCurrentObject->oPosY = gCamera->pos[1] + 500.f; gCurrentObject->oPosZ = gCamera->pos[2]; } if (gCutsceneTimer > 52) - PlaySound(SOUND_AIR_LAKITU_FLY_HIGHPRIO); + cur_obj_play_sound_1(SOUND_AIR_LAKITU_FLY_HIGHPRIO); if (intro_lakitu_set_pos_and_focus(gCurrentObject, gIntroLakituStartToPipeOffsetFromCamera, gIntroLakituStartToPipeFocus) == 1) @@ -91,10 +91,10 @@ void bhv_intro_lakitu_loop(void) { switch (gCurrentObject->oTimer) { #ifdef VERSION_US case 534: - PlaySound2(SOUND_ACTION_FLYING_FAST); + cur_obj_play_sound_2(SOUND_ACTION_FLYING_FAST); break; case 581: - PlaySound2(SOUND_ACTION_INTRO_UNK45E); + cur_obj_play_sound_2(SOUND_ACTION_INTRO_UNK45E); break; #endif case 73: @@ -112,9 +112,9 @@ void bhv_intro_lakitu_loop(void) { } #ifdef VERSION_EU if (gCurrentObject->oTimer == 446) - PlaySound2(SOUND_ACTION_FLYING_FAST); + cur_obj_play_sound_2(SOUND_ACTION_FLYING_FAST); if (gCurrentObject->oTimer == 485) - PlaySound2(SOUND_ACTION_INTRO_UNK45E); + cur_obj_play_sound_2(SOUND_ACTION_INTRO_UNK45E); #endif break; case 2: @@ -132,11 +132,11 @@ void bhv_intro_lakitu_loop(void) { gCurrentObject->oFaceAngleYaw = gCurrentObject->oMoveAngleYaw + 0x4000; gCurrentObject->oMoveAnglePitch = 0x800; } - PlaySound(SOUND_AIR_LAKITU_FLY_HIGHPRIO); + cur_obj_play_sound_1(SOUND_AIR_LAKITU_FLY_HIGHPRIO); break; case 3: - PlaySound(SOUND_AIR_LAKITU_FLY_HIGHPRIO); + cur_obj_play_sound_1(SOUND_AIR_LAKITU_FLY_HIGHPRIO); vec3f_set(sp58, -1128.f, 560.f, 4664.f); gCurrentObject->oMoveAngleYaw += 0x200; gCurrentObject->oIntroLakituUnk100 = @@ -158,7 +158,7 @@ void bhv_intro_lakitu_loop(void) { if (gCurrentObject->oTimer == 31) { gCurrentObject->oPosY -= 158.f; // Spawn white ground particles - func_802ADA94(); + spawn_mist_from_global(); gCurrentObject->oPosY += 158.f; } #ifdef VERSION_EU @@ -168,16 +168,16 @@ void bhv_intro_lakitu_loop(void) { #endif if (gCurrentObject->oTimer == TIMER) { - mark_object_for_deletion(gCurrentObject); - mark_object_for_deletion(gCurrentObject->oIntroLakituCloud); + obj_mark_for_deletion(gCurrentObject); + obj_mark_for_deletion(gCurrentObject->oIntroLakituCloud); } #ifndef VERSION_JP if (gCurrentObject->oTimer == 14) - PlaySound2(SOUND_ACTION_INTRO_UNK45F); + cur_obj_play_sound_2(SOUND_ACTION_INTRO_UNK45F); #endif break; case 100: - obj_enable_rendering(); + cur_obj_enable_rendering(); vec3f_set(sp64, -100.f, 100.f, 300.f); offset_rotated(sp4C, gCamera->pos, sp64, sMarioCamState->faceAngle); vec3f_to_object_pos(gCurrentObject, sp4C); @@ -204,7 +204,7 @@ void bhv_intro_lakitu_loop(void) { gCurrentObject->oMoveAnglePitch = 0xE00; } gCurrentObject->oFaceAnglePitch = 0; - func_802A2A38(); + cur_obj_set_pos_via_transform(); break; case 102: @@ -219,7 +219,7 @@ void bhv_intro_lakitu_loop(void) { gCurrentObject->oMoveAnglePitch = camera_approach_s16_symmetric(gCurrentObject->oMoveAnglePitch, -0x2000, 0x5A); gCurrentObject->oFaceAnglePitch = 0; - func_802A2A38(); + cur_obj_set_pos_via_transform(); break; } } diff --git a/src/game/behaviors/intro_peach.inc.c b/src/game/behaviors/intro_peach.inc.c index dfbd833..eb32d1c 100644 --- a/src/game/behaviors/intro_peach.inc.c +++ b/src/game/behaviors/intro_peach.inc.c @@ -47,7 +47,7 @@ void bhv_intro_peach_loop(void) { intro_peach_set_pos_and_opacity(gCurrentObject, 0.f, 8.f); if (gCurrentObject->oTimer > 60) - mark_object_for_deletion(gCurrentObject); + obj_mark_for_deletion(gCurrentObject); break; } } diff --git a/src/game/behaviors/intro_scene.inc.c b/src/game/behaviors/intro_scene.inc.c index 02a8da9..854d37a 100644 --- a/src/game/behaviors/intro_scene.inc.c +++ b/src/game/behaviors/intro_scene.inc.c @@ -1,6 +1,6 @@ // intro_scene.inc.c -void func_8029B964(struct Object *parent, s16 xOffset, s16 yOffset, s16 zOffset, s16 pitchOffset, +void spawn_child_obj_relative(struct Object *parent, s16 xOffset, s16 yOffset, s16 zOffset, s16 pitchOffset, s16 yawOffset, s16 rollOffset, s16 forwardVel, s32 model, const BehaviorScript *behavior) { struct Object *sp1C = spawn_object(parent, model, behavior); @@ -37,37 +37,37 @@ void bhv_intro_scene_loop(void) { sp34 = spawn_object(gCurrentObject, MODEL_PEACH, bhvBeginningPeach); break; case 7: - func_8029B964(gCurrentObject, 0, 205, 500, 0x1000, 0x6000, -0x1E00, 25, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, 0, 205, 500, 0x1000, 0x6000, -0x1E00, 25, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, 0, 205, 800, 0x1800, 0x6000, -0x1400, 35, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, 0, 205, 800, 0x1800, 0x6000, -0x1400, 35, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, -100, 300, 500, 0x800, 0x6000, 0, 25, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -100, 300, 500, 0x800, 0x6000, 0, 25, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, 100, -200, 800, 0, 0x4000, 0x1400, 45, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, 100, -200, 800, 0, 0x4000, 0x1400, 45, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, -80, 300, 350, 0x1800, 0x5000, 0xA00, 35, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -80, 300, 350, 0x1800, 0x5000, 0xA00, 35, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, -300, 300, 500, 0x800, 0x6000, 0x2800, 25, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -300, 300, 500, 0x800, 0x6000, 0x2800, 25, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, -400, -200, 800, 0, 0x4000, -0x1400, 45, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -400, -200, 800, 0, 0x4000, -0x1400, 45, MODEL_BIRDS, bhvEndBirds1); break; case 9: - func_8029B964(gCurrentObject, 50, 205, 500, 0x1000, 0x6000, 0, 35, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, 50, 205, 500, 0x1000, 0x6000, 0, 35, MODEL_BIRDS, bhvEndBirds1); - func_8029B964(gCurrentObject, 0, 285, 800, 0x1800, 0x6000, 0, 35, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, 0, 285, 800, 0x1800, 0x6000, 0, 35, MODEL_BIRDS, bhvEndBirds1); break; case 8: - func_8029B964(gCurrentObject, -100, -100, -700, 0, 0, -0xF00, 25, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -100, -100, -700, 0, 0, -0xF00, 25, MODEL_BIRDS, bhvEndBirds2); - func_8029B964(gCurrentObject, -250, 255, -200, 0, 0, -0x1400, 25, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -250, 255, -200, 0, 0, -0x1400, 25, MODEL_BIRDS, bhvEndBirds2); - func_8029B964(gCurrentObject, -100, 155, -600, 0, 0, -0x500, 35, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, -100, 155, -600, 0, 0, -0x500, 35, MODEL_BIRDS, bhvEndBirds2); - func_8029B964(gCurrentObject, 250, 200, -1200, 0, 0, -0x700, 25, MODEL_BIRDS, + spawn_child_obj_relative(gCurrentObject, 250, 200, -1200, 0, 0, -0x700, 25, MODEL_BIRDS, bhvEndBirds2); - func_8029B964(gCurrentObject, -250, 255, -700, 0, 0, 0, 25, MODEL_BIRDS, bhvEndBirds2); + spawn_child_obj_relative(gCurrentObject, -250, 255, -700, 0, 0, 0, 25, MODEL_BIRDS, bhvEndBirds2); break; } diff --git a/src/game/behaviors/jrb_ship.inc.c b/src/game/behaviors/jrb_ship.inc.c index 207d798..3b627da 100644 --- a/src/game/behaviors/jrb_ship.inc.c +++ b/src/game/behaviors/jrb_ship.inc.c @@ -17,20 +17,20 @@ void bhv_sunken_ship_part_loop(void) { o->oOpacity = 140; else o->oOpacity = o->oDistanceToMario * 140.0f / 10000.0; - obj_disable_rendering(); + cur_obj_disable_rendering(); } void bhv_ship_part_3_loop(void) { s16 sp1E = o->oFaceAnglePitch; s16 sp1C = o->oFaceAngleRoll; - func_802A3470(); + cur_obj_set_pos_to_home_with_debug(); o->oShipPart3UnkF4 += 0x100; o->oFaceAnglePitch = sins(o->oShipPart3UnkF4) * 1024.0f; o->oFaceAngleRoll = sins(o->oShipPart3UnkF8) * 1024.0f; o->oAngleVelPitch = o->oFaceAnglePitch - sp1E; o->oAngleVelRoll = o->oFaceAngleRoll - sp1C; if (gMarioObject->oPosY > 1000.0f) - PlaySound(SOUND_ENV_BOAT_ROCKING1); + cur_obj_play_sound_1(SOUND_ENV_BOAT_ROCKING1); } void bhv_jrb_sliding_box_loop(void) { @@ -44,7 +44,7 @@ void bhv_jrb_sliding_box_loop(void) { Vec3f sp20; s16 sp1E; if (o->oJrbSlidingBoxUnkF4 == NULL) { - sp3C = obj_nearest_object_with_behavior(bhvInSunkenShip3); + sp3C = cur_obj_nearest_object_with_behavior(bhvInSunkenShip3); if (sp3C != NULL) // NULL check only for assignment, not for dereference? o->oJrbSlidingBoxUnkF4 = sp3C; o->oParentRelativePosX = o->oPosX - sp3C->oPosX; @@ -80,12 +80,12 @@ void bhv_jrb_sliding_box_loop(void) { o->oParentRelativePosZ += o->oJrbSlidingBoxUnkFC; if (gMarioObject->oPosY > 1000.0f) if (absf(o->oJrbSlidingBoxUnkFC) > 3.0f) - PlaySound(SOUND_AIR_ROUGH_SLIDE); - set_object_hitbox(o, &sSkullSlidingBoxHitbox); + cur_obj_play_sound_1(SOUND_AIR_ROUGH_SLIDE); + obj_set_hitbox(o, &sSkullSlidingBoxHitbox); if (!(o->oJrbSlidingBoxUnkF8 & 0x7FFF)) - obj_become_tangible(); - if (are_objects_collided(o, gMarioObject)) { + cur_obj_become_tangible(); + if (obj_check_if_collided_with_object(o, gMarioObject)) { o->oInteractStatus = 0; - obj_become_intangible(); + cur_obj_become_intangible(); } } diff --git a/src/game/behaviors/jumping_box.inc.c b/src/game/behaviors/jumping_box.inc.c index e946427..4a40b07 100644 --- a/src/game/behaviors/jumping_box.inc.c +++ b/src/game/behaviors/jumping_box.inc.c @@ -12,7 +12,7 @@ struct ObjectHitbox sJumpingBoxHitbox = { /* hurtboxHeight: */ 250, }; -void ActionJumpingBox0(void) { +void jumping_box_act_0(void) { if (o->oSubAction == 0) { if (o->oJumpingBoxUnkF8-- < 0) o->oSubAction++; @@ -26,45 +26,45 @@ void ActionJumpingBox0(void) { } } -void ActionJumpingBox1(void) { +void jumping_box_act_1(void) { if (o->oMoveFlags & (0x200 | 0x40 | 0x20 | 0x10 | 0x8 | 0x1)) { - mark_object_for_deletion(o); - func_802A3004(); + obj_mark_for_deletion(o); + spawn_mist_particles(); } } -void (*sJumpingBoxActions[])(void) = { ActionJumpingBox0, ActionJumpingBox1 }; +void (*sJumpingBoxActions[])(void) = { jumping_box_act_0, jumping_box_act_1 }; -void func_802B1F84(void) { - obj_set_model(MODEL_BREAKABLE_BOX); - obj_scale(0.5f); - set_object_hitbox(o, &sJumpingBoxHitbox); - obj_update_floor_and_walls(); - obj_move_standard(78); - obj_call_action_function(sJumpingBoxActions); +void jumping_box_free_update(void) { + cur_obj_set_model(MODEL_BREAKABLE_BOX); + cur_obj_scale(0.5f); + obj_set_hitbox(o, &sJumpingBoxHitbox); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); + cur_obj_call_action_function(sJumpingBoxActions); } void bhv_jumping_box_loop(void) { switch (o->oHeldState) { case HELD_FREE: - func_802B1F84(); + jumping_box_free_update(); break; case HELD_HELD: - copy_object_pos(o, gMarioObject); - obj_set_model(MODEL_BREAKABLE_BOX_SMALL); - func_8029FA5C(-1, 0); + obj_copy_pos(o, gMarioObject); + cur_obj_set_model(MODEL_BREAKABLE_BOX_SMALL); + cur_obj_unrender_and_reset_state(-1, 0); break; case HELD_THROWN: - obj_get_thrown_or_placed(40.0f, 20.0f, 1); + cur_obj_get_thrown_or_placed(40.0f, 20.0f, 1); break; case HELD_DROPPED: - obj_get_dropped(); + cur_obj_get_dropped(); o->oAction = 1; break; } if (o->oInteractStatus & INTERACT_HIT_FROM_BELOW) { create_sound_spawner(SOUND_GENERAL_BREAK_BOX); - func_802A3C98(46.0f, 1); + obj_explode_and_spawn_coins(46.0f, 1); } o->oInteractStatus = 0; } diff --git a/src/game/behaviors/kickable_board.inc.c b/src/game/behaviors/kickable_board.inc.c index ee56370..7be9b21 100644 --- a/src/game/behaviors/kickable_board.inc.c +++ b/src/game/behaviors/kickable_board.inc.c @@ -1,7 +1,7 @@ // kickable_board.c.inc -s32 func_802A9A0C(UNUSED s32 sp18) { - if (are_objects_collided(o, gMarioObject)) { +s32 check_mario_attacking(UNUSED s32 sp18) { + if (obj_check_if_collided_with_object(o, gMarioObject)) { if (abs_angle_diff(o->oMoveAngleYaw, gMarioObject->oMoveAngleYaw) > 0x6000) { if (gMarioStates->action == ACT_SLIDE_KICK) return 1; @@ -20,7 +20,7 @@ s32 func_802A9A0C(UNUSED s32 sp18) { return 0; } -void func_802A9B54(void) { +void init_kickable_board_rock(void) { o->oKickableBoardF8 = 1600; o->oKickableBoardF4 = 0; } @@ -30,8 +30,8 @@ void bhv_kickable_board_loop(void) { switch (o->oAction) { case 0: o->oFaceAnglePitch = 0; - if (func_802A9A0C(0)) { - func_802A9B54(); + if (check_mario_attacking(0)) { + init_kickable_board_rock(); o->oAction++; } load_object_collision_model(); @@ -40,10 +40,10 @@ void bhv_kickable_board_loop(void) { o->oFaceAnglePitch = 0; load_object_collision_model(); o->oFaceAnglePitch = -sins(o->oKickableBoardF4) * o->oKickableBoardF8; - if (o->oTimer > 30 && (sp24 = func_802A9A0C(0))) { + if (o->oTimer > 30 && (sp24 = check_mario_attacking(0))) { if (gMarioObject->oPosY > o->oPosY + 160.0f && sp24 == 2) { o->oAction++; - PlaySound2(SOUND_GENERAL_BUTTON_PRESS_2); + cur_obj_play_sound_2(SOUND_GENERAL_BUTTON_PRESS_2); } else o->oTimer = 0; } @@ -52,22 +52,22 @@ void bhv_kickable_board_loop(void) { if (o->oKickableBoardF8 < 0) o->oAction = 0; } else - func_802A9B54(); + init_kickable_board_rock(); if (!(o->oKickableBoardF4 & 0x7FFF)) - PlaySound2(SOUND_GENERAL_BUTTON_PRESS_2); + cur_obj_play_sound_2(SOUND_GENERAL_BUTTON_PRESS_2); o->oKickableBoardF4 += 0x400; break; case 2: - obj_become_intangible(); - obj_set_model(MODEL_WF_KICKABLE_BOARD_FELLED); + cur_obj_become_intangible(); + cur_obj_set_model(MODEL_WF_KICKABLE_BOARD_FELLED); o->oAngleVelPitch -= 0x80; o->oFaceAnglePitch += o->oAngleVelPitch; if (o->oFaceAnglePitch < -0x4000) { o->oFaceAnglePitch = -0x4000; o->oAngleVelPitch = 0; o->oAction++; - ShakeScreen(SHAKE_POS_SMALL); - PlaySound2(SOUND_GENERAL_UNKNOWN4); + cur_obj_shake_screen(SHAKE_POS_SMALL); + cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN4); } load_object_collision_model(); break; diff --git a/src/game/behaviors/king_bobomb.inc.c b/src/game/behaviors/king_bobomb.inc.c index d1665a9..248f54f 100644 --- a/src/game/behaviors/king_bobomb.inc.c +++ b/src/game/behaviors/king_bobomb.inc.c @@ -1,84 +1,100 @@ // king_bobomb.c.inc -void bhv_bobomb_anchor_mario_loop(void) { - func_802A8D18(50.0f, 50.0f, 64); +// Copy of geo_update_projectile_pos_from_parent +Gfx *geo_update_held_mario_pos(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { + Mat4 sp20; + struct Object *sp1C; + + if (run == TRUE) { + sp1C = (struct Object *) gCurGraphNodeObject; + if (sp1C->prevObj != NULL) { + create_transformation_from_matrices(sp20, mtx, gCurGraphNodeCamera->matrixPtr); + obj_update_pos_from_parent_transformation(sp20, sp1C->prevObj); + obj_set_gfx_pos_from_pos(sp1C->prevObj); + } + } + return NULL; } -void ActionKingBobomb0(void) { +void bhv_bobomb_anchor_mario_loop(void) { + common_anchor_mario_behavior(50.0f, 50.0f, 64); +} + +void king_bobomb_act_0(void) { #ifndef VERSION_JP o->oForwardVel = 0; o->oVelY = 0; #endif if (o->oSubAction == 0) { - obj_become_intangible(); + cur_obj_become_intangible(); gSecondCameraFocus = o; - set_obj_animation_and_sound_state(5); - obj_set_pos_to_home(); + cur_obj_init_animation_with_sound(5); + cur_obj_set_pos_to_home(); o->oHealth = 3; - if (obj_is_mario_in_range_and_ready_to_speak(500.0f, 100.0f)) { + if (cur_obj_can_mario_activate_textbox_2(500.0f, 100.0f)) { o->oSubAction++; func_8031FFB4(0, 60, 40); } - } else if (obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_017)) { + } else if (cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_017)) { o->oAction = 2; o->oFlags |= OBJ_FLAG_HOLDABLE; } } -int func_802A6AF8(f32 arg0) { +int mario_is_far_below_object(f32 arg0) { if (arg0 < o->oPosY - gMarioObject->oPosY) return 1; else return 0; } -void ActionKingBobomb2(void) { - obj_become_tangible(); +void king_bobomb_act_2(void) { + cur_obj_become_tangible(); if (o->oPosY - o->oHomeY < -100.0f) { // Thrown off hill o->oAction = 5; - obj_become_intangible(); + cur_obj_become_intangible(); } if (o->oKingBobombUnk100 == 0) { - if (obj_check_anim_frame(15)) - ShakeScreen(SHAKE_POS_SMALL); - if (func_802A4AB0(4)) + if (cur_obj_check_anim_frame(15)) + cur_obj_shake_screen(SHAKE_POS_SMALL); + if (cur_obj_init_animation_and_check_if_near_end(4)) o->oKingBobombUnk100++; } else { if (o->oKingBobombUnk100 == 1) { - func_802A4A70(11, 7); + cur_obj_init_animation_and_anim_frame(11, 7); o->oKingBobombUnk100 = 2; } else - set_obj_animation_and_sound_state(11); + cur_obj_init_animation_with_sound(11); if (o->oKingBobombUnk108 == 0) { o->oForwardVel = 3.0f; - obj_rotate_yaw_toward(o->oAngleToMario, 0x100); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x100); } else { o->oForwardVel = 0.0f; o->oKingBobombUnk108--; } } - if (obj_check_grabbed_mario()) + if (cur_obj_check_grabbed_mario()) o->oAction = 3; - if (func_802A6AF8(1200.0f)) { + if (mario_is_far_below_object(1200.0f)) { o->oAction = 0; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } } -void ActionKingBobomb3(void) { +void king_bobomb_act_3(void) { if (o->oSubAction == 0) { o->oForwardVel = 0; o->oKingBobombUnk104 = 0; o->oKingBobombUnkFC = 0; if (o->oTimer == 0) - PlaySound2(SOUND_OBJ_UNKNOWN3); - if (func_802A4AB0(0)) { + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN3); + if (cur_obj_init_animation_and_check_if_near_end(0)) { o->oSubAction++; - func_802A4A70(1, 0); + cur_obj_init_animation_and_anim_frame(1, 0); } } else { if (o->oSubAction == 1) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); o->oKingBobombUnkFC += player_performed_grab_escape_action(); print_debug_bottom_up("%d", o->oKingBobombUnkFC); if (o->oKingBobombUnkFC > 10) { @@ -88,18 +104,18 @@ void ActionKingBobomb3(void) { o->oInteractStatus &= ~(INT_STATUS_GRABBED_MARIO); } else { o->oForwardVel = 3.0f; - if (o->oKingBobombUnk104 > 20 && obj_rotate_yaw_toward(0, 0x400)) { + if (o->oKingBobombUnk104 > 20 && cur_obj_rotate_yaw_toward(0, 0x400)) { o->oSubAction++; - func_802A4A70(9, 22); + cur_obj_init_animation_and_anim_frame(9, 22); } } o->oKingBobombUnk104++; } else { - set_obj_animation_and_sound_state(9); - if (obj_check_anim_frame(31)) { + cur_obj_init_animation_with_sound(9); + if (cur_obj_check_anim_frame(31)) { o->oKingBobombUnk88 = 2; - PlaySound2(SOUND_OBJ_UNKNOWN4); - } else if (func_8029F788()) { + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN4); + } else if (cur_obj_check_if_near_animation_end()) { o->oAction = 1; o->oInteractStatus &= ~(INT_STATUS_GRABBED_MARIO); } @@ -107,31 +123,31 @@ void ActionKingBobomb3(void) { } } -void ActionKingBobomb1(void) { +void king_bobomb_act_1(void) { o->oForwardVel = 0; o->oVelY = 0; - set_obj_animation_and_sound_state(11); + cur_obj_init_animation_with_sound(11); o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 512); if (o->oDistanceToMario < 2500.0f) o->oAction = 2; - if (func_802A6AF8(1200.0f)) { + if (mario_is_far_below_object(1200.0f)) { o->oAction = 0; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } } -void ActionKingBobomb6(void) { +void king_bobomb_act_6(void) { if (o->oSubAction == 0) { if (o->oTimer == 0) { o->oKingBobombUnk104 = 0; - PlaySound2(SOUND_OBJ_KING_BOBOMB); - PlaySound2(SOUND_OBJ2_KING_BOBOMB_DAMAGE); - ShakeScreen(SHAKE_POS_SMALL); - func_802AA618(0, 0, 100.0f); + cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); + cur_obj_play_sound_2(SOUND_OBJ2_KING_BOBOMB_DAMAGE); + cur_obj_shake_screen(SHAKE_POS_SMALL); + spawn_mist_particles_variable(0, 0, 100.0f); o->oInteractType = 8; - obj_become_tangible(); + cur_obj_become_tangible(); } - if (func_802A4AB0(2)) + if (cur_obj_init_animation_and_check_if_near_end(2)) o->oKingBobombUnk104++; if (o->oKingBobombUnk104 > 3) { o->oSubAction++; @@ -139,50 +155,50 @@ void ActionKingBobomb6(void) { } } else { if (o->oSubAction == 1) { - if (func_802A4AB0(10)) { + if (cur_obj_init_animation_and_check_if_near_end(10)) { o->oSubAction++; o->oInteractType = 2; - obj_become_intangible(); + cur_obj_become_intangible(); } } else { - set_obj_animation_and_sound_state(11); - if (obj_rotate_yaw_toward(o->oAngleToMario, 0x800) == 1) + cur_obj_init_animation_with_sound(11); + if (cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x800) == 1) o->oAction = 2; } } } -void ActionKingBobomb7(void) { - set_obj_animation_and_sound_state(2); - if (obj_update_dialog_with_cutscene(2, 2, CUTSCENE_DIALOG, DIALOG_116)) { +void king_bobomb_act_7(void) { + cur_obj_init_animation_with_sound(2); + if (cur_obj_update_dialog_with_cutscene(2, 2, CUTSCENE_DIALOG, DIALOG_116)) { create_sound_spawner(SOUND_OBJ_KING_WHOMP_DEATH); - obj_hide(); - obj_become_intangible(); - func_802AA618(0, 0, 200.0f); + cur_obj_hide(); + cur_obj_become_intangible(); + spawn_mist_particles_variable(0, 0, 200.0f); spawn_triangle_break_particles(20, 138, 3.0f, 4); - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_shake_screen(SHAKE_POS_SMALL); #ifndef VERSION_JP - obj_spawn_star_at_y_offset(2000.0f, 4500.0f, -4500.0f, 200.0f); + cur_obj_spawn_star_at_y_offset(2000.0f, 4500.0f, -4500.0f, 200.0f); #else o->oPosY += 100.0f; - create_star(2000.0f, 4500.0f, -4500.0f); + spawn_default_star(2000.0f, 4500.0f, -4500.0f); #endif o->oAction = 8; } } -void ActionKingBobomb8(void) { +void king_bobomb_act_8(void) { if (o->oTimer == 60) stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } -void ActionKingBobomb4() { // bobomb been thrown +void king_bobomb_act_4() { // bobomb been thrown if (o->oPosY - o->oHomeY > -100.0f) { // not thrown off hill if (o->oMoveFlags & 1) { o->oHealth--; o->oForwardVel = 0; o->oVelY = 0; - PlaySound2(SOUND_OBJ_KING_BOBOMB); + cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); if (o->oHealth) o->oAction = 6; else @@ -195,66 +211,66 @@ void ActionKingBobomb4() { // bobomb been thrown o->oVelY = 0; o->oSubAction++; } else if (o->oMoveFlags & 1) - PlaySound2(SOUND_OBJ_KING_BOBOMB); + cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); } else { - if (func_802A4AB0(10)) + if (cur_obj_init_animation_and_check_if_near_end(10)) o->oAction = 5; // Go back to top of hill o->oSubAction++; } } } -void ActionKingBobomb5() { // bobomb returns home +void king_bobomb_act_5() { // bobomb returns home switch (o->oSubAction) { case 0: if (o->oTimer == 0) - PlaySound2(SOUND_OBJ_KING_BOBOMB_JUMP); + cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB_JUMP); o->oKingBobombUnkF8 = 1; - func_802A4AEC(8); - o->oMoveAngleYaw = obj_angle_to_home(); + cur_obj_init_animation_and_extend_if_at_end(8); + o->oMoveAngleYaw = cur_obj_angle_to_home(); if (o->oPosY < o->oHomeY) o->oVelY = 100.0f; else { - func_802B2894(&o->oHomeX, &o->oPosX, 100.0f, -4.0f); + arc_to_goal_pos(&o->oHomeX, &o->oPosX, 100.0f, -4.0f); o->oSubAction++; } break; case 1: - func_802A4AEC(8); + cur_obj_init_animation_and_extend_if_at_end(8); if (o->oVelY < 0 && o->oPosY < o->oHomeY) { o->oPosY = o->oHomeY; o->oVelY = 0; o->oForwardVel = 0; o->oGravity = -4.0f; o->oKingBobombUnkF8 = 0; - set_obj_animation_and_sound_state(7); - PlaySound2(SOUND_OBJ_KING_BOBOMB); - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_init_animation_with_sound(7); + cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); + cur_obj_shake_screen(SHAKE_POS_SMALL); o->oSubAction++; } break; case 2: - if (func_802A4AB0(7)) + if (cur_obj_init_animation_and_check_if_near_end(7)) o->oSubAction++; break; case 3: - if (func_802A6AF8(1200.0f)) { + if (mario_is_far_below_object(1200.0f)) { o->oAction = 0; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } - if (obj_is_mario_in_range_and_ready_to_speak(500.0f, 100.0f)) + if (cur_obj_can_mario_activate_textbox_2(500.0f, 100.0f)) o->oSubAction++; break; case 4: - if (obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_128)) + if (cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_128)) o->oAction = 2; break; } } void (*sKingBobombActions[])(void) = { - ActionKingBobomb0, ActionKingBobomb1, ActionKingBobomb2, ActionKingBobomb3, ActionKingBobomb4, - ActionKingBobomb5, ActionKingBobomb6, ActionKingBobomb7, ActionKingBobomb8, + king_bobomb_act_0, king_bobomb_act_1, king_bobomb_act_2, king_bobomb_act_3, king_bobomb_act_4, + king_bobomb_act_5, king_bobomb_act_6, king_bobomb_act_7, king_bobomb_act_8, }; struct SoundState sKingBobombSoundStates[] = { { 0, 0, 0, NO_SOUND }, @@ -271,18 +287,18 @@ struct SoundState sKingBobombSoundStates[] = { { 1, 1, 15, SOUND_OBJ_POUNDING1_HIGHPRIO }, }; -void func_802A7748(void) { - obj_update_floor_and_walls(); +void king_bobomb_move(void) { + cur_obj_update_floor_and_walls(); if (o->oKingBobombUnkF8 == 0) - obj_move_standard(-78); + cur_obj_move_standard(-78); else - obj_move_using_fvel_and_gravity(); - obj_call_action_function(sKingBobombActions); + cur_obj_move_using_fvel_and_gravity(); + cur_obj_call_action_function(sKingBobombActions); exec_anim_sound_state(sKingBobombSoundStates); if (o->oDistanceToMario < 5000.0f) - obj_enable_rendering(); + cur_obj_enable_rendering(); else - obj_disable_rendering(); + cur_obj_disable_rendering(); } void bhv_king_bobomb_loop(void) { @@ -292,15 +308,15 @@ void bhv_king_bobomb_loop(void) { o->oInteractionSubtype |= INT_SUBTYPE_GRABS_MARIO; switch (o->oHeldState) { case HELD_FREE: - func_802A7748(); + king_bobomb_move(); break; case HELD_HELD: - func_8029FA5C(6, 1); + cur_obj_unrender_and_reset_state(6, 1); break; case HELD_THROWN: case HELD_DROPPED: - obj_get_thrown_or_placed(sp34, sp30, 4); - obj_become_intangible(); + cur_obj_get_thrown_or_placed(sp34, sp30, 4); + cur_obj_become_intangible(); o->oPosY += 20.0f; break; } diff --git a/src/game/behaviors/klepto.inc.c b/src/game/behaviors/klepto.inc.c index 94dfdab..39b105f 100644 --- a/src/game/behaviors/klepto.inc.c +++ b/src/game/behaviors/klepto.inc.c @@ -30,12 +30,12 @@ static s32 func_8030F158(void) { func_802F932C(5); } else if (o->oSoundStateID == 5) { if (func_802F932C(0)) { - PlaySound2(SOUND_GENERAL_SWISH_WATER); + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_WATER); o->header.gfx.unk38.animFrame = 9; } } else { - if (obj_check_anim_frame(9)) { - PlaySound2(SOUND_GENERAL_SWISH_WATER); + if (cur_obj_check_anim_frame(9)) { + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_WATER); } return TRUE; } @@ -49,9 +49,9 @@ static void func_8030F218(void) { o->oKleptoUnk1AE = 0; } else { if (o->oSoundStateID == 0) { - if (obj_check_anim_frame(9)) { - PlaySound2(SOUND_GENERAL_SWISH_WATER); - set_obj_animation_and_sound_state(6); + if (cur_obj_check_anim_frame(9)) { + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_WATER); + cur_obj_init_animation_with_sound(6); } } else if (--o->oKleptoUnk1AE == 0) { o->oKleptoUnk1AE = -random_linear_offset(60, 60); @@ -121,7 +121,7 @@ static void klepto_change_target(void) { o->oHomeY = sKleptoTargetPositions[o->oKleptoTargetNumber][1] + o->oKleptoUnkF8; o->oHomeZ = sKleptoTargetPositions[o->oKleptoTargetNumber][2]; - o->oKleptoUnkFC = obj_lateral_dist_to_home() / 2; + o->oKleptoUnkFC = cur_obj_lateral_dist_to_home() / 2; } static void klepto_circle_target(f32 radius, f32 targetSpeed) { @@ -190,14 +190,14 @@ static void klepto_act_wait_for_mario(void) { static void klepto_act_turn_toward_mario(void) { klepto_target_mario(); - if (func_8030F158() && func_8029F828() && o->oKleptoDistanceToTarget > 800.0f + if (func_8030F158() && cur_obj_check_if_at_animation_end() && o->oKleptoDistanceToTarget > 800.0f && abs_angle_diff(o->oAngleToMario, o->oFaceAngleYaw) < 0x800 && o->oKleptoUnk1B0 < 0x400) { - PlaySound2(SOUND_OBJ_KLEPTO1); + cur_obj_play_sound_2(SOUND_OBJ_KLEPTO1); o->oAction = KLEPTO_ACT_DIVE_AT_MARIO; o->oMoveAngleYaw = o->oFaceAngleYaw; o->oFlags |= 0x00000008; - set_obj_animation_and_sound_state(3); + cur_obj_init_animation_with_sound(3); } klepto_circle_target(1000.0f, 40.0f); @@ -207,8 +207,8 @@ static void klepto_act_turn_toward_mario(void) { static void klepto_act_dive_at_mario(void) { approach_f32_ptr(&o->oKleptoSpeed, 60.0f, 10.0f); if (o->oSoundStateID == 2) { - if (obj_check_anim_frame(11)) { - PlaySound2(SOUND_GENERAL_SWISH_WATER); + if (cur_obj_check_anim_frame(11)) { + cur_obj_play_sound_2(SOUND_GENERAL_SWISH_WATER); } if (func_802F932C(0)) { @@ -224,7 +224,7 @@ static void klepto_act_dive_at_mario(void) { if (o->oSoundStateID == 3) { func_802F932C(4); } else if (o->oVelY > 0.0f && dy > 200.0f) { - set_obj_animation_and_sound_state(2); + cur_obj_init_animation_with_sound(2); } o->oKleptoUnk1B0 = -0x3000; @@ -254,13 +254,13 @@ static void klepto_act_dive_at_mario(void) { } static void klepto_act_struck_by_mario(void) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); obj_face_pitch_approach(0, 800); obj_face_yaw_approach(o->oMoveAngleYaw + 0x8000, 800); obj_face_roll_approach(0, 800); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = KLEPTO_ACT_RETREAT; o->oGravity = 0.0f; @@ -274,7 +274,7 @@ static void klepto_act_struck_by_mario(void) { } static void klepto_act_retreat(void) { - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); approach_f32_ptr(&o->oKleptoSpeed, 40.0f, 10.0f); obj_move_pitch_approach(o->oKleptoUnk1B0, 1000); @@ -288,7 +288,7 @@ static void klepto_act_retreat(void) { o->oHomeY = 1500.0f; o->oKleptoUnk1AE = -100; o->oFlags |= 0x00000008; - obj_become_tangible(); + cur_obj_become_tangible(); } } } @@ -302,7 +302,7 @@ static void klepto_act_reset_position(void) { o->oHomeY = o->oKleptoDistanceToTarget = 9999.0f; if (o->oPosY > 5000.0f) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { klepto_approach_target(20.0f); } @@ -321,11 +321,11 @@ void obj_set_speed_to_zero(void) { void bhv_klepto_update(void) { UNUSED s32 unused; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); - o->oKleptoDistanceToTarget = obj_lateral_dist_to_home(); + o->oKleptoDistanceToTarget = cur_obj_lateral_dist_to_home(); o->oKleptoUnk1B0 = obj_get_pitch_to_home(o->oKleptoDistanceToTarget); - o->oKleptoYawToTarget = obj_angle_to_home(); + o->oKleptoYawToTarget = cur_obj_angle_to_home(); if (o->oAction == KLEPTO_ACT_STRUCK_BY_MARIO) { klepto_act_struck_by_mario(); @@ -357,13 +357,13 @@ void bhv_klepto_update(void) { } if (obj_handle_attacks(&sKleptoHitbox, o->oAction, sKleptoAttackHandlers)) { - PlaySound2(SOUND_OBJ_KLEPTO2); + cur_obj_play_sound_2(SOUND_OBJ_KLEPTO2); if (o->oAnimState == KLEPTO_ANIM_STATE_HOLDING_CAP) { save_file_clear_flags(SAVE_FLAG_CAP_ON_KLEPTO); spawn_object(o, MODEL_MARIOS_CAP, bhvNormalCap); } else if (o->oAnimState == KLEPTO_ANIM_STATE_HOLDING_STAR) { - create_star(-5550.0f, 300.0f, -930.0f); + spawn_default_star(-5550.0f, 300.0f, -930.0f); } o->oAnimState = KLEPTO_ANIM_STATE_HOLDING_NOTHING; @@ -372,16 +372,16 @@ void bhv_klepto_update(void) { o->oMoveAngleYaw = o->oAngleToMario + 0x8000; o->oFlags &= ~0x00000008; - obj_become_intangible(); + cur_obj_become_intangible(); } else if (gMarioStates[0].action == ACT_SLEEPING || (gMarioStates[0].action & (ACT_FLAG_SHORT_HITBOX | ACT_FLAG_BUTT_OR_STOMACH_SLIDE))) { - obj_become_intangible(); + cur_obj_become_intangible(); } else { - obj_become_tangible(); + cur_obj_become_tangible(); } } obj_roll_to_match_yaw_turn(o->oKleptoYawToTarget, 0x3000, 600); - obj_move_standard(78); + cur_obj_move_standard(78); } diff --git a/src/game/behaviors/koopa.inc.c b/src/game/behaviors/koopa.inc.c index 30a92f0..2786ac3 100644 --- a/src/game/behaviors/koopa.inc.c +++ b/src/game/behaviors/koopa.inc.c @@ -74,13 +74,13 @@ void bhv_koopa_init(void) { o->oKoopaMovementType = KOOPA_BP_NORMAL; o->oKoopaAgility = 1.6f / 3.0f; o->oDrawingDistance = 1500.0f; - obj_scale(0.8f); + cur_obj_scale(0.8f); o->oGravity = -6.4f / 3.0f; } else if (o->oKoopaMovementType >= KOOPA_BP_KOOPA_THE_QUICK_BASE) { // Koopa the Quick. Race index is 0 for BoB and 1 for THI o->oKoopaTheQuickRaceIndex = o->oKoopaMovementType - KOOPA_BP_KOOPA_THE_QUICK_BASE; o->oKoopaAgility = 4.0f; - obj_scale(3.0f); + cur_obj_scale(3.0f); } else { o->oKoopaAgility = 1.0f; } @@ -142,12 +142,12 @@ static void koopa_walk_start(void) { * Walk until oKoopaCountdown hits zero, then increment sub-action. */ static void koopa_walk(void) { - set_obj_animation_and_sound_state(9); + cur_obj_init_animation_with_sound(9); koopa_play_footstep_sound(2, 17); if (o->oKoopaCountdown != 0) { o->oKoopaCountdown -= 1; - } else if (func_8029F788()) { + } else if (cur_obj_check_if_near_animation_end()) { o->oSubAction += 1; } } @@ -176,7 +176,7 @@ static void koopa_shelled_act_walk(void) { } o->oKoopaTurningAwayFromWall = obj_bounce_off_walls_edges_objects(&o->oKoopaTargetYaw); - obj_rotate_yaw_toward(o->oKoopaTargetYaw, 0x200); + cur_obj_rotate_yaw_toward(o->oKoopaTargetYaw, 0x200); } switch (o->oSubAction) { @@ -199,7 +199,7 @@ static void koopa_shelled_act_walk(void) { * away. */ static void koopa_shelled_act_run_from_mario(void) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); koopa_play_footstep_sound(0, 11); // If far from home, run toward it @@ -213,7 +213,7 @@ static void koopa_shelled_act_run_from_mario(void) { o->oAction = KOOPA_SHELLED_ACT_STOPPED; } } else { - obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x400); + cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x400); obj_forward_vel_approach(17.0f, 1.0f); } } @@ -238,14 +238,14 @@ static void koopa_dive_update_speed(f32 decel) { static void koopa_shelled_act_lying(void) { if (o->oForwardVel != 0.0f) { if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); } func_802F927C(5); koopa_dive_update_speed(0.3f); } else if (o->oKoopaCountdown != 0) { o->oKoopaCountdown -= 1; - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } else if (func_802F92B0(6)) { o->oAction = KOOPA_SHELLED_ACT_STOPPED; } @@ -257,7 +257,7 @@ static void koopa_shelled_act_lying(void) { */ void shelled_koopa_attack_handler(s32 attackType) { if (o->header.gfx.scale[0] > 0.8f) { - PlaySound2(SOUND_OBJ_KOOPA_DAMAGE); + cur_obj_play_sound_2(SOUND_OBJ_KOOPA_DAMAGE); o->oKoopaMovementType = KOOPA_BP_UNSHELLED; o->oAction = KOOPA_UNSHELLED_ACT_LYING; @@ -265,16 +265,16 @@ void shelled_koopa_attack_handler(s32 attackType) { // If attacked from the side, get knocked away from mario if (attackType != ATTACK_FROM_ABOVE && attackType != ATTACK_GROUND_POUND_OR_TWIRL) { - o->oMoveAngleYaw = angle_to_object(gMarioObject, o); + o->oMoveAngleYaw = obj_angle_to_object(gMarioObject, o); } - obj_set_model(MODEL_KOOPA_WITHOUT_SHELL); + cur_obj_set_model(MODEL_KOOPA_WITHOUT_SHELL); spawn_object(o, MODEL_KOOPA_SHELL, bhvKoopaShell); //! Because bob-ombs/corkboxes come after koopa in processing order, // they can interact with the koopa on the same frame that this // happens. This causes the koopa to die immediately. - obj_become_intangible(); + cur_obj_become_intangible(); } else { // Die if tiny koopa obj_die_if_health_non_positive(); @@ -285,7 +285,7 @@ void shelled_koopa_attack_handler(s32 attackType) { * Update function for both regular and tiny shelled koopa. */ static void koopa_shelled_update(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); obj_update_blinking(&o->oKoopaBlinkTimer, 20, 50, 4); switch (o->oAction) { @@ -317,7 +317,7 @@ static void koopa_shelled_update(void) { } } - obj_move_standard(-78); + cur_obj_move_standard(-78); } /** @@ -330,7 +330,7 @@ static void koopa_unshelled_act_run(void) { f32 distToShell = 99999.0f; struct Object *shell; - set_obj_animation_and_sound_state(3); + cur_obj_init_animation_with_sound(3); koopa_play_footstep_sound(0, 6); if (o->oKoopaTurningAwayFromWall) { @@ -342,10 +342,10 @@ static void koopa_unshelled_act_run(void) { } // If shell exists, then turn toward shell - shell = obj_find_nearest_object_with_behavior(bhvKoopaShell, &distToShell); + shell = cur_obj_find_nearest_object_with_behavior(bhvKoopaShell, &distToShell); if (shell != NULL) { //! This overrides turning toward home - o->oKoopaTargetYaw = angle_to_object(o, shell); + o->oKoopaTargetYaw = obj_angle_to_object(o, shell); } else if (!(o->oKoopaTurningAwayFromWall = obj_bounce_off_walls_edges_objects(&o->oKoopaTargetYaw))) { // Otherwise run around randomly @@ -362,10 +362,10 @@ static void koopa_unshelled_act_run(void) { || (shell != NULL && abs_angle_diff(o->oKoopaTargetYaw, o->oAngleToMario + 0x8000) < 0x2000)) { // then turn toward the shell - obj_rotate_yaw_toward(o->oKoopaTargetYaw, 0x600); + cur_obj_rotate_yaw_toward(o->oKoopaTargetYaw, 0x600); } else { // otherwise continue running from mario - obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x600); + cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x600); } } @@ -389,11 +389,11 @@ static void koopa_unshelled_act_dive(void) { f32 distToShell; if (o->oTimer > 10) { - obj_become_tangible(); + cur_obj_become_tangible(); } if (o->oTimer > 10) { - shell = obj_find_nearest_object_with_behavior(bhvKoopaShell, &distToShell); + shell = cur_obj_find_nearest_object_with_behavior(bhvKoopaShell, &distToShell); // If we got the shell and mario didn't, put on the shell //! The shell comes after koopa in processing order, and the shell is @@ -409,8 +409,8 @@ static void koopa_unshelled_act_dive(void) { o->oAction = KOOPA_SHELLED_ACT_LYING; o->oForwardVel *= 0.5f; - obj_set_model(MODEL_KOOPA_WITH_SHELL); - mark_object_for_deletion(shell); + cur_obj_set_model(MODEL_KOOPA_WITH_SHELL); + obj_mark_for_deletion(shell); goto end; } } @@ -425,7 +425,7 @@ static void koopa_unshelled_act_dive(void) { koopa_dive_update_speed(0.5f); } else if (o->oKoopaCountdown != 0) { o->oKoopaCountdown -= 1; - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } else if (func_802F92B0(6)) { o->oAction = KOOPA_UNSHELLED_ACT_RUN; } @@ -444,7 +444,7 @@ static void koopa_unshelled_act_unused3(void) { * Update function for koopa after losing his shell. */ static void koopa_unshelled_update(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); obj_update_blinking(&o->oKoopaBlinkTimer, 10, 15, 3); switch (o->oAction) { @@ -461,7 +461,7 @@ static void koopa_unshelled_update(void) { } obj_handle_attacks(&sKoopaHitbox, o->oAction, sKoopaUnshelledAttackHandlers); - obj_move_standard(-78); + cur_obj_move_standard(-78); } /** @@ -470,7 +470,7 @@ static void koopa_unshelled_update(void) { */ s32 obj_begin_race(s32 noTimer) { if (o->oTimer == 50) { - PlaySound2(SOUND_GENERAL_RACE_GUN_SHOT); + cur_obj_play_sound_2(SOUND_GENERAL_RACE_GUN_SHOT); if (!noTimer) { play_music(0, SEQUENCE_ARGS(4, SEQ_LEVEL_SLIDE), 0); @@ -499,14 +499,14 @@ static void koopa_the_quick_act_wait_before_race(void) { if (o->oKoopaTheQuickInitTextboxCooldown != 0) { o->oKoopaTheQuickInitTextboxCooldown -= 1; - } else if (obj_is_mario_in_range_and_ready_to_speak(400.0f, 400.0f)) { + } else if (cur_obj_can_mario_activate_textbox_2(400.0f, 400.0f)) { //! The next action doesn't execute until next frame, giving mario one // frame where he can jump, and thus no longer be ready to speak. // (On J, he has two frames and doing this enables time stop - see - // obj_update_dialog_with_cutscene for that glitch) + // cur_obj_update_dialog_with_cutscene for that glitch) o->oAction = KOOPA_THE_QUICK_ACT_SHOW_INIT_TEXT; o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(7); + cur_obj_init_animation_with_sound(7); } } @@ -524,7 +524,7 @@ static void koopa_the_quick_act_show_init_text(void) { o->oAction = KOOPA_THE_QUICK_ACT_RACE; o->oForwardVel = 0.0f; - o->parentObj = obj_nearest_object_with_behavior(bhvKoopaRaceEndpoint); + o->parentObj = cur_obj_nearest_object_with_behavior(bhvKoopaRaceEndpoint); o->oPathedStartWaypoint = o->oPathedPrevWaypoint = segmented_to_virtual(sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].path); @@ -547,7 +547,7 @@ static s32 koopa_the_quick_detect_bowling_ball(void) { s16 angleToBall; f32 ballSpeedInKoopaRunDir; - ball = obj_find_nearest_object_with_behavior(bhvBowlingBall, &distToBall); + ball = cur_obj_find_nearest_object_with_behavior(bhvBowlingBall, &distToBall); if (ball != NULL) { angleToBall = obj_turn_toward_object(o, ball, O_MOVE_ANGLE_YAW_INDEX, 0); ballSpeedInKoopaRunDir = ball->oForwardVel * coss(ball->oMoveAngleYaw - o->oMoveAngleYaw); @@ -584,7 +584,7 @@ static s32 koopa_the_quick_detect_bowling_ball(void) { static void koopa_the_quick_animate_footsteps(void) { //! With high negative speed (using the bowling ball deceleration), we can // index out of the animation's bounds - func_8029ED98(9, o->oForwardVel * 0.09f); + cur_obj_init_animation_with_accel_and_sound(9, o->oForwardVel * 0.09f); koopa_play_footstep_sound(2, 17); } @@ -598,13 +598,13 @@ static void koopa_the_quick_act_race(void) { if (obj_begin_race(FALSE)) { // Hitbox is slightly larger while racing - obj_push_mario_away_from_cylinder(180.0f, 300.0f); + cur_obj_push_mario_away_from_cylinder(180.0f, 300.0f); - if (obj_follow_path(0) == PATH_REACHED_END) { + if (cur_obj_follow_path(0) == PATH_REACHED_END) { o->oAction = KOOPA_THE_QUICK_ACT_DECELERATE; } else { downhillSteepness = 1.0f + sins((s16)(f32) o->oPathedTargetPitch); - obj_rotate_yaw_toward(o->oPathedTargetYaw, (s32)(o->oKoopaAgility * 150.0f)); + cur_obj_rotate_yaw_toward(o->oPathedTargetYaw, (s32)(o->oKoopaAgility * 150.0f)); switch (o->oSubAction) { case KOOPA_THE_QUICK_SUB_ACT_START_RUN: @@ -654,7 +654,7 @@ static void koopa_the_quick_act_race(void) { o->oSubAction = 2; o->oMoveFlags = 0; - set_obj_animation_and_sound_state(12); + cur_obj_init_animation_with_sound(12); } break; @@ -678,9 +678,9 @@ static void koopa_the_quick_act_race(void) { */ static void koopa_the_quick_act_decelerate(void) { obj_forward_vel_approach(3.0f, 1.0f); - func_8029ED98(9, 0.99f); + cur_obj_init_animation_with_accel_and_sound(9, 0.99f); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = KOOPA_THE_QUICK_ACT_STOP; o->oForwardVel = 3.0f; } @@ -705,10 +705,10 @@ static void koopa_the_quick_act_stop(void) { * the star. */ static void koopa_the_quick_act_after_race(void) { - set_obj_animation_and_sound_state(7); + cur_obj_init_animation_with_sound(7); if (o->parentObj->oKoopaRaceEndpointUnk100 == 0) { - if (obj_is_mario_in_range_and_ready_to_speak(400.0f, 400.0f)) { + if (cur_obj_can_mario_activate_textbox_2(400.0f, 400.0f)) { stop_background_music(SEQUENCE_ARGS(4, SEQ_LEVEL_SLIDE)); // Determine which text to display @@ -731,13 +731,13 @@ static void koopa_the_quick_act_after_race(void) { o->oFlags &= ~OBJ_FLAG_ACTIVE_FROM_AFAR; } } else if (o->parentObj->oKoopaRaceEndpointUnk100 > 0) { - s32 dialogResponse = obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, o->parentObj->oKoopaRaceEndpointUnk100); + s32 dialogResponse = cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, o->parentObj->oKoopaRaceEndpointUnk100); if (dialogResponse != 0) { o->parentObj->oKoopaRaceEndpointUnk100 = -1; o->oTimer = 0; } } else if (o->parentObj->oKoopaRaceEndpointRaceStatus != 0) { - create_star(sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].starPos[0], + spawn_default_star(sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].starPos[0], sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].starPos[1], sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].starPos[2]); @@ -749,7 +749,7 @@ static void koopa_the_quick_act_after_race(void) { * Update function for koopa the quick. */ static void koopa_the_quick_update(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); obj_update_blinking(&o->oKoopaBlinkTimer, 10, 15, 3); switch (o->oAction) { @@ -780,8 +780,8 @@ static void koopa_the_quick_update(void) { } } - obj_push_mario_away_from_cylinder(140.0f, 300.0f); - obj_move_standard(-78); + cur_obj_push_mario_away_from_cylinder(140.0f, 300.0f); + cur_obj_move_standard(-78); } /** diff --git a/src/game/behaviors/koopa_shell.inc.c b/src/game/behaviors/koopa_shell.inc.c index 2830a5f..62526db 100644 --- a/src/game/behaviors/koopa_shell.inc.c +++ b/src/game/behaviors/koopa_shell.inc.c @@ -12,14 +12,14 @@ struct ObjectHitbox sKoopaShellHitbox = { /* hurtboxHeight: */ 50, }; -void func_802BCA8C(void) { +void koopa_shell_spawn_water_drop(void) { UNUSED s32 unused; struct Object *drop; - spawn_object(o, MODEL_WATER_WAVES, bhvWaterType); + spawn_object(o, MODEL_WAVE_TRAIL, bhvObjectWaveTrail); if (gMarioStates->forwardVel > 10.0f) { - drop = spawn_object_with_scale(o, MODEL_WHITE_PARTICLE_SMALL, bhvWaterDrops, 1.5f); + drop = spawn_object_with_scale(o, MODEL_WHITE_PARTICLE_SMALL, bhvWaterDroplet, 1.5f); drop->oVelY = RandomFloat() * 30.0f; - translate_object_xz_random(drop, 110.0f); + obj_translate_xz_random(drop, 110.0f); } } @@ -29,15 +29,15 @@ void bhv_koopa_shell_flame_loop(void) { o->oVelY = RandomFloat() * 30.0f; o->oGravity = -4.0f; o->oAnimState = RandomFloat() * 10.0f; - translate_object_xz_random(o, 110.0f); + obj_translate_xz_random(o, 110.0f); o->oKoopaShellFlameUnkF8 = 4.0f; } - obj_update_floor_height(); - obj_move_using_fvel_and_gravity(); + cur_obj_update_floor_height(); + cur_obj_move_using_fvel_and_gravity(); if (o->oFloorHeight > o->oPosY || o->oTimer > 10) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); o->oKoopaShellFlameUnkF8 += -0.3; - obj_scale(o->oKoopaShellFlameUnkF8); + cur_obj_scale(o->oKoopaShellFlameUnkF8); } void bhv_koopa_shell_flame_spawn(void) { @@ -46,41 +46,41 @@ void bhv_koopa_shell_flame_spawn(void) { spawn_object(o, MODEL_RED_FLAME, bhvKoopaShellFlame); } -void func_802BCCD4(f32 a) { +void koopa_shell_spawn_sparkles(f32 a) { struct Object *sp1C = spawn_object(o, MODEL_NONE, bhvSparkleSpawn); sp1C->oPosY += a; } void bhv_koopa_shell_loop(void) { struct Surface *sp34; - set_object_hitbox(o, &sKoopaShellHitbox); - obj_scale(1.0f); + obj_set_hitbox(o, &sKoopaShellHitbox); + cur_obj_scale(1.0f); switch (o->oAction) { case 0: - obj_update_floor_and_walls(); - obj_if_hit_wall_bounce_away(); + cur_obj_update_floor_and_walls(); + cur_obj_if_hit_wall_bounce_away(); if (o->oInteractStatus & INT_STATUS_INTERACTED) o->oAction++; o->oFaceAngleYaw += 0x1000; - obj_move_standard(-20); - func_802BCCD4(10.0f); + cur_obj_move_standard(-20); + koopa_shell_spawn_sparkles(10.0f); break; case 1: - copy_object_pos(o, gMarioObject); - sp34 = obj_update_floor_height_and_get_floor(); + obj_copy_pos(o, gMarioObject); + sp34 = cur_obj_update_floor_height_and_get_floor(); if (absf(find_water_level(o->oPosX, o->oPosZ) - o->oPosY) < 10.0f) - func_802BCA8C(); + koopa_shell_spawn_water_drop(); else if (5.0f > absf(o->oPosY - o->oFloorHeight)) { if (sp34 != NULL && sp34->type == 1) bhv_koopa_shell_flame_spawn(); else - func_802BCCD4(10.0f); + koopa_shell_spawn_sparkles(10.0f); } else - func_802BCCD4(10.0f); + koopa_shell_spawn_sparkles(10.0f); o->oFaceAngleYaw = gMarioObject->oMoveAngleYaw; if (o->oInteractStatus & INT_STATUS_STOP_RIDING) { - mark_object_for_deletion(o); - func_802A3004(); + obj_mark_for_deletion(o); + spawn_mist_particles(); o->oAction = 0; } break; diff --git a/src/game/behaviors/koopa_shell_underwater.inc.c b/src/game/behaviors/koopa_shell_underwater.inc.c index 3024823..ff0eef7 100644 --- a/src/game/behaviors/koopa_shell_underwater.inc.c +++ b/src/game/behaviors/koopa_shell_underwater.inc.c @@ -12,27 +12,27 @@ struct ObjectHitbox sKoopaShellUnderwaterHitbox = { /* hurtboxHeight: */ 0, }; -void func_802AA0D4(void) { - set_object_hitbox(o, &sKoopaShellUnderwaterHitbox); +void set_koopa_shell_underwater_hitbox(void) { + obj_set_hitbox(o, &sKoopaShellUnderwaterHitbox); } void bhv_koopa_shell_underwater_loop(void) { switch (o->oHeldState) { case HELD_FREE: - func_802AA0D4(); + set_koopa_shell_underwater_hitbox(); break; case HELD_HELD: - func_8029FA5C(-1, 0); + cur_obj_unrender_and_reset_state(-1, 0); break; case HELD_THROWN: case HELD_DROPPED: - mark_object_for_deletion(o); - func_802A3004(); + obj_mark_for_deletion(o); + spawn_mist_particles(); break; } if (o->oInteractStatus & INT_STATUS_STOP_RIDING) { - mark_object_for_deletion(o); - func_802A3004(); + obj_mark_for_deletion(o); + spawn_mist_particles(); } o->oInteractStatus = 0; } diff --git a/src/game/behaviors/lll_floating_wood_piece.inc.c b/src/game/behaviors/lll_floating_wood_piece.inc.c index 9a8ff3c..a484471 100644 --- a/src/game/behaviors/lll_floating_wood_piece.inc.c +++ b/src/game/behaviors/lll_floating_wood_piece.inc.c @@ -6,7 +6,7 @@ void bhv_lll_wood_piece_loop(void) { o->oPosY += sins(o->oLllWoodPieceUnkF4) * 3.0f; o->oLllWoodPieceUnkF4 += 0x400; if (o->parentObj->oAction == 2) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_lll_floating_wood_bridge_loop(void) { diff --git a/src/game/behaviors/lll_hexagonal_ring.inc.c b/src/game/behaviors/lll_hexagonal_ring.inc.c index 53e60dd..7c75f04 100644 --- a/src/game/behaviors/lll_hexagonal_ring.inc.c +++ b/src/game/behaviors/lll_hexagonal_ring.inc.c @@ -1,5 +1,19 @@ // lll_hexagonal_ring.c.inc +void hexagonal_ring_spawn_flames(void) { + struct Object *sp1C; + f32 size; + sp1C = spawn_object(o, MODEL_RED_FLAME, bhvVolcanoFlames); + sp1C->oPosY += 550.0f; + sp1C->oMoveAngleYaw = RandomU16() << 0x10 >> 0x10; + sp1C->oForwardVel = RandomFloat() * 40.0f + 20.0f; + sp1C->oVelY = RandomFloat() * 50.0f + 10.0f; + size = RandomFloat() * 6.0 + 3.0; + obj_scale_xyz(sp1C, size, size, size); + if (RandomFloat() < 0.1) + cur_obj_play_sound_2(SOUND_GENERAL_VOLCANO_EXPLOSION); +} + void bhv_lll_rotating_hexagonal_ring_loop(void) { UNUSED s32 unused; o->oCollisionDistance = 4000.0f; @@ -21,7 +35,7 @@ void bhv_lll_rotating_hexagonal_ring_loop(void) { if (o->oTimer > 128) o->oAction++; o->oAngleVelYaw = 0; - func_802BBFDC(); + hexagonal_ring_spawn_flames(); break; case 3: o->oAngleVelYaw = sins(o->oTimer << 7) * 256.0f; diff --git a/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c b/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c index 82e63f3..7fc4936 100644 --- a/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c +++ b/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c @@ -7,12 +7,12 @@ s16 D_8032F894[] = { 4, 0, 0, 0, 1, 475, 900, 30, 1, 30, 0, -30, 2, s16 *D_8032F8C8[] = { D_8032F860, D_8032F894 }; -s32 func_802BB414(s16 *a0, s32 a1) { +s32 lll_octagonal_mesh_move(s16 *a0, s32 a1) { switch (a0[a1]) { case 4: o->oMoveAngleYaw = a0[a1 + 2]; o->oForwardVel = a0[a1 + 3] / 100.0f; - if (obj_is_mario_on_platform()) { + if (cur_obj_is_mario_on_platform()) { a1 += 4; o->oTimer = 0; } @@ -40,8 +40,8 @@ s32 func_802BB414(s16 *a0, s32 a1) { return a1; } -s32 func_802BB680(s32 *a0, f32 *a1, s32 a2, s32 a3) { - if (obj_is_mario_on_platform()) { +s32 lll_octagonal_mesh_find_y_offset(s32 *a0, f32 *a1, s32 a2, s32 a3) { + if (cur_obj_is_mario_on_platform()) { if (a0[0] < 0x4000) a0[0] += a2; else @@ -65,10 +65,10 @@ void bhv_lll_moving_octagonal_mesh_platform_loop(void) { o->oAction++; } else o->oHorizontalMovementUnkF8 = - func_802BB414(D_8032F8C8[o->oBehParams2ndByte], o->oHorizontalMovementUnkF8); + lll_octagonal_mesh_move(D_8032F8C8[o->oBehParams2ndByte], o->oHorizontalMovementUnkF8); print_debug_top_down_objectinfo("number %d\n", o->oHorizontalMovementUnkF8); - obj_move_using_fvel_and_gravity(); - if (func_802BB680(&o->oHorizontalMovementUnk104, &o->oHorizontalMovementUnk108, 0x400, -80)) { + cur_obj_move_using_fvel_and_gravity(); + if (lll_octagonal_mesh_find_y_offset(&o->oHorizontalMovementUnk104, &o->oHorizontalMovementUnk108, 0x400, -80)) { o->oHorizontalMovementUnkF4 += 0x800; o->oHorizontalMovementUnk100 -= sins(o->oHorizontalMovementUnkF4) * 2; } diff --git a/src/game/behaviors/lll_rotating_hex_flame.inc.c b/src/game/behaviors/lll_rotating_hex_flame.inc.c index 2cc1178..efabfca 100644 --- a/src/game/behaviors/lll_rotating_hex_flame.inc.c +++ b/src/game/behaviors/lll_rotating_hex_flame.inc.c @@ -4,13 +4,13 @@ void bhv_lll_rotating_hex_flame_loop(void) { f32 sp24 = o->oLllRotatingHexFlameUnkF4; f32 sp20 = o->oLllRotatingHexFlameUnkF8; f32 sp1C = o->oLllRotatingHexFlameUnkFC; - obj_set_pos_relative(o->parentObj, sp24, sp20, sp1C); + cur_obj_set_pos_relative(o->parentObj, sp24, sp20, sp1C); o->oPosY = o->parentObj->oPosY + 100.0f; if (o->parentObj->oAction == 3) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void func_802BB9F0(s16 a0) { +void fire_bar_spawn_flames(s16 a0) { struct Object *sp2C; UNUSED s32 unused; s32 i; @@ -23,41 +23,41 @@ void func_802BB9F0(s16 a0) { sp2C->oLllRotatingHexFlameUnkF4 += sp1C; sp2C->oLllRotatingHexFlameUnkF8 = o->oPosY - 200.0f; sp2C->oLllRotatingHexFlameUnkFC += sp18; - scale_object_xyz(sp2C, 6.0f, 6.0f, 6.0f); + obj_scale_xyz(sp2C, 6.0f, 6.0f, 6.0f); sp1C += sins(a0) * 150.0f; sp18 += coss(a0) * 150.0f; } } -void ActionRotatingCwFireBars0(void) { +void fire_bar_act_0(void) { if (o->oDistanceToMario < 3000.0f) o->oAction = 1; } -void ActionRotatingCwFireBars1(void) { - func_802BB9F0(0); - func_802BB9F0(-0x8000); +void fire_bar_act_1(void) { + fire_bar_spawn_flames(0); + fire_bar_spawn_flames(-0x8000); o->oAngleVelYaw = 0; o->oMoveAngleYaw = 0; o->oAction = 2; } -void ActionRotatingCwFireBars2(void) { +void fire_bar_act_2(void) { o->oAngleVelYaw = -0x100; o->oMoveAngleYaw += o->oAngleVelYaw; if (o->oDistanceToMario > 3200.0f) o->oAction = 3; } -void ActionRotatingCwFireBars3(void) { +void fire_bar_act_3(void) { o->oAction = 0; } -void (*sRotatingCwFireBarsActions[])(void) = { ActionRotatingCwFireBars0, ActionRotatingCwFireBars1, - ActionRotatingCwFireBars2, ActionRotatingCwFireBars3 }; +void (*sRotatingCwFireBarsActions[])(void) = { fire_bar_act_0, fire_bar_act_1, + fire_bar_act_2, fire_bar_act_3 }; void bhv_lll_rotating_block_fire_bars_loop(void) { - obj_call_action_function(sRotatingCwFireBarsActions); + cur_obj_call_action_function(sRotatingCwFireBarsActions); if (o->oBehParams2ndByte == 0) load_object_collision_model(); } diff --git a/src/game/behaviors/lll_sinking_rectangle.inc.c b/src/game/behaviors/lll_sinking_rectangle.inc.c index 3f304c5..6391041 100644 --- a/src/game/behaviors/lll_sinking_rectangle.inc.c +++ b/src/game/behaviors/lll_sinking_rectangle.inc.c @@ -1,6 +1,6 @@ // lll_sinking_rectangle.c.inc -void func_802BC390(f32 a0, s32 a1) { +void sinking_rectangular_plat_actions(f32 a0, s32 a1) { switch (o->oAction) { case 0: o->oAction++; @@ -19,7 +19,7 @@ void bhv_lll_sinking_rectangular_platform_loop(void) { f32 sp1C = 0.4f; s32 sp18 = 0x100; if (o->oMoveAngleYaw != 0) - func_802BC390(sp1C, sp18); + sinking_rectangular_plat_actions(sp1C, sp18); else { o->oFaceAnglePitch = sins(o->oLllWoodPieceUnkF4) * 512.0f; o->oLllWoodPieceUnkF4 += 0x100; @@ -29,5 +29,5 @@ void bhv_lll_sinking_rectangular_platform_loop(void) { void bhv_lll_sinking_square_platforms_loop(void) { f32 sp1C = 0.5f; s32 sp18 = 0x100; - func_802BC390(sp1C, sp18); + sinking_rectangular_plat_actions(sp1C, sp18); } diff --git a/src/game/behaviors/lll_sinking_rock_block.inc.c b/src/game/behaviors/lll_sinking_rock_block.inc.c index 31c2b7b..056d0aa 100644 --- a/src/game/behaviors/lll_sinking_rock_block.inc.c +++ b/src/game/behaviors/lll_sinking_rock_block.inc.c @@ -1,7 +1,7 @@ // lll_sinking_rock_block.c.inc void bhv_lll_sinking_rock_block_loop(void) { - func_802BB680(&o->oSinkWhenSteppedOnUnk104, &o->oSinkWhenSteppedOnUnk108, 124, -110); + lll_octagonal_mesh_find_y_offset(&o->oSinkWhenSteppedOnUnk104, &o->oSinkWhenSteppedOnUnk108, 124, -110); o->oGraphYOffset = 0.0f; o->oPosY = o->oHomeY + o->oSinkWhenSteppedOnUnk108; } diff --git a/src/game/behaviors/lll_volcano_flames.inc.c b/src/game/behaviors/lll_volcano_flames.inc.c index 591a01f..32207c8 100644 --- a/src/game/behaviors/lll_volcano_flames.inc.c +++ b/src/game/behaviors/lll_volcano_flames.inc.c @@ -1,25 +1,11 @@ // lll_volcano_flames.c.inc void bhv_volcano_flames_loop(void) { - obj_update_floor_height(); - obj_compute_vel_xz(); + cur_obj_update_floor_height(); + cur_obj_compute_vel_xz(); o->oPosX += o->oVelX; o->oPosZ += o->oVelZ; - obj_move_y(-4.0f, -0.7f, 2.0f); + cur_obj_move_y(-4.0f, -0.7f, 2.0f); if (o->oMoveFlags & 0x33) - mark_object_for_deletion(o); -} - -void func_802BBFDC(void) { - struct Object *sp1C; - f32 size; - sp1C = spawn_object(o, MODEL_RED_FLAME, bhvVolcanoFlames); - sp1C->oPosY += 550.0f; - sp1C->oMoveAngleYaw = RandomU16() << 0x10 >> 0x10; - sp1C->oForwardVel = RandomFloat() * 40.0f + 20.0f; - sp1C->oVelY = RandomFloat() * 50.0f + 10.0f; - size = RandomFloat() * 6.0 + 3.0; - scale_object_xyz(sp1C, size, size, size); - if (RandomFloat() < 0.1) - PlaySound2(SOUND_GENERAL_VOLCANO_EXPLOSION); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/mad_piano.inc.c b/src/game/behaviors/mad_piano.inc.c index 8433170..18d20be 100644 --- a/src/game/behaviors/mad_piano.inc.c +++ b/src/game/behaviors/mad_piano.inc.c @@ -12,35 +12,35 @@ static struct ObjectHitbox sMadPianoHitbox = { }; static void mad_piano_act_wait(void) { - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); if (o->oDistanceToMario < 500.0f) { if (o->oTimer > 20) { if (gMarioStates[0].forwardVel > 10.0f) { o->oAction = MAD_PIANO_ACT_ATTACK; - obj_become_tangible(); + cur_obj_become_tangible(); } } } else { o->oTimer = 0; } - obj_push_mario_away_from_cylinder(280.0f, 150.0f); + cur_obj_push_mario_away_from_cylinder(280.0f, 150.0f); } static void mad_piano_act_attack(void) { - obj_update_floor_and_walls(); - set_obj_animation_and_sound_state(1); + cur_obj_update_floor_and_walls(); + cur_obj_init_animation_with_sound(1); func_802F9378(0, 0, SOUND_OBJ_MAD_PIANO_CHOMPING); if (o->oDistanceToMario < 500.0f) { o->oTimer = 0; } - if (o->oTimer > 80 && func_8029F788()) { + if (o->oTimer > 80 && cur_obj_check_if_near_animation_end()) { o->oAction = MAD_PIANO_ACT_WAIT; o->oForwardVel = 0.0f; - obj_become_intangible(); + cur_obj_become_intangible(); } else { f32 dx = o->oPosX - o->oHomeX; f32 dz = o->oPosZ - o->oHomeZ; @@ -52,12 +52,12 @@ static void mad_piano_act_attack(void) { o->oPosZ = o->oHomeZ + dz * distToHome; } - obj_rotate_yaw_toward(o->oAngleToMario, 400); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 400); o->oForwardVel = 5.0f; } obj_check_attacks(&sMadPianoHitbox, o->oAction); - obj_move_standard(78); + cur_obj_move_standard(78); } void bhv_mad_piano_update(void) { diff --git a/src/game/behaviors/manta_ray.inc.c b/src/game/behaviors/manta_ray.inc.c index 3007bdf..4ffc5bf 100644 --- a/src/game/behaviors/manta_ray.inc.c +++ b/src/game/behaviors/manta_ray.inc.c @@ -22,17 +22,17 @@ void bhv_manta_ray_init(void) { struct Object *sp1C; sp1C = spawn_object(o, MODEL_NONE, bhvMantaRayRingManager); o->parentObj = sp1C; - set_object_hitbox(o, &sMantaRayHitbox); - obj_scale(2.5f); + obj_set_hitbox(o, &sMantaRayHitbox); + cur_obj_scale(2.5f); } -void func_802F5E20(void) { +void manta_ray_move(void) { s16 sp1E; s32 sp18; sp1E = o->header.gfx.unk38.animFrame; gCurrentObject->oPathedWaypointsS16 = &D_803316A8; - sp18 = obj_follow_path(sp18); + sp18 = cur_obj_follow_path(sp18); o->oMantaUnkF8 = o->oPathedTargetYaw; o->oMantaUnkF4 = o->oPathedTargetPitch; o->oForwardVel = 10.0f; @@ -48,12 +48,12 @@ void func_802F5E20(void) { o->oMoveAngleRoll = 0x4000 / 3; } - func_802A2A38(); + cur_obj_set_pos_via_transform(); if (sp1E == 0) - PlaySound2(SOUND_GENERAL_MOVING_WATER); + cur_obj_play_sound_2(SOUND_GENERAL_MOVING_WATER); } -void func_802F5FD8(void) { +void manta_ray_act_spawn_ring(void) { struct Object *sp1C = o->parentObj; struct Object *sp18; @@ -78,17 +78,17 @@ void func_802F5FD8(void) { void bhv_manta_ray_loop(void) { switch (o->oAction) { case 0: - func_802F5E20(); - func_802F5FD8(); + manta_ray_move(); + manta_ray_act_spawn_ring(); if (o->oMantaUnk1AC == 5) { - func_802A3004(); - create_star(-3180.0f, -3600.0f, 120.0f); + spawn_mist_particles(); + spawn_default_star(-3180.0f, -3600.0f, 120.0f); o->oAction = 1; } break; case 1: - func_802F5E20(); + manta_ray_move(); break; } diff --git a/src/game/behaviors/metal_box.inc.c b/src/game/behaviors/metal_box.inc.c index 87abbbe..851dfed 100644 --- a/src/game/behaviors/metal_box.inc.c +++ b/src/game/behaviors/metal_box.inc.c @@ -12,7 +12,7 @@ struct ObjectHitbox sMetalBoxHitbox = { /* hurtboxHeight: */ 300, }; -s32 func_802B0C54(f32 a0, f32 a1) { +s32 check_if_moving_over_floor(f32 a0, f32 a1) { struct Surface *sp24; f32 sp20 = o->oPosX + sins(o->oMoveAngleYaw) * a1; f32 floorHeight; @@ -27,17 +27,17 @@ s32 func_802B0C54(f32 a0, f32 a1) { void bhv_pushable_loop(void) { UNUSED s16 unused; s16 sp1C; - set_object_hitbox(o, &sMetalBoxHitbox); + obj_set_hitbox(o, &sMetalBoxHitbox); o->oForwardVel = 0.0f; - if (are_objects_collided(o, gMarioObject) && gMarioStates->flags & 0x80000000) { - sp1C = angle_to_object(o, gMarioObject); + if (obj_check_if_collided_with_object(o, gMarioObject) && gMarioStates->flags & 0x80000000) { + sp1C = obj_angle_to_object(o, gMarioObject); if (abs_angle_diff(sp1C, gMarioObject->oMoveAngleYaw) > 0x4000) { o->oMoveAngleYaw = (s16)((gMarioObject->oMoveAngleYaw + 0x2000) & 0xc000); - if (func_802B0C54(8.0f, 150.0f)) { + if (check_if_moving_over_floor(8.0f, 150.0f)) { o->oForwardVel = 4.0f; - PlaySound(SOUND_ENV_METAL_BOX_PUSH); + cur_obj_play_sound_1(SOUND_ENV_METAL_BOX_PUSH); } } } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } diff --git a/src/game/behaviors/mips.inc.c b/src/game/behaviors/mips.inc.c index 06b094b..be33eca 100644 --- a/src/game/behaviors/mips.inc.c +++ b/src/game/behaviors/mips.inc.c @@ -40,7 +40,7 @@ void bhv_mips_init(void) { o->oFriction = 0.89f; o->oBuoyancy = 1.2f; - SetObjAnimation(0); + cur_obj_init_animation(0); } /** @@ -99,7 +99,7 @@ void bhv_mips_act_wait_for_nearby_mario(void) { o->oAction = MIPS_ACT_WAIT_FOR_ANIMATION_DONE; } else { // Resume path following. - SetObjAnimation(1); + cur_obj_init_animation(1); o->oAction = MIPS_ACT_FOLLOW_PATH; } } @@ -120,7 +120,7 @@ void bhv_mips_act_follow_path(void) { // Set start waypoint and follow the path from there. o->oPathedStartWaypoint = waypoint; - followStatus = obj_follow_path(followStatus); + followStatus = cur_obj_follow_path(followStatus); // Update velocity and angle and do movement. #ifndef VERSION_JP @@ -133,16 +133,16 @@ void bhv_mips_act_follow_path(void) { // If we are at the end of the path, do idle animation and wait for Mario. if (followStatus == PATH_REACHED_END) { - SetObjAnimation(0); + cur_obj_init_animation(0); o->oAction = MIPS_ACT_WAIT_FOR_NEARBY_MARIO; } // Play sounds during walk animation. - if (func_8029F788() == 1 && (collisionFlags & OBJ_COL_FLAG_UNDERWATER)) { - PlaySound2(SOUND_OBJ_MIPS_RABBIT_WATER); - spawn_object(o, MODEL_NONE, bhvSurfaceWaveShrinking); - } else if (func_8029F788() == 1) { - PlaySound2(SOUND_OBJ_MIPS_RABBIT); + if (cur_obj_check_if_near_animation_end() == 1 && (collisionFlags & OBJ_COL_FLAG_UNDERWATER)) { + cur_obj_play_sound_2(SOUND_OBJ_MIPS_RABBIT_WATER); + spawn_object(o, MODEL_NONE, bhvShallowWaterSplash); + } else if (cur_obj_check_if_near_animation_end() == 1) { + cur_obj_play_sound_2(SOUND_OBJ_MIPS_RABBIT); } } @@ -150,8 +150,8 @@ void bhv_mips_act_follow_path(void) { * Seems to wait until the current animation is done, then go idle. */ void bhv_mips_act_wait_for_animation_done(void) { - if (func_8029F788() == 1) { - SetObjAnimation(0); + if (cur_obj_check_if_near_animation_end() == 1) { + cur_obj_init_animation(0); o->oAction = MIPS_ACT_IDLE; } } @@ -176,7 +176,7 @@ void bhv_mips_act_fall_down(void) { o->oMoveAngleYaw = o->oFaceAngleYaw; if (collisionFlags & OBJ_COL_FLAG_UNDERWATER) - spawn_object(o, MODEL_NONE, bhvSurfaceWaveShrinking); + spawn_object(o, MODEL_NONE, bhvShallowWaterSplash); } } @@ -230,9 +230,9 @@ void bhv_mips_held(void) { s16 dialogID; o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE; - SetObjAnimation(4); // Held animation. - obj_set_pos_relative(gMarioObject, 0, 60.0f, 100.0f); - obj_become_intangible(); + cur_obj_init_animation(4); // Held animation. + cur_obj_set_pos_relative(gMarioObject, 0, 60.0f, 100.0f); + cur_obj_become_intangible(); // If MIPS hasn't spawned his star yet... if (o->oMipsStarStatus == MIPS_STAR_STATUS_HAVENT_SPAWNED_STAR) { @@ -258,11 +258,11 @@ void bhv_mips_held(void) { * Handles MIPS being dropped by Mario. */ void bhv_mips_dropped(void) { - obj_get_dropped(); + cur_obj_get_dropped(); o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; - SetObjAnimation(0); + cur_obj_init_animation(0); o->oHeldState = HELD_FREE; - obj_become_tangible(); + cur_obj_become_tangible(); o->oForwardVel = 3.0f; o->oAction = MIPS_ACT_IDLE; } @@ -271,12 +271,12 @@ void bhv_mips_dropped(void) { * Handles MIPS being thrown by Mario. */ void bhv_mips_thrown(void) { - obj_enable_rendering_2(); + cur_obj_enable_rendering_2(); o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; o->oHeldState = HELD_FREE; o->oFlags &= ~OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW; - SetObjAnimation(2); - obj_become_tangible(); + cur_obj_init_animation(2); + cur_obj_become_tangible(); o->oForwardVel = 25.0f; o->oVelY = 20.0f; o->oAction = MIPS_ACT_FALL_DOWN; diff --git a/src/game/behaviors/moat_grill.inc.c b/src/game/behaviors/moat_grill.inc.c index 935a7ae..e2b4da8 100644 --- a/src/game/behaviors/moat_grill.inc.c +++ b/src/game/behaviors/moat_grill.inc.c @@ -2,7 +2,7 @@ void bhv_moat_grills_loop(void) { if (save_file_get_flags() & SAVE_FLAG_MOAT_DRAINED) - obj_set_model(MODEL_NONE); + cur_obj_set_model(MODEL_NONE); else load_object_collision_model(); } diff --git a/src/game/behaviors/moneybag.inc.c b/src/game/behaviors/moneybag.inc.c index 674a557..667182e 100644 --- a/src/game/behaviors/moneybag.inc.c +++ b/src/game/behaviors/moneybag.inc.c @@ -28,12 +28,12 @@ void bhv_moneybag_init(void) { o->oGravity = 3.0f; o->oFriction = 1.0f; o->oBuoyancy = 2.0f; - SetObjAnimation(0); + cur_obj_init_animation(0); o->oOpacity = 0; } -void MoneybagCheckMarioCollision(void) { - set_object_hitbox(o, &sMoneybagHitbox); +void moneybag_check_mario_collision(void) { + obj_set_hitbox(o, &sMoneybagHitbox); if (o->oInteractStatus & INT_STATUS_INTERACTED) /* bit 15 */ { @@ -54,25 +54,25 @@ void MoneybagCheckMarioCollision(void) { // sp20 = collisionFlags -void MoneybagJump(s8 collisionFlags) { +void moneybag_jump(s8 collisionFlags) { s16 animFrame = o->header.gfx.unk38.animFrame; switch (o->oMoneybagJumpState) { case MONEYBAG_JUMP_PREPARE: - SetObjAnimation(1); + cur_obj_init_animation(1); if (animFrame == 5) { o->oForwardVel = 20.0f; o->oVelY = 40.0f; } - if (func_8029F788() == 1) { + if (cur_obj_check_if_near_animation_end() == 1) { o->oMoneybagJumpState = MONEYBAG_JUMP_JUMP; - PlaySound2(SOUND_GENERAL_BOING2_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_BOING2_LOWPRIO); } break; case MONEYBAG_JUMP_JUMP: - SetObjAnimation(2); + cur_obj_init_animation(2); if ((collisionFlags & 1) == 1) /* bit 0 */ { @@ -83,14 +83,14 @@ void MoneybagJump(s8 collisionFlags) { break; case MONEYBAG_JUMP_JUMP_AND_BOUNCE: - SetObjAnimation(3); + cur_obj_init_animation(3); - if (func_8029F788() == 1) + if (cur_obj_check_if_near_animation_end() == 1) o->oMoneybagJumpState = MONEYBAG_JUMP_LANDING; break; case MONEYBAG_JUMP_WALK_AROUND: - SetObjAnimation(4); + cur_obj_init_animation(4); o->oForwardVel = 10.0f; if (o->oTimer >= 61) { @@ -101,13 +101,13 @@ void MoneybagJump(s8 collisionFlags) { break; case MONEYBAG_JUMP_WALK_HOME: - SetObjAnimation(4); + cur_obj_init_animation(4); o->oForwardVel = 5.0f; break; } } -void MoneybagMoveAroundLoop(void) { +void moneybag_act_move_around(void) { s16 collisionFlags; obj_return_and_displace_home(o, o->oHomeX, o->oHomeY, o->oHomeZ, 200); @@ -123,15 +123,15 @@ void MoneybagMoveAroundLoop(void) { o->oMoneybagJumpState = MONEYBAG_JUMP_PREPARE; } - MoneybagJump(collisionFlags); - MoneybagCheckMarioCollision(); + moneybag_jump(collisionFlags); + moneybag_check_mario_collision(); if (!is_point_within_radius_of_mario(o->oHomeX, o->oHomeY, o->oHomeZ, 800) && ((collisionFlags & OBJ_COL_FLAGS_LANDED) == OBJ_COL_FLAGS_LANDED)) o->oAction = MONEYBAG_ACT_RETURN_HOME; } -void MoneybagReturnHomeLoop(void) { +void moneybag_act_return_home(void) { s16 collisionFlags; f32 sp28 = o->oHomeX - o->oPosX; f32 sp24 = o->oHomeZ - o->oPosZ; @@ -143,15 +143,15 @@ void MoneybagReturnHomeLoop(void) { && (o->oMoneybagJumpState == MONEYBAG_JUMP_LANDING)) o->oMoneybagJumpState = MONEYBAG_JUMP_WALK_HOME; - MoneybagJump(collisionFlags); - MoneybagCheckMarioCollision(); + moneybag_jump(collisionFlags); + moneybag_check_mario_collision(); if (is_point_close_to_object(o, o->oHomeX, o->oHomeY, o->oHomeZ, 100)) { spawn_object(o, MODEL_YELLOW_COIN, bhvMoneybagHidden); #ifndef VERSION_JP - PlaySound2(SOUND_GENERAL_VANISH_SFX); + cur_obj_play_sound_2(SOUND_GENERAL_VANISH_SFX); #endif - SetObjAnimation(0); + cur_obj_init_animation(0); o->oAction = MONEYBAG_ACT_DISAPPEAR; o->oMoneybagJumpState = MONEYBAG_JUMP_LANDING; } @@ -162,7 +162,7 @@ void MoneybagReturnHomeLoop(void) { } } -void MoneybagDisappearLoop(void) { +void moneybag_act_disappear(void) { o->oOpacity -= 6; if (o->oOpacity < 0) { o->oOpacity = 0; @@ -170,11 +170,11 @@ void MoneybagDisappearLoop(void) { } } -void MoneybagDeathLoop(void) { +void moneybag_act_death(void) { if (o->oTimer == 1) { obj_spawn_yellow_coins(o, 5); create_sound_spawner(SOUND_GENERAL_SPLATTERING); - func_802A3004(); + spawn_mist_particles(); o->activeFlags = 0; } } @@ -192,34 +192,34 @@ void bhv_moneybag_loop(void) { break; case MONEYBAG_ACT_MOVE_AROUND: - MoneybagMoveAroundLoop(); + moneybag_act_move_around(); if (o->oTimer >= 31) - obj_become_tangible(); + cur_obj_become_tangible(); break; case MONEYBAG_ACT_RETURN_HOME: - MoneybagReturnHomeLoop(); + moneybag_act_return_home(); break; case MONEYBAG_ACT_DISAPPEAR: - MoneybagDisappearLoop(); + moneybag_act_disappear(); break; case MONEYBAG_ACT_DEATH: - MoneybagDeathLoop(); + moneybag_act_death(); break; } } void bhv_moneybag_hidden_loop(void) { - set_object_hitbox(o, &sMoneybagHiddenHitbox); + obj_set_hitbox(o, &sMoneybagHiddenHitbox); switch (o->oAction) { case FAKE_MONEYBAG_COIN_ACT_IDLE: if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 400)) { spawn_object(o, MODEL_MONEYBAG, bhvMoneybag); #ifndef VERSION_JP - PlaySound2(SOUND_GENERAL_VANISH_SFX); + cur_obj_play_sound_2(SOUND_GENERAL_VANISH_SFX); #endif o->oAction = FAKE_MONEYBAG_COIN_ACT_TRANSFORM; } diff --git a/src/game/behaviors/monty_mole.inc.c b/src/game/behaviors/monty_mole.inc.c index 87c1b39..582acde 100644 --- a/src/game/behaviors/monty_mole.inc.c +++ b/src/game/behaviors/monty_mole.inc.c @@ -186,7 +186,7 @@ void monty_mole_spawn_dirt_particles(s8 offsetY, s8 velYBase) { #if defined(VERSION_JP) || defined(VERSION_US) sMontyMoleRiseFromGroundParticles.offsetY = offsetY; sMontyMoleRiseFromGroundParticles.velYBase = velYBase; - obj_spawn_particles(&sMontyMoleRiseFromGroundParticles); + cur_obj_spawn_particles(&sMontyMoleRiseFromGroundParticles); #else s8 tempVelYBase = velYBase; s8 tempOffsetY = offsetY; @@ -194,7 +194,7 @@ void monty_mole_spawn_dirt_particles(s8 offsetY, s8 velYBase) { do { sMontyMoleRiseFromGroundParticles.offsetY = tempOffsetY; sMontyMoleRiseFromGroundParticles.velYBase = tempVelYBase; - obj_spawn_particles(&sMontyMoleRiseFromGroundParticles); + cur_obj_spawn_particles(&sMontyMoleRiseFromGroundParticles); } while (0); #endif } @@ -223,7 +223,7 @@ static void monty_mole_act_select_hole(void) { // Select a hole to pop out of if ((o->oMontyMoleCurrentHole = monty_mole_select_available_hole(minDistToMario)) != NULL) { - PlaySound2(SOUND_OBJ2_MONTY_MOLE_APPEAR); + cur_obj_play_sound_2(SOUND_OBJ2_MONTY_MOLE_APPEAR); // Mark hole as unavailable o->oMontyMoleCurrentHole->oMontyMoleHoleCooldown = -1; @@ -248,8 +248,8 @@ static void monty_mole_act_select_hole(void) { monty_mole_spawn_dirt_particles(0, 20); } - obj_unhide(); - obj_become_tangible(); + cur_obj_unhide(); + cur_obj_become_tangible(); } } @@ -257,13 +257,13 @@ static void monty_mole_act_select_hole(void) { * Move upward until high enough, then enter the spawn rock action. */ static void monty_mole_act_rise_from_hole(void) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (o->oMontyMoleHeightRelativeToFloor >= 49.0f) { o->oPosY = o->oFloorHeight + 50.0f; o->oVelY = 0.0f; - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = MONTY_MOLE_ACT_SPAWN_ROCK; } } @@ -305,11 +305,11 @@ static void monty_mole_act_begin_jump_into_hole(void) { */ static void monty_mole_act_throw_rock(void) { if (func_802F92EC(8, 10)) { - PlaySound2(SOUND_OBJ_MONTY_MOLE_ATTACK); + cur_obj_play_sound_2(SOUND_OBJ_MONTY_MOLE_ATTACK); o->prevObj = NULL; } - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = MONTY_MOLE_ACT_BEGIN_JUMP_INTO_HOLE; } } @@ -344,17 +344,17 @@ static void monty_mole_hide_in_hole(void) { // action. If no hole is available (e.g. because mario is too far away), // the game will crash because of the line above that accesses // oMontyMoleCurrentHole. - obj_become_intangible(); + cur_obj_become_intangible(); } /** * Wait to land on the floor, then hide. */ static void monty_mole_act_hide(void) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { - obj_hide(); + cur_obj_hide(); monty_mole_hide_in_hole(); } else { approach_f32_ptr(&o->oVelY, -4.0f, 0.5f); @@ -367,7 +367,7 @@ static void monty_mole_act_hide(void) { */ static void monty_mole_act_jump_out_of_hole(void) { if (o->oVelY > 0.0f) { - set_obj_animation_and_sound_state(9); + cur_obj_init_animation_with_sound(9); } else { func_802F927C(4); @@ -386,7 +386,7 @@ void bhv_monty_mole_update(void) { // PARTIAL_UPDATE o->oDeathSound = SOUND_OBJ_DYING_ENEMY1; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); o->oMontyMoleHeightRelativeToFloor = o->oPosY - o->oFloorHeight; @@ -452,7 +452,7 @@ void bhv_monty_mole_update(void) { o->prevObj = NULL; } - obj_move_standard(78); + cur_obj_move_standard(78); } /** @@ -486,14 +486,14 @@ static void monty_mole_rock_act_held(void) { * Move, then despawn after hitting the ground or water. */ static void monty_mole_rock_act_move(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->oMoveFlags & (OBJ_MOVE_MASK_ON_GROUND | OBJ_MOVE_ENTERED_WATER)) { - obj_spawn_particles(&sMontyMoleRockBreakParticles); - mark_object_for_deletion(o); + cur_obj_spawn_particles(&sMontyMoleRockBreakParticles); + obj_mark_for_deletion(o); } - obj_move_standard(78); + cur_obj_move_standard(78); } /** diff --git a/src/game/behaviors/moving_coin.inc.c b/src/game/behaviors/moving_coin.inc.c index 404d22d..71c1d6f 100644 --- a/src/game/behaviors/moving_coin.inc.c +++ b/src/game/behaviors/moving_coin.inc.c @@ -26,28 +26,28 @@ static struct ObjectHitbox sMovingBlueCoinHitbox = { /* hurtboxHeight: */ 0, }; -s32 CoinStep(s16 *collisionFlagsPtr) { +s32 coin_step(s16 *collisionFlagsPtr) { *collisionFlagsPtr = object_step(); obj_check_floor_death(*collisionFlagsPtr, sObjFloor); if ((*collisionFlagsPtr & 0x1) != 0 && (*collisionFlagsPtr & 0x8) == 0) /* bit 0, bit 3 */ { - PlaySound2(SOUND_GENERAL_COIN_DROP); + cur_obj_play_sound_2(SOUND_GENERAL_COIN_DROP); return 1; } return 0; } -void MovingCoinFlickerLoop(void) { +void moving_coin_flicker(void) { s16 collisionFlags; - CoinStep(&collisionFlags); + coin_step(&collisionFlags); obj_flicker_and_disappear(o, 0); } -void CoinCollected(void) { +void coin_collected(void) { spawn_object(o, MODEL_SPARKLES, bhvGoldenCoinSparkles); o->activeFlags = 0; } @@ -57,26 +57,26 @@ void bhv_moving_yellow_coin_init(void) { o->oFriction = 1.0f; o->oBuoyancy = 1.5f; - set_object_hitbox(o, &sMovingYellowCoinHitbox); + obj_set_hitbox(o, &sMovingYellowCoinHitbox); } void bhv_moving_yellow_coin_loop(void) { s16 collisionFlags; switch (o->oAction) { case MOV_YCOIN_ACT_IDLE: - CoinStep(&collisionFlags); + coin_step(&collisionFlags); if (o->oTimer < 10) - obj_become_intangible(); + cur_obj_become_intangible(); else - obj_become_tangible(); + cur_obj_become_tangible(); if (o->oTimer >= 301) o->oAction = 1; break; case MOV_YCOIN_ACT_BLINKING: - MovingCoinFlickerLoop(); + moving_coin_flicker(); break; case MOV_YCOIN_ACT_LAVA_DEATH: @@ -90,7 +90,7 @@ void bhv_moving_yellow_coin_loop(void) { if ((o->oInteractStatus & INT_STATUS_INTERACTED) != 0) /* bit 15 */ { - CoinCollected(); + coin_collected(); o->oInteractStatus = 0; } } @@ -100,7 +100,7 @@ void bhv_moving_blue_coin_init(void) { o->oFriction = 1.0f; o->oBuoyancy = 1.5f; - set_object_hitbox(o, &sMovingBlueCoinHitbox); + obj_set_hitbox(o, &sMovingBlueCoinHitbox); } void bhv_moving_blue_coin_loop(void) { @@ -122,7 +122,7 @@ void bhv_moving_blue_coin_loop(void) { { o->oForwardVel += 25.0f; if ((collisionFlags & 0x8) == 0) - PlaySound2(SOUND_GENERAL_COIN_DROP); /* bit 3 */ + cur_obj_play_sound_2(SOUND_GENERAL_COIN_DROP); /* bit 3 */ } else o->oForwardVel *= 0.98; @@ -135,7 +135,7 @@ void bhv_moving_blue_coin_loop(void) { if ((o->oInteractStatus & INT_STATUS_INTERACTED) != 0) /* bit 15 */ { - CoinCollected(); + coin_collected(); o->oInteractStatus = 0; } } @@ -145,16 +145,16 @@ void bhv_blue_coin_sliding_jumping_init(void) { o->oFriction = 0.98; o->oBuoyancy = 1.5; - set_object_hitbox(o, &sMovingBlueCoinHitbox); + obj_set_hitbox(o, &sMovingBlueCoinHitbox); } -void func_802E540C(void) { +void blue_coin_sliding_away_from_mario(void) { s16 collisionFlags; o->oForwardVel = 15.0; o->oMoveAngleYaw = o->oAngleToMario + 0x8000; - if (CoinStep(&collisionFlags) != 0) + if (coin_step(&collisionFlags) != 0) o->oVelY += 18.0f; if ((collisionFlags & 0x2) != 0) o->oAction = 3; /* bit 1 */ @@ -163,10 +163,10 @@ void func_802E540C(void) { o->oAction = 2; } -void func_802E54DC(void) { +void blue_coin_sliding_slow_down(void) { s16 collisionFlags; - CoinStep(&collisionFlags); + coin_step(&collisionFlags); if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 500) == 1) o->oAction = 1; @@ -187,22 +187,22 @@ void bhv_blue_coin_sliding_loop(void) { break; case 1: - func_802E540C(); + blue_coin_sliding_away_from_mario(); break; case 2: - func_802E54DC(); + blue_coin_sliding_slow_down(); set_object_visibility(o, 3000); break; case 3: - CoinStep(&collisionFlags); + coin_step(&collisionFlags); if (o->oTimer >= 61) o->oAction = 4; break; case 4: - MovingCoinFlickerLoop(); + moving_coin_flicker(); break; case 100: @@ -216,7 +216,7 @@ void bhv_blue_coin_sliding_loop(void) { if ((o->oInteractStatus & INT_STATUS_INTERACTED) != 0) /* bit 15 */ { - CoinCollected(); + coin_collected(); o->oInteractStatus = 0; } } @@ -227,41 +227,41 @@ void bhv_blue_coin_jumping_loop(void) { switch (o->oAction) { case 0: if (o->oTimer == 0) { - obj_become_intangible(); + cur_obj_become_intangible(); o->oVelY = 50.0; } object_step(); if (o->oTimer == 15) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oAction = 1; } break; case 1: - func_802E540C(); + blue_coin_sliding_away_from_mario(); break; case 2: - func_802E54DC(); + blue_coin_sliding_slow_down(); set_object_visibility(o, 3000); break; case 3: - CoinStep(&collisionFlags); + coin_step(&collisionFlags); if (o->oTimer >= 61) o->oAction = 4; break; case 4: - MovingCoinFlickerLoop(); + moving_coin_flicker(); break; } if ((o->oInteractStatus & INT_STATUS_INTERACTED) != 0) /* bit 15 */ { - CoinCollected(); + coin_collected(); o->oInteractStatus = 0; } } diff --git a/src/game/behaviors/mr_blizzard.inc.c b/src/game/behaviors/mr_blizzard.inc.c index 826a6bd..d10bbe1 100644 --- a/src/game/behaviors/mr_blizzard.inc.c +++ b/src/game/behaviors/mr_blizzard.inc.c @@ -48,7 +48,7 @@ void func_80306ED4(s8 count, s8 offsetY, s8 forwardVelBase, s8 velYBase, s8 size D_80331A00.forwardVelBase = forwardVelBase; D_80331A00.velYBase = velYBase; D_80331A00.sizeBase = sizeBase; - obj_spawn_particles(&D_80331A00); + cur_obj_spawn_particles(&D_80331A00); #else s8 tempSizeBase = sizeBase; s8 tempVelYBase = velYBase; @@ -62,7 +62,7 @@ void func_80306ED4(s8 count, s8 offsetY, s8 forwardVelBase, s8 velYBase, s8 size D_80331A00.forwardVelBase = tempForwardVelBase; D_80331A00.velYBase = tempVelYBase; D_80331A00.sizeBase = tempSizeBase; - obj_spawn_particles(&D_80331A00); + cur_obj_spawn_particles(&D_80331A00); } while (0); #endif } @@ -88,9 +88,9 @@ static void func_8030702C(void) { if (o->oMrBlizzardUnkF8 == NULL && func_802F92EC(0, 5)) { o->oMrBlizzardUnkF8 = spawn_object_relative(0, -70, (s32)(o->oMrBlizzardUnk10C + 153.0f), 0, o, MODEL_WHITE_PARTICLE, bhvMrBlizzardSnowball); - } else if (obj_check_anim_frame(10)) { + } else if (cur_obj_check_anim_frame(10)) { o->prevObj = o->oMrBlizzardUnkF8; - } else if (func_8029F788()) { + } else if (cur_obj_check_if_near_animation_end()) { if (o->oMrBlizzardUnk10C < 0.0f) { o->oAction = 1; } else { @@ -101,16 +101,16 @@ static void func_8030702C(void) { static void func_80307144(void) { if (o->oDistanceToMario < 1000.0f) { - PlaySound2(SOUND_OBJ_SNOW_SAND2); + cur_obj_play_sound_2(SOUND_OBJ_SNOW_SAND2); o->oAction = 2; o->oMoveAngleYaw = o->oAngleToMario; o->oMrBlizzardUnkFC = 42.0f; func_80306ED4(8, -10, 15, 20, 10); - obj_unhide(); - obj_become_tangible(); + cur_obj_unhide(); + cur_obj_become_tangible(); } else { - obj_hide(); + cur_obj_hide(); } } @@ -136,7 +136,7 @@ static void func_80307370(void) { f32 val00; if (o->oMoveFlags & 0x00000003) { - obj_rotate_yaw_toward(o->oAngleToMario, 0x600); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x600); val06 = o->oAngleToMario - o->oMoveAngleYaw; if (val06 != 0) { @@ -165,7 +165,7 @@ static void func_80307370(void) { if (absi(o->oFaceAngleRoll) > 0x3000) { o->oAction = 6; o->prevObj = o->oMrBlizzardUnkF8 = NULL; - obj_become_intangible(); + cur_obj_become_intangible(); } } else if (o->oDistanceToMario > 1500.0f) { o->oAction = 5; @@ -182,7 +182,7 @@ static void func_80307650(void) { if (clamp_f32(&o->oMrBlizzardUnk104, -0x4000, 0x4000)) { if (o->oMrBlizzardUnk108 != 0.0f) { - PlaySound2(SOUND_OBJ_SNOW_SAND1); + cur_obj_play_sound_2(SOUND_OBJ_SNOW_SAND1); if (o->oAnimState) { save_file_clear_flags(SAVE_FLAG_CAP_ON_MR_BLIZZARD); @@ -210,19 +210,19 @@ static void func_80307650(void) { if (o->oTimer >= 30) { if (o->oTimer == 30) { - PlaySound2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); + cur_obj_play_sound_2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); } if (o->oMrBlizzardUnkF4 != 0.0f) { if ((o->oMrBlizzardUnkF4 -= 0.03f) <= 0.0f) { o->oMrBlizzardUnkF4 = 0.0f; if (!(o->oBehParams & 0x0000FF00)) { - spawn_object_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); + obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); set_object_respawn_info_bits(o, 1); } } } else if (o->oDistanceToMario > 1000.0f) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); o->oAction = 0; o->oMrBlizzardUnkF4 = 1.0f; @@ -235,9 +235,9 @@ static void func_80307650(void) { static void func_80307990(void) { if (func_802F92EC(1, 7)) { - PlaySound2(SOUND_OBJ2_SCUTTLEBUG_ALERT); + cur_obj_play_sound_2(SOUND_OBJ2_SCUTTLEBUG_ALERT); o->prevObj = o->oMrBlizzardUnkF8 = NULL; - } else if (func_8029F788()) { + } else if (cur_obj_check_if_near_animation_end()) { o->oAction = 0; } } @@ -253,16 +253,16 @@ static void func_80307A0C(void) { if (approach_f32_ptr(&o->oMrBlizzardUnk10C, -200.0f, 4.0f)) { o->oAction = 0; - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); } } static void func_80307AD4(void) { if (o->oMrBlizzardUnk100 != 0) { - obj_rotate_yaw_toward(o->oMrBlizzardUnk1AC, 3400); + cur_obj_rotate_yaw_toward(o->oMrBlizzardUnk1AC, 3400); if (--o->oMrBlizzardUnk100 == 0) { - PlaySound2(SOUND_OBJ_MR_BLIZZARD_ALERT); + cur_obj_play_sound_2(SOUND_OBJ_MR_BLIZZARD_ALERT); if (o->oMrBlizzardUnk110 > 700) { o->oMrBlizzardUnk1AC += 0x8000; @@ -276,9 +276,9 @@ static void func_80307AD4(void) { } } } else if (o->oMoveFlags & 0x00000003) { - PlaySound2(SOUND_OBJ_SNOW_SAND1); + cur_obj_play_sound_2(SOUND_OBJ_SNOW_SAND1); if (o->oMrBlizzardUnk110 != 0) { - o->oMrBlizzardUnk110 = (s32) obj_lateral_dist_to_home(); + o->oMrBlizzardUnk110 = (s32) cur_obj_lateral_dist_to_home(); } else { o->oMrBlizzardUnk110 = 700; } @@ -289,7 +289,7 @@ static void func_80307AD4(void) { } void bhv_mr_blizzard_update(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case 0: @@ -322,13 +322,13 @@ void bhv_mr_blizzard_update(void) { o->oGraphYOffset = o->oMrBlizzardUnk10C + absf(20.0f * sins(o->oFaceAngleRoll)) - 40.0f * (1.0f - o->oMrBlizzardUnkF4); - obj_scale(o->oMrBlizzardUnkF4); - obj_move_standard(78); + cur_obj_scale(o->oMrBlizzardUnkF4); + cur_obj_move_standard(78); obj_check_attacks(&sMrBlizzardHitbox, o->oAction); } static void func_80307E24(void) { - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (o->parentObj->prevObj == o) { o->oAction = 1; o->oParentRelativePosX = 190.0f; @@ -357,16 +357,16 @@ static void func_80307EB0(void) { } static void func_80307FD4(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); obj_check_attacks(&sMrBlizzardSnowballHitbox, -1); if (o->oAction == -1 || o->oMoveFlags & 0x0000000B) { func_80306ED4(6, 0, 5, 10, 3); create_sound_spawner(SOUND_GENERAL_MOVING_IN_SAND); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } - obj_move_standard(78); + cur_obj_move_standard(78); } void bhv_mr_blizzard_snowball(void) { diff --git a/src/game/behaviors/mr_i.inc.c b/src/game/behaviors/mr_i.inc.c index b21db60..05299c8 100644 --- a/src/game/behaviors/mr_i.inc.c +++ b/src/game/behaviors/mr_i.inc.c @@ -8,51 +8,51 @@ void bhv_piranha_particle_loop(void) { o->oForwardVel = 20.0f + 20.0f * RandomFloat(); o->oMoveAngleYaw = RandomU16(); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } -void ActionMrIParticle0(void) { - obj_scale(3.0f); +void mr_i_piranha_particle_act_0(void) { + cur_obj_scale(3.0f); o->oForwardVel = 20.0f; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (0x8000 & o->oInteractStatus) o->oAction = 1; else if ((o->oTimer >= 101) || (0x200 & o->oMoveFlags) || (8 & (s16) o->activeFlags)) { - mark_object_for_deletion(o); - func_802A3004(); + obj_mark_for_deletion(o); + spawn_mist_particles(); } } -void ActionMrIParticle1(void) { +void mr_i_piranha_particle_act_1(void) { s32 i; - mark_object_for_deletion(o); + obj_mark_for_deletion(o); for (i = 0; i < 10; i++) spawn_object(o, MODEL_PURPLE_MARBLE, bhvPurpleParticle); } -void (*sMrIParticleActions[])(void) = { ActionMrIParticle0, ActionMrIParticle1 }; +void (*sMrIParticleActions[])(void) = { mr_i_piranha_particle_act_0, mr_i_piranha_particle_act_1 }; void bhv_mr_i_particle_loop(void) { - obj_call_action_function(sMrIParticleActions); + cur_obj_call_action_function(sMrIParticleActions); } -void func_802A525C(void) { +void spawn_mr_i_particle(void) { struct Object *particle; f32 sp18 = o->header.gfx.scale[1]; particle = spawn_object(o, MODEL_PURPLE_MARBLE, bhvMrIParticle); particle->oPosY += 50.0f * sp18; particle->oPosX += sins(o->oMoveAngleYaw) * 90.0f * sp18; particle->oPosZ += coss(o->oMoveAngleYaw) * 90.0f * sp18; - PlaySound2(SOUND_OBJ_MRI_SHOOT); + cur_obj_play_sound_2(SOUND_OBJ_MRI_SHOOT); } void bhv_mr_i_body_loop(void) { - copy_object_pos_and_angle(o, o->parentObj); + obj_copy_pos_and_angle(o, o->parentObj); if (!(8 & o->activeFlags)) { - copy_object_scale(o, o->parentObj); - set_object_parent_relative_pos(o, 0, 0, o->header.gfx.scale[1] * 100.0f); - build_object_transform_from_pos_and_angle(o, 44, 15); - translate_object_local(o, 6, 44); + obj_copy_scale(o, o->parentObj); + obj_set_parent_relative_pos(o, 0, 0, o->header.gfx.scale[1] * 100.0f); + obj_build_transform_from_pos_and_angle(o, 44, 15); + obj_translate_local(o, 6, 44); o->oFaceAnglePitch = o->oMoveAnglePitch; o->oGraphYOffset = o->header.gfx.scale[1] * 100.f; } @@ -64,10 +64,10 @@ void bhv_mr_i_body_loop(void) { o->parentObj->oMrIUnk110 = 0; } if (!o->parentObj->activeFlags) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void ActionMrI3(void) { +void mr_i_act_3(void) { s16 sp36; s16 sp34; f32 sp30; @@ -88,41 +88,41 @@ void ActionMrI3(void) { sp36 = o->oMoveAngleYaw; o->oMoveAngleYaw += sp34 * coss(0x4000 * sp2C); if (sp36 < 0 && o->oMoveAngleYaw >= 0) - PlaySound2(SOUND_OBJ2_MRI_SPINNING); + cur_obj_play_sound_2(SOUND_OBJ2_MRI_SPINNING); o->oMoveAnglePitch = (1.0 - coss(0x4000 * sp2C)) * -0x4000; - obj_shake_y(4.0f); + cur_obj_shake_y(4.0f); } else if (o->oTimer < 96) { if (o->oTimer == 64) - PlaySound2(SOUND_OBJ_MRI_DEATH); + cur_obj_play_sound_2(SOUND_OBJ_MRI_DEATH); sp30 = (f32)(o->oTimer - 63) / 32; o->oMoveAngleYaw += sp34 * coss(0x4000 * sp2C); o->oMoveAnglePitch = (1.0 - coss(0x4000 * sp2C)) * -0x4000; - obj_shake_y((s32)((1.0f - sp30) * 4)); // trucating the f32? + cur_obj_shake_y((s32)((1.0f - sp30) * 4)); // trucating the f32? sp20 = coss(0x4000 * sp30) * 0.4 + 0.6; - obj_scale(sp20 * sp1C); + cur_obj_scale(sp20 * sp1C); } else if (o->oTimer < 104) { // do nothing } else if (o->oTimer < 168) { if (o->oTimer == 104) { - obj_become_intangible(); - func_802A3004(); + cur_obj_become_intangible(); + spawn_mist_particles(); o->oMrISize = sp1C * 0.6; if (o->oBehParams2ndByte) { o->oPosY += 100.0f; - create_star(1370, 2000.0f, -320.0f); - mark_object_for_deletion(o); + spawn_default_star(1370, 2000.0f, -320.0f); + obj_mark_for_deletion(o); } else - obj_spawn_loot_blue_coin(); + cur_obj_spawn_loot_blue_coin(); } o->oMrISize -= 0.2 * sp1C; if (o->oMrISize < 0) o->oMrISize = 0; - obj_scale(o->oMrISize); + cur_obj_scale(o->oMrISize); } else - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void ActionMrI2() { +void mr_i_act_2() { s16 sp1E; s16 sp1C; sp1E = o->oMoveAngleYaw; @@ -167,7 +167,7 @@ void ActionMrI2() { if (o->oMrIUnk104 == o->oMrIUnk108) o->oMrIUnk110 = 1; if (o->oMrIUnk104 == o->oMrIUnk108 + 20) { - func_802A525C(); + spawn_mr_i_particle(); o->oMrIUnk104 = 0; o->oMrIUnk108 = (s32)(RandomFloat() * 50.0f + 50.0f); } @@ -180,15 +180,15 @@ void ActionMrI2() { o->oAction = 1; } -void ActionMrI1(void) { +void mr_i_act_1(void) { s16 sp1E; s16 sp1C; s16 sp1A; - sp1E = angle_to_object(o, gMarioObject); + sp1E = obj_angle_to_object(o, gMarioObject); sp1C = abs_angle_diff(o->oMoveAngleYaw, sp1E); sp1A = abs_angle_diff(o->oMoveAngleYaw, gMarioObject->oFaceAngleYaw); if (o->oTimer == 0) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oMoveAnglePitch = 0; o->oMrIUnk104 = 30; o->oMrIUnk108 = RandomFloat() * 20.0f; @@ -211,26 +211,26 @@ void ActionMrI1(void) { if (o->oMrIUnk108 + 80 < o->oMrIUnk104) { o->oMrIUnk104 = 0; o->oMrIUnk108 = RandomFloat() * 80.0f; - func_802A525C(); + spawn_mr_i_particle(); } } -void ActionMrI0(void) { +void mr_i_act_0(void) { #ifndef VERSION_JP - set_object_angle(o, 0, 0, 0); + obj_set_angle(o, 0, 0, 0); #else o->oMoveAnglePitch = 0; o->oMoveAngleYaw = 0; o->oMoveAngleRoll = 0; #endif - obj_scale(o->oBehParams2ndByte + 1); + cur_obj_scale(o->oBehParams2ndByte + 1); if (o->oTimer == 0) - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); if (o->oDistanceToMario < 1500.0f) o->oAction = 1; } -void (*sMrIActions[])(void) = { ActionMrI0, ActionMrI1, ActionMrI2, ActionMrI3 }; +void (*sMrIActions[])(void) = { mr_i_act_0, mr_i_act_1, mr_i_act_2, mr_i_act_3 }; struct ObjectHitbox sMrIHitbox = { /* interactType: */ INTERACT_DAMAGE, @@ -245,8 +245,8 @@ struct ObjectHitbox sMrIHitbox = { }; void bhv_mr_i_loop(void) { - set_object_hitbox(o, &sMrIHitbox); - obj_call_action_function(sMrIActions); + obj_set_hitbox(o, &sMrIHitbox); + cur_obj_call_action_function(sMrIActions); if (o->oAction != 3) if (o->oDistanceToMario > 3000.0f || o->activeFlags & 8) o->oAction = 0; diff --git a/src/game/behaviors/mushroom_1up.inc.c b/src/game/behaviors/mushroom_1up.inc.c index 1d1d553..66ae68d 100644 --- a/src/game/behaviors/mushroom_1up.inc.c +++ b/src/game/behaviors/mushroom_1up.inc.c @@ -3,7 +3,7 @@ void bhv_1up_interact(void) { UNUSED s32 sp1C; - if (are_objects_collided(o, gMarioObject) == 1) { + if (obj_check_if_collided_with_object(o, gMarioObject) == 1) { play_sound(SOUND_GENERAL_COLLECT_1UP, gDefaultSoundArgs); gMarioState->numLives++; o->activeFlags = 0; @@ -28,7 +28,7 @@ void bhv_1up_init(void) { } } -void func_802F2D40(void) { +void one_up_loop_in_air(void) { if (o->oTimer < 5) { o->oVelY = 40.0f; } else { @@ -39,7 +39,7 @@ void func_802F2D40(void) { } } -void func_802F2E18(void) { +void pole_1up_move_towards_mario(void) { f32 sp34 = gMarioObject->header.gfx.pos[0] - o->oPosX; f32 sp30 = gMarioObject->header.gfx.pos[1] + 120.0f - o->oPosY; f32 sp2C = gMarioObject->header.gfx.pos[2] - o->oPosZ; @@ -52,7 +52,7 @@ void func_802F2E18(void) { bhv_1up_interact(); } -void func_802F2F8C(s16 sp1A) { +void one_up_move_away_from_mario(s16 sp1A) { o->oForwardVel = 8.0f; o->oMoveAngleYaw = o->oAngleToMario + 0x8000; bhv_1up_interact(); @@ -74,10 +74,10 @@ void bhv_1up_walking_loop(void) { if (o->oTimer == 0) play_sound(SOUND_GENERAL2_1UP_APPEAR, gDefaultSoundArgs); - func_802F2D40(); + one_up_loop_in_air(); if (o->oTimer == 37) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oAction = 1; o->oForwardVel = 2.0f; } @@ -111,10 +111,10 @@ void bhv_1up_running_away_loop(void) { if (o->oTimer == 0) play_sound(SOUND_GENERAL2_1UP_APPEAR, gDefaultSoundArgs); - func_802F2D40(); + one_up_loop_in_air(); if (o->oTimer == 37) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oAction = 1; o->oForwardVel = 8.0f; } @@ -122,7 +122,7 @@ void bhv_1up_running_away_loop(void) { case 1: spawn_object(o, MODEL_NONE, bhvSparkleSpawn); - func_802F2F8C(sp26); + one_up_move_away_from_mario(sp26); break; case 2: @@ -134,7 +134,7 @@ void bhv_1up_running_away_loop(void) { set_object_visibility(o, 3000); } -void func_802F3328(void) { +void sliding_1up_move(void) { s16 sp1E; sp1E = object_step(); @@ -161,7 +161,7 @@ void bhv_1up_sliding_loop(void) { break; case 1: - func_802F3328(); + sliding_1up_move(); break; case 2: @@ -192,7 +192,7 @@ void bhv_1up_jump_on_approach_loop(void) { case 1: sp26 = object_step(); - func_802F2F8C(sp26); + one_up_move_away_from_mario(sp26); spawn_object(o, MODEL_NONE, bhvSparkleSpawn); break; @@ -221,7 +221,7 @@ void bhv_1up_hidden_loop(void) { case 1: sp26 = object_step(); - func_802F2F8C(sp26); + one_up_move_away_from_mario(sp26); spawn_object(o, MODEL_NONE, bhvSparkleSpawn); break; @@ -236,10 +236,10 @@ void bhv_1up_hidden_loop(void) { if (o->oTimer >= 18) spawn_object(o, MODEL_NONE, bhvSparkleSpawn); - func_802F2D40(); + one_up_loop_in_air(); if (o->oTimer == 37) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oAction = 1; o->oForwardVel = 8.0f; } @@ -249,8 +249,8 @@ void bhv_1up_hidden_loop(void) { void bhv_1up_hidden_trigger_loop(void) { struct Object *sp1C; - if (are_objects_collided(o, gMarioObject) == 1) { - sp1C = obj_nearest_object_with_behavior(bhvHidden1up); + if (obj_check_if_collided_with_object(o, gMarioObject) == 1) { + sp1C = cur_obj_nearest_object_with_behavior(bhvHidden1up); if (sp1C != NULL) sp1C->o1UpHiddenUnkF4++; @@ -272,7 +272,7 @@ void bhv_1up_hidden_in_pole_loop(void) { break; case 1: - func_802F2E18(); + pole_1up_move_towards_mario(); sp26 = object_step(); break; @@ -281,10 +281,10 @@ void bhv_1up_hidden_in_pole_loop(void) { if (o->oTimer >= 18) spawn_object(o, MODEL_NONE, bhvSparkleSpawn); - func_802F2D40(); + one_up_loop_in_air(); if (o->oTimer == 37) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oAction = 1; o->oForwardVel = 10.0f; } @@ -295,8 +295,8 @@ void bhv_1up_hidden_in_pole_loop(void) { void bhv_1up_hidden_in_pole_trigger_loop(void) { struct Object *sp1C; - if (are_objects_collided(o, gMarioObject) == 1) { - sp1C = obj_nearest_object_with_behavior(bhvHidden1upInPole); + if (obj_check_if_collided_with_object(o, gMarioObject) == 1) { + sp1C = cur_obj_nearest_object_with_behavior(bhvHidden1upInPole); if (sp1C != NULL) { sp1C->o1UpHiddenUnkF4++; ; diff --git a/src/game/behaviors/piranha_bubbles.inc.c b/src/game/behaviors/piranha_bubbles.inc.c index 530858f..94313d1 100644 --- a/src/game/behaviors/piranha_bubbles.inc.c +++ b/src/game/behaviors/piranha_bubbles.inc.c @@ -16,7 +16,7 @@ void bhv_piranha_plant_waking_bubbles_loop(void) { o->oForwardVel = RandomFloat() * 10.0f + 5.0f; o->oMoveAngleYaw = RandomU16(); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } /** @@ -37,11 +37,11 @@ void bhv_piranha_plant_bubble_loop(void) { f32 doneShrinkingFrame; // the first frame after shrinking is done f32 beginGrowingFrame; // the frame just before growing begins - obj_set_pos_relative(parent, 0, 72.0f, 180.0f); + cur_obj_set_pos_relative(parent, 0, 72.0f, 180.0f); switch (o->oAction) { case PIRANHA_PLANT_BUBBLE_ACT_IDLE: - obj_disable_rendering(); + cur_obj_disable_rendering(); scale = 0; if (parent->oAction == PIRANHA_PLANT_ACT_SLEEPING) { @@ -51,7 +51,7 @@ void bhv_piranha_plant_bubble_loop(void) { case PIRANHA_PLANT_BUBBLE_ACT_GROW_SHRINK_LOOP: if (parent->oDistanceToMario < parent->oDrawingDistance) { - obj_enable_rendering(); + cur_obj_enable_rendering(); if (parent->oAction == PIRANHA_PLANT_ACT_SLEEPING) { /** @@ -84,12 +84,12 @@ void bhv_piranha_plant_bubble_loop(void) { o->oAction++; // move to PIRANHA_PLANT_BUBBLE_ACT_BURST } } else { - obj_disable_rendering(); + cur_obj_disable_rendering(); } break; case PIRANHA_PLANT_BUBBLE_ACT_BURST: - obj_disable_rendering(); + cur_obj_disable_rendering(); scale = 0; // Spawn 15 small bubbles to make it look like this bubble burst. @@ -101,5 +101,5 @@ void bhv_piranha_plant_bubble_loop(void) { scale = 1.0f; // this has no effect; it is set to 0 in the idle state break; } - obj_scale(scale); + cur_obj_scale(scale); } diff --git a/src/game/behaviors/piranha_plant.inc.c b/src/game/behaviors/piranha_plant.inc.c index 4fe0f18..e8abe08 100644 --- a/src/game/behaviors/piranha_plant.inc.c +++ b/src/game/behaviors/piranha_plant.inc.c @@ -10,8 +10,8 @@ * directly to the sleeping state. */ void piranha_plant_act_idle(void) { - obj_become_intangible(); - set_obj_animation_and_sound_state(8); + cur_obj_become_intangible(); + cur_obj_init_animation_with_sound(8); #if BUGFIX_PIRANHA_PLANT_STATE_RESET /** @@ -19,7 +19,7 @@ void piranha_plant_act_idle(void) { * with a scale below 1, which would cause it to appear shrunken. See * documentation for, and calls to, piranha_plant_reset_when_far(). */ - obj_scale(1); + cur_obj_scale(1); #endif if (o->oDistanceToMario < 1200.0f) { @@ -41,7 +41,7 @@ s32 piranha_plant_check_interactions(void) { if (o->oInteractStatus & INT_STATUS_INTERACTED) { func_80321080(50); if (o->oInteractStatus & INT_STATUS_WAS_ATTACKED) { - PlaySound2(SOUND_OBJ2_PIRANHA_PLANT_DYING); + cur_obj_play_sound_2(SOUND_OBJ2_PIRANHA_PLANT_DYING); // Spawn 20 intangible purple particles that quickly dissipate. for (i = 0; i < 20; i++) { @@ -67,13 +67,13 @@ s32 piranha_plant_check_interactions(void) { * to piranha_plant_check_interactions(). */ void piranha_plant_act_sleeping(void) { - obj_become_tangible(); + cur_obj_become_tangible(); o->oInteractType = INTERACT_BOUNCE_TOP; - set_obj_animation_and_sound_state(8); + cur_obj_init_animation_with_sound(8); - obj_set_hitbox_radius_and_height(250.0f, 200.0f); - obj_set_hurtbox_radius_and_height(150.0f, 100.0f); + cur_obj_set_hitbox_radius_and_height(250.0f, 200.0f); + cur_obj_set_hurtbox_radius_and_height(150.0f, 100.0f); #if BUGFIX_PIRANHA_PLANT_SLEEP_DAMAGE /** @@ -150,10 +150,10 @@ void piranha_plant_reset_when_far(void) { * state. */ void piranha_plant_attacked(void) { - obj_become_intangible(); - set_obj_animation_and_sound_state(2); + cur_obj_become_intangible(); + cur_obj_init_animation_with_sound(2); o->oInteractStatus = 0; - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) o->oAction = PIRANHA_PLANT_ACT_SHRINK_AND_DIE; #if BUGFIX_PIRANHA_PLANT_STATE_RESET piranha_plant_reset_when_far(); // see this function's comment @@ -166,7 +166,7 @@ void piranha_plant_attacked(void) { */ void piranha_plant_act_shrink_and_die(void) { if (o->oTimer == 0) { - PlaySound2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); + cur_obj_play_sound_2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); o->oPiranhaPlantScale = 1.0f; } @@ -181,11 +181,11 @@ void piranha_plant_act_shrink_and_die(void) { o->oPiranhaPlantScale = o->oPiranhaPlantScale - 0.04; } else { o->oPiranhaPlantScale = 0.0f; - obj_spawn_loot_blue_coin(); + cur_obj_spawn_loot_blue_coin(); o->oAction = PIRANHA_PLANT_ACT_WAIT_TO_RESPAWN; } - obj_scale(o->oPiranhaPlantScale); + cur_obj_scale(o->oPiranhaPlantScale); #if BUGFIX_PIRANHA_PLANT_STATE_RESET piranha_plant_reset_when_far(); // see this function's comment @@ -206,7 +206,7 @@ void piranha_plant_act_wait_to_respawn(void) { * grown, set it to the idle state. */ void piranha_plant_act_respawn(void) { - set_obj_animation_and_sound_state(8); + cur_obj_init_animation_with_sound(8); if (o->oTimer == 0) { o->oPiranhaPlantScale = 0.3f; } @@ -224,7 +224,7 @@ void piranha_plant_act_respawn(void) { o->oPiranhaPlantScale = 1.0f; o->oAction = PIRANHA_PLANT_ACT_IDLE; } - obj_scale(o->oPiranhaPlantScale); + cur_obj_scale(o->oPiranhaPlantScale); } /** @@ -242,25 +242,25 @@ static s8 sPiranhaPlantBiteSoundFrames[] = { 12, 28, 50, 64, -1 }; void piranha_plant_act_biting(void) { s32 frame = o->header.gfx.unk38.animFrame; - obj_become_tangible(); + cur_obj_become_tangible(); o->oInteractType = INTERACT_DAMAGE; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); - obj_set_hitbox_radius_and_height(150.0f, 100.0f); - obj_set_hurtbox_radius_and_height(150.0f, 100.0f); + cur_obj_set_hitbox_radius_and_height(150.0f, 100.0f); + cur_obj_set_hurtbox_radius_and_height(150.0f, 100.0f); // Play a bite sound effect on certain frames. - if (item_in_array(frame, sPiranhaPlantBiteSoundFrames)) { - PlaySound2(SOUND_OBJ2_PIRANHA_PLANT_BITE); + if (is_item_in_array(frame, sPiranhaPlantBiteSoundFrames)) { + cur_obj_play_sound_2(SOUND_OBJ2_PIRANHA_PLANT_BITE); } // Move to face the player. o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 0x400); if (o->oDistanceToMario > 500.0f) - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) o->oAction = PIRANHA_PLANT_ACT_STOPPED_BITING; // If the player is wearing the Metal Cap and interacts with the Piranha @@ -290,10 +290,10 @@ s32 mario_moving_fast_enough_to_make_piranha_plant_bite(void) { * Plant start biting again. Otherwise, make it go back to sleep. */ void piranha_plant_act_stopped_biting(void) { - obj_become_intangible(); - set_obj_animation_and_sound_state(6); + cur_obj_become_intangible(); + cur_obj_init_animation_with_sound(6); - if (func_8029F788()) + if (cur_obj_check_if_near_animation_end()) o->oAction = PIRANHA_PLANT_ACT_SLEEPING; /** @@ -327,14 +327,14 @@ void (*TablePiranhaPlantActions[])(void) = { * Main loop for bhvPiranhaPlant. */ void bhv_piranha_plant_loop(void) { - obj_call_action_function(TablePiranhaPlantActions); + cur_obj_call_action_function(TablePiranhaPlantActions); // In WF, hide all Piranha Plants once high enough up. if (gCurrLevelNum == LEVEL_WF) { if (gMarioObject->oPosY > 3400.0f) - obj_hide(); + cur_obj_hide(); else - obj_unhide(); + cur_obj_unhide(); } o->oInteractStatus = 0; } diff --git a/src/game/behaviors/platform_on_track.inc.c b/src/game/behaviors/platform_on_track.inc.c index 0d9c1de..2d549bd 100644 --- a/src/game/behaviors/platform_on_track.inc.c +++ b/src/game/behaviors/platform_on_track.inc.c @@ -40,7 +40,7 @@ static void platform_on_track_reset(void) { static void platform_on_track_mario_not_on_platform(void) { if (!((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_DISAPPEAR)) { // Once oTimer reaches 150, blink 40 times - if (obj_wait_then_blink(150, 40)) { + if (cur_obj_wait_then_blink(150, 40)) { platform_on_track_reset(); o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; } @@ -129,9 +129,9 @@ static void platform_on_track_act_move_along_track(void) { s16 initialAngle; if (!o->oPlatformOnTrackIsNotSkiLift) { - PlaySound(SOUND_ENV_ELEVATOR3); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR3); } else if (!o->oPlatformOnTrackIsNotHMC) { - PlaySound(SOUND_ENV_ELEVATOR1); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR1); } // Fall after reaching the last waypoint if desired @@ -143,7 +143,7 @@ static void platform_on_track_act_move_along_track(void) { if (o->oPlatformOnTrackPrevWaypointFlags != 0 && !o->oPlatformOnTrackIsNotSkiLift) { if (o->oPlatformOnTrackPrevWaypointFlags == WAYPOINT_FLAGS_END || o->oPlatformOnTrackPrevWaypointFlags == WAYPOINT_FLAGS_PLATFORM_ON_TRACK_PAUSE) { - PlaySound2(SOUND_GENERAL_UNKNOWN4_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN4_LOWPRIO); o->oForwardVel = 0.0f; if (o->oPlatformOnTrackPrevWaypointFlags == WAYPOINT_FLAGS_END) { @@ -228,7 +228,7 @@ static void platform_on_track_act_pause_briefly(void) { * and eventually blinking and disappearing. */ static void platform_on_track_act_fall(void) { - obj_move_using_vel_and_gravity(); + cur_obj_move_using_vel_and_gravity(); if (gMarioObject->platform != o) { platform_on_track_mario_not_on_platform(); @@ -306,6 +306,6 @@ void bhv_track_ball_update(void) { s16 relativeIndex = (s16) o->oBehParams2ndByte - (s16) o->parentObj->oPlatformOnTrackBaseBallIndex - 1; if (relativeIndex < 1 || relativeIndex > 5) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } diff --git a/src/game/behaviors/pokey.inc.c b/src/game/behaviors/pokey.inc.c index beb284e..df5d11f 100644 --- a/src/game/behaviors/pokey.inc.c +++ b/src/game/behaviors/pokey.inc.c @@ -47,9 +47,9 @@ void bhv_pokey_body_part_update(void) { if (obj_update_standard_actions(3.0f)) { if (o->parentObj->oAction == POKEY_ACT_UNLOAD_PARTS) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); obj_update_blinking(&o->oPokeyBodyPartBlinkTimer, 30, 60, 4); // If the body part above us is dead, then decrease body part index @@ -78,7 +78,7 @@ void bhv_pokey_body_part_update(void) { else if (o->parentObj->oPokeyBottomBodyPartSize < 1.0f && o->oBehParams2ndByte + 1 == o->parentObj->oPokeyNumAliveBodyParts) { approach_f32_ptr(&o->parentObj->oPokeyBottomBodyPartSize, 1.0f, 0.1f); - obj_scale(o->parentObj->oPokeyBottomBodyPartSize * 3.0f); + cur_obj_scale(o->parentObj->oPokeyBottomBodyPartSize * 3.0f); } //! Pausing causes jumps in offset angle @@ -120,7 +120,7 @@ void bhv_pokey_body_part_update(void) { o->parentObj->oPokeyAliveBodyPartFlags = o->parentObj->oPokeyAliveBodyPartFlags & ((1 << o->oBehParams2ndByte) ^ ~0); } else if (o->parentObj->oPokeyHeadWasKilled) { - obj_become_intangible(); + cur_obj_become_intangible(); if (--o->oPokeyBodyPartDeathDelayAfterHeadKilled < 0) { o->parentObj->oPokeyNumAliveBodyParts -= 1; @@ -133,7 +133,7 @@ void bhv_pokey_body_part_update(void) { o->oPokeyBodyPartDeathDelayAfterHeadKilled = (o->oBehParams2ndByte << 2) + 20; } - obj_move_standard(-78); + cur_obj_move_standard(-78); } } else { o->oAnimState = 1; @@ -160,7 +160,7 @@ static void pokey_act_uninitialized(void) { bodyPart = spawn_object_relative(i, 0, -i * 120 + 480, 0, o, partModel, bhvPokeyBodyPart); if (bodyPart != NULL) { - scale_object(bodyPart, 3.0f); + obj_scale(bodyPart, 3.0f); } partModel = MODEL_POKEY_BODY_PART; @@ -184,13 +184,13 @@ static void pokey_act_wander(void) { struct Object *bodyPart; if (o->oPokeyNumAliveBodyParts == 0) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else if (o->oDistanceToMario > 2500.0f) { o->oAction = POKEY_ACT_UNLOAD_PARTS; o->oForwardVel = 0.0f; } else { treat_far_home_as_mario(1000.0f); - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->oPokeyHeadWasKilled) { o->oForwardVel = 0.0f; @@ -213,7 +213,7 @@ static void pokey_act_wander(void) { o->oPokeyNumAliveBodyParts += 1; o->oPokeyBottomBodyPartSize = 0.0f; - scale_object(bodyPart, 0.0f); + obj_scale(bodyPart, 0.0f); } o->oTimer = 0; @@ -266,11 +266,11 @@ static void pokey_act_wander(void) { } } - obj_rotate_yaw_toward(o->oPokeyTargetYaw, 0x200); + cur_obj_rotate_yaw_toward(o->oPokeyTargetYaw, 0x200); } } - obj_move_standard(-78); + cur_obj_move_standard(-78); } } @@ -281,7 +281,7 @@ static void pokey_act_wander(void) { */ static void pokey_act_unload_parts(void) { o->oAction = POKEY_ACT_UNINITIALIZED; - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); } /** diff --git a/src/game/behaviors/pole.inc.c b/src/game/behaviors/pole.inc.c index c871243..d727751 100644 --- a/src/game/behaviors/pole.inc.c +++ b/src/game/behaviors/pole.inc.c @@ -21,7 +21,7 @@ void bhv_pole_init(void) { } /** - * Main loop for bhvGiantPole. It is equivalent to BehClimbDetectLoop() except + * Main loop for bhvGiantPole. It is equivalent to bhv_pole_base_loop() except * for the fact that it spawns a yellow sphere at the top of the pole on the * first frame. */ @@ -31,5 +31,5 @@ void bhv_giant_pole_loop(void) { topBall = spawn_object(o, MODEL_YELLOW_SPHERE, bhvYellowBall); topBall->oPosY += o->hitboxHeight + 50.0f; } - BehClimbDetectLoop(); + bhv_pole_base_loop(); } diff --git a/src/game/behaviors/pole_base.inc.c b/src/game/behaviors/pole_base.inc.c index b0492a9..3ae63fe 100644 --- a/src/game/behaviors/pole_base.inc.c +++ b/src/game/behaviors/pole_base.inc.c @@ -1,9 +1,9 @@ // pole_base.inc.c -void BehClimbDetectLoop(void) { +void bhv_pole_base_loop(void) { if (o->oPosY - 10.0f < gMarioObject->oPosY && gMarioObject->oPosY < o->oPosY + o->hitboxHeight + 30.0f) if (o->oTimer > 10) if (!(gMarioStates->action & MARIO_PUNCHING)) - obj_push_mario_away(70.0f); + cur_obj_push_mario_away(70.0f); } diff --git a/src/game/behaviors/purple_switch.inc.c b/src/game/behaviors/purple_switch.inc.c index 0a1c464..f192469 100644 --- a/src/game/behaviors/purple_switch.inc.c +++ b/src/game/behaviors/purple_switch.inc.c @@ -14,8 +14,8 @@ void bhv_purple_switch_loop(void) { * switch's middle section, transition to the pressed state. */ case PURPLE_SWITCH_IDLE: - obj_set_model(MODEL_PURPLE_SWITCH); - obj_scale(1.5f); + cur_obj_set_model(MODEL_PURPLE_SWITCH); + cur_obj_scale(1.5f); if (gMarioObject->platform == o && !(gMarioStates->action & MARIO_UNKNOWN_13)) { if (lateral_dist_between_objects(o, gMarioObject) < 127.5) { o->oAction = PURPLE_SWITCH_PRESSED; @@ -27,11 +27,11 @@ void bhv_purple_switch_loop(void) { * Immediately transition to the ticking state. */ case PURPLE_SWITCH_PRESSED: - func_802A3398(2, 3, 1.5f, 0.2f); + cur_obj_scale_over_time(2, 3, 1.5f, 0.2f); if (o->oTimer == 3) { - PlaySound2(SOUND_GENERAL2_PURPLE_SWITCH); + cur_obj_play_sound_2(SOUND_GENERAL2_PURPLE_SWITCH); o->oAction = PURPLE_SWITCH_TICKING; - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_shake_screen(SHAKE_POS_SMALL); } break; /** @@ -59,7 +59,7 @@ void bhv_purple_switch_loop(void) { * idle state. */ case PURPLE_SWITCH_UNPRESSED: - func_802A3398(2, 3, 0.2f, 1.5f); + cur_obj_scale_over_time(2, 3, 0.2f, 1.5f); if (o->oTimer == 3) { o->oAction = PURPLE_SWITCH_IDLE; } @@ -70,7 +70,7 @@ void bhv_purple_switch_loop(void) { * unpressed state. */ case PURPLE_SWITCH_WAIT_FOR_MARIO_TO_GET_OFF: - if (!obj_is_mario_on_platform()) { + if (!cur_obj_is_mario_on_platform()) { o->oAction = PURPLE_SWITCH_UNPRESSED; } break; diff --git a/src/game/behaviors/pyramid_elevator.inc.c b/src/game/behaviors/pyramid_elevator.inc.c index 5be4b5a..4754fc5 100644 --- a/src/game/behaviors/pyramid_elevator.inc.c +++ b/src/game/behaviors/pyramid_elevator.inc.c @@ -74,8 +74,8 @@ void bhv_pyramid_elevator_loop(void) { void bhv_pyramid_elevator_trajectory_marker_ball_loop(void) { struct Object *elevator; - obj_scale(0.15f); - elevator = obj_nearest_object_with_behavior(bhvPyramidElevator); + cur_obj_scale(0.15f); + elevator = cur_obj_nearest_object_with_behavior(bhvPyramidElevator); if (elevator != NULL) { if (elevator->oAction != PYRAMID_ELEVATOR_IDLE) { diff --git a/src/game/behaviors/pyramid_top.inc.c b/src/game/behaviors/pyramid_top.inc.c index 1907124..2731457 100644 --- a/src/game/behaviors/pyramid_top.inc.c +++ b/src/game/behaviors/pyramid_top.inc.c @@ -72,7 +72,7 @@ void bhv_pyramid_top_explode(void) { struct Object *pyramidFragment; s16 i; - func_802AA618(0, 0, 690); + spawn_mist_particles_variable(0, 0, 690); // Generate 30 pyramid fragments with random properties. for (i = 0; i < 30; i++) { @@ -101,7 +101,7 @@ void bhv_pyramid_top_loop(void) { case PYRAMID_TOP_ACT_SPINNING: if (o->oTimer == 0) { - PlaySound2(SOUND_GENERAL2_PYRAMID_TOP_SPIN); + cur_obj_play_sound_2(SOUND_GENERAL2_PYRAMID_TOP_SPIN); } bhv_pyramid_top_spinning(); @@ -124,7 +124,7 @@ void bhv_pyramid_top_fragment_init(void) { o->oFriction = 0.999f; o->oBuoyancy = 2.0f; o->oAnimState = 3; - obj_scale(o->oPyramidTopFragmentsScale); + cur_obj_scale(o->oPyramidTopFragmentsScale); } /** @@ -146,8 +146,8 @@ void bhv_pyramid_top_fragment_loop(void) { * top's total count of touched detectors, and deactivate the detector. */ void bhv_pyramid_pillar_touch_detector_loop(void) { - obj_become_tangible(); - if (are_objects_collided(o, gMarioObject) == 1) { + cur_obj_become_tangible(); + if (obj_check_if_collided_with_object(o, gMarioObject) == 1) { // Increase the pyramid top's count of pillars touched. o->parentObj->oPyramidTopPillarsTouched++; o->activeFlags = 0; diff --git a/src/game/behaviors/racing_penguin.inc.c b/src/game/behaviors/racing_penguin.inc.c index 85f4a3a..2939642 100644 --- a/src/game/behaviors/racing_penguin.inc.c +++ b/src/game/behaviors/racing_penguin.inc.c @@ -11,7 +11,7 @@ static struct RacingPenguinData sRacingPenguinData[] = { void bhv_racing_penguin_init(void) { if (gMarioState->numStars == 120) { - obj_scale(8.0f); + cur_obj_scale(8.0f); o->header.gfx.scale[1] = 5.0f; o->oBehParams2ndByte = 1; } @@ -19,7 +19,7 @@ void bhv_racing_penguin_init(void) { static void racing_penguin_act_wait_for_mario(void) { if (o->oTimer > o->oRacingPenguinInitTextCooldown && o->oPosY - gMarioObject->oPosY <= 0.0f - && obj_is_mario_in_range_and_ready_to_speak(400.0f, 400.0f)) { + && cur_obj_can_mario_activate_textbox_2(400.0f, 400.0f)) { o->oAction = RACING_PENGUIN_ACT_SHOW_INIT_TEXT; } } @@ -30,10 +30,10 @@ static void racing_penguin_act_show_init_text(void) { response = obj_update_race_proposition_dialog(sRacingPenguinData[o->oBehParams2ndByte].text); if (response == 1) { - child = obj_nearest_object_with_behavior(bhvPenguinRaceFinishLine); + child = cur_obj_nearest_object_with_behavior(bhvPenguinRaceFinishLine); child->parentObj = o; - child = obj_nearest_object_with_behavior(bhvPenguinRaceShortcutCheck); + child = cur_obj_nearest_object_with_behavior(bhvPenguinRaceShortcutCheck); child->parentObj = o; o->oPathedStartWaypoint = o->oPathedPrevWaypoint = @@ -55,21 +55,21 @@ static void racing_penguin_act_prepare_for_race(void) { o->oForwardVel = 20.0f; } - obj_rotate_yaw_toward(0x4000, 2500); + cur_obj_rotate_yaw_toward(0x4000, 2500); } static void racing_penguin_act_race(void) { f32 targetSpeed; f32 minSpeed; - if (obj_follow_path(0) == PATH_REACHED_END) { + if (cur_obj_follow_path(0) == PATH_REACHED_END) { o->oRacingPenguinReachedBottom = TRUE; o->oAction = RACING_PENGUIN_ACT_FINISH_RACE; } else { targetSpeed = o->oPosY - gMarioObject->oPosY; minSpeed = 70.0f; - PlaySound(SOUND_AIR_ROUGH_SLIDE); + cur_obj_play_sound_1(SOUND_AIR_ROUGH_SLIDE); if (targetSpeed < 100.0f || (o->oPathedPrevWaypointFlags & WAYPOINT_MASK_00FF) >= 35) { if ((o->oPathedPrevWaypointFlags & WAYPOINT_MASK_00FF) >= 35) { @@ -85,10 +85,10 @@ static void racing_penguin_act_race(void) { clamp_f32(&targetSpeed, minSpeed, 150.0f); obj_forward_vel_approach(targetSpeed, 0.4f); - set_obj_animation_and_sound_state(1); - obj_rotate_yaw_toward(o->oPathedTargetYaw, (s32)(15.0f * o->oForwardVel)); + cur_obj_init_animation_with_sound(1); + cur_obj_rotate_yaw_toward(o->oPathedTargetYaw, (s32)(15.0f * o->oForwardVel)); - if (func_8029F828() && (o->oMoveFlags & 0x00000003)) { + if (cur_obj_check_if_at_animation_end() && (o->oMoveFlags & 0x00000003)) { spawn_object_relative_with_scale(0, 0, -100, 0, 4.0f, o, MODEL_SMOKE, bhvWhitePuffSmoke2); } } @@ -105,7 +105,7 @@ static void racing_penguin_act_race(void) { static void racing_penguin_act_finish_race(void) { if (o->oForwardVel != 0.0f) { if (o->oTimer > 5 && (o->oMoveFlags & 0x00000200)) { - PlaySound2(SOUND_OBJ_POUNDING_LOUD); + cur_obj_play_sound_2(SOUND_OBJ_POUNDING_LOUD); set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ); o->oForwardVel = 0.0f; } @@ -118,11 +118,11 @@ static void racing_penguin_act_show_final_text(void) { s32 textResult; if (o->oRacingPenguinFinalTextbox == 0) { - if (obj_rotate_yaw_toward(0, 200)) { - set_obj_animation_and_sound_state(3); + if (cur_obj_rotate_yaw_toward(0, 200)) { + cur_obj_init_animation_with_sound(3); o->oForwardVel = 0.0f; - if (obj_is_mario_in_range_and_ready_to_speak(400.0f, 400.0f)) { + if (cur_obj_can_mario_activate_textbox_2(400.0f, 400.0f)) { if (o->oRacingPenguinMarioWon) { if (o->oRacingPenguinMarioCheated) { o->oRacingPenguinFinalTextbox = DIALOG_132; @@ -135,7 +135,7 @@ static void racing_penguin_act_show_final_text(void) { } } } else { - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); #ifndef VERSION_JP play_penguin_walking_sound(1); @@ -144,22 +144,22 @@ static void racing_penguin_act_show_final_text(void) { o->oForwardVel = 4.0f; } } else if (o->oRacingPenguinFinalTextbox > 0) { - if ((textResult = obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, o->oRacingPenguinFinalTextbox)) != 0) { + if ((textResult = cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, o->oRacingPenguinFinalTextbox)) != 0) { o->oRacingPenguinFinalTextbox = -1; o->oTimer = 0; } } else if (o->oRacingPenguinMarioWon) { #ifdef VERSION_JP - create_star(-7339.0f, -5700.0f, -6774.0f); + spawn_default_star(-7339.0f, -5700.0f, -6774.0f); #else - obj_spawn_star_at_y_offset(-7339.0f, -5700.0f, -6774.0f, 200.0f); + cur_obj_spawn_star_at_y_offset(-7339.0f, -5700.0f, -6774.0f, 200.0f); #endif o->oRacingPenguinMarioWon = FALSE; } } void bhv_racing_penguin_update(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case RACING_PENGUIN_ACT_WAIT_FOR_MARIO: @@ -182,9 +182,9 @@ void bhv_racing_penguin_update(void) { break; } - obj_move_standard(78); - obj_align_gfx_with_floor(); - obj_push_mario_away_from_cylinder(sRacingPenguinData[o->oBehParams2ndByte].radius, + cur_obj_move_standard(78); + cur_obj_align_gfx_with_floor(); + cur_obj_push_mario_away_from_cylinder(sRacingPenguinData[o->oBehParams2ndByte].radius, sRacingPenguinData[o->oBehParams2ndByte].height); } diff --git a/src/game/behaviors/recovery_heart.inc.c b/src/game/behaviors/recovery_heart.inc.c index d730585..6bebfaa 100644 --- a/src/game/behaviors/recovery_heart.inc.c +++ b/src/game/behaviors/recovery_heart.inc.c @@ -12,10 +12,10 @@ struct ObjectHitbox sRecoveryHeartHitbox = { }; void bhv_recovery_heart_loop(void) { - set_object_hitbox(o, &sRecoveryHeartHitbox); - if (are_objects_collided(o, gMarioObject)) { + obj_set_hitbox(o, &sRecoveryHeartHitbox); + if (obj_check_if_collided_with_object(o, gMarioObject)) { if (o->oSpinningHeartPlayedSound == 0) { - PlaySound2(SOUND_GENERAL_HEART_SPIN); + cur_obj_play_sound_2(SOUND_GENERAL_HEART_SPIN); o->oSpinningHeartPlayedSound += 1; } diff --git a/src/game/behaviors/red_coin.inc.c b/src/game/behaviors/red_coin.inc.c index 02f3c57..1e5c858 100644 --- a/src/game/behaviors/red_coin.inc.c +++ b/src/game/behaviors/red_coin.inc.c @@ -30,11 +30,11 @@ void bhv_red_coin_init(void) { struct Object *hiddenRedCoinStar; // Set the red coins to have a parent of the closest red coin star. - hiddenRedCoinStar = obj_nearest_object_with_behavior(bhvHiddenRedCoinStar); + hiddenRedCoinStar = cur_obj_nearest_object_with_behavior(bhvHiddenRedCoinStar); if (hiddenRedCoinStar != NULL) o->parentObj = hiddenRedCoinStar; else { - hiddenRedCoinStar = obj_nearest_object_with_behavior(bhvBowserCourseRedCoinStar); + hiddenRedCoinStar = cur_obj_nearest_object_with_behavior(bhvBowserCourseRedCoinStar); if (hiddenRedCoinStar != NULL) { o->parentObj = hiddenRedCoinStar; } else { @@ -42,7 +42,7 @@ void bhv_red_coin_init(void) { } } - set_object_hitbox(o, &sRedCoinHitbox); + obj_set_hitbox(o, &sRedCoinHitbox); } /** @@ -74,7 +74,7 @@ void bhv_red_coin_loop(void) { #endif } - CoinCollected(); + coin_collected(); // Despawn the coin. o->oInteractStatus = 0; } diff --git a/src/game/behaviors/rolling_log.inc.c b/src/game/behaviors/rolling_log.inc.c index 4d11918..dd88e55 100644 --- a/src/game/behaviors/rolling_log.inc.c +++ b/src/game/behaviors/rolling_log.inc.c @@ -18,7 +18,7 @@ void bhv_ttm_rolling_log_init(void) { o->oAngleVelPitch = 0; } -void func_802F238C(void) { +void rolling_log_roll_log(void) { f32 sp24; if (gMarioObject->platform == o) { @@ -63,7 +63,7 @@ void bhv_rolling_log_loop(void) { f32 prevX = o->oPosX; f32 prevZ = o->oPosZ; - func_802F238C(); + rolling_log_roll_log(); o->oForwardVel = o->oAngleVelPitch / 0x40; o->oVelX = o->oForwardVel * sins(o->oMoveAngleYaw); @@ -82,11 +82,11 @@ void bhv_rolling_log_loop(void) { o->oFaceAnglePitch += o->oAngleVelPitch; if (absf_2(o->oFaceAnglePitch & 0x1FFF) < 528.0f && o->oAngleVelPitch != 0) { - PlaySound2(SOUND_GENERAL_UNKNOWN1_2); + cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN1_2); } } -void func_802F2820(void) { +void volcano_act_1(void) { o->oRollingLogUnkF4 += 4.0f; o->oAngleVelPitch += o->oRollingLogUnkF4; o->oFaceAnglePitch -= o->oAngleVelPitch; @@ -96,12 +96,12 @@ void func_802F2820(void) { o->oAngleVelPitch = 0; o->oRollingLogUnkF4 = 0; o->oAction = 2; - PlaySound2(SOUND_GENERAL_BIG_POUND); + cur_obj_play_sound_2(SOUND_GENERAL_BIG_POUND); set_camera_shake_from_point(SHAKE_POS_LARGE, o->oPosX, o->oPosY, o->oPosZ); } } -void func_802F2924(void) { +void volcano_act_3(void) { o->oAngleVelPitch = 0x90; o->oFaceAnglePitch += o->oAngleVelPitch; if (o->oFaceAnglePitch > 0) @@ -111,17 +111,17 @@ void func_802F2924(void) { o->oAction = 0; } -void bhvLllVolcanoFallingTrap_loop(void) { +void bhv_volcano_trap_loop(void) { switch (o->oAction) { case 0: if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 1000)) { o->oAction = 1; - PlaySound2(SOUND_GENERAL_QUIET_POUND2); + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_POUND2); } break; case 1: - func_802F2820(); + volcano_act_1(); break; case 2: @@ -129,13 +129,13 @@ void bhvLllVolcanoFallingTrap_loop(void) { o->oPosY = o->oHomeY + sins(o->oTimer * 0x1000) * 10.0f; } if (o->oTimer == 50) { - PlaySound2(SOUND_GENERAL_UNK45); + cur_obj_play_sound_2(SOUND_GENERAL_UNK45); o->oAction = 3; } break; case 3: - func_802F2924(); + volcano_act_3(); break; } } diff --git a/src/game/behaviors/rotating_platform.inc.c b/src/game/behaviors/rotating_platform.inc.c index 83a12d5..1ad6f73 100644 --- a/src/game/behaviors/rotating_platform.inc.c +++ b/src/game/behaviors/rotating_platform.inc.c @@ -19,17 +19,17 @@ void bhv_wf_rotating_wooden_platform_loop(void) { o->oAngleVelYaw = 0x100; if (o->oTimer > 126) o->oAction = 0; - PlaySound(SOUND_ENV_ELEVATOR2); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR2); } - obj_rotate_face_angle_using_vel(); + cur_obj_rotate_face_angle_using_vel(); } void bhv_rotating_platform_loop(void) { s8 sp1F = o->oBehParams >> 24; if (o->oTimer == 0) { - set_object_collision_data(o, sWFRotatingPlatformData[o->oBehParams2ndByte].collisionData); + obj_set_collision_data(o, sWFRotatingPlatformData[o->oBehParams2ndByte].collisionData); o->oCollisionDistance = sWFRotatingPlatformData[o->oBehParams2ndByte].collisionDistance; - obj_scale(sWFRotatingPlatformData[o->oBehParams2ndByte].scale * 0.01f); + cur_obj_scale(sWFRotatingPlatformData[o->oBehParams2ndByte].scale * 0.01f); } o->oAngleVelYaw = sp1F << 4; o->oFaceAngleYaw += o->oAngleVelYaw; diff --git a/src/game/behaviors/scuttlebug.inc.c b/src/game/behaviors/scuttlebug.inc.c index 198f004..31de84a 100644 --- a/src/game/behaviors/scuttlebug.inc.c +++ b/src/game/behaviors/scuttlebug.inc.c @@ -12,7 +12,7 @@ struct ObjectHitbox sScuttlebugHitbox = { /* hurtboxHeight: */ 60, }; -s32 func_802C5A64(s32 *a0) { +s32 update_angle_from_move_flags(s32 *a0) { if (o->oMoveFlags & 0x200) { *a0 = o->oWallAngle; return 1; @@ -26,9 +26,9 @@ s32 func_802C5A64(s32 *a0) { void bhv_scuttlebug_loop(void) { UNUSED s32 unused; f32 sp18; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->oSubAction != 0 - && obj_set_hitbox_and_die_if_attacked(&sScuttlebugHitbox, SOUND_OBJ_DYING_ENEMY1, + && cur_obj_set_hitbox_and_die_if_attacked(&sScuttlebugHitbox, SOUND_OBJ_DYING_ENEMY1, o->oScuttlebugUnkF4)) o->oSubAction = 3; if (o->oSubAction != 1) @@ -36,7 +36,7 @@ void bhv_scuttlebug_loop(void) { switch (o->oSubAction) { case 0: if (o->oMoveFlags & 1) - PlaySound2(SOUND_OBJ_GOOMBA_ALERT); + cur_obj_play_sound_2(SOUND_OBJ_GOOMBA_ALERT); if (o->oMoveFlags & 3) { o->oHomeX = o->oPosX; o->oHomeY = o->oPosY; @@ -46,16 +46,16 @@ void bhv_scuttlebug_loop(void) { break; case 1: o->oForwardVel = 5.0f; - if (obj_lateral_dist_from_mario_to_home() > 1000.0f) - o->oAngleToMario = obj_angle_to_home(); + if (cur_obj_lateral_dist_from_mario_to_home() > 1000.0f) + o->oAngleToMario = cur_obj_angle_to_home(); else { if (o->oScuttlebugUnkF8 == 0) { o->oScuttlebugUnkFC = 0; - o->oAngleToMario = angle_to_object(o, gMarioObject); + o->oAngleToMario = obj_angle_to_object(o, gMarioObject); if (abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw) < 0x800) { o->oScuttlebugUnkF8 = 1; o->oVelY = 20.0f; - PlaySound2(SOUND_OBJ2_SCUTTLEBUG_ALERT); + cur_obj_play_sound_2(SOUND_OBJ2_SCUTTLEBUG_ALERT); } } else if (o->oScuttlebugUnkF8 == 1) { o->oForwardVel = 15.0f; @@ -64,23 +64,23 @@ void bhv_scuttlebug_loop(void) { o->oScuttlebugUnkF8 = 0; } } - if (func_802C5A64(&o->oAngleToMario)) + if (update_angle_from_move_flags(&o->oAngleToMario)) o->oSubAction = 2; - obj_rotate_yaw_toward(o->oAngleToMario, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); break; case 2: o->oForwardVel = 5.0f; if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario) o->oSubAction = 1; if (o->oPosY - o->oHomeY < -200.0f) - mark_object_for_deletion(o); - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + obj_mark_for_deletion(o); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); break; case 3: o->oFlags &= ~8; o->oForwardVel = -10.0f; o->oVelY = 30.0f; - PlaySound2(SOUND_OBJ2_SCUTTLEBUG_ALERT); + cur_obj_play_sound_2(SOUND_OBJ2_SCUTTLEBUG_ALERT); o->oSubAction++; break; case 4: @@ -104,23 +104,23 @@ void bhv_scuttlebug_loop(void) { sp18 = 1.0f; else sp18 = 3.0f; - func_8029ED98(0, sp18); + cur_obj_init_animation_with_accel_and_sound(0, sp18); if (o->oMoveFlags & 3) - func_802BE2E8(1, 23, SOUND_OBJ2_SCUTTLEBUG_WALK); + set_obj_anim_with_accel_and_sound(1, 23, SOUND_OBJ2_SCUTTLEBUG_WALK); if (o->parentObj != o) { if (obj_is_hidden(o)) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->activeFlags == 0) o->parentObj->oScuttlebugSpawnerUnk88 = 1; } - obj_move_standard(-50); + cur_obj_move_standard(-50); } void bhv_scuttlebug_spawn_loop(void) { struct Object *scuttlebug; if (o->oAction == 0) { if (o->oTimer > 30 && 500.0f < o->oDistanceToMario && o->oDistanceToMario < 1500.0f) { - PlaySound2(SOUND_OBJ2_SCUTTLEBUG_ALERT); + cur_obj_play_sound_2(SOUND_OBJ2_SCUTTLEBUG_ALERT); scuttlebug = spawn_object(o, MODEL_SCUTTLEBUG, bhvScuttlebug); scuttlebug->oScuttlebugUnkF4 = o->oScuttlebugSpawnerUnkF4; scuttlebug->oForwardVel = 30.0f; diff --git a/src/game/behaviors/seesaw_platform.inc.c b/src/game/behaviors/seesaw_platform.inc.c index fcece7c..71cbba0 100644 --- a/src/game/behaviors/seesaw_platform.inc.c +++ b/src/game/behaviors/seesaw_platform.inc.c @@ -33,7 +33,7 @@ void bhv_seesaw_platform_update(void) { o->oFaceAnglePitch += (s32) o->oSeesawPlatformPitchVel; if (absf(o->oSeesawPlatformPitchVel) > 10.0f) { - PlaySound(SOUND_ENV_BOAT_ROCKING1); + cur_obj_play_sound_1(SOUND_ENV_BOAT_ROCKING1); } if (gMarioObject->platform == o) { diff --git a/src/game/behaviors/shock_wave.inc.c b/src/game/behaviors/shock_wave.inc.c index 70a492e..e40c7ef 100644 --- a/src/game/behaviors/shock_wave.inc.c +++ b/src/game/behaviors/shock_wave.inc.c @@ -6,13 +6,13 @@ void bhv_bowser_shock_wave_loop(void) { f32 sp2C, sp28, sp24, sp20; s16 sp1E = 70; o->oBowserShockWaveUnkF4 = o->oTimer * 10; - obj_scale(o->oBowserShockWaveUnkF4); + cur_obj_scale(o->oBowserShockWaveUnkF4); if (gGlobalTimer % 3) o->oOpacity -= 1; if (o->oTimer > sp1E) o->oOpacity -= 5; if (o->oOpacity <= 0) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->oTimer < sp1E && mario_is_in_air_action() == 0) { sp2C = o->oBowserShockWaveUnkF4 * D_8032F420[0]; sp28 = o->oBowserShockWaveUnkF4 * D_8032F420[1]; diff --git a/src/game/behaviors/skeeter.inc.c b/src/game/behaviors/skeeter.inc.c index 7a0cdb7..b0a0229 100644 --- a/src/game/behaviors/skeeter.inc.c +++ b/src/game/behaviors/skeeter.inc.c @@ -27,20 +27,20 @@ static void skeeter_spawn_waves(void) { for (i = 0; i < 4; i++) { spawn_object_relative_with_scale(0, D_80331C38[i].unk00, 0, D_80331C38[i].unk02, 0.8f, o, - MODEL_WATER_WAVES_SURF, bhvSkeeterWave); + MODEL_IDLE_WATER_WAVE, bhvSkeeterWave); } } static void skeeter_act_idle(void) { if (o->oMoveFlags & 0x00000003) { - set_obj_animation_and_sound_state(3); + cur_obj_init_animation_with_sound(3); o->oForwardVel = 0.0f; - if (o->oTimer > o->oSkeeterWaitTime && func_8029F788()) { + if (o->oTimer > o->oSkeeterWaitTime && cur_obj_check_if_near_animation_end()) { o->oAction = SKEETER_ACT_WALK; } } else { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (o->oMoveFlags & 0x00000010) { skeeter_spawn_waves(); @@ -49,8 +49,8 @@ static void skeeter_act_idle(void) { 5, 50, 200)) { if (o->oSkeeterWaitTime != 0) { o->oSkeeterWaitTime -= 1; - } else if (func_8029F788()) { - PlaySound2(SOUND_OBJ_WALKING_WATER); + } else if (cur_obj_check_if_near_animation_end()) { + cur_obj_play_sound_2(SOUND_OBJ_WALKING_WATER); o->oAction = SKEETER_ACT_LUNGE; o->oForwardVel = 80.0f; o->oSkeeterUnk1AC = 0; @@ -65,15 +65,15 @@ static void skeeter_act_lunge(void) { o->oAction = SKEETER_ACT_IDLE; } else { skeeter_spawn_waves(); - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); if (o->oMoveFlags & 0x00000200) { - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); o->oForwardVel *= 0.3f; o->oFlags &= ~0x00000008; } - if (obj_forward_vel_approach(0.0f, 0.8f) && func_8029F828()) { + if (obj_forward_vel_approach(0.0f, 0.8f) && cur_obj_check_if_at_animation_end()) { o->oMoveAngleYaw = o->oFaceAngleYaw; if (o->oDistanceToMario >= 25000.0f) { @@ -98,7 +98,7 @@ static void skeeter_act_walk(void) { obj_forward_vel_approach(o->oSkeeterUnkFC, 0.4f); sp24 = 0.12f * o->oForwardVel; - func_8029ED98(2, sp24); + cur_obj_init_animation_with_accel_and_sound(2, sp24); func_802F9378(3, 13, SOUND_OBJ_SKEETER_WALK); if (o->oSkeeterUnkF8 != 0) { @@ -117,7 +117,7 @@ static void skeeter_act_walk(void) { o->oSkeeterUnkFC = 10.0f; if (o->oSkeeterWaitTime != 0) { o->oSkeeterWaitTime -= 1; - } else if (func_8029F788() != 0) { + } else if (cur_obj_check_if_near_animation_end() != 0) { if (RandomU16() & 0x0003) { o->oSkeeterTargetAngle = obj_random_fixed_turn(0x2000); o->oSkeeterWaitTime = random_linear_offset(100, 100); @@ -130,7 +130,7 @@ static void skeeter_act_walk(void) { } } - obj_rotate_yaw_toward(o->oSkeeterTargetAngle, 0x400); + cur_obj_rotate_yaw_toward(o->oSkeeterTargetAngle, 0x400); } } @@ -138,7 +138,7 @@ void bhv_skeeter_update(void) { o->oDeathSound = SOUND_OBJ_SNUFIT_SKEETER_DEATH; treat_far_home_as_mario(1000.0f); - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case SKEETER_ACT_IDLE: @@ -153,14 +153,14 @@ void bhv_skeeter_update(void) { } obj_check_attacks(&sSkeeterHitbox, o->oAction); - obj_move_standard(-78); + cur_obj_move_standard(-78); } void bhv_skeeter_wave_update(void) { if (approach_f32_ptr(&o->header.gfx.scale[0], 0.0f, 0.3f)) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); o->oAnimState = gGlobalTimer / 6; } diff --git a/src/game/behaviors/sl_snowman_wind.inc.c b/src/game/behaviors/sl_snowman_wind.inc.c new file mode 100644 index 0000000..7d84258 --- /dev/null +++ b/src/game/behaviors/sl_snowman_wind.inc.c @@ -0,0 +1,45 @@ +// sl_snowman_wind.c.inc + +void bhv_sl_snowman_wind_loop(void) { + UNUSED s32 unusedVar = 0; + s16 marioAngleFromWindSource; + Vec3f tempPos; + + if (o->oTimer == 0) + o->oSLSnowmanWindOriginalYaw = o->oMoveAngleYaw; + + // Waiting for Mario to approach. + if (o->oSubAction == SL_SNOWMAN_WIND_ACT_IDLE) { + o->oDistanceToMario = 0; + + // Check if Mario is within 1000 units of the center of the bridge, and ready to speak. + vec3f_copy_2(tempPos, &o->oPosX); + obj_set_pos(o, 1100, 3328, 1164); // Position is in the middle of the ice bridge + if (cur_obj_can_mario_activate_textbox(1000.0f, 30.0f, 0x7FFF)) + o->oSubAction++; + vec3f_copy_2(&o->oPosX, tempPos); + + // Mario has come close, begin dialog. + } else if (o->oSubAction == SL_SNOWMAN_WIND_ACT_TALKING) { + if (cur_obj_update_dialog(2, 2, DIALOG_153, 0)) + o->oSubAction++; + + // Blowing, spawn wind particles (SL_SNOWMAN_WIND_ACT_BLOWING) + } else if (o->oDistanceToMario < 1500.0f && absf(gMarioObject->oPosY - o->oHomeY) < 500.0f) { + // Point towards Mario, but only within 0x1500 angle units of the original angle. + if ((marioAngleFromWindSource = o->oAngleToMario - o->oSLSnowmanWindOriginalYaw) > 0) { + if (marioAngleFromWindSource < 0x1500) + o->oMoveAngleYaw = o->oAngleToMario; + else + o->oMoveAngleYaw = o->oSLSnowmanWindOriginalYaw + 0x1500; + } else { + if (marioAngleFromWindSource > -0x1500) + o->oMoveAngleYaw = o->oAngleToMario; + else + o->oMoveAngleYaw = o->oSLSnowmanWindOriginalYaw - 0x1500; + } + // Spawn wind and play wind sound + cur_obj_spawn_strong_wind_particles(12, 3.0f, 0, 0, 0); + cur_obj_play_sound_1(SOUND_AIR_BLOW_WIND); + } +} diff --git a/src/game/behaviors/sl_walking_penguin.inc.c b/src/game/behaviors/sl_walking_penguin.inc.c new file mode 100644 index 0000000..f5b60a8 --- /dev/null +++ b/src/game/behaviors/sl_walking_penguin.inc.c @@ -0,0 +1,115 @@ +// sl_walking_penguin.c.inc + +struct SLWalkingPenguinStep { + s32 stepLength; + s32 anim; + f32 speed; + f32 animSpeed; +}; + +// The penguin follows a preset list of movements while walking forward. +struct SLWalkingPenguinStep sSLWalkingPenguinErraticSteps[] = { + { 60, PENGUIN_ANIM_WALK, 6.0f, 1.0f }, // Walk forwards for 2 seconds + { 30, PENGUIN_ANIM_IDLE, 0.0f, 1.0f }, // Stop for 1 second + { 30, PENGUIN_ANIM_WALK, 12.0f, 2.0f }, // Walk forwards quickly for 1 second + { 30, PENGUIN_ANIM_IDLE, 0.0f, 1.0f }, // Stop for 1 second + { 30, PENGUIN_ANIM_WALK, -6.0f, 1.0f }, // Walk backwards for 1 second + { 30, PENGUIN_ANIM_IDLE, 0.0f, 1.0f }, // Stop for 1 second + { -1, 0, 0.0f, 0.0f } }; // Repeat + + +static s32 sl_walking_penguin_turn(void) { + // Stay still and use walking animation for the turn. + o->oForwardVel = 0.0f; + cur_obj_init_animation_with_accel_and_sound(PENGUIN_ANIM_WALK, 1.0f); + + // Turn around. + o->oAngleVelYaw = 0x400; + o->oMoveAngleYaw += o->oAngleVelYaw; + + if (o->oTimer == 31) + return TRUE; // Finished turning + else + return FALSE; +} + +void bhv_sl_walking_penguin_loop(void) { + f32 adjustedXPos, adjustedZPos; + f32 perpendicularOffset = 100.0f; + + o->oAngleVelYaw = 0; + cur_obj_update_floor_and_walls(); + + switch (o->oAction) { + // Walk erratically across the ice bridge using preset steps. + case SL_WALKING_PENGUIN_ACT_MOVING_FORWARDS: + if (o->oTimer == 0) { + // Initiate variables + o->oSLWalkingPenguinCurStep = 0; + o->oSLWalkingPenguinCurStepTimer = 0; + } + + if (o->oSLWalkingPenguinCurStepTimer < sSLWalkingPenguinErraticSteps[o->oSLWalkingPenguinCurStep].stepLength) + o->oSLWalkingPenguinCurStepTimer++; + else { + // Move to next step + o->oSLWalkingPenguinCurStepTimer = 0; + o->oSLWalkingPenguinCurStep++; + if (sSLWalkingPenguinErraticSteps[o->oSLWalkingPenguinCurStep].stepLength < 0) + // Reached the end of the list, go back to the start + o->oSLWalkingPenguinCurStep = 0; + } + + if (o->oPosX < 300.0f) + o->oAction++; // If reached the end of the bridge, turn around and head back. + else { + // Move and animate the penguin + o->oForwardVel = sSLWalkingPenguinErraticSteps[o->oSLWalkingPenguinCurStep].speed; + + cur_obj_init_animation_with_accel_and_sound( + sSLWalkingPenguinErraticSteps[o->oSLWalkingPenguinCurStep].anim, + sSLWalkingPenguinErraticSteps[o->oSLWalkingPenguinCurStep].animSpeed + ); + } + break; + + // At the end, turn around and prepare to head back across the bridge. + case SL_WALKING_PENGUIN_ACT_TURNING_BACK: + if (sl_walking_penguin_turn()) + o->oAction++; // Finished turning + break; + + // Walk back across the bridge at a constant speed. + case SL_WALKING_PENGUIN_ACT_RETURNING: + // Move and animate the penguin + o->oForwardVel = 12.0f; + cur_obj_init_animation_with_accel_and_sound(PENGUIN_ANIM_WALK, 2.0f); + + if (o->oPosX > 1700.0f) + o->oAction++; // If reached the start of the bridge, turn around. + break; + + // At the start, turn around and prepare to walk erratically across the bridge. + case SL_WALKING_PENGUIN_ACT_TURNING_FORWARDS: + if (sl_walking_penguin_turn()) + o->oAction = SL_WALKING_PENGUIN_ACT_MOVING_FORWARDS; // Finished turning + break; + } + + cur_obj_move_standard(-78); + if (!cur_obj_hide_if_mario_far_away_y(1000.0f)) + play_penguin_walking_sound(PENGUIN_WALK_BIG); + + // Adjust the position to get a point better lined up with the visual model, for stopping the wind. + // The new point is 60 units behind the penguin and 100 units perpedicularly, away from the snowman. + + adjustedXPos = o->oPosX + sins(0xDBB0) * 60.0f; // 0xDBB0 = -51 degrees, the angle the penguin is facing + adjustedZPos = o->oPosZ + coss(0xDBB0) * 60.0f; + adjustedXPos += perpendicularOffset * sins(0x1BB0); // 0x1BB0 = 39 degrees, perpendicular to the penguin + adjustedZPos += perpendicularOffset * coss(0x1BB0); + o->oSLWalkingPenguinWindCollisionXPos = adjustedXPos; + o->oSLWalkingPenguinWindCollisionZPos = adjustedZPos; + + print_debug_bottom_up("x %d", o->oPosX); + print_debug_bottom_up("z %d", o->oPosZ); +} diff --git a/src/game/behaviors/snow_mound.inc.c b/src/game/behaviors/snow_mound.inc.c index ff6faf4..1e9218d 100644 --- a/src/game/behaviors/snow_mound.inc.c +++ b/src/game/behaviors/snow_mound.inc.c @@ -8,7 +8,7 @@ void bhv_sliding_snow_mound_loop(void) { if (o->oTimer >= 118) o->oAction = 1; - PlaySound(SOUND_ENV_SINK_QUICKSAND); + cur_obj_play_sound_1(SOUND_ENV_SINK_QUICKSAND); break; case 1: diff --git a/src/game/behaviors/snowman.inc.c b/src/game/behaviors/snowman.inc.c index 01008b7..33857d0 100644 --- a/src/game/behaviors/snowman.inc.c +++ b/src/game/behaviors/snowman.inc.c @@ -27,22 +27,22 @@ void bhv_snowmans_bottom_init(void) { o->oForwardVel = 0; o->oSnowmansBottomUnkF4 = 0.4f; - sp34 = obj_nearest_object_with_behavior(bhvSnowmansHead); + sp34 = cur_obj_nearest_object_with_behavior(bhvSnowmansHead); if (sp34 != NULL) { o->parentObj = sp34; } spawn_object_abs_with_rot(o, 0, MODEL_NONE, bhvSnowmansBodyCheckpoint, -402, 461, -2898, 0, 0, 0); } -void func_802EFB2C(void) { - set_object_hitbox(o, &sRollingSphereHitbox); +void set_rolling_sphere_hitbox(void) { + obj_set_hitbox(o, &sRollingSphereHitbox); if ((o->oInteractStatus & INT_STATUS_INTERACTED) != 0) { o->oInteractStatus = 0; } } -void func_802EFB84(f32 f12) { +void adjust_rolling_face_pitch(f32 f12) { o->oFaceAnglePitch += (s16)(o->oForwardVel * (100.0f / f12)); o->oSnowmansBottomUnkF4 += o->oForwardVel * 1e-4; @@ -50,14 +50,14 @@ void func_802EFB84(f32 f12) { o->oSnowmansBottomUnkF4 = 1.0f; } -void func_802EFC44(void) { +void snowmans_bottom_act_1(void) { UNUSED s16 sp26; s32 sp20; UNUSED s16 sp1E; o->oPathedStartWaypoint = segmented_to_virtual(&ccm_seg7_trajectory_snowman); sp26 = object_step_without_floor_orient(); - sp20 = obj_follow_path(sp20); + sp20 = cur_obj_follow_path(sp20); o->oSnowmansBottomUnkF8 = o->oPathedTargetYaw; o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oSnowmansBottomUnkF8, 0x400); @@ -75,7 +75,7 @@ void func_802EFC44(void) { } } -void func_802EFDA0(void) { +void snowmans_bottom_act_2(void) { UNUSED s16 sp26; sp26 = object_step_without_floor_orient(); @@ -84,7 +84,7 @@ void func_802EFDA0(void) { o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oSnowmansBottomUnkF8, 0x400); if (is_point_close_to_object(o, -4230.0f, -1344.0f, 1813.0f, 300)) { - func_802AA618(0, 0, 70.0f); + spawn_mist_particles_variable(0, 0, 70.0f); o->oMoveAngleYaw = atan2s(1813.0f - o->oPosZ, -4230.0f - o->oPosX); o->oVelY = 80.0f; o->oForwardVel = 15.0f; @@ -92,7 +92,7 @@ void func_802EFDA0(void) { o->parentObj->oAction = 2; o->parentObj->oVelY = 100.0f; - PlaySound2(SOUND_OBJ_SNOWMAN_BOUNCE); + cur_obj_play_sound_2(SOUND_OBJ_SNOWMAN_BOUNCE); } if (o->oTimer == 200) { @@ -101,17 +101,17 @@ void func_802EFDA0(void) { } } -void func_802EFF58(void) { +void snowmans_bottom_act_3(void) { UNUSED s16 sp1E; sp1E = object_step_without_floor_orient(); if ((sp1E & 0x09) == 0x09) { o->oAction = 4; - obj_become_intangible(); + cur_obj_become_intangible(); } if ((sp1E & 0x01) != 0) { - func_802AA618(0, 0, 70.0f); + spawn_mist_particles_variable(0, 0, 70.0f); o->oPosX = -4230.0f; o->oPosZ = 1813.0f; o->oForwardVel = 0.0f; @@ -135,29 +135,29 @@ void bhv_snowmans_bottom_loop(void) { break; case 1: - func_802EFC44(); - func_802EFB84(o->oSnowmansBottomUnkF4); - PlaySound(SOUND_ENV_UNKNOWN2); + snowmans_bottom_act_1(); + adjust_rolling_face_pitch(o->oSnowmansBottomUnkF4); + cur_obj_play_sound_1(SOUND_ENV_UNKNOWN2); break; case 2: - func_802EFDA0(); - func_802EFB84(o->oSnowmansBottomUnkF4); - PlaySound(SOUND_ENV_UNKNOWN2); + snowmans_bottom_act_2(); + adjust_rolling_face_pitch(o->oSnowmansBottomUnkF4); + cur_obj_play_sound_1(SOUND_ENV_UNKNOWN2); break; case 3: - func_802EFF58(); + snowmans_bottom_act_3(); break; case 4: - obj_push_mario_away_from_cylinder(210.0f, 550); + cur_obj_push_mario_away_from_cylinder(210.0f, 550); break; } - func_802EFB2C(); + set_rolling_sphere_hitbox(); set_object_visibility(o, 8000); - obj_scale(o->oSnowmansBottomUnkF4); + cur_obj_scale(o->oSnowmansBottomUnkF4); o->oGraphYOffset = o->oSnowmansBottomUnkF4 * 180.0f; } @@ -168,7 +168,7 @@ void bhv_snowmans_head_init(void) { sp37 = save_file_get_star_flags(gCurrSaveFileNum - 1, gCurrCourseNum - 1); sp36 = (o->oBehParams >> 24) & 0xFF; - obj_scale(0.7f); + cur_obj_scale(0.7f); o->oGravity = 5.0f; o->oFriction = 0.999f; @@ -208,21 +208,21 @@ void bhv_snowmans_head_loop(void) { if (o->oPosY < -994.0f) { o->oPosY = -994.0f; o->oAction = 4; - PlaySound2(SOUND_OBJ_SNOWMAN_EXPLODE); + cur_obj_play_sound_2(SOUND_OBJ_SNOWMAN_EXPLODE); play_puzzle_jingle(); } break; case 4: if (trigger_obj_dialog_when_facing(&o->oSnowmansHeadUnkF4, DIALOG_111, 700.0f, 2)) { - func_802A3004(); - create_star(-4700.0f, -1024.0f, 1890.0f); + spawn_mist_particles(); + spawn_default_star(-4700.0f, -1024.0f, 1890.0f); o->oAction = 1; } break; } - obj_push_mario_away_from_cylinder(180.0f, 150.0f); + cur_obj_push_mario_away_from_cylinder(180.0f, 150.0f); } void bhv_snowmans_body_checkpoint_loop(void) { diff --git a/src/game/behaviors/snowman_wind.inc.c b/src/game/behaviors/snowman_wind.inc.c deleted file mode 100644 index fb3d109..0000000 --- a/src/game/behaviors/snowman_wind.inc.c +++ /dev/null @@ -1,35 +0,0 @@ -// snowman_wind.c.inc - -void bhv_snowman_wind_blowing_loop(void) { - UNUSED s32 sp34; - s16 sp32; - Vec3f pos; - sp34 = 0; - if (o->oTimer == 0) - o->oSnowmanWindBlowingUnkF4 = o->oMoveAngleYaw; - if (o->oSubAction == 0) { - o->oDistanceToMario = 0; - func_802B8F7C(pos, &o->oPosX); - set_object_pos(o, 1100, 3328, 1164); - if (func_802A3FF8(1000.0f, 30.0f, 0x7FFF)) - o->oSubAction++; - func_802B8F7C(&o->oPosX, pos); - } else if (o->oSubAction == 1) { - if (obj_update_dialog(2, 2, DIALOG_153, 0)) - o->oSubAction++; - } else if (o->oDistanceToMario < 1500.0f && absf(gMarioObject->oPosY - o->oHomeY) < 500.0f) { - if ((sp32 = o->oAngleToMario - o->oSnowmanWindBlowingUnkF4) > 0) { - if (sp32 < 0x1500) - o->oMoveAngleYaw = o->oAngleToMario; - else - o->oMoveAngleYaw = o->oSnowmanWindBlowingUnkF4 + 0x1500; - } else { - if (sp32 >= -0x14ff) - o->oMoveAngleYaw = o->oAngleToMario; - else - o->oMoveAngleYaw = o->oSnowmanWindBlowingUnkF4 - 0x1500; - } - func_802C76E0(12, 3.0f, 0, 0, 0); - PlaySound(SOUND_AIR_BLOW_WIND); - } -} diff --git a/src/game/behaviors/snufit.inc.c b/src/game/behaviors/snufit.inc.c index af7c55c..f3a0c9e 100644 --- a/src/game/behaviors/snufit.inc.c +++ b/src/game/behaviors/snufit.inc.c @@ -1,4 +1,9 @@ -// snufit.inc.c +/** + * Behavior file for bhvSnufit and bhvSnufitBalls. + * Snufits are present in HMC and CotMC, and are the fly guy + * like enemies that shoot bullets. The balls are the little pellets + * the snufit shoots at Mario. + */ struct ObjectHitbox sSnufitHitbox = { /* interactType: */ INTERACT_HIT_FROM_BELOW, @@ -24,71 +29,100 @@ struct ObjectHitbox sSnufitBulletHitbox = { /* hurtboxHeight: */ 50, }; -Gfx *Geo18_8030D93C(s32 arg0, struct GraphNode *node, UNUSED void *arg2) { - struct Object *sp4; - struct GraphNodeTranslationRotation *sp0; +/** + * This geo function shifts snufit's mask when it shrinks down, + * since the parts move independently. + */ +Gfx *geo_snufit_move_mask(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { + struct Object *obj; + struct GraphNodeTranslationRotation *transNode; - if (arg0 == 1) { - sp4 = (struct Object *) gCurGraphNodeObject; - sp0 = (struct GraphNodeTranslationRotation *) node->next; + if (callContext == GEO_CONTEXT_RENDER) { + obj = (struct Object *) gCurGraphNodeObject; + transNode = (struct GraphNodeTranslationRotation *) node->next; - sp0->translation[0] = sp4->oSnufitUnk1AC; - sp0->translation[1] = sp4->oSnufitUnk1AE; - sp0->translation[2] = sp4->oSnufitUnk1B0; + transNode->translation[0] = obj->oSnufitXOffset; + transNode->translation[1] = obj->oSnufitYOffset; + transNode->translation[2] = obj->oSnufitZOffset; } return NULL; } -Gfx *Geo18_8030D9AC(s32 arg0, struct GraphNode *node, UNUSED void *arg2) { - struct Object *sp4; - struct GraphNodeScale *sp0; +/** + * This function scales the body of snufit, which needs done seperately from its mask. + */ +Gfx *geo_snufit_scale_body(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { + struct Object *obj; + struct GraphNodeScale *scaleNode; - if (arg0 == 1) { - sp4 = (struct Object *) gCurGraphNodeObject; - sp0 = (struct GraphNodeScale *) node->next; + if (callContext == GEO_CONTEXT_RENDER) { + obj = (struct Object *) gCurGraphNodeObject; + scaleNode = (struct GraphNodeScale *) node->next; - sp0->scale = sp4->oSnufitUnk1B2 / 1000.0f; + scaleNode->scale = obj->oSnufitBodyScale / 1000.0f; } return NULL; } -void snufit_act_0(void) { - s32 sp1C; +/** + * Snufit's idle action. It rotates in a circle until Mario is near, + * then prepares to shoot after a period. + */ +void snufit_act_idle(void) { + s32 marioDist; - sp1C = (s32)(o->oDistanceToMario / 10.0f); - if (o->oTimer > sp1C && o->oDistanceToMario < 800.0f) { - o->oSnufitUnk104 = approach_s16_symmetric(o->oSnufitUnk104, 0, 1500); - o->oSnufitUnk108 = approach_s16_symmetric(o->oSnufitUnk108, 600, 15); + // This line would could cause a crash in certain PU situations, + // if the game would not have already crashed. + marioDist = (s32)(o->oDistanceToMario / 10.0f); + if (o->oTimer > marioDist && o->oDistanceToMario < 800.0f) { + + // Controls an alternating scaling factor in a cos. + o->oSnufitBodyScalePeriod + = approach_s16_symmetric(o->oSnufitBodyScalePeriod, 0, 1500); + o->oSnufitBodyBaseScale + = approach_s16_symmetric(o->oSnufitBodyBaseScale, 600, 15); - if ((s16) o->oSnufitUnk104 == 0 && o->oSnufitUnk108 == 600) { - o->oAction = 1; - o->oSnufitUnk10C = 0; + if ((s16) o->oSnufitBodyScalePeriod == 0 && o->oSnufitBodyBaseScale == 600) { + o->oAction = SNUFIT_ACT_SHOOT; + o->oSnufitBullets = 0; } } else { - o->oSnufitUnk100 += 400; + o->oSnufitCircularPeriod += 400; } } -void snufit_act_1(void) { - o->oSnufitUnk104 = approach_s16_symmetric(o->oSnufitUnk104, -0x8000, 3000); - o->oSnufitUnk108 = approach_s16_symmetric(o->oSnufitUnk108, 0xA7, 20); +/** + * Controls the literal shooting action, spawning three bhvSnufitBalls. + */ +void snufit_act_shoot(void) { + o->oSnufitBodyScalePeriod + = approach_s16_symmetric(o->oSnufitBodyScalePeriod, -0x8000, 3000); + o->oSnufitBodyBaseScale + = approach_s16_symmetric(o->oSnufitBodyBaseScale, 167, 20); - if ((u16) o->oSnufitUnk104 == 0x8000 && o->oSnufitUnk108 == 0xA7) { - o->oAction = 0; - } else if (o->oSnufitUnk10C < 3 && o->oTimer >= 3) { - o->oSnufitUnk10C += 1; - PlaySound2(SOUND_OBJ_SNUFIT_SHOOT); + if ((u16) o->oSnufitBodyScalePeriod == 0x8000 && o->oSnufitBodyBaseScale == 167) { + o->oAction = SNUFIT_ACT_IDLE; + } else if (o->oSnufitBullets < 3 && o->oTimer >= 3) { + o->oSnufitBullets += 1; + cur_obj_play_sound_2(SOUND_OBJ_SNUFIT_SHOOT); spawn_object_relative(0, 0, -20, 40, o, MODEL_BOWLING_BALL, bhvSnufitBalls); - o->oSnufitUnkF4 = -30; + o->oSnufitRecoil = -30; o->oTimer = 0; } } +/** + * Primary loop behavior for snufit. Controls some generic movement + * and the action brain of the object. + */ void bhv_snufit_loop(void) { - if (!(o->activeFlags & 0x0008)) { + // Only update if Mario is in the current room. + if (!(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)) { o->oDeathSound = SOUND_OBJ_SNUFIT_SKEETER_DEATH; + + // Face Mario if he is within range. if (o->oDistanceToMario < 800.0f) { obj_turn_pitch_toward_mario(120.0f, 2000); @@ -98,7 +132,7 @@ void bhv_snufit_loop(void) { o->oMoveAnglePitch = -0x2000; } - obj_rotate_yaw_toward(o->oAngleToMario, 2000); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 2000); } else { obj_move_pitch_approach(0, 0x200); o->oMoveAngleYaw += 200; @@ -107,57 +141,75 @@ void bhv_snufit_loop(void) { o->oFaceAnglePitch = o->oMoveAnglePitch; switch (o->oAction) { - case 0: - snufit_act_0(); + case SNUFIT_ACT_IDLE: + snufit_act_idle(); break; - case 1: - snufit_act_1(); + case SNUFIT_ACT_SHOOT: + snufit_act_shoot(); break; } - o->oPosX = o->oHomeX + 100.0f * coss(o->oSnufitUnk100); + // Snufit orbits in a circular motion depending on an internal timer + // and vertically off the global timer. The vertical position can be + // manipulated using pauses since it uses the global timer. + o->oPosX = o->oHomeX + 100.0f * coss(o->oSnufitCircularPeriod); o->oPosY = o->oHomeY + 8.0f * coss(4000 * gGlobalTimer); - o->oPosZ = o->oHomeZ + 100.0f * sins(o->oSnufitUnk100); + o->oPosZ = o->oHomeZ + 100.0f * sins(o->oSnufitCircularPeriod); - o->oSnufitUnk1AE = -0x20; - o->oSnufitUnk1B0 = o->oSnufitUnkF4 + 180; - o->oSnufitUnk1B2 = (s16)(o->oSnufitUnk108 + 666 + o->oSnufitUnk108 * coss(o->oSnufitUnk104)); + o->oSnufitYOffset = -0x20; + o->oSnufitZOffset = o->oSnufitRecoil + 180; + o->oSnufitBodyScale + = (s16)(o->oSnufitBodyBaseScale + 666 + + o->oSnufitBodyBaseScale * coss(o->oSnufitBodyScalePeriod)); - if (o->oSnufitUnk1B2 > 1000) { - o->oSnufitUnkF8 = (o->oSnufitUnk1B2 - 1000) / 1000.0f + 1.0f; - o->oSnufitUnk1B2 = 1000; + if (o->oSnufitBodyScale > 1000) { + o->oSnufitScale = (o->oSnufitBodyScale - 1000) / 1000.0f + 1.0f; + o->oSnufitBodyScale = 1000; } else { - o->oSnufitUnkF8 = 1.0f; + o->oSnufitScale = 1.0f; } - obj_scale(o->oSnufitUnkF8); + cur_obj_scale(o->oSnufitScale); obj_check_attacks(&sSnufitHitbox, o->oAction); } } +/** + * Snufit bullets live to run into stuff and die when they do. + */ void bhv_snufit_balls_loop(void) { - if ((o->activeFlags & 0x0008) || (o->oTimer != 0 && o->oDistanceToMario > 1500.0f)) { - mark_object_for_deletion(o); + // If far from Mario or in a different room, despawn. + if ((o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM) + || (o->oTimer != 0 && o->oDistanceToMario > 1500.0f)) { + obj_mark_for_deletion(o); } + // Gravity =/= 0 after it has hit Mario while metal. if (o->oGravity == 0.0f) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); obj_compute_vel_from_move_pitch(40.0f); if (obj_check_attacks(&sSnufitBulletHitbox, 1)) { + // We hit Mario while he is metal! + // Bounce off, and fall until the first check is true. o->oMoveAngleYaw += 0x8000; o->oForwardVel *= 0.05f; o->oVelY = 30.0f; o->oGravity = -4.0f; - obj_become_intangible(); - } else if (o->oAction == 1 || (o->oMoveFlags & 0x00000203)) { + cur_obj_become_intangible(); + } else if (o->oAction == 1 + || (o->oMoveFlags & (OBJ_MOVE_MASK_ON_GROUND | OBJ_MOVE_HIT_WALL))) { + // The Snufit shot Mario and has fulfilled its lonely existance. + //! The above check could theoretically be avoided by finding a geometric + //! situation that does not trigger those flags (Water?). If found, + //! this would be a route to hang the game via too many snufit bullets. o->oDeathSound = -1; obj_die_if_health_non_positive(); } - obj_move_standard(78); + cur_obj_move_standard(78); } else { - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } } diff --git a/src/game/behaviors/sound_birds.inc.c b/src/game/behaviors/sound_birds.inc.c index 96cd8d8..db7ea53 100644 --- a/src/game/behaviors/sound_birds.inc.c +++ b/src/game/behaviors/sound_birds.inc.c @@ -6,15 +6,15 @@ void bhv_birds_sound_loop(void) { switch (o->oBehParams2ndByte) { case 0: - PlaySound(SOUND_OBJ2_BIRD_CHIRP1); + cur_obj_play_sound_1(SOUND_OBJ2_BIRD_CHIRP1); break; case 1: - PlaySound(SOUND_GENERAL2_BIRD_CHIRP2); + cur_obj_play_sound_1(SOUND_GENERAL2_BIRD_CHIRP2); break; case 2: - PlaySound(SOUND_OBJ_BIRD_CHIRP3); + cur_obj_play_sound_1(SOUND_OBJ_BIRD_CHIRP3); break; } } diff --git a/src/game/behaviors/sound_sand.inc.c b/src/game/behaviors/sound_sand.inc.c index 33b52c2..95535b6 100644 --- a/src/game/behaviors/sound_sand.inc.c +++ b/src/game/behaviors/sound_sand.inc.c @@ -4,5 +4,5 @@ void bhv_sand_sound_loop(void) { if (gCamera->mode == CAMERA_MODE_BEHIND_MARIO) return; - PlaySound(SOUND_ENV_MOVINGSAND); + cur_obj_play_sound_1(SOUND_ENV_MOVINGSAND); } diff --git a/src/game/behaviors/sound_volcano.inc.c b/src/game/behaviors/sound_volcano.inc.c index aa21d5a..a96964d 100644 --- a/src/game/behaviors/sound_volcano.inc.c +++ b/src/game/behaviors/sound_volcano.inc.c @@ -1,5 +1,5 @@ // sound_volcano.inc.c void bhv_volcano_sound_loop(void) { - PlaySound(SOUND_ENV_DRONING1); + cur_obj_play_sound_1(SOUND_ENV_DRONING1); } diff --git a/src/game/behaviors/sound_waterfall.inc.c b/src/game/behaviors/sound_waterfall.inc.c index 89bc08d..5763ac8 100644 --- a/src/game/behaviors/sound_waterfall.inc.c +++ b/src/game/behaviors/sound_waterfall.inc.c @@ -1,5 +1,5 @@ // sound_waterfall.inc.c void bhv_waterfall_sound_loop(void) { - PlaySound(SOUND_ENV_WATERFALL2); + cur_obj_play_sound_1(SOUND_ENV_WATERFALL2); } diff --git a/src/game/behaviors/sparkle_spawn.inc.c b/src/game/behaviors/sparkle_spawn.inc.c index 8005a3a..b5f2a41 100644 --- a/src/game/behaviors/sparkle_spawn.inc.c +++ b/src/game/behaviors/sparkle_spawn.inc.c @@ -8,10 +8,10 @@ void bhv_sparkle_spawn_loop(void) { struct Object *sparkle = try_to_spawn_object(0, 1.0f, o, MODEL_SPARKLES_ANIMATION, bhvSparkle); if (sparkle != NULL) { - translate_object_xyz_random(sparkle, 90.0f); - scale_object_random(sparkle, 1.0f, 0.0f); + obj_translate_xyz_random(sparkle, 90.0f); + obj_scale_random(sparkle, 1.0f, 0.0f); } if (o->oTimer > 1) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } diff --git a/src/game/behaviors/sparkle_spawn_star.inc.c b/src/game/behaviors/sparkle_spawn_star.inc.c index bbde5b1..c444cbb 100644 --- a/src/game/behaviors/sparkle_spawn_star.inc.c +++ b/src/game/behaviors/sparkle_spawn_star.inc.c @@ -17,20 +17,20 @@ void bhv_spawned_star_init(void) { if (!(o->oInteractionSubtype & INT_SUBTYPE_NO_EXIT)) o->oBehParams = o->parentObj->oBehParams; sp24 = (o->oBehParams >> 24) & 0xFF; - if (func_802A377C(sp24) & save_file_get_star_flags(gCurrSaveFileNum - 1, gCurrCourseNum - 1)) - obj_set_model(MODEL_TRANSPARENT_STAR); - PlaySound2(SOUND_GENERAL2_STAR_APPEARS); + if (bit_shift_left(sp24) & save_file_get_star_flags(gCurrSaveFileNum - 1, gCurrCourseNum - 1)) + cur_obj_set_model(MODEL_TRANSPARENT_STAR); + cur_obj_play_sound_2(SOUND_GENERAL2_STAR_APPEARS); } -void func_802AA788(void) { - set_object_hitbox(o, &sSparkleSpawnStarHitbox); +void set_sparkle_spawn_star_hitbox(void) { + obj_set_hitbox(o, &sSparkleSpawnStarHitbox); if (o->oInteractStatus & INT_STATUS_INTERACTED) { mark_obj_for_deletion(o); o->oInteractStatus = 0; } } -void func_802AA7EC(void) { +void set_home_to_mario(void) { f32 sp1C; f32 sp18; o->oHomeX = gMarioObject->oPosX; @@ -43,12 +43,12 @@ void func_802AA7EC(void) { o->oForwardVel = sqrtf(sp1C * sp1C + sp18 * sp18) / 23.0f; } -void func_802AA8E4(void) { +void set_y_home_to_pos(void) { o->oForwardVel = 0; o->oHomeY = o->oPosY; } -void func_802AA918(void) { +void slow_star_rotation(void) { if (o->oAngleVelYaw > 0x400) o->oAngleVelYaw -= 0x40; } @@ -61,15 +61,15 @@ void bhv_spawned_star_loop(void) { o->activeFlags |= 0x20; o->oAngleVelYaw = 0x800; if (o->oBehParams2ndByte == 0) - func_802AA7EC(); + set_home_to_mario(); else - func_802AA8E4(); - o->oMoveAngleYaw = obj_angle_to_home(); + set_y_home_to_pos(); + o->oMoveAngleYaw = cur_obj_angle_to_home(); o->oVelY = 50.0f; o->oGravity = -4.0f; - func_802A3004(); + spawn_mist_particles(); } - PlaySound(SOUND_ENV_STAR); + cur_obj_play_sound_1(SOUND_ENV_STAR); spawn_object(o, MODEL_NONE, bhvSparkleSpawn); if (o->oVelY < 0 && o->oPosY < o->oHomeY) { o->oAction++; @@ -102,10 +102,10 @@ void bhv_spawned_star_loop(void) { o->oAction++; } } else { - func_802AA788(); - func_802AA918(); + set_sparkle_spawn_star_hitbox(); + slow_star_rotation(); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); o->oFaceAngleYaw += o->oAngleVelYaw; o->oInteractStatus = 0; } @@ -114,5 +114,5 @@ void bhv_spawn_star_no_level_exit(u32 sp20) { struct Object *sp1C = spawn_object(o, MODEL_STAR, bhvSpawnedStarNoLevelExit); sp1C->oBehParams = sp20 << 24; sp1C->oInteractionSubtype = INT_SUBTYPE_NO_EXIT; - set_object_angle(sp1C, 0, 0, 0); + obj_set_angle(sp1C, 0, 0, 0); } diff --git a/src/game/behaviors/spawn_star.inc.c b/src/game/behaviors/spawn_star.inc.c index 3054f3f..80095af 100644 --- a/src/game/behaviors/spawn_star.inc.c +++ b/src/game/behaviors/spawn_star.inc.c @@ -1,4 +1,4 @@ -// spawn_star.c.inc +// spawn_default_star.c.inc static struct ObjectHitbox sCollectStarHitbox = { /* interactType: */ INTERACT_STAR_OR_KEY, @@ -24,7 +24,7 @@ void bhv_collect_star_init(void) { o->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_STAR]; } - set_object_hitbox(o, &sCollectStarHitbox); + obj_set_hitbox(o, &sCollectStarHitbox); } void bhv_collect_star_loop(void) { @@ -49,7 +49,7 @@ void bhv_star_spawn_init(void) { set_time_stop_flags(TIME_STOP_ENABLED | TIME_STOP_MARIO_AND_DOORS); o->activeFlags |= 0x20; - obj_become_intangible(); + cur_obj_become_intangible(); } void bhv_star_spawn_loop(void) { @@ -66,7 +66,7 @@ void bhv_star_spawn_loop(void) { o->oPosY = o->oStarSpawnUnkFC + sins((o->oTimer * 0x8000) / 30) * 400.0f; o->oFaceAngleYaw += 0x1000; spawn_object(o, MODEL_NONE, bhvSparkleSpawn); - PlaySound(SOUND_ENV_STAR); + cur_obj_play_sound_1(SOUND_ENV_STAR); if (o->oTimer == 30) { o->oAction = 2; o->oForwardVel = 0; @@ -83,11 +83,11 @@ void bhv_star_spawn_loop(void) { spawn_object(o, MODEL_NONE, bhvSparkleSpawn); obj_move_xyz_using_fvel_and_yaw(o); o->oFaceAngleYaw = o->oFaceAngleYaw - o->oTimer * 0x10 + 0x1000; - PlaySound(SOUND_ENV_STAR); + cur_obj_play_sound_1(SOUND_ENV_STAR); if (o->oPosY < o->oHomeY) { - PlaySound2(SOUND_GENERAL_STAR_APPEARS); - obj_become_tangible(); + cur_obj_play_sound_2(SOUND_GENERAL_STAR_APPEARS); + cur_obj_become_tangible(); o->oPosY = o->oHomeY; o->oAction = 3; } @@ -109,7 +109,7 @@ void bhv_star_spawn_loop(void) { } } -struct Object *func_802F1A50(struct Object *sp30, f32 sp34, f32 sp38, f32 sp3C) { +struct Object *spawn_star(struct Object *sp30, f32 sp34, f32 sp38, f32 sp3C) { sp30 = spawn_object_abs_with_rot(o, 0, MODEL_STAR, bhvStarSpawnCoordinates, o->oPosX, o->oPosY, o->oPosZ, 0, 0, 0); sp30->oBehParams = o->oBehParams; @@ -121,21 +121,21 @@ struct Object *func_802F1A50(struct Object *sp30, f32 sp34, f32 sp38, f32 sp3C) return sp30; } -void create_star(f32 sp20, f32 sp24, f32 sp28) { +void spawn_default_star(f32 sp20, f32 sp24, f32 sp28) { struct Object *sp1C; - sp1C = func_802F1A50(sp1C, sp20, sp24, sp28); + sp1C = spawn_star(sp1C, sp20, sp24, sp28); sp1C->oBehParams2ndByte = 0; } -void func_802F1B84(f32 sp20, f32 sp24, f32 sp28) { +void spawn_red_coin_cutscene_star(f32 sp20, f32 sp24, f32 sp28) { struct Object *sp1C; - sp1C = func_802F1A50(sp1C, sp20, sp24, sp28); + sp1C = spawn_star(sp1C, sp20, sp24, sp28); sp1C->oBehParams2ndByte = 1; } -void func_802F1BD4(f32 sp20, f32 sp24, f32 sp28) { +void spawn_no_exit_star(f32 sp20, f32 sp24, f32 sp28) { struct Object *sp1C; - sp1C = func_802F1A50(sp1C, sp20, sp24, sp28); + sp1C = spawn_star(sp1C, sp20, sp24, sp28); sp1C->oBehParams2ndByte = 1; sp1C->oInteractionSubtype |= INT_SUBTYPE_NO_EXIT; } @@ -168,8 +168,8 @@ void bhv_hidden_red_coin_star_loop(void) { case 1: if (o->oTimer > 2) { - func_802F1B84(o->oPosX, o->oPosY, o->oPosZ); - func_802A3004(); + spawn_red_coin_cutscene_star(o->oPosX, o->oPosY, o->oPosZ); + spawn_mist_particles(); o->activeFlags = 0; } break; diff --git a/src/game/behaviors/spawn_star_exit.inc.c b/src/game/behaviors/spawn_star_exit.inc.c index 1c8aa1a..8c5515a 100644 --- a/src/game/behaviors/spawn_star_exit.inc.c +++ b/src/game/behaviors/spawn_star_exit.inc.c @@ -5,7 +5,7 @@ void bhv_ccm_touched_star_spawn_loop(void) { o->oPosY += 100.0f; o->oPosX = 2780.0f; o->oPosZ = 4666.0f; - create_star(2500.0f, -4350.0f, 5750.0f); - mark_object_for_deletion(o); + spawn_default_star(2500.0f, -4350.0f, 5750.0f); + obj_mark_for_deletion(o); } } diff --git a/src/game/behaviors/spindel.inc.c b/src/game/behaviors/spindel.inc.c index 6fc6567..6cbe3ce 100644 --- a/src/game/behaviors/spindel.inc.c +++ b/src/game/behaviors/spindel.inc.c @@ -64,7 +64,7 @@ void bhv_spindel_loop(void) { o->oMoveAnglePitch += o->oAngleVelPitch; if (absf_2(o->oMoveAnglePitch & 0x1fff) < 800.0f && o->oAngleVelPitch != 0) { - PlaySound2(SOUND_GENERAL2_SPINDEL_ROLL); + cur_obj_play_sound_2(SOUND_GENERAL2_SPINDEL_ROLL); } sp1C = sins(o->oMoveAnglePitch * 4) * 23.0; diff --git a/src/game/behaviors/spindrift.inc.c b/src/game/behaviors/spindrift.inc.c index 8db4097..ad6a798 100644 --- a/src/game/behaviors/spindrift.inc.c +++ b/src/game/behaviors/spindrift.inc.c @@ -14,17 +14,17 @@ struct ObjectHitbox sSpindriftHitbox = { void bhv_spindrift_loop(void) { o->activeFlags |= 0x400; - if (obj_set_hitbox_and_die_if_attacked(&sSpindriftHitbox, SOUND_OBJ_DYING_ENEMY1, 0)) - obj_change_action(1); - obj_update_floor_and_walls(); + if (cur_obj_set_hitbox_and_die_if_attacked(&sSpindriftHitbox, SOUND_OBJ_DYING_ENEMY1, 0)) + cur_obj_change_action(1); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case 0: - func_802A9050(&o->oForwardVel, 4.0f, 1.0f); - if (obj_lateral_dist_from_mario_to_home() > 1000.0f) - o->oAngleToMario = obj_angle_to_home(); + approach_forward_vel(&o->oForwardVel, 4.0f, 1.0f); + if (cur_obj_lateral_dist_from_mario_to_home() > 1000.0f) + o->oAngleToMario = cur_obj_angle_to_home(); else if (o->oDistanceToMario > 300.0f) - o->oAngleToMario = angle_to_object(o, gMarioObject); - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + o->oAngleToMario = obj_angle_to_object(o, gMarioObject); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); break; case 1: o->oFlags &= ~8; @@ -36,5 +36,5 @@ void bhv_spindrift_loop(void) { } break; } - obj_move_standard(-60); + cur_obj_move_standard(-60); } diff --git a/src/game/behaviors/spiny.inc.c b/src/game/behaviors/spiny.inc.c index 8813d91..b11ee2e 100644 --- a/src/game/behaviors/spiny.inc.c +++ b/src/game/behaviors/spiny.inc.c @@ -47,7 +47,7 @@ static s32 spiny_check_active(void) { // It can also be used on a bob-omb respawner to change its model // to a butterfly or fish. o->parentObj->oEnemyLakituNumSpinies -= 1; - mark_object_for_deletion(o); + obj_mark_for_deletion(o); return FALSE; } } @@ -60,10 +60,10 @@ static s32 spiny_check_active(void) { */ static void spiny_act_walk(void) { if (spiny_check_active()) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); o->oGraphYOffset = -17.0f; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { // After touching the ground for the first time, stop. From now on, @@ -92,15 +92,15 @@ static void spiny_act_walk(void) { } } - obj_rotate_yaw_toward(o->oSpinyTargetYaw, 0x80); + cur_obj_rotate_yaw_toward(o->oSpinyTargetYaw, 0x80); } } else if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { // Bounce off walls while falling - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); } - obj_move_standard(-78); + cur_obj_move_standard(-78); if (obj_handle_attacks(&sSpinyHitbox, SPINY_ACT_ATTACKED_MARIO, sSpinyWalkAttackHandlers)) { // When attacked by mario, lessen the knockback @@ -124,7 +124,7 @@ static void spiny_act_walk(void) { */ static void spiny_act_held_by_lakitu(void) { o->oGraphYOffset = 15.0f; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); o->oParentRelativePosX = -50.0f; o->oParentRelativePosY = 35.0f; @@ -148,26 +148,26 @@ static void spiny_act_held_by_lakitu(void) { */ static void spiny_act_thrown_by_lakitu(void) { if (spiny_check_active()) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); o->oGraphYOffset = 15.0f; o->oFaceAnglePitch -= 0x2000; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); if (o->oMoveFlags & OBJ_MOVE_LANDED) { - PlaySound2(SOUND_OBJ_SPINY_UNK59); - obj_set_model(MODEL_SPINY); - func_8029EE20(o, spiny_seg5_anims_05016EAC, 0); + cur_obj_play_sound_2(SOUND_OBJ_SPINY_UNK59); + cur_obj_set_model(MODEL_SPINY); + obj_init_animation_with_sound(o, spiny_seg5_anims_05016EAC, 0); o->oGraphYOffset = -17.0f; o->oFaceAnglePitch = 0; o->oAction = SPINY_ACT_WALK; } else if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { - o->oMoveAngleYaw = obj_reflect_move_angle_off_wall(); + o->oMoveAngleYaw = cur_obj_reflect_move_angle_off_wall(); } - obj_move_standard(-78); + cur_obj_move_standard(-78); if (obj_check_attacks(&sSpinyHitbox, o->oAction)) { if (o->parentObj != o) { diff --git a/src/game/behaviors/square_platform_cycle.inc.c b/src/game/behaviors/square_platform_cycle.inc.c index 7a5fc6d..24eacb0 100644 --- a/src/game/behaviors/square_platform_cycle.inc.c +++ b/src/game/behaviors/square_platform_cycle.inc.c @@ -1,6 +1,6 @@ // square_platform_cycle.c.inc -s32 func_802B02FC(u16 yaw, s32 a) { +s32 square_plat_set_yaw_until_timer(u16 yaw, s32 a) { o->oMoveAngleYaw = yaw; if (a < o->oTimer) return 1; @@ -15,24 +15,24 @@ void bhv_squarish_path_moving_loop(void) { o->oAction = (o->oBehParams2ndByte & 3) + 1; break; case 1: - if (func_802B02FC(0, 60)) + if (square_plat_set_yaw_until_timer(0, 60)) o->oAction++; break; case 2: - if (func_802B02FC(0x4000, 60)) + if (square_plat_set_yaw_until_timer(0x4000, 60)) o->oAction++; break; case 3: - if (func_802B02FC(0x8000, 60)) + if (square_plat_set_yaw_until_timer(0x8000, 60)) o->oAction++; break; case 4: - if (func_802B02FC(0xc000, 60)) + if (square_plat_set_yaw_until_timer(0xc000, 60)) o->oAction = 1; break; default: break; } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); load_object_collision_model(); } diff --git a/src/game/behaviors/star_door.inc.c b/src/game/behaviors/star_door.inc.c index e7fcaf7..95e5c50 100644 --- a/src/game/behaviors/star_door.inc.c +++ b/src/game/behaviors/star_door.inc.c @@ -1,6 +1,6 @@ // star_door.c.inc -void func_802A4DB0(void) { +void star_door_update_pos(void) { o->oVelX = (o->oUnkBC) * coss(o->oMoveAngleYaw); o->oVelZ = (o->oUnkBC) * -sins(o->oMoveAngleYaw); o->oPosX += o->oVelX; @@ -10,10 +10,10 @@ void func_802A4DB0(void) { void bhv_star_door_loop(void) { UNUSED u8 pad[4]; struct Object *sp18; - sp18 = obj_nearest_object_with_behavior(bhvStarDoor); + sp18 = cur_obj_nearest_object_with_behavior(bhvStarDoor); switch (o->oAction) { case 0: - obj_become_tangible(); + cur_obj_become_tangible(); if (0x30000 & o->oInteractStatus) o->oAction = 1; if (sp18 != NULL && sp18->oAction != 0) @@ -21,10 +21,10 @@ void bhv_star_door_loop(void) { break; case 1: if (o->oTimer == 0 && (s16)(o->oMoveAngleYaw) >= 0) - PlaySound2(SOUND_GENERAL_STAR_DOOR_OPEN); - obj_become_intangible(); + cur_obj_play_sound_2(SOUND_GENERAL_STAR_DOOR_OPEN); + cur_obj_become_intangible(); o->oUnkBC = -8.0f; - func_802A4DB0(); + star_door_update_pos(); if (o->oTimer >= 16) o->oAction++; break; @@ -34,9 +34,9 @@ void bhv_star_door_loop(void) { break; case 3: if (o->oTimer == 0 && (s16)(o->oMoveAngleYaw) >= 0) - PlaySound2(SOUND_GENERAL_STAR_DOOR_CLOSE); + cur_obj_play_sound_2(SOUND_GENERAL_STAR_DOOR_CLOSE); o->oUnkBC = 8.0f; - func_802A4DB0(); + star_door_update_pos(); if (o->oTimer >= 16) o->oAction++; break; diff --git a/src/game/behaviors/static_checkered_platform.inc.c b/src/game/behaviors/static_checkered_platform.inc.c index 0980ae8..0537489 100644 --- a/src/game/behaviors/static_checkered_platform.inc.c +++ b/src/game/behaviors/static_checkered_platform.inc.c @@ -2,7 +2,7 @@ void bhv_static_checkered_platform_loop(void) { if (gDebugInfo[5][0] == 1) { - set_object_angle(o, 0, 0, 0); + obj_set_angle(o, 0, 0, 0); o->oAngleVelPitch = 0; o->oAngleVelYaw = 0; o->oAngleVelRoll = 0; diff --git a/src/game/behaviors/strong_wind_particle.inc.c b/src/game/behaviors/strong_wind_particle.inc.c new file mode 100644 index 0000000..50cd04b --- /dev/null +++ b/src/game/behaviors/strong_wind_particle.inc.c @@ -0,0 +1,65 @@ +// strong_wind_particle.c.inc + +struct ObjectHitbox sStrongWindParticleHitbox = { + /* interactType: */ INTERACT_STRONG_WIND, + /* downOffset: */ 0, + /* damageOrCoinValue: */ 0, + /* health: */ 0, + /* numLootCoins: */ 0, + /* radius: */ 20, + /* height: */ 70, + /* hurtboxRadius: */ 20, + /* hurtboxHeight: */ 70, +}; + +void bhv_strong_wind_particle_loop(void) { + struct Object *penguinObj; + f32 distanceFromPenguin; + f32 penguinXDist, penguinZDist; + + obj_set_hitbox(o, &sStrongWindParticleHitbox); + + if (o->oTimer == 0) { + o->oStrongWindParticlePenguinObj = cur_obj_nearest_object_with_behavior(bhvSLWalkingPenguin); + obj_translate_xyz_random(o, 100.0f); + + o->oForwardVel = coss(o->oMoveAnglePitch) * 100.0f; + o->oVelY = sins(o->oMoveAnglePitch) * -100.0f; + + o->oMoveAngleYaw += random_f32_around_zero(o->oBehParams2ndByte * 500); // Wind spread + o->oOpacity = 100; + } + + cur_obj_move_using_fvel_and_gravity(); + if (o->oTimer > 15) // Deactivate after 15 frames + obj_mark_for_deletion(o); + + // If collided with the SL walking penguin, deactivate. + penguinObj = o->oStrongWindParticlePenguinObj; + if (penguinObj != NULL) { + penguinXDist = penguinObj->oSLWalkingPenguinWindCollisionXPos - o->oPosX; + penguinZDist = penguinObj->oSLWalkingPenguinWindCollisionZPos - o->oPosZ; + distanceFromPenguin = sqrtf(penguinXDist * penguinXDist + penguinZDist * penguinZDist); + if (distanceFromPenguin < 300.0f) { + obj_mark_for_deletion(o); + cur_obj_become_intangible(); + } + } +} + +// Spawn particles that blow Mario away and knock his cap off from the current object. +// Used for the Snowman in SL and Fwoosh. +void cur_obj_spawn_strong_wind_particles(s32 windSpread, f32 scale, f32 relPosX, f32 relPosY, f32 relPosZ) { + // Alternate between tiny particles and regular particles each frame. + if ((gGlobalTimer & 1) != 0) { + // Because the tiny particles are unimportant objects, invisible wind particles are spawned to provide collision. + // There was absolutely no reason to make the smaller particles unimportant, though... + spawn_object_relative_with_scale(windSpread, relPosX, relPosY, relPosZ, 0.5f, o, MODEL_WHITE_PARTICLE_DL, bhvTinyStrongWindParticle); + spawn_object_relative_with_scale(windSpread, relPosX, relPosY, relPosZ, scale, o, MODEL_NONE, bhvStrongWindParticle); + } else + spawn_object_relative_with_scale(windSpread, relPosX, relPosY, relPosZ, scale, o, MODEL_MIST, bhvStrongWindParticle); + // There is also no need to spawn additional invisible wind particles here. + // If the devs were worried about object overload when making small particles unimportant, why spawn these? + // It isn't to ensure collision, as even 1 particle every 2 frames is enough to ensure this reliably. + spawn_object_relative_with_scale(windSpread, relPosX, relPosY, relPosZ, scale, o, MODEL_NONE, bhvStrongWindParticle); +} diff --git a/src/game/behaviors/sushi.inc.c b/src/game/behaviors/sushi.inc.c index f512276..52282c6 100644 --- a/src/game/behaviors/sushi.inc.c +++ b/src/game/behaviors/sushi.inc.c @@ -12,8 +12,8 @@ void bhv_sushi_shark_loop(void) { o->oSushiSharkUnkF4 += 0x80; if (gMarioObject->oPosY - sp1C > -500.0f) if (o->oPosY - sp1C > -200.0f) - spawn_object_with_scale(o, MODEL_WATER_WAVES, bhvWaterType, 4.0f); + spawn_object_with_scale(o, MODEL_WAVE_TRAIL, bhvObjectWaveTrail, 4.0f); if ((o->oTimer & 0xF) == 0) - PlaySound2(SOUND_OBJ_SUSHI_SHARK_WATER_SOUND); + cur_obj_play_sound_2(SOUND_OBJ_SUSHI_SHARK_WATER_SOUND); o->oInteractStatus = 0; } diff --git a/src/game/behaviors/switch_hidden_objects.inc.c b/src/game/behaviors/switch_hidden_objects.inc.c index bd352fd..e159700 100644 --- a/src/game/behaviors/switch_hidden_objects.inc.c +++ b/src/game/behaviors/switch_hidden_objects.inc.c @@ -12,7 +12,7 @@ struct ObjectHitbox sBreakableBoxHitbox = { /* hurtboxHeight: */ 200, }; -void func_802B0E74(void) { +void breakable_box_init(void) { o->oHiddenObjectUnkF4 = NULL; o->oAnimState = 1; switch (o->oBehParams2ndByte) { @@ -26,42 +26,42 @@ void func_802B0E74(void) { o->oNumLootCoins = 5; break; case 3: - obj_scale(1.5f); + cur_obj_scale(1.5f); break; } } -void func_802B0F54(void) { +void hidden_breakable_box_actions(void) { struct Object *sp1C; - set_object_hitbox(o, &sBreakableBoxHitbox); - obj_set_model(MODEL_BREAKABLE_BOX_SMALL); + obj_set_hitbox(o, &sBreakableBoxHitbox); + cur_obj_set_model(MODEL_BREAKABLE_BOX_SMALL); if (o->oAction == 0) { - obj_disable_rendering(); - obj_become_intangible(); + cur_obj_disable_rendering(); + cur_obj_become_intangible(); if (o->oTimer == 0) - func_802B0E74(); + breakable_box_init(); if (o->oHiddenObjectUnkF4 == NULL) - o->oHiddenObjectUnkF4 = obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); + o->oHiddenObjectUnkF4 = cur_obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); if ((sp1C = o->oHiddenObjectUnkF4) != NULL) if (sp1C->oAction == 2) { o->oAction++; - obj_enable_rendering(); - obj_unhide(); + cur_obj_enable_rendering(); + cur_obj_unhide(); } } else if (o->oAction == 1) { - obj_become_tangible(); - if (obj_wait_then_blink(360, 20)) + cur_obj_become_tangible(); + if (cur_obj_wait_then_blink(360, 20)) o->oAction = 0; - if (obj_was_attacked_or_ground_pounded()) { - func_802A3004(); + if (cur_obj_was_attacked_or_ground_pounded()) { + spawn_mist_particles(); spawn_triangle_break_particles(30, 138, 3.0f, 4); o->oAction++; - PlaySound2(SOUND_GENERAL_BREAK_BOX); + cur_obj_play_sound_2(SOUND_GENERAL_BREAK_BOX); } load_object_collision_model(); } else { - obj_become_intangible(); - obj_disable_rendering(); + cur_obj_become_intangible(); + cur_obj_disable_rendering(); o->oInteractStatus = 0; if ((sp1C = o->oHiddenObjectUnkF4) != NULL) if (sp1C->oAction == 0) @@ -69,23 +69,23 @@ void func_802B0F54(void) { } } -void func_802B1138(void) { +void hidden_unbreakable_box_actions(void) { struct Object *sp1C; - set_object_collision_data(o, wdw_seg7_collision_07018528); + obj_set_collision_data(o, wdw_seg7_collision_07018528); if (o->oAction == 0) { - obj_disable_rendering(); - obj_become_intangible(); + cur_obj_disable_rendering(); + cur_obj_become_intangible(); if (o->oHiddenObjectUnkF4 == NULL) - o->oHiddenObjectUnkF4 = obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); + o->oHiddenObjectUnkF4 = cur_obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); if ((sp1C = o->oHiddenObjectUnkF4) != NULL) if (sp1C->oAction == 2) { o->oAction++; - obj_enable_rendering(); - obj_unhide(); + cur_obj_enable_rendering(); + cur_obj_unhide(); } } else { - obj_become_tangible(); - if (obj_wait_then_blink(360, 20)) + cur_obj_become_tangible(); + if (cur_obj_wait_then_blink(360, 20)) o->oAction = 0; load_object_collision_model(); } @@ -93,7 +93,7 @@ void func_802B1138(void) { void bhv_hidden_object_loop(void) { if (o->oBehParams2ndByte == 0) - func_802B0F54(); // Confused, that function has code depending on the action + hidden_breakable_box_actions(); // Confused, that function has code depending on the action else - func_802B1138(); + hidden_unbreakable_box_actions(); } diff --git a/src/game/behaviors/swoop.inc.c b/src/game/behaviors/swoop.inc.c index d5d7f1c..8e628cf 100644 --- a/src/game/behaviors/swoop.inc.c +++ b/src/game/behaviors/swoop.inc.c @@ -24,11 +24,11 @@ static struct ObjectHitbox sSwoopHitbox = { * toward him and enter the move action. */ static void swoop_act_idle(void) { - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); if (approach_f32_ptr(&o->header.gfx.scale[0], 1.0f, 0.05f) && o->oDistanceToMario < 1500.0f) { - if (obj_rotate_yaw_toward(o->oAngleToMario, 800)) { - PlaySound2(SOUND_OBJ2_SWOOP); + if (cur_obj_rotate_yaw_toward(o->oAngleToMario, 800)) { + cur_obj_play_sound_2(SOUND_OBJ2_SWOOP); o->oAction = SWOOP_ACT_MOVE; o->oVelY = -12.0f; } @@ -42,9 +42,9 @@ static void swoop_act_idle(void) { * him. Return to home once mario is far away. */ static void swoop_act_move(void) { - func_8029ED98(0, 2.0f); - if (func_8029F788()) { - PlaySound2(SOUND_OBJ_UNKNOWN6); + cur_obj_init_animation_with_accel_and_sound(0, 2.0f); + if (cur_obj_check_if_near_animation_end()) { + cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN6); } if (o->oForwardVel == 0.0f) { @@ -53,10 +53,10 @@ static void swoop_act_move(void) { o->oForwardVel = 10.0f; o->oVelY = -10.0f; } - } else if (obj_mario_far_away()) { + } else if (cur_obj_mario_far_away()) { // If mario far away, reset o->oAction = SWOOP_ACT_IDLE; - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->header.gfx.scale[0] = o->oForwardVel = o->oVelY = 0.0f; o->oFaceAngleRoll = 0; } else { @@ -75,7 +75,7 @@ static void swoop_act_move(void) { } } else if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { // Bounce off a wall and don't bounce again for 30 frames. - o->oSwoopTargetYaw = obj_reflect_move_angle_off_wall(); + o->oSwoopTargetYaw = cur_obj_reflect_move_angle_off_wall(); o->oSwoopBonkCountdown = 30; } @@ -86,7 +86,7 @@ static void swoop_act_move(void) { obj_move_pitch_approach(o->oSwoopTargetPitch, 140); // Jitter yaw a bit - obj_rotate_yaw_toward(o->oSwoopTargetYaw + (s32)(3000 * coss(4000 * gGlobalTimer)), 1200); + cur_obj_rotate_yaw_toward(o->oSwoopTargetYaw + (s32)(3000 * coss(4000 * gGlobalTimer)), 1200); obj_roll_to_match_yaw_turn(o->oSwoopTargetYaw, 0x3000, 500); // Jitter roll a bit @@ -103,7 +103,7 @@ void bhv_swoop_update(void) { if (!(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)) { o->oDeathSound = SOUND_OBJ_SWOOP_DEATH; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case SWOOP_ACT_IDLE: @@ -114,8 +114,8 @@ void bhv_swoop_update(void) { break; } - obj_scale(o->header.gfx.scale[0]); - obj_move_standard(78); + cur_obj_scale(o->header.gfx.scale[0]); + cur_obj_move_standard(78); obj_check_attacks(&sSwoopHitbox, o->oAction); } diff --git a/src/game/behaviors/thi_top.inc.c b/src/game/behaviors/thi_top.inc.c index ea381f2..13b847b 100644 --- a/src/game/behaviors/thi_top.inc.c +++ b/src/game/behaviors/thi_top.inc.c @@ -10,7 +10,7 @@ void bhv_thi_huge_island_top_loop(void) { if (gTHIWaterDrained & 1) { if (o->oTimer == 0) gEnvironmentRegions[18] = 3000; - obj_hide(); + cur_obj_hide(); } else load_object_collision_model(); } @@ -21,15 +21,15 @@ void bhv_thi_tiny_island_top_loop(void) { if (o->oDistanceToMario < 500.0f) if (gMarioStates->action == ACT_GROUND_POUND_LAND) { o->oAction++; - obj_spawn_particles(&D_8032F134); + cur_obj_spawn_particles(&D_8032F134); spawn_triangle_break_particles(20, 138, 0.3f, 3); - PlaySound2(SOUND_GENERAL_ACTIVATE_CAP_SWITCH); - obj_hide(); + cur_obj_play_sound_2(SOUND_GENERAL_ACTIVATE_CAP_SWITCH); + cur_obj_hide(); } } else { if (o->oTimer < 50) { gEnvironmentRegions[18]--; - PlaySound(SOUND_ENV_WATER_DRAIN); + cur_obj_play_sound_1(SOUND_ENV_WATER_DRAIN); } else { gTHIWaterDrained |= 1; play_puzzle_jingle(); @@ -39,6 +39,6 @@ void bhv_thi_tiny_island_top_loop(void) { } else { if (o->oTimer == 0) gEnvironmentRegions[18] = 700; - obj_hide(); + cur_obj_hide(); } } diff --git a/src/game/behaviors/thwomp.inc.c b/src/game/behaviors/thwomp.inc.c index 27b5884..69d0541 100644 --- a/src/game/behaviors/thwomp.inc.c +++ b/src/game/behaviors/thwomp.inc.c @@ -1,13 +1,13 @@ // thwomp.c.inc -void ActionGrindelThwomp4(void) { +void grindel_thwomp_act_4(void) { if (o->oTimer == 0) o->oThwompUnkF4 = RandomFloat() * 10.0f + 20.0f; if (o->oTimer > o->oThwompUnkF4) o->oAction = 0; } -void ActionGrindelThwomp2(void) { +void grindel_thwomp_act_2(void) { o->oVelY += -4.0f; o->oPosY += o->oVelY; if (o->oPosY < o->oHomeY) { @@ -17,24 +17,24 @@ void ActionGrindelThwomp2(void) { } } -void ActionGrindelThwomp3(void) { +void grindel_thwomp_act_3(void) { if (o->oTimer == 0) if (o->oDistanceToMario < 1500.0f) { - ShakeScreen(SHAKE_POS_SMALL); - PlaySound2(SOUND_OBJ_THWOMP); + cur_obj_shake_screen(SHAKE_POS_SMALL); + cur_obj_play_sound_2(SOUND_OBJ_THWOMP); } if (o->oTimer > 9) o->oAction = 4; } -void ActionGrindelThwomp1(void) { +void grindel_thwomp_act_1(void) { if (o->oTimer == 0) o->oThwompUnkF4 = RandomFloat() * 30.0f + 10.0f; if (o->oTimer > o->oThwompUnkF4) o->oAction = 2; } -void ActionGrindelThwomp0(void) { +void grindel_thwomp_act_0(void) { if (o->oBehParams2ndByte + 40 < o->oTimer) { o->oAction = 1; o->oPosY += 5.0f; @@ -42,10 +42,10 @@ void ActionGrindelThwomp0(void) { o->oPosY += 10.0f; } -void (*sGrindelThwompActions[])(void) = { ActionGrindelThwomp0, ActionGrindelThwomp1, - ActionGrindelThwomp2, ActionGrindelThwomp3, - ActionGrindelThwomp4 }; +void (*sGrindelThwompActions[])(void) = { grindel_thwomp_act_0, grindel_thwomp_act_1, + grindel_thwomp_act_2, grindel_thwomp_act_3, + grindel_thwomp_act_4 }; void bhv_grindel_thwomp_loop(void) { - obj_call_action_function(sGrindelThwompActions); + cur_obj_call_action_function(sGrindelThwompActions); } diff --git a/src/game/behaviors/tower_door.inc.c b/src/game/behaviors/tower_door.inc.c index 926560d..70bdf31 100644 --- a/src/game/behaviors/tower_door.inc.c +++ b/src/game/behaviors/tower_door.inc.c @@ -3,8 +3,8 @@ void bhv_tower_door_loop(void) { if (o->oTimer == 0) o->oMoveAngleYaw -= 0x4000; - if (func_802A9A0C(0)) { - func_802A3C98(80.0f, 0); + if (check_mario_attacking(0)) { + obj_explode_and_spawn_coins(80.0f, 0); create_sound_spawner(SOUND_GENERAL_WALL_EXPLOSION); } } diff --git a/src/game/behaviors/tower_platform.inc.c b/src/game/behaviors/tower_platform.inc.c index a74c1b5..45a4b8a 100644 --- a/src/game/behaviors/tower_platform.inc.c +++ b/src/game/behaviors/tower_platform.inc.c @@ -2,7 +2,7 @@ void bhv_wf_solid_tower_platform_loop(void) { if (o->parentObj->oAction == 3) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_wf_elevator_tower_platform_loop(void) { @@ -12,7 +12,7 @@ void bhv_wf_elevator_tower_platform_loop(void) { o->oAction++; break; case 1: - PlaySound(SOUND_ENV_ELEVATOR1); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR1); if (o->oTimer > 140) o->oAction++; else @@ -23,7 +23,7 @@ void bhv_wf_elevator_tower_platform_loop(void) { o->oAction++; break; case 3: - PlaySound(SOUND_ENV_ELEVATOR1); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR1); if (o->oTimer > 140) o->oAction = 0; else @@ -31,7 +31,7 @@ void bhv_wf_elevator_tower_platform_loop(void) { break; } if (o->parentObj->oAction == 3) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_wf_sliding_tower_platform_loop(void) { @@ -48,14 +48,14 @@ void bhv_wf_sliding_tower_platform_loop(void) { o->oForwardVel = o->oPlatformUnk10C; break; } - obj_compute_vel_xz(); + cur_obj_compute_vel_xz(); o->oPosX += o->oVelX; o->oPosZ += o->oVelZ; if (o->parentObj->oAction == 3) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void func_802AF9A4(s16 a, const BehaviorScript *beh) { +void spawn_and_init_wf_platforms(s16 a, const BehaviorScript *beh) { s16 yaw; struct Object *platform = spawn_object(o, a, beh); yaw = o->oPlatformSpawnerUnkF4 * o->oPlatformSpawnerUnkFC + o->oPlatformSpawnerUnkF8; @@ -68,7 +68,7 @@ void func_802AF9A4(s16 a, const BehaviorScript *beh) { o->oPlatformSpawnerUnkF4++; } -void func_802AFAFC(void) { +void spawn_wf_platform_group(void) { UNUSED s32 unused = 8; o->oPlatformSpawnerUnkF4 = 0; o->oPlatformSpawnerUnkF8 = 0; @@ -76,14 +76,14 @@ void func_802AFAFC(void) { o->oPlatformSpawnerUnk100 = 704.0f; o->oPlatformSpawnerUnk104 = 380.0f; o->oPlatformSpawnerUnk108 = 3.0f; - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSlidingTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSlidingTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSlidingTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); - func_802AF9A4(MODEL_WF_TOWER_SQUARE_PLATORM_ELEVATOR, bhvWfElevatorTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSlidingTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSlidingTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSlidingTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM, bhvWfSolidTowerPlatform); + spawn_and_init_wf_platforms(MODEL_WF_TOWER_SQUARE_PLATORM_ELEVATOR, bhvWfElevatorTowerPlatform); } void bhv_tower_platform_group_loop(void) { @@ -95,7 +95,7 @@ void bhv_tower_platform_group_loop(void) { o->oAction++; break; case 1: - func_802AFAFC(); + spawn_wf_platform_group(); o->oAction++; break; case 2: diff --git a/src/game/behaviors/tox_box.inc.c b/src/game/behaviors/tox_box.inc.c index da28ded..c083944 100644 --- a/src/game/behaviors/tox_box.inc.c +++ b/src/game/behaviors/tox_box.inc.c @@ -8,12 +8,12 @@ s8 D_8032F948[] = { 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 7, 1, 2, 6, 1, 6, 1, 5, 1, 2, 4, 1, 7, 1, -1 }; s8 *D_8032F96C[] = { D_8032F8F0, D_8032F924, D_8032F948 }; -void func_802BCF78(void) { +void tox_box_shake_screen(void) { if (o->oDistanceToMario < 3000.0f) - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_shake_screen(SHAKE_POS_SMALL); } -void func_802BCFC4(f32 a0, f32 a1, s16 a2, s16 a3) // 0x18 0x1c 0x22 0x26 +void tox_box_move(f32 a0, f32 a1, s16 a2, s16 a3) // 0x18 0x1c 0x22 0x26 { o->oPosY = 99.41124 * sins((f32)(o->oTimer + 1) / 8 * 0x8000) + o->oHomeY + 3.0f; o->oForwardVel = a0; @@ -22,58 +22,58 @@ void func_802BCFC4(f32 a0, f32 a1, s16 a2, s16 a3) // 0x18 0x1c 0x22 0x26 if ((s16) o->oFaceAnglePitch < 0) a3 = -a3; o->oFaceAngleRoll += a3; - func_802A2A38(); + cur_obj_set_pos_via_transform(); if (o->oTimer == 7) { - o->oAction = func_802A32E0(); + o->oAction = cur_obj_progress_direction_table(); #ifndef VERSION_JP - PlaySound2(SOUND_GENERAL_UNK46); + cur_obj_play_sound_2(SOUND_GENERAL_UNK46); #else - PlaySound2(SOUND_GENERAL_UNK46_LOWPRIO); + cur_obj_play_sound_2(SOUND_GENERAL_UNK46_LOWPRIO); #endif } } -void ActionToxBox4(void) { - func_802BCFC4(64.0f, 0.0f, 0x800, 0); +void tox_box_act_4(void) { + tox_box_move(64.0f, 0.0f, 0x800, 0); } -void ActionToxBox5(void) { - func_802BCFC4(-64.0f, 0.0f, -0x800, 0); +void tox_box_act_5(void) { + tox_box_move(-64.0f, 0.0f, -0x800, 0); } -void ActionToxBox6(void) { - func_802BCFC4(0.0f, -64.0f, 0, 0x800); +void tox_box_act_6(void) { + tox_box_move(0.0f, -64.0f, 0, 0x800); } -void ActionToxBox7(void) { - func_802BCFC4(0.0f, 64.0f, 0, -0x800); +void tox_box_act_7(void) { + tox_box_move(0.0f, 64.0f, 0, -0x800); } -void ActionToxBox1(void) { +void tox_box_act_1(void) { o->oForwardVel = 0.0f; if (o->oTimer == 0) - func_802BCF78(); + tox_box_shake_screen(); o->oPosY = o->oHomeY + 3.0f; if (o->oTimer == 20) - o->oAction = func_802A32E0(); + o->oAction = cur_obj_progress_direction_table(); } -void ActionToxBox2(void) { +void tox_box_act_2(void) { if (o->oTimer == 20) - o->oAction = func_802A32E0(); + o->oAction = cur_obj_progress_direction_table(); } -void ActionToxBox3(void) { +void tox_box_act_3(void) { if (o->oTimer == 20) - o->oAction = func_802A32E0(); + o->oAction = cur_obj_progress_direction_table(); } -void ActionToxBox0(void) { +void tox_box_act_0(void) { s8 *sp1C = D_8032F96C[o->oBehParams2ndByte]; - o->oAction = func_802A32A4(sp1C); + o->oAction = cur_obj_set_direction_table(sp1C); } -void (*sToxBoxActions[])(void) = { ActionToxBox0, ActionToxBox1, ActionToxBox2, ActionToxBox3, - ActionToxBox4, ActionToxBox5, ActionToxBox6, ActionToxBox7 }; +void (*sToxBoxActions[])(void) = { tox_box_act_0, tox_box_act_1, tox_box_act_2, tox_box_act_3, + tox_box_act_4, tox_box_act_5, tox_box_act_6, tox_box_act_7 }; void bhv_tox_box_loop(void) { - obj_call_action_function(sToxBoxActions); + cur_obj_call_action_function(sToxBoxActions); load_object_collision_model(); } diff --git a/src/game/behaviors/treasure_chest.inc.c b/src/game/behaviors/treasure_chest.inc.c index cc54cdc..94f3062 100644 --- a/src/game/behaviors/treasure_chest.inc.c +++ b/src/game/behaviors/treasure_chest.inc.c @@ -59,7 +59,7 @@ void bhv_treasure_chest_top_loop(void) { void bhv_treasure_chest_bottom_init(void) { spawn_object_relative(0, 0, 102, -77, o, MODEL_TREASURE_CHEST_LID, bhvTreasureChestTop); - set_object_hitbox(o, &sTreasureChestBottomHitbox); + obj_set_hitbox(o, &sTreasureChestBottomHitbox); } void bhv_treasure_chest_bottom_loop(void) { @@ -76,7 +76,7 @@ void bhv_treasure_chest_bottom_loop(void) { o->parentObj->oTreasureChestUnkF4 = 1; o->parentObj->oTreasureChestUnkF8 = 1; o->oAction = 2; - obj_become_tangible(); + cur_obj_become_tangible(); play_sound(SOUND_MENU_CAMERA_BUZZ, gDefaultSoundArgs); } } @@ -90,18 +90,18 @@ void bhv_treasure_chest_bottom_loop(void) { break; case 2: - obj_become_intangible(); + cur_obj_become_intangible(); if (!is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 500)) { o->parentObj->oTreasureChestUnkF8 = 0; o->oAction = 0; } } - obj_push_mario_away_from_cylinder(150.0f, 150.0f); + cur_obj_push_mario_away_from_cylinder(150.0f, 150.0f); o->oInteractStatus = 0; } -void func_802F6E8C(s8 sp3B, s32 sp3C, s32 sp40, s32 sp44, s16 sp4A) { +void spawn_treasure_chest(s8 sp3B, s32 sp3C, s32 sp40, s32 sp44, s16 sp4A) { struct Object *sp34; sp34 = spawn_object_abs_with_rot(o, 0, MODEL_TREASURE_CHEST_BASE, bhvTreasureChestBottom, sp3C, sp40, sp44, 0, sp4A, 0); @@ -109,10 +109,10 @@ void func_802F6E8C(s8 sp3B, s32 sp3C, s32 sp40, s32 sp44, s16 sp4A) { } void bhv_treasure_chest_ship_init(void) { - func_802F6E8C(1, 400, -350, -2700, 0); - func_802F6E8C(2, 650, -350, -940, -0x6001); - func_802F6E8C(3, -550, -350, -770, 0x5FFF); - func_802F6E8C(4, 100, -350, -1700, 0); + spawn_treasure_chest(1, 400, -350, -2700, 0); + spawn_treasure_chest(2, 650, -350, -940, -0x6001); + spawn_treasure_chest(3, -550, -350, -770, 0x5FFF); + spawn_treasure_chest(4, 100, -350, -1700, 0); o->oTreasureChestUnkF4 = 1; o->oTreasureChestUnkFC = 0; } @@ -142,10 +142,10 @@ void bhv_treasure_chest_ship_loop(void) { } void bhv_treasure_chest_jrb_init(void) { - func_802F6E8C(1, -1700, -2812, -1150, 0x7FFF); - func_802F6E8C(2, -1150, -2812, -1550, 0x7FFF); - func_802F6E8C(3, -2400, -2812, -1800, 0x7FFF); - func_802F6E8C(4, -1800, -2812, -2100, 0x7FFF); + spawn_treasure_chest(1, -1700, -2812, -1150, 0x7FFF); + spawn_treasure_chest(2, -1150, -2812, -1550, 0x7FFF); + spawn_treasure_chest(3, -2400, -2812, -1800, 0x7FFF); + spawn_treasure_chest(4, -1800, -2812, -2100, 0x7FFF); o->oTreasureChestUnkF4 = 1; o->oTreasureChestUnkFC = 1; } @@ -161,8 +161,8 @@ void bhv_treasure_chest_jrb_loop(void) { case 1: if (o->oTimer == 60) { - func_802A3004(); - create_star(-1800.0f, -2500.0f, -1700.0f); + spawn_mist_particles(); + spawn_default_star(-1800.0f, -2500.0f, -1700.0f); o->oAction = 2; } break; @@ -173,10 +173,10 @@ void bhv_treasure_chest_jrb_loop(void) { } void bhv_treasure_chest_init(void) { - func_802F6E8C(1, -4500, -5119, 1300, -0x6001); - func_802F6E8C(2, -1800, -5119, 1050, 0x1FFF); - func_802F6E8C(3, -4500, -5119, -1100, 9102); - func_802F6E8C(4, -2400, -4607, 125, 16019); + spawn_treasure_chest(1, -4500, -5119, 1300, -0x6001); + spawn_treasure_chest(2, -1800, -5119, 1050, 0x1FFF); + spawn_treasure_chest(3, -4500, -5119, -1100, 9102); + spawn_treasure_chest(4, -2400, -4607, 125, 16019); o->oTreasureChestUnkF4 = 1; o->oTreasureChestUnkFC = 0; @@ -193,8 +193,8 @@ void bhv_treasure_chest_loop(void) { case 1: if (o->oTimer == 60) { - func_802A3004(); - create_star(-1900.0f, -4000.0f, -1400.0f); + spawn_mist_particles(); + spawn_default_star(-1900.0f, -4000.0f, -1400.0f); o->oAction = 2; } break; diff --git a/src/game/behaviors/tree_particles.inc.c b/src/game/behaviors/tree_particles.inc.c index 4d46c22..64771e0 100644 --- a/src/game/behaviors/tree_particles.inc.c +++ b/src/game/behaviors/tree_particles.inc.c @@ -1,7 +1,7 @@ // tree_particles.c.inc void bhv_tree_snow_or_leaf_loop(void) { - obj_update_floor_height(); + cur_obj_update_floor_height(); if (o->oTimer == 0) { o->oAngleVelPitch = (RandomFloat() - 0.5) * 0x1000; o->oAngleVelRoll = (RandomFloat() - 0.5) * 0x1000; @@ -9,13 +9,13 @@ void bhv_tree_snow_or_leaf_loop(void) { o->oTreeSnowOrLeafUnkFC = RandomFloat() * 0x400 + 0x600; } if (o->oPosY < o->oFloorHeight) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->oFloorHeight < -11000.0f) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->oTimer > 100) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (gPrevFrameObjectCount > 212) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); o->oFaceAnglePitch += o->oAngleVelPitch; o->oFaceAngleRoll += o->oAngleVelRoll; o->oVelY += -3.0f; @@ -46,7 +46,7 @@ void bhv_snow_leaf_particle_spawn_init(void) { if (RandomFloat() < 0.5) { obj = spawn_object(o, MODEL_WHITE_PARTICLE_DL, bhvTreeSnow); scale = RandomFloat(); - scale_object_xyz(obj, scale, scale, scale); + obj_scale_xyz(obj, scale, scale, scale); obj->oMoveAngleYaw = RandomU16(); obj->oForwardVel = RandomFloat() * 5.0f; obj->oVelY = RandomFloat() * 15.0f; @@ -55,7 +55,7 @@ void bhv_snow_leaf_particle_spawn_init(void) { if (RandomFloat() < 0.3) { obj = spawn_object(o, MODEL_LEAVES, bhvTreeLeaf); scale = RandomFloat() * 3.0f; - scale_object_xyz(obj, scale, scale, scale); + obj_scale_xyz(obj, scale, scale, scale); obj->oMoveAngleYaw = RandomU16(); obj->oForwardVel = RandomFloat() * 5.0f + 5.0f; obj->oVelY = RandomFloat() * 15.0f; diff --git a/src/game/behaviors/triplet_butterfly.inc.c b/src/game/behaviors/triplet_butterfly.inc.c index 01f8dbe..15e3f2f 100644 --- a/src/game/behaviors/triplet_butterfly.inc.c +++ b/src/game/behaviors/triplet_butterfly.inc.c @@ -49,17 +49,17 @@ static void triplet_butterfly_act_init(void) { o->oMoveAngleYaw = (s32)(o->oTripletButterflyBaseYaw + random_linear_offset(0, 0x5555)); o->oTripletButterflySpeed = random_linear_offset(15, 15); - obj_unhide(); + cur_obj_unhide(); } } static void triplet_butterfly_act_wander(void) { if (o->oDistanceToMario > 1500.0f) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { approach_f32_ptr(&o->oTripletButterflySpeed, 8.0f, 0.5f); if (o->oTimer < 60) { - o->oTripletButterflyTargetYaw = obj_angle_to_home(); + o->oTripletButterflyTargetYaw = cur_obj_angle_to_home(); } else { o->oTripletButterflyTargetYaw = (s32) o->oTripletButterflyBaseYaw; @@ -81,7 +81,7 @@ static void triplet_butterfly_act_wander(void) { } obj_move_pitch_approach(o->oTripletButterflyTargetPitch, 400); - obj_rotate_yaw_toward(o->oTripletButterflyTargetYaw, random_linear_offset(400, 800)); + cur_obj_rotate_yaw_toward(o->oTripletButterflyTargetYaw, random_linear_offset(400, 800)); } } @@ -90,7 +90,7 @@ static void triplet_butterfly_act_activate(void) { if (o->oTripletButterflyModel == 0) { spawn_object_relative_with_scale(0, 0, -40, 0, 1.5f, o, MODEL_SMOKE, bhvWhitePuffSmoke2); o->oTripletButterflyModel = sTripletButterflyActivationData[o->oTripletButterflyType].model; - obj_set_model(o->oTripletButterflyModel); + cur_obj_set_model(o->oTripletButterflyModel); obj_set_billboard(o); o->oTripletButterflyScale = 0.0f; o->oHomeY = o->oPosY; @@ -99,7 +99,7 @@ static void triplet_butterfly_act_activate(void) { if (o->oTripletButterflyType != TRIPLET_BUTTERFLY_TYPE_EXPLODES) { spawn_object(o, o->oTripletButterflyModel, sTripletButterflyActivationData[o->oTripletButterflyType].behavior); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { o->oAction = TRIPLET_BUTTERFLY_ACT_EXPLODE; o->oWallHitboxRadius = 100.0f; @@ -123,7 +123,7 @@ static void triplet_butterfly_act_explode(void) { if (o->oAction == -1 || (o->oMoveFlags & 0x00000200) || o->oTimer >= 158) { o->oPosY += o->oGraphYOffset; spawn_object(o, MODEL_EXPLOSION, bhvExplosion); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { if (o->oTimer > 120) { scaleIncrease = 0.04f * coss(o->oTripletButterflyScalePhase); @@ -138,13 +138,13 @@ static void triplet_butterfly_act_explode(void) { } approach_f32_ptr(&o->oTripletButterflySpeed, 20.0f, 1.0f); - obj_rotate_yaw_toward(o->oAngleToMario, 800); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 800); obj_turn_pitch_toward_mario(-100.0f, 800); } } void bhv_triplet_butterfly_update(void) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case TRIPLET_BUTTERFLY_ACT_INIT: @@ -161,7 +161,7 @@ void bhv_triplet_butterfly_update(void) { break; } - obj_scale(o->oTripletButterflyScale); + cur_obj_scale(o->oTripletButterflyScale); obj_compute_vel_from_move_pitch(o->oTripletButterflySpeed); - obj_move_standard(78); + cur_obj_move_standard(78); } diff --git a/src/game/behaviors/ttc_elevator.inc.c b/src/game/behaviors/ttc_elevator.inc.c index 7c2afbd..10d578d 100644 --- a/src/game/behaviors/ttc_elevator.inc.c +++ b/src/game/behaviors/ttc_elevator.inc.c @@ -43,7 +43,7 @@ void bhv_ttc_elevator_update(void) { } // This is basically equivalent to posY += velY - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); // Flip directions if the elevator tries to run away if (clamp_f32(&o->oPosY, o->oHomeY, o->oTTCElevatorPeakY)) { diff --git a/src/game/behaviors/ttc_pendulum.inc.c b/src/game/behaviors/ttc_pendulum.inc.c index 0f94d00..9b870ca 100644 --- a/src/game/behaviors/ttc_pendulum.inc.c +++ b/src/game/behaviors/ttc_pendulum.inc.c @@ -36,7 +36,7 @@ void bhv_ttc_pendulum_update(void) { // Play sound if (o->oTTCPendulumSoundTimer != 0) { if (--o->oTTCPendulumSoundTimer == 0) { - PlaySound2(SOUND_GENERAL_PENDULUM_SWING); + cur_obj_play_sound_2(SOUND_GENERAL_PENDULUM_SWING); } } diff --git a/src/game/behaviors/ttc_pit_block.inc.c b/src/game/behaviors/ttc_pit_block.inc.c index fc8ec16..d81dc22 100644 --- a/src/game/behaviors/ttc_pit_block.inc.c +++ b/src/game/behaviors/ttc_pit_block.inc.c @@ -53,7 +53,7 @@ void bhv_ttc_pit_block_init(void) { void bhv_ttc_pit_block_update(void) { if (o->oTimer > o->oTTCPitBlockWaitTime) { // Forward vel and gravity are zero, so this just does posY += velY - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (clamp_f32(&o->oPosY, o->oHomeY, o->oTTCPitBlockPeakY)) { o->oTTCPitBlockDir = o->oTTCPitBlockDir ^ 0x1; diff --git a/src/game/behaviors/ttc_rotating_solid.inc.c b/src/game/behaviors/ttc_rotating_solid.inc.c index dce34ad..1f9e8ad 100644 --- a/src/game/behaviors/ttc_rotating_solid.inc.c +++ b/src/game/behaviors/ttc_rotating_solid.inc.c @@ -43,7 +43,7 @@ void bhv_ttc_rotating_solid_update(void) { if (o->oTTCRotatingSolidSoundTimer != 0) { // 3. Play a sound after 6 frames if (--o->oTTCRotatingSolidSoundTimer == 0) { - PlaySound2(SOUND_GENERAL2_ROTATING_BLOCK_ALERT); + cur_obj_play_sound_2(SOUND_GENERAL2_ROTATING_BLOCK_ALERT); } } else if (o->oTTCRotatingSolidVelY > 0.0f && o->oPosY >= o->oHomeY) { // 4. Rotate @@ -55,7 +55,7 @@ void bhv_ttc_rotating_solid_update(void) { o->oAngleVelRoll = o->oFaceAngleRoll - startRoll; if (o->oAngleVelRoll == 0) { - PlaySound2(SOUND_GENERAL2_ROTATING_BLOCK_CLICK); + cur_obj_play_sound_2(SOUND_GENERAL2_ROTATING_BLOCK_CLICK); o->oTTCRotatingSolidNumTurns = (o->oTTCRotatingSolidNumTurns + 1) % o->oTTCRotatingSolidNumSides; diff --git a/src/game/behaviors/ttc_treadmill.inc.c b/src/game/behaviors/ttc_treadmill.inc.c index 2f24d8b..7ae82f4 100644 --- a/src/game/behaviors/ttc_treadmill.inc.c +++ b/src/game/behaviors/ttc_treadmill.inc.c @@ -36,13 +36,13 @@ void bhv_ttc_treadmill_init(void) { } /** - * Update function for bhvTTCTreadmill. It calls obj_compute_vel_xz afterward. + * Update function for bhvTTCTreadmill. It calls cur_obj_compute_vel_xz afterward. */ void bhv_ttc_treadmill_update(void) { if (sMasterTreadmill == o || sMasterTreadmill == NULL) { sMasterTreadmill = o; - PlaySound(SOUND_ENV_ELEVATOR2); + cur_obj_play_sound_1(SOUND_ENV_ELEVATOR2); if (gTTCSpeedSetting == TTC_SPEED_RANDOM) { // Stay still for 5 frames, then accelerate toward the target speed diff --git a/src/game/behaviors/tumbling_bridge.inc.c b/src/game/behaviors/tumbling_bridge.inc.c index 18e74d3..3972955 100644 --- a/src/game/behaviors/tumbling_bridge.inc.c +++ b/src/game/behaviors/tumbling_bridge.inc.c @@ -21,10 +21,10 @@ void bhv_tumbling_bridge_platform_loop(void) { } break; case 1: - obj_update_floor_height(); + cur_obj_update_floor_height(); if (o->oTimer > 5) { o->oAction++; - PlaySound2(SOUND_GENERAL_PLATFORM); + cur_obj_play_sound_2(SOUND_GENERAL_PLATFORM); } break; case 2: @@ -33,8 +33,8 @@ void bhv_tumbling_bridge_platform_loop(void) { if (o->oAngleVelRoll > -0x400 && o->oAngleVelRoll < 0x400) o->oAngleVelRoll += o->oTumblingBridgeUnkF4; // acceleration? o->oGravity = -3.0f; - obj_rotate_face_angle_using_vel(); - obj_move_using_fvel_and_gravity(); + cur_obj_rotate_face_angle_using_vel(); + cur_obj_move_using_fvel_and_gravity(); if (o->oPosY < o->oFloorHeight - 300.0f) o->oAction++; break; @@ -42,10 +42,10 @@ void bhv_tumbling_bridge_platform_loop(void) { break; } if (o->parentObj->oAction == 3) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void ActionTumblingBridge1(void) { +void tumbling_bridge_act_1(void) { struct Object *platformObj; s32 i; s32 bridgeID = o->oBehParams2ndByte; @@ -65,7 +65,7 @@ void ActionTumblingBridge1(void) { relativePlatformZ = sTumblingBridgeParams[bridgeID].bridgeRelativeStartingXorZ + sTumblingBridgeParams[bridgeID].platformWidth * i; - if (obj_has_behavior(bhvLllTumblingBridge)) { + if (cur_obj_has_behavior(bhvLllTumblingBridge)) { if (i % 3 == 0) relativePlatformY -= 150; relativeInitialPlatformY = 450; @@ -75,38 +75,38 @@ void ActionTumblingBridge1(void) { 0, relativePlatformX, relativePlatformY + relativeInitialPlatformY, relativePlatformZ, o, sTumblingBridgeParams[bridgeID].model, bhvTumblingBridgePlatform); - set_object_collision_data(platformObj, sTumblingBridgeParams[bridgeID].segAddr); + obj_set_collision_data(platformObj, sTumblingBridgeParams[bridgeID].segAddr); } o->oAction = 2; } -void ActionTumblingBridge2(void) { - obj_hide(); - if (obj_has_behavior(bhvLllTumblingBridge)) - obj_unhide(); +void tumbling_bridge_act_2(void) { + cur_obj_hide(); + if (cur_obj_has_behavior(bhvLllTumblingBridge)) + cur_obj_unhide(); else if (o->oDistanceToMario > 1200.0f) { o->oAction = 3; - obj_unhide(); + cur_obj_unhide(); } } -void ActionTumblingBridge3(void) { - obj_unhide(); +void tumbling_bridge_act_3(void) { + cur_obj_unhide(); o->oAction = 0; } -void ActionTumblingBridge0(void) { - if (obj_has_behavior(bhvLllTumblingBridge) || o->oDistanceToMario < 1000.0f) +void tumbling_bridge_act_0(void) { + if (cur_obj_has_behavior(bhvLllTumblingBridge) || o->oDistanceToMario < 1000.0f) o->oAction = 1; } -void (*sTumblingBridgeActions[])(void) = { ActionTumblingBridge0, ActionTumblingBridge1, - ActionTumblingBridge2, ActionTumblingBridge3 }; +void (*sTumblingBridgeActions[])(void) = { tumbling_bridge_act_0, tumbling_bridge_act_1, + tumbling_bridge_act_2, tumbling_bridge_act_3 }; s16 D_8032F38C[] = { -51, 0, 0, -461, 0, 0, -512, 0, 0, -2611, 0, 0, -2360, 0, 0, 214, 0, 0, -50, 1945, 1, 0 }; void bhv_tumbling_bridge_loop(void) { - obj_call_action_function(sTumblingBridgeActions); + cur_obj_call_action_function(sTumblingBridgeActions); } diff --git a/src/game/behaviors/tuxie.inc.c b/src/game/behaviors/tuxie.inc.c index 776113e..16ba877 100644 --- a/src/game/behaviors/tuxie.inc.c +++ b/src/game/behaviors/tuxie.inc.c @@ -1,16 +1,5 @@ // tuxie.c.inc -s32 func_802BE2E8(s16 a0, s16 a1, s32 a2) { - f32 sp1C; - if ((sp1C = o->header.gfx.unk38.animAccel / (f32) 0x10000) == 0) - sp1C = 1.0f; - if (obj_check_anim_frame_in_range(a0, sp1C) || obj_check_anim_frame_in_range(a1, sp1C)) { - PlaySound2(a2); - return 1; - } - return 0; -} - void play_penguin_walking_sound(s32 walk) { s32 sound; if (o->oSoundStateID == 0) { @@ -18,31 +7,31 @@ void play_penguin_walking_sound(s32 walk) { sound = SOUND_OBJ_BABY_PENGUIN_WALK; else // PENGUIN_WALK_BIG sound = SOUND_OBJ_BIG_PENGUIN_WALK; - func_802BE2E8(1, 11, sound); + set_obj_anim_with_accel_and_sound(1, 11, sound); } } -void ActionTuxiesMother2(void) { +void tuxies_mother_act_2(void) { f32 sp24; UNUSED s32 unused; - struct Object *sp1C = obj_find_nearest_object_with_behavior(bhvSmallPenguin, &sp24); + struct Object *sp1C = cur_obj_find_nearest_object_with_behavior(bhvSmallPenguin, &sp24); - if (obj_find_nearby_held_actor(bhvUnused20E0, 1000.0f) != NULL) { + if (cur_obj_find_nearby_held_actor(bhvUnused20E0, 1000.0f) != NULL) { if (o->oSubAction == 0) { - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); o->oForwardVel = 10.0f; - if (800.0f < obj_lateral_dist_from_mario_to_home()) + if (800.0f < cur_obj_lateral_dist_from_mario_to_home()) o->oSubAction = 1; - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); } else { o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(3); - if (obj_lateral_dist_from_mario_to_home() < 700.0f) + cur_obj_init_animation_with_sound(3); + if (cur_obj_lateral_dist_from_mario_to_home() < 700.0f) o->oSubAction = 0; } } else { o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(3); + cur_obj_init_animation_with_sound(3); } if (sp1C != NULL && sp24 < 300.0f && sp1C->oHeldState != HELD_FREE) { o->oAction = 1; @@ -51,21 +40,21 @@ void ActionTuxiesMother2(void) { } } -void ActionTuxiesMother1(void) { +void tuxies_mother_act_1(void) { s32 sp2C; s32 sp28; s32 dialogID; switch (o->oSubAction) { case 0: - set_obj_animation_and_sound_state(3); - if (!obj_is_mario_on_platform()) { + cur_obj_init_animation_with_sound(3); + if (!cur_obj_is_mario_on_platform()) { sp2C = (o->oBehParams >> 0x10) & 0xFF; sp28 = (o->prevObj->oBehParams >> 0x10) & 0xFF; if (sp2C == sp28) dialogID = DIALOG_058; else dialogID = DIALOG_059; - if (obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, dialogID)) { + if (cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, dialogID)) { if (dialogID == DIALOG_058) o->oSubAction = 1; else @@ -73,7 +62,7 @@ void ActionTuxiesMother1(void) { o->prevObj->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY; } } else - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); break; case 1: if (o->prevObj->oHeldState == HELD_FREE) { @@ -86,11 +75,11 @@ void ActionTuxiesMother1(void) { // which has no effect as o->prevObj->oUnknownUnk88 is always 0 // or 1, which is not affected by the bitwise AND. o->prevObj->OBJECT_FIELD_S32(o->oInteractionSubtype) &= ~INT_SUBTYPE_DROP_IMMEDIATELY; - set_object_behavior(o->prevObj, bhvUnused20E0); + obj_set_behavior(o->prevObj, bhvUnused20E0); #ifndef VERSION_JP - obj_spawn_star_at_y_offset(3167.0f, -4300.0f, 5108.0f, 200.0f); + cur_obj_spawn_star_at_y_offset(3167.0f, -4300.0f, 5108.0f, 200.0f); #else - create_star(3500.0f, -4300.0f, 4650.0f); + spawn_default_star(3500.0f, -4300.0f, 4650.0f); #endif o->oAction = 2; } @@ -99,21 +88,21 @@ void ActionTuxiesMother1(void) { if (o->prevObj->oHeldState == HELD_FREE) { //! Same bug as above o->prevObj->OBJECT_FIELD_S32(o->oInteractionSubtype) &= ~INT_SUBTYPE_DROP_IMMEDIATELY; - set_object_behavior(o->prevObj, bhvPenguinBaby); + obj_set_behavior(o->prevObj, bhvPenguinBaby); o->oAction = 2; } break; } } -void ActionTuxiesMother0(void) { +void tuxies_mother_act_0(void) { s32 sp2C; f32 sp28; struct Object *sp24; sp2C = 0; - sp24 = obj_find_nearest_object_with_behavior(bhvSmallPenguin, &sp28); - obj_scale(4.0f); - set_obj_animation_and_sound_state(3); + sp24 = cur_obj_find_nearest_object_with_behavior(bhvSmallPenguin, &sp28); + cur_obj_scale(4.0f); + cur_obj_init_animation_with_sound(3); if (sp28 < 500.0f) sp2C = 1; if (sp24 != NULL && sp28 < 300.0f && sp24->oHeldState != HELD_FREE) { @@ -123,12 +112,12 @@ void ActionTuxiesMother0(void) { } else { switch (o->oSubAction) { case 0: - if (obj_is_mario_in_range_and_ready_to_speak(300.0f, 100.0f)) + if (cur_obj_can_mario_activate_textbox_2(300.0f, 100.0f)) if (sp2C == 0) o->oSubAction++; break; case 1: - if (obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_057)) + if (cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_057)) o->oSubAction++; break; case 2: @@ -137,86 +126,86 @@ void ActionTuxiesMother0(void) { break; } } - if (obj_check_anim_frame(1)) - PlaySound2(SOUND_OBJ_BIG_PENGUIN_YELL); + if (cur_obj_check_anim_frame(1)) + cur_obj_play_sound_2(SOUND_OBJ_BIG_PENGUIN_YELL); } -void (*sTuxiesMotherActions[])(void) = { ActionTuxiesMother0, ActionTuxiesMother1, - ActionTuxiesMother2 }; +void (*sTuxiesMotherActions[])(void) = { tuxies_mother_act_0, tuxies_mother_act_1, + tuxies_mother_act_2 }; void bhv_tuxies_mother_loop(void) { o->activeFlags |= 0x400; - obj_update_floor_and_walls(); - obj_call_action_function(sTuxiesMotherActions); - obj_move_standard(-78); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sTuxiesMotherActions); + cur_obj_move_standard(-78); play_penguin_walking_sound(PENGUIN_WALK_BIG); o->oInteractStatus = 0; } -void func_802BEA58(void) { +void small_penguin_dive_with_mario(void) { if (mario_is_dive_sliding()) { o->oSmallPenguinUnk100 = o->oAction; o->oAction = 3; } } -void ActionSmallPenguin2(void) { +void small_penguin_act_2(void) { s32 sp1C = 0; if (o->oTimer == 0) - if (obj_dist_to_nearest_object_with_behavior(bhvTuxiesMother) < 1000.0f) + if (cur_obj_dist_to_nearest_object_with_behavior(bhvTuxiesMother) < 1000.0f) sp1C = 1; - set_obj_animation_and_sound_state(0); + cur_obj_init_animation_with_sound(0); o->oForwardVel = o->oSmallPenguinUnk104 + 3.0f; - obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, o->oSmallPenguinUnk110 + 0x600); + cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, o->oSmallPenguinUnk110 + 0x600); if (o->oDistanceToMario > o->oSmallPenguinUnk108 + 500.0f) o->oAction = 0; - func_802BEA58(); + small_penguin_dive_with_mario(); if (sp1C) o->oAction = 5; } -void ActionSmallPenguin1(void) { - set_obj_animation_and_sound_state(0); +void small_penguin_act_1(void) { + cur_obj_init_animation_with_sound(0); o->oForwardVel = o->oSmallPenguinUnk104 + 3.0f; - obj_rotate_yaw_toward(o->oAngleToMario, o->oSmallPenguinUnk110 + 0x600); + cur_obj_rotate_yaw_toward(o->oAngleToMario, o->oSmallPenguinUnk110 + 0x600); if (o->oDistanceToMario < o->oSmallPenguinUnk108 + 300.0f) o->oAction = 0; if (o->oDistanceToMario > 1100.0f) o->oAction = 0; - func_802BEA58(); + small_penguin_dive_with_mario(); } -void ActionSmallPenguin3(void) { +void small_penguin_act_3(void) { if (o->oTimer > 5) { if (o->oTimer == 6) - PlaySound2(SOUND_OBJ_BABY_PENGUIN_DIVE); - set_obj_animation_and_sound_state(1); + cur_obj_play_sound_2(SOUND_OBJ_BABY_PENGUIN_DIVE); + cur_obj_init_animation_with_sound(1); if (o->oTimer > 25) if (!mario_is_dive_sliding()) o->oAction = 4; } } -void ActionSmallPenguin4(void) { +void small_penguin_act_4(void) { if (o->oTimer > 20) { o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(2); + cur_obj_init_animation_with_sound(2); if (o->oTimer > 40) o->oAction = o->oSmallPenguinUnk100; } } -void ActionSmallPenguin0(void) { +void small_penguin_act_0(void) { s32 sp1C; sp1C = 0; - set_obj_animation_and_sound_state(3); + cur_obj_init_animation_with_sound(3); if (o->oTimer == 0) { o->oSmallPenguinUnk110 = (s32)(RandomFloat() * 0x400); o->oSmallPenguinUnk108 = RandomFloat() * 100.0f; o->oSmallPenguinUnk104 = RandomFloat(); o->oForwardVel = 0.0f; - if (obj_dist_to_nearest_object_with_behavior(bhvTuxiesMother) < 1000.0f) + if (cur_obj_dist_to_nearest_object_with_behavior(bhvTuxiesMother) < 1000.0f) sp1C = 1; } if (o->oDistanceToMario < 1000.0f && o->oSmallPenguinUnk108 + 600.0f < o->oDistanceToMario) @@ -225,56 +214,56 @@ void ActionSmallPenguin0(void) { o->oAction = 2; if (sp1C) o->oAction = 5; - if (obj_mario_far_away()) - obj_set_pos_to_home(); + if (cur_obj_mario_far_away()) + cur_obj_set_pos_to_home(); } -void ActionSmallPenguin5(void) { +void small_penguin_act_5(void) { f32 sp24; s16 sp22; - struct Object *sp1C = obj_nearest_object_with_behavior(bhvTuxiesMother); + struct Object *sp1C = cur_obj_nearest_object_with_behavior(bhvTuxiesMother); if (sp1C != NULL) { if (o->oDistanceToMario < 1000.0f) o->oForwardVel = 2.0f; else o->oForwardVel = 0.0f; sp24 = dist_between_objects(o, sp1C); - sp22 = angle_to_object(o, sp1C); + sp22 = obj_angle_to_object(o, sp1C); if (sp24 > 200.0f) - obj_rotate_yaw_toward(sp22, 0x400); + cur_obj_rotate_yaw_toward(sp22, 0x400); else - obj_rotate_yaw_toward(sp22 + 0x8000, 0x400); - set_obj_animation_and_sound_state(0); + cur_obj_rotate_yaw_toward(sp22 + 0x8000, 0x400); + cur_obj_init_animation_with_sound(0); } - func_802BEA58(); + small_penguin_dive_with_mario(); } void (*sSmallPenguinActions[])(void) = { - ActionSmallPenguin0, ActionSmallPenguin1, ActionSmallPenguin2, - ActionSmallPenguin3, ActionSmallPenguin4, ActionSmallPenguin5 + small_penguin_act_0, small_penguin_act_1, small_penguin_act_2, + small_penguin_act_3, small_penguin_act_4, small_penguin_act_5 }; -void func_802BF048(void) { +void small_penguin_free_actions(void) { if (o->oSmallPenguinUnk88 != 0) { o->oAction = 5; o->oSmallPenguinUnk88 = 0; } - obj_update_floor_and_walls(); - obj_call_action_function(sSmallPenguinActions); - obj_move_standard(-78); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sSmallPenguinActions); + cur_obj_move_standard(-78); play_penguin_walking_sound(PENGUIN_WALK_BABY); } void bhv_small_penguin_loop(void) { switch (o->oHeldState) { case HELD_FREE: - func_802BF048(); + small_penguin_free_actions(); break; case HELD_HELD: - func_8029FA5C(0, 0); - if (obj_has_behavior(bhvPenguinBaby)) - set_object_behavior(o, bhvSmallPenguin); - copy_object_pos(o, gMarioObject); + cur_obj_unrender_and_reset_state(0, 0); + if (cur_obj_has_behavior(bhvPenguinBaby)) + obj_set_behavior(o, bhvSmallPenguin); + obj_copy_pos(o, gMarioObject); if (gGlobalTimer % 30 == 0) #ifndef VERSION_JP play_sound(SOUND_OBJ2_BABY_PENGUIN_YELL, gMarioObject->header.gfx.cameraToObject); @@ -283,10 +272,10 @@ void bhv_small_penguin_loop(void) { #endif break; case HELD_THROWN: - obj_get_thrown_or_placed(0, 0, 0); + cur_obj_get_thrown_or_placed(0, 0, 0); break; case HELD_DROPPED: - obj_get_dropped(); + cur_obj_get_dropped(); break; } } diff --git a/src/game/behaviors/tweester.inc.c b/src/game/behaviors/tweester.inc.c index a5b99be..62e9506 100644 --- a/src/game/behaviors/tweester.inc.c +++ b/src/game/behaviors/tweester.inc.c @@ -44,9 +44,9 @@ void tweester_scale_and_move(f32 preScale) { */ void tweester_act_idle(void) { if (o->oSubAction == TWEESTER_SUB_ACT_WAIT) { - obj_become_tangible(); - obj_set_pos_to_home(); - obj_scale(0); + cur_obj_become_tangible(); + cur_obj_set_pos_to_home(); + cur_obj_scale(0); // Hard to have any idea of this purpose, only set here. o->oTweesterUnused = 0; @@ -57,7 +57,7 @@ void tweester_act_idle(void) { o->oTimer = 0; } else { - PlaySound(SOUND_ENV_WIND1); + cur_obj_play_sound_1(SOUND_ENV_WIND1); tweester_scale_and_move(o->oTimer / 60.0f); if (o->oTimer > 59) o->oAction = TWEESTER_ACT_CHASE; @@ -71,34 +71,34 @@ void tweester_act_idle(void) { void tweester_act_chase(void) { f32 activationRadius = o->oBehParams2ndByte * 100; - o->oAngleToHome = obj_angle_to_home(); - PlaySound(SOUND_ENV_WIND1); + o->oAngleToHome = cur_obj_angle_to_home(); + cur_obj_play_sound_1(SOUND_ENV_WIND1); - if (obj_lateral_dist_from_mario_to_home() < activationRadius + if (cur_obj_lateral_dist_from_mario_to_home() < activationRadius && o->oSubAction == TWEESTER_SUB_ACT_CHASE) { o->oForwardVel = 20.0f; - obj_rotate_yaw_toward(o->oAngleToMario, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); print_debug_top_down_objectinfo("off ", 0); if (gMarioStates->action == ACT_TWIRLING) o->oSubAction++; } else { o->oForwardVel = 20.0f; - obj_rotate_yaw_toward(o->oAngleToHome, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToHome, 0x200); - if (obj_lateral_dist_to_home() < 200.0f) + if (cur_obj_lateral_dist_to_home() < 200.0f) o->oAction = TWEESTER_ACT_HIDE; } if (o->oDistanceToMario > 3000.0f) o->oAction = TWEESTER_ACT_HIDE; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) o->oMoveAngleYaw = o->oWallAngle; - obj_move_standard(60); + cur_obj_move_standard(60); tweester_scale_and_move(1.0f); spawn_object(o, MODEL_SAND_DUST, bhvTweesterSandParticle); } @@ -113,8 +113,8 @@ void tweester_act_hide(void) { if (shrinkTimer >= 0.0f) tweester_scale_and_move(shrinkTimer / 60.0f); else { - obj_become_intangible(); - if (obj_lateral_dist_from_mario_to_home() > 2500.0f) + cur_obj_become_intangible(); + if (cur_obj_lateral_dist_from_mario_to_home() > 2500.0f) o->oAction = TWEESTER_ACT_IDLE; if (o->oTimer > 360) o->oAction = TWEESTER_ACT_IDLE; @@ -129,8 +129,8 @@ void (*sTweesterActions[])(void) = { tweester_act_idle, tweester_act_chase, twee * Loads the hitbox and calls its relevant action. */ void bhv_tweester_loop(void) { - set_object_hitbox(o, &sTweesterHitbox); - obj_call_action_function(sTweesterActions); + obj_set_hitbox(o, &sTweesterHitbox); + cur_obj_call_action_function(sTweesterActions); o->oInteractStatus = 0; } @@ -143,14 +143,14 @@ void bhv_tweester_sand_particle_loop(void) { o->oForwardVel += 15.0f; o->oPosY += 22.0f; - obj_scale(RandomFloat() + 1.0); + cur_obj_scale(RandomFloat() + 1.0); if (o->oTimer == 0) { - translate_object_xz_random(o, 100.0f); + obj_translate_xz_random(o, 100.0f); o->oFaceAnglePitch = RandomU16(); o->oFaceAngleYaw = RandomU16(); } if (o->oTimer > 15) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/ukiki.inc.c b/src/game/behaviors/ukiki.inc.c index b9db0c7..189fd26 100644 --- a/src/game/behaviors/ukiki.inc.c +++ b/src/game/behaviors/ukiki.inc.c @@ -13,8 +13,8 @@ */ void handle_hat_ukiki_reset(void) { if (o->oBehParams2ndByte == UKIKI_HAT) { - if (obj_mario_far_away()) { - obj_set_pos_to_home_and_stop(); + if (cur_obj_mario_far_away()) { + cur_obj_set_pos_to_home_and_stop(); o->oAction = UKIKI_ACT_IDLE; } else if (o->oMoveFlags & OBJ_MOVE_MASK_IN_WATER) { o->oAction = UKIKI_ACT_WAIT_TO_RESPAWN; @@ -37,9 +37,9 @@ s32 is_hat_ukiki_and_mario_has_hat(void) { } /** - * Unused copy of Geo18_8029D890. Perhaps a copy paste mistake. + * Unused copy of geo_update_projectile_pos_from_parent. Perhaps a copy paste mistake. */ -Gfx *unused_Geo18_8029D890(s32 run,UNUSED struct GraphNode *node, Mat4 mtx) { +Gfx *geo_update_projectile_pos_from_parent_copy(s32 run,UNUSED struct GraphNode *node, Mat4 mtx) { Mat4 mtx2; struct Object* obj; @@ -48,9 +48,9 @@ Gfx *unused_Geo18_8029D890(s32 run,UNUSED struct GraphNode *node, Mat4 mtx) { obj = (struct Object*)gCurGraphNodeObject; if (obj->prevObj != NULL) { - func_8029D704(mtx2, mtx, gCurGraphNodeCamera->matrixPtr); - func_8029D558(mtx2, obj->prevObj); - func_8029EA0C(obj->prevObj); + create_transformation_from_matrices(mtx2, mtx, gCurGraphNodeCamera->matrixPtr); + obj_update_pos_from_parent_transformation(mtx2, obj->prevObj); + obj_set_gfx_pos_from_pos(obj->prevObj); } } @@ -76,17 +76,17 @@ void idle_ukiki_taunt(void) { // Switch goes from 1-4. switch(o->oSubAction) { case UKIKI_SUB_ACT_TAUNT_ITCH: - set_obj_animation_and_sound_state(UKIKI_ANIM_ITCH); + cur_obj_init_animation_with_sound(UKIKI_ANIM_ITCH); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oSubAction = UKIKI_SUB_ACT_TAUNT_NONE; } break; case UKIKI_SUB_ACT_TAUNT_SCREECH: - set_obj_animation_and_sound_state(UKIKI_ANIM_SCREECH); + cur_obj_init_animation_with_sound(UKIKI_ANIM_SCREECH); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oUkikiTauntCounter++; } @@ -96,9 +96,9 @@ void idle_ukiki_taunt(void) { break; case UKIKI_SUB_ACT_TAUNT_JUMP_CLAP: - set_obj_animation_and_sound_state(UKIKI_ANIM_JUMP_CLAP); + cur_obj_init_animation_with_sound(UKIKI_ANIM_JUMP_CLAP); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oUkikiTauntCounter++; } @@ -108,9 +108,9 @@ void idle_ukiki_taunt(void) { break; case UKIKI_SUB_ACT_TAUNT_HANDSTAND: - set_obj_animation_and_sound_state(UKIKI_ANIM_HANDSTAND); + cur_obj_init_animation_with_sound(UKIKI_ANIM_HANDSTAND); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oSubAction = UKIKI_SUB_ACT_TAUNT_NONE; } break; @@ -144,16 +144,16 @@ void ukiki_act_idle(void) { if (o->oUkikiTextState == UKIKI_TEXT_STOLE_HAT) { o->oMoveAngleYaw = gMarioObject->oMoveAngleYaw + 0x8000; - if (func_802B0C54(50.0f, 150.0f)) { + if (check_if_moving_over_floor(50.0f, 150.0f)) { o->oAction = UKIKI_ACT_JUMP; } else { o->oMoveAngleYaw = gMarioObject->oMoveAngleYaw + 0x4000; - if (func_802B0C54(50.0f, 150.0f)) { + if (check_if_moving_over_floor(50.0f, 150.0f)) { o->oAction = UKIKI_ACT_JUMP; } else { o->oMoveAngleYaw = gMarioObject->oMoveAngleYaw - 0x4000; - if (func_802B0C54(50.0f, 150.0f)) { + if (check_if_moving_over_floor(50.0f, 150.0f)) { o->oAction = UKIKI_ACT_JUMP; } } @@ -176,8 +176,8 @@ void ukiki_act_idle(void) { void ukiki_act_return_home(void) { UNUSED s32 unused; - set_obj_animation_and_sound_state(UKIKI_ANIM_RUN); - o->oMoveAngleYaw = obj_angle_to_home(); + cur_obj_init_animation_with_sound(UKIKI_ANIM_RUN); + o->oMoveAngleYaw = cur_obj_angle_to_home(); o->oForwardVel = 10.0f; // If ukiki somehow walked home, go back to the idle action. @@ -193,8 +193,8 @@ void ukiki_act_return_home(void) { void ukiki_act_wait_to_respawn(void) { idle_ukiki_taunt(); - if (obj_mario_far_away()) { - obj_set_pos_to_home_and_stop(); + if (cur_obj_mario_far_away()) { + cur_obj_set_pos_to_home_and_stop(); o->oAction = UKIKI_ACT_IDLE; } } @@ -209,7 +209,7 @@ void ukiki_act_unused_turn(void) { idle_ukiki_taunt(); if (o->oSubAction == UKIKI_SUB_ACT_TAUNT_JUMP_CLAP) { - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); } } @@ -224,9 +224,9 @@ void ukiki_act_turn_to_mario(void) { o->oForwardVel = RandomFloat() * 3.0f + 2.0f; } - set_obj_animation_and_sound_state(UKIKI_ANIM_TURN); + cur_obj_init_animation_with_sound(UKIKI_ANIM_TURN); - facingMario = obj_rotate_yaw_toward(o->oAngleToMario, 0x800); + facingMario = cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x800); if (facingMario) { o->oAction = UKIKI_ACT_IDLE; @@ -257,12 +257,12 @@ void ukiki_act_run(void) { o->oUkikiChaseFleeRange = RandomFloat() * 100.0f + 350.0f; } - set_obj_animation_and_sound_state(UKIKI_ANIM_RUN); - obj_rotate_yaw_toward(goalYaw, 0x800); + cur_obj_init_animation_with_sound(UKIKI_ANIM_RUN); + cur_obj_rotate_yaw_toward(goalYaw, 0x800); //! @bug (Ukikispeedia) This function sets forward speed to 0.9 * Mario's //! forward speed, which means ukiki can move at hyperspeed rates. - func_8029F684(20.0f, 0.9f); + cur_obj_set_vel_from_mario_vel(20.0f, 0.9f); if (fleeMario) { if (o->oDistanceToMario > o->oUkikiChaseFleeRange) { @@ -275,11 +275,11 @@ void ukiki_act_run(void) { if (fleeMario) { if (o->oDistanceToMario < 200.0f) { if((o->oMoveFlags & OBJ_MOVE_HIT_WALL) && - obj_is_mario_moving_fast_or_in_air(10)) { + is_mario_moving_fast_or_in_air(10)) { o->oAction = UKIKI_ACT_JUMP; o->oMoveAngleYaw = o->oWallAngle; } else if((o->oMoveFlags & OBJ_MOVE_HIT_EDGE)) { - if (obj_is_mario_moving_fast_or_in_air(10)) { + if (is_mario_moving_fast_or_in_air(10)) { o->oAction = UKIKI_ACT_JUMP; o->oMoveAngleYaw += 0x8000; } @@ -294,21 +294,21 @@ void ukiki_act_run(void) { */ void ukiki_act_jump(void) { o->oForwardVel = 10.0f; - obj_become_intangible(); + cur_obj_become_intangible(); if (o->oSubAction == 0) { if (o->oTimer == 0) { - func_8029FA1C(RandomFloat() * 10.0f + 45.0f, UKIKI_ANIM_JUMP); + cur_obj_set_y_vel_and_animation(RandomFloat() * 10.0f + 45.0f, UKIKI_ANIM_JUMP); } else if (o->oMoveFlags & OBJ_MOVE_MASK_NOT_AIR) { o->oSubAction++; o->oVelY = 0.0f; } } else { o->oForwardVel = 0.0f; - set_obj_animation_and_sound_state(UKIKI_ANIM_LAND); - obj_become_tangible(); + cur_obj_init_animation_with_sound(UKIKI_ANIM_LAND); + cur_obj_become_tangible(); - if (func_8029F788()) { + if (cur_obj_check_if_near_animation_end()) { o->oAction = UKIKI_ACT_RUN; } } @@ -342,28 +342,28 @@ void ukiki_act_go_to_cage(void) { struct Object* obj; f32 latDistToCage = 0.0f; s16 yawToCage = 0; - obj = obj_nearest_object_with_behavior(bhvUkikiCageChild); + obj = cur_obj_nearest_object_with_behavior(bhvUkikiCageChild); // Ultimately is checking the cage, as it points to the parent // of a dummy child object of the cage. if (obj != NULL) { latDistToCage = lateral_dist_between_objects(o, obj->parentObj); - yawToCage = angle_to_object(o, obj->parentObj); + yawToCage = obj_angle_to_object(o, obj->parentObj); } - obj_become_intangible(); + cur_obj_become_intangible(); o->oFlags |= OBJ_FLAG_ACTIVE_FROM_AFAR; // Switch goes from 0-7 in order. switch(o->oSubAction) { case UKIKI_SUB_ACT_CAGE_RUN_TO_CAGE: - set_obj_animation_and_sound_state(UKIKI_ANIM_RUN); + cur_obj_init_animation_with_sound(UKIKI_ANIM_RUN); o->oPathedWaypointsS16 = sCageUkikiPath; - if (obj_follow_path(0) != PATH_REACHED_END) { + if (cur_obj_follow_path(0) != PATH_REACHED_END) { o->oForwardVel = 10.0f; - obj_rotate_yaw_toward(o->oPathedTargetYaw, 0x400); + cur_obj_rotate_yaw_toward(o->oPathedTargetYaw, 0x400); o->oPosY = o->oFloorHeight; } else { o->oForwardVel = 0.0f; @@ -372,34 +372,34 @@ void ukiki_act_go_to_cage(void) { break; case UKIKI_SUB_ACT_CAGE_WAIT_FOR_MARIO: - set_obj_animation_and_sound_state(UKIKI_ANIM_JUMP_CLAP); - obj_rotate_yaw_toward(o->oAngleToMario, 0x400); + cur_obj_init_animation_with_sound(UKIKI_ANIM_JUMP_CLAP); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); - if (func_802A3FF8(200.0f, 30.0f, 0x7FFF)) { + if (cur_obj_can_mario_activate_textbox(200.0f, 30.0f, 0x7FFF)) { o->oSubAction++; // fallthrough } else { break; } case UKIKI_SUB_ACT_CAGE_TALK_TO_MARIO: - set_obj_animation_and_sound_state(UKIKI_ANIM_HANDSTAND); + cur_obj_init_animation_with_sound(UKIKI_ANIM_HANDSTAND); - if (obj_update_dialog_with_cutscene(3, 1, CUTSCENE_DIALOG, DIALOG_080)) { + if (cur_obj_update_dialog_with_cutscene(3, 1, CUTSCENE_DIALOG, DIALOG_080)) { o->oSubAction++; } break; case UKIKI_SUB_ACT_CAGE_TURN_TO_CAGE: - set_obj_animation_and_sound_state(UKIKI_ANIM_RUN); + cur_obj_init_animation_with_sound(UKIKI_ANIM_RUN); - if (obj_rotate_yaw_toward(yawToCage, 0x400)) { + if (cur_obj_rotate_yaw_toward(yawToCage, 0x400)) { o->oForwardVel = 10.0f; o->oSubAction++; } break; case UKIKI_SUB_ACT_CAGE_JUMP_TO_CAGE: - func_8029FA1C(55.0f, UKIKI_ANIM_JUMP); + cur_obj_set_y_vel_and_animation(55.0f, UKIKI_ANIM_JUMP); o->oForwardVel = 36.0f; o->oSubAction++; break; @@ -411,7 +411,7 @@ void ukiki_act_go_to_cage(void) { if (o->oMoveFlags & OBJ_MOVE_LANDED) { play_puzzle_jingle(); - set_obj_animation_and_sound_state(UKIKI_ANIM_JUMP_CLAP); + cur_obj_init_animation_with_sound(UKIKI_ANIM_JUMP_CLAP); o->oSubAction++; o->oUkikiCageSpinTimer = 32; obj->parentObj->oUkikiCageNextAction = UKIKI_CAGE_ACT_SPIN; @@ -431,7 +431,7 @@ void ukiki_act_go_to_cage(void) { case UKIKI_SUB_ACT_CAGE_DESPAWN: if (o->oPosY < -1300.0f) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } break; } @@ -479,8 +479,8 @@ void (*sUkikiActions[])(void) = { void ukiki_free_loop(void) { s32 steepSlopeAngleDegrees; - obj_update_floor_and_walls(); - obj_call_action_function(sUkikiActions); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sUkikiActions); if (o->oAction == UKIKI_ACT_GO_TO_CAGE || o->oAction == UKIKI_ACT_RETURN_HOME) { steepSlopeAngleDegrees = -88; @@ -488,7 +488,7 @@ void ukiki_free_loop(void) { steepSlopeAngleDegrees = -20; } - obj_move_standard(steepSlopeAngleDegrees); + cur_obj_move_standard(steepSlopeAngleDegrees); handle_hat_ukiki_reset(); if(!(o->oMoveFlags & OBJ_MOVE_MASK_IN_WATER)) { @@ -568,7 +568,7 @@ void hat_ukiki_held_loop(void) { break; case UKIKI_TEXT_STEAL_HAT: - if (obj_update_dialog(2, 2, DIALOG_100, 0)) { + if (cur_obj_update_dialog(2, 2, DIALOG_100, 0)) { o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY; o->oUkikiTextState = UKIKI_TEXT_STOLE_HAT; } @@ -578,7 +578,7 @@ void hat_ukiki_held_loop(void) { break; case UKIKI_TEXT_HAS_HAT: - if (obj_update_dialog(2, 18, DIALOG_101, 0)) { + if (cur_obj_update_dialog(2, 18, DIALOG_101, 0)) { mario_retrieve_cap(); set_mario_npc_dialog(0); o->oUkikiHasHat &= ~UKIKI_HAT_ON; @@ -618,8 +618,8 @@ void bhv_ukiki_loop(void) { break; case HELD_HELD: - func_8029FA5C(UKIKI_ANIM_HELD, 0); - copy_object_pos(o, gMarioObject); + cur_obj_unrender_and_reset_state(UKIKI_ANIM_HELD, 0); + obj_copy_pos(o, gMarioObject); if (o->oBehParams2ndByte == UKIKI_HAT) { hat_ukiki_held_loop(); @@ -630,7 +630,7 @@ void bhv_ukiki_loop(void) { case HELD_THROWN: case HELD_DROPPED: - obj_get_dropped(); + cur_obj_get_dropped(); break; } diff --git a/src/game/behaviors/ukiki_cage.inc.c b/src/game/behaviors/ukiki_cage.inc.c index 1e1a7e1..68a64e8 100644 --- a/src/game/behaviors/ukiki_cage.inc.c +++ b/src/game/behaviors/ukiki_cage.inc.c @@ -19,14 +19,14 @@ void bhv_ukiki_cage_star_loop(void) { case UKIKI_CAGE_STAR_ACT_IN_CAGE: // Initialization to see if the star is collected (blue) or not (yellow). if (o->oTimer == 0) { - if (func_802A377C(1) + if (bit_shift_left(1) & save_file_get_star_flags(gCurrSaveFileNum - 1, gCurrCourseNum - 1)) { - obj_set_model(MODEL_TRANSPARENT_STAR); + cur_obj_set_model(MODEL_TRANSPARENT_STAR); } } - copy_object_pos(o, o->parentObj); - copy_object_behavior_params(o, o->parentObj); + obj_copy_pos(o, o->parentObj); + obj_copy_behavior_params(o, o->parentObj); // When they cage hides itself, spawn particles and the star. if (o->parentObj->oAction == UKIKI_CAGE_ACT_HIDE) { @@ -34,10 +34,10 @@ void bhv_ukiki_cage_star_loop(void) { } break; case UKIKI_CAGE_STAR_ACT_SPAWN_STAR: - mark_object_for_deletion(o); - func_802A3004(); + obj_mark_for_deletion(o); + spawn_mist_particles(); spawn_triangle_break_particles(20, 138, 0.7, 3); - create_star(2500.0f, -1200.0f, 1300.0f); + spawn_default_star(2500.0f, -1200.0f, 1300.0f); break; } @@ -73,8 +73,8 @@ void ukiki_cage_act_spin(void) { */ void ukiki_cage_act_fall(void) { //! (PARTIAL_UPDATE) - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); if (o->oMoveFlags & (OBJ_MOVE_LANDED | OBJ_MOVE_ENTERED_WATER)) { o->oAction = UKIKI_CAGE_ACT_HIDE; } @@ -87,7 +87,7 @@ void ukiki_cage_act_fall(void) { * hiding the object? */ void ukiki_cage_act_hide(void) { - obj_hide(); + cur_obj_hide(); } /** @@ -102,5 +102,5 @@ void (*sUkikiCageActions[])(void) = { * Main behavior loop for the cage. Only calls the relevant action. */ void bhv_ukiki_cage_loop(void) { - obj_call_action_function(sUkikiCageActions); + cur_obj_call_action_function(sUkikiCageActions); } diff --git a/src/game/behaviors/unagi.inc.c b/src/game/behaviors/unagi.inc.c index 15eff0c..d1023e9 100644 --- a/src/game/behaviors/unagi.inc.c +++ b/src/game/behaviors/unagi.inc.c @@ -44,42 +44,42 @@ void unagi_act_0(void) { void unagi_act_1_4(s32 arg0) { if (o->oSoundStateID == 3) { - if (obj_check_anim_frame(30)) { + if (cur_obj_check_anim_frame(30)) { o->oForwardVel = 40.0f; } } else { - if (func_8029F828()) { + if (cur_obj_check_if_at_animation_end()) { if (o->oAction != arg0 && (o->oPathedPrevWaypointFlags & 0xFF) >= 7) { - set_obj_animation_and_sound_state(3); + cur_obj_init_animation_with_sound(3); } else { - set_obj_animation_and_sound_state(2); + cur_obj_init_animation_with_sound(2); } } } - if (obj_check_anim_frame(6)) { - PlaySound2(SOUND_GENERAL_MOVING_WATER); + if (cur_obj_check_anim_frame(6)) { + cur_obj_play_sound_2(SOUND_GENERAL_MOVING_WATER); } - if (obj_follow_path(0) == -1) { + if (cur_obj_follow_path(0) == -1) { o->oAction = arg0; } o->oMoveAnglePitch = o->oFaceAnglePitch = approach_s16_symmetric(o->oMoveAnglePitch, o->oPathedTargetPitch, 50); - obj_rotate_yaw_toward(o->oPathedTargetYaw, 120); + cur_obj_rotate_yaw_toward(o->oPathedTargetYaw, 120); obj_roll_to_match_yaw_turn(o->oPathedTargetYaw, 0x2000, 100); obj_forward_vel_approach(10.0f, 0.2f); - func_802A2A38(); + cur_obj_set_pos_via_transform(); } void unagi_act_2(void) { o->oPathedPrevWaypoint = o->oPathedStartWaypoint; o->oPathedPrevWaypointFlags = 0; - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->oMoveAnglePitch = o->oFaceAnglePitch = 0; o->oMoveAngleYaw = o->oFaceAngleYaw = o->oUnagiUnk1B0; @@ -94,17 +94,17 @@ void unagi_act_2(void) { void unagi_act_3(void) { if (o->oUnagiUnkF4 < 0.0f) { - set_obj_animation_and_sound_state(6); + cur_obj_init_animation_with_sound(6); if ((o->oUnagiUnkF4 += 10.0f) > 0.0f) { o->oUnagiUnkF4 = 0.0f; } } else { if (o->oUnagiUnkF4 == 0.0f) { - set_obj_animation_and_sound_state(6); + cur_obj_init_animation_with_sound(6); if (o->oTimer > 60 && o->oUnagiUnk1AC < 1000.0f) { - PlaySound2(SOUND_OBJ_EEL_2); + cur_obj_play_sound_2(SOUND_OBJ_EEL_2); o->oUnagiUnkF8 = o->oUnagiUnk110 = 30.0f; } else { o->oUnagiUnk110 = 0.0f; @@ -114,15 +114,15 @@ void unagi_act_3(void) { o->oUnagiUnk110 = 0.0f; } } else if (o->oUnagiUnk110 == 0.0f) { - set_obj_animation_and_sound_state(0); - if (func_8029F828()) { + cur_obj_init_animation_with_sound(0); + if (cur_obj_check_if_at_animation_end()) { if (o->oUnagiUnk1AC < 1000.0f) { o->oAction = 4; o->oForwardVel = o->oUnagiUnkF8; - set_obj_animation_and_sound_state(1); + cur_obj_init_animation_with_sound(1); } else { o->oUnagiUnk110 = -50.0f; - set_obj_animation_and_sound_state(4); + cur_obj_init_animation_with_sound(4); } } } @@ -176,7 +176,7 @@ void bhv_unagi_subobject_loop(void) { f32 val04; if (o->parentObj->oUnagiUnk1B2 == 0) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { val04 = 300.0f * o->oBehParams2ndByte; @@ -190,7 +190,7 @@ void bhv_unagi_subobject_loop(void) { if (o->oBehParams2ndByte == -4) { if (o->parentObj->oAnimState != 0 && o->oDistanceToMario < 150.0f) { o->oBehParams = o->parentObj->oBehParams; - create_star(6833.0f, -3654.0f, 2230.0f); + spawn_default_star(6833.0f, -3654.0f, 2230.0f); o->parentObj->oAnimState = 0; } } else { diff --git a/src/game/behaviors/unused_particle_spawn.inc.c b/src/game/behaviors/unused_particle_spawn.inc.c index e66fd68..2e22855 100644 --- a/src/game/behaviors/unused_particle_spawn.inc.c +++ b/src/game/behaviors/unused_particle_spawn.inc.c @@ -7,15 +7,15 @@ void bhv_unused_particle_spawn_loop(void) { s32 i; - obj_update_floor_and_walls(); - obj_move_standard(78); + cur_obj_update_floor_and_walls(); + cur_obj_move_standard(78); if (o->oMoveFlags & OBJ_MOVE_ON_GROUND) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } - if (are_objects_collided(o, gMarioObject)) { - mark_object_for_deletion(o); + if (obj_check_if_collided_with_object(o, gMarioObject)) { + obj_mark_for_deletion(o); for (i = 0; i < 10; i++) { spawn_object(o, MODEL_PURPLE_MARBLE, bhvPurpleParticle); diff --git a/src/game/behaviors/unused_poundable_platform.inc.c b/src/game/behaviors/unused_poundable_platform.inc.c index 0835b99..2381690 100644 --- a/src/game/behaviors/unused_poundable_platform.inc.c +++ b/src/game/behaviors/unused_poundable_platform.inc.c @@ -13,16 +13,16 @@ */ void bhv_unused_poundable_platform(void) { - obj_scale(1.02f); + cur_obj_scale(1.02f); if (o->oAction == 0) { - if (obj_is_mario_ground_pounding_platform()) { - func_802A3004(); + if (cur_obj_is_mario_ground_pounding_platform()) { + spawn_mist_particles(); spawn_triangle_break_particles(20, 56, 3.0f, 0); o->oAction++; } } else if (o->oTimer > 7) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } load_object_collision_model(); } diff --git a/src/game/behaviors/walking_penguin.inc.c b/src/game/behaviors/walking_penguin.inc.c deleted file mode 100644 index 46cd3c8..0000000 --- a/src/game/behaviors/walking_penguin.inc.c +++ /dev/null @@ -1,73 +0,0 @@ -// walking_penguin.c.inc - -struct Struct8032FE4C D_8032FE4C[] = { { 60, 0, 6.0f, 1.0f }, { 30, 3, 0.0f, 1.0f }, - { 30, 0, 12.0f, 2.0f }, { 30, 3, 0.0f, 1.0f }, - { 30, 0, -6.0f, 1.0f }, { 30, 3, 0.0f, 1.0f }, - { -1, 0, 0.0f, 0.0f } }; - -s32 func_802C7AD0(void) { - o->oForwardVel = 0.0f; - func_8029ED98(0, 1.0f); - o->oAngleVelYaw = 0x400; - o->oMoveAngleYaw += o->oAngleVelYaw; - if (o->oTimer == 31) - return 1; - else - return 0; -} - -void bhv_walking_penguin_loop(void) { - f32 sp2C; - f32 sp28; - f32 sp24 = 100.0f; - o->oAngleVelYaw = 0; - obj_update_floor_and_walls(); - switch (o->oAction) { - case 0: - if (o->oTimer == 0) { - o->oWalkingPenguinUnk10C = 0; - o->oWalkingPenguinUnk110 = 0; - } - if (o->oWalkingPenguinUnk110 < D_8032FE4C[o->oWalkingPenguinUnk10C].unk0) - o->oWalkingPenguinUnk110++; - else { - o->oWalkingPenguinUnk110 = 0; - o->oWalkingPenguinUnk10C++; - if (D_8032FE4C[o->oWalkingPenguinUnk10C].unk0 < 0) - o->oWalkingPenguinUnk10C = 0; - } - if (o->oPosX < 300.0f) - o->oAction++; - else { - o->oForwardVel = D_8032FE4C[o->oWalkingPenguinUnk10C].unk2; - func_8029ED98(D_8032FE4C[o->oWalkingPenguinUnk10C].unk1, - D_8032FE4C[o->oWalkingPenguinUnk10C].unk3); - } - break; - case 1: - if (func_802C7AD0()) - o->oAction++; - break; - case 2: - o->oForwardVel = 12.0f; - func_8029ED98(0, 2.0f); - if (o->oPosX > 1700.0f) - o->oAction++; - break; - case 3: - if (func_802C7AD0()) - o->oAction = 0; - break; - } - obj_move_standard(-78); - if (!obj_hide_if_mario_far_away_y(1000.0f)) - play_penguin_walking_sound(1); - sp2C = o->oPosX + sins(0xDBB0) * 60.0f; - sp28 = o->oPosZ + coss(0xDBB0) * 60.0f; - sp2C += sp24 * sins(0x1BB0); - sp28 += sp24 * coss(0x1BB0); - o->oWalkingPenguinUnk100 = sp2C; - o->oWalkingPenguinUnk104 = sp28; - print_debug_bottom_up("x %d", o->oPosX); - print_debug_bottom_up("z %d", o->oPosZ); -} diff --git a/src/game/behaviors/warp.inc.c b/src/game/behaviors/warp.inc.c index 8fdca8b..107af84 100644 --- a/src/game/behaviors/warp.inc.c +++ b/src/game/behaviors/warp.inc.c @@ -15,7 +15,7 @@ void bhv_warp_loop(void) { o->oInteractStatus = 0; } -void BehFadingWarpLoop() // identical to the above function except for o->hitboxRadius +void bhv_fading_warp_loop() // identical to the above function except for o->hitboxRadius { u16 sp6; if (o->oTimer == 0) { diff --git a/src/game/behaviors/water_bomb.inc.c b/src/game/behaviors/water_bomb.inc.c index 7674dca..a309154 100644 --- a/src/game/behaviors/water_bomb.inc.c +++ b/src/game/behaviors/water_bomb.inc.c @@ -105,7 +105,7 @@ void water_bomb_spawn_explode_particles(s8 offsetY, s8 forwardVelRange, s8 velYB sWaterBombExplodeParticles.offsetY = offsetY; sWaterBombExplodeParticles.forwardVelRange = forwardVelRange; sWaterBombExplodeParticles.velYBase = velYBase; - obj_spawn_particles(&sWaterBombExplodeParticles); + cur_obj_spawn_particles(&sWaterBombExplodeParticles); #else s8 tempVelYBase = velYBase; s8 tempForwardVelRange = forwardVelRange; @@ -115,7 +115,7 @@ void water_bomb_spawn_explode_particles(s8 offsetY, s8 forwardVelRange, s8 velYB sWaterBombExplodeParticles.offsetY = tempOffsetY; sWaterBombExplodeParticles.forwardVelRange = tempForwardVelRange; sWaterBombExplodeParticles.velYBase = tempVelYBase; - obj_spawn_particles(&sWaterBombExplodeParticles); + cur_obj_spawn_particles(&sWaterBombExplodeParticles); } while (0); #endif } @@ -124,7 +124,7 @@ void water_bomb_spawn_explode_particles(s8 offsetY, s8 forwardVelRange, s8 velYB * Enter the drop action with -40 y vel. */ static void water_bomb_act_init(void) { - PlaySound2(SOUND_OBJ_SOMETHING_LANDING); + cur_obj_play_sound_2(SOUND_OBJ_SOMETHING_LANDING); o->oAction = WATER_BOMB_ACT_DROP; o->oMoveFlags = 0; @@ -138,7 +138,7 @@ static void water_bomb_act_init(void) { static void water_bomb_act_drop(void) { f32 stretch; - set_object_hitbox(o, &sWaterBombHitbox); + obj_set_hitbox(o, &sWaterBombHitbox); // Explode if touched or if hit water if ((o->oInteractStatus & INT_STATUS_INTERACTED) || (o->oMoveFlags & OBJ_MOVE_ENTERED_WATER)) { @@ -151,7 +151,7 @@ static void water_bomb_act_drop(void) { o->oWaterBombOnGround = TRUE; if ((o->oWaterBombNumBounces += 1.0f) < 3.0f) { - PlaySound2(SOUND_OBJ_WATER_BOMB_BOUNCING); + cur_obj_play_sound_2(SOUND_OBJ_WATER_BOMB_BOUNCING); } else { create_sound_spawner(SOUND_OBJ_DIVING_IN_WATER); } @@ -189,7 +189,7 @@ static void water_bomb_act_drop(void) { } o->header.gfx.scale[0] = o->header.gfx.scale[2] = 1.0f - stretch; - obj_move_standard(78); + cur_obj_move_standard(78); } /** @@ -199,7 +199,7 @@ static void water_bomb_act_drop(void) { static void water_bomb_act_explode(void) { water_bomb_spawn_explode_particles(25, 60, 10); o->parentObj->oWaterBombSpawnerBombActive = FALSE; - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } /** @@ -207,13 +207,13 @@ static void water_bomb_act_explode(void) { */ static void water_bomb_act_shot_from_cannon(void) { if (o->oTimer > 100) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { if (o->oTimer < 7) { if (o->oTimer == 1) { water_bomb_spawn_explode_particles(-20, 10, 30); } - obj_spawn_particles(&sWaterBombCannonParticle); + cur_obj_spawn_particles(&sWaterBombCannonParticle); } if (o->header.gfx.scale[1] > 1.2f) { @@ -221,7 +221,7 @@ static void water_bomb_act_shot_from_cannon(void) { } o->header.gfx.scale[0] = o->header.gfx.scale[2] = 2.0f - o->header.gfx.scale[1]; - func_802A2A38(); + cur_obj_set_pos_via_transform(); } } @@ -233,7 +233,7 @@ void bhv_water_bomb_update(void) { water_bomb_act_shot_from_cannon(); } else { o->oGraphYOffset = 40.0f * o->header.gfx.scale[1]; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case WATER_BOMB_ACT_INIT: @@ -255,7 +255,7 @@ void bhv_water_bomb_update(void) { */ void bhv_water_bomb_shadow_update(void) { if (o->parentObj->oAction == WATER_BOMB_ACT_EXPLODE) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { // TODO: What is happening here f32 bombHeight = o->parentObj->oPosY - o->parentObj->oFloorHeight; @@ -263,8 +263,8 @@ void bhv_water_bomb_shadow_update(void) { bombHeight = 500.0f; } - copy_object_pos(o, o->parentObj); + obj_copy_pos(o, o->parentObj); o->oPosY = o->parentObj->oFloorHeight + bombHeight; - copy_object_scale(o, o->parentObj); + obj_copy_scale(o, o->parentObj); } } diff --git a/src/game/behaviors/water_bomb_cannon.inc.c b/src/game/behaviors/water_bomb_cannon.inc.c index 20395eb..3dbe53a 100644 --- a/src/game/behaviors/water_bomb_cannon.inc.c +++ b/src/game/behaviors/water_bomb_cannon.inc.c @@ -4,18 +4,18 @@ void bhv_bubble_cannon_barrel_loop(void) { struct Object *val04; if (o->parentObj->oAction == 2) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } else { o->oMoveAngleYaw = o->parentObj->oFaceAngleYaw; o->oMoveAnglePitch = o->parentObj->oMoveAnglePitch + 0x4000; o->oFaceAnglePitch = o->parentObj->oMoveAnglePitch; if ((o->oCannonBarrelBubblesUnkF4 += o->oForwardVel) > 0.0f) { - func_802A2A38(); + cur_obj_set_pos_via_transform(); obj_forward_vel_approach(-5.0f, 18.0f); } else { o->oCannonBarrelBubblesUnkF4 = 0.0f; - copy_object_pos(o, o->parentObj); + obj_copy_pos(o, o->parentObj); // check this if (o->parentObj->oWaterCannonUnkF4 != 0) { @@ -40,7 +40,7 @@ void bhv_bubble_cannon_barrel_loop(void) { void water_bomb_cannon_act_0(void) { if (o->oDistanceToMario < 2000.0f) { spawn_object(o, MODEL_CANNON_BARREL, bhvCannonBarrelBubbles); - obj_unhide(); + cur_obj_unhide(); o->oAction = 1; o->oMoveAnglePitch = o->oWaterCannonUnkFC = 0x1C00; @@ -61,7 +61,7 @@ void water_bomb_cannon_act_1(void) { if (o->oWaterCannonUnkF8 != 0) { o->oWaterCannonUnkF8 -= 1; } else { - PlaySound2(SOUND_OBJ_CANNON4); + cur_obj_play_sound_2(SOUND_OBJ_CANNON4); o->oWaterCannonUnkF4 = 70; o->oWaterCannonUnkFC = 0x1000 + 0x400 * (RandomU16() & 0x3); o->oWaterCannonUnk100 = -0x2000 + o->oMoveAngleYaw + 0x1000 * (RandomU16() % 5); @@ -73,12 +73,12 @@ void water_bomb_cannon_act_1(void) { } void water_bomb_cannon_act_2(void) { - obj_hide(); + cur_obj_hide(); o->oAction = 0; } void bhv_water_bomb_cannon_loop(void) { - obj_push_mario_away_from_cylinder(220.0f, 300.0f); + cur_obj_push_mario_away_from_cylinder(220.0f, 300.0f); switch (o->oAction) { case 0: diff --git a/src/game/behaviors/water_mist_particle.inc.c b/src/game/behaviors/water_mist_particle.inc.c index 5117ffc..cb9243a 100644 --- a/src/game/behaviors/water_mist_particle.inc.c +++ b/src/game/behaviors/water_mist_particle.inc.c @@ -2,7 +2,7 @@ // TODO: Is this really "mist"? void bhv_water_mist_spawn_loop(void) { - func_802ADBBC(0x20000); + clear_particle_flags(0x20000); spawn_object(o, MODEL_MIST, bhvWaterMist); } @@ -10,12 +10,12 @@ void bhv_water_mist_loop(void) { f32 sp1C; if (o->oTimer == 0) { o->oMoveAngleYaw = gMarioObject->oMoveAngleYaw; - translate_object_xz_random(o, 10.0f); + obj_translate_xz_random(o, 10.0f); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); o->oOpacity -= 42; sp1C = (254 - o->oOpacity) / 254.0 * 1.0 + 0.5; // seen this before - obj_scale(sp1C); + cur_obj_scale(sp1C); if (o->oOpacity < 2) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/water_objs.inc.c b/src/game/behaviors/water_objs.inc.c index 8589adf..6168605 100644 --- a/src/game/behaviors/water_objs.inc.c +++ b/src/game/behaviors/water_objs.inc.c @@ -2,7 +2,7 @@ // TODO: Better name, please void bhv_water_air_bubble_init(void) { - obj_scale(4.0f); + cur_obj_scale(4.0f); } // Fields 0xF4 & 0xF8 seem to be angles for bubble and cannon @@ -13,35 +13,35 @@ void bhv_water_air_bubble_loop(void) { o->header.gfx.scale[1] = -sins(o->oWaterObjUnkF4) * 0.5 + 4.0; o->oWaterObjUnkF4 += 0x400; if (o->oTimer < 30) { - obj_become_intangible(); + cur_obj_become_intangible(); o->oPosY += 3.0f; } else { - obj_become_tangible(); - obj_forward_vel_approach_upward(2.0f, 10.0f); - o->oMoveAngleYaw = angle_to_object(o, gMarioObject); - obj_move_using_fvel_and_gravity(); + cur_obj_become_tangible(); + cur_obj_forward_vel_approach_upward(2.0f, 10.0f); + o->oMoveAngleYaw = obj_angle_to_object(o, gMarioObject); + cur_obj_move_using_fvel_and_gravity(); } o->oPosX += RandomFloat() * 4.0f - 2.0f; o->oPosZ += RandomFloat() * 4.0f - 2.0f; if (o->oInteractStatus & INT_STATUS_INTERACTED || o->oTimer > 200) { - PlaySound2(SOUND_GENERAL_QUIET_BUBBLE); - mark_object_for_deletion(o); + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_BUBBLE); + obj_mark_for_deletion(o); for (i = 0; i < 30; i++) spawn_object(o, MODEL_BUBBLE, bhvBubbleMaybe); } if (find_water_level(o->oPosX, o->oPosZ) < o->oPosY) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); o->oInteractStatus = 0; } void bhv_bubble_wave_init(void) { o->oWaterObjUnkFC = 0x800 + (s32)(RandomFloat() * 2048.0f); o->oWaterObjUnk100 = 0x800 + (s32)(RandomFloat() * 2048.0f); - PlaySound2(SOUND_GENERAL_QUIET_BUBBLE); + cur_obj_play_sound_2(SOUND_GENERAL_QUIET_BUBBLE); } -void Unknown802A7E48(void) { - obj_scale(RandomFloat() + 1.0); +void scale_bubble_random(void) { + cur_obj_scale(RandomFloat() + 1.0); } void bhv_bubble_maybe_loop(void) { @@ -64,13 +64,13 @@ void bhv_small_water_wave_loop(void) { o->activeFlags = 0; o->oPosY += 5.0f; if (gFreeObjectList.next != NULL) - spawn_object(o, MODEL_SPOT_ON_GROUND, bhvWaterSurfaceWhiteWave2); + spawn_object(o, MODEL_SMALL_WATER_SPLASH, bhvObjectWaterSplash); } if (o->oInteractStatus & INT_STATUS_INTERACTED) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } -void func_802A81C4(void) { +void scale_bubble_sin(void) { o->header.gfx.scale[0] = sins(o->oWaterObjUnkF4) * 0.5 + 2.0; o->oWaterObjUnkF4 += o->oWaterObjUnkFC; o->header.gfx.scale[1] = sins(o->oWaterObjUnkF8) * 0.5 + 2.0; @@ -78,27 +78,27 @@ void func_802A81C4(void) { } void bhv_particle_init(void) { - scale_object_xyz(o, 2.0f, 2.0f, 1.0f); + obj_scale_xyz(o, 2.0f, 2.0f, 1.0f); o->oWaterObjUnkFC = 0x800 + (s32)(RandomFloat() * 2048.0f); o->oWaterObjUnk100 = 0x800 + (s32)(RandomFloat() * 2048.0f); - translate_object_xyz_random(o, 100.0f); + obj_translate_xyz_random(o, 100.0f); } void bhv_particle_loop() { f32 sp24 = find_water_level(o->oPosX, o->oPosZ); o->oPosY += 5.0f; - translate_object_xz_random(o, 4.0f); - func_802A81C4(); + obj_translate_xz_random(o, 4.0f); + scale_bubble_sin(); if (o->oPosY > sp24 && o->oTimer) { - mark_object_for_deletion(o); - try_to_spawn_object(5, 0, o, MODEL_SPOT_ON_GROUND, bhvWaterSurfaceWhiteWave2); + obj_mark_for_deletion(o); + try_to_spawn_object(5, 0, o, MODEL_SMALL_WATER_SPLASH, bhvObjectWaterSplash); } } void bhv_small_bubbles_loop(void) { o->oPosY += 5.0f; - translate_object_xz_random(o, 4.0f); - func_802A81C4(); + obj_translate_xz_random(o, 4.0f); + scale_bubble_sin(); } void bhv_fish_group_loop(void) { diff --git a/src/game/behaviors/water_pillar.inc.c b/src/game/behaviors/water_pillar.inc.c index 6fe0f48..5b7f265 100644 --- a/src/game/behaviors/water_pillar.inc.c +++ b/src/game/behaviors/water_pillar.inc.c @@ -1,12 +1,12 @@ // water_pillar.c.inc -void func_802B95A4(void) { +void water_level_pillar_undrained(void) { struct Object *sp1C; switch (o->oAction) { case 0: - if (obj_is_mario_ground_pounding_platform()) { + if (cur_obj_is_mario_ground_pounding_platform()) { o->oAction++; - func_802A3004(); + spawn_mist_particles(); } break; case 1: @@ -16,14 +16,14 @@ void func_802B95A4(void) { o->oAction++; break; case 2: - sp1C = obj_nearest_object_with_behavior(bhvWaterLevelPillar); + sp1C = cur_obj_nearest_object_with_behavior(bhvWaterLevelPillar); if (sp1C != NULL) { if (sp1C->oAction < 2) o->oAction++; } break; case 3: - sp1C = obj_nearest_object_with_behavior(bhvWaterLevelPillar); + sp1C = cur_obj_nearest_object_with_behavior(bhvWaterLevelPillar); if (sp1C != NULL) { if (sp1C->oAction > 1) { o->oAction++; @@ -34,7 +34,7 @@ void func_802B95A4(void) { } break; case 4: - PlaySound(SOUND_ENV_WATER_DRAIN); + cur_obj_play_sound_1(SOUND_ENV_WATER_DRAIN); if (o->oTimer < 300) { gEnvironmentLevels[2] = (s32) approach_f32_symmetric(gEnvironmentLevels[2], -2450.0f, 5.0f); @@ -48,7 +48,7 @@ void func_802B95A4(void) { } } -void func_802B97E4(void) { +void water_level_pillar_drained(void) { if (o->oTimer == 0) { o->oPosY -= 80.0f; gEnvironmentLevels[2] = -2450; @@ -63,9 +63,9 @@ void bhv_water_level_pillar_init(void) { void bhv_water_level_pillar_loop(void) { if (o->oWaterLevelPillarUnkF8) - func_802B97E4(); + water_level_pillar_drained(); else - func_802B95A4(); + water_level_pillar_undrained(); gEnvironmentRegions[18] = gEnvironmentLevels[2]; gEnvironmentRegions[6] = gEnvironmentLevels[0]; } diff --git a/src/game/behaviors/water_ring.inc.c b/src/game/behaviors/water_ring.inc.c index 3d1649c..6cdc43d 100644 --- a/src/game/behaviors/water_ring.inc.c +++ b/src/game/behaviors/water_ring.inc.c @@ -1,6 +1,6 @@ // water_ring.c.inc -f32 WaterRingCalcMarioDistInFront(void) { +f32 water_ring_calc_mario_dist(void) { f32 marioDistX = o->oPosX - gMarioObject->header.gfx.pos[0]; f32 marioDistY = o->oPosY - (gMarioObject->header.gfx.pos[1] + 80.0f); f32 marioDistZ = o->oPosZ - gMarioObject->header.gfx.pos[2]; @@ -10,8 +10,8 @@ f32 WaterRingCalcMarioDistInFront(void) { return marioDistInFront; } -void WaterRingInit(void) { - SetObjAnimation(0); +void water_ring_init(void) { + cur_obj_init_animation(0); o->oWaterRingScalePhaseX = (s32)(RandomFloat() * 4096.0f) + 0x1000; o->oWaterRingScalePhaseY = (s32)(RandomFloat() * 4096.0f) + 0x1000; o->oWaterRingScalePhaseZ = (s32)(RandomFloat() * 4096.0f) + 0x1000; @@ -25,7 +25,7 @@ void WaterRingInit(void) { o->oWaterRingNormalY = coss(o->oFaceAnglePitch) * coss(o->oFaceAngleRoll); o->oWaterRingNormalZ = sins(o->oFaceAnglePitch); - o->oWaterRingMarioDistInFront = WaterRingCalcMarioDistInFront(); + o->oWaterRingMarioDistInFront = water_ring_calc_mario_dist(); // Adding this code will alter the ring's graphical orientation to align with the faulty // collision orientation: @@ -35,17 +35,17 @@ void WaterRingInit(void) { } void bhv_jet_stream_water_ring_init(void) { - WaterRingInit(); + water_ring_init(); o->oOpacity = 70; - SetObjAnimation(0); + cur_obj_init_animation(0); o->oFaceAnglePitch = 0x8000; } // sp28 = arg0 // sp2c = ringManager -void CheckWaterRingCollection(f32 avgScale, struct Object *ringManager) { - f32 marioDistInFront = WaterRingCalcMarioDistInFront(); +void water_ring_check_collection(f32 avgScale, struct Object *ringManager) { + f32 marioDistInFront = water_ring_calc_mario_dist(); struct Object *ringSpawner; if (!is_point_close_to_object(o, gMarioObject->header.gfx.pos[0], @@ -83,7 +83,7 @@ void CheckWaterRingCollection(f32 avgScale, struct Object *ringManager) { o->oWaterRingMarioDistInFront = marioDistInFront; } -void SetWaterRingScale(f32 avgScale) { +void water_ring_set_scale(f32 avgScale) { o->header.gfx.scale[0] = sins(o->oWaterRingScalePhaseX) * 0.1 + avgScale; o->header.gfx.scale[1] = sins(o->oWaterRingScalePhaseY) * 0.5 + avgScale; o->header.gfx.scale[2] = sins(o->oWaterRingScalePhaseZ) * 0.1 + avgScale; @@ -92,7 +92,7 @@ void SetWaterRingScale(f32 avgScale) { o->oWaterRingScalePhaseZ += 0x1700; } -void WaterRingCollectedLoop(void) { +void water_ring_act_collected(void) { f32 avgScale = (f32) o->oTimer * 0.2 + o->oWaterRingAvgScale; if (o->oTimer >= 21) @@ -102,10 +102,10 @@ void WaterRingCollectedLoop(void) { if (o->oOpacity < 0) o->oOpacity = 0; - SetWaterRingScale(avgScale); + water_ring_set_scale(avgScale); } -void JetStreamWaterRingNotCollectedLoop(void) { +void water_ring_act_not_collected(void) { f32 avgScale = (f32) o->oTimer / 225.0 * 3.0 + 0.5; //! In this case ringSpawner and ringManager are the same object, @@ -119,8 +119,8 @@ void JetStreamWaterRingNotCollectedLoop(void) { o->activeFlags = 0; } - CheckWaterRingCollection(avgScale, ringManager); - SetWaterRingScale(avgScale); + water_ring_check_collection(avgScale, ringManager); + water_ring_set_scale(avgScale); o->oPosY += 10.0f; o->oFaceAngleYaw += 0x100; @@ -136,21 +136,21 @@ void JetStreamWaterRingNotCollectedLoop(void) { void bhv_jet_stream_water_ring_loop(void) { switch (o->oAction) { case WATER_RING_ACT_NOT_COLLECTED: - JetStreamWaterRingNotCollectedLoop(); + water_ring_act_not_collected(); break; case WATER_RING_ACT_COLLECTED: - WaterRingCollectedLoop(); + water_ring_act_collected(); break; } } -void Unknown802EB8A4(void) { +void spawn_manta_ray_ring_manager(void) { struct Object *ringManager = spawn_object(o, MODEL_NONE, bhvMantaRayRingManager); o->parentObj = ringManager; } -void JetStreamRingSpawnerActiveLoop(void) { +void water_ring_spawner_act_inactive(void) { //! The Jet Stream Ring Spawner is its own parent object. The code may have been copied // from the Manta Ray, which spawns rings but also has a Ring Manager object as its // parent. The Jet Stream Ring Spawner functions as both a spawner and a Ring Manager. @@ -175,12 +175,12 @@ void JetStreamRingSpawnerActiveLoop(void) { void bhv_jet_stream_ring_spawner_loop(void) { switch (o->oAction) { case JS_RING_SPAWNER_ACT_ACTIVE: - JetStreamRingSpawnerActiveLoop(); + water_ring_spawner_act_inactive(); if (o->oWaterRingSpawnerRingsCollected == 5) { - func_802A3004(); + spawn_mist_particles(); - create_star(3400.0f, -3200.0f, -500.0f); + spawn_default_star(3400.0f, -3200.0f, -500.0f); o->oAction = JS_RING_SPAWNER_ACT_INACTIVE; } @@ -192,11 +192,11 @@ void bhv_jet_stream_ring_spawner_loop(void) { } void bhv_manta_ray_water_ring_init(void) { - WaterRingInit(); + water_ring_init(); o->oOpacity = 150; } -void MantaRayWaterRingNotCollectedLoop(void) { +void manta_water_ring_act_not_collected(void) { f32 avgScale = (f32) o->oTimer / 50.0f * 1.3 + 0.1; struct Object *ringSpawner = o->parentObj; struct Object *ringManager = ringSpawner->parentObj; @@ -210,8 +210,8 @@ void MantaRayWaterRingNotCollectedLoop(void) { o->activeFlags = 0; } - CheckWaterRingCollection(avgScale, ringManager); - SetWaterRingScale(avgScale); + water_ring_check_collection(avgScale, ringManager); + water_ring_set_scale(avgScale); set_object_visibility(o, 5000); if (ringSpawner->oWaterRingSpawnerRingsCollected == 4 @@ -224,11 +224,11 @@ void MantaRayWaterRingNotCollectedLoop(void) { void bhv_manta_ray_water_ring_loop(void) { switch (o->oAction) { case WATER_RING_ACT_NOT_COLLECTED: - MantaRayWaterRingNotCollectedLoop(); + manta_water_ring_act_not_collected(); break; case WATER_RING_ACT_COLLECTED: - WaterRingCollectedLoop(); + water_ring_act_collected(); break; } } diff --git a/src/game/behaviors/water_splash.inc.c b/src/game/behaviors/water_splash.inc.c deleted file mode 100644 index 59d86b1..0000000 --- a/src/game/behaviors/water_splash.inc.c +++ /dev/null @@ -1,90 +0,0 @@ -// water_splash.c.inc - -struct WaterSplashParams D_8032FDAC = { - 2, MODEL_WHITE_PARTICLE_SMALL, bhvWaterDrops, 0, 0, 5.0f, 3.0f, 30.0f, 20.0f, 0.5f, 1.0f -}; -struct WaterSplashParams D_8032FDD0 = { - 34, MODEL_WHITE_PARTICLE_SMALL, bhvWaterDrops, 0, 0, 2.0f, 3.0f, 20.0f, 20.0f, 0.5f, 1.0f -}; -struct WaterSplashParams D_8032FDF4 = { 34, MODEL_FISH, bhvWaterDrops, 0, 0, 2.0f, - 3.0f, 20.0f, 20.0f, 1.0f, 0.0f }; -struct WaterSplashParams D_8032FE18 = { - 98, MODEL_WHITE_PARTICLE_SMALL, bhvWaterDrops, 0x6000, 0, 2.0f, 8.0f, 10.0f, 10.0f, 0.5f, 1.0f -}; - -void bhv_water_splash_loop(void) { - s32 i; - if (o->oTimer == 0) - o->oPosY = find_water_level(o->oPosX, o->oPosZ); - if (o->oPosY > -10000.0f) - for (i = 0; i < 3; i++) - spawn_water_splash(o, &D_8032FDAC); -} - -void bhv_water_drops_loop(void) { - UNUSED s32 unused; - f32 sp20 = find_water_level(o->oPosX, o->oPosZ); - if (o->oTimer == 0) { - if (obj_has_model(MODEL_FISH)) - o->header.gfx.node.flags &= ~4; - else - o->header.gfx.node.flags |= 4; - o->oFaceAngleYaw = RandomU16(); - } - o->oVelY -= 4.0f; - o->oPosY += o->oVelY; - if (o->oVelY < 0.0f) { - if (sp20 > o->oPosY) { - try_to_spawn_object(0, 1.0f, o, MODEL_SPOT_ON_GROUND, bhvWaterSurfaceWhiteWave); - mark_object_for_deletion(o); - } else if (o->oTimer > 20) - mark_object_for_deletion(o); - } - if (sp20 < -10000.0f) - mark_object_for_deletion(o); -} - -void bhv_surface_waves_loop(void) { - copy_object_pos(o, gMarioObject); - o->oPosY = gMarioStates->waterLevel + 5; - if (!(gMarioObject->oMarioParticleFlags & 0x80)) { - gMarioObject->oActiveParticleFlags &= 0xFF7F; - o->activeFlags = 0; - } -} - -void bhv_water_surface_white_wave_init(void) { - obj_scale(RandomFloat() + 1.5); -} - -void bhv_object_bubble_ripples_init(void) { - f32 sp1C = find_water_level(o->oPosX, o->oPosZ); - scale_object_xyz(o, 0.5f, 1.0f, 0.5f); - o->oPosY = sp1C + 5.0f; -} - -void bhv_surface_wave_shrinking_init(void) { - UNUSED struct Object *sp1C; - if ((RandomU16() & 0xFF) <= 0) // weird - { - sp1C = spawn_water_splash(o, &D_8032FDF4); - func_8029EE20(sp1C, blue_fish_seg3_anims_0301C2B0, 0); - } -} - -void bhv_wave_trail_loop(void) { - f32 sp1C = find_water_level(o->oPosX, o->oPosZ); - if (o->oTimer == 0) - if (gGlobalTimer & 1) - mark_object_for_deletion(o); - o->oPosY = sp1C + 5.0f; - if (o->oTimer == 0) - o->oWaveTrailUnkF8 = o->header.gfx.scale[0]; - if (o->oAnimState > 3) { - o->oWaveTrailUnkF8 = o->oWaveTrailUnkF8 - 0.1; - if (o->oWaveTrailUnkF8 < 0.0f) - o->oWaveTrailUnkF8 = 0.0f; - o->header.gfx.scale[0] = o->oWaveTrailUnkF8; - o->header.gfx.scale[2] = o->oWaveTrailUnkF8; - } -} diff --git a/src/game/behaviors/water_splashes_and_waves.inc.c b/src/game/behaviors/water_splashes_and_waves.inc.c new file mode 100644 index 0000000..fef9a1c --- /dev/null +++ b/src/game/behaviors/water_splashes_and_waves.inc.c @@ -0,0 +1,133 @@ +// water_splashes_and_waves.c.inc + +// Water droplets from Mario jumping in a pool of water. +struct WaterDropletParams sWaterSplashDropletParams = { + /* Flags */ WATER_DROPLET_FLAG_RAND_ANGLE, + /* Model */ MODEL_WHITE_PARTICLE_SMALL, + /* Behavior */ bhvWaterDroplet, + /* Unused (flag-specific) */ 0, 0, + /* Random fvel offset, scale */ 5.0f, 3.0f, + /* Random yvel offset, scale */ 30.0f, 20.0f, + /* Random size offset, scale */ 0.5f, 1.0f +}; + +// Water droplets from Mario jumping in shallow water. +struct WaterDropletParams sShallowWaterSplashDropletParams = { + /* Flags */ WATER_DROPLET_FLAG_RAND_ANGLE | WATER_DROPLET_FLAG_SET_Y_TO_WATER_LEVEL, + /* Model */ MODEL_WHITE_PARTICLE_SMALL, + /* Behavior */ bhvWaterDroplet, + /* Unused (flag-specific) */ 0, 0, + /* Random fvel offset, scale */ 2.0f, 3.0f, + /* Random yvel offset, scale */ 20.0f, 20.0f, + /* Random size offset, scale */ 0.5f, 1.0f +}; + +// The fish particle easter egg from Mario jumping in shallow water. +struct WaterDropletParams sWaterDropletFishParams = { + /* Flags */ WATER_DROPLET_FLAG_RAND_ANGLE | WATER_DROPLET_FLAG_SET_Y_TO_WATER_LEVEL, + /* Model */ MODEL_FISH, + /* Behavior */ bhvWaterDroplet, + /* Unused (flag-specific) */ 0, 0, + /* Random fvel offset, scale */ 2.0f, 3.0f, + /* Random yvel offset, scale */ 20.0f, 20.0f, + /* Random size offset, scale */ 1.0f, 0.0f +}; + +// Water droplets from Mario running in shallow water. +struct WaterDropletParams sShallowWaterWaveDropletParams = { + /* Flags */ WATER_DROPLET_FLAG_RAND_ANGLE_INCR_PLUS_8000 | WATER_DROPLET_FLAG_RAND_ANGLE | WATER_DROPLET_FLAG_SET_Y_TO_WATER_LEVEL, + /* Model */ MODEL_WHITE_PARTICLE_SMALL, + /* Behavior */ bhvWaterDroplet, + /* Move angle range */ 0x6000, + /* Unused (flag-specific) */ 0, + /* Random fvel offset, scale */ 2.0f, 8.0f, + /* Random yvel offset, scale */ 10.0f, 10.0f, + /* Random size offset, scale */ 0.5f, 1.0f +}; + + +void bhv_water_splash_spawn_droplets(void) { + s32 i; + if (o->oTimer == 0) + o->oPosY = find_water_level(o->oPosX, o->oPosZ); + + if (o->oPosY > -10000.0f) // Make sure it is not at the default water level + for (i = 0; i < 3; i++) + spawn_water_droplet(o, &sWaterSplashDropletParams); +} + +void bhv_water_droplet_loop(void) { + UNUSED u32 unusedVar; + f32 waterLevel = find_water_level(o->oPosX, o->oPosZ); + + if (o->oTimer == 0) { + if (cur_obj_has_model(MODEL_FISH)) + o->header.gfx.node.flags &= ~4; + else + o->header.gfx.node.flags |= 4; + o->oFaceAngleYaw = RandomU16(); + } + // Apply gravity + o->oVelY -= 4.0f; + o->oPosY += o->oVelY; + // Check if fallen back into the water + if (o->oVelY < 0.0f) { + if (waterLevel > o->oPosY) { + // Create the smaller splash + try_to_spawn_object(0, 1.0f, o, MODEL_SMALL_WATER_SPLASH, bhvWaterDropletSplash); + obj_mark_for_deletion(o); + } else if (o->oTimer > 20) + obj_mark_for_deletion(o); + } + if (waterLevel < -10000.0f) + obj_mark_for_deletion(o); +} + +void bhv_idle_water_wave_loop(void) { + obj_copy_pos(o, gMarioObject); + o->oPosY = gMarioStates->waterLevel + 5; + if (!(gMarioObject->oMarioParticleFlags & ACTIVE_PARTICLE_IDLE_WATER_WAVE)) { + gMarioObject->oActiveParticleFlags &= (u16)~ACTIVE_PARTICLE_IDLE_WATER_WAVE; + o->activeFlags = 0; + } +} + +void bhv_water_droplet_splash_init(void) { + cur_obj_scale(RandomFloat() + 1.5); +} + +void bhv_bubble_splash_init(void) { + f32 waterLevel = find_water_level(o->oPosX, o->oPosZ); + obj_scale_xyz(o, 0.5f, 1.0f, 0.5f); + o->oPosY = waterLevel + 5.0f; +} + +void bhv_shallow_water_splash_init(void) { + struct Object *fishObj; + // Have a 1 in 256 chance to spawn the fish particle easter egg. + if ((RandomU16() & 0xFF) <= 0) // Strange + { + fishObj = spawn_water_droplet(o, &sWaterDropletFishParams); + obj_init_animation_with_sound(fishObj, blue_fish_seg3_anims_0301C2B0, 0); + } +} + +void bhv_wave_trail_shrink(void) { + f32 waterLevel = find_water_level(o->oPosX, o->oPosZ); + // Destroy every other water wave to space them out (this is a terrible way of doing it) + if (o->oTimer == 0) + if (gGlobalTimer & 1) + obj_mark_for_deletion(o); + o->oPosY = waterLevel + 5.0f; + + if (o->oTimer == 0) + o->oWaveTrailSize = o->header.gfx.scale[0]; + + if (o->oAnimState > 3) { + o->oWaveTrailSize = o->oWaveTrailSize - 0.1; // Shrink the wave + if (o->oWaveTrailSize < 0.0f) + o->oWaveTrailSize = 0.0f; + o->header.gfx.scale[0] = o->oWaveTrailSize; + o->header.gfx.scale[2] = o->oWaveTrailSize; + } +} diff --git a/src/game/behaviors/water_wave.inc.c b/src/game/behaviors/water_wave.inc.c index 955efc9..39e316a 100644 --- a/src/game/behaviors/water_wave.inc.c +++ b/src/game/behaviors/water_wave.inc.c @@ -1,4 +1,5 @@ // water_wave.c.inc +// TODO: Rename to avoid confusion with water_splashes_and_waves void bhv_object_water_wave_init(void) { o->oPosY = find_water_level(o->oPosX, o->oPosZ); diff --git a/src/game/behaviors/wdw_water_level.inc.c b/src/game/behaviors/wdw_water_level.inc.c index f556f6c..85556dc 100644 --- a/src/game/behaviors/wdw_water_level.inc.c +++ b/src/game/behaviors/wdw_water_level.inc.c @@ -23,7 +23,7 @@ void bhv_water_level_diamond_loop(void) { o->oAction++; // Sets to WATER_LEVEL_DIAMOND_ACT_IDLE break; case WATER_LEVEL_DIAMOND_ACT_IDLE: - if (are_objects_collided(o, gMarioObject)) { + if (obj_check_if_collided_with_object(o, gMarioObject)) { if (gWDWWaterLevelChanging == 0) { o->oAction++; // Sets to WATER_LEVEL_DIAMOND_ACT_CHANGE_WATER_LEVEL gWDWWaterLevelChanging = 1; @@ -41,18 +41,18 @@ void bhv_water_level_diamond_loop(void) { o->oAngleVelYaw = 0x800; } else { if (o->oTimer == 0) - PlaySound2(SOUND_GENERAL_WATER_LEVEL_TRIG); + cur_obj_play_sound_2(SOUND_GENERAL_WATER_LEVEL_TRIG); else { if (*gEnvironmentLevels > o->oWaterLevelTriggerTargetWaterLevel) - PlaySound(SOUND_ENV_WATER_DRAIN); + cur_obj_play_sound_1(SOUND_ENV_WATER_DRAIN); else - PlaySound(SOUND_ENV_WATER_DRAIN); // same as above + cur_obj_play_sound_1(SOUND_ENV_WATER_DRAIN); // same as above } o->oAngleVelYaw = 0x800; } break; case WATER_LEVEL_DIAMOND_ACT_IDLE_SPINNING: - if (!are_objects_collided(o, gMarioObject)) { + if (!obj_check_if_collided_with_object(o, gMarioObject)) { gWDWWaterLevelChanging = 0; o->oAction = WATER_LEVEL_DIAMOND_ACT_IDLE; o->oAngleVelYaw = 0; diff --git a/src/game/behaviors/whirlpool.inc.c b/src/game/behaviors/whirlpool.inc.c index 3287dec..f2c502d 100644 --- a/src/game/behaviors/whirlpool.inc.c +++ b/src/game/behaviors/whirlpool.inc.c @@ -19,11 +19,11 @@ void bhv_whirlpool_init(void) { o->oFaceAngleRoll = 0; } -void func_802E70A8(void) { - set_object_hitbox(o, &sWhirlpoolHitbox); +void whirlpool_set_hitbox(void) { + obj_set_hitbox(o, &sWhirlpoolHitbox); } -void func_802E70DC(void) { +void whirpool_orient_graph(void) { f32 cosPitch = coss(o->oFaceAnglePitch); f32 sinPitch = sins(o->oFaceAnglePitch); f32 cosRoll = coss(o->oFaceAngleRoll); @@ -49,7 +49,7 @@ void bhv_whirlpool_loop(void) { gEnvFxBubbleConfig[ENVFX_STATE_PITCH] = o->oWhirlpoolInitFacePitch; gEnvFxBubbleConfig[ENVFX_STATE_YAW] = o->oWhirlpoolInitFaceRoll; - func_802E70DC(); + whirpool_orient_graph(); o->oFaceAngleYaw += 0x1F40; } else { @@ -57,9 +57,9 @@ void bhv_whirlpool_loop(void) { gEnvFxBubbleConfig[ENVFX_STATE_PARTICLECOUNT] = 0; } - PlaySound(SOUND_ENV_WATER); + cur_obj_play_sound_1(SOUND_ENV_WATER); - func_802E70A8(); + whirlpool_set_hitbox(); } void bhv_jet_stream_loop(void) { @@ -71,5 +71,5 @@ void bhv_jet_stream_loop(void) { } else gEnvFxBubbleConfig[ENVFX_STATE_PARTICLECOUNT] = 0; - PlaySound(SOUND_ENV_WATER); + cur_obj_play_sound_1(SOUND_ENV_WATER); } diff --git a/src/game/behaviors/white_puff.inc.c b/src/game/behaviors/white_puff.inc.c index a86198d..5bd7872 100644 --- a/src/game/behaviors/white_puff.inc.c +++ b/src/game/behaviors/white_puff.inc.c @@ -4,17 +4,17 @@ void bhv_white_puff_1_loop(void) { f32 sp1C = 0.1f; f32 sp18 = 0.5f; if (o->oTimer == 0) { - translate_object_xz_random(o, 40.0f); + obj_translate_xz_random(o, 40.0f); o->oPosY += 30.0f; } - obj_scale(o->oTimer * sp18 + sp1C); + cur_obj_scale(o->oTimer * sp18 + sp1C); o->oOpacity = 50; - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); if (o->oTimer > 4) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } void bhv_white_puff_2_loop(void) { if (o->oTimer == 0) - translate_object_xz_random(o, 40.0f); + obj_translate_xz_random(o, 40.0f); } diff --git a/src/game/behaviors/white_puff_explode.inc.c b/src/game/behaviors/white_puff_explode.inc.c index 191aeb1..510058a 100644 --- a/src/game/behaviors/white_puff_explode.inc.c +++ b/src/game/behaviors/white_puff_explode.inc.c @@ -3,7 +3,7 @@ void bhv_white_puff_exploding_loop(void) { f32 sp24; if (o->oTimer == 0) { - obj_compute_vel_xz(); + cur_obj_compute_vel_xz(); o->oWhitePuffUnkF4 = o->header.gfx.scale[0]; switch (o->oBehParams2ndByte) { case 2: @@ -18,20 +18,20 @@ void bhv_white_puff_exploding_loop(void) { break; } } - obj_move_using_vel_and_gravity(); - obj_apply_drag_xz(o->oDragStrength); + cur_obj_move_using_vel_and_gravity(); + cur_obj_apply_drag_xz(o->oDragStrength); if (o->oVelY > 100.0f) o->oVelY = 100.0f; if (o->oTimer > 20) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->oOpacity) { o->oOpacity += o->oWhitePuffUnkF8; if (o->oOpacity < 2) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (o->oWhitePuffUnkFC) sp24 = o->oWhitePuffUnkF4 * ((254 - o->oOpacity) / 254.0); else sp24 = o->oWhitePuffUnkF4 * (o->oOpacity / 254.0); - obj_scale(sp24); + cur_obj_scale(sp24); } } diff --git a/src/game/behaviors/whomp.inc.c b/src/game/behaviors/whomp.inc.c index 1c0a19e..93a68dc 100644 --- a/src/game/behaviors/whomp.inc.c +++ b/src/game/behaviors/whomp.inc.c @@ -1,44 +1,44 @@ // whomp.c.inc -void func_802C61CC(void) { +void whomp_play_sfx_from_pound_animation(void) { UNUSED s32 sp2C = o->header.gfx.unk38.animFrame; s32 sp28 = 0; if (o->oForwardVel < 5.0f) { - sp28 = obj_check_anim_frame(0); - sp28 |= obj_check_anim_frame(23); + sp28 = cur_obj_check_anim_frame(0); + sp28 |= cur_obj_check_anim_frame(23); } else { - sp28 = obj_check_anim_frame_in_range(0, 3); - sp28 |= obj_check_anim_frame_in_range(23, 3); + sp28 = cur_obj_check_anim_frame_in_range(0, 3); + sp28 |= cur_obj_check_anim_frame_in_range(23, 3); } if (sp28) - PlaySound2(SOUND_OBJ_POUNDING1); + cur_obj_play_sound_2(SOUND_OBJ_POUNDING1); } -void ActionWhomp0(void) { - func_8029ED98(0, 1.0f); - obj_set_pos_to_home(); +void whomp_act_0(void) { + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); + cur_obj_set_pos_to_home(); if (o->oBehParams2ndByte != 0) { gSecondCameraFocus = o; - obj_scale(2.0f); + cur_obj_scale(2.0f); if (o->oSubAction == 0) { if (o->oDistanceToMario < 600.0f) { o->oSubAction++; func_8031FFB4(0, 60, 40); } else { - obj_set_pos_to_home(); + cur_obj_set_pos_to_home(); o->oHealth = 3; } - } else if (obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_114)) + } else if (cur_obj_update_dialog_with_cutscene(2, 1, CUTSCENE_DIALOG, DIALOG_114)) o->oAction = 2; } else if (o->oDistanceToMario < 500.0f) o->oAction = 1; - func_802C61CC(); + whomp_play_sfx_from_pound_animation(); } -void ActionWhomp7(void) { +void whomp_act_7(void) { if (o->oSubAction == 0) { o->oForwardVel = 0.0f; - func_8029ED98(0, 1.0f); + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); if (o->oTimer > 31) o->oSubAction++; else @@ -48,65 +48,65 @@ void ActionWhomp7(void) { if (o->oTimer > 42) o->oAction = 1; } - func_802C61CC(); + whomp_play_sfx_from_pound_animation(); } -void ActionWhomp1(void) { +void whomp_act_1(void) { s16 sp26; f32 sp20; f32 sp1C; sp26 = abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw); - sp20 = obj_lateral_dist_to_home(); + sp20 = cur_obj_lateral_dist_to_home(); if (gCurrLevelNum == LEVEL_BITS) sp1C = 200.0f; else sp1C = 700.0f; - func_8029ED98(0, 1.0f); + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); o->oForwardVel = 3.0f; if (sp20 > sp1C) o->oAction = 7; else if (sp26 < 0x2000) { if (o->oDistanceToMario < 1500.0f) { o->oForwardVel = 9.0f; - func_8029ED98(0, 3.0f); + cur_obj_init_animation_with_accel_and_sound(0, 3.0f); } if (o->oDistanceToMario < 300.0f) o->oAction = 3; } - func_802C61CC(); + whomp_play_sfx_from_pound_animation(); } -void ActionWhomp2(void) { +void whomp_act_2(void) { s16 sp1E; - func_8029ED98(0, 1.0f); + cur_obj_init_animation_with_accel_and_sound(0, 1.0f); o->oForwardVel = 3.0f; - obj_rotate_yaw_toward(o->oAngleToMario, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); if (o->oTimer > 30) { sp1E = abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw); if (sp1E < 0x2000) { if (o->oDistanceToMario < 1500.0f) { o->oForwardVel = 9.0f; - func_8029ED98(0, 3.0f); + cur_obj_init_animation_with_accel_and_sound(0, 3.0f); } if (o->oDistanceToMario < 300.0f) o->oAction = 3; } } - func_802C61CC(); - if (func_802A6AF8(1000.0f)) { + whomp_play_sfx_from_pound_animation(); + if (mario_is_far_below_object(1000.0f)) { o->oAction = 0; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } } -void ActionWhomp3(void) { +void whomp_act_3(void) { o->oForwardVel = 0.0f; - func_8029ED98(1, 1.0f); - if (func_8029F788()) + cur_obj_init_animation_with_accel_and_sound(1, 1.0f); + if (cur_obj_check_if_near_animation_end()) o->oAction = 4; } -void ActionWhomp4(void) { +void whomp_act_4(void) { if (o->oTimer == 0) o->oVelY = 40.0f; if (o->oTimer < 8) { @@ -121,10 +121,10 @@ void ActionWhomp4(void) { } } -void ActionWhomp5(void) { +void whomp_act_5(void) { if (o->oSubAction == 0 && o->oMoveFlags & 1) { - PlaySound2(SOUND_OBJ_WHOMP_LOWPRIO); - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_play_sound_2(SOUND_OBJ_WHOMP_LOWPRIO); + cur_obj_shake_screen(SHAKE_POS_SMALL); o->oVelY = 0.0f; o->oSubAction++; } @@ -132,22 +132,22 @@ void ActionWhomp5(void) { o->oAction = 6; } -void func_802C6954(void) { +void king_whomp_on_ground(void) { Vec3f pos; if (o->oSubAction == 0) { - if (obj_is_mario_ground_pounding_platform()) { + if (cur_obj_is_mario_ground_pounding_platform()) { o->oHealth--; - PlaySound2(SOUND_OBJ2_WHOMP_SOUND_SHORT); - PlaySound2(SOUND_OBJ_KING_WHOMP_DEATH); + cur_obj_play_sound_2(SOUND_OBJ2_WHOMP_SOUND_SHORT); + cur_obj_play_sound_2(SOUND_OBJ_KING_WHOMP_DEATH); if (o->oHealth == 0) o->oAction = 8; else { - func_802B8F7C(pos, &o->oPosX); - func_802B8F7C(&o->oPosX, &gMarioObject->oPosX); - func_802AA618(0, 0, 100.0f); + vec3f_copy_2(pos, &o->oPosX); + vec3f_copy_2(&o->oPosX, &gMarioObject->oPosX); + spawn_mist_particles_variable(0, 0, 100.0f); spawn_triangle_break_particles(20, 138, 3.0f, 4); - ShakeScreen(SHAKE_POS_SMALL); - func_802B8F7C(&o->oPosX, pos); + cur_obj_shake_screen(SHAKE_POS_SMALL); + vec3f_copy_2(&o->oPosX, pos); } o->oSubAction++; } @@ -164,32 +164,32 @@ void func_802C6954(void) { } } -void func_802C6B28(void) { +void whomp_on_ground(void) { if (o->oSubAction == 0) { if (gMarioObject->platform == o) { - if (obj_is_mario_ground_pounding_platform()) { + if (cur_obj_is_mario_ground_pounding_platform()) { o->oNumLootCoins = 5; - spawn_object_loot_yellow_coins(o, 5, 20.0f); + obj_spawn_loot_yellow_coins(o, 5, 20.0f); o->oAction = 8; } else { - obj_spawn_loot_coin_at_mario_pos(); + cur_obj_spawn_loot_coin_at_mario_pos(); o->oSubAction++; } } - } else if (!obj_is_mario_on_platform()) + } else if (!cur_obj_is_mario_on_platform()) o->oSubAction = 0; } -void ActionWhomp6(void) { +void whomp_act_6(void) { if (o->oSubAction != 10) { o->oForwardVel = 0.0f; o->oAngleVelPitch = 0; o->oAngleVelYaw = 0; o->oAngleVelRoll = 0; if (o->oBehParams2ndByte != 0) - func_802C6954(); + king_whomp_on_ground(); else - func_802C6B28(); + whomp_on_ground(); if (o->oTimer > 100 || (gMarioState->action == ACT_SQUISHED && o->oTimer > 30)) o->oSubAction = 10; } else { @@ -207,49 +207,49 @@ void ActionWhomp6(void) { } } -void ActionWhomp8(void) { +void whomp_act_8(void) { if (o->oBehParams2ndByte != 0) { - if (obj_update_dialog_with_cutscene(2, 2, CUTSCENE_DIALOG, DIALOG_115)) { - set_object_angle(o, 0, 0, 0); - obj_hide(); - obj_become_intangible(); - func_802AA618(0, 0, 200.0f); + if (cur_obj_update_dialog_with_cutscene(2, 2, CUTSCENE_DIALOG, DIALOG_115)) { + obj_set_angle(o, 0, 0, 0); + cur_obj_hide(); + cur_obj_become_intangible(); + spawn_mist_particles_variable(0, 0, 200.0f); spawn_triangle_break_particles(20, 138, 3.0f, 4); - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_shake_screen(SHAKE_POS_SMALL); o->oPosY += 100.0f; - create_star(180.0f, 3880.0f, 340.0f); - PlaySound2(SOUND_OBJ_KING_WHOMP_DEATH); + spawn_default_star(180.0f, 3880.0f, 340.0f); + cur_obj_play_sound_2(SOUND_OBJ_KING_WHOMP_DEATH); o->oAction = 9; } } else { - func_802AA618(0, 0, 100.0f); + spawn_mist_particles_variable(0, 0, 100.0f); spawn_triangle_break_particles(20, 138, 3.0f, 4); - ShakeScreen(SHAKE_POS_SMALL); + cur_obj_shake_screen(SHAKE_POS_SMALL); create_sound_spawner(SOUND_OBJ_THWOMP); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } -void ActionWhomp9(void) { +void whomp_act_9(void) { if (o->oTimer == 60) stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } void (*sWhompActions[])(void) = { - ActionWhomp0, ActionWhomp1, ActionWhomp2, ActionWhomp3, ActionWhomp4, - ActionWhomp5, ActionWhomp6, ActionWhomp7, ActionWhomp8, ActionWhomp9 + whomp_act_0, whomp_act_1, whomp_act_2, whomp_act_3, whomp_act_4, + whomp_act_5, whomp_act_6, whomp_act_7, whomp_act_8, whomp_act_9 }; // MM void bhv_whomp_loop(void) { - obj_update_floor_and_walls(); - obj_call_action_function(sWhompActions); - obj_move_standard(-20); + cur_obj_update_floor_and_walls(); + cur_obj_call_action_function(sWhompActions); + cur_obj_move_standard(-20); if (o->oAction != 9) { if (o->oBehParams2ndByte != 0) - obj_hide_if_mario_far_away_y(2000.0f); + cur_obj_hide_if_mario_far_away_y(2000.0f); else - obj_hide_if_mario_far_away_y(1000.0f); + cur_obj_hide_if_mario_far_away_y(1000.0f); load_object_collision_model(); } } diff --git a/src/game/behaviors/wiggler.inc.c b/src/game/behaviors/wiggler.inc.c index a94631b..c1760bf 100644 --- a/src/game/behaviors/wiggler.inc.c +++ b/src/game/behaviors/wiggler.inc.c @@ -69,7 +69,7 @@ void bhv_wiggler_body_part_update(void) { struct ChainSegment *segment = &o->parentObj->oWigglerSegments[o->oBehParams2ndByte]; f32 posOffset; - obj_scale(o->parentObj->header.gfx.scale[0]); + cur_obj_scale(o->parentObj->header.gfx.scale[0]); o->oFaceAnglePitch = segment->pitch; o->oFaceAngleYaw = segment->yaw; @@ -90,7 +90,7 @@ void bhv_wiggler_body_part_update(void) { // while on the ground could cause the tail segments to clip through // the floor o->oPosY += -30.0f; - obj_update_floor_height(); + cur_obj_update_floor_height(); if (o->oFloorHeight > o->oPosY) // TODO: Check ineq swap { o->oPosY = o->oFloorHeight; @@ -100,13 +100,13 @@ void bhv_wiggler_body_part_update(void) { segment->posY = o->oPosY; // Inherit walking animation speed from wiggler - func_8029ED98(0, o->parentObj->oWigglerWalkAnimSpeed); + cur_obj_init_animation_with_accel_and_sound(0, o->parentObj->oWigglerWalkAnimSpeed); if (o->parentObj->oWigglerWalkAnimSpeed == 0.0f) { - func_8029F6F0(); + cur_obj_reverse_animation(); } if (o->parentObj->oAction == WIGGLER_ACT_SHRINK) { - obj_become_intangible(); + cur_obj_become_intangible(); } else { obj_check_attacks(&sWigglerBodyPartHitbox, o->oAction); } @@ -144,13 +144,13 @@ void wiggler_init_segments(void) { bodyPart = spawn_object_relative(i, 0, 0, 0, o, MODEL_WIGGLER_BODY, bhvWigglerBody); if (bodyPart != NULL) { - func_8029EE20(bodyPart, wiggler_seg5_anims_0500C874, 0); + obj_init_animation_with_sound(bodyPart, wiggler_seg5_anims_0500C874, 0); bodyPart->header.gfx.unk38.animFrame = (23 * i) % 26 - 1; } } o->oAction = WIGGLER_ACT_WALK; - obj_unhide(); + cur_obj_unhide(); } #if defined(VERSION_EU) || defined(AVOID_UB) @@ -228,7 +228,7 @@ static void wiggler_act_walk(void) { // If Mario is positioned below the wiggler, assume he entered through the // lower cave entrance, so don't display text. - if (gMarioObject->oPosY < o->oPosY || obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_150) != 0) { + if (gMarioObject->oPosY < o->oPosY || cur_obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_150) != 0) { o->oWigglerTextStatus = WIGGLER_TEXT_STATUS_COMPLETED_DIALOG; } } else { @@ -266,7 +266,7 @@ static void wiggler_act_walk(void) { // If moving at high speeds, could overflow. But can't reach such speeds // in practice yawTurnSpeed = (s16)(30.0f * o->oForwardVel); - obj_rotate_yaw_toward(o->oWigglerTargetYaw, yawTurnSpeed); + cur_obj_rotate_yaw_toward(o->oWigglerTargetYaw, yawTurnSpeed); obj_face_yaw_approach(o->oMoveAngleYaw, 2 * yawTurnSpeed); obj_face_pitch_approach(0, 0x320); @@ -304,18 +304,18 @@ static void wiggler_act_jumped_on(void) { // defeated) or go back to walking if (o->header.gfx.scale[1] >= 4.0f) { if (o->oTimer > 30) { - if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, attackText[o->oHealth - 2]) != 0) { + if (cur_obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, attackText[o->oHealth - 2]) != 0) { // Because we don't want the wiggler to disappear after being // defeated, we leave its health at 1 if (--o->oHealth == 1) { o->oAction = WIGGLER_ACT_SHRINK; - obj_become_intangible(); + cur_obj_become_intangible(); } else { o->oAction = WIGGLER_ACT_WALK; o->oMoveAngleYaw = o->oFaceAngleYaw; if (o->oHealth == 2) { - PlaySound2(SOUND_OBJ_WIGGLER_JUMP); + cur_obj_play_sound_2(SOUND_OBJ_WIGGLER_JUMP); o->oForwardVel = 10.0f; o->oVelY = 70.0f; } @@ -353,16 +353,16 @@ static void wiggler_act_knockback(void) { static void wiggler_act_shrink(void) { if (o->oTimer >= 20) { if (o->oTimer == 20) { - PlaySound2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); + cur_obj_play_sound_2(SOUND_OBJ_ENEMY_DEFEAT_SHRINK); } // 4 is the default scale, so shrink to 1/4 of regular size if (approach_f32_ptr(&o->header.gfx.scale[0], 1.0f, 0.1f)) { - create_star(0.0f, 2048.0f, 0.0f); + spawn_default_star(0.0f, 2048.0f, 0.0f); o->oAction = WIGGLER_ACT_FALL_THROUGH_FLOOR; } - obj_scale(o->header.gfx.scale[0]); + cur_obj_scale(o->header.gfx.scale[0]); } } @@ -380,7 +380,7 @@ static void wiggler_act_fall_through_floor(void) { o->oFaceAnglePitch = obj_get_pitch_from_vel(); } - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } } @@ -389,7 +389,7 @@ static void wiggler_act_fall_through_floor(void) { * Stop and enter the jumped on action. */ void wiggler_jumped_on_attack_handler(void) { - PlaySound2(SOUND_OBJ_WIGGLER_ATTACKED); + cur_obj_play_sound_2(SOUND_OBJ_WIGGLER_ATTACKED); o->oAction = WIGGLER_ACT_JUMPED_ON; o->oForwardVel = o->oVelY = 0.0f; o->oWigglerSquishSpeed = 0.4f; @@ -410,15 +410,15 @@ void bhv_wiggler_update(void) { treat_far_home_as_mario(1200.0f); // Walking animation and sound - func_8029ED98(0, o->oWigglerWalkAnimSpeed); + cur_obj_init_animation_with_accel_and_sound(0, o->oWigglerWalkAnimSpeed); if (o->oWigglerWalkAnimSpeed != 0.0f) { func_802F9378(0, 13, o->oHealth >= 4 ? SOUND_OBJ_WIGGLER_LOW_PITCH : SOUND_OBJ_WIGGLER_HIGH_PITCH); } else { - func_8029F6F0(); + cur_obj_reverse_animation(); } - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); switch (o->oAction) { case WIGGLER_ACT_WALK: wiggler_act_walk(); @@ -437,7 +437,7 @@ void bhv_wiggler_update(void) { break; } - obj_move_standard(-78); + cur_obj_move_standard(-78); } // Update segment 0 with data from the wiggler object diff --git a/src/game/behaviors/wind.inc.c b/src/game/behaviors/wind.inc.c index 1156a3d..238f9f7 100644 --- a/src/game/behaviors/wind.inc.c +++ b/src/game/behaviors/wind.inc.c @@ -1,6 +1,6 @@ // wind.c.inc -void func_802ADC20(s16 pitch, s16 yaw) { +void spawn_wind_particles(s16 pitch, s16 yaw) { s32 i; for (i = 0; i < 3; i++) { struct Object *wind = spawn_object(o, MODEL_MIST, bhvWind); @@ -15,25 +15,25 @@ void bhv_wind_loop(void) { if (o->oTimer == 0) { o->oOpacity = 100; if (o->oMoveAnglePitch == 0) { - translate_object_xz_random(o, 900.0f); + obj_translate_xz_random(o, 900.0f); o->oPosX += sins(o->oMoveAngleYaw + 0x8000) * sp2E; // NOP as Pitch is 0 o->oPosY += 80.0f + random_f32_around_zero(200.0f); o->oPosZ += coss(o->oMoveAngleYaw + 0x8000) * sp2E; // -coss(a) * sp2E o->oMoveAngleYaw += random_f32_around_zero(4000.0f); o->oForwardVel = RandomFloat() * 70.0f + 50.0f; } else { - translate_object_xz_random(o, 600.0f); + obj_translate_xz_random(o, 600.0f); o->oPosY -= sp2E - 200; // 300 o->oVelY = RandomFloat() * 30.0f + 50.0f; o->oMoveAngleYaw = RandomU16(); o->oForwardVel = 10.0f; } obj_set_billboard(o); - obj_scale(sp28); + cur_obj_scale(sp28); } if (o->oTimer > 8) - mark_object_for_deletion(o); + obj_mark_for_deletion(o); o->oFaceAnglePitch += 4000.0f + 2000.0f * RandomFloat(); o->oFaceAngleYaw += 4000.0f + 2000.0f * RandomFloat(); - obj_move_using_fvel_and_gravity(); + cur_obj_move_using_fvel_and_gravity(); } diff --git a/src/game/behaviors/wind_particle.inc.c b/src/game/behaviors/wind_particle.inc.c deleted file mode 100644 index cf676d8..0000000 --- a/src/game/behaviors/wind_particle.inc.c +++ /dev/null @@ -1,52 +0,0 @@ -// wind_particle.c.inc - -struct ObjectHitbox sWindParticleHitbox = { - /* interactType: */ INTERACT_WIND, - /* downOffset: */ 0, - /* damageOrCoinValue: */ 0, - /* health: */ 0, - /* numLootCoins: */ 0, - /* radius: */ 20, - /* height: */ 70, - /* hurtboxRadius: */ 20, - /* hurtboxHeight: */ 70, -}; - -void bhv_white_wind_particle_loop(void) { - struct Object *sp34; - f32 sp30; - f32 sp2C; - f32 sp28; - set_object_hitbox(o, &sWindParticleHitbox); - if (o->oTimer == 0) { - o->oWhiteWindParticleUnkF4 = obj_nearest_object_with_behavior(bhvWalkingPenguin); - translate_object_xyz_random(o, 100.0f); - o->oForwardVel = coss(o->oMoveAnglePitch) * 100.0f; - o->oVelY = sins(o->oMoveAnglePitch) * -100.0f; - o->oMoveAngleYaw += random_f32_around_zero(o->oBehParams2ndByte * 500); - o->oOpacity = 100; - } - obj_move_using_fvel_and_gravity(); - if (o->oTimer > 15) - mark_object_for_deletion(o); - sp34 = o->oWhiteWindParticleUnkF4; - if (sp34 != 0) { - sp2C = sp34->oWalkingPenguinUnk100 - o->oPosX; - sp28 = sp34->oWalkingPenguinUnk104 - o->oPosZ; - sp30 = sqrtf(sp2C * sp2C + sp28 * sp28); - if (sp30 < 300.0f) { - mark_object_for_deletion(o); - obj_become_intangible(); - } - } -} - -void func_802C76E0(s32 a0, f32 a1, f32 a2, f32 a3, f32 a4) { - if ((gGlobalTimer & 1) != 0) { - spawn_object_relative_with_scale(a0, a2, a3, a4, 0.5f, o, MODEL_WHITE_PARTICLE_DL, - bhvTinyWhiteWindParticle); - spawn_object_relative_with_scale(a0, a2, a3, a4, a1, o, MODEL_NONE, bhvWindParticle); - } else - spawn_object_relative_with_scale(a0, a2, a3, a4, a1, o, MODEL_MIST, bhvWindParticle); - spawn_object_relative_with_scale(a0, a2, a3, a4, a1, o, MODEL_NONE, bhvWindParticle); -} diff --git a/src/game/behaviors/yoshi.inc.c b/src/game/behaviors/yoshi.inc.c index 1c129c9..5622f74 100644 --- a/src/game/behaviors/yoshi.inc.c +++ b/src/game/behaviors/yoshi.inc.c @@ -26,9 +26,9 @@ void yoshi_walk_loop(void) { if (is_point_close_to_object(o, o->oHomeX, 3174.0f, o->oHomeZ, 200)) o->oAction = YOSHI_ACT_IDLE; - SetObjAnimation(1); + cur_obj_init_animation(1); if (sp24 == 0 || sp24 == 15) - PlaySound2(SOUND_GENERAL_YOSHI_WALK); + cur_obj_play_sound_2(SOUND_GENERAL_YOSHI_WALK); if (o->oInteractStatus == INT_STATUS_INTERACTED) o->oAction = YOSHI_ACT_TALK; @@ -58,7 +58,7 @@ void yoshi_idle_loop(void) { o->oAction = YOSHI_ACT_WALK; } - SetObjAnimation(0); + cur_obj_init_animation(0); if (o->oInteractStatus == INT_STATUS_INTERACTED) o->oAction = YOSHI_ACT_TALK; @@ -74,7 +74,7 @@ void yoshi_idle_loop(void) { void yoshi_talk_loop(void) { if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario) { - SetObjAnimation(0); + cur_obj_init_animation(0); if (set_mario_npc_dialog(1) == 2) { o->activeFlags |= 0x20; if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_161)) { @@ -87,7 +87,7 @@ void yoshi_talk_loop(void) { } } } else { - SetObjAnimation(1); + cur_obj_init_animation(1); play_puzzle_jingle(); o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 0x500); } @@ -98,14 +98,14 @@ void yoshi_walk_and_jump_off_roof_loop(void) { o->oForwardVel = 10.0f; object_step(); - SetObjAnimation(1); + cur_obj_init_animation(1); if (o->oTimer == 0) cutscene_object(CUTSCENE_STAR_SPAWN, o); o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oYoshiTargetYaw, 0x500); if (is_point_close_to_object(o, o->oHomeX, 3174.0f, o->oHomeZ, 200)) { - SetObjAnimation(2); - PlaySound2(SOUND_GENERAL_ENEMY_ALERT1); + cur_obj_init_animation(2); + cur_obj_play_sound_2(SOUND_GENERAL_ENEMY_ALERT1); o->oForwardVel = 50.0f; o->oVelY = 40.0f; o->oMoveAngleYaw = -0x3FFF; @@ -113,12 +113,12 @@ void yoshi_walk_and_jump_off_roof_loop(void) { } if (sp26 == 0 || sp26 == 15) { - PlaySound2(SOUND_GENERAL_YOSHI_WALK); + cur_obj_play_sound_2(SOUND_GENERAL_YOSHI_WALK); } } void yoshi_finish_jumping_and_despawn_loop(void) { - func_8029F728(); + cur_obj_extend_animation_if_at_end(); obj_move_xyz_using_fvel_and_yaw(o); o->oVelY -= 2.0; if (o->oPosY < 2100.0f) { @@ -145,7 +145,7 @@ void yoshi_give_present_loop(void) { } } -void BehYoshiLoop(void) { +void bhv_yoshi_loop(void) { switch (o->oAction) { case YOSHI_ACT_IDLE: yoshi_idle_loop(); @@ -172,9 +172,9 @@ void BehYoshiLoop(void) { break; case YOSHI_ACT_CREDITS: - SetObjAnimation(0); + cur_obj_init_animation(0); break; } - ObjRandomBlink(&o->oYoshiUnkF4); + curr_obj_random_blink(&o->oYoshiUnkF4); } diff --git a/src/game/camera.c b/src/game/camera.c index ed3428b..fdf140f 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1707,7 +1707,7 @@ struct ParallelTrackingPoint sBBHLibraryParTrackPath[] = { s32 unused_update_mode_5_camera(UNUSED struct Camera *c, UNUSED Vec3f focus, UNUSED Vec3f pos) { } -static void unused_80282678(UNUSED s32 unused) { +static void stub_camera_1(UNUSED s32 unused) { } void mode_boss_fight_camera(struct Camera *c) { @@ -3053,7 +3053,7 @@ void update_camera(struct Camera *c) { c->defMode = gLakituState.defMode; camera_course_processing(c); - dummy_802877EC(c); + stub_camera_3(c); sCButtonsPressed = find_c_buttons_pressed(sCButtonsPressed, gPlayer1Controller->buttonPressed, gPlayer1Controller->buttonDown); @@ -3157,7 +3157,7 @@ void update_camera(struct Camera *c) { } // Start any mario-related cutscenes start_cutscene(c, get_cutscene_from_mario_status(c)); - dummy_802877D8(c); + stub_camera_2(c); gCheckingSurfaceCollisionsForCamera = FALSE; if (gCurrLevelNum != LEVEL_CASTLE) { // If fixed camera is selected as the alternate mode, then fix the camera as long as the right @@ -3529,10 +3529,10 @@ Gfx *geo_camera_main(s32 callContext, struct GraphNode *g, void *context) { return NULL; } -void dummy_802877D8(UNUSED struct Camera *c) { +void stub_camera_2(UNUSED struct Camera *c) { } -void dummy_802877EC(UNUSED struct Camera *c) { +void stub_camera_3(UNUSED struct Camera *c) { } void vec3f_sub(Vec3f dst, Vec3f src) { @@ -5286,7 +5286,7 @@ void approach_camera_height(struct Camera *c, f32 goal, f32 inc) { } } -void unused_8028C3AC(UNUSED s32 a, UNUSED s32 b, UNUSED s32 c, UNUSED s32 d) { +void stub_camera_4(UNUSED s32 a, UNUSED s32 b, UNUSED s32 c, UNUSED s32 d) { } /** @@ -7206,7 +7206,7 @@ void cutscene_unsoften_music(UNUSED struct Camera *c) { sequence_player_unlower(0, 60); } -static void unused_802905C8(UNUSED struct Camera *c) { +static void stub_camera_5(UNUSED struct Camera *c) { } BAD_RETURN(s32) cutscene_unused_start(UNUSED struct Camera *c) { @@ -8175,7 +8175,6 @@ BAD_RETURN(s32) cutscene_bowser_arena_end(struct Camera *c) { transition_next_state(c, 20); sStatusFlags |= CAM_FLAG_UNUSED_CUTSCENE_ACTIVE; sModeOffsetYaw = sMarioCamState->faceAngle[1] + DEGREES(90); - //! This appears to do nothing gSecondCameraFocus->oBowserUnk88 = 2; } @@ -10000,22 +9999,22 @@ BAD_RETURN(s32) cutscene_enter_painting(struct Camera *c) { set_fov_function(CAM_FOV_APP_20); sStatusFlags |= CAM_FLAG_SMOOTH_MOVEMENT; - if (ripplingPainting != NULL) { + if (gRipplingPainting != NULL) { paintingAngle[0] = 0; - paintingAngle[1] = (s32)((ripplingPainting->vYRotation / 360.f) * 65536.f); // convert degrees to IAU + paintingAngle[1] = (s32)((gRipplingPainting->yaw / 360.f) * 65536.f); // convert degrees to IAU paintingAngle[2] = 0; - focusOffset[0] = ripplingPainting->vSize / 2; + focusOffset[0] = gRipplingPainting->size / 2; focusOffset[1] = focusOffset[0]; focusOffset[2] = 0; - paintingPos[0] = ripplingPainting->vXPos; - paintingPos[1] = ripplingPainting->vYPos; - paintingPos[2] = ripplingPainting->vZPos; + paintingPos[0] = gRipplingPainting->posX; + paintingPos[1] = gRipplingPainting->posY; + paintingPos[2] = gRipplingPainting->posZ; offset_rotated(focus, paintingPos, focusOffset, paintingAngle); approach_vec3f_asymptotic(c->focus, focus, 0.1f, 0.1f, 0.1f); - focusOffset[2] = -(((ripplingPainting->vSize * 1000.f) / 2) / 307.f); + focusOffset[2] = -(((gRipplingPainting->size * 1000.f) / 2) / 307.f); offset_rotated(focus, paintingPos, focusOffset, paintingAngle); floorHeight = find_floor(focus[0], focus[1] + 500.f, focus[2], &highFloor) + 125.f; diff --git a/src/game/camera.h b/src/game/camera.h index 4f0c509..b9aecbe 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -684,8 +684,8 @@ extern void reset_camera(struct Camera *); extern void init_camera(struct Camera *); extern void select_mario_cam_mode(void); extern Gfx *geo_camera_main(s32 callContext, struct GraphNode *g, void *context); -extern void dummy_802877D8(struct Camera *); -extern void dummy_802877EC(struct Camera *); +extern void stub_camera_2(struct Camera *); +extern void stub_camera_3(struct Camera *); extern void vec3f_sub(Vec3f dst, Vec3f src); extern void object_pos_to_vec3f(Vec3f, struct Object *); extern void vec3f_to_object_pos(struct Object *, Vec3f); // static (ASM) diff --git a/src/game/crash_screen.c b/src/game/crash_screen.c index ee75250..ea07ffd 100644 --- a/src/game/crash_screen.c +++ b/src/game/crash_screen.c @@ -4,7 +4,7 @@ #include "sm64.h" -#ifdef VERSION_EU +#if defined(VERSION_EU) || defined(VERSION_SH) s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char *fmt, va_list args); diff --git a/src/game/debug.c b/src/game/debug.c index 76edcd5..e27a77c 100644 --- a/src/game/debug.c +++ b/src/game/debug.c @@ -57,16 +57,16 @@ s8 sDebugInfoButtonSeqID = 0; s16 sDebugInfoButtonSeq[] = { U_CBUTTONS, L_CBUTTONS, D_CBUTTONS, R_CBUTTONS, -1 }; // most likely present in an ifdef DEBUG build. TODO: check DD version? -void Stub802C9890(void) { +void stub_debug_1(void) { } -void Stub802C98A0(void) { +void stub_debug_2(void) { } -void Stub802C98B0(void) { +void stub_debug_3(void) { } -void Stub802C98C0(void) { +void stub_debug_4(void) { } /* @@ -436,7 +436,7 @@ static void try_modify_debug_controls(void) { } // possibly a removed debug control (TODO: check DD) -void stub_802CA5D0(void) { +void stub_debug_5(void) { } /* @@ -521,7 +521,7 @@ void try_do_mario_debug_object_spawn(void) { } // TODO: figure out what this is -static void Unknown802CA8B4(void) { +static void debug_print_obj_move_flags(void) { #ifndef VERSION_EU if (gCurrentObject->oMoveFlags & OBJ_MOVE_LANDED) { print_debug_top_down_objectinfo("BOUND %x", gCurrentObject->oMoveFlags); @@ -554,7 +554,7 @@ static void Unknown802CA8B4(void) { } // unused, what is this? -void Unknown802CAA84(s16 *enemyArr) { +void debug_enemy_unknown(s16 *enemyArr) { // copy b1-b4 over to an unknown s16 array enemyArr[4] = gDebugInfo[DEBUG_PAGE_ENEMYINFO][1]; enemyArr[5] = gDebugInfo[DEBUG_PAGE_ENEMYINFO][2]; diff --git a/src/game/debug.h b/src/game/debug.h index 18f86c6..a4a47ed 100644 --- a/src/game/debug.h +++ b/src/game/debug.h @@ -20,7 +20,7 @@ extern void print_debug_top_down_mapinfo(const char * str, s32 number); extern void print_debug_bottom_up(const char*,s32); extern void debug_unknown_level_select_check(void); extern void reset_debug_objectinfo(void); -extern void stub_802CA5D0(void); +extern void stub_debug_5(void); extern void try_print_debug_mario_object_info(void); extern void try_do_mario_debug_object_spawn(void); extern void try_print_debug_mario_level_info(void); diff --git a/src/game/display.c b/src/game/display.c index 257f63d..b9ac5fc 100644 --- a/src/game/display.c +++ b/src/game/display.c @@ -214,7 +214,7 @@ void end_master_display_list(void) { create_task_structure(); } -void func_80247D84(void) { +void draw_reset_bars(void) { s32 sp24; s32 sp20; s32 fbNum; @@ -242,7 +242,7 @@ void func_80247D84(void) { osRecvMesg(&gGameVblankQueue, &D_80339BEC, OS_MESG_BLOCK); } -void func_80247ED8(void) { +void rendering_init(void) { gGfxPool = &gGfxPools[0]; set_segment_base_addr(1, gGfxPool->buffer); gGfxSPTask = &gGfxPool->spTask; @@ -257,7 +257,7 @@ void func_80247ED8(void) { gGlobalTimer++; } -void func_80247FAC(void) { +void config_gfx_pool(void) { gGfxPool = &gGfxPools[gGlobalTimer % 2]; set_segment_base_addr(1, gGfxPool->buffer); gGfxSPTask = &gGfxPool->spTask; diff --git a/src/game/display.h b/src/game/display.h index 36fcaf1..7d55b2d 100644 --- a/src/game/display.h +++ b/src/game/display.h @@ -23,9 +23,9 @@ extern void clear_viewport(Vp *, s32); void make_viewport_clip_rect(Vp *viewport); extern void init_render_image(void); extern void end_master_display_list(void); -extern void func_80247D84(void); -extern void func_80247ED8(void); -extern void func_80247FAC(void); +extern void draw_reset_bars(void); +extern void rendering_init(void); +extern void config_gfx_pool(void); extern void display_and_vsync(void); #endif /* _DISPLAY_H */ diff --git a/src/game/envfx_bubbles.c b/src/game/envfx_bubbles.c index 6d1d912..34eb7c0 100644 --- a/src/game/envfx_bubbles.c +++ b/src/game/envfx_bubbles.c @@ -413,16 +413,16 @@ void envfx_bubbles_update_switch(s32 mode, Vec3s camTo, Vec3s vertex1, Vec3s ver * Append 15 vertices to 'gfx', which is enough for 5 bubbles starting at * 'index'. The 3 input vertices represent the roated triangle around (0,0,0) * that will be translated to bubble positions to draw the bubble image + * + * TODO: (Scrub C) */ -#if defined(VERSION_EU) && !defined(NON_MATCHING) -void append_bubble_vertex_buffer(Gfx *gfx, s32 index, Vec3s vertex1, Vec3s vertex2, Vec3s vertex3, - Vtx *template); -GLOBAL_ASM("asm/non_matchings/eu/append_bubble_vertex_buffer.s") -#else void append_bubble_vertex_buffer(Gfx *gfx, s32 index, Vec3s vertex1, Vec3s vertex2, Vec3s vertex3, Vtx *template) { s32 i = 0; Vtx *vertBuf = alloc_display_list(15 * sizeof(Vtx)); +#ifdef VERSION_EU + Vtx *p; +#endif if (vertBuf == NULL) { return; @@ -430,24 +430,47 @@ void append_bubble_vertex_buffer(Gfx *gfx, s32 index, Vec3s vertex1, Vec3s verte for (i = 0; i < 15; i += 3) { vertBuf[i] = template[0]; +#ifdef VERSION_EU + p = vertBuf; + p += i; + p[0].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex1[0]; + p[0].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex1[1]; + p[0].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex1[2]; +#else vertBuf[i].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex1[0]; vertBuf[i].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex1[1]; vertBuf[i].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex1[2]; +#endif vertBuf[i + 1] = template[1]; +#ifdef VERSION_EU + p = vertBuf; + p += i; + p[1].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex2[0]; + p[1].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex2[1]; + p[1].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex2[2]; +#else vertBuf[i + 1].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex2[0]; vertBuf[i + 1].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex2[1]; vertBuf[i + 1].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex2[2]; +#endif vertBuf[i + 2] = template[2]; +#ifdef VERSION_EU + p = vertBuf; + p += i; + p[2].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex3[0]; + p[2].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex3[1]; + p[2].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex3[2]; +#else vertBuf[i + 2].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex3[0]; vertBuf[i + 2].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex3[1]; vertBuf[i + 2].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex3[2]; +#endif } gSPVertex(gfx, VIRTUAL_TO_PHYSICAL(vertBuf), 15, 0); } -#endif /** * Appends to the enfvx display list a command setting the appropriate texture diff --git a/src/game/envfx_snow.c b/src/game/envfx_snow.c index 4d3c223..8d7ec2e 100644 --- a/src/game/envfx_snow.c +++ b/src/game/envfx_snow.c @@ -21,7 +21,7 @@ * implementation for flowers (unused), lava bubbles and jetstream bubbles * can be found. * The main entry point for envfx is at the bottom of this file, which is - * called from geo_enfvx_main in level_geo.c + * called from geo_envfx_main in level_geo.c */ // Might be duplicate @@ -340,14 +340,15 @@ void rotate_triangle_vertices(Vec3s vertex1, Vec3s vertex2, Vec3s vertex3, s16 p * 'index' in the buffer. The 3 input vertices represent the roated triangle * around (0,0,0) that will be translated to snowflake positions to draw the * snowflake image. + * + * TODO: (Scrub C) */ -#if defined(VERSION_EU) && !defined(NON_MATCHING) -void append_snowflake_vertex_buffer(Gfx *gfx, s32 index, Vec3s vertex1, Vec3s vertex2, Vec3s vertex3); -GLOBAL_ASM("asm/non_matchings/eu/append_snowflake_vertex_buffer.s") -#else void append_snowflake_vertex_buffer(Gfx *gfx, s32 index, Vec3s vertex1, Vec3s vertex2, Vec3s vertex3) { s32 i = 0; Vtx *vertBuf = (Vtx *) alloc_display_list(15 * sizeof(Vtx)); +#ifdef VERSION_EU + Vtx *p; +#endif if (vertBuf == NULL) { return; @@ -355,24 +356,47 @@ void append_snowflake_vertex_buffer(Gfx *gfx, s32 index, Vec3s vertex1, Vec3s ve for (i = 0; i < 15; i += 3) { vertBuf[i] = gSnowTempVtx[0]; +#ifdef VERSION_EU + p = vertBuf; + p += i; + p[0].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex1[0]; + p[0].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex1[1]; + p[0].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex1[2]; +#else vertBuf[i].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex1[0]; vertBuf[i].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex1[1]; vertBuf[i].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex1[2]; +#endif vertBuf[i + 1] = gSnowTempVtx[1]; +#ifdef VERSION_EU + p = vertBuf; + p += i; + p[1].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex2[0]; + p[1].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex2[1]; + p[1].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex2[2]; +#else vertBuf[i + 1].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex2[0]; vertBuf[i + 1].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex2[1]; vertBuf[i + 1].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex2[2]; +#endif vertBuf[i + 2] = gSnowTempVtx[2]; +#ifdef VERSION_EU + p = vertBuf; + p += i; + p[2].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex3[0]; + p[2].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex3[1]; + p[2].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex3[2]; +#else vertBuf[i + 2].v.ob[0] = gEnvFxBuffer[index + i / 3].xPos + vertex3[0]; vertBuf[i + 2].v.ob[1] = gEnvFxBuffer[index + i / 3].yPos + vertex3[1]; vertBuf[i + 2].v.ob[2] = gEnvFxBuffer[index + i / 3].zPos + vertex3[2]; +#endif } gSPVertex(gfx, VIRTUAL_TO_PHYSICAL(vertBuf), 15, 0); } -#endif /** * Updates positions of snow particles and returns a pointer to a display list diff --git a/src/game/game.c b/src/game/game.c index a80a10c..ca9af90 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -305,12 +305,12 @@ void thread5_game_loop(UNUSED void *arg) { play_music(2, SEQUENCE_ARGS(0, SEQ_SOUND_PLAYER), 0); set_sound_mode(save_file_get_sound_mode()); - func_80247ED8(); + rendering_init(); while (1) { // if the reset timer is active, run the process to reset the game. if (gResetTimer) { - func_80247D84(); + draw_reset_bars(); continue; } profiler_log_thread5_time(THREAD5_START); @@ -322,7 +322,7 @@ void thread5_game_loop(UNUSED void *arg) { } audio_game_loop_tick(); - func_80247FAC(); + config_gfx_pool(); read_controller_inputs(); addr = level_script_execute(addr); display_and_vsync(); diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 1b6cd96..c55d9d7 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -35,7 +35,7 @@ u16 gDialogColorFadeTimer; s8 gLastDialogLineNum; s32 gDialogVariable; u16 gDialogTextAlpha; -#ifdef VERSION_EU +#if defined(VERSION_EU) s16 gDialogX; // D_8032F69A s16 gDialogY; // D_8032F69C #endif @@ -317,7 +317,7 @@ void render_uppercase_diacritic(s16 *xPos, s16 *yPos, u8 letter, u8 diacritic) { } #endif // VERSION_EU -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) struct MultiTextEntry { u8 length; u8 str[4]; @@ -357,7 +357,7 @@ void render_multi_text_string(s16 *xPos, s16 *yPos, s8 multiTextID) // EU: 802AD } #endif -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define MAX_STRING_WIDTH 18 #else #define MAX_STRING_WIDTH 16 @@ -448,7 +448,7 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); break; #endif -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) case DIALOG_CHAR_SLASH: #ifdef VERSION_US create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * 2), 0.0f, 0.0f); @@ -781,7 +781,7 @@ s16 get_str_x_pos_from_center(s16 centerPos, u8 *str, UNUSED f32 scale) { } #endif -#if defined(VERSION_JP) || defined(VERSION_EU) +#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) s16 get_str_x_pos_from_center_scale(s16 centerPos, u8 *str, f32 scale) { s16 strPos = 0; f32 charsWidth = 0.0f; @@ -1061,7 +1061,7 @@ void handle_dialog_scroll_page_state(s8 lineNum, s8 totalLines, s8 *pageState, s xMatrix[0] = 1; } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) void adjust_pos_and_print_period_char(s8 *xMatrix, s16 *linePos) { if (linePos[0] != 0) { create_dl_translation_matrix(MENU_MTX_NOPUSH, xMatrix[0] * 10, 0, 0); @@ -1136,7 +1136,7 @@ void render_star_count_dialog_text(s8 *xMatrix, s16 *linePos) #endif } -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) #ifdef VERSION_EU void render_multi_text_string_lines(s8 multiTextId, s8 lineNum, s8 linesPerBox, UNUSED s16 linePos, s8 lowerBound, struct DialogEntry *dialog) #else @@ -1193,18 +1193,16 @@ u32 ensure_nonnegative(s16 value) { return value; } -#if defined(VERSION_EU) && !defined(NON_MATCHING) -// TODO: EU is not quite matching -void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 lowerBound); -GLOBAL_ASM("asm/non_matchings/eu/handle_dialog_text_and_pages.s") -#else -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog) #else void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 lowerBound) #endif { UNUSED s32 pad[2]; +#ifdef VERSION_EU + s16 startY = 14; +#endif u8 strChar; @@ -1236,10 +1234,7 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l strIdx = gDialogTextPos; #ifdef VERSION_EU gDialogX = 0; - - // If this is turned into "gDialogY2 = 14;" with a symbol gDialogY2 that - // alises gDialogY the code matches... - gDialogY = 14; + gDialogY = startY; #endif if (gDialogBoxState == DIALOG_STATE_HORIZONTAL) { @@ -1342,7 +1337,7 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l #endif break; -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) case DIALOG_CHAR_PERIOD: adjust_pos_and_print_period_char(&xMatrix, &linePos); break; @@ -1386,7 +1381,7 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l break; #endif default: // any other character -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) if (linePos != 0) { create_dl_translation_matrix(MENU_MTX_NOPUSH, xMatrix * 10, 0, 0); } @@ -1463,7 +1458,6 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l gLastDialogLineNum = lineNum; } -#endif #ifdef VERSION_JP #define X_VAL4_1 50 @@ -1503,7 +1497,7 @@ void render_dialog_triangle_choice(void) { #define Y_VAL5_1 -16 #define Y_VAL5_2 5 #define X_Y_VAL6 0.8f -#elif defined(VERSION_JP) +#elif defined(VERSION_JP) || defined(VERSION_SH) #define X_VAL5 123.0f #define Y_VAL5_1 -20 #define Y_VAL5_2 2 @@ -1735,7 +1729,7 @@ void render_dialog_entries(void) { gDialogBoxState = DIALOG_STATE_VERTICAL; gDialogLineNum = 1; } -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) lowerBound = 1; #endif break; @@ -1752,7 +1746,7 @@ void render_dialog_entries(void) { play_sound(SOUND_MENU_MESSAGE_NEXT_PAGE, gDefaultSoundArgs); } } -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) lowerBound = 1; #endif break; @@ -1764,7 +1758,7 @@ void render_dialog_entries(void) { gDialogBoxState = DIALOG_STATE_VERTICAL; gDialogScrollOffsetY = 0; } -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) lowerBound = (gDialogScrollOffsetY / 16) + 1; #endif break; @@ -1791,7 +1785,7 @@ void render_dialog_entries(void) { gLastDialogPageStrPos = 0; gDialogResponse = 0; } -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) lowerBound = 1; #endif break; @@ -1808,7 +1802,7 @@ void render_dialog_entries(void) { ensure_nonnegative(DIAG_VAL3 + dialog->leftOffset), ensure_nonnegative(240 + ((dialog->linesPerBox * 80) / DIAG_VAL4) - dialog->width)); #endif -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) handle_dialog_text_and_pages(0, dialog); #else handle_dialog_text_and_pages(0, dialog, lowerBound); @@ -1940,10 +1934,14 @@ void do_cutscene_handler(void) { print_generic_string(x, 240 - gCutsceneMsgYOffset, gEndCutsceneStringsDe[gCutsceneMsgIndex]); break; } +#else +#if defined(VERSION_SH) + // get the x coordinate of where the cutscene string starts. + x = get_str_x_pos_from_center_scale(gCutsceneMsgXOffset, gEndCutsceneStringsEn[gCutsceneMsgIndex], 10.0f); #else // get the x coordinate of where the cutscene string starts. x = get_str_x_pos_from_center(gCutsceneMsgXOffset, gEndCutsceneStringsEn[gCutsceneMsgIndex], 10.0f); - +#endif print_generic_string(x, 240 - gCutsceneMsgYOffset, gEndCutsceneStringsEn[gCutsceneMsgIndex]); #endif @@ -2897,7 +2895,7 @@ void render_course_complete_lvl_info_and_hud_str(void) { gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define TXT_SAVEOPTIONS_X x + 10 #elif defined(VERSION_US) #define TXT_SAVEOPTIONS_X x + 12 diff --git a/src/game/interaction.c b/src/game/interaction.c index 94d539b..c495e61 100644 --- a/src/game/interaction.c +++ b/src/game/interaction.c @@ -20,24 +20,24 @@ #include "dialog_ids.h" #include "course_table.h" -#define INT_GROUND_POUND_OR_TWIRL (1 << 0) // 0x00000001 -#define INT_PUNCH (1 << 1) // 0x00000002 -#define INT_KICK (1 << 2) // 0x00000004 -#define INT_TRIP (1 << 3) // 0x00000008 -#define INT_SLIDE_KICK (1 << 4) // 0x00000010 -#define INT_FAST_ATTACK_OR_SHELL (1 << 5) // 0x00000020 -#define INT_HIT_FROM_ABOVE (1 << 6) // 0x00000040 -#define INT_HIT_FROM_BELOW (1 << 7) // 0x00000080 +#define INT_GROUND_POUND_OR_TWIRL (1 << 0) // 0x01 +#define INT_PUNCH (1 << 1) // 0x02 +#define INT_KICK (1 << 2) // 0x04 +#define INT_TRIP (1 << 3) // 0x08 +#define INT_SLIDE_KICK (1 << 4) // 0x10 +#define INT_FAST_ATTACK_OR_SHELL (1 << 5) // 0x20 +#define INT_HIT_FROM_ABOVE (1 << 6) // 0x40 +#define INT_HIT_FROM_BELOW (1 << 7) // 0x80 -#define INT_ATTACK_NOT_FROM_BELOW \ - (INT_GROUND_POUND_OR_TWIRL | INT_PUNCH | INT_KICK | INT_TRIP | INT_SLIDE_KICK \ +#define INT_ATTACK_NOT_FROM_BELOW \ + (INT_GROUND_POUND_OR_TWIRL | INT_PUNCH | INT_KICK | INT_TRIP | INT_SLIDE_KICK \ | INT_FAST_ATTACK_OR_SHELL | INT_HIT_FROM_ABOVE) -#define INT_ANY_ATTACK \ - (INT_GROUND_POUND_OR_TWIRL | INT_PUNCH | INT_KICK | INT_TRIP | INT_SLIDE_KICK \ +#define INT_ANY_ATTACK \ + (INT_GROUND_POUND_OR_TWIRL | INT_PUNCH | INT_KICK | INT_TRIP | INT_SLIDE_KICK \ | INT_FAST_ATTACK_OR_SHELL | INT_HIT_FROM_ABOVE | INT_HIT_FROM_BELOW) -#define INT_ATTACK_MASK_UNKNOWN_8F \ +#define INT_ATTACK_NOT_WEAK_FROM_ABOVE \ (INT_GROUND_POUND_OR_TWIRL | INT_PUNCH | INT_KICK | INT_TRIP | INT_HIT_FROM_BELOW) u8 sDelayInvincTimer; @@ -54,7 +54,7 @@ u32 interact_cannon_base(struct MarioState *, u32, struct Object *); u32 interact_igloo_barrier(struct MarioState *, u32, struct Object *); u32 interact_tornado(struct MarioState *, u32, struct Object *); u32 interact_whirlpool(struct MarioState *, u32, struct Object *); -u32 interact_wind(struct MarioState *, u32, struct Object *); +u32 interact_strong_wind(struct MarioState *, u32, struct Object *); u32 interact_flame(struct MarioState *, u32, struct Object *); u32 interact_snufit_bullet(struct MarioState *, u32, struct Object *); u32 interact_clam_or_bubba(struct MarioState *, u32, struct Object *); @@ -79,55 +79,58 @@ struct InteractionHandler { }; static struct InteractionHandler sInteractionHandlers[] = { - { INTERACT_COIN, interact_coin }, - { INTERACT_WATER_RING, interact_water_ring }, - { INTERACT_STAR_OR_KEY, interact_star_or_key }, - { INTERACT_BBH_ENTRANCE, interact_bbh_entrance }, - { INTERACT_WARP, interact_warp }, - { INTERACT_WARP_DOOR, interact_warp_door }, - { INTERACT_DOOR, interact_door }, - { INTERACT_CANNON_BASE, interact_cannon_base }, - { INTERACT_IGLOO_BARRIER, interact_igloo_barrier }, - { INTERACT_TORNADO, interact_tornado }, - { INTERACT_WHIRLPOOL, interact_whirlpool }, - { INTERACT_WIND, interact_wind }, - { INTERACT_FLAME, interact_flame }, - { INTERACT_SNUFIT_BULLET, interact_snufit_bullet }, - { INTERACT_CLAM_OR_BUBBA, interact_clam_or_bubba }, - { INTERACT_BULLY, interact_bully }, - { INTERACT_SHOCK, interact_shock }, - { INTERACT_TRAP_TURN, interact_bounce_top }, - { INTERACT_MR_BLIZZARD, interact_mr_blizzard }, + { INTERACT_COIN, interact_coin }, + { INTERACT_WATER_RING, interact_water_ring }, + { INTERACT_STAR_OR_KEY, interact_star_or_key }, + { INTERACT_BBH_ENTRANCE, interact_bbh_entrance }, + { INTERACT_WARP, interact_warp }, + { INTERACT_WARP_DOOR, interact_warp_door }, + { INTERACT_DOOR, interact_door }, + { INTERACT_CANNON_BASE, interact_cannon_base }, + { INTERACT_IGLOO_BARRIER, interact_igloo_barrier }, + { INTERACT_TORNADO, interact_tornado }, + { INTERACT_WHIRLPOOL, interact_whirlpool }, + { INTERACT_STRONG_WIND, interact_strong_wind }, + { INTERACT_FLAME, interact_flame }, + { INTERACT_SNUFIT_BULLET, interact_snufit_bullet }, + { INTERACT_CLAM_OR_BUBBA, interact_clam_or_bubba }, + { INTERACT_BULLY, interact_bully }, + { INTERACT_SHOCK, interact_shock }, + { INTERACT_TRAP_TURN, interact_bounce_top }, + { INTERACT_MR_BLIZZARD, interact_mr_blizzard }, { INTERACT_HIT_FROM_BELOW, interact_hit_from_below }, - { INTERACT_BOUNCE_TOP, interact_bounce_top }, - { INTERACT_DAMAGE, interact_damage }, - { INTERACT_POLE, interact_pole }, - { INTERACT_HOOT, interact_hoot }, - { INTERACT_BREAKABLE, interact_breakable }, - { INTERACT_KOOPA, interact_bounce_top }, - { INTERACT_KOOPA_SHELL, interact_koopa_shell }, - { INTERACT_UNKNOWN_08, interact_unknown_08 }, - { INTERACT_CAP, interact_cap }, - { INTERACT_GRABBABLE, interact_grabbable }, - { INTERACT_TEXT, interact_text }, + { INTERACT_BOUNCE_TOP, interact_bounce_top }, + { INTERACT_DAMAGE, interact_damage }, + { INTERACT_POLE, interact_pole }, + { INTERACT_HOOT, interact_hoot }, + { INTERACT_BREAKABLE, interact_breakable }, + { INTERACT_KOOPA, interact_bounce_top }, + { INTERACT_KOOPA_SHELL, interact_koopa_shell }, + { INTERACT_UNKNOWN_08, interact_unknown_08 }, + { INTERACT_CAP, interact_cap }, + { INTERACT_GRABBABLE, interact_grabbable }, + { INTERACT_TEXT, interact_text }, }; static u32 sForwardKnockbackActions[][3] = { { ACT_SOFT_FORWARD_GROUND_KB, ACT_FORWARD_GROUND_KB, ACT_HARD_FORWARD_GROUND_KB }, - { ACT_FORWARD_AIR_KB, ACT_FORWARD_AIR_KB, ACT_HARD_FORWARD_AIR_KB }, - { ACT_FORWARD_WATER_KB, ACT_FORWARD_WATER_KB, ACT_FORWARD_WATER_KB }, + { ACT_FORWARD_AIR_KB, ACT_FORWARD_AIR_KB, ACT_HARD_FORWARD_AIR_KB }, + { ACT_FORWARD_WATER_KB, ACT_FORWARD_WATER_KB, ACT_FORWARD_WATER_KB }, }; static u32 sBackwardKnockbackActions[][3] = { { ACT_SOFT_BACKWARD_GROUND_KB, ACT_BACKWARD_GROUND_KB, ACT_HARD_BACKWARD_GROUND_KB }, - { ACT_BACKWARD_AIR_KB, ACT_BACKWARD_AIR_KB, ACT_HARD_BACKWARD_AIR_KB }, - { ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB }, + { ACT_BACKWARD_AIR_KB, ACT_BACKWARD_AIR_KB, ACT_HARD_BACKWARD_AIR_KB }, + { ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB, ACT_BACKWARD_WATER_KB }, }; static u8 sDisplayingDoorText = FALSE; static u8 sJustTeleported = FALSE; static u8 sPssSlideStarted = FALSE; +/** + * Returns the type of hat Mario is wearing. + */ u32 get_mario_cap_flag(struct Object *capObject) { void *script = virtual_to_segmented(0x13, capObject->behavior); @@ -143,7 +146,10 @@ u32 get_mario_cap_flag(struct Object *capObject) { return 0; } - +/** + * Returns true if the passed in object has a moving angle yaw + * in the angular range given towards Mario. + */ u32 object_facing_mario(struct MarioState *m, struct Object *o, s16 angleRange) { f32 dx = m->pos[0] - o->oPosX; f32 dz = m->pos[2] - o->oPosZ; @@ -158,32 +164,39 @@ u32 object_facing_mario(struct MarioState *m, struct Object *o, s16 angleRange) return FALSE; } -s16 mario_angle_to_object(struct MarioState *m, struct Object *o) { +s16 mario_obj_angle_to_object(struct MarioState *m, struct Object *o) { f32 dx = o->oPosX - m->pos[0]; f32 dz = o->oPosZ - m->pos[2]; return atan2s(dz, dx); } +/** + * Determines Mario's interaction with a given object depending on their proximity, + * action, speed, and position. + */ u32 determine_interaction(struct MarioState *m, struct Object *o) { u32 interaction = 0; u32 action = m->action; if (action & ACT_FLAG_ATTACKING) { if (action == ACT_PUNCHING || action == ACT_MOVE_PUNCHING || action == ACT_JUMP_KICK) { - s16 dYawToObject = mario_angle_to_object(m, o) - m->faceAngle[1]; + s16 dYawToObject = mario_obj_angle_to_object(m, o) - m->faceAngle[1]; if (m->flags & MARIO_PUNCHING) { + // 120 degrees total, or 60 each way if (-0x2AAA <= dYawToObject && dYawToObject <= 0x2AAA) { interaction = INT_PUNCH; } } if (m->flags & MARIO_KICKING) { + // 120 degrees total, or 60 each way if (-0x2AAA <= dYawToObject && dYawToObject <= 0x2AAA) { interaction = INT_KICK; } } if (m->flags & MARIO_TRIPPING) { + // 180 degrees total, or 90 each way if (-0x4000 <= dYawToObject && dYawToObject <= 0x4000) { interaction = INT_TRIP; } @@ -193,6 +206,10 @@ u32 determine_interaction(struct MarioState *m, struct Object *o) { interaction = INT_GROUND_POUND_OR_TWIRL; } } else if (action == ACT_GROUND_POUND_LAND || action == ACT_TWIRL_LAND) { + // Neither ground pounding nor twirling change Mario's vertical speed on landing., + // so the speed check is nearly always true (perhaps not if you land while going upwards?) + // Additionally, actionState it set on each first thing in their action, so this is + // only true prior to the very first frame (i.e. active 1 frame prior to it run). if (m->vel[1] < 0.0f && m->actionState == 0) { interaction = INT_GROUND_POUND_OR_TWIRL; } @@ -205,6 +222,9 @@ u32 determine_interaction(struct MarioState *m, struct Object *o) { } } + // Prior to this, the interaction type could be overwritten. This requires, however, + // that the interaction not be set prior. This specifically overrides turning a ground + // pound into just a bounce. if (interaction == 0 && (action & ACT_FLAG_AIR)) { if (m->vel[1] < 0.0f) { if (m->pos[1] > o->oPosY) { @@ -220,6 +240,9 @@ u32 determine_interaction(struct MarioState *m, struct Object *o) { return interaction; } +/** + * Sets the interaction types for INT_STATUS_INTERACTED, INT_STATUS_WAS_ATTACKED + */ u32 attack_object(struct Object *o, s32 interaction) { u32 attackType = 0; @@ -261,7 +284,7 @@ void mario_stop_riding_object(struct MarioState *m) { void mario_grab_used_object(struct MarioState *m) { if (m->heldObj == NULL) { m->heldObj = m->usedObj; - set_object_held_state(m->heldObj, bhvCarrySomething3); + obj_set_held_state(m->heldObj, bhvCarrySomething3); } } @@ -271,7 +294,7 @@ void mario_drop_held_object(struct MarioState *m) { stop_shell_music(); } - set_object_held_state(m->heldObj, bhvCarrySomething4); + obj_set_held_state(m->heldObj, bhvCarrySomething4); // ! When dropping an object instead of throwing it, it will be put at Mario's // y-positon instead of the HOLP's y-position. This fact is often exploited when @@ -292,7 +315,7 @@ void mario_throw_held_object(struct MarioState *m) { stop_shell_music(); } - set_object_held_state(m->heldObj, bhvCarrySomething5); + obj_set_held_state(m->heldObj, bhvCarrySomething5); m->heldObj->oPosX = m->marioBodyState->heldObjLastPosition[0] + 32.0f * sins(m->faceAngle[1]); m->heldObj->oPosY = m->marioBodyState->heldObjLastPosition[1]; @@ -403,7 +426,7 @@ u32 mario_check_object_grab(struct MarioState *m) { result = set_mario_action(m, ACT_PICKING_UP_BOWSER, 0); } } else { - s16 facingDYaw = mario_angle_to_object(m, m->interactObj) - m->faceAngle[1]; + s16 facingDYaw = mario_obj_angle_to_object(m, m->interactObj) - m->faceAngle[1]; if (facingDYaw >= -0x2AAA && facingDYaw <= 0x2AAA) { m->usedObj = m->interactObj; @@ -501,7 +524,7 @@ void hit_object_from_below(struct MarioState *m, UNUSED struct Object *o) { static u32 unused_determine_knockback_action(struct MarioState *m) { u32 bonkAction; - s16 angleToObject = mario_angle_to_object(m, m->interactObj); + s16 angleToObject = mario_obj_angle_to_object(m, m->interactObj); s16 facingDYaw = angleToObject - m->faceAngle[1]; if (m->forwardVel < 16.0f) { @@ -535,7 +558,7 @@ u32 determine_knockback_action(struct MarioState *m, UNUSED s32 arg) { s16 terrainIndex = 0; // 1 = air, 2 = water, 0 = default s16 strengthIndex = 0; - s16 angleToObject = mario_angle_to_object(m, m->interactObj); + s16 angleToObject = mario_obj_angle_to_object(m, m->interactObj); s16 facingDYaw = angleToObject - m->faceAngle[1]; s16 remainingHealth = m->health - 0x40 * m->hurtCounter; @@ -633,7 +656,7 @@ void bounce_back_from_attack(struct MarioState *m, u32 interaction) { } set_camera_shake_from_hit(SHAKE_ATTACK); - m->particleFlags |= 0x00040000; + m->particleFlags |= PARTICLE_18; } if (interaction & (INT_PUNCH | INT_KICK | INT_TRIP | INT_FAST_ATTACK_OR_SHELL)) { @@ -641,7 +664,7 @@ void bounce_back_from_attack(struct MarioState *m, u32 interaction) { } } -u32 func_8024D664(struct MarioState *m, struct Object *o) { +u32 should_push_or_pull_door(struct MarioState *m, struct Object *o) { f32 dx = o->oPosX - m->pos[0]; f32 dz = o->oPosZ - m->pos[2]; @@ -776,7 +799,7 @@ u32 interact_star_or_key(struct MarioState *m, UNUSED u32 interactType, struct O if (!noExit) { drop_queued_background_music(); - func_8024924C(126); + fadeout_level_music(126); } play_sound(SOUND_MENU_STAR_SOUND, m->marioObj->header.gfx.cameraToObject); @@ -888,7 +911,7 @@ u32 interact_warp_door(struct MarioState *m, UNUSED u32 interactType, struct Obj } if (m->action == ACT_WALKING || m->action == ACT_DECELERATING) { - actionArg = func_8024D664(m, o) + 0x00000004; + actionArg = should_push_or_pull_door(m, o) + 0x00000004; if (doorAction == 0) { if (actionArg & 0x00000001) { @@ -953,7 +976,7 @@ u32 interact_door(struct MarioState *m, UNUSED u32 interactType, struct Object * if (m->action == ACT_WALKING || m->action == ACT_DECELERATING) { if (numStars >= requiredNumStars) { - u32 actionArg = func_8024D664(m, o); + u32 actionArg = should_push_or_pull_door(m, o); u32 enterDoorAction; u32 doorSaveFileFlag; @@ -1008,7 +1031,7 @@ u32 interact_door(struct MarioState *m, UNUSED u32 interactType, struct Object * } else if (m->action == ACT_IDLE && sDisplayingDoorText == TRUE && requiredNumStars == 70) { m->interactObj = o; m->usedObj = o; - return set_mario_action(m, ACT_ENTERING_STAR_DOOR, func_8024D664(m, o)); + return set_mario_action(m, ACT_ENTERING_STAR_DOOR, should_push_or_pull_door(m, o)); } return FALSE; @@ -1078,7 +1101,7 @@ u32 interact_whirlpool(struct MarioState *m, UNUSED u32 interactType, struct Obj return FALSE; } -u32 interact_wind(struct MarioState *m, UNUSED u32 interactType, struct Object *o) { +u32 interact_strong_wind(struct MarioState *m, UNUSED u32 interactType, struct Object *o) { UNUSED struct Object *marioObj = m->marioObj; if (m->action != ACT_GETTING_BLOWN) { @@ -1233,7 +1256,7 @@ u32 interact_shock(struct MarioState *m, UNUSED u32 interactType, struct Object return FALSE; } -static u32 func_8024EF8C(UNUSED struct MarioState *m, UNUSED u32 interactType, struct Object *o) { +static u32 interact_stub(UNUSED struct MarioState *m, UNUSED u32 interactType, struct Object *o) { if (!(o->oInteractionSubtype & INT_SUBTYPE_DELAY_INVINCIBILITY)) { sDelayInvincTimer = TRUE; } @@ -1356,7 +1379,7 @@ u32 interact_damage(struct MarioState *m, UNUSED u32 interactType, struct Object u32 interact_breakable(struct MarioState *m, UNUSED u32 interactType, struct Object *o) { u32 interaction = determine_interaction(m, o); - if (interaction & INT_ATTACK_MASK_UNKNOWN_8F) { + if (interaction & INT_ATTACK_NOT_WEAK_FROM_ABOVE) { attack_object(o, interaction); bounce_back_from_attack(m, interaction); @@ -1560,7 +1583,7 @@ u32 interact_grabbable(struct MarioState *m, u32 interactType, struct Object *o) return FALSE; } -u32 func_8024FC94(struct MarioState *m, u32 arg) { +u32 mario_can_talk(struct MarioState *m, u32 arg) { s16 val6; if ((m->action & ACT_FLAG_IDLE) != 0x00000000) { @@ -1594,8 +1617,8 @@ u32 func_8024FC94(struct MarioState *m, u32 arg) { #define SIGN_RANGE 0x4000 #endif -u32 func_8024FD2C(struct MarioState *m, struct Object *o) { - if ((m->input & READ_MASK) && func_8024FC94(m, 0) && object_facing_mario(m, o, SIGN_RANGE)) { +u32 check_read_sign(struct MarioState *m, struct Object *o) { + if ((m->input & READ_MASK) && mario_can_talk(m, 0) && object_facing_mario(m, o, SIGN_RANGE)) { s16 facingDYaw = (s16)(o->oMoveAngleYaw + 0x8000) - m->faceAngle[1]; if (facingDYaw >= -SIGN_RANGE && facingDYaw <= SIGN_RANGE) { f32 targetX = o->oPosX + 105.0f * sins(o->oMoveAngleYaw); @@ -1614,9 +1637,9 @@ u32 func_8024FD2C(struct MarioState *m, struct Object *o) { return FALSE; } -u32 func_8024FEC0(struct MarioState *m, struct Object *o) { - if ((m->input & READ_MASK) && func_8024FC94(m, 1)) { - s16 facingDYaw = mario_angle_to_object(m, o) - m->faceAngle[1]; +u32 check_npc_talk(struct MarioState *m, struct Object *o) { + if ((m->input & READ_MASK) && mario_can_talk(m, 1)) { + s16 facingDYaw = mario_obj_angle_to_object(m, o) - m->faceAngle[1]; if (facingDYaw >= -0x4000 && facingDYaw <= 0x4000) { o->oInteractStatus = INT_STATUS_INTERACTED; @@ -1636,9 +1659,9 @@ u32 interact_text(struct MarioState *m, UNUSED u32 interactType, struct Object * u32 interact = FALSE; if (o->oInteractionSubtype & INT_SUBTYPE_SIGN) { - interact = func_8024FD2C(m, o); + interact = check_read_sign(m, o); } else if (o->oInteractionSubtype & INT_SUBTYPE_NPC) { - interact = func_8024FEC0(m, o); + interact = check_npc_talk(m, o); } else { push_mario_out_of_object(m, o, 2.0f); } @@ -1661,11 +1684,11 @@ void check_kick_or_punch_wall(struct MarioState *m) { mario_set_forward_vel(m, -48.0f); play_sound(SOUND_ACTION_HIT_2, m->marioObj->header.gfx.cameraToObject); - m->particleFlags |= 0x00040000; + m->particleFlags |= PARTICLE_18; } else if (m->action & ACT_FLAG_AIR) { mario_set_forward_vel(m, -16.0f); play_sound(SOUND_ACTION_HIT_2, m->marioObj->header.gfx.cameraToObject); - m->particleFlags |= 0x00040000; + m->particleFlags |= PARTICLE_18; } } } @@ -1743,7 +1766,7 @@ void pss_end_slide(struct MarioState *m) { u16 slideTime = level_control_timer(TIMER_CONTROL_STOP); if (slideTime < 630) { m->marioObj->oBehParams = (1 << 24); - create_star(-6358.0f, -4300.0f, 4700.0f); + spawn_default_star(-6358.0f, -4300.0f, 4700.0f); } sPssSlideStarted = FALSE; } diff --git a/src/game/interaction.h b/src/game/interaction.h index 113a5ce..60d327e 100644 --- a/src/game/interaction.h +++ b/src/game/interaction.h @@ -13,7 +13,7 @@ #define INTERACT_KOOPA /* 0x00000080 */ (1 << 7) #define INTERACT_UNKNOWN_08 /* 0x00000100 */ (1 << 8) #define INTERACT_BREAKABLE /* 0x00000200 */ (1 << 9) -#define INTERACT_WIND /* 0x00000400 */ (1 << 10) +#define INTERACT_STRONG_WIND /* 0x00000400 */ (1 << 10) #define INTERACT_WARP_DOOR /* 0x00000800 */ (1 << 11) #define INTERACT_STAR_OR_KEY /* 0x00001000 */ (1 << 12) #define INTERACT_WARP /* 0x00002000 */ (1 << 13) @@ -105,7 +105,7 @@ struct BullyCollisionData { extern u8 D_03009AC8[]; -extern s16 mario_angle_to_object(struct MarioState *, struct Object *); +extern s16 mario_obj_angle_to_object(struct MarioState *, struct Object *); extern void mario_stop_riding_object(struct MarioState *); extern void mario_grab_used_object(struct MarioState *); extern void mario_drop_held_object(struct MarioState *); diff --git a/src/game/level_geo.c b/src/game/level_geo.c index 5a36383..65261c7 100644 --- a/src/game/level_geo.c +++ b/src/game/level_geo.c @@ -13,7 +13,7 @@ * Geo function that generates a displaylist for environment effects such as * snow or jetstream bubbles. */ -Gfx *geo_enfvx_main(s32 callContext, struct GraphNode *node, f32 c[4][4]) { +Gfx *geo_envfx_main(s32 callContext, struct GraphNode *node, f32 c[4][4]) { Vec3s marioPos; Vec3s camFrom; Vec3s camTo; diff --git a/src/game/level_geo.h b/src/game/level_geo.h index 95a5199..f131fa7 100644 --- a/src/game/level_geo.h +++ b/src/game/level_geo.h @@ -8,7 +8,7 @@ struct Struct802761D0 u8 filler4[0x18-0x4]; }; -extern Gfx *geo_enfvx_main(s32 a, struct GraphNode *b, f32 c[4][4]); +extern Gfx *geo_envfx_main(s32 a, struct GraphNode *b, f32 c[4][4]); extern Gfx *geo_skybox_main(s32 a, struct GraphNode *b, UNUSED Mat4 *c); #endif /* _LEVEL_GEO_H */ diff --git a/src/game/level_update.c b/src/game/level_update.c index 8713bbb..ffe4423 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -202,7 +202,7 @@ u16 level_control_timer(s32 timerOp) { return gHudDisplay.timer; } -u32 pressed_paused(void) { +u32 pressed_pause(void) { u32 val4 = get_dialog_id() >= 0; u32 intangible = (gMarioState->action & ACT_FLAG_INTANGIBLE) != 0; @@ -219,28 +219,28 @@ void set_play_mode(s16 playMode) { D_80339ECA = 0; } -void func_8024975C(s32 arg) { +void warp_special(s32 arg) { sCurrPlayMode = PLAY_MODE_CHANGE_LEVEL; D_80339ECA = 0; D_80339EE0 = arg; } -void func_80249788(u32 arg, u32 color) { +void fade_into_special_warp(u32 arg, u32 color) { if (color != 0) { color = 0xFF; } - func_802491FC(190); + fadeout_music(190); play_transition(WARP_TRANSITION_FADE_INTO_COLOR, 0x10, color, color, color); level_set_transition(30, NULL); - func_8024975C(arg); + warp_special(arg); } -void nop_802497FC(void) { +void stub_level_update_1(void) { } -void func_8024980C(u32 arg) { +void load_level_init_text(u32 arg) { s32 gotAchievement; u32 dialogID = gCurrentArea->dialog[arg]; @@ -272,7 +272,7 @@ void func_8024980C(u32 arg) { } } -void func_8024992C(struct SpawnInfo *spawnInfo, u32 arg1) { +void init_door_warp(struct SpawnInfo *spawnInfo, u32 arg1) { if (arg1 & 0x00000002) { spawnInfo->startAngle[1] += 0x8000; } @@ -377,7 +377,7 @@ void init_mario_after_warp(void) { gPlayerSpawnInfos[0].startAngle[2] = 0; if (marioSpawnType == MARIO_SPAWN_UNKNOWN_01) { - func_8024992C(&gPlayerSpawnInfos[0], sWarpDest.arg); + init_door_warp(&gPlayerSpawnInfos[0], sWarpDest.arg); } if (sWarpDest.type == WARP_TYPE_CHANGE_LEVEL || sWarpDest.type == WARP_TYPE_CHANGE_AREA) { @@ -458,11 +458,11 @@ void init_mario_after_warp(void) { } // used for warps inside one level -void func_8024A02C(void) { +void warp_area(void) { if (sWarpDest.type != WARP_TYPE_NOT_WARPING) { if (sWarpDest.type == WARP_TYPE_CHANGE_AREA) { level_control_timer(TIMER_CONTROL_HIDE); - func_8027AA88(); + unload_mario_area(); load_area(sWarpDest.areaIdx); } @@ -471,7 +471,7 @@ void func_8024A02C(void) { } // used for warps between levels -void func_8024A094(void) { +void warp_level(void) { gCurrLevelNum = sWarpDest.levelNum; level_control_timer(TIMER_CONTROL_HIDE); @@ -480,7 +480,7 @@ void func_8024A094(void) { init_mario_after_warp(); } -void func_8024A0E0(void) { +void warp_credits(void) { s32 marioAction; switch (sWarpDest.nodeId) { @@ -562,7 +562,7 @@ void check_instant_warp(void) { } } -s16 func_8024A48C(s16 arg) { +s16 music_changed_through_warp(s16 arg) { struct ObjectWarpNode *warpNode = area_get_warp_node(arg); s16 levelNum = warpNode->node.destLevel & 0x7F; @@ -679,7 +679,7 @@ void initiate_painting_warp(void) { gMarioState->marioObj->header.gfx.node.flags &= ~0x0001; play_sound(SOUND_MENU_STAR_SOUND, gDefaultSoundArgs); - func_802491FC(398); + fadeout_music(398); } } } @@ -764,7 +764,7 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { case WARP_OP_TELEPORT: sDelayedWarpTimer = 20; sSourceWarpNodeId = (m->usedObj->oBehParams & 0x00FF0000) >> 16; - val04 = !func_8024A48C(sSourceWarpNodeId); + val04 = !music_changed_through_warp(sSourceWarpNodeId); play_transition(WARP_TRANSITION_FADE_INTO_COLOR, 0x14, 0xFF, 0xFF, 0xFF); break; @@ -772,14 +772,14 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { sDelayedWarpTimer = 20; sDelayedWarpArg = m->actionArg; sSourceWarpNodeId = (m->usedObj->oBehParams & 0x00FF0000) >> 16; - val04 = !func_8024A48C(sSourceWarpNodeId); + val04 = !music_changed_through_warp(sSourceWarpNodeId); play_transition(WARP_TRANSITION_FADE_INTO_CIRCLE, 0x14, 0x00, 0x00, 0x00); break; case WARP_OP_WARP_OBJECT: sDelayedWarpTimer = 20; sSourceWarpNodeId = (m->usedObj->oBehParams & 0x00FF0000) >> 16; - val04 = !func_8024A48C(sSourceWarpNodeId); + val04 = !music_changed_through_warp(sSourceWarpNodeId); play_transition(WARP_TRANSITION_FADE_INTO_STAR, 0x14, 0x00, 0x00, 0x00); break; @@ -801,7 +801,7 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { } if (val04 && gCurrDemoInput == NULL) { - func_802491FC((3 * sDelayedWarpTimer / 2) * 8 - 2); + fadeout_music((3 * sDelayedWarpTimer / 2) * 8 - 2); } } @@ -819,27 +819,27 @@ void initiate_delayed_warp(void) { reset_dialog_render_state(); if (gDebugLevelSelect && (sDelayedWarpOp & WARP_OP_TRIGGERS_LEVEL_SELECT)) { - func_8024975C(-9); + warp_special(-9); } else if (gCurrDemoInput != NULL) { if (sDelayedWarpOp == WARP_OP_DEMO_END) { - func_8024975C(-8); + warp_special(-8); } else { - func_8024975C(-2); + warp_special(-2); } } else { switch (sDelayedWarpOp) { case WARP_OP_GAME_OVER: save_file_reload(); - func_8024975C(-3); + warp_special(-3); break; case WARP_OP_CREDITS_END: - func_8024975C(-1); + warp_special(-1); sound_banks_enable(2, 0x03F0); break; case WARP_OP_DEMO_NEXT: - func_8024975C(-2); + warp_special(-2); break; case WARP_OP_CREDITS_START: @@ -965,7 +965,7 @@ s32 play_mode_normal(void) { } } - func_8024A02C(); + warp_area(); check_instant_warp(); if (sTimerRunning && gHudDisplay.timer < 17999) { @@ -989,8 +989,8 @@ s32 play_mode_normal(void) { set_play_mode(PLAY_MODE_CHANGE_LEVEL); } else if (sTransitionTimer != 0) { set_play_mode(PLAY_MODE_CHANGE_AREA); - } else if (pressed_paused()) { - func_80248C28(1); + } else if (pressed_pause()) { + lower_background_noise(1); gCameraMovementFlags |= CAM_MOVE_PAUSE_SCREEN; set_play_mode(PLAY_MODE_PAUSED); } @@ -1003,17 +1003,17 @@ s32 play_mode_paused(void) { if (gPauseScreenMode == 0) { set_menu_mode(RENDER_PAUSE_SCREEN); } else if (gPauseScreenMode == 1) { - func_80248CB8(1); + raise_background_noise(1); gCameraMovementFlags &= ~CAM_MOVE_PAUSE_SCREEN; set_play_mode(PLAY_MODE_NORMAL); } else { // Exit level if (gDebugLevelSelect) { - func_80249788(-9, 1); + fade_into_special_warp(-9, 1); } else { initiate_warp(LEVEL_CASTLE, 1, 0x1F, 0); - func_80249788(0, 0); + fade_into_special_warp(0, 0); gSavedCourseNum = 0; } @@ -1033,7 +1033,7 @@ s32 play_mode_frame_advance(void) { play_mode_normal(); } else if (gPlayer1Controller->buttonPressed & START_BUTTON) { gCameraMovementFlags &= ~CAM_MOVE_PAUSE_SCREEN; - func_80248CB8(1); + raise_background_noise(1); set_play_mode(PLAY_MODE_NORMAL); } else { gCameraMovementFlags |= CAM_MOVE_PAUSE_SCREEN; @@ -1141,8 +1141,8 @@ s32 update_level(void) { } if (changeLevel) { - func_80248C10(); - func_80248D90(); + reset_volume(); + enable_background_sound(); } return changeLevel; @@ -1167,9 +1167,9 @@ s32 init_level(void) { if (sWarpDest.type != WARP_TYPE_NOT_WARPING) { if (sWarpDest.nodeId >= WARP_NODE_CREDITS_MIN) { - func_8024A0E0(); + warp_credits(); } else { - func_8024A094(); + warp_level(); } } else { if (gPlayerSpawnInfos[0].areaIndex >= 0) { diff --git a/src/game/level_update.h b/src/game/level_update.h index 5083463..098c870 100644 --- a/src/game/level_update.h +++ b/src/game/level_update.h @@ -116,8 +116,8 @@ enum HUDDisplayFlag { u16 level_control_timer(s32 timerOp); -void func_80249788(u32 arg, u32 color); -void func_8024980C(u32 arg); +void fade_into_special_warp(u32 arg, u32 color); +void load_level_init_text(u32 arg); s16 level_trigger_warp(struct MarioState *m, s32 warpOp); void level_set_transition(s16 length, void (*updateFunction)(s16 *)); diff --git a/src/game/macro_special_objects.c b/src/game/macro_special_objects.c index fca73cf..6b1b6aa 100644 --- a/src/game/macro_special_objects.c +++ b/src/game/macro_special_objects.c @@ -79,7 +79,7 @@ void spawn_macro_abs_special(u32 model, const BehaviorScript *behavior, s16 x, s newObj->oMacroUnk110 = (f32) unkC; } -static void Unknown802E142C(const BehaviorScript *behavior, s16 a1[]) { +static void spawn_macro_coin_unknown(const BehaviorScript *behavior, s16 a1[]) { struct Object *sp3C; s16 model; diff --git a/src/game/main.c b/src/game/main.c index dd3f8f6..4a56d12 100644 --- a/src/game/main.c +++ b/src/game/main.c @@ -83,7 +83,7 @@ void handle_debug_key_sequences(void) { } } -void Unknown80246170(void) { +void unknown_main_func(void) { // uninitialized OSTime time; u32 b; @@ -98,13 +98,13 @@ void Unknown80246170(void) { #pragma GCC diagnostic pop } -void Dummy802461CC(void) { +void stub_main_1(void) { } -void Dummy802461DC(void) { +void stub_main_2(void) { } -void Dummy802461EC(void) { +void stub_main_3(void) { } void setup_mesg_queues(void) { @@ -121,7 +121,7 @@ void setup_mesg_queues(void) { osSetEventMesg(OS_EVENT_PRENMI, &gIntrMesgQueue, (OSMesg) MESG_NMI_REQUEST); } -void AllocPool(void) { +void alloc_pool(void) { void *start = (void *) SEG_POOL_START; void *end = (void *) SEG_POOL_END; @@ -135,12 +135,19 @@ void create_thread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, osCreateThread(thread, id, entry, arg, sp, pri); } +#ifdef VERSION_SH +extern void func_sh_802F69CC(void); +#endif + void handle_nmi_request(void) { gResetTimer = 1; D_8032C648 = 0; func_80320890(); sound_banks_disable(2, 0x037A); - func_802491FC(90); + fadeout_music(90); +#ifdef VERSION_SH + func_sh_802F69CC(); +#endif } void receive_new_tasks(void) { @@ -204,14 +211,24 @@ void pretend_audio_sptask_done(void) { osSendMesg(&gIntrMesgQueue, (OSMesg) MESG_SP_COMPLETE, OS_MESG_NOBLOCK); } +#ifdef VERSION_SH +extern void func_sh_8024CC7C(void); +#endif + void handle_vblank(void) { UNUSED s32 pad; // needed to pad the stack - Dummy802461EC(); + stub_main_3(); sNumVblanks++; +#ifdef VERSION_SH + if (gResetTimer > 0 && gResetTimer < 100) { + gResetTimer++; + } +#else if (gResetTimer > 0) { gResetTimer++; } +#endif receive_new_tasks(); @@ -238,6 +255,9 @@ void handle_vblank(void) { start_sptask(M_GFXTASK); } } +#ifdef VERSION_SH + func_sh_8024CC7C(); +#endif // Notify the game loop about the vblank. if (gVblankHandler1 != NULL) { @@ -308,7 +328,7 @@ void handle_dp_complete(void) { void thread3_main(UNUSED void *arg) { setup_mesg_queues(); - AllocPool(); + alloc_pool(); load_engine_code_segment(); create_thread(&gSoundThread, 4, thread4_sound, NULL, gThread4Stack + 0x2000, 20); @@ -338,7 +358,7 @@ void thread3_main(UNUSED void *arg) { handle_nmi_request(); break; } - Dummy802461DC(); + stub_main_2(); } } @@ -356,7 +376,7 @@ void set_vblank_handler(s32 index, struct VblankHandler *handler, OSMesgQueue *q } } -void SendMessage(OSMesg *msg) { +void send_sp_task_message(OSMesg *msg) { osWritebackDCacheAll(); osSendMesg(&gSPTaskMesgQueue, msg, OS_MESG_NOBLOCK); } @@ -397,12 +417,12 @@ void turn_off_audio(void) { * Initialize hardware, start main thread, then idle. */ void thread1_idle(UNUSED void *arg) { -#ifdef VERSION_US +#if defined(VERSION_US) || defined(VERSION_SH) s32 sp24 = osTvType; #endif osCreateViManager(OS_PRIORITY_VIMGR); -#ifdef VERSION_US +#if defined(VERSION_US) || defined(VERSION_SH) if (sp24 == TV_TYPE_NTSC) { osViSetMode(&osViModeTable[OS_VI_NTSC_LAN1]); } else { @@ -429,11 +449,11 @@ void thread1_idle(UNUSED void *arg) { } } -void Main(void) { +void main_func(void) { UNUSED u8 pad[64]; // needed to pad the stack osInitialize(); - Dummy802461CC(); + stub_main_1(); create_thread(&gIdleThread, 1, thread1_idle, NULL, gIdleThreadStack + 0x800, 100); osStartThread(&gIdleThread); } diff --git a/src/game/main.h b/src/game/main.h index 6706238..6a1bd49 100644 --- a/src/game/main.h +++ b/src/game/main.h @@ -38,6 +38,6 @@ extern s8 gShowDebugText; extern void set_vblank_handler(s32 a, struct VblankHandler *b, OSMesgQueue *queue, OSMesg *msg); extern void dispatch_audio_sptask(struct SPTask *spTask); extern void send_display_list(struct SPTask *a); -extern void Main(void); +extern void main(void); #endif diff --git a/src/game/mario.c b/src/game/mario.c index 3e18342..9bc36cf 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -64,7 +64,7 @@ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { struct Object *o = m->marioObj; struct Animation *targetAnim = m->animation->targetAnim; - if (func_80278AD4(m->animation, targetAnimID)) { + if (load_patchable_table(m->animation, targetAnimID)) { targetAnim->values = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->values); targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); } @@ -97,7 +97,7 @@ s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) struct Object *o = m->marioObj; struct Animation *targetAnim = m->animation->targetAnim; - if (func_80278AD4(m->animation, targetAnimID)) { + if (load_patchable_table(m->animation, targetAnimID)) { targetAnim->values = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->values); targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); } @@ -278,9 +278,9 @@ void adjust_sound_for_speed(struct MarioState *m) { void play_sound_and_spawn_particles(struct MarioState *m, u32 soundBits, u32 waveParticleType) { if (m->terrainSoundAddend == (SOUND_TERRAIN_WATER << 16)) { if (waveParticleType != 0) { - m->particleFlags |= PARTICLE_12; + m->particleFlags |= PARTICLE_SHALLOW_WATER_SPLASH; } else { - m->particleFlags |= PARTICLE_8; + m->particleFlags |= PARTICLE_SHALLOW_WATER_WAVE; } } else { if (m->terrainSoundAddend == (SOUND_TERRAIN_SAND << 16)) { @@ -722,12 +722,12 @@ void update_mario_sound_and_camera(struct MarioState *m) { s32 camPreset = m->area->camera->mode; if (action == ACT_FIRST_PERSON) { - func_80248CB8(2); + raise_background_noise(2); gCameraMovementFlags &= ~CAM_MOVE_C_UP_MODE; // Go back to the last camera mode set_camera_mode(m->area->camera, -1, 1); } else if (action == ACT_SLEEPING) { - func_80248CB8(2); + raise_background_noise(2); } if (!(action & (ACT_FLAG_SWIMMING | ACT_FLAG_METAL_WATER))) { @@ -1406,7 +1406,7 @@ void update_mario_inputs(struct MarioState *m) { // This function is located near other unused trampoline functions, // perhaps logically grouped here with the timers. - nop_80254E3C(m); + stub_mario_step_1(m); if (m->wallKickTimer > 0) { m->wallKickTimer--; @@ -1738,14 +1738,14 @@ s32 execute_mario_action(UNUSED struct Object *o) { // Both of the wind handling portions play wind audio only in // non-Japanese releases. if (gMarioState->floor->type == SURFACE_HORIZONTAL_WIND) { - func_802ADC20(0, (gMarioState->floor->force << 8)); + spawn_wind_particles(0, (gMarioState->floor->force << 8)); #ifndef VERSION_JP play_sound(SOUND_ENV_WIND2, gMarioState->marioObj->header.gfx.cameraToObject); #endif } if (gMarioState->floor->type == SURFACE_VERTICAL_WIND) { - func_802ADC20(1, 0); + spawn_wind_particles(1, 0); #ifndef VERSION_JP play_sound(SOUND_ENV_WIND2, gMarioState->marioObj->header.gfx.cameraToObject); #endif diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c index 8b8da4e..10da471 100644 --- a/src/game/mario_actions_airborne.c +++ b/src/game/mario_actions_airborne.c @@ -32,7 +32,7 @@ void play_far_fall_sound(struct MarioState *m) { } #ifndef VERSION_JP -void func_u_8026A090(struct MarioState *m) { +void play_knockback_sound(struct MarioState *m) { if (m->actionArg == 0 && (m->forwardVel <= -28.0f || m->forwardVel >= 28.0f)) { play_sound_if_no_flag(m, SOUND_MARIO_DOH, MARIO_MARIO_SOUND_PLAYED); } else { @@ -1089,7 +1089,7 @@ u32 common_air_knockback_step(struct MarioState *m, u32 landAction, u32 hardFall return stepResult; } -s32 func_8026CDFC(struct MarioState *m) { +s32 check_wall_kick(struct MarioState *m) { if ((m->input & INPUT_A_PRESSED) && m->wallKickTimer != 0 && m->prevAction == ACT_AIR_HIT_WALL) { m->faceAngle[1] += 0x8000; return set_mario_action(m, ACT_WALL_KICK_AIR, 0); @@ -1099,12 +1099,12 @@ s32 func_8026CDFC(struct MarioState *m) { } s32 act_backward_air_kb(struct MarioState *m) { - if (func_8026CDFC(m)) { + if (check_wall_kick(m)) { return 1; } #ifndef VERSION_JP - func_u_8026A090(m); + play_knockback_sound(m); #else play_sound_if_no_flag(m, SOUND_MARIO_UH, MARIO_MARIO_SOUND_PLAYED); #endif @@ -1113,12 +1113,12 @@ s32 act_backward_air_kb(struct MarioState *m) { } s32 act_forward_air_kb(struct MarioState *m) { - if (func_8026CDFC(m)) { + if (check_wall_kick(m)) { return 1; } #ifndef VERSION_JP - func_u_8026A090(m); + play_knockback_sound(m); #else play_sound_if_no_flag(m, SOUND_MARIO_UH, MARIO_MARIO_SOUND_PLAYED); #endif @@ -1128,7 +1128,7 @@ s32 act_forward_air_kb(struct MarioState *m) { s32 act_hard_backward_air_kb(struct MarioState *m) { #ifndef VERSION_JP - func_u_8026A090(m); + play_knockback_sound(m); #else play_sound_if_no_flag(m, SOUND_MARIO_UH, MARIO_MARIO_SOUND_PLAYED); #endif @@ -1139,7 +1139,7 @@ s32 act_hard_backward_air_kb(struct MarioState *m) { s32 act_hard_forward_air_kb(struct MarioState *m) { #ifndef VERSION_JP - func_u_8026A090(m); + play_knockback_sound(m); #else play_sound_if_no_flag(m, SOUND_MARIO_UH, MARIO_MARIO_SOUND_PLAYED); #endif @@ -1190,12 +1190,12 @@ s32 act_thrown_forward(struct MarioState *m) { } s32 act_soft_bonk(struct MarioState *m) { - if (func_8026CDFC(m)) { + if (check_wall_kick(m)) { return 1; } #ifndef VERSION_JP - func_u_8026A090(m); + play_knockback_sound(m); #else play_sound_if_no_flag(m, SOUND_MARIO_UH, MARIO_MARIO_SOUND_PLAYED); #endif @@ -1683,7 +1683,7 @@ s32 act_flying(struct MarioState *m) { if (is_anim_at_end(m)) { if (m->actionArg == 2) { - func_8024980C(0); + load_level_init_text(0); m->actionArg = 1; } diff --git a/src/game/mario_actions_automatic.c b/src/game/mario_actions_automatic.c index ea4fd54..d9cc09f 100644 --- a/src/game/mario_actions_automatic.c +++ b/src/game/mario_actions_automatic.c @@ -495,14 +495,14 @@ s32 let_go_of_ledge(struct MarioState *m) { return set_mario_action(m, ACT_SOFT_BONK, 0); } -void func_8025F0DC(struct MarioState *m) { +void climb_up_ledge(struct MarioState *m) { set_mario_animation(m, MARIO_ANIM_IDLE_HEAD_LEFT); m->pos[0] += 14.0f * sins(m->faceAngle[1]); m->pos[2] += 14.0f * coss(m->faceAngle[1]); vec3f_copy(m->marioObj->header.gfx.pos, m->pos); } -void func_8025F188(struct MarioState *m) { +void update_ledge_climb_camera(struct MarioState *m) { f32 sp4; if (m->actionTimer < 14) { @@ -524,7 +524,7 @@ void update_ledge_climb(struct MarioState *m, s32 animation, u32 endAction) { if (is_anim_at_end(m)) { set_mario_action(m, endAction, 0); if (endAction == ACT_IDLE) { - func_8025F0DC(m); + climb_up_ledge(m); } } } @@ -595,7 +595,7 @@ s32 act_ledge_climb_slow(struct MarioState *m) { if (m->actionTimer >= 28 && (m->input & (INPUT_NONZERO_ANALOG | INPUT_A_PRESSED | INPUT_OFF_FLOOR | INPUT_ABOVE_SLIDE))) { - func_8025F0DC(m); + climb_up_ledge(m); return check_common_action_exits(m); } @@ -605,7 +605,7 @@ s32 act_ledge_climb_slow(struct MarioState *m) { update_ledge_climb(m, MARIO_ANIM_SLOW_LEDGE_GRAB, ACT_IDLE); - func_8025F188(m); + update_ledge_climb_camera(m); if (m->marioObj->header.gfx.unk38.animFrame == 17) { m->action = ACT_LEDGE_CLIMB_SLOW_2; } @@ -638,7 +638,7 @@ s32 act_ledge_climb_fast(struct MarioState *m) { if (m->marioObj->header.gfx.unk38.animFrame == 8) { play_mario_landing_sound(m, SOUND_ACTION_TERRAIN_LANDING); } - func_8025F188(m); + update_ledge_climb_camera(m); return FALSE; } diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index 216d96b..5402d33 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -180,9 +180,9 @@ void print_displaying_credits_entry(void) { } } -void BehEndPeachLoop(void) { - set_obj_animation_and_sound_state(sEndPeachAnimation); - if (func_8029F788()) { +void bhv_end_peach_loop(void) { + cur_obj_init_animation_with_sound(sEndPeachAnimation); + if (cur_obj_check_if_near_animation_end()) { // anims: 0-3, 4, 5, 6-8, 9, 10, 11 if (sEndPeachAnimation < 3 || sEndPeachAnimation == 6 || sEndPeachAnimation == 7) { sEndPeachAnimation++; @@ -190,11 +190,11 @@ void BehEndPeachLoop(void) { } } -void BehEndToadLoop(void) { +void bhv_end_toad_loop(void) { s32 toadAnimIndex = (gCurrentObject->oPosX >= 0.0f); - set_obj_animation_and_sound_state(sEndToadAnims[toadAnimIndex]); - if (func_8029F788()) { + cur_obj_init_animation_with_sound(sEndToadAnims[toadAnimIndex]); + if (cur_obj_check_if_near_animation_end()) { // 0-1, 2-3, 4, 5, 6, 7 if (sEndToadAnims[toadAnimIndex] == 0 || sEndToadAnims[toadAnimIndex] == 2) { sEndToadAnims[toadAnimIndex]++; @@ -224,7 +224,7 @@ s32 geo_switch_peach_eyes(s32 run, struct GraphNode *node, UNUSED s32 a2) { } // unused -static void Unknown80256FF8(u16 *a0) { +static void stub_is_textbox_active(u16 *a0) { if (get_dialog_id() == -1) { *a0 = 0; } @@ -264,7 +264,7 @@ void handle_save_menu(struct MarioState *m) { save_file_do_save(gCurrSaveFileNum - 1); if (gSaveOptSelectIndex == SAVE_OPT_SAVE_AND_QUIT) { - func_80249788(-2, 0); // reset game + fade_into_special_warp(-2, 0); // reset game } } @@ -398,7 +398,7 @@ s32 act_reading_npc_dialog(struct MarioState *m) { if (m->actionState < 8) { // turn to NPC - angleToNPC = mario_angle_to_object(m, m->usedObj); + angleToNPC = mario_obj_angle_to_object(m, m->usedObj); m->faceAngle[1] = angleToNPC - approach_s32((angleToNPC - m->faceAngle[1]) << 16 >> 16, 0, 2048, 2048); // turn head to npc @@ -605,7 +605,7 @@ void general_star_dance_handler(struct MarioState *m, s32 isInWater) { switch (++m->actionTimer) { case 1: spawn_object(m->marioObj, MODEL_STAR, bhvCelebrationStar); - func_80248D48(); + disable_background_sound(); if (m->actionArg & 1) { play_course_clear(); } else { @@ -638,7 +638,7 @@ void general_star_dance_handler(struct MarioState *m, s32 isInWater) { m->actionState = 2; } else if (m->actionState == 2 && is_anim_at_end(m)) { disable_time_stop(); - func_80248D90(); + enable_background_sound(); dialogID = get_star_collection_dialog(m); if (dialogID != 0) { // look up for dialog @@ -677,7 +677,7 @@ s32 act_star_dance_water(struct MarioState *m) { s32 act_fall_after_star_grab(struct MarioState *m) { if (m->pos[1] < m->waterLevel - 130) { play_sound(SOUND_ACTION_UNKNOWN430, m->marioObj->header.gfx.cameraToObject); - m->particleFlags |= PARTICLE_6; + m->particleFlags |= PARTICLE_WATER_SPLASH; return set_mario_action(m, ACT_STAR_DANCE_WATER, m->actionArg); } if (perform_air_step(m, 1) == AIR_STEP_LANDED) { @@ -1014,7 +1014,7 @@ s32 act_emerge_from_pipe(struct MarioState *m) { s32 act_spawn_spin_airborne(struct MarioState *m) { // entered water, exit action if (m->pos[1] < m->waterLevel - 100) { - func_8024980C(0); + load_level_init_text(0); return set_water_plunge_action(m); } @@ -1047,7 +1047,7 @@ s32 act_spawn_spin_landing(struct MarioState *m) { stop_and_set_height_to_floor(m); set_mario_animation(m, MARIO_ANIM_GENERAL_LAND); if (is_anim_at_end(m)) { - func_8024980C(0); + load_level_init_text(0); set_mario_action(m, ACT_IDLE, 0); } return FALSE; @@ -1278,7 +1278,7 @@ s32 act_spawn_no_spin_landing(struct MarioState *m) { set_mario_animation(m, MARIO_ANIM_GENERAL_LAND); stop_and_set_height_to_floor(m); if (is_anim_at_end(m)) { - func_8024980C(0); + load_level_init_text(0); set_mario_action(m, ACT_IDLE, 0); } return FALSE; @@ -1739,7 +1739,7 @@ static void intro_cutscene_lower_pipe(struct MarioState *m) { sIntroWarpPipeObj->oPosY -= 5.0f; if (sIntroWarpPipeObj->oPosY <= 50.0f) { - mark_object_for_deletion(sIntroWarpPipeObj); + obj_mark_for_deletion(sIntroWarpPipeObj); advance_cutscene_step(m); } @@ -1973,7 +1973,7 @@ static void generate_yellow_sparkles(s16 x, s16 y, s16 z, f32 radius) { // not sure what this does, returns the height of the floor, but idk about the // other stuff (animation related?) -static f32 func_8025BC14(struct Object *o) { +static f32 end_obj_set_visual_pos(struct Object *o) { struct Surface *surf; Vec3s sp24; f32 sp20; @@ -2018,7 +2018,7 @@ static void end_peach_cutscene_mario_landing(struct MarioState *m) { sEndJumboStarObj = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_STAR, bhvStaticObject, 0, 2528, -1800, 0, 0, 0); - scale_object(sEndJumboStarObj, 3.0); + obj_scale(sEndJumboStarObj, 3.0); advance_cutscene_step(m); } } @@ -2063,7 +2063,7 @@ static void end_peach_cutscene_spawn_peach(struct MarioState *m) { play_transition(WARP_TRANSITION_FADE_FROM_COLOR, 192, 255, 255, 255); } if (m->actionTimer == 40) { - mark_object_for_deletion(sEndJumboStarObj); + obj_mark_for_deletion(sEndJumboStarObj); sEndPeachObj = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_PEACH, bhvEndPeach, 0, 2428, -1300, 0, 0, 0); @@ -2152,7 +2152,7 @@ static void end_peach_cutscene_run_to_peach(struct MarioState *m) { m->pos[1] = find_floor(m->pos[0], m->pos[1], m->pos[2], &surf); set_mario_anim_with_accel(m, MARIO_ANIM_RUNNING, 0x00080000); - func_80263AD4(m, 9, 45); + play_step_sound(m, 9, 45); vec3f_copy(m->marioObj->header.gfx.pos, m->pos); m->particleFlags |= PARTICLE_DUST; @@ -2366,9 +2366,9 @@ static void end_peach_cutscene_star_dance(struct MarioState *m) { static void end_peach_cutscene_dialog_3(struct MarioState *m) { set_mario_animation(m, MARIO_ANIM_FIRST_PERSON); - sEndPeachObj->oPosY = func_8025BC14(sEndPeachObj); - sEndRightToadObj->oPosY = func_8025BC14(sEndRightToadObj); - sEndLeftToadObj->oPosY = func_8025BC14(sEndLeftToadObj); + sEndPeachObj->oPosY = end_obj_set_visual_pos(sEndPeachObj); + sEndRightToadObj->oPosY = end_obj_set_visual_pos(sEndRightToadObj); + sEndLeftToadObj->oPosY = end_obj_set_visual_pos(sEndLeftToadObj); switch (m->actionTimer) { case 1: @@ -2404,7 +2404,7 @@ static void end_peach_cutscene_run_to_castle(struct MarioState *m) { set_mario_animation(m, m->actionState == 0 ? MARIO_ANIM_CREDITS_START_WALK_LOOK_UP : MARIO_ANIM_CREDITS_LOOK_BACK_THEN_RUN); - m->marioObj->header.gfx.pos[1] = func_8025BC14(m->marioObj); + m->marioObj->header.gfx.pos[1] = end_obj_set_visual_pos(m->marioObj); if (m->actionState == 0 && is_anim_past_end(m)) { m->actionState = 1; @@ -2494,7 +2494,7 @@ static s32 act_end_peach_cutscene(struct MarioState *m) { sEndCutsceneVp.vp.vscale[1] = 360; sEndCutsceneVp.vp.vtrans[0] = 640; sEndCutsceneVp.vp.vtrans[1] = 480; - func_8027A220(NULL, &sEndCutsceneVp, 0, 0, 0); + override_viewport_and_clip(NULL, &sEndCutsceneVp, 0, 0, 0); return FALSE; } @@ -2546,7 +2546,7 @@ static s32 act_credits_cutscene(struct MarioState *m) { sEndCutsceneVp.vp.vtrans[1] = (gCurrCreditsEntry->unk02 & 0x20 ? height : -height) * 66 / 100 + 480; - func_8027A220(&sEndCutsceneVp, 0, 0, 0, 0); + override_viewport_and_clip(&sEndCutsceneVp, 0, 0, 0, 0); } if (m->actionTimer == TIMER_CREDITS_PROGRESS) { @@ -2678,7 +2678,7 @@ s32 mario_execute_cutscene_action(struct MarioState *m) { if (!cancel) { if (m->input & INPUT_IN_WATER) { - m->particleFlags |= PARTICLE_7; + m->particleFlags |= PARTICLE_IDLE_WATER_WAVE; } } diff --git a/src/game/mario_actions_cutscene.h b/src/game/mario_actions_cutscene.h index b623d2b..27c0f21 100644 --- a/src/game/mario_actions_cutscene.h +++ b/src/game/mario_actions_cutscene.h @@ -4,8 +4,8 @@ #include "types.h" extern void print_displaying_credits_entry(void); -extern void BehEndPeachLoop(void); -extern void BehEndToadLoop(void); +extern void bhv_end_peach_loop(void); +extern void bhv_end_toad_loop(void); extern s32 geo_switch_peach_eyes(s32 run, struct GraphNode *node, UNUSED s32 a2); extern s32 mario_ready_to_speak(void); extern s32 set_mario_npc_dialog(s32); diff --git a/src/game/mario_actions_moving.c b/src/game/mario_actions_moving.c index 48f4b23..b173eb8 100644 --- a/src/game/mario_actions_moving.c +++ b/src/game/mario_actions_moving.c @@ -60,13 +60,13 @@ struct LandingAction sBackflipLandAction = { Mat4 D_80339F50[2]; -s16 func_80263A50(struct MarioState *m) { +s16 tilt_body_running(struct MarioState *m) { s16 pitch = find_floor_slope(m, 0); pitch = pitch * m->forwardVel / 40.0f; return -pitch; } -void func_80263AD4(struct MarioState *m, s16 frame1, s16 frame2) { +void play_step_sound(struct MarioState *m, s16 frame1, s16 frame2) { if (is_anim_past_frame(m, frame1) || is_anim_past_frame(m, frame2)) { if (m->flags & MARIO_METAL_CAP) { if (m->marioObj->header.gfx.unk38.animID == MARIO_ANIM_TIPTOE) { @@ -84,7 +84,7 @@ void func_80263AD4(struct MarioState *m, s16 frame1, s16 frame2) { } } -void func_80263C14(struct MarioState *m) { +void align_with_floor(struct MarioState *m) { m->pos[1] = m->floorHeight; mtxf_align_terrain_triangle(D_80339F50[m->unk00], m->pos, m->faceAngle[1], 40.0f); m->marioObj->header.gfx.throwMatrix = &D_80339F50[m->unk00]; @@ -514,7 +514,7 @@ s32 begin_braking_action(struct MarioState *m) { return set_mario_action(m, ACT_DECELERATING, 0); } -void func_802652F0(struct MarioState *m) { +void anim_and_audio_for_walk(struct MarioState *m) { s32 val14; struct Object *marioObj = m->marioObj; s32 val0C = TRUE; @@ -530,7 +530,7 @@ void func_802652F0(struct MarioState *m) { if (m->quicksandDepth > 50.0f) { val14 = (s32)(val04 / 4.0f * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_MOVE_IN_QUICKSAND, val14); - func_80263AD4(m, 19, 93); + play_step_sound(m, 19, 93); m->actionTimer = 0; } else { while (val0C) { @@ -544,7 +544,7 @@ void func_802652F0(struct MarioState *m) { val14 = 0x1000; } set_mario_anim_with_accel(m, MARIO_ANIM_START_TIPTOE, val14); - func_80263AD4(m, 7, 22); + play_step_sound(m, 7, 22); if (is_anim_past_frame(m, 23)) { m->actionTimer = 2; } @@ -562,7 +562,7 @@ void func_802652F0(struct MarioState *m) { val14 = 0x1000; } set_mario_anim_with_accel(m, MARIO_ANIM_TIPTOE, val14); - func_80263AD4(m, 14, 72); + play_step_sound(m, 14, 72); val0C = FALSE; } @@ -577,7 +577,7 @@ void func_802652F0(struct MarioState *m) { //! (Speed Crash) If Mario's speed is more than 2^17. val14 = (s32)(val04 / 4.0f * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_WALKING, val14); - func_80263AD4(m, 10, 49); + play_step_sound(m, 10, 49); val0C = FALSE; } @@ -590,8 +590,8 @@ void func_802652F0(struct MarioState *m) { //! (Speed Crash) If Mario's speed is more than 2^17. val14 = (s32)(val04 / 4.0f * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_RUNNING, val14); - func_80263AD4(m, 9, 45); - targetPitch = func_80263A50(m); + play_step_sound(m, 9, 45); + targetPitch = tilt_body_running(m); val0C = FALSE; } @@ -605,7 +605,7 @@ void func_802652F0(struct MarioState *m) { marioObj->header.gfx.angle[0] = marioObj->oMarioWalkingPitch; } -void func_8026570C(struct MarioState *m) { +void anim_and_audio_for_hold_walk(struct MarioState *m) { s32 val0C; s32 val08 = TRUE; f32 val04; @@ -625,7 +625,7 @@ void func_8026570C(struct MarioState *m) { //! (Speed Crash) Crashes if Mario's speed exceeds or equals 2^15. val0C = (s32)(val04 * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_SLOW_WALK_WITH_LIGHT_OBJ, val0C); - func_80263AD4(m, 12, 62); + play_step_sound(m, 12, 62); val08 = FALSE; } @@ -640,7 +640,7 @@ void func_8026570C(struct MarioState *m) { //! (Speed Crash) Crashes if Mario's speed exceeds or equals 2^15. val0C = (s32)(val04 * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_WALK_WITH_LIGHT_OBJ, val0C); - func_80263AD4(m, 12, 62); + play_step_sound(m, 12, 62); val08 = FALSE; } @@ -653,7 +653,7 @@ void func_8026570C(struct MarioState *m) { //! (Speed Crash) Crashes if Mario's speed exceeds or equals 2^16. val0C = (s32)(val04 / 2.0f * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_RUN_WITH_LIGHT_OBJ, val0C); - func_80263AD4(m, 10, 49); + play_step_sound(m, 10, 49); val08 = FALSE; } @@ -662,13 +662,13 @@ void func_8026570C(struct MarioState *m) { } } -void func_80265980(struct MarioState *m) { +void anim_and_audio_for_heavy_walk(struct MarioState *m) { s32 val04 = (s32)(m->intendedMag * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_WALK_WITH_HEAVY_OBJ, val04); - func_80263AD4(m, 26, 79); + play_step_sound(m, 26, 79); } -void func_802659E8(struct MarioState *m, Vec3f startPos) { +void push_or_sidle_wall(struct MarioState *m, Vec3f startPos) { s16 wallAngle; s16 dWallAngle; f32 dx = m->pos[0] - startPos[0]; @@ -689,7 +689,7 @@ void func_802659E8(struct MarioState *m, Vec3f startPos) { if (m->wall == NULL || dWallAngle <= -0x71C8 || dWallAngle >= 0x71C8) { m->flags |= MARIO_UNKNOWN_31; set_mario_animation(m, MARIO_ANIM_PUSHING); - func_80263AD4(m, 6, 18); + play_step_sound(m, 6, 18); } else { if (dWallAngle < 0) { set_mario_anim_with_accel(m, MARIO_ANIM_SIDESTEP_RIGHT, val04); @@ -709,7 +709,7 @@ void func_802659E8(struct MarioState *m, Vec3f startPos) { } } -void func_80265C28(struct MarioState *m, s16 startYaw) { +void tilt_body_walking(struct MarioState *m, s16 startYaw) { struct MarioBodyState *val0C = m->marioBodyState; UNUSED struct Object *marioObj = m->marioObj; s16 animID = m->marioObj->header.gfx.unk38.animID; @@ -747,7 +747,7 @@ void func_80265C28(struct MarioState *m, s16 startYaw) { } } -void func_80265DBC(struct MarioState *m, s16 startYaw) { +void tilt_body_ground_shell(struct MarioState *m, s16 startYaw) { struct MarioBodyState *val0C = m->marioBodyState; struct Object *marioObj = m->marioObj; s16 dYaw = m->faceAngle[1] - startYaw; @@ -825,20 +825,20 @@ s32 act_walking(struct MarioState *m) { break; case GROUND_STEP_NONE: - func_802652F0(m); + anim_and_audio_for_walk(m); if (m->intendedMag - m->forwardVel > 16.0f) { m->particleFlags |= PARTICLE_DUST; } break; case GROUND_STEP_HIT_WALL: - func_802659E8(m, startPos); + push_or_sidle_wall(m, startPos); m->actionTimer = 0; break; } check_ledge_climb_down(m); - func_80265C28(m, startYaw); + tilt_body_walking(m, startYaw); return FALSE; } @@ -922,7 +922,7 @@ s32 act_hold_walking(struct MarioState *m) { break; } - func_8026570C(m); + anim_and_audio_for_hold_walk(m); if (0.4f * m->intendedMag - m->forwardVel > 10.0f) { m->particleFlags |= PARTICLE_DUST; @@ -960,7 +960,7 @@ s32 act_hold_heavy_walking(struct MarioState *m) { break; } - func_80265980(m); + anim_and_audio_for_heavy_walk(m); return FALSE; } @@ -1130,7 +1130,7 @@ s32 act_decelerating(struct MarioState *m) { } set_mario_anim_with_accel(m, MARIO_ANIM_WALKING, val0C); - func_80263AD4(m, 10, 49); + play_step_sound(m, 10, 49); } return FALSE; @@ -1196,7 +1196,7 @@ s32 act_hold_decelerating(struct MarioState *m) { } set_mario_anim_with_accel(m, MARIO_ANIM_WALK_WITH_LIGHT_OBJ, val0C); - func_80263AD4(m, 12, 62); + play_step_sound(m, 12, 62); } return FALSE; @@ -1234,7 +1234,7 @@ s32 act_riding_shell_ground(struct MarioState *m) { break; } - func_80265DBC(m, startYaw); + tilt_body_ground_shell(m, startYaw); if (m->floor->type == SURFACE_BURNING) { play_sound(SOUND_MOVING_RIDING_SHELL_LAVA, m->marioObj->header.gfx.cameraToObject); } else { @@ -1289,13 +1289,13 @@ s32 act_crawling(struct MarioState *m) { //! Possibly unintended missing break case GROUND_STEP_NONE: - func_80263C14(m); + align_with_floor(m); break; } val04 = (s32)(m->intendedMag * 2.0f * 0x10000); set_mario_anim_with_accel(m, MARIO_ANIM_CRAWLING, val04); - func_80263AD4(m, 26, 79); + play_step_sound(m, 26, 79); return FALSE; } @@ -1335,7 +1335,7 @@ s32 act_burning_ground(struct MarioState *m) { } set_mario_anim_with_accel(m, MARIO_ANIM_RUNNING, (s32)(m->forwardVel / 2.0f * 0x10000)); - func_80263AD4(m, 9, 45); + play_step_sound(m, 9, 45); m->particleFlags |= PARTICLE_11; play_sound(SOUND_MOVING_LAVA_BURN, m->marioObj->header.gfx.cameraToObject); @@ -1349,7 +1349,7 @@ s32 act_burning_ground(struct MarioState *m) { return FALSE; } -void func_80267814(struct MarioState *m) { +void tilt_body_butt_slide(struct MarioState *m) { s16 intendedDYaw = m->intendedYaw - m->faceAngle[1]; m->marioBodyState->torsoAngle[0] = (s32)(5461.3335f * m->intendedMag / 32.0f * coss(intendedDYaw)); m->marioBodyState->torsoAngle[2] = (s32)(-(5461.3335f * m->intendedMag / 32.0f * sins(intendedDYaw))); @@ -1373,7 +1373,7 @@ void common_slide_action(struct MarioState *m, u32 endAction, u32 airAction, s32 case GROUND_STEP_NONE: set_mario_animation(m, animation); - func_80263C14(m); + align_with_floor(m); m->particleFlags |= PARTICLE_DUST; break; @@ -1401,7 +1401,7 @@ void common_slide_action(struct MarioState *m, u32 endAction, u32 airAction, s32 m->vel[2] = m->slideVelZ = slideSpeed * coss(m->slideYaw); } - func_80263C14(m); + align_with_floor(m); break; } } @@ -1427,7 +1427,7 @@ s32 common_slide_action_with_jump(struct MarioState *m, u32 stopAction, u32 jump s32 act_butt_slide(struct MarioState *m) { s32 cancel = common_slide_action_with_jump(m, ACT_BUTT_SLIDE_STOP, ACT_JUMP, ACT_BUTT_SLIDE_AIR, MARIO_ANIM_SLIDE); - func_80267814(m); + tilt_body_butt_slide(m); return cancel; } @@ -1440,7 +1440,7 @@ s32 act_hold_butt_slide(struct MarioState *m) { cancel = common_slide_action_with_jump(m, ACT_UNKNOWN_03F, ACT_HOLD_JUMP, ACT_HOLD_BUTT_SLIDE_AIR, MARIO_ANIM_SLIDING_ON_BOTTOM_WITH_LIGHT_OBJ); - func_80267814(m); + tilt_body_butt_slide(m); return cancel; } @@ -2004,7 +2004,7 @@ s32 mario_execute_moving_action(struct MarioState *m) { /* clang-format on */ if (!cancel && (m->input & INPUT_IN_WATER)) { - m->particleFlags |= PARTICLE_10; + m->particleFlags |= PARTICLE_WAVE_TRAIL; m->particleFlags &= ~PARTICLE_DUST; } diff --git a/src/game/mario_actions_moving.h b/src/game/mario_actions_moving.h index 48b3b35..e625af3 100644 --- a/src/game/mario_actions_moving.h +++ b/src/game/mario_actions_moving.h @@ -5,7 +5,7 @@ struct MarioState; -void func_80263AD4(struct MarioState *m, s16 arg1, s16 arg2); +void play_step_sound(struct MarioState *m, s16 arg1, s16 arg2); s32 mario_execute_moving_action(struct MarioState *m); diff --git a/src/game/mario_actions_object.c b/src/game/mario_actions_object.c index a2d4345..ba3e576 100644 --- a/src/game/mario_actions_object.c +++ b/src/game/mario_actions_object.c @@ -461,7 +461,7 @@ s32 mario_execute_object_action(struct MarioState *m) { /* clang-format on */ if (!cancel && (m->input & INPUT_IN_WATER)) { - m->particleFlags |= PARTICLE_7; + m->particleFlags |= PARTICLE_IDLE_WATER_WAVE; } return cancel; diff --git a/src/game/mario_actions_stationary.c b/src/game/mario_actions_stationary.c index 4a550dc..4592b69 100644 --- a/src/game/mario_actions_stationary.c +++ b/src/game/mario_actions_stationary.c @@ -15,7 +15,7 @@ #include "save_file.h" #include "camera.h" -s32 func_802604E0(struct MarioState *m) { +s32 check_common_idle_cancels(struct MarioState *m) { mario_drop_held_object(m); if (m->floor->normal.y < 0.29237169f) { return mario_push_off_steep_floor(m, ACT_FREEFALL, 0); @@ -57,7 +57,7 @@ s32 func_802604E0(struct MarioState *m) { return 0; } -s32 func_802606DC(struct MarioState *m) { +s32 check_common_hold_idle_cancels(struct MarioState *m) { if (m->floor->normal.y < 0.29237169f) { return mario_push_off_steep_floor(m, ACT_HOLD_FREEFALL, 0); } @@ -113,7 +113,7 @@ s32 act_idle(struct MarioState *m) { return set_mario_action(m, ACT_PANTING, 0); } - if (func_802604E0(m)) { + if (check_common_idle_cancels(m)) { return 1; } @@ -171,7 +171,7 @@ s32 act_idle(struct MarioState *m) { return 0; } -void func_80260BC4(struct MarioState *m, u32 actionState, s32 animFrame, u32 sound) { +void play_anim_sound(struct MarioState *m, u32 actionState, s32 animFrame, u32 sound) { if (m->actionState == actionState && m->marioObj->header.gfx.unk38.animFrame == animFrame) { play_sound(sound, m->marioObj->header.gfx.cameraToObject); } @@ -182,7 +182,7 @@ s32 act_start_sleeping(struct MarioState *m) { s32 sp24; #endif - if (func_802604E0(m)) { + if (check_common_idle_cancels(m)) { return 1; } @@ -230,9 +230,9 @@ s32 act_start_sleeping(struct MarioState *m) { break; } - func_80260BC4(m, 1, 41, SOUND_ACTION_PAT_BACK); - func_80260BC4(m, 1, 49, SOUND_ACTION_PAT_BACK); - func_80260BC4(m, 3, 15, m->terrainSoundAddend + SOUND_ACTION_TERRAIN_BODY_HIT_GROUND); + play_anim_sound(m, 1, 41, SOUND_ACTION_PAT_BACK); + play_anim_sound(m, 1, 49, SOUND_ACTION_PAT_BACK); + play_anim_sound(m, 3, 15, m->terrainSoundAddend + SOUND_ACTION_TERRAIN_BODY_HIT_GROUND); if (is_anim_at_end(m)) { m->actionState++; @@ -281,7 +281,7 @@ s32 act_sleeping(struct MarioState *m) { sp24 = set_mario_animation(m, MARIO_ANIM_SLEEP_IDLE); if (sp24 == -1 && !m->actionTimer) { - func_80248C28(2); + lower_background_noise(2); } if (sp24 == 2) { @@ -336,7 +336,7 @@ s32 act_waking_up(struct MarioState *m) { #ifndef VERSION_JP func_803205E8(SOUND_MARIO_SNORING3, m->marioObj->header.gfx.cameraToObject); #endif - func_80248CB8(2); + raise_background_noise(2); } if (m->input & INPUT_UNKNOWN_10) { @@ -420,7 +420,7 @@ s32 act_shivering(struct MarioState *m) { s32 act_coughing(struct MarioState *m) { s32 sp1C; - if (func_802604E0(m)) { + if (check_common_idle_cancels(m)) { return 1; } @@ -454,7 +454,7 @@ s32 act_hold_idle(struct MarioState *m) { return drop_and_set_mario_action(m, ACT_IN_QUICKSAND, 0); } - if (func_802606DC(m)) { + if (check_common_hold_idle_cancels(m)) { return 1; } @@ -516,7 +516,7 @@ s32 act_in_quicksand(struct MarioState *m) { return set_mario_action(m, ACT_IDLE, 0); } - if (func_802604E0(m) != 0) { + if (check_common_idle_cancels(m) != 0) { return 1; } @@ -577,7 +577,7 @@ s32 act_panting(struct MarioState *m) { return set_mario_action(m, ACT_IDLE, 0); } - if (func_802604E0(m)) { + if (check_common_idle_cancels(m)) { return 1; } @@ -604,7 +604,7 @@ s32 act_hold_panting_unused(struct MarioState *m) { return set_mario_action(m, ACT_HOLD_IDLE, 0); } - if (func_802606DC(m) != 0) { + if (check_common_hold_idle_cancels(m) != 0) { return 1; } @@ -614,7 +614,7 @@ s32 act_hold_panting_unused(struct MarioState *m) { return 0; } -void func_80261D70(struct MarioState *m, s32 animID, u32 action) { +void stopping_step(struct MarioState *m, s32 animID, u32 action) { stationary_ground_step(m); set_mario_animation(m, animID); if (is_anim_at_end(m) != 0) { @@ -640,7 +640,7 @@ s32 act_braking_stop(struct MarioState *m) { return check_common_action_exits(m); } - func_80261D70(m, MARIO_ANIM_STOP_SKID, ACT_IDLE); + stopping_step(m, MARIO_ANIM_STOP_SKID, ACT_IDLE); return 0; } @@ -653,7 +653,7 @@ s32 act_butt_slide_stop(struct MarioState *m) { return check_common_action_exits(m); } - func_80261D70(m, MARIO_ANIM_STOP_SLIDE, ACT_IDLE); + stopping_step(m, MARIO_ANIM_STOP_SLIDE, ACT_IDLE); if (m->marioObj->header.gfx.unk38.animFrame == 6) { play_mario_landing_sound(m, SOUND_ACTION_TERRAIN_LANDING); } @@ -661,7 +661,7 @@ s32 act_butt_slide_stop(struct MarioState *m) { return 0; } -s32 func_80261F8C(struct MarioState *m) { +s32 act_unknown_03F(struct MarioState *m) { if (m->marioObj->oInteractStatus & INT_STATUS_MARIO_DROP_OBJECT) { return drop_and_set_mario_action(m, ACT_IDLE, 0); } @@ -678,7 +678,7 @@ s32 func_80261F8C(struct MarioState *m) { return set_mario_action(m, ACT_THROWING, 0); } - func_80261D70(m, MARIO_ANIM_STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ, ACT_HOLD_IDLE); + stopping_step(m, MARIO_ANIM_STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ, ACT_HOLD_IDLE); return 0; } @@ -691,7 +691,7 @@ s32 act_slide_kick_slide_stop(struct MarioState *m) { return drop_and_set_mario_action(m, ACT_FREEFALL, 0); } - func_80261D70(m, MARIO_ANIM_CROUCH_FROM_SLIDE_KICK, ACT_CROUCHING); + stopping_step(m, MARIO_ANIM_CROUCH_FROM_SLIDE_KICK, ACT_CROUCHING); return 0; } @@ -792,7 +792,7 @@ s32 act_stop_crawling(struct MarioState *m) { return 0; } -s32 func_80262574(struct MarioState *m) { +s32 act_unknown_026(struct MarioState *m) { s16 sp1E; f32 sp18; @@ -826,7 +826,7 @@ s32 func_80262574(struct MarioState *m) { return 0; } -s32 func_802627B8(struct MarioState *m, s32 arg1, u32 action) { +s32 landing_step(struct MarioState *m, s32 arg1, u32 action) { stationary_ground_step(m); set_mario_animation(m, arg1); if (is_anim_at_end(m)) { @@ -835,7 +835,7 @@ s32 func_802627B8(struct MarioState *m, s32 arg1, u32 action) { return 0; } -s32 func_80262828(struct MarioState *m, u32 action) { +s32 check_common_landing_cancels(struct MarioState *m, u32 action) { if (m->input & INPUT_UNKNOWN_10) { return set_mario_action(m, ACT_UNKNOWN_026, 0); } @@ -864,48 +864,48 @@ s32 func_80262828(struct MarioState *m, u32 action) { } s32 act_jump_land_stop(struct MarioState *m) { - if (func_80262828(m, 0)) { + if (check_common_landing_cancels(m, 0)) { return 1; } - func_802627B8(m, MARIO_ANIM_LAND_FROM_SINGLE_JUMP, ACT_IDLE); + landing_step(m, MARIO_ANIM_LAND_FROM_SINGLE_JUMP, ACT_IDLE); return 0; } s32 act_double_jump_land_stop(struct MarioState *m) { - if (func_80262828(m, 0)) { + if (check_common_landing_cancels(m, 0)) { return 1; } - func_802627B8(m, MARIO_ANIM_LAND_FROM_DOUBLE_JUMP, ACT_IDLE); + landing_step(m, MARIO_ANIM_LAND_FROM_DOUBLE_JUMP, ACT_IDLE); return 0; } s32 act_side_flip_land_stop(struct MarioState *m) { - if (func_80262828(m, 0)) { + if (check_common_landing_cancels(m, 0)) { return 1; } - func_802627B8(m, MARIO_ANIM_SLIDEFLIP_LAND, ACT_IDLE); + landing_step(m, MARIO_ANIM_SLIDEFLIP_LAND, ACT_IDLE); m->marioObj->header.gfx.angle[1] += 0x8000; return 0; } s32 act_freefall_land_stop(struct MarioState *m) { - if (func_80262828(m, 0)) { + if (check_common_landing_cancels(m, 0)) { return 1; } - func_802627B8(m, MARIO_ANIM_GENERAL_LAND, ACT_IDLE); + landing_step(m, MARIO_ANIM_GENERAL_LAND, ACT_IDLE); return 0; } s32 act_triple_jump_land_stop(struct MarioState *m) { - if (func_80262828(m, ACT_JUMP)) { + if (check_common_landing_cancels(m, ACT_JUMP)) { return 1; } - func_802627B8(m, MARIO_ANIM_TRIPLE_JUMP_LAND, ACT_IDLE); + landing_step(m, MARIO_ANIM_TRIPLE_JUMP_LAND, ACT_IDLE); return 0; } @@ -914,39 +914,39 @@ s32 act_backflip_land_stop(struct MarioState *m) { m->input &= -3; } - if (func_80262828(m, ACT_BACKFLIP)) { + if (check_common_landing_cancels(m, ACT_BACKFLIP)) { return 1; } - func_802627B8(m, MARIO_ANIM_TRIPLE_JUMP_LAND, ACT_IDLE); + landing_step(m, MARIO_ANIM_TRIPLE_JUMP_LAND, ACT_IDLE); return 0; } s32 act_lava_boost_land(struct MarioState *m) { m->input &= -0x2011; - if (func_80262828(m, 0)) { + if (check_common_landing_cancels(m, 0)) { return 1; } - func_802627B8(m, MARIO_ANIM_STAND_UP_FROM_LAVA_BOOST, ACT_IDLE); + landing_step(m, MARIO_ANIM_STAND_UP_FROM_LAVA_BOOST, ACT_IDLE); return 0; } s32 act_long_jump_land_stop(struct MarioState *m) { m->input &= -0x2001; - if (func_80262828(m, ACT_JUMP)) { + if (check_common_landing_cancels(m, ACT_JUMP)) { return 1; } - func_802627B8(m, + landing_step(m, !m->marioObj->oMarioLongJumpIsSlow ? MARIO_ANIM_CROUCH_FROM_FAST_LONGJUMP : MARIO_ANIM_CROUCH_FROM_SLOW_LONGJUMP, ACT_CROUCHING); return 0; } -s32 func_80262CEC(struct MarioState *m) { +s32 act_unknown_034(struct MarioState *m) { if (m->marioObj->oInteractStatus & INT_STATUS_MARIO_DROP_OBJECT) { return drop_and_set_mario_action(m, ACT_IDLE, 0); } @@ -963,11 +963,11 @@ s32 func_80262CEC(struct MarioState *m) { return set_mario_action(m, ACT_THROWING, 0); } - func_802627B8(m, MARIO_ANIM_JUMP_LAND_WITH_LIGHT_OBJ, ACT_HOLD_IDLE); + landing_step(m, MARIO_ANIM_JUMP_LAND_WITH_LIGHT_OBJ, ACT_HOLD_IDLE); return 0; } -s32 func_80262DE4(struct MarioState *m) { +s32 act_unknown_035(struct MarioState *m) { if (m->marioObj->oInteractStatus & INT_STATUS_MARIO_DROP_OBJECT) { return drop_and_set_mario_action(m, ACT_IDLE, 0); } @@ -983,7 +983,7 @@ s32 func_80262DE4(struct MarioState *m) { if (m->input & INPUT_B_PRESSED) { return set_mario_action(m, ACT_THROWING, 0); } - func_802627B8(m, MARIO_ANIM_FALL_LAND_WITH_LIGHT_OBJ, ACT_HOLD_IDLE); + landing_step(m, MARIO_ANIM_FALL_LAND_WITH_LIGHT_OBJ, ACT_HOLD_IDLE); return 0; } @@ -1000,7 +1000,7 @@ s32 act_air_throw_land(struct MarioState *m) { mario_throw_held_object(m); } - func_802627B8(m, MARIO_ANIM_THROW_LIGHT_OBJECT, ACT_IDLE); + landing_step(m, MARIO_ANIM_THROW_LIGHT_OBJECT, ACT_IDLE); return 0; } @@ -1050,7 +1050,7 @@ s32 act_ground_pound_land(struct MarioState *m) { return set_mario_action(m, ACT_BUTT_SLIDE, 0); } - func_802627B8(m, MARIO_ANIM_GROUND_POUND_LANDING, ACT_BUTT_SLIDE_STOP); + landing_step(m, MARIO_ANIM_GROUND_POUND_LANDING, ACT_BUTT_SLIDE_STOP); return 0; } @@ -1061,12 +1061,12 @@ s32 act_first_person(struct MarioState *m) { sp1C = 0 != (m->input & (INPUT_UNKNOWN_10 | 0xC)); if (m->actionState == 0) { - func_80248C28(2); + lower_background_noise(2); set_camera_mode(m->area->camera, CAMERA_MODE_C_UP, 0x10); m->actionState = 1; } else { if (!(m->input & INPUT_FIRST_PERSON) || sp1C) { - func_80248CB8(2); + raise_background_noise(2); // Go back to the last camera mode set_camera_mode(m->area->camera, -1, 1); return set_mario_action(m, ACT_IDLE, 0); @@ -1090,10 +1090,10 @@ s32 act_first_person(struct MarioState *m) { return 0; } -s32 func_80263378(struct MarioState *m) { +s32 check_common_stationary_cancels(struct MarioState *m) { if (m->pos[1] < m->waterLevel - 100) { if (m->action == ACT_SPAWN_SPIN_LANDING) { - func_8024980C(0); + load_level_init_text(0); } update_mario_sound_and_camera(m); return set_water_plunge_action(m); @@ -1116,7 +1116,7 @@ s32 func_80263378(struct MarioState *m) { s32 mario_execute_stationary_action(struct MarioState *m) { s32 sp24; - if (func_80263378(m)) { + if (check_common_stationary_cancels(m)) { return 1; } @@ -1144,14 +1144,14 @@ s32 mario_execute_stationary_action(struct MarioState *m) { case ACT_START_CRAWLING: sp24 = act_start_crawling(m); break; case ACT_UNKNOWN_024: sp24 = act_stop_crawling(m); break; case ACT_SLIDE_KICK_SLIDE_STOP: sp24 = act_slide_kick_slide_stop(m); break; - case ACT_UNKNOWN_026: sp24 = func_80262574(m); break; + case ACT_UNKNOWN_026: sp24 = act_unknown_026(m); break; case ACT_FIRST_PERSON: sp24 = act_first_person(m); break; case ACT_JUMP_LAND_STOP: sp24 = act_jump_land_stop(m); break; case ACT_DOUBLE_JUMP_LAND_STOP: sp24 = act_double_jump_land_stop(m); break; case ACT_FREEFALL_LAND_STOP: sp24 = act_freefall_land_stop(m); break; case ACT_SIDE_FLIP_LAND_STOP: sp24 = act_side_flip_land_stop(m); break; - case ACT_UNKNOWN_034: sp24 = func_80262CEC(m); break; - case ACT_UNKNOWN_035: sp24 = func_80262DE4(m); break; + case ACT_UNKNOWN_034: sp24 = act_unknown_034(m); break; + case ACT_UNKNOWN_035: sp24 = act_unknown_035(m); break; case ACT_AIR_THROW_LAND: sp24 = act_air_throw_land(m); break; case ACT_LAVA_BOOST_LAND: sp24 = act_lava_boost_land(m); break; case ACT_TWIRL_LAND: sp24 = act_twirl_land(m); break; @@ -1161,13 +1161,13 @@ s32 mario_execute_stationary_action(struct MarioState *m) { case ACT_GROUND_POUND_LAND: sp24 = act_ground_pound_land(m); break; case ACT_BRAKING_STOP: sp24 = act_braking_stop(m); break; case ACT_BUTT_SLIDE_STOP: sp24 = act_butt_slide_stop(m); break; - case ACT_UNKNOWN_03F: sp24 = func_80261F8C(m); break; + case ACT_UNKNOWN_03F: sp24 = act_unknown_03F(m); break; } /* clang-format on */ if (!sp24) { if (m->input & INPUT_IN_WATER) { - m->particleFlags |= PARTICLE_7; + m->particleFlags |= PARTICLE_IDLE_WATER_WAVE; } } diff --git a/src/game/mario_actions_stationary.h b/src/game/mario_actions_stationary.h index 1cfca15..1fded71 100644 --- a/src/game/mario_actions_stationary.h +++ b/src/game/mario_actions_stationary.h @@ -5,10 +5,10 @@ #define INPUT_UNKNOWN_A41F 0xA41F -extern s32 func_802604E0(struct MarioState *); -extern s32 func_802606DC(struct MarioState *); +extern s32 check_common_idle_cancels(struct MarioState *); +extern s32 check_common_hold_idle_cancels(struct MarioState *); extern s32 act_idle(struct MarioState *); -extern void func_80260BC4(struct MarioState *, u32, s32, u32); +extern void play_anim_sound(struct MarioState *, u32, s32, u32); extern s32 act_start_sleeping(struct MarioState *); extern s32 act_sleeping(struct MarioState *); extern s32 act_waking_up(struct MarioState *); @@ -21,18 +21,18 @@ extern s32 act_in_quicksand(struct MarioState *); extern s32 act_crouching(struct MarioState *); extern s32 act_panting(struct MarioState *); extern s32 func_80261C74(struct MarioState *); -extern void func_80261D70(struct MarioState *, s32, u32); +extern void stopping_step(struct MarioState *, s32, u32); extern s32 act_braking_stop(struct MarioState *); extern s32 act_butt_slide_stop(struct MarioState *); -extern s32 func_80261F8C(struct MarioState *); +extern s32 act_unknown_03F(struct MarioState *); extern s32 act_slide_kick_slide_stop(struct MarioState *); extern s32 act_start_crouching(struct MarioState *); extern s32 act_stop_crouching(struct MarioState *); extern s32 act_start_crawling(struct MarioState *); extern s32 act_stop_crawling(struct MarioState *); -extern s32 func_80262574(struct MarioState *); -extern s32 func_802627B8(struct MarioState *, s32, u32); -extern s32 func_80262828(struct MarioState *, u32); +extern s32 act_unknown_026(struct MarioState *); +extern s32 landing_step(struct MarioState *, s32, u32); +extern s32 check_common_landing_cancels(struct MarioState *, u32); extern s32 act_jump_land_stop(struct MarioState *); extern s32 act_double_jump_land_stop(struct MarioState *); extern s32 act_side_flip_land_stop(struct MarioState *); @@ -41,13 +41,13 @@ extern s32 act_triple_jump_land_stop(struct MarioState *); extern s32 act_backflip_land_stop(struct MarioState *); extern s32 act_lava_boost_land(struct MarioState *); extern s32 act_long_jump_land_stop(struct MarioState *); -extern s32 func_80262CEC(struct MarioState *); -extern s32 func_80262DE4(struct MarioState *); +extern s32 act_unknown_034(struct MarioState *); +extern s32 act_unknown_035(struct MarioState *); extern s32 act_air_throw_land(struct MarioState *); extern s32 act_twirl_land(struct MarioState *); extern s32 act_ground_pound_land(struct MarioState *); extern s32 act_first_person(struct MarioState *); -extern s32 func_80263378(struct MarioState *); +extern s32 check_common_stationary_cancels(struct MarioState *); extern s32 mario_execute_stationary_action(struct MarioState *); #endif /* _MARIO_ACTIONS_STATIONARY */ diff --git a/src/game/mario_actions_submerged.c b/src/game/mario_actions_submerged.c index 18a2a15..f9634cd 100644 --- a/src/game/mario_actions_submerged.c +++ b/src/game/mario_actions_submerged.c @@ -193,7 +193,7 @@ static u32 perform_water_step(struct MarioState *m) { return stepResult; } -static BAD_RETURN(u32) func_80270504(struct MarioState *m) { +static BAD_RETURN(u32) update_water_pitch(struct MarioState *m) { struct Object *marioObj = m->marioObj; if (marioObj->header.gfx.angle[0] > 0) { @@ -308,7 +308,7 @@ static void common_idle_step(struct MarioState *m, s32 animation, s32 arg) { update_swimming_pitch(m); update_swimming_speed(m, MIN_SWIM_SPEED); perform_water_step(m); - func_80270504(m); + update_water_pitch(m); if (m->faceAngle[0] > 0) { *val = approach_s32(*val, m->faceAngle[0] / 2, 0x80, 0x200); @@ -322,7 +322,7 @@ static void common_idle_step(struct MarioState *m, s32 animation, s32 arg) { set_mario_anim_with_accel(m, animation, arg); } - set_swimming_at_surface_particles(m, PARTICLE_7); + set_swimming_at_surface_particles(m, PARTICLE_IDLE_WATER_WAVE); } static s32 act_water_idle(struct MarioState *m) { @@ -415,13 +415,13 @@ static s32 act_hold_water_action_end(struct MarioState *m) { return FALSE; } -static void func_8027107C(struct MarioState *m) { +static void reset_float_globals(struct MarioState *m) { D_80339FD0 = 0; D_80339FD2 = 0x800; D_80339FD4 = m->faceAngle[0] / 256.0f + 20.0f; } -static void func_802710CC(struct MarioState *m) { +static void float_surface_gfx(struct MarioState *m) { if (D_80339FD2 != 0 && m->pos[1] > m->waterLevel - 85 && m->faceAngle[0] >= 0) { if ((D_80339FD0 += D_80339FD2) >= 0) { m->marioObj->header.gfx.pos[1] += D_80339FD4 * sins(D_80339FD0); @@ -471,14 +471,14 @@ static void common_swimming_step(struct MarioState *m, s16 swimStrength) { break; } - func_80270504(m); + update_water_pitch(m); m->marioBodyState->headAngle[0] = approach_s32(m->marioBodyState->headAngle[0], 0, 0x200, 0x200); - func_802710CC(m); - set_swimming_at_surface_particles(m, PARTICLE_10); + float_surface_gfx(m); + set_swimming_at_surface_particles(m, PARTICLE_WAVE_TRAIL); } -static void func_802713A8(struct MarioState *m) { +static void play_swimming_noise(struct MarioState *m) { s16 animFrame = m->marioObj->header.gfx.unk38.animFrame; // (this need to be on one line to match on PAL) @@ -550,7 +550,7 @@ static s32 act_breaststroke(struct MarioState *m) { if (m->actionTimer == 1) { play_sound(sSwimStrength == MIN_SWIM_STRENGTH ? SOUND_ACTION_SWIM : SOUND_ACTION_SWIM_FAST, m->marioObj->header.gfx.cameraToObject); - func_8027107C(m); + reset_float_globals(m); } set_mario_animation(m, MARIO_ANIM_SWIM_PART1); @@ -617,7 +617,7 @@ static s32 act_flutter_kick(struct MarioState *m) { sSwimStrength = MIN_SWIM_STRENGTH; if (m->forwardVel < 14.0f) { - func_802713A8(m); + play_swimming_noise(m); set_mario_animation(m, MARIO_ANIM_FLUTTERKICK); } @@ -668,7 +668,7 @@ static s32 act_hold_breaststroke(struct MarioState *m) { if (m->actionTimer == 1) { play_sound(SOUND_ACTION_SWIM, m->marioObj->header.gfx.cameraToObject); - func_8027107C(m); + reset_float_globals(m); } set_mario_animation(m, MARIO_ANIM_SWIM_WITH_OBJ_PART1); @@ -728,7 +728,7 @@ static s32 act_hold_flutter_kick(struct MarioState *m) { m->forwardVel = approach_f32(m->forwardVel, 12.0f, 0.1f, 0.15f); if (m->forwardVel < 14.0f) { - func_802713A8(m); + play_swimming_noise(m); set_mario_animation(m, MARIO_ANIM_FLUTTERKICK_WITH_OBJ); } common_swimming_step(m, 0x00A0); @@ -753,7 +753,7 @@ static s32 act_water_shell_swimming(struct MarioState *m) { m->forwardVel = approach_f32(m->forwardVel, 30.0f, 2.0f, 1.0f); - func_802713A8(m); + play_swimming_noise(m); set_mario_animation(m, MARIO_ANIM_FLUTTERKICK_WITH_OBJ); common_swimming_step(m, 0x012C); @@ -786,7 +786,7 @@ static s32 act_water_throw(struct MarioState *m) { update_swimming_pitch(m); update_swimming_speed(m, MIN_SWIM_SPEED); perform_water_step(m); - func_80270504(m); + update_water_pitch(m); set_mario_animation(m, MARIO_ANIM_WATER_THROW_OBJ); play_sound_if_no_flag(m, SOUND_ACTION_SWIM, MARIO_ACTION_SOUND_PLAYED); @@ -813,7 +813,7 @@ static s32 act_water_punch(struct MarioState *m) { update_swimming_pitch(m); update_swimming_speed(m, MIN_SWIM_SPEED); perform_water_step(m); - func_80270504(m); + update_water_pitch(m); m->marioBodyState->headAngle[0] = approach_s32(m->marioBodyState->headAngle[0], 0, 0x200, 0x200); @@ -966,7 +966,7 @@ static s32 act_water_plunge(struct MarioState *m) { play_sound(SOUND_MARIO_HAHA_2, m->marioObj->header.gfx.cameraToObject); } - m->particleFlags |= PARTICLE_6; + m->particleFlags |= PARTICLE_WATER_SPLASH; m->actionState = 1; } @@ -1178,7 +1178,7 @@ static s32 act_metal_water_standing(struct MarioState *m) { stop_and_set_height_to_floor(m); if (m->pos[1] >= m->waterLevel - 150) { - m->particleFlags |= PARTICLE_7; + m->particleFlags |= PARTICLE_IDLE_WATER_WAVE; } return FALSE; diff --git a/src/game/mario_misc.c b/src/game/mario_misc.c index 2557e9e..f68f5d0 100644 --- a/src/game/mario_misc.c +++ b/src/game/mario_misc.c @@ -100,7 +100,7 @@ Gfx *geo_draw_mario_head_goddard(s32 callContext, struct GraphNode *node, Mat4 * return gfx; } -static void bhvToadMessage_faded(void) { +static void toad_message_faded(void) { if (gCurrentObject->oDistanceToMario > 700.0f) { gCurrentObject->oToadMessageRecentlyTalked = 0; } @@ -109,7 +109,7 @@ static void bhvToadMessage_faded(void) { } } -static void bhvToadMessage_opaque(void) { +static void toad_message_opaque(void) { if (gCurrentObject->oDistanceToMario > 700.0f) { gCurrentObject->oToadMessageState = TOAD_MESSAGE_FADING; } else { @@ -124,8 +124,8 @@ static void bhvToadMessage_opaque(void) { } } -static void bhvToadMessage_talking(void) { - if (obj_update_dialog_with_cutscene(3, 1, CUTSCENE_DIALOG, gCurrentObject->oToadMessageDialogId) +static void toad_message_talking(void) { + if (cur_obj_update_dialog_with_cutscene(3, 1, CUTSCENE_DIALOG, gCurrentObject->oToadMessageDialogId) != 0) { gCurrentObject->oToadMessageRecentlyTalked = 1; gCurrentObject->oToadMessageState = TOAD_MESSAGE_FADING; @@ -146,42 +146,42 @@ static void bhvToadMessage_talking(void) { } } -static void bhvToadMessage_opacifying(void) { +static void toad_message_opacifying(void) { if ((gCurrentObject->oOpacity += 6) == 255) { gCurrentObject->oToadMessageState = TOAD_MESSAGE_OPAQUE; } } -static void bhvToadMessage_fading(void) { +static void toad_message_fading(void) { if ((gCurrentObject->oOpacity -= 6) == 81) { gCurrentObject->oToadMessageState = TOAD_MESSAGE_FADED; } } -void bhvToadMessage_loop(void) { +void bhv_toad_message_loop(void) { if (gCurrentObject->header.gfx.node.flags & GRAPH_RENDER_ACTIVE) { gCurrentObject->oInteractionSubtype = 0; switch (gCurrentObject->oToadMessageState) { case TOAD_MESSAGE_FADED: - bhvToadMessage_faded(); + toad_message_faded(); break; case TOAD_MESSAGE_OPAQUE: - bhvToadMessage_opaque(); + toad_message_opaque(); break; case TOAD_MESSAGE_OPACIFYING: - bhvToadMessage_opacifying(); + toad_message_opacifying(); break; case TOAD_MESSAGE_FADING: - bhvToadMessage_fading(); + toad_message_fading(); break; case TOAD_MESSAGE_TALKING: - bhvToadMessage_talking(); + toad_message_talking(); break; } } } -void bhvToadMessage_init(void) { +void bhv_toad_message_init(void) { s32 saveFlags = save_file_get_flags(); s32 starCount = save_file_get_total_star_count(gCurrSaveFileNum - 1, 0, 24); s32 dialogId = (gCurrentObject->oBehParams >> 24) & 0xFF; @@ -213,11 +213,11 @@ void bhvToadMessage_init(void) { gCurrentObject->oToadMessageState = TOAD_MESSAGE_FADED; gCurrentObject->oOpacity = 81; } else { - mark_object_for_deletion(gCurrentObject); + obj_mark_for_deletion(gCurrentObject); } } -static void bhvUnlockDoorStar_spawn_particle(s16 angleOffset) { +static void star_door_unlock_spawn_particles(s16 angleOffset) { struct Object *sparkleParticle = spawn_object(gCurrentObject, 0, bhvSparkleSpawn); sparkleParticle->oPosX += @@ -228,7 +228,7 @@ static void bhvUnlockDoorStar_spawn_particle(s16 angleOffset) { sparkleParticle->oPosY -= gCurrentObject->oUnlockDoorStarTimer * 10.0f; } -void bhvUnlockDoorStar_init(void) { +void bhv_unlock_door_star_init(void) { gCurrentObject->oUnlockDoorStarState = UNLOCK_DOOR_STAR_RISING; gCurrentObject->oUnlockDoorStarTimer = 0; gCurrentObject->oUnlockDoorStarYawVel = 0x1000; @@ -236,10 +236,10 @@ void bhvUnlockDoorStar_init(void) { gCurrentObject->oPosY += 160.0f; gCurrentObject->oPosZ += 30.0f * coss(gMarioState->faceAngle[1] - 0x4000); gCurrentObject->oMoveAngleYaw = 0x7800; - scale_object(gCurrentObject, 0.5f); + obj_scale(gCurrentObject, 0.5f); } -void bhvUnlockDoorStar_loop(void) { +void bhv_unlock_door_star_loop(void) { UNUSED u8 unused1[4]; s16 prevYaw = gCurrentObject->oMoveAngleYaw; UNUSED u8 unused2[4]; @@ -253,7 +253,7 @@ void bhvUnlockDoorStar_loop(void) { gCurrentObject->oPosY += 3.4f; // Raise the star up in the air gCurrentObject->oMoveAngleYaw += gCurrentObject->oUnlockDoorStarYawVel; // Apply yaw velocity - scale_object(gCurrentObject, gCurrentObject->oUnlockDoorStarTimer / 50.0f + obj_scale(gCurrentObject, gCurrentObject->oUnlockDoorStarTimer / 50.0f + 0.5f); // Scale the star to be bigger if (++gCurrentObject->oUnlockDoorStarTimer == 30) { gCurrentObject->oUnlockDoorStarTimer = 0; @@ -266,7 +266,7 @@ void bhvUnlockDoorStar_loop(void) { if (++gCurrentObject->oUnlockDoorStarTimer == 30) { play_sound(SOUND_MENU_STAR_SOUND, gCurrentObject->header.gfx.cameraToObject); // Play final sound - obj_hide(); // Hide the object + cur_obj_hide(); // Hide the object gCurrentObject->oUnlockDoorStarTimer = 0; gCurrentObject ->oUnlockDoorStarState++; // Sets state to UNLOCK_DOOR_STAR_SPAWNING_PARTICLES @@ -274,8 +274,8 @@ void bhvUnlockDoorStar_loop(void) { break; case UNLOCK_DOOR_STAR_SPAWNING_PARTICLES: // Spawn two particles, opposite sides of the star. - bhvUnlockDoorStar_spawn_particle(0); - bhvUnlockDoorStar_spawn_particle(0x8000); + star_door_unlock_spawn_particles(0); + star_door_unlock_spawn_particles(0x8000); if (gCurrentObject->oUnlockDoorStarTimer++ == 20) { gCurrentObject->oUnlockDoorStarTimer = 0; gCurrentObject->oUnlockDoorStarState++; // Sets state to UNLOCK_DOOR_STAR_DONE @@ -284,7 +284,7 @@ void bhvUnlockDoorStar_loop(void) { case UNLOCK_DOOR_STAR_DONE: // The object stays loaded for an additional 50 frames so that the // sound doesn't immediately stop. if (gCurrentObject->oUnlockDoorStarTimer++ == 50) { - mark_object_for_deletion(gCurrentObject); + obj_mark_for_deletion(gCurrentObject); } break; } diff --git a/src/game/mario_misc.h b/src/game/mario_misc.h index 2465ac9..7b4ed95 100644 --- a/src/game/mario_misc.h +++ b/src/game/mario_misc.h @@ -7,10 +7,10 @@ extern struct GraphNodeObject gMirrorMario; extern struct MarioBodyState gBodyStates[2]; extern Gfx *geo_draw_mario_head_goddard(s32 a, struct GraphNode *b, Mat4 *c); -extern void bhvToadMessage_loop(void); -extern void bhvToadMessage_init(void); -extern void bhvUnlockDoorStar_init(void); -extern void bhvUnlockDoorStar_loop(void); +extern void bhv_toad_message_loop(void); +extern void bhv_toad_message_init(void); +extern void bhv_unlock_door_star_init(void); +extern void bhv_unlock_door_star_loop(void); extern Gfx *geo_mirror_mario_set_alpha(s32 a, struct GraphNode *b, UNUSED Mat4 *c); extern Gfx *geo_switch_mario_stand_run(s32 run, struct GraphNode *node, UNUSED Mat4 *c); extern Gfx *geo_switch_mario_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *c); diff --git a/src/game/mario_step.c b/src/game/mario_step.c index e3f5e58..e40ed68 100644 --- a/src/game/mario_step.c +++ b/src/game/mario_step.c @@ -21,9 +21,9 @@ struct Surface gWaterSurfacePseudoFloor = { * to be used for the beta trampoline. Its return value * is used by set_mario_y_vel_based_on_fspeed as a constant * addition to Mario's Y velocity. Given the closeness of - * this function to nop_80254E50, it is probable that this + * this function to stub_mario_step_2, it is probable that this * was intended to check whether a trampoline had made itself - * known through nop_80254E50 and whether Mario was on it, + * known through stub_mario_step_2 and whether Mario was on it, * and if so return a higher value than 0. */ f32 get_additive_y_vel_for_jumps(void) { @@ -33,13 +33,13 @@ f32 get_additive_y_vel_for_jumps(void) { /** * Does nothing, but takes in a MarioState. This is only ever * called by update_mario_inputs, which is called as part of Mario's - * update routine. Due to its proximity to nop_80254E50, an + * update routine. Due to its proximity to stub_mario_step_2, an * incomplete trampoline function, and get_additive_y_vel_for_jumps, * a potentially trampoline-related function, it is plausible that * this could be used for checking if Mario was on the trampoline. * It could, for example, make him bounce. */ -void nop_80254E3C(UNUSED struct MarioState *x) { +void stub_mario_step_1(UNUSED struct MarioState *x) { } /** @@ -49,7 +49,7 @@ void nop_80254E3C(UNUSED struct MarioState *x) { * by the trampoline to make itself known to get_additive_y_vel_for_jumps, * or to set a variable with its intended additive Y vel. */ -void nop_80254E50(void) { +void stub_mario_step_2(void) { } void transfer_bully_speed(struct BullyCollisionData *obj1, struct BullyCollisionData *obj2) { diff --git a/src/game/mario_step.h b/src/game/mario_step.h index 5f2ebf5..3842ca5 100644 --- a/src/game/mario_step.h +++ b/src/game/mario_step.h @@ -6,8 +6,8 @@ extern struct Surface gWaterSurfacePseudoFloor; extern f32 get_additive_y_vel_for_jumps(void); -extern void nop_80254E3C(struct MarioState *); -extern void nop_80254E50(void); +extern void stub_mario_step_1(struct MarioState *); +extern void stub_mario_step_2(void); extern void mario_bonk_reflection(struct MarioState *, u32); extern u32 mario_update_quicksand(struct MarioState *, f32); diff --git a/src/game/memory.c b/src/game/memory.c index 00ad881..a01869e 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -329,7 +329,7 @@ void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd) { return dest; } -void *func_80278304(u32 segment, u8 *srcStart, u8 *srcEnd) { +void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd) { UNUSED void *dest = NULL; u32 compSize = ALIGN16(srcEnd - srcStart); u8 *compressed = main_pool_alloc(compSize, MEMORY_POOL_RIGHT); @@ -538,7 +538,7 @@ void func_80278A78(struct MarioAnimation *a, void *b, struct Animation *target) a->targetAnim = target; } -s32 func_80278AD4(struct MarioAnimation *a, u32 index) { +s32 load_patchable_table(struct MarioAnimation *a, u32 index) { s32 ret = FALSE; struct MarioAnimDmaRelatedThing *sp20 = a->animDmaTable; u8 *addr; diff --git a/src/game/memory.h b/src/game/memory.h index d47d247..588ceb3 100644 --- a/src/game/memory.h +++ b/src/game/memory.h @@ -40,7 +40,7 @@ u32 main_pool_pop_state(void); void *load_segment(s32 segment, u8 *srcStart, u8 *srcEnd, u32 side); void *load_to_fixed_pool_addr(u8 *destAddr, u8 *srcStart, u8 *srcEnd); void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd); -void *func_80278304(u32 segment, u8 *srcStart, u8 *srcEnd); +void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd); void load_engine_code_segment(void); struct AllocOnlyPool *alloc_only_pool_init(u32 size, u32 side); @@ -53,6 +53,6 @@ void mem_pool_free(struct MemoryPool *pool, void *addr); void *alloc_display_list(u32 size); void func_80278A78(struct MarioAnimation *a, void *b, struct Animation *target); -s32 func_80278AD4(struct MarioAnimation *a, u32 b); +s32 load_patchable_table(struct MarioAnimation *a, u32 b); #endif diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index acc0669..f12f45b 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -78,7 +78,7 @@ void set_yoshi_as_not_dead(void) { } /** - * An unused geo function. Bears strong similarity to Geo18_802B7D44, and relates something + * An unused geo function. Bears strong similarity to geo_bits_bowser_coloring, and relates something * of the opacity of an object to something else. Perhaps like, giving a parent object the same * opacity? */ @@ -395,10 +395,10 @@ void obj_splash(s32 waterY, s32 objY) { // Spawns waves if near surface of water and plays a noise if entering. if ((f32)(waterY + 30) > o->oPosY && o->oPosY > (f32)(waterY - 30)) { - spawn_object(o, MODEL_WATER_WAVES_SURF, bhvObjectWaterWave); + spawn_object(o, MODEL_IDLE_WATER_WAVE, bhvObjectWaterWave); if (o->oVelY < -20.0f) { - PlaySound2(SOUND_OBJ_DIVING_INTO_WATER); + cur_obj_play_sound_2(SOUND_OBJ_DIVING_INTO_WATER); } } @@ -739,7 +739,7 @@ s32 obj_lava_death(void) { } if ((o->oTimer % 8) == 0) { - PlaySound2(SOUND_OBJ_BULLY_EXPLODE_2); + cur_obj_play_sound_2(SOUND_OBJ_BULLY_EXPLODE_2); deathSmoke = spawn_object(o, MODEL_SMOKE, bhvBobombBullyDeathSmoke); deathSmoke->oPosX += RandomFloat() * 20.0f; deathSmoke->oPosY += RandomFloat() * 20.0f; diff --git a/src/game/obj_behaviors.h b/src/game/obj_behaviors.h index 244f41f..b12a520 100644 --- a/src/game/obj_behaviors.h +++ b/src/game/obj_behaviors.h @@ -11,48 +11,48 @@ extern u8 bob_seg7_metal_ball_path1[]; void set_yoshi_as_not_dead(void); -s32 CoinStep(s16 *collisionFlagsPtr); -void MovingCoinFlickerLoop(void); -void CoinCollected(void); +s32 coin_step(s16 *collisionFlagsPtr); +void moving_coin_flicker(void); +void coin_collected(void); void bhv_moving_yellow_coin_init(void); void bhv_moving_yellow_coin_loop(void); void bhv_moving_blue_coin_init(void); void bhv_moving_blue_coin_loop(void); void bhv_blue_coin_sliding_jumping_init(void); -void func_802E540C(void); /* likely unused */ -void func_802E54DC(void); /* likely unused */ +void blue_coin_sliding_away_from_mario(void); /* likely unused */ +void blue_coin_sliding_slow_down(void); /* likely unused */ void bhv_blue_coin_sliding_loop(void); /* likely unused */ void bhv_blue_coin_jumping_loop(void); /* likely unused */ void bhv_seaweed_init(void); void bhv_seaweed_bundle_init(void); void bhv_bobomb_init(void); -void func_802E5B7C(void); -void BobombExplodeLoop(void); -void CheckBobombInteractions(void); -void BobombPatrolLoop(void); -void BobombChaseMarioLoop(void); -void BobombLaunchedLoop(void); -void GenericBobombFreeLoop(void); -void StationaryBobombFreeLoop(void); -void BobombFreeLoop(void); -void BobombHeldLoop(void); -void BobombDroppedLoop(void); -void BobombThrownLoop(void); -void ObjRandomBlink(s32 *blinkTimer); +void bobomb_spawn_coin(void); +void bobomb_act_explode(void); +void bobomb_check_interactions(void); +void bobomb_act_patrol(void); +void bobomb_act_chase_mario(void); +void bobomb_act_launched(void); +void generic_bobomb_free_loop(void); +void stationary_bobomb_free_loop(void); +void bobomb_free_loop(void); +void bobomb_held_loop(void); +void bobomb_dropped_loop(void); +void bobomb_thrown_loop(void); +void curr_obj_random_blink(s32 *blinkTimer); void bhv_bobomb_loop(void); void bhv_bobomb_fuse_smoke_init(void); void bhv_bobomb_buddy_init(void); -void BobombBuddyIdleLoop(void); -void BobombBuddyCannonLoop(s16 arg0, s16 arg1); -void BobombBuddyTalkLoop(void); -void BobombBuddyTurnToTalkLoop(void); -void BobombBuddyActionLoop(void); +void bobomb_buddy_act_idle(void); +void bobomb_buddy_cannon_dialog(s16 arg0, s16 arg1); +void bobomb_buddy_act_talk(void); +void bobomb_buddy_act_turn_to_talk(void); +void bobomb_buddy_actions(void); void bhv_bobomb_buddy_loop(void); void bhv_cannon_closed_init(void); -void CannonTrapDoorOpeningLoop(void); +void cannon_door_act_opening(void); void bhv_cannon_closed_loop(void); void bhv_whirlpool_init(void); -void func_802E70A8(void); +void whirlpool_set_hitbox(void); void WhirlpoolOrientGraph(void); void bhv_whirlpool_loop(void); void bhv_jet_stream_loop(void); @@ -61,23 +61,23 @@ void bhv_homing_amp_loop(void); void bhv_circling_amp_init(void); void bhv_circling_amp_loop(void); void bhv_butterfly_init(void); -void ButterflyStep(s32 speed); -void CalculateButterflyAngle(void); -void ButterflyRestingLoop(void); -void ButterflyFollowMarioLoop(void); -void ButterflyReturnHomeLoop(void); +void butterfly_step(s32 speed); +void butterfly_calculate_angle(void); +void butterfly_act_rest(void); +void butterfly_act_follow_mario(void); +void butterfly_act_return_home(void); void bhv_butterfly_loop(void); void bhv_hoot_init(void); -f32 HootFindNextFloor(struct FloorGeometry **arg0, f32 arg1); -void HootFloorBounce(void); -void HootFreeStep(s16 arg0, s32 arg1); -void PlayerSetHootYaw(void); -void HootCarryStep(s32 arg0, UNUSED f32 arg1, UNUSED f32 arg2); -void HootSurfaceCollision(f32 arg0, UNUSED f32 arg1, f32 arg2); -void HootAscentLoop(f32 arg0, f32 arg1); -void HootActionLoop(void); -void HootTurnToHome(void); -void HootAwakeLoop(void); +f32 hoot_find_next_floor(struct FloorGeometry **arg0, f32 arg1); +void hoot_floor_bounce(void); +void hoot_free_step(s16 arg0, s32 arg1); +void hoot_player_set_yaw(void); +void hoot_carry_step(s32 arg0, UNUSED f32 arg1, UNUSED f32 arg2); +void hoot_surface_collision(f32 arg0, UNUSED f32 arg1, f32 arg2); +void hoot_act_ascent(f32 arg0, f32 arg1); +void hoot_action_loop(void); +void hoot_turn_to_home(void); +void hoot_awake_loop(void); void bhv_hoot_loop(void); void bhv_beta_holdable_object_init(void); /* unused */ void bhv_beta_holdable_object_loop(void); /* unused */ @@ -94,40 +94,40 @@ void bhv_respawner_loop(void); void create_respawner(s32 arg0, const BehaviorScript *behToSpawn, s32 minSpawnDist); void bhv_small_bully_init(void); void bhv_big_bully_init(void); -void BullyCheckMarioCollision(void); -void BullyChaseMarioLoop(void); -void BullyKnockbackLoop(void); -void BullyBackUpLoop(void); -void BullyBackUpCheck(s16 arg0); -void PlayBullyStompingSound(void); -void BullyStep(void); -void BullySpawnCoin(void); -void BullyLavaDeath(void); +void bully_check_mario_collision(void); +void bully_act_chase_mario(void); +void bully_act_knockback(void); +void bully_act_back_up(void); +void bully_backup_check(s16 arg0); +void bully_play_stomping_sound(void); +void bully_step(void); +void bully_spawn_coin(void); +void bully_act_level_death(void); void bhv_bully_loop(void); -void BigBullySpawnMinion(s32 arg0, s32 arg1, s32 arg2, s16 arg3); +void big_bully_spawn_minion(s32 arg0, s32 arg1, s32 arg2, s16 arg3); void bhv_big_bully_with_minions_init(void); -void BigBullyWithMinionsLavaDeath(void); +void big_bully_spawn_star(void); void bhv_big_bully_with_minions_loop(void); -f32 WaterRingCalcMarioDistInFront(void); -void WaterRingInit(void); +f32 water_ring_calc_mario_dist(void); +void water_ring_init(void); void bhv_jet_stream_water_ring_init(void); -void CheckWaterRingCollection(f32 avgScale, struct Object* ringManager); -void SetWaterRingScale(f32 avgScale); -void WaterRingCollectedLoop(void); -void JetStreamWaterRingNotCollectedLoop(void); +void water_ring_check_collection(f32 avgScale, struct Object* ringManager); +void water_ring_set_scale(f32 avgScale); +void water_ring_act_collected(void); +void water_ring_act_not_collected(void); void bhv_jet_stream_water_ring_loop(void); -void Unknown802EB8A4(void); /* unused */ -void JetStreamRingSpawnerActiveLoop(void); +void spawn_manta_ray_ring_manager(void); /* unused */ +void water_ring_spawner_act_inactive(void); void bhv_jet_stream_ring_spawner_loop(void); void bhv_manta_ray_water_ring_init(void); -void MantaRayWaterRingNotCollectedLoop(void); +void manta_water_ring_act_not_collected(void); void bhv_manta_ray_water_ring_loop(void); void bhv_bowser_bomb_loop(void); void bhv_bowser_bomb_explosion_loop(void); void bhv_bowser_bomb_smoke_loop(void); void bhv_celebration_star_init(void); -void CelebrationStarSpinAroundMarioLoop(void); -void CelebrationStarFaceCameraLoop(void); +void celeb_star_act_spin_around_mario(void); +void celeb_star_act_face_camera(void); void bhv_celebration_star_loop(void); void bhv_celebration_star_sparkle_loop(void); void bhv_star_key_collection_puff_spawner_loop(void); @@ -140,17 +140,17 @@ void bhv_large_bomp_loop(void); void bhv_wf_sliding_platform_init(void); void bhv_wf_sliding_platform_loop(void); void bhv_moneybag_init(void); -void MoneybagCheckMarioCollision(void); -void MoneybagJump(s8 collisionFlags); -void MoneybagMoveAroundLoop(void); -void MoneybagReturnHomeLoop(void); -void MoneybagDisappearLoop(void); -void MoneybagDeathLoop(void); +void moneybag_check_mario_collision(void); +void moneybag_jump(s8 collisionFlags); +void moneybag_act_move_around(void); +void moneybag_act_return_home(void); +void moneybag_act_disappear(void); +void moneybag_act_death(void); void bhv_moneybag_loop(void); void bhv_moneybag_hidden_loop(void); void bhv_bowling_ball_init(void); -void func_802EDA14(void); -void func_802EDA6C(void); +void bowling_ball_set_hitbox(void); +void bowling_ball_set_waypoints(void); void bhv_bowling_ball_roll_loop(void); void bhv_bowling_ball_initializeLoop(void); void bhv_bowling_ball_loop(void); @@ -164,6 +164,6 @@ void bhv_free_bowling_ball_roll_loop(void); /* likely unused */ void bhv_free_bowling_ball_loop(void); /* likely unused */ void bhv_rr_cruiser_wing_init(void); void bhv_rr_cruiser_wing_loop(void); -extern void create_star(f32, f32, f32); +extern void spawn_default_star(f32, f32, f32); #endif /* _OBJ_BEHAVIORS_H */ diff --git a/src/game/obj_behaviors_2.c b/src/game/obj_behaviors_2.c index 5040c03..e7bd705 100644 --- a/src/game/obj_behaviors_2.c +++ b/src/game/obj_behaviors_2.c @@ -147,7 +147,7 @@ static s16 obj_get_pitch_from_vel(void) { */ static s32 obj_update_race_proposition_dialog(s16 dialogID) { s32 dialogResponse = - obj_update_dialog_with_cutscene(2, DIALOG_UNK2_FLAG_0 | DIALOG_UNK2_LEAVE_TIME_STOP_ENABLED, CUTSCENE_RACE_DIALOG, dialogID); + cur_obj_update_dialog_with_cutscene(2, DIALOG_UNK2_FLAG_0 | DIALOG_UNK2_LEAVE_TIME_STOP_ENABLED, CUTSCENE_RACE_DIALOG, dialogID); if (dialogResponse == 2) { set_mario_npc_dialog(0); @@ -347,9 +347,9 @@ static void func_802F8D78(f32 arg0, f32 arg1) { static void obj_rotate_yaw_and_bounce_off_walls(s16 targetYaw, s16 turnAmount) { if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { - targetYaw = obj_reflect_move_angle_off_wall(); + targetYaw = cur_obj_reflect_move_angle_off_wall(); } - obj_rotate_yaw_toward(targetYaw, turnAmount); + cur_obj_rotate_yaw_toward(targetYaw, turnAmount); } static s16 obj_get_pitch_to_home(f32 latDistToHome) { @@ -386,23 +386,23 @@ static s32 clamp_f32(f32 *value, f32 minimum, f32 maximum) { } static void func_802F927C(s32 arg0) { - set_obj_animation_and_sound_state(arg0); - func_8029F728(); + cur_obj_init_animation_with_sound(arg0); + cur_obj_extend_animation_if_at_end(); } static s32 func_802F92B0(s32 arg0) { - set_obj_animation_and_sound_state(arg0); - return func_8029F788(); + cur_obj_init_animation_with_sound(arg0); + return cur_obj_check_if_near_animation_end(); } static s32 func_802F92EC(s32 arg0, s32 arg1) { - set_obj_animation_and_sound_state(arg0); - return obj_check_anim_frame(arg1); + cur_obj_init_animation_with_sound(arg0); + return cur_obj_check_anim_frame(arg1); } static s32 func_802F932C(s32 arg0) { - if (func_8029F828()) { - set_obj_animation_and_sound_state(arg0); + if (cur_obj_check_if_at_animation_end()) { + cur_obj_init_animation_with_sound(arg0); return TRUE; } return FALSE; @@ -415,8 +415,8 @@ static s32 func_802F9378(s8 arg0, s8 arg1, u32 sound) { val04 = 1; } - if (obj_check_anim_frame_in_range(arg0, val04) || obj_check_anim_frame_in_range(arg1, val04)) { - PlaySound2(sound); + if (cur_obj_check_anim_frame_in_range(arg0, val04) || cur_obj_check_anim_frame_in_range(arg1, val04)) { + cur_obj_play_sound_2(sound); return TRUE; } @@ -642,7 +642,7 @@ static s32 obj_resolve_object_collisions(s32 *targetYaw) { static s32 obj_bounce_off_walls_edges_objects(s32 *targetYaw) { if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { - *targetYaw = obj_reflect_move_angle_off_wall(); + *targetYaw = cur_obj_reflect_move_angle_off_wall(); } else if (o->oMoveFlags & OBJ_MOVE_HIT_EDGE) { *targetYaw = (s16)(o->oMoveAngleYaw + 0x8000); } else if (!obj_resolve_object_collisions(targetYaw)) { @@ -655,7 +655,7 @@ static s32 obj_bounce_off_walls_edges_objects(s32 *targetYaw) { static s32 obj_resolve_collisions_and_turn(s16 targetYaw, s16 turnSpeed) { obj_resolve_object_collisions(NULL); - if (obj_rotate_yaw_toward(targetYaw, turnSpeed)) { + if (cur_obj_rotate_yaw_toward(targetYaw, turnSpeed)) { return FALSE; } else { return TRUE; @@ -670,31 +670,31 @@ static void obj_die_if_health_non_positive(void) { if (o->oHealth <= 0) { if (o->oDeathSound == 0) { - func_802A3034(SOUND_OBJ_DEFAULT_DEATH); + spawn_mist_particles_with_sound(SOUND_OBJ_DEFAULT_DEATH); } else if (o->oDeathSound > 0) { #ifdef VERSION_EU new_var = o->oDeathSound; - func_802A3034(new_var); + spawn_mist_particles_with_sound(new_var); #else - func_802A3034(o->oDeathSound); + spawn_mist_particles_with_sound(o->oDeathSound); #endif } else { - func_802A3004(); + spawn_mist_particles(); } if ((s32)o->oNumLootCoins < 0) { spawn_object(o, MODEL_BLUE_COIN, bhvMrIBlueCoin); } else { - spawn_object_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); + obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); } // This doesn't do anything - spawn_object_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); + obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); if (o->oHealth < 0) { - obj_hide(); - obj_become_intangible(); + cur_obj_hide(); + cur_obj_become_intangible(); } else { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } } } @@ -721,11 +721,11 @@ static void obj_set_knockback_action(s32 attackType) { } o->oFlags &= ~OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW; - o->oMoveAngleYaw = angle_to_object(gMarioObject, o); + o->oMoveAngleYaw = obj_angle_to_object(gMarioObject, o); } static void obj_set_squished_action(void) { - PlaySound2(SOUND_OBJ_STOMPED); + cur_obj_play_sound_2(SOUND_OBJ_STOMPED); o->oAction = OBJ_ACT_SQUISHED; } @@ -738,9 +738,9 @@ static s32 obj_die_if_above_lava_and_health_non_positive(void) { } else if (!(o->oMoveFlags & OBJ_MOVE_ABOVE_LAVA)) { if (o->oMoveFlags & OBJ_MOVE_ENTERED_WATER) { if (o->oWallHitboxRadius < 200.0f) { - PlaySound2(SOUND_OBJ_DIVING_INTO_WATER); + cur_obj_play_sound_2(SOUND_OBJ_DIVING_INTO_WATER); } else { - PlaySound2(SOUND_OBJ_DIVING_IN_WATER); + cur_obj_play_sound_2(SOUND_OBJ_DIVING_IN_WATER); } } return FALSE; @@ -754,7 +754,7 @@ static s32 obj_handle_attacks(struct ObjectHitbox *hitbox, s32 attackedMarioActi u8 *attackHandlers) { s32 attackType; - set_object_hitbox(o, hitbox); + obj_set_hitbox(o, hitbox); //! Die immediately if above lava if (obj_die_if_above_lava_and_health_non_positive()) { @@ -816,10 +816,10 @@ static s32 obj_handle_attacks(struct ObjectHitbox *hitbox, s32 attackedMarioActi } static void obj_act_knockback(UNUSED f32 baseScale) { - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->header.gfx.unk38.curAnim != NULL) { - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } //! Dies immediately if above lava @@ -829,16 +829,16 @@ static void obj_act_knockback(UNUSED f32 baseScale) { obj_die_if_health_non_positive(); } - obj_move_standard(-78); + cur_obj_move_standard(-78); } static void obj_act_squished(f32 baseScale) { f32 targetScaleY = baseScale * 0.3f; - obj_update_floor_and_walls(); + cur_obj_update_floor_and_walls(); if (o->header.gfx.unk38.curAnim != NULL) { - func_8029F728(); + cur_obj_extend_animation_if_at_end(); } if (approach_f32_ptr(&o->header.gfx.scale[1], targetScaleY, baseScale * 0.14f)) { @@ -850,14 +850,14 @@ static void obj_act_squished(f32 baseScale) { } o->oForwardVel = 0.0f; - obj_move_standard(-78); + cur_obj_move_standard(-78); } static s32 obj_update_standard_actions(f32 scale) { if (o->oAction < 100) { return TRUE; } else { - obj_become_intangible(); + cur_obj_become_intangible(); switch (o->oAction) { case OBJ_ACT_HORIZONTAL_KNOCKBACK: @@ -877,7 +877,7 @@ static s32 obj_update_standard_actions(f32 scale) { static s32 obj_check_attacks(struct ObjectHitbox *hitbox, s32 attackedMarioAction) { s32 attackType; - set_object_hitbox(o, hitbox); + obj_set_hitbox(o, hitbox); //! Dies immediately if above lava if (obj_die_if_above_lava_and_health_non_positive()) { @@ -901,15 +901,15 @@ static s32 obj_check_attacks(struct ObjectHitbox *hitbox, s32 attackedMarioActio } static s32 obj_move_for_one_second(s32 endAction) { - obj_update_floor_and_walls(); - func_8029F728(); + cur_obj_update_floor_and_walls(); + cur_obj_extend_animation_if_at_end(); if (o->oTimer > 30) { o->oAction = endAction; return TRUE; } - obj_move_standard(-78); + cur_obj_move_standard(-78); return FALSE; } diff --git a/src/game/object_collision.c b/src/game/object_collision.c index f66fb35..5c83526 100644 --- a/src/game/object_collision.c +++ b/src/game/object_collision.c @@ -7,7 +7,7 @@ #include "object_list_processor.h" #include "interaction.h" -struct Object *Unknown802C8460(struct Object *a) { +struct Object *debug_print_obj_collision(struct Object *a) { struct Object *sp24; UNUSED s32 unused; s32 i; @@ -22,7 +22,7 @@ struct Object *Unknown802C8460(struct Object *a) { return NULL; } -int func_802C8504(struct Object *a, struct Object *b) { +int detect_object_hitbox_overlap(struct Object *a, struct Object *b) { f32 sp3C = a->oPosY - a->hitboxDownOffset; f32 sp38 = b->oPosY - b->hitboxDownOffset; f32 dx = a->oPosX - b->oPosX; @@ -59,7 +59,7 @@ int func_802C8504(struct Object *a, struct Object *b) { //! no return value } -int func_802C870C(struct Object *a, struct Object *b) { +int detect_object_hurtbox_overlap(struct Object *a, struct Object *b) { f32 sp3C = a->oPosY - a->hitboxDownOffset; f32 sp38 = b->oPosY - b->hitboxDownOffset; f32 sp34 = a->oPosX - b->oPosX; @@ -91,7 +91,7 @@ int func_802C870C(struct Object *a, struct Object *b) { //! no return value } -void func_802C88A8(struct Object *a) { +void clear_object_collision(struct Object *a) { struct Object *sp4 = (struct Object *) a->header.next; while (sp4 != a) { @@ -104,12 +104,12 @@ void func_802C88A8(struct Object *a) { } } -void func_802C8918(struct Object *a, struct Object *b, struct Object *c) { +void check_collision_in_list(struct Object *a, struct Object *b, struct Object *c) { if (a->oIntangibleTimer == 0) { while (b != c) { if (b->oIntangibleTimer == 0) { - if (func_802C8504(a, b) && b->hurtboxRadius != 0.0f) { - func_802C870C(a, b); + if (detect_object_hitbox_overlap(a, b) && b->hurtboxRadius != 0.0f) { + detect_object_hurtbox_overlap(a, b); } } b = (struct Object *) b->header.next; @@ -117,50 +117,50 @@ void func_802C8918(struct Object *a, struct Object *b, struct Object *c) { } } -void func_802C89CC(void) { +void check_player_object_collision(void) { struct Object *sp1C = (struct Object *) &gObjectLists[OBJ_LIST_PLAYER]; struct Object *sp18 = (struct Object *) sp1C->header.next; while (sp18 != sp1C) { - func_802C8918(sp18, (struct Object *) sp18->header.next, sp1C); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_POLELIKE].next, + check_collision_in_list(sp18, (struct Object *) sp18->header.next, sp1C); + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_POLELIKE].next, (struct Object *) &gObjectLists[OBJ_LIST_POLELIKE]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_LEVEL].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_LEVEL].next, (struct Object *) &gObjectLists[OBJ_LIST_LEVEL]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_GENACTOR].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_GENACTOR].next, (struct Object *) &gObjectLists[OBJ_LIST_GENACTOR]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_PUSHABLE].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_PUSHABLE].next, (struct Object *) &gObjectLists[OBJ_LIST_PUSHABLE]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_SURFACE].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_SURFACE].next, (struct Object *) &gObjectLists[OBJ_LIST_SURFACE]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_DESTRUCTIVE].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_DESTRUCTIVE].next, (struct Object *) &gObjectLists[OBJ_LIST_DESTRUCTIVE]); sp18 = (struct Object *) sp18->header.next; } } -void func_802C8AD4(void) { +void check_pushable_object_collision(void) { struct Object *sp1C = (struct Object *) &gObjectLists[OBJ_LIST_PUSHABLE]; struct Object *sp18 = (struct Object *) sp1C->header.next; while (sp18 != sp1C) { - func_802C8918(sp18, (struct Object *) sp18->header.next, sp1C); + check_collision_in_list(sp18, (struct Object *) sp18->header.next, sp1C); sp18 = (struct Object *) sp18->header.next; } } -void func_802C8B50(void) { +void check_destructive_object_collision(void) { struct Object *sp1C = (struct Object *) &gObjectLists[OBJ_LIST_DESTRUCTIVE]; struct Object *sp18 = (struct Object *) sp1C->header.next; while (sp18 != sp1C) { if (sp18->oDistanceToMario < 2000.0f && !(sp18->activeFlags & ACTIVE_FLAG_UNK9)) { - func_802C8918(sp18, (struct Object *) sp18->header.next, sp1C); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_GENACTOR].next, + check_collision_in_list(sp18, (struct Object *) sp18->header.next, sp1C); + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_GENACTOR].next, (struct Object *) &gObjectLists[OBJ_LIST_GENACTOR]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_PUSHABLE].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_PUSHABLE].next, (struct Object *) &gObjectLists[OBJ_LIST_PUSHABLE]); - func_802C8918(sp18, (struct Object *) gObjectLists[OBJ_LIST_SURFACE].next, + check_collision_in_list(sp18, (struct Object *) gObjectLists[OBJ_LIST_SURFACE].next, (struct Object *) &gObjectLists[OBJ_LIST_SURFACE]); } sp18 = (struct Object *) sp18->header.next; @@ -168,14 +168,14 @@ void func_802C8B50(void) { } void detect_object_collisions(void) { - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_POLELIKE]); - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_PLAYER]); - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_PUSHABLE]); - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_GENACTOR]); - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_LEVEL]); - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_SURFACE]); - func_802C88A8((struct Object *) &gObjectLists[OBJ_LIST_DESTRUCTIVE]); - func_802C89CC(); - func_802C8B50(); - func_802C8AD4(); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_POLELIKE]); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_PLAYER]); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_PUSHABLE]); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_GENACTOR]); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_LEVEL]); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_SURFACE]); + clear_object_collision((struct Object *) &gObjectLists[OBJ_LIST_DESTRUCTIVE]); + check_player_object_collision(); + check_destructive_object_collision(); + check_pushable_object_collision(); } diff --git a/src/game/object_collision.h b/src/game/object_collision.h index 842f084..0ecacab 100644 --- a/src/game/object_collision.h +++ b/src/game/object_collision.h @@ -3,14 +3,14 @@ #include "types.h" -// extern ? Unknown802C8460(?); -// extern ? func_802C8504(?); -// extern ? func_802C870C(?); -// extern ? func_802C88A8(?); -// extern ? func_802C8918(?); -// extern ? func_802C89CC(?); -// extern ? func_802C8AD4(?); -// extern ? func_802C8B50(?); +// extern ? debug_print_obj_collision(?); +// extern ? detect_object_hitbox_overlap(?); +// extern ? detect_object_hurtbox_overlap(?); +// extern ? clear_object_collision(?); +// extern ? check_collision_in_list(?); +// extern ? check_player_object_collision(?); +// extern ? check_pushable_object_collision(?); +// extern ? check_destructive_object_collision(?); extern void detect_object_collisions(void); #endif /* _OBJECT_COLLISION_H */ diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 838360d..4829858 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -36,35 +36,35 @@ static s8 sLevelsWithRooms[] = { LEVEL_BBH, LEVEL_CASTLE, LEVEL_HMC, -1 }; s32 sGrabReleaseState; // These can be static: -extern void func_8029D704(Mat4, Mat4, Mat4); -extern void func_8029EA0C(struct Object *); -extern void translate_object_local(struct Object *, s16, s16); -extern void copy_object_pos(struct Object *, struct Object *); -extern void copy_object_angle(struct Object *, struct Object *); -extern struct Object *obj_find_nearest_object_with_behavior(const BehaviorScript *, f32 *); -extern void obj_move_y(f32, f32, f32); +extern void create_transformation_from_matrices(Mat4, Mat4, Mat4); +extern void obj_set_gfx_pos_from_pos(struct Object *); +extern void obj_translate_local(struct Object *, s16, s16); +extern void obj_copy_pos(struct Object *, struct Object *); +extern void obj_copy_angle(struct Object *, struct Object *); +extern struct Object *cur_obj_find_nearest_object_with_behavior(const BehaviorScript *, f32 *); +extern void cur_obj_move_y(f32, f32, f32); static s32 clear_move_flag(u32 *, s32); -extern void func_802AA618(s32, s32, f32); +extern void spawn_mist_particles_variable(s32, s32, f32); extern void spawn_triangle_break_particles(s32, s32, f32, s32); #define o gCurrentObject -Gfx *Geo18_8029D890(s32 run, UNUSED struct GraphNode *node, f32 mtx[4][4]) { +Gfx *geo_update_projectile_pos_from_parent(s32 run, UNUSED struct GraphNode *node, f32 mtx[4][4]) { Mat4 sp20; struct Object *sp1C; if (run == TRUE) { sp1C = (struct Object *) gCurGraphNodeObject; // TODO: change global type to Object pointer if (sp1C->prevObj) { - func_8029D704(sp20, mtx, gCurGraphNodeCamera->matrixPtr); - func_8029D558(sp20, sp1C->prevObj); - func_8029EA0C(sp1C->prevObj); + create_transformation_from_matrices(sp20, mtx, gCurGraphNodeCamera->matrixPtr); + obj_update_pos_from_parent_transformation(sp20, sp1C->prevObj); + obj_set_gfx_pos_from_pos(sp1C->prevObj); } } return NULL; } -Gfx *Geo18_8029D924(s32 run, struct GraphNode *node, UNUSED void *context) { +Gfx *geo_update_layer_transparency(s32 run, struct GraphNode *node, UNUSED void *context) { Gfx *sp3C, *sp38; struct Object *sp34; struct GraphNodeGenerated *sp30; @@ -211,7 +211,7 @@ Gfx *geo_switch_area(s32 run, struct GraphNode *node) { return NULL; } -void func_8029D558(Mat4 a0, struct Object *a1) { +void obj_update_pos_from_parent_transformation(Mat4 a0, struct Object *a1) { f32 spC, sp8, sp4; spC = a1->oParentRelativePosX; @@ -223,7 +223,7 @@ void func_8029D558(Mat4 a0, struct Object *a1) { a1->oPosZ = spC * a0[0][2] + sp8 * a0[1][2] + sp4 * a0[2][2] + a0[3][2]; } -void apply_object_scale_to_matrix(struct Object *obj, Mat4 dst, Mat4 src) { +void obj_apply_scale_to_matrix(struct Object *obj, Mat4 dst, Mat4 src) { dst[0][0] = src[0][0] * obj->header.gfx.scale[0]; dst[1][0] = src[1][0] * obj->header.gfx.scale[1]; dst[2][0] = src[2][0] * obj->header.gfx.scale[2]; @@ -245,7 +245,7 @@ void apply_object_scale_to_matrix(struct Object *obj, Mat4 dst, Mat4 src) { dst[3][3] = src[3][3]; } -void func_8029D704(Mat4 a0, Mat4 a1, Mat4 a2) { +void create_transformation_from_matrices(Mat4 a0, Mat4 a1, Mat4 a2) { f32 spC, sp8, sp4; spC = a2[3][0] * a2[0][0] + a2[3][1] * a2[0][1] + a2[3][2] * a2[0][2]; @@ -274,7 +274,7 @@ void func_8029D704(Mat4 a0, Mat4 a1, Mat4 a2) { a0[3][3] = 1.0f; } -void set_object_held_state(struct Object *obj, const BehaviorScript *heldBehavior) { +void obj_set_held_state(struct Object *obj, const BehaviorScript *heldBehavior) { obj->parentObj = o; if (obj->oFlags & OBJ_FLAG_HOLDABLE) { @@ -310,7 +310,7 @@ f32 dist_between_objects(struct Object *obj1, struct Object *obj2) { return sqrtf(dx * dx + dy * dy + dz * dz); } -void obj_forward_vel_approach_upward(f32 target, f32 increment) { +void cur_obj_forward_vel_approach_upward(f32 target, f32 increment) { if (o->oForwardVel >= target) { o->oForwardVel = target; } else { @@ -378,7 +378,7 @@ s16 approach_s16_symmetric(s16 value, s16 target, s16 increment) { return value; } -s32 obj_rotate_yaw_toward(s16 target, s16 increment) { +s32 cur_obj_rotate_yaw_toward(s16 target, s16 increment) { s16 startYaw; startYaw = (s16) o->oMoveAngleYaw; @@ -391,7 +391,7 @@ s32 obj_rotate_yaw_toward(s16 target, s16 increment) { } } -s16 angle_to_object(struct Object *obj1, struct Object *obj2) { +s16 obj_angle_to_object(struct Object *obj1, struct Object *obj2) { f32 z1, x1, z2, x2; s16 angle; @@ -436,26 +436,26 @@ s16 obj_turn_toward_object(struct Object *obj, struct Object *target, s16 angleI return targetAngle; } -void set_object_parent_relative_pos(struct Object *obj, s16 relX, s16 relY, s16 relZ) { +void obj_set_parent_relative_pos(struct Object *obj, s16 relX, s16 relY, s16 relZ) { obj->oParentRelativePosX = relX; obj->oParentRelativePosY = relY; obj->oParentRelativePosZ = relZ; } -void set_object_pos(struct Object *obj, s16 x, s16 y, s16 z) { +void obj_set_pos(struct Object *obj, s16 x, s16 y, s16 z) { obj->oPosX = x; obj->oPosY = y; obj->oPosZ = z; } -void set_object_angle(struct Object *a0, s16 pitch, s16 yaw, s16 roll) { - a0->oFaceAnglePitch = pitch; - a0->oFaceAngleYaw = yaw; - a0->oFaceAngleRoll = roll; +void obj_set_angle(struct Object *obj, s16 pitch, s16 yaw, s16 roll) { + obj->oFaceAnglePitch = pitch; + obj->oFaceAngleYaw = yaw; + obj->oFaceAngleRoll = roll; - a0->oMoveAnglePitch = pitch; - a0->oMoveAngleYaw = yaw; - a0->oMoveAngleRoll = roll; + obj->oMoveAnglePitch = pitch; + obj->oMoveAngleYaw = yaw; + obj->oMoveAngleRoll = roll; } /* @@ -466,8 +466,8 @@ struct Object *spawn_object_abs_with_rot(struct Object *parent, s16 uselessArg, s16 x, s16 y, s16 z, s16 rx, s16 ry, s16 rz) { // 'uselessArg' is unused in the function spawn_object_at_origin() struct Object *newObj = spawn_object_at_origin(parent, uselessArg, model, behavior); - set_object_pos(newObj, x, y, z); - set_object_angle(newObj, rx, ry, rz); + obj_set_pos(newObj, x, y, z); + obj_set_angle(newObj, rx, ry, rz); return newObj; } @@ -482,53 +482,53 @@ struct Object *spawn_object_rel_with_rot(struct Object *parent, u32 model, s16 yOff, s16 zOff, s16 rx, s16 ry, UNUSED s16 rz) { struct Object *newObj = spawn_object_at_origin(parent, 0, model, behavior); newObj->oFlags |= OBJ_FLAG_TRANSFORM_RELATIVE_TO_PARENT; - set_object_parent_relative_pos(newObj, xOff, yOff, zOff); - set_object_angle(newObj, rx, ry, zOff); // Nice typo you got there Nintendo. + obj_set_parent_relative_pos(newObj, xOff, yOff, zOff); + obj_set_angle(newObj, rx, ry, zOff); // Nice typo you got there Nintendo. return newObj; } -struct Object *Unknown8029E330(struct Object *sp20, s32 model, const BehaviorScript *sp28) { +struct Object *spawn_obj_with_transform_flags(struct Object *sp20, s32 model, const BehaviorScript *sp28) { struct Object *sp1C = spawn_object(sp20, model, sp28); sp1C->oFlags |= OBJ_FLAG_0020 | OBJ_FLAG_0800; return sp1C; } -struct Object *spawn_water_splash(struct Object *parent, struct WaterSplashParams *params) { +struct Object *spawn_water_droplet(struct Object *parent, struct WaterDropletParams *params) { f32 randomScale; struct Object *newObj = spawn_object(parent, params->model, params->behavior); - if (params->flags & WATER_SPLASH_FLAG_RAND_ANGLE) { + if (params->flags & WATER_DROPLET_FLAG_RAND_ANGLE) { newObj->oMoveAngleYaw = RandomU16(); } - if (params->flags & WATER_SPLASH_FLAG_RAND_ANGLE_INCR_PLUS_8000) { + if (params->flags & WATER_DROPLET_FLAG_RAND_ANGLE_INCR_PLUS_8000) { newObj->oMoveAngleYaw = (s16)(newObj->oMoveAngleYaw + 0x8000) + (s16) random_f32_around_zero(params->moveAngleRange); } - if (params->flags & WATER_SPLASH_FLAG_RAND_ANGLE_INCR) { + if (params->flags & WATER_DROPLET_FLAG_RAND_ANGLE_INCR) { newObj->oMoveAngleYaw = (s16) newObj->oMoveAngleYaw + (s16) random_f32_around_zero(params->moveAngleRange); } - if (params->flags & WATER_SPLASH_FLAG_SET_Y_TO_WATER_LEVEL) { + if (params->flags & WATER_DROPLET_FLAG_SET_Y_TO_WATER_LEVEL) { newObj->oPosY = find_water_level(newObj->oPosX, newObj->oPosZ); } - if (params->flags & WATER_SPLASH_FLAG_RAND_OFFSET_XZ) { - translate_object_xz_random(newObj, params->moveRange); + if (params->flags & WATER_DROPLET_FLAG_RAND_OFFSET_XZ) { + obj_translate_xz_random(newObj, params->moveRange); } - if (params->flags & WATER_SPLASH_FLAG_RAND_OFFSET_XYZ) { - translate_object_xyz_random(newObj, params->moveRange); + if (params->flags & WATER_DROPLET_FLAG_RAND_OFFSET_XYZ) { + obj_translate_xyz_random(newObj, params->moveRange); } newObj->oForwardVel = RandomFloat() * params->randForwardVelScale + params->randForwardVelOffset; newObj->oVelY = RandomFloat() * params->randYVelScale + params->randYVelOffset; randomScale = RandomFloat() * params->randSizeScale + params->randSizeOffset; - scale_object(newObj, randomScale); + obj_scale(newObj, randomScale); return newObj; } @@ -555,7 +555,7 @@ struct Object *spawn_object(struct Object *parent, s32 model, const BehaviorScri struct Object *obj; obj = spawn_object_at_origin(parent, 0, model, behavior); - copy_object_pos_and_angle(obj, parent); + obj_copy_pos_and_angle(obj, parent); return obj; } @@ -567,7 +567,7 @@ struct Object *try_to_spawn_object(s16 offsetY, f32 scale, struct Object *parent if (gFreeObjectList.next != NULL) { obj = spawn_object(parent, model, behavior); obj->oPosY += offsetY; - scale_object(obj, scale); + obj_scale(obj, scale); return obj; } else { return NULL; @@ -578,15 +578,15 @@ struct Object *spawn_object_with_scale(struct Object *parent, s32 model, const B struct Object *obj; obj = spawn_object_at_origin(parent, 0, model, behavior); - copy_object_pos_and_angle(obj, parent); - scale_object(obj, scale); + obj_copy_pos_and_angle(obj, parent); + obj_scale(obj, scale); return obj; } -static void build_relative_object_transform(struct Object *obj) { - build_object_transform_from_pos_and_angle(obj, O_PARENT_RELATIVE_POS_INDEX, O_FACE_ANGLE_INDEX); - translate_object_local(obj, O_POS_INDEX, O_PARENT_RELATIVE_POS_INDEX); +static void obj_build_relative_transform(struct Object *obj) { + obj_build_transform_from_pos_and_angle(obj, O_PARENT_RELATIVE_POS_INDEX, O_FACE_ANGLE_INDEX); + obj_translate_local(obj, O_POS_INDEX, O_PARENT_RELATIVE_POS_INDEX); } struct Object *spawn_object_relative(s16 behaviorParam, s16 relativePosX, s16 relativePosY, @@ -594,9 +594,9 @@ struct Object *spawn_object_relative(s16 behaviorParam, s16 relativePosX, s16 re const BehaviorScript *behavior) { struct Object *obj = spawn_object_at_origin(parent, 0, model, behavior); - copy_object_pos_and_angle(obj, parent); - set_object_parent_relative_pos(obj, relativePosX, relativePosY, relativePosZ); - build_relative_object_transform(obj); + obj_copy_pos_and_angle(obj, parent); + obj_set_parent_relative_pos(obj, relativePosX, relativePosY, relativePosZ); + obj_build_relative_transform(obj); obj->oBehParams2ndByte = behaviorParam; obj->oBehParams = (behaviorParam & 0xFF) << 16; @@ -611,33 +611,33 @@ struct Object *spawn_object_relative_with_scale(s16 behaviorParam, s16 relativeP obj = spawn_object_relative(behaviorParam, relativePosX, relativePosY, relativePosZ, parent, model, behavior); - scale_object(obj, scale); + obj_scale(obj, scale); return obj; } -void obj_move_using_vel(void) { +void cur_obj_move_using_vel(void) { o->oPosX += o->oVelX; o->oPosY += o->oVelY; o->oPosZ += o->oVelZ; } -void copy_object_graph_y_offset(struct Object *dst, struct Object *src) { +void obj_copy_graph_y_offset(struct Object *dst, struct Object *src) { dst->oGraphYOffset = src->oGraphYOffset; } -void copy_object_pos_and_angle(struct Object *dst, struct Object *src) { - copy_object_pos(dst, src); - copy_object_angle(dst, src); +void obj_copy_pos_and_angle(struct Object *dst, struct Object *src) { + obj_copy_pos(dst, src); + obj_copy_angle(dst, src); } -void copy_object_pos(struct Object *dst, struct Object *src) { +void obj_copy_pos(struct Object *dst, struct Object *src) { dst->oPosX = src->oPosX; dst->oPosY = src->oPosY; dst->oPosZ = src->oPosZ; } -void copy_object_angle(struct Object *dst, struct Object *src) { +void obj_copy_angle(struct Object *dst, struct Object *src) { dst->oMoveAnglePitch = src->oMoveAnglePitch; dst->oMoveAngleYaw = src->oMoveAngleYaw; dst->oMoveAngleRoll = src->oMoveAngleRoll; @@ -647,17 +647,15 @@ void copy_object_angle(struct Object *dst, struct Object *src) { dst->oFaceAngleRoll = src->oFaceAngleRoll; } -void func_8029EA0C(struct Object *a0) { - a0->header.gfx.pos[0] = a0->oPosX; - a0->header.gfx.pos[1] = a0->oPosY; - a0->header.gfx.pos[2] = a0->oPosZ; +void obj_set_gfx_pos_from_pos(struct Object *obj) { + obj->header.gfx.pos[0] = obj->oPosX; + obj->header.gfx.pos[1] = obj->oPosY; + obj->header.gfx.pos[2] = obj->oPosZ; } -void Unknown8029EA34(struct Object *sp20, u32 sp24) { - struct Animation **sp1C; - - sp1C = o->oAnimations; - geo_obj_init_animation(&sp20->header.gfx, sp24 + sp1C); +void obj_init_animation(struct Object *obj, s32 animIndex) { + struct Animation **anims = o->oAnimations; + geo_obj_init_animation(&obj->header.gfx, &anims[animIndex]); } /** @@ -690,7 +688,7 @@ void linear_mtxf_transpose_mul_vec3f(Mat4 m, Vec3f dst, Vec3f v) { } } -void apply_scale_to_object_transform(struct Object *obj) { +void obj_apply_scale_to_transform(struct Object *obj) { f32 scaleX, scaleY, scaleZ; scaleX = obj->header.gfx.scale[0]; @@ -710,82 +708,83 @@ void apply_scale_to_object_transform(struct Object *obj) { obj->transform[2][2] *= scaleZ; } -void copy_object_scale(struct Object *dst, struct Object *src) { +void obj_copy_scale(struct Object *dst, struct Object *src) { dst->header.gfx.scale[0] = src->header.gfx.scale[0]; dst->header.gfx.scale[1] = src->header.gfx.scale[1]; dst->header.gfx.scale[2] = src->header.gfx.scale[2]; } -void scale_object_xyz(struct Object *obj, f32 xScale, f32 yScale, f32 zScale) { +void obj_scale_xyz(struct Object *obj, f32 xScale, f32 yScale, f32 zScale) { obj->header.gfx.scale[0] = xScale; obj->header.gfx.scale[1] = yScale; obj->header.gfx.scale[2] = zScale; } -void scale_object(struct Object *obj, f32 scale) { +void obj_scale(struct Object *obj, f32 scale) { obj->header.gfx.scale[0] = scale; obj->header.gfx.scale[1] = scale; obj->header.gfx.scale[2] = scale; } -void obj_scale(f32 scale) { +void cur_obj_scale(f32 scale) { o->header.gfx.scale[0] = scale; o->header.gfx.scale[1] = scale; o->header.gfx.scale[2] = scale; } -void SetObjAnimation(s32 arg0) { - struct Animation **sp1C = o->oAnimations; - geo_obj_init_animation(&o->header.gfx, sp1C + arg0); +void cur_obj_init_animation(s32 animIndex) { + struct Animation **anims = o->oAnimations; + geo_obj_init_animation(&o->header.gfx, &anims[animIndex]); } -void set_obj_animation_and_sound_state(s32 arg0) { - struct Animation **sp1C = o->oAnimations; - geo_obj_init_animation(&o->header.gfx, sp1C + arg0); - o->oSoundStateID = arg0; + +void cur_obj_init_animation_with_sound(s32 animIndex) { + struct Animation **anims = o->oAnimations; + geo_obj_init_animation(&o->header.gfx, &anims[animIndex]); + o->oSoundStateID = animIndex; } -void func_8029ED98(u32 a0, f32 a1) { - struct Animation **sp1C = o->oAnimations; - s32 sp18 = (s32)(a1 * 65536.0f); - geo_obj_init_animation_accel(&o->header.gfx, sp1C + a0, sp18); - o->oSoundStateID = a0; +void cur_obj_init_animation_with_accel_and_sound(s32 animIndex, f32 accel) { + struct Animation **anims = o->oAnimations; + s32 animAccel = (s32)(accel * 65536.0f); + geo_obj_init_animation_accel(&o->header.gfx, &anims[animIndex], animAccel); + o->oSoundStateID = animIndex; } -void func_8029EE20(struct Object *a0, struct Animation **a1, u32 a2) { - struct Animation **sp1C = a1; - a0->oAnimations = a1; - geo_obj_init_animation(&a0->header.gfx, sp1C + a2); - a0->oSoundStateID = a2; +void obj_init_animation_with_sound(struct Object *obj, struct Animation **animations, s32 animIndex) { + struct Animation **anims = animations; + obj->oAnimations = animations; + geo_obj_init_animation(&obj->header.gfx, &anims[animIndex]); + obj->oSoundStateID = animIndex; } -void obj_enable_rendering_and_become_tangible(struct Object *a0) { - a0->header.gfx.node.flags |= GRAPH_RENDER_ACTIVE; - a0->oIntangibleTimer = 0; +void cur_obj_enable_rendering_and_become_tangible(struct Object *obj) { + obj->header.gfx.node.flags |= GRAPH_RENDER_ACTIVE; + obj->oIntangibleTimer = 0; } -void obj_enable_rendering(void) { +void cur_obj_enable_rendering(void) { o->header.gfx.node.flags |= GRAPH_RENDER_ACTIVE; } -void obj_disable_rendering_and_become_intangible(struct Object *a0) { - a0->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE; - a0->oIntangibleTimer = -1; +void cur_obj_disable_rendering_and_become_intangible(struct Object *obj) { + obj->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE; + obj->oIntangibleTimer = -1; } -void obj_disable_rendering(void) { +void cur_obj_disable_rendering(void) { o->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE; } -void obj_unhide(void) { +void cur_obj_unhide(void) { o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; } -void obj_hide(void) { +void cur_obj_hide(void) { o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE; } -void obj_set_pos_relative(struct Object *other, f32 dleft, f32 dy, f32 dforward) { +void cur_obj_set_pos_relative(struct Object *other, f32 dleft, f32 dy, f32 dforward) { f32 facingZ = coss(other->oMoveAngleYaw); f32 facingX = sins(other->oMoveAngleYaw); @@ -799,28 +798,28 @@ void obj_set_pos_relative(struct Object *other, f32 dleft, f32 dy, f32 dforward) o->oPosZ = other->oPosZ + dz; } -void obj_set_pos_relative_to_parent(f32 dleft, f32 dy, f32 dforward) { - obj_set_pos_relative(o->parentObj, dleft, dy, dforward); +void cur_obj_set_pos_relative_to_parent(f32 dleft, f32 dy, f32 dforward) { + cur_obj_set_pos_relative(o->parentObj, dleft, dy, dforward); } -void obj_enable_rendering_2(void) { - obj_enable_rendering(); +void cur_obj_enable_rendering_2(void) { + cur_obj_enable_rendering(); } -void obj_unused_init_on_floor(void) { - obj_enable_rendering(); +void cur_obj_unused_init_on_floor(void) { + cur_obj_enable_rendering(); o->oPosY = find_floor_height(o->oPosX, o->oPosY, o->oPosZ); if (o->oPosY < -10000.0f) { - obj_set_pos_relative_to_parent(0, 0, -70); + cur_obj_set_pos_relative_to_parent(0, 0, -70); o->oPosY = find_floor_height(o->oPosX, o->oPosY, o->oPosZ); } } -void obj_set_facing_to_move_angles(struct Object *a0) { - a0->oFaceAnglePitch = a0->oMoveAnglePitch; - a0->oFaceAngleYaw = a0->oMoveAngleYaw; - a0->oFaceAngleRoll = a0->oMoveAngleRoll; +void obj_set_face_angle_to_move_angle(struct Object *obj) { + obj->oFaceAnglePitch = obj->oMoveAnglePitch; + obj->oFaceAngleYaw = obj->oMoveAngleYaw; + obj->oFaceAngleRoll = obj->oMoveAngleRoll; } u32 get_object_list_from_behavior(const BehaviorScript *behavior) { @@ -837,20 +836,20 @@ u32 get_object_list_from_behavior(const BehaviorScript *behavior) { return objectList; } -struct Object *obj_nearest_object_with_behavior(const BehaviorScript *behavior) { +struct Object *cur_obj_nearest_object_with_behavior(const BehaviorScript *behavior) { struct Object *obj; f32 dist; - obj = obj_find_nearest_object_with_behavior(behavior, &dist); + obj = cur_obj_find_nearest_object_with_behavior(behavior, &dist); return obj; } -f32 obj_dist_to_nearest_object_with_behavior(const BehaviorScript *behavior) { +f32 cur_obj_dist_to_nearest_object_with_behavior(const BehaviorScript *behavior) { struct Object *obj; f32 dist; - obj = obj_find_nearest_object_with_behavior(behavior, &dist); + obj = cur_obj_find_nearest_object_with_behavior(behavior, &dist); if (obj == NULL) { dist = 15000.0f; } @@ -858,7 +857,7 @@ f32 obj_dist_to_nearest_object_with_behavior(const BehaviorScript *behavior) { return dist; } -struct Object *obj_find_nearest_object_with_behavior(const BehaviorScript *behavior, f32 *dist) { +struct Object *cur_obj_find_nearest_object_with_behavior(const BehaviorScript *behavior, f32 *dist) { uintptr_t *behaviorAddr = segmented_to_virtual(behavior); struct Object *closestObj = NULL; struct Object *obj; @@ -926,7 +925,7 @@ s32 count_objects_with_behavior(const BehaviorScript *behavior) { return count; } -struct Object *obj_find_nearby_held_actor(const BehaviorScript *behavior, f32 maxDist) { +struct Object *cur_obj_find_nearby_held_actor(const BehaviorScript *behavior, f32 maxDist) { const BehaviorScript *behaviorAddr = segmented_to_virtual(behavior); struct ObjectNode *listHead; struct Object *obj; @@ -957,18 +956,18 @@ struct Object *obj_find_nearby_held_actor(const BehaviorScript *behavior, f32 ma return foundObj; } -static void obj_reset_timer_and_subaction(void) { +static void cur_obj_reset_timer_and_subaction(void) { o->oTimer = 0; o->oSubAction = 0; } -void obj_change_action(s32 action) { +void cur_obj_change_action(s32 action) { o->oAction = action; o->oPrevAction = action; - obj_reset_timer_and_subaction(); + cur_obj_reset_timer_and_subaction(); } -void func_8029F684(f32 f12, f32 f14) { +void cur_obj_set_vel_from_mario_vel(f32 f12, f32 f14) { f32 sp4 = gMarioStates[0].forwardVel; f32 sp0 = f12 * f14; @@ -979,20 +978,20 @@ void func_8029F684(f32 f12, f32 f14) { } } -BAD_RETURN(s16) func_8029F6F0(void) { +BAD_RETURN(s16) cur_obj_reverse_animation(void) { if (o->header.gfx.unk38.animFrame >= 0) { o->header.gfx.unk38.animFrame--; } } -BAD_RETURN(s32) func_8029F728(void) { +BAD_RETURN(s32) cur_obj_extend_animation_if_at_end(void) { s32 sp4 = o->header.gfx.unk38.animFrame; s32 sp0 = o->header.gfx.unk38.curAnim->unk08 - 2; if (sp4 == sp0) o->header.gfx.unk38.animFrame--; } -s32 func_8029F788(void) { +s32 cur_obj_check_if_near_animation_end(void) { u32 spC = (s32) o->header.gfx.unk38.curAnim->flags; s32 sp8 = o->header.gfx.unk38.animFrame; s32 sp4 = o->header.gfx.unk38.curAnim->unk08 - 2; @@ -1011,7 +1010,7 @@ s32 func_8029F788(void) { return sp0; } -s32 func_8029F828(void) { +s32 cur_obj_check_if_at_animation_end(void) { s32 sp4 = o->header.gfx.unk38.animFrame; s32 sp0 = o->header.gfx.unk38.curAnim->unk08 - 1; @@ -1022,7 +1021,7 @@ s32 func_8029F828(void) { } } -s32 obj_check_anim_frame(s32 frame) { +s32 cur_obj_check_anim_frame(s32 frame) { s32 animFrame = o->header.gfx.unk38.animFrame; if (animFrame == frame) { @@ -1032,7 +1031,7 @@ s32 obj_check_anim_frame(s32 frame) { } } -s32 obj_check_anim_frame_in_range(s32 startFrame, s32 rangeLength) { +s32 cur_obj_check_anim_frame_in_range(s32 startFrame, s32 rangeLength) { s32 animFrame = o->header.gfx.unk38.animFrame; if (animFrame >= startFrame && animFrame < startFrame + rangeLength) { @@ -1042,7 +1041,7 @@ s32 obj_check_anim_frame_in_range(s32 startFrame, s32 rangeLength) { } } -s32 Unknown8029F930(s16 *a0) { +s32 cur_obj_check_frame_prior_current_frame(s16 *a0) { s16 sp6 = o->header.gfx.unk38.animFrame; while (*a0 != -1) { @@ -1072,23 +1071,23 @@ s32 mario_is_dive_sliding(void) { } } -void func_8029FA1C(f32 sp18, s32 sp1C) { +void cur_obj_set_y_vel_and_animation(f32 sp18, s32 sp1C) { o->oVelY = sp18; - set_obj_animation_and_sound_state(sp1C); + cur_obj_init_animation_with_sound(sp1C); } -void func_8029FA5C(s32 sp18, s32 sp1C) { - obj_become_intangible(); - obj_disable_rendering(); +void cur_obj_unrender_and_reset_state(s32 sp18, s32 sp1C) { + cur_obj_become_intangible(); + cur_obj_disable_rendering(); if (sp18 >= 0) { - set_obj_animation_and_sound_state(sp18); + cur_obj_init_animation_with_sound(sp18); } o->oAction = sp1C; } -static void obj_move_after_thrown_or_dropped(f32 forwardVel, f32 velY) { +static void cur_obj_move_after_thrown_or_dropped(f32 forwardVel, f32 velY) { o->oMoveFlags = 0; o->oFloorHeight = find_floor_height(o->oPosX, o->oPosY + 160.0f, o->oPosZ); @@ -1096,7 +1095,7 @@ static void obj_move_after_thrown_or_dropped(f32 forwardVel, f32 velY) { o->oPosY = o->oFloorHeight; } else if (o->oFloorHeight < -10000.0f) { //! OoB failsafe - copy_object_pos(o, gMarioObject); + obj_copy_pos(o, gMarioObject); o->oFloorHeight = find_floor_height(o->oPosX, o->oPosY, o->oPosZ); } @@ -1104,48 +1103,48 @@ static void obj_move_after_thrown_or_dropped(f32 forwardVel, f32 velY) { o->oVelY = velY; if (o->oForwardVel != 0) { - obj_move_y(/*gravity*/ -4.0f, /*bounce*/ -0.1f, /*buoyancy*/ 2.0f); + cur_obj_move_y(/*gravity*/ -4.0f, /*bounce*/ -0.1f, /*buoyancy*/ 2.0f); } } -void obj_get_thrown_or_placed(f32 forwardVel, f32 velY, s32 thrownAction) { +void cur_obj_get_thrown_or_placed(f32 forwardVel, f32 velY, s32 thrownAction) { if (o->behavior == segmented_to_virtual(bhvBowser)) { // Interestingly, when bowser is thrown, he is offset slightly to // mario's right - obj_set_pos_relative_to_parent(-41.684f, 85.859f, 321.577f); + cur_obj_set_pos_relative_to_parent(-41.684f, 85.859f, 321.577f); } else { } - obj_become_tangible(); - obj_enable_rendering(); + cur_obj_become_tangible(); + cur_obj_enable_rendering(); o->oHeldState = HELD_FREE; if ((o->oInteractionSubtype & INT_SUBTYPE_HOLDABLE_NPC) || forwardVel == 0.0f) { - obj_move_after_thrown_or_dropped(0.0f, 0.0f); + cur_obj_move_after_thrown_or_dropped(0.0f, 0.0f); } else { o->oAction = thrownAction; - obj_move_after_thrown_or_dropped(forwardVel, velY); + cur_obj_move_after_thrown_or_dropped(forwardVel, velY); } } -void obj_get_dropped(void) { - obj_become_tangible(); - obj_enable_rendering(); +void cur_obj_get_dropped(void) { + cur_obj_become_tangible(); + cur_obj_enable_rendering(); o->oHeldState = HELD_FREE; - obj_move_after_thrown_or_dropped(0.0f, 0.0f); + cur_obj_move_after_thrown_or_dropped(0.0f, 0.0f); } -void obj_set_model(s32 a0) { - o->header.gfx.sharedChild = gLoadedGraphNodes[a0]; +void cur_obj_set_model(s32 modelID) { + o->header.gfx.sharedChild = gLoadedGraphNodes[modelID]; } void mario_set_flag(s32 flag) { gMarioStates[0].flags |= flag; } -s32 obj_clear_interact_status_flag(s32 flag) { +s32 cur_obj_clear_interact_status_flag(s32 flag) { if (o->oInteractStatus & flag) { o->oInteractStatus &= flag ^ ~(0); return TRUE; @@ -1156,7 +1155,7 @@ s32 obj_clear_interact_status_flag(s32 flag) { /** * Mark an object to be unloaded at the end of the frame. */ -void mark_object_for_deletion(struct Object *obj) { +void obj_mark_for_deletion(struct Object *obj) { //! This clears all activeFlags. Since some of these flags disable behavior, // setting it to 0 could potentially enable unexpected behavior. After an // object is marked for deletion, it still updates on that frame (I think), @@ -1164,32 +1163,32 @@ void mark_object_for_deletion(struct Object *obj) { obj->activeFlags = ACTIVE_FLAGS_DEACTIVATED; } -void obj_disable(void) { - obj_disable_rendering(); - obj_hide(); - obj_become_intangible(); +void cur_obj_disable(void) { + cur_obj_disable_rendering(); + cur_obj_hide(); + cur_obj_become_intangible(); } -void obj_become_intangible(void) { +void cur_obj_become_intangible(void) { // When the timer is negative, the object is intangible and the timer // doesn't count down o->oIntangibleTimer = -1; } -void obj_become_tangible(void) { +void cur_obj_become_tangible(void) { o->oIntangibleTimer = 0; } -void make_object_tangible(struct Object *obj) { +void obj_become_tangible(struct Object *obj) { obj->oIntangibleTimer = 0; } -void obj_update_floor_height(void) { +void cur_obj_update_floor_height(void) { struct Surface *floor; o->oFloorHeight = find_floor(o->oPosX, o->oPosY, o->oPosZ, &floor); } -struct Surface *obj_update_floor_height_and_get_floor(void) { +struct Surface *cur_obj_update_floor_height_and_get_floor(void) { struct Surface *floor; o->oFloorHeight = find_floor(o->oPosX, o->oPosY, o->oPosZ, &floor); return floor; @@ -1216,12 +1215,12 @@ static void apply_drag_to_value(f32 *value, f32 dragStrength) { } } -void obj_apply_drag_xz(f32 dragStrength) { +void cur_obj_apply_drag_xz(f32 dragStrength) { apply_drag_to_value(&o->oVelX, dragStrength); apply_drag_to_value(&o->oVelZ, dragStrength); } -static s32 obj_move_xz(f32 steepSlopeNormalY, s32 careAboutEdgesAndSteepSlopes) { +static s32 cur_obj_move_xz(f32 steepSlopeNormalY, s32 careAboutEdgesAndSteepSlopes) { struct Surface *intendedFloor; f32 intendedX = o->oPosX + o->oVelX; @@ -1280,7 +1279,7 @@ static s32 obj_move_xz(f32 steepSlopeNormalY, s32 careAboutEdgesAndSteepSlopes) return FALSE; } -static void obj_move_update_underwater_flags(void) { +static void cur_obj_move_update_underwater_flags(void) { f32 decelY = (f32)(sqrtf(o->oVelY * o->oVelY) * (o->oDragStrength * 7.0f)) / 100.0L; if (o->oVelY > 0) { @@ -1297,7 +1296,7 @@ static void obj_move_update_underwater_flags(void) { } } -static void obj_move_update_ground_air_flags(UNUSED f32 gravity, f32 bounce) { +static void cur_obj_move_update_ground_air_flags(UNUSED f32 gravity, f32 bounce) { o->oMoveFlags &= ~OBJ_MOVE_13; if (o->oPosY < o->oFloorHeight) { @@ -1332,7 +1331,7 @@ static void obj_move_update_ground_air_flags(UNUSED f32 gravity, f32 bounce) { o->oMoveFlags &= ~OBJ_MOVE_MASK_IN_WATER; } -static f32 obj_move_y_and_get_water_level(f32 gravity, f32 buoyancy) { +static f32 cur_obj_move_y_and_get_water_level(f32 gravity, f32 buoyancy) { f32 waterLevel; o->oVelY += gravity + buoyancy; @@ -1350,7 +1349,7 @@ static f32 obj_move_y_and_get_water_level(f32 gravity, f32 buoyancy) { return waterLevel; } -void obj_move_y(f32 gravity, f32 bounce, f32 buoyancy) { +void cur_obj_move_y(f32 gravity, f32 bounce, f32 buoyancy) { f32 waterLevel; o->oMoveFlags &= ~OBJ_MOVE_LEFT_GROUND; @@ -1363,12 +1362,12 @@ void obj_move_y(f32 gravity, f32 bounce, f32 buoyancy) { } if (!(o->oMoveFlags & OBJ_MOVE_MASK_IN_WATER)) { - waterLevel = obj_move_y_and_get_water_level(gravity, 0.0f); + waterLevel = cur_obj_move_y_and_get_water_level(gravity, 0.0f); if (o->oPosY > waterLevel) { //! We only handle floor collision if the object does not enter // water. This allows e.g. coins to clip through floors if they // enter water on the same frame. - obj_move_update_ground_air_flags(gravity, bounce); + cur_obj_move_update_ground_air_flags(gravity, bounce); } else { o->oMoveFlags |= OBJ_MOVE_ENTERED_WATER; o->oMoveFlags &= ~OBJ_MOVE_MASK_ON_GROUND; @@ -1376,9 +1375,9 @@ void obj_move_y(f32 gravity, f32 bounce, f32 buoyancy) { } else { o->oMoveFlags &= ~OBJ_MOVE_ENTERED_WATER; - waterLevel = obj_move_y_and_get_water_level(gravity, buoyancy); + waterLevel = cur_obj_move_y_and_get_water_level(gravity, buoyancy); if (o->oPosY < waterLevel) { - obj_move_update_underwater_flags(); + cur_obj_move_update_underwater_flags(); } else { if (o->oPosY < o->oFloorHeight) { o->oPosY = o->oFloorHeight; @@ -1399,7 +1398,7 @@ void obj_move_y(f32 gravity, f32 bounce, f32 buoyancy) { } } -static void nop_802A0964(void) { +static void stub_obj_helpers_1(void) { } static s32 clear_move_flag(u32 *bitSet, s32 flag) { @@ -1411,7 +1410,7 @@ static s32 clear_move_flag(u32 *bitSet, s32 flag) { } } -void obj_unused_resolve_wall_collisions(f32 offsetY, f32 radius) { +void cur_obj_unused_resolve_wall_collisions(f32 offsetY, f32 radius) { if (radius > 0.1L) { f32_find_wall_collision(&o->oPosX, &o->oPosY, &o->oPosZ, offsetY, radius); } @@ -1431,7 +1430,7 @@ s16 abs_angle_diff(s16 x0, s16 x1) { return diff; } -void obj_move_xz_using_fvel_and_yaw(void) { +void cur_obj_move_xz_using_fvel_and_yaw(void) { o->oVelX = o->oForwardVel * sins(o->oMoveAngleYaw); o->oVelZ = o->oForwardVel * coss(o->oMoveAngleYaw); @@ -1439,7 +1438,7 @@ void obj_move_xz_using_fvel_and_yaw(void) { o->oPosZ += o->oVelZ; } -void obj_move_y_with_terminal_vel(void) { +void cur_obj_move_y_with_terminal_vel(void) { if (o->oVelY < -70.0f) { o->oVelY = -70.0f; } @@ -1447,12 +1446,12 @@ void obj_move_y_with_terminal_vel(void) { o->oPosY += o->oVelY; } -void obj_compute_vel_xz(void) { +void cur_obj_compute_vel_xz(void) { o->oVelX = o->oForwardVel * sins(o->oMoveAngleYaw); o->oVelZ = o->oForwardVel * coss(o->oMoveAngleYaw); } -f32 func_802A0BF4(f32 value, f32 center, f32 zeroThreshold, f32 increment) { +f32 increment_velocity_toward_range(f32 value, f32 center, f32 zeroThreshold, f32 increment) { f32 relative; if ((relative = value - center) > 0) { if (relative < zeroThreshold) { @@ -1469,7 +1468,7 @@ f32 func_802A0BF4(f32 value, f32 center, f32 zeroThreshold, f32 increment) { } } -s32 are_objects_collided(struct Object *obj1, struct Object *obj2) { +s32 obj_check_if_collided_with_object(struct Object *obj1, struct Object *obj2) { s32 i; for (i = 0; i < obj1->numCollidedObjs; i++) { if (obj1->collidedObjs[i] == obj2) { @@ -1480,15 +1479,15 @@ s32 are_objects_collided(struct Object *obj1, struct Object *obj2) { return FALSE; } -void obj_set_behavior(const BehaviorScript *behavior) { +void cur_obj_set_behavior(const BehaviorScript *behavior) { o->behavior = segmented_to_virtual(behavior); } -void set_object_behavior(struct Object *obj, const BehaviorScript *behavior) { +void obj_set_behavior(struct Object *obj, const BehaviorScript *behavior) { obj->behavior = segmented_to_virtual(behavior); } -s32 obj_has_behavior(const BehaviorScript *behavior) { +s32 cur_obj_has_behavior(const BehaviorScript *behavior) { if (o->behavior == segmented_to_virtual(behavior)) { return TRUE; } else { @@ -1496,7 +1495,7 @@ s32 obj_has_behavior(const BehaviorScript *behavior) { } } -s32 object_has_behavior(struct Object *obj, const BehaviorScript *behavior) { +s32 obj_has_behavior(struct Object *obj, const BehaviorScript *behavior) { if (obj->behavior == segmented_to_virtual(behavior)) { return TRUE; } else { @@ -1504,7 +1503,7 @@ s32 object_has_behavior(struct Object *obj, const BehaviorScript *behavior) { } } -f32 obj_lateral_dist_from_mario_to_home(void) { +f32 cur_obj_lateral_dist_from_mario_to_home(void) { f32 dist; f32 dx = o->oHomeX - gMarioObject->oPosX; f32 dz = o->oHomeZ - gMarioObject->oPosZ; @@ -1513,7 +1512,7 @@ f32 obj_lateral_dist_from_mario_to_home(void) { return dist; } -f32 obj_lateral_dist_to_home(void) { +f32 cur_obj_lateral_dist_to_home(void) { f32 dist; f32 dx = o->oHomeX - o->oPosX; f32 dz = o->oHomeZ - o->oPosZ; @@ -1522,7 +1521,7 @@ f32 obj_lateral_dist_to_home(void) { return dist; } -s32 obj_outside_home_square(f32 halfLength) { +s32 cur_obj_outside_home_square(f32 halfLength) { if (o->oHomeX - halfLength > o->oPosX) { return TRUE; } @@ -1542,7 +1541,7 @@ s32 obj_outside_home_square(f32 halfLength) { return 0; } -s32 obj_outside_home_rectangle(f32 minX, f32 maxX, f32 minZ, f32 maxZ) { +s32 cur_obj_outside_home_rectangle(f32 minX, f32 maxX, f32 minZ, f32 maxZ) { if (o->oHomeX + minX > o->oPosX) { return TRUE; } @@ -1562,20 +1561,20 @@ s32 obj_outside_home_rectangle(f32 minX, f32 maxX, f32 minZ, f32 maxZ) { return FALSE; } -void obj_set_pos_to_home(void) { +void cur_obj_set_pos_to_home(void) { o->oPosX = o->oHomeX; o->oPosY = o->oHomeY; o->oPosZ = o->oHomeZ; } -void obj_set_pos_to_home_and_stop(void) { - obj_set_pos_to_home(); +void cur_obj_set_pos_to_home_and_stop(void) { + cur_obj_set_pos_to_home(); o->oForwardVel = 0; o->oVelY = 0; } -void obj_shake_y(f32 amount) { +void cur_obj_shake_y(f32 amount) { //! Technically could cause a bit of drift, but not much if (o->oTimer % 2 == 0) { o->oPosY += amount; @@ -1584,32 +1583,32 @@ void obj_shake_y(f32 amount) { } } -void obj_start_cam_event(UNUSED struct Object *obj, s32 cameraEvent) { +void cur_obj_start_cam_event(UNUSED struct Object *obj, s32 cameraEvent) { gPlayerCameraState->cameraEvent = (s16) cameraEvent; gSecondCameraFocus = o; } -void Unknown802A11E4(UNUSED s32 sp0, UNUSED s32 sp4, f32 sp8) { +void set_mario_interact_hoot_if_in_range(UNUSED s32 sp0, UNUSED s32 sp4, f32 sp8) { if (o->oDistanceToMario < sp8) { gMarioObject->oInteractStatus = 1; } } -void obj_set_billboard(struct Object *a0) { - a0->header.gfx.node.flags |= GRAPH_RENDER_BILLBOARD; +void obj_set_billboard(struct Object *obj) { + obj->header.gfx.node.flags |= GRAPH_RENDER_BILLBOARD; } -void obj_set_hitbox_radius_and_height(f32 radius, f32 height) { +void cur_obj_set_hitbox_radius_and_height(f32 radius, f32 height) { o->hitboxRadius = radius; o->hitboxHeight = height; } -void obj_set_hurtbox_radius_and_height(f32 radius, f32 height) { +void cur_obj_set_hurtbox_radius_and_height(f32 radius, f32 height) { o->hurtboxRadius = radius; o->hurtboxHeight = height; } -static void spawn_object_loot_coins(struct Object *obj, s32 numCoins, f32 sp30, +static void obj_spawn_loot_coins(struct Object *obj, s32 numCoins, f32 sp30, const BehaviorScript *coinBehavior, s16 posJitter, s16 model) { s32 i; @@ -1630,21 +1629,21 @@ static void spawn_object_loot_coins(struct Object *obj, s32 numCoins, f32 sp30, obj->oNumLootCoins--; coin = spawn_object(obj, model, coinBehavior); - translate_object_xz_random(coin, posJitter); + obj_translate_xz_random(coin, posJitter); coin->oPosY = spawnHeight; coin->oCoinUnk110 = sp30; } } -void spawn_object_loot_blue_coins(struct Object *obj, s32 numCoins, f32 sp28, s16 posJitter) { - spawn_object_loot_coins(obj, numCoins, sp28, bhvBlueCoinJumping, posJitter, MODEL_BLUE_COIN); +void obj_spawn_loot_blue_coins(struct Object *obj, s32 numCoins, f32 sp28, s16 posJitter) { + obj_spawn_loot_coins(obj, numCoins, sp28, bhvBlueCoinJumping, posJitter, MODEL_BLUE_COIN); } -void spawn_object_loot_yellow_coins(struct Object *obj, s32 numCoins, f32 sp28) { - spawn_object_loot_coins(obj, numCoins, sp28, bhvSingleCoinGetsSpawned, 0, MODEL_YELLOW_COIN); +void obj_spawn_loot_yellow_coins(struct Object *obj, s32 numCoins, f32 sp28) { + obj_spawn_loot_coins(obj, numCoins, sp28, bhvSingleCoinGetsSpawned, 0, MODEL_YELLOW_COIN); } -void obj_spawn_loot_coin_at_mario_pos(void) { +void cur_obj_spawn_loot_coin_at_mario_pos(void) { struct Object *coin; if (o->oNumLootCoins <= 0) { return; @@ -1655,10 +1654,10 @@ void obj_spawn_loot_coin_at_mario_pos(void) { coin = spawn_object(o, MODEL_YELLOW_COIN, bhvSingleCoinGetsSpawned); coin->oVelY = 30.0f; - copy_object_pos(coin, gMarioObject); + obj_copy_pos(coin, gMarioObject); } -f32 obj_abs_y_dist_to_home(void) { +f32 cur_obj_abs_y_dist_to_home(void) { f32 dist = o->oHomeY - o->oPosY; if (dist < 0) { @@ -1668,7 +1667,7 @@ f32 obj_abs_y_dist_to_home(void) { return dist; } -s32 Unknown802A1548() { +s32 cur_obj_advance_looping_anim() { s32 spC = o->header.gfx.unk38.animFrame; s32 sp8 = o->header.gfx.unk38.curAnim->unk08; s32 sp4; @@ -1686,7 +1685,7 @@ s32 Unknown802A1548() { return sp4; } -static s32 obj_detect_steep_floor(s16 steepAngleDegrees) { +static s32 cur_obj_detect_steep_floor(s16 steepAngleDegrees) { struct Surface *intendedFloor; f32 intendedX, intendedFloorHeight, intendedZ; f32 deltaFloorHeight; @@ -1713,7 +1712,7 @@ static s32 obj_detect_steep_floor(s16 steepAngleDegrees) { return 0; } -s32 obj_resolve_wall_collisions(void) { +s32 cur_obj_resolve_wall_collisions(void) { s32 numCollisions; struct Surface *wall; struct WallCollisionData collisionData; @@ -1747,8 +1746,8 @@ s32 obj_resolve_wall_collisions(void) { return 0; } -static void obj_update_floor(void) { - struct Surface *floor = obj_update_floor_height_and_get_floor(); +static void cur_obj_update_floor(void) { + struct Surface *floor = cur_obj_update_floor_height_and_get_floor(); o->oFloor = floor; if (floor != NULL) { @@ -1770,7 +1769,7 @@ static void obj_update_floor(void) { } } -static void obj_update_floor_and_resolve_wall_collisions(s16 steepSlopeDegrees) { +static void cur_obj_update_floor_and_resolve_wall_collisions(s16 steepSlopeDegrees) { #ifdef VERSION_JP o->oMoveFlags &= ~OBJ_MOVE_ABOVE_LAVA; #else @@ -1778,7 +1777,7 @@ static void obj_update_floor_and_resolve_wall_collisions(s16 steepSlopeDegrees) #endif if (o->activeFlags & (ACTIVE_FLAG_FAR_AWAY | ACTIVE_FLAG_IN_DIFFERENT_ROOM)) { - obj_update_floor(); + cur_obj_update_floor(); o->oMoveFlags &= ~OBJ_MOVE_MASK_HIT_WALL_OR_IN_WATER; if (o->oPosY > o->oFloorHeight) { @@ -1786,27 +1785,27 @@ static void obj_update_floor_and_resolve_wall_collisions(s16 steepSlopeDegrees) } } else { o->oMoveFlags &= ~OBJ_MOVE_HIT_WALL; - if (obj_resolve_wall_collisions()) { + if (cur_obj_resolve_wall_collisions()) { o->oMoveFlags |= OBJ_MOVE_HIT_WALL; } - obj_update_floor(); + cur_obj_update_floor(); if (o->oPosY > o->oFloorHeight) { o->oMoveFlags |= OBJ_MOVE_IN_AIR; } - if (obj_detect_steep_floor(steepSlopeDegrees)) { + if (cur_obj_detect_steep_floor(steepSlopeDegrees)) { o->oMoveFlags |= OBJ_MOVE_HIT_WALL; } } } -void obj_update_floor_and_walls(void) { - obj_update_floor_and_resolve_wall_collisions(60); +void cur_obj_update_floor_and_walls(void) { + cur_obj_update_floor_and_resolve_wall_collisions(60); } -void obj_move_standard(s16 steepSlopeAngleDegrees) { +void cur_obj_move_standard(s16 steepSlopeAngleDegrees) { f32 gravity = o->oGravity; f32 bounce = o->oBounce; f32 buoyancy = o->oBuoyancy; @@ -1830,11 +1829,11 @@ void obj_move_standard(s16 steepSlopeAngleDegrees) { steepSlopeNormalY = coss(steepSlopeAngleDegrees * (0x10000 / 360)); - obj_compute_vel_xz(); - obj_apply_drag_xz(dragStrength); + cur_obj_compute_vel_xz(); + cur_obj_apply_drag_xz(dragStrength); - obj_move_xz(steepSlopeNormalY, careAboutEdgesAndSteepSlopes); - obj_move_y(gravity, bounce, buoyancy); + cur_obj_move_xz(steepSlopeNormalY, careAboutEdgesAndSteepSlopes); + cur_obj_move_y(gravity, bounce, buoyancy); if (o->oForwardVel < 0) { negativeSpeed = TRUE; @@ -1846,7 +1845,7 @@ void obj_move_standard(s16 steepSlopeAngleDegrees) { } } -static s32 obj_within_12k_bounds(void) { +static s32 cur_obj_within_12k_bounds(void) { if (o->oPosX < -12000.0f || 12000.0f < o->oPosX) { return FALSE; } @@ -1862,8 +1861,8 @@ static s32 obj_within_12k_bounds(void) { return TRUE; } -void obj_move_using_vel_and_gravity(void) { - if (obj_within_12k_bounds()) { +void cur_obj_move_using_vel_and_gravity(void) { + if (cur_obj_within_12k_bounds()) { o->oPosX += o->oVelX; o->oPosZ += o->oVelZ; o->oVelY += o->oGravity; //! No terminal velocity @@ -1871,12 +1870,12 @@ void obj_move_using_vel_and_gravity(void) { } } -void obj_move_using_fvel_and_gravity(void) { - obj_compute_vel_xz(); - obj_move_using_vel_and_gravity(); //! No terminal velocity +void cur_obj_move_using_fvel_and_gravity(void) { + cur_obj_compute_vel_xz(); + cur_obj_move_using_vel_and_gravity(); //! No terminal velocity } -void set_object_pos_relative(struct Object *obj, struct Object *other, f32 dleft, f32 dy, +void obj_set_pos_relative(struct Object *obj, struct Object *other, f32 dleft, f32 dy, f32 dforward) { f32 facingZ = coss(other->oMoveAngleYaw); f32 facingX = sins(other->oMoveAngleYaw); @@ -1891,7 +1890,7 @@ void set_object_pos_relative(struct Object *obj, struct Object *other, f32 dleft obj->oPosZ = other->oPosZ + dz; } -s16 obj_angle_to_home(void) { +s16 cur_obj_angle_to_home(void) { s16 angle; f32 dx = o->oHomeX - o->oPosX; f32 dz = o->oHomeZ - o->oPosZ; @@ -1900,7 +1899,7 @@ s16 obj_angle_to_home(void) { return angle; } -void func_802A2008(struct Object *a0, struct Object *a1) { +void obj_set_gfx_pos_at_obj_pos(struct Object *a0, struct Object *a1) { a0->header.gfx.pos[0] = a1->oPosX; a0->header.gfx.pos[1] = a1->oPosY + a1->oGraphYOffset; a0->header.gfx.pos[2] = a1->oPosZ; @@ -1914,7 +1913,7 @@ void func_802A2008(struct Object *a0, struct Object *a1) { * Transform the vector at localTranslateIndex into the object's local * coordinates, and then add it to the vector at posIndex. */ -void translate_object_local(struct Object *obj, s16 posIndex, s16 localTranslateIndex) { +void obj_translate_local(struct Object *obj, s16 posIndex, s16 localTranslateIndex) { f32 dx = obj->rawData.asF32[localTranslateIndex + 0]; f32 dy = obj->rawData.asF32[localTranslateIndex + 1]; f32 dz = obj->rawData.asF32[localTranslateIndex + 2]; @@ -1927,7 +1926,7 @@ void translate_object_local(struct Object *obj, s16 posIndex, s16 localTranslate obj->transform[0][2] * dx + obj->transform[1][2] * dy + obj->transform[2][2] * dz; } -void build_object_transform_from_pos_and_angle(struct Object *obj, s16 posIndex, s16 angleIndex) { +void obj_build_transform_from_pos_and_angle(struct Object *obj, s16 posIndex, s16 angleIndex) { f32 translate[3]; s16 rotation[3]; @@ -1942,24 +1941,24 @@ void build_object_transform_from_pos_and_angle(struct Object *obj, s16 posIndex, mtxf_rotate_zxy_and_translate(obj->transform, translate, rotation); } -void func_802A2270(struct Object *obj) { +void obj_set_throw_matrix_from_transform(struct Object *obj) { if (obj->oFlags & OBJ_FLAG_0020) { - build_object_transform_from_pos_and_angle(obj, O_POS_INDEX, O_FACE_ANGLE_INDEX); - apply_scale_to_object_transform(obj); + obj_build_transform_from_pos_and_angle(obj, O_POS_INDEX, O_FACE_ANGLE_INDEX); + obj_apply_scale_to_transform(obj); } obj->header.gfx.throwMatrix = obj->transform; //! Sets scale of gCurrentObject instead of obj. Not exploitable since this // function is only called with obj = gCurrentObject - obj_scale(1.0f); + cur_obj_scale(1.0f); } -void build_object_transform_relative_to_parent(struct Object *obj) { +void obj_build_transform_relative_to_parent(struct Object *obj) { struct Object *parent = obj->parentObj; - build_object_transform_from_pos_and_angle(obj, O_PARENT_RELATIVE_POS_INDEX, O_FACE_ANGLE_INDEX); - apply_scale_to_object_transform(obj); + obj_build_transform_from_pos_and_angle(obj, O_PARENT_RELATIVE_POS_INDEX, O_FACE_ANGLE_INDEX); + obj_apply_scale_to_transform(obj); mtxf_mul(obj->transform, obj->transform, parent->transform); obj->oPosX = obj->transform[3][0]; @@ -1970,10 +1969,10 @@ void build_object_transform_relative_to_parent(struct Object *obj) { //! Sets scale of gCurrentObject instead of obj. Not exploitable since this // function is only called with obj = gCurrentObject - obj_scale(1.0f); + cur_obj_scale(1.0f); } -void Unknown802A2380(struct Object *a0) { +void obj_create_transform_from_self(struct Object *a0) { a0->oFlags &= ~OBJ_FLAG_TRANSFORM_RELATIVE_TO_PARENT; a0->oFlags |= OBJ_FLAG_0800; @@ -1982,25 +1981,25 @@ void Unknown802A2380(struct Object *a0) { a0->transform[3][2] = a0->oPosZ; } -void obj_rotate_move_angle_using_vel(void) { +void cur_obj_rotate_move_angle_using_vel(void) { o->oMoveAnglePitch += o->oAngleVelPitch; o->oMoveAngleYaw += o->oAngleVelYaw; o->oMoveAngleRoll += o->oAngleVelRoll; } -void obj_rotate_face_angle_using_vel(void) { +void cur_obj_rotate_face_angle_using_vel(void) { o->oFaceAnglePitch += o->oAngleVelPitch; o->oFaceAngleYaw += o->oAngleVelYaw; o->oFaceAngleRoll += o->oAngleVelRoll; } -void obj_set_face_angle_to_move_angle(void) { +void cur_obj_set_face_angle_to_move_angle(void) { o->oFaceAnglePitch = o->oMoveAnglePitch; o->oFaceAngleYaw = o->oMoveAngleYaw; o->oFaceAngleRoll = o->oMoveAngleRoll; } -s32 obj_follow_path(UNUSED s32 unusedArg) { +s32 cur_obj_follow_path(UNUSED s32 unusedArg) { struct Waypoint *startWaypoint; struct Waypoint *lastWaypoint; struct Waypoint *targetWaypoint; @@ -2064,23 +2063,23 @@ f32 random_f32_around_zero(f32 diameter) { return RandomFloat() * diameter - diameter / 2; } -void scale_object_random(struct Object *obj, f32 rangeLength, f32 minScale) { +void obj_scale_random(struct Object *obj, f32 rangeLength, f32 minScale) { f32 scale = RandomFloat() * rangeLength + minScale; - scale_object_xyz(obj, scale, scale, scale); + obj_scale_xyz(obj, scale, scale, scale); } -void translate_object_xyz_random(struct Object *obj, f32 rangeLength) { +void obj_translate_xyz_random(struct Object *obj, f32 rangeLength) { obj->oPosX += RandomFloat() * rangeLength - rangeLength * 0.5f; obj->oPosY += RandomFloat() * rangeLength - rangeLength * 0.5f; obj->oPosZ += RandomFloat() * rangeLength - rangeLength * 0.5f; } -void translate_object_xz_random(struct Object *obj, f32 rangeLength) { +void obj_translate_xz_random(struct Object *obj, f32 rangeLength) { obj->oPosX += RandomFloat() * rangeLength - rangeLength * 0.5f; obj->oPosZ += RandomFloat() * rangeLength - rangeLength * 0.5f; } -static void func_802A297C(struct Object *a0) { +static void obj_build_vel_from_transform(struct Object *a0) { f32 spC = a0->oUnkC0; f32 sp8 = a0->oUnkBC; f32 sp4 = a0->oForwardVel; @@ -2090,9 +2089,9 @@ static void func_802A297C(struct Object *a0) { a0->oVelZ = a0->transform[0][2] * spC + a0->transform[1][2] * sp8 + a0->transform[2][2] * sp4; } -void func_802A2A38(void) { - build_object_transform_from_pos_and_angle(o, O_PARENT_RELATIVE_POS_INDEX, O_MOVE_ANGLE_INDEX); - func_802A297C(o); +void cur_obj_set_pos_via_transform(void) { + obj_build_transform_from_pos_and_angle(o, O_PARENT_RELATIVE_POS_INDEX, O_MOVE_ANGLE_INDEX); + obj_build_vel_from_transform(o); o->oPosX += o->oVelX; o->oPosY += o->oVelY; o->oPosZ += o->oVelZ; @@ -2157,18 +2156,18 @@ struct Object_test /*0x25C*/ void *respawnInfo; }; -s16 obj_reflect_move_angle_off_wall(void) { +s16 cur_obj_reflect_move_angle_off_wall(void) { s16 angle = ((struct Object_test*)o)->rawData.moving.special.WallAngle - (s16) ((struct Object_test*)o)->rawData.moving.MoveAngleYaw + (s16) ((struct Object_test*)o)->rawData.moving.special.WallAngle +0x8000; return angle; } #else -s16 obj_reflect_move_angle_off_wall(void) { +s16 cur_obj_reflect_move_angle_off_wall(void) { s16 angle = o->oWallAngle - ((s16) o->oMoveAngleYaw - (s16) o->oWallAngle) + 0x8000; return angle; } #endif -void obj_spawn_particles(struct SpawnParticlesInfo *info) { +void cur_obj_spawn_particles(struct SpawnParticlesInfo *info) { struct Object *particle; s32 i; f32 scale; @@ -2199,11 +2198,11 @@ void obj_spawn_particles(struct SpawnParticlesInfo *info) { particle->oForwardVel = RandomFloat() * info->forwardVelRange + info->forwardVelBase; particle->oVelY = RandomFloat() * info->velYRange + info->velYBase; - scale_object_xyz(particle, scale, scale, scale); + obj_scale_xyz(particle, scale, scale, scale); } } -void set_object_hitbox(struct Object *obj, struct ObjectHitbox *hitbox) { +void obj_set_hitbox(struct Object *obj, struct ObjectHitbox *hitbox) { if (!(obj->oFlags & OBJ_FLAG_30)) { obj->oFlags |= OBJ_FLAG_30; @@ -2212,7 +2211,7 @@ void set_object_hitbox(struct Object *obj, struct ObjectHitbox *hitbox) { obj->oHealth = hitbox->health; obj->oNumLootCoins = hitbox->numLootCoins; - obj_become_tangible(); + cur_obj_become_tangible(); } obj->hitboxRadius = obj->header.gfx.scale[0] * hitbox->radius; @@ -2246,7 +2245,7 @@ s32 absi(s32 a0) { } } -s32 obj_wait_then_blink(s32 timeUntilBlinking, s32 numBlinks) { +s32 cur_obj_wait_then_blink(s32 timeUntilBlinking, s32 numBlinks) { s32 done = FALSE; s32 timeBlinking; @@ -2264,7 +2263,7 @@ s32 obj_wait_then_blink(s32 timeUntilBlinking, s32 numBlinks) { return done; } -s32 obj_is_mario_ground_pounding_platform(void) { +s32 cur_obj_is_mario_ground_pounding_platform(void) { if (gMarioObject->platform == o) { if (gMarioStates[0].action == ACT_GROUND_POUND_LAND) { return TRUE; @@ -2274,16 +2273,16 @@ s32 obj_is_mario_ground_pounding_platform(void) { return FALSE; } -void func_802A3004(void) { - func_802AA618(0, 0, 46.0f); +void spawn_mist_particles(void) { + spawn_mist_particles_variable(0, 0, 46.0f); } -void func_802A3034(s32 sp18) { - func_802AA618(0, 0, 46.0f); +void spawn_mist_particles_with_sound(s32 sp18) { + spawn_mist_particles_variable(0, 0, 46.0f); create_sound_spawner(sp18); } -void obj_push_mario_away(f32 radius) { +void cur_obj_push_mario_away(f32 radius) { f32 marioRelX = gMarioObject->oPosX - o->oPosX; f32 marioRelZ = gMarioObject->oPosZ - o->oPosZ; f32 marioDist = sqrtf(sqr(marioRelX) + sqr(marioRelZ)); @@ -2296,7 +2295,7 @@ void obj_push_mario_away(f32 radius) { } } -void obj_push_mario_away_from_cylinder(f32 radius, f32 extentY) { +void cur_obj_push_mario_away_from_cylinder(f32 radius, f32 extentY) { f32 marioRelY = gMarioObject->oPosY - o->oPosY; if (marioRelY < 0) { @@ -2304,33 +2303,33 @@ void obj_push_mario_away_from_cylinder(f32 radius, f32 extentY) { } if (marioRelY < extentY) { - obj_push_mario_away(radius); + cur_obj_push_mario_away(radius); } } -void BehDustSmokeLoop(void) { +void bhv_dust_smoke_loop(void) { o->oPosX += o->oVelX; o->oPosY += o->oVelY; o->oPosZ += o->oVelZ; if (o->oSmokeTimer == 10) { - mark_object_for_deletion(o); + obj_mark_for_deletion(o); } o->oSmokeTimer++; } -static void nop_802A3294(void) { +static void stub_obj_helpers_2(void) { } -s32 func_802A32A4(s8 *a0) { +s32 cur_obj_set_direction_table(s8 *a0) { o->oToxBoxUnk1AC = a0; o->oToxBoxUnk1B0 = 0; return *(s8 *) o->oToxBoxUnk1AC; } -s32 func_802A32E0(void) { +s32 cur_obj_progress_direction_table(void) { s8 spF; s8 *sp8 = o->oToxBoxUnk1AC; s32 sp4 = o->oToxBoxUnk1B0 + 1; @@ -2346,10 +2345,10 @@ s32 func_802A32E0(void) { return spF; } -void nop_802A3380(UNUSED s32 sp0, UNUSED s32 sp4) { +void stub_obj_helpers_3(UNUSED s32 sp0, UNUSED s32 sp4) { } -void func_802A3398(s32 a0, s32 a1, f32 sp10, f32 sp14) { +void cur_obj_scale_over_time(s32 a0, s32 a1, f32 sp10, f32 sp14) { f32 sp4 = sp14 - sp10; f32 sp0 = (f32) o->oTimer / a1; @@ -2366,17 +2365,17 @@ void func_802A3398(s32 a0, s32 a1, f32 sp10, f32 sp14) { } } -void func_802A3470(void) { +void cur_obj_set_pos_to_home_with_debug(void) { o->oPosX = o->oHomeX + gDebugInfo[5][0]; o->oPosY = o->oHomeY + gDebugInfo[5][1]; o->oPosZ = o->oHomeZ + gDebugInfo[5][2]; - obj_scale(gDebugInfo[5][3] / 100.0f + 1.0l); + cur_obj_scale(gDebugInfo[5][3] / 100.0f + 1.0l); } -void nop_802A3544(void) { +void stub_obj_helpers_4(void) { } -s32 obj_is_mario_on_platform(void) { +s32 cur_obj_is_mario_on_platform(void) { if (gMarioObject->platform == o) { return TRUE; } else { @@ -2384,7 +2383,7 @@ s32 obj_is_mario_on_platform(void) { } } -s32 obj_shake_y_until(s32 cycles, s32 amount) { +s32 cur_obj_shake_y_until(s32 cycles, s32 amount) { if (o->oTimer % 2 != 0) { o->oPosY -= amount; } else { @@ -2398,7 +2397,7 @@ s32 obj_shake_y_until(s32 cycles, s32 amount) { } } -s32 func_802A362C(s32 a0) { +s32 cur_obj_move_up_and_down(s32 a0) { if (a0 >= 4 || a0 < 0) { return 1; } @@ -2407,12 +2406,12 @@ s32 func_802A362C(s32 a0) { return 0; } -void obj_call_action_function(void (*actionFunctions[])(void)) { +void cur_obj_call_action_function(void (*actionFunctions[])(void)) { void (*actionFunction)(void) = actionFunctions[o->oAction]; actionFunction(); } -static struct Object *func_802A36D8(s32 sp20, s32 sp24) { +static struct Object *spawn_star_with_no_lvl_exit(s32 sp20, s32 sp24) { struct Object *sp1C = spawn_object(o, MODEL_STAR, bhvSpawnedStarNoLevelExit); sp1C->oSparkleSpawnUnk1B0 = sp24; sp1C->oBehParams = o->oBehParams; @@ -2424,15 +2423,15 @@ static struct Object *func_802A36D8(s32 sp20, s32 sp24) { // old unused initializer for 2d star spawn behavior. // speculation: was 2d spawn handler from spaceworld 1995. // uses behavior parameters not used in the current sparkle code. -void Unknown802A3750(void) { - func_802A36D8(0, 0); +void spawn_base_star_with_no_lvl_exit(void) { + spawn_star_with_no_lvl_exit(0, 0); } -s32 func_802A377C(s32 a0) { +s32 bit_shift_left(s32 a0) { return D_8032F0A4[a0]; } -s32 obj_mario_far_away(void) { +s32 cur_obj_mario_far_away(void) { f32 dx = o->oHomeX - gMarioObject->oPosX; f32 dy = o->oHomeY - gMarioObject->oPosY; f32 dz = o->oHomeZ - gMarioObject->oPosZ; @@ -2445,7 +2444,7 @@ s32 obj_mario_far_away(void) { } } -s32 obj_is_mario_moving_fast_or_in_air(s32 speedThreshold) { +s32 is_mario_moving_fast_or_in_air(s32 speedThreshold) { if (gMarioStates[0].forwardVel > speedThreshold) { return TRUE; } @@ -2457,7 +2456,7 @@ s32 obj_is_mario_moving_fast_or_in_air(s32 speedThreshold) { } } -s32 item_in_array(s8 item, s8 *array) { +s32 is_item_in_array(s8 item, s8 *array) { while (*array != -1) { if (*array == item) { return TRUE; @@ -2469,14 +2468,14 @@ s32 item_in_array(s8 item, s8 *array) { return FALSE; } -static void nop_802A3968(void) { +static void stub_obj_helpers_5(void) { } void bhv_init_room(void) { struct Surface *floor; f32 floorHeight; - if (item_in_array(gCurrLevelNum, sLevelsWithRooms)) { + if (is_item_in_array(gCurrLevelNum, sLevelsWithRooms)) { floorHeight = find_floor(o->oPosX, o->oPosY, o->oPosZ, &floor); if (floor != NULL) { @@ -2497,7 +2496,7 @@ void bhv_init_room(void) { } } -void obj_enable_rendering_if_mario_in_room(void) { +void cur_obj_enable_rendering_if_mario_in_room(void) { register s32 marioInRoom; if (o->oRoom != -1 && gMarioCurrentRoom != 0) { @@ -2512,21 +2511,21 @@ void obj_enable_rendering_if_mario_in_room(void) { } if (marioInRoom) { - obj_enable_rendering(); + cur_obj_enable_rendering(); o->activeFlags &= ~ACTIVE_FLAG_IN_DIFFERENT_ROOM; gNumRoomedObjectsInMarioRoom++; } else { - obj_disable_rendering(); + cur_obj_disable_rendering(); o->activeFlags |= ACTIVE_FLAG_IN_DIFFERENT_ROOM; gNumRoomedObjectsNotInMarioRoom++; } } } -s32 obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deathSound, s32 noLootCoins) { +s32 cur_obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deathSound, s32 noLootCoins) { s32 interacted = FALSE; - set_object_hitbox(o, hitbox); + obj_set_hitbox(o, hitbox); if (noLootCoins) { o->oNumLootCoins = 0; @@ -2534,9 +2533,9 @@ s32 obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deathSou if (o->oInteractStatus & INT_STATUS_INTERACTED) { if (o->oInteractStatus & INT_STATUS_WAS_ATTACKED) { - func_802A3004(); - spawn_object_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); - mark_object_for_deletion(o); + spawn_mist_particles(); + obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); + obj_mark_for_deletion(o); create_sound_spawner(deathSound); } else { interacted = TRUE; @@ -2547,39 +2546,40 @@ s32 obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deathSou return interacted; } -void func_802A3C98(f32 sp18, s32 sp1C) { - func_802AA618(0, 0, sp18); + +void obj_explode_and_spawn_coins(f32 sp18, s32 sp1C) { + spawn_mist_particles_variable(0, 0, sp18); spawn_triangle_break_particles(30, 138, 3.0f, 4); - mark_object_for_deletion(o); + obj_mark_for_deletion(o); if (sp1C == 1) { - spawn_object_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); + obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); } else if (sp1C == 2) { - spawn_object_loot_blue_coins(o, o->oNumLootCoins, 20.0f, 150); + obj_spawn_loot_blue_coins(o, o->oNumLootCoins, 20.0f, 150); } } -void set_object_collision_data(struct Object *obj, const void *segAddr) { +void obj_set_collision_data(struct Object *obj, const void *segAddr) { obj->collisionData = segmented_to_virtual(segAddr); } -void obj_if_hit_wall_bounce_away(void) { +void cur_obj_if_hit_wall_bounce_away(void) { if (o->oMoveFlags & OBJ_MOVE_HIT_WALL) { o->oMoveAngleYaw = o->oWallAngle; } } -s32 obj_hide_if_mario_far_away_y(f32 distY) { +s32 cur_obj_hide_if_mario_far_away_y(f32 distY) { if (absf(o->oPosY - gMarioObject->oPosY) < distY) { - obj_unhide(); + cur_obj_unhide(); return FALSE; } else { - obj_hide(); + cur_obj_hide(); return TRUE; } } -Gfx *Geo18_802A45E4(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { +Gfx *geo_offset_klepto_held_object(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { if (run == TRUE) { ((struct GraphNodeTranslationRotation *) node->next)->translation[0] = 300; ((struct GraphNodeTranslationRotation *) node->next)->translation[1] = 300; @@ -2589,7 +2589,7 @@ Gfx *Geo18_802A45E4(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { return NULL; } -s32 Unknown802A3E84(s32 a0, struct GraphNode *a1, UNUSED s32 sp8) { +s32 geo_offset_klepto_debug(s32 a0, struct GraphNode *a1, UNUSED s32 sp8) { if (a0 == 1) { ((struct GraphNode_802A45E4 *) a1->next)->unk18 = gDebugInfo[4][0]; ((struct GraphNode_802A45E4 *) a1->next)->unk1A = gDebugInfo[4][1]; @@ -2602,8 +2602,8 @@ s32 Unknown802A3E84(s32 a0, struct GraphNode *a1, UNUSED s32 sp8) { return 0; } -s32 obj_is_hidden(struct Object *a0) { - if (a0->header.gfx.node.flags & GRAPH_RENDER_INVISIBLE) { +s32 obj_is_hidden(struct Object *obj) { + if (obj->header.gfx.node.flags & GRAPH_RENDER_INVISIBLE) { return TRUE; } else { return FALSE; @@ -2626,13 +2626,13 @@ void clear_time_stop_flags(s32 flag) { gTimeStopState = gTimeStopState & (flag ^ 0xFFFFFFFF); } -s32 func_802A3FF8(f32 radius, f32 height, UNUSED s32 unused) { +s32 cur_obj_can_mario_activate_textbox(f32 radius, f32 height, UNUSED s32 unused) { f32 latDistToMario; UNUSED s16 angleFromMario; if (o->oDistanceToMario < 1500.0f) { latDistToMario = lateral_dist_between_objects(o, gMarioObject); - angleFromMario = angle_to_object(gMarioObject, o); + angleFromMario = obj_angle_to_object(gMarioObject, o); if (latDistToMario < radius && o->oPosY < gMarioObject->oPosY + 160.0f && gMarioObject->oPosY < o->oPosY + height && !(gMarioStates[0].action & ACT_FLAG_AIR) @@ -2644,11 +2644,12 @@ s32 func_802A3FF8(f32 radius, f32 height, UNUSED s32 unused) { return FALSE; } -s32 obj_is_mario_in_range_and_ready_to_speak(f32 radius, f32 height) { - return func_802A3FF8(radius, height, 0x1000); +s32 cur_obj_can_mario_activate_textbox_2(f32 radius, f32 height) { + // The last argument here is unused. When this function is called directly the argument is always set to 0x7FFF. + return cur_obj_can_mario_activate_textbox(radius, height, 0x1000); } -static void obj_end_dialog(s32 dialogFlags, s32 dialogResult) { +static void cur_obj_end_dialog(s32 dialogFlags, s32 dialogResult) { o->oDialogResponse = dialogResult; o->oDialogState++; @@ -2657,7 +2658,7 @@ static void obj_end_dialog(s32 dialogFlags, s32 dialogResult) { } } -s32 obj_update_dialog(s32 actionArg, s32 dialogFlags, s32 dialogID, UNUSED s32 unused) { +s32 cur_obj_update_dialog(s32 actionArg, s32 dialogFlags, s32 dialogID, UNUSED s32 unused) { s32 dialogResponse = 0; UNUSED s32 doneTurning = TRUE; @@ -2706,14 +2707,14 @@ s32 obj_update_dialog(s32 actionArg, s32 dialogFlags, s32 dialogID, UNUSED s32 u case DIALOG_UNK1_AWAIT_DIALOG: if (dialogFlags & DIALOG_UNK1_FLAG_RESPONSE) { if (gDialogResponse != 0) { - obj_end_dialog(dialogFlags, gDialogResponse); + cur_obj_end_dialog(dialogFlags, gDialogResponse); } } else if (dialogFlags & DIALOG_UNK1_FLAG_DEFAULT) { if (get_dialog_id() == -1) { - obj_end_dialog(dialogFlags, 3); + cur_obj_end_dialog(dialogFlags, 3); } } else { - obj_end_dialog(dialogFlags, 3); + cur_obj_end_dialog(dialogFlags, 3); } break; @@ -2734,7 +2735,7 @@ s32 obj_update_dialog(s32 actionArg, s32 dialogFlags, s32 dialogID, UNUSED s32 u return dialogResponse; } -s32 obj_update_dialog_with_cutscene(s32 actionArg, s32 dialogFlags, s32 cutsceneTable, s32 dialogID) { +s32 cur_obj_update_dialog_with_cutscene(s32 actionArg, s32 dialogFlags, s32 cutsceneTable, s32 dialogID) { s32 dialogResponse = 0; s32 doneTurning = TRUE; @@ -2768,7 +2769,7 @@ s32 obj_update_dialog_with_cutscene(s32 actionArg, s32 dialogFlags, s32 cutscene case DIALOG_UNK2_TURN_AND_INTERRUPT_MARIO_ACTION: if (dialogFlags & DIALOG_UNK2_FLAG_0) { - doneTurning = obj_rotate_yaw_toward(angle_to_object(o, gMarioObject), 0x800); + doneTurning = cur_obj_rotate_yaw_toward(obj_angle_to_object(o, gMarioObject), 0x800); if (o->oDialogResponse >= 0x21) { doneTurning = TRUE; } @@ -2812,15 +2813,15 @@ s32 obj_update_dialog_with_cutscene(s32 actionArg, s32 dialogFlags, s32 cutscene return dialogResponse; } -s32 obj_has_model(u16 a0) { - if (o->header.gfx.sharedChild == gLoadedGraphNodes[a0]) { +s32 cur_obj_has_model(u16 modelID) { + if (o->header.gfx.sharedChild == gLoadedGraphNodes[modelID]) { return TRUE; } else { return FALSE; } } -void obj_align_gfx_with_floor(void) { +void cur_obj_align_gfx_with_floor(void) { struct Surface *floor; Vec3f floorNormal; Vec3f position; @@ -2852,11 +2853,11 @@ s32 mario_is_within_rectangle(s16 minX, s16 maxX, s16 minZ, s16 maxZ) { return TRUE; } -void ShakeScreen(s32 shake) { +void cur_obj_shake_screen(s32 shake) { set_camera_shake_from_point(shake, o->oPosX, o->oPosY, o->oPosZ); } -s32 attack_collided_non_mario_object(struct Object *obj) { +s32 obj_attack_collided_from_other_object(struct Object *obj) { s32 numCollidedObjs; struct Object *other; s32 touchedOtherObject = FALSE; @@ -2875,7 +2876,7 @@ s32 attack_collided_non_mario_object(struct Object *obj) { return touchedOtherObject; } -s32 obj_was_attacked_or_ground_pounded(void) { +s32 cur_obj_was_attacked_or_ground_pounded(void) { s32 attacked = FALSE; if ((o->oInteractStatus & INT_STATUS_INTERACTED) @@ -2883,7 +2884,7 @@ s32 obj_was_attacked_or_ground_pounded(void) { attacked = TRUE; } - if (obj_is_mario_ground_pounding_platform()) { + if (cur_obj_is_mario_ground_pounding_platform()) { attacked = TRUE; } @@ -2891,30 +2892,30 @@ s32 obj_was_attacked_or_ground_pounded(void) { return attacked; } -void copy_object_behavior_params(struct Object *dst, struct Object *src) { +void obj_copy_behavior_params(struct Object *dst, struct Object *src) { dst->oBehParams = src->oBehParams; dst->oBehParams2ndByte = src->oBehParams2ndByte; } -void func_802A4A70(s32 sp18, s32 sp1C) { - set_obj_animation_and_sound_state(sp18); - o->header.gfx.unk38.animFrame = sp1C; +void cur_obj_init_animation_and_anim_frame(s32 animIndex, s32 animFrame) { + cur_obj_init_animation_with_sound(animIndex); + o->header.gfx.unk38.animFrame = animFrame; } -s32 func_802A4AB0(s32 sp18) { - set_obj_animation_and_sound_state(sp18); - return func_8029F788(); +s32 cur_obj_init_animation_and_check_if_near_end(s32 animIndex) { + cur_obj_init_animation_with_sound(animIndex); + return cur_obj_check_if_near_animation_end(); } -void func_802A4AEC(s32 sp18) { - set_obj_animation_and_sound_state(sp18); - func_8029F728(); +void cur_obj_init_animation_and_extend_if_at_end(s32 animIndex) { + cur_obj_init_animation_with_sound(animIndex); + cur_obj_extend_animation_if_at_end(); } -s32 obj_check_grabbed_mario(void) { +s32 cur_obj_check_grabbed_mario(void) { if (o->oInteractStatus & INT_STATUS_GRABBED_MARIO) { o->oKingBobombUnk88 = 1; - obj_become_intangible(); + cur_obj_become_intangible(); return TRUE; } @@ -2963,9 +2964,9 @@ s32 player_performed_grab_escape_action(void) { } #endif -void obj_unused_play_footstep_sound(s32 animFrame1, s32 animFrame2, s32 sound) { - if (obj_check_anim_frame(animFrame1) || obj_check_anim_frame(animFrame2)) { - PlaySound2(sound); +void cur_obj_unused_play_footstep_sound(s32 animFrame1, s32 animFrame2, s32 sound) { + if (cur_obj_check_anim_frame(animFrame1) || cur_obj_check_anim_frame(animFrame2)) { + cur_obj_play_sound_2(sound); } } @@ -2979,7 +2980,7 @@ void disable_time_stop_including_mario(void) { o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP; } -s32 obj_check_interacted(void) { +s32 cur_obj_check_interacted(void) { if (o->oInteractStatus & INT_STATUS_INTERACTED) { o->oInteractStatus = 0; return TRUE; @@ -2988,7 +2989,7 @@ s32 obj_check_interacted(void) { } } -void obj_spawn_loot_blue_coin(void) { +void cur_obj_spawn_loot_blue_coin(void) { if (o->oNumLootCoins >= 5) { spawn_object(o, MODEL_BLUE_COIN, bhvMrIBlueCoin); o->oNumLootCoins -= 5; @@ -2996,10 +2997,10 @@ void obj_spawn_loot_blue_coin(void) { } #ifndef VERSION_JP -void obj_spawn_star_at_y_offset(f32 targetX, f32 targetY, f32 targetZ, f32 offsetY) { +void cur_obj_spawn_star_at_y_offset(f32 targetX, f32 targetY, f32 targetZ, f32 offsetY) { f32 objectPosY = o->oPosY; o->oPosY += offsetY + gDebugInfo[5][0]; - create_star(targetX, targetY, targetZ); + spawn_default_star(targetX, targetY, targetZ); o->oPosY = objectPosY; } #endif diff --git a/src/game/object_helpers.h b/src/game/object_helpers.h index b2eee9a..56c75a8 100644 --- a/src/game/object_helpers.h +++ b/src/game/object_helpers.h @@ -14,21 +14,21 @@ struct ChainSegment s16 roll; }; -#define WATER_SPLASH_FLAG_RAND_ANGLE 0x02 -#define WATER_SPLASH_FLAG_RAND_OFFSET_XZ 0x04 -#define WATER_SPLASH_FLAG_RAND_OFFSET_XYZ 0x08 -#define WATER_SPLASH_FLAG_SET_Y_TO_WATER_LEVEL 0x20 -#define WATER_SPLASH_FLAG_RAND_ANGLE_INCR_PLUS_8000 0x40 -#define WATER_SPLASH_FLAG_RAND_ANGLE_INCR 0x80 +#define WATER_DROPLET_FLAG_RAND_ANGLE 0x02 +#define WATER_DROPLET_FLAG_RAND_OFFSET_XZ 0x04 // Unused +#define WATER_DROPLET_FLAG_RAND_OFFSET_XYZ 0x08 // Unused +#define WATER_DROPLET_FLAG_SET_Y_TO_WATER_LEVEL 0x20 +#define WATER_DROPLET_FLAG_RAND_ANGLE_INCR_PLUS_8000 0x40 +#define WATER_DROPLET_FLAG_RAND_ANGLE_INCR 0x80 // Unused -// Call spawn_water_splash with this struct to spawn an object. -struct WaterSplashParams +// Call spawn_water_droplet with this struct to spawn an object. +struct WaterDropletParams { - s16 flags; // spawn flags, see WATER_SPLASH_FLAG_* defines above + s16 flags; // Droplet spawn flags, see defines above s16 model; const BehaviorScript *behavior; - s16 moveAngleRange; // only used for flags 0x40 & 0x80 - s16 moveRange; // only used for flags 0x04 & 0x08 + s16 moveAngleRange; // Only used for RAND_ANGLE_INCR flags + s16 moveRange; // Only used for RAND_OFFSET flags f32 randForwardVelOffset; f32 randForwardVelScale; f32 randYVelOffset; @@ -120,7 +120,7 @@ extern void* D_060576FC; // extern ? D_8032F738; // extern ? D_8032F728; // extern ? D_8032F754; -extern s8 dddStatus; +extern s8 gDddPaintingStatus; // extern ? D_8035FEE8; // extern ? sCageUkikiPath; // extern ? sUkikiActions; @@ -164,8 +164,8 @@ extern s8 dddStatus; // extern ? D_80336704; // extern ? D_8033670C; -extern Gfx *Geo18_8029D890(s32 run, UNUSED struct GraphNode *node, f32 mtx[4][4]); -extern Gfx *Geo18_8029D924(s32 run, struct GraphNode *node, UNUSED void *context); +extern Gfx *geo_update_projectile_pos_from_parent(s32 run, UNUSED struct GraphNode *node, f32 mtx[4][4]); +extern Gfx *geo_update_layer_transparency(s32 run, struct GraphNode *node, UNUSED void *context); #ifdef AVOID_UB extern Gfx *geo_switch_anim_state(s32 run, struct GraphNode *node, void *context); extern Gfx *geo_switch_area(s32 run, struct GraphNode *node, void *context); @@ -173,163 +173,163 @@ extern Gfx *geo_switch_area(s32 run, struct GraphNode *node, void *context); extern Gfx *geo_switch_anim_state(s32 run, struct GraphNode *node); extern Gfx *geo_switch_area(s32 run, struct GraphNode *node); #endif -extern void func_8029D558(Mat4, struct Object *); -void apply_object_scale_to_matrix(struct Object *, Mat4, Mat4); -extern void func_8029D704(Mat4,Mat4,Mat4); -void set_object_held_state(struct Object *, const BehaviorScript *); +extern void obj_update_pos_from_parent_transformation(Mat4, struct Object *); +void obj_apply_scale_to_matrix(struct Object *, Mat4, Mat4); +extern void create_transformation_from_matrices(Mat4,Mat4,Mat4); +void obj_set_held_state(struct Object *, const BehaviorScript *); extern f32 lateral_dist_between_objects(struct Object *, struct Object *); extern f32 dist_between_objects(struct Object *, struct Object *); -extern void obj_forward_vel_approach_upward(f32,f32); +extern void cur_obj_forward_vel_approach_upward(f32,f32); extern s32 approach_f32_signed(f32*,f32,f32); extern f32 approach_f32_symmetric(f32,f32,f32); extern s16 approach_s16_symmetric(s16 arg0, s16 arg1, s16 arg2); -extern s32 obj_rotate_yaw_toward(s16,s16); -extern s16 angle_to_object(struct Object *, struct Object *); +extern s32 cur_obj_rotate_yaw_toward(s16,s16); +extern s16 obj_angle_to_object(struct Object *, struct Object *); extern s16 obj_turn_toward_object(struct Object *, struct Object *, s16, s16); -extern void set_object_parent_relative_pos(struct Object*,s16,s16,s16); -extern void set_object_pos(struct Object*,s16,s16,s16); -extern void set_object_angle(struct Object*,s16,s16,s16); +extern void obj_set_parent_relative_pos(struct Object*,s16,s16,s16); +extern void obj_set_pos(struct Object*,s16,s16,s16); +extern void obj_set_angle(struct Object*,s16,s16,s16); extern struct Object *spawn_object_abs_with_rot(struct Object *, s16, u32, const BehaviorScript *, s16, s16, s16, s16, s16, s16); extern struct Object *spawn_object_rel_with_rot(struct Object *sp20, u32 sp24, const BehaviorScript *sp28, s16 sp2E, s16 sp32, s16 sp36, s16 sp3A, s16 sp3E, s16 sp42); -// extern ? Unknown8029E330(?); -extern struct Object *spawn_water_splash(struct Object *, struct WaterSplashParams *); +// extern ? spawn_obj_with_transform_flags(?); +extern struct Object *spawn_water_droplet(struct Object *, struct WaterDropletParams *); extern struct Object *spawn_object_at_origin(struct Object *, s32, u32, const BehaviorScript *); extern struct Object *spawn_object(struct Object *, s32, const BehaviorScript *); extern struct Object* try_to_spawn_object(s16,f32,struct Object*,s32,const BehaviorScript *); extern struct Object* spawn_object_with_scale(struct Object*,s32,const BehaviorScript *,f32); -// extern ? build_relative_object_transform(?); +// extern ? obj_build_relative_transform(?); extern struct Object* spawn_object_relative(s16, s16, s16, s16, struct Object *, s32, const BehaviorScript *); extern struct Object* spawn_object_relative_with_scale(s16,s16,s16,s16,f32,struct Object *,s32,const BehaviorScript *); -// extern ? obj_move_using_vel(?); -extern void copy_object_graph_y_offset(struct Object*,struct Object*); -extern void copy_object_pos_and_angle(struct Object *, struct Object *); -extern void copy_object_pos(struct Object*,struct Object*); -// extern ? copy_object_angle(?); -extern void func_8029EA0C(struct Object*); -// extern ? Unknown8029EA34(?); +// extern ? cur_obj_move_using_vel(?); +extern void obj_copy_graph_y_offset(struct Object*,struct Object*); +extern void obj_copy_pos_and_angle(struct Object *, struct Object *); +extern void obj_copy_pos(struct Object*,struct Object*); +// extern ? obj_copy_angle(?); +extern void obj_set_gfx_pos_from_pos(struct Object*); +// extern ? spawn_obj_with_transform_flags(?); extern void linear_mtxf_mul_vec3f(f32 [4][4], Vec3f, Vec3f); extern void linear_mtxf_transpose_mul_vec3f(f32 [4][4], Vec3f, Vec3f); -// extern ? apply_scale_to_object_transform(?); -void copy_object_scale(struct Object *toObj, struct Object *fromObj); -extern void scale_object_xyz(struct Object* obj, f32 xScale, f32 yScale, f32 zScale); -extern void scale_object(struct Object *, f32); -extern void obj_scale(f32); -extern void set_obj_animation_and_sound_state(s32); -extern void func_8029ED98(u32, f32); -extern void SetObjAnimation(s32 arg0); -void func_8029EE20(struct Object *a0, struct Animation **a1, u32 a2); +// extern ? obj_apply_scale_to_transform(?); +void obj_copy_scale(struct Object *toObj, struct Object *fromObj); +extern void obj_scale_xyz(struct Object* obj, f32 xScale, f32 yScale, f32 zScale); +extern void obj_scale(struct Object *, f32); +extern void cur_obj_scale(f32); +extern void cur_obj_init_animation_with_sound(s32); +extern void cur_obj_init_animation_with_accel_and_sound(s32, f32); +extern void cur_obj_init_animation(s32 arg0); +void obj_init_animation_with_sound(struct Object *a0, struct Animation **a1, s32 a2); // extern ? obj_enable_rendering_and_become_tangible(?); -extern void obj_enable_rendering(void); +extern void cur_obj_enable_rendering(void); // extern ? obj_disable_rendering_and_become_intangible(?); -extern void obj_disable_rendering(void); -extern void obj_unhide(void); -extern void obj_hide(void); -extern void obj_set_pos_relative(struct Object *MarioObj, f32, f32, f32); -// extern ? obj_set_pos_relative_to_parent(?); -extern void obj_enable_rendering_2(void); +extern void cur_obj_disable_rendering(void); +extern void cur_obj_unhide(void); +extern void cur_obj_hide(void); +extern void cur_obj_set_pos_relative(struct Object *MarioObj, f32, f32, f32); +// extern ? cur_obj_set_pos_relative_to_parent(?); +extern void cur_obj_enable_rendering_2(void); // extern ? obj_unused_init_on_floor(?); -extern void obj_set_facing_to_move_angles(struct Object *); +extern void obj_set_face_angle_to_move_angle(struct Object *); u32 get_object_list_from_behavior(const BehaviorScript *behavior); -extern struct Object *obj_nearest_object_with_behavior(const BehaviorScript *); -f32 obj_dist_to_nearest_object_with_behavior(const BehaviorScript*); -extern struct Object *obj_find_nearest_object_with_behavior(const BehaviorScript *, f32 *); +extern struct Object *cur_obj_nearest_object_with_behavior(const BehaviorScript *); +f32 cur_obj_dist_to_nearest_object_with_behavior(const BehaviorScript*); +extern struct Object *cur_obj_find_nearest_object_with_behavior(const BehaviorScript *, f32 *); extern struct Object *find_unimportant_object(void); // extern ? count_unimportant_objects(?); extern s32 count_objects_with_behavior(const BehaviorScript *behavior); -struct Object* obj_find_nearby_held_actor(const BehaviorScript *,f32); +struct Object* cur_obj_find_nearby_held_actor(const BehaviorScript *,f32); // extern ? obj_reset_timer_and_subaction(?); -void obj_change_action(s32); -void func_8029F684(f32,f32); -BAD_RETURN(s16) func_8029F6F0(void); -extern BAD_RETURN(s32) func_8029F728(void); -extern s32 func_8029F788(void); -extern s32 func_8029F828(void); -extern s32 obj_check_anim_frame(s32); -extern s32 obj_check_anim_frame_in_range(s32, s32); -// extern ? Unknown8029F930(?); +void cur_obj_change_action(s32); +void cur_obj_set_vel_from_mario_vel(f32,f32); +BAD_RETURN(s16) cur_obj_reverse_animation(void); +extern BAD_RETURN(s32) cur_obj_extend_animation_if_at_end(void); +extern s32 cur_obj_check_if_near_animation_end(void); +extern s32 cur_obj_check_if_at_animation_end(void); +extern s32 cur_obj_check_anim_frame(s32); +extern s32 cur_obj_check_anim_frame_in_range(s32, s32); +// extern ? cur_obj_check_frame_prior_current_frame(?); s32 mario_is_in_air_action(void); s32 mario_is_dive_sliding(void); -void func_8029FA1C(f32,s32); -void func_8029FA5C(s32,s32); +void cur_obj_set_y_vel_and_animation(f32,s32); +void cur_obj_unrender_and_reset_state(s32,s32); // extern ? obj_move_after_thrown_or_dropped(?); -void obj_get_thrown_or_placed(f32,f32,s32); -extern void obj_get_dropped(void); -extern void obj_set_model(s32); +void cur_obj_get_thrown_or_placed(f32,f32,s32); +extern void cur_obj_get_dropped(void); +extern void cur_obj_set_model(s32); // extern ? mario_set_flag(?); -s32 obj_clear_interact_status_flag(s32); -extern void mark_object_for_deletion(struct Object *); -void obj_disable(void); -extern void obj_become_intangible(void); -extern void obj_become_tangible(void); -void make_object_tangible(struct Object*); -void obj_update_floor_height(void); -struct Surface* obj_update_floor_height_and_get_floor(void); +s32 cur_obj_clear_interact_status_flag(s32); +extern void obj_mark_for_deletion(struct Object *); +void cur_obj_disable(void); +extern void cur_obj_become_intangible(void); +extern void cur_obj_become_tangible(void); +extern void obj_become_tangible(struct Object*); +void cur_obj_update_floor_height(void); +struct Surface* cur_obj_update_floor_height_and_get_floor(void); // extern ? apply_drag_to_value(?); -void obj_apply_drag_xz(f32); -// extern ? obj_move_xz(?); -// extern ? obj_move_update_underwater_flags(?); -// extern ? obj_move_update_ground_air_flags(?); -// extern ? obj_move_y_and_get_water_level(?); -void obj_move_y(f32,f32,f32); +void cur_obj_apply_drag_xz(f32); +// extern ? cur_obj_move_xz(?); +// extern ? cur_obj_move_update_underwater_flags(?); +// extern ? cur_obj_move_update_ground_air_flags(?); +// extern ? cur_obj_move_y_and_get_water_level(?); +void cur_obj_move_y(f32,f32,f32); // extern ? clear_move_flag(?); -// extern ? obj_unused_resolve_wall_collisions(?); +// extern ? cur_obj_unused_resolve_wall_collisions(?); extern s16 abs_angle_diff(s16, s16); -extern void obj_move_xz_using_fvel_and_yaw(void); -extern void obj_move_y_with_terminal_vel(void); -void obj_compute_vel_xz(void); -f32 func_802A0BF4(f32,f32,f32,f32); -extern s32 are_objects_collided(struct Object *, struct Object *); -void obj_set_behavior(const BehaviorScript *); -void set_object_behavior(struct Object *, const BehaviorScript *); -extern s32 obj_has_behavior(const BehaviorScript *); -s32 object_has_behavior(struct Object *, const BehaviorScript *); -f32 obj_lateral_dist_from_mario_to_home(void); -extern f32 obj_lateral_dist_to_home(void); +extern void cur_obj_move_xz_using_fvel_and_yaw(void); +extern void cur_obj_move_y_with_terminal_vel(void); +void cur_obj_compute_vel_xz(void); +f32 increment_velocity_toward_range(f32,f32,f32,f32); +extern s32 obj_check_if_collided_with_object(struct Object *, struct Object *); +void cur_obj_set_behavior(const BehaviorScript *); +void obj_set_behavior(struct Object *, const BehaviorScript *); +extern s32 cur_obj_has_behavior(const BehaviorScript *); +s32 obj_has_behavior(struct Object *, const BehaviorScript *); +f32 cur_obj_lateral_dist_from_mario_to_home(void); +extern f32 cur_obj_lateral_dist_to_home(void); // extern ? obj_outside_home_square(?); // extern ? obj_outside_home_rectangle(?); -extern void obj_set_pos_to_home(void); -void obj_set_pos_to_home_and_stop(void); -extern void obj_shake_y(f32); -void obj_start_cam_event(struct Object *obj, s32 cameraEvent); -// extern ? Unknown802A11E4(?); +extern void cur_obj_set_pos_to_home(void); +void cur_obj_set_pos_to_home_and_stop(void); +extern void cur_obj_shake_y(f32); +void cur_obj_start_cam_event(struct Object *obj, s32 cameraEvent); +// extern ? set_mario_interact_hoot_if_in_range(?); void obj_set_billboard(struct Object *a0); -void obj_set_hitbox_radius_and_height(f32,f32); -void obj_set_hurtbox_radius_and_height(f32,f32); -// extern ? spawn_object_loot_coins(?); -// extern ? spawn_object_loot_blue_coins(?); -extern void spawn_object_loot_yellow_coins(struct Object *, s32, f32); -void obj_spawn_loot_coin_at_mario_pos(void); +void cur_obj_set_hitbox_radius_and_height(f32,f32); +void cur_obj_set_hurtbox_radius_and_height(f32,f32); +// extern ? obj_spawn_loot_coins(?); +// extern ? obj_spawn_loot_blue_coins(?); +extern void obj_spawn_loot_yellow_coins(struct Object *, s32, f32); +void cur_obj_spawn_loot_coin_at_mario_pos(void); // extern ? obj_abs_y_dist_to_home(?); -// extern ? Unknown802A1548(?); +// extern ? cur_obj_advance_looping_anim(?); // extern ? obj_detect_steep_floor(?); -s32 obj_resolve_wall_collisions(void); +s32 cur_obj_resolve_wall_collisions(void); // extern ? obj_update_floor(?); // extern ? obj_update_floor_and_resolve_wall_collisions(?); -extern void obj_update_floor_and_walls(void); -extern void obj_move_standard(s16); +extern void cur_obj_update_floor_and_walls(void); +extern void cur_obj_move_standard(s16); // extern ? obj_within_12k_bounds(?); -void obj_move_using_vel_and_gravity(void); -void obj_move_using_fvel_and_gravity(void); +void cur_obj_move_using_vel_and_gravity(void); +void cur_obj_move_using_fvel_and_gravity(void); // extern ? set_object_pos_relative(?); -s16 obj_angle_to_home(void); -void func_802A2008(struct Object*,struct Object*); -extern void translate_object_local(struct Object*,s16,s16); -extern void build_object_transform_from_pos_and_angle(struct Object *, s16, s16); -extern void func_802A2270(struct Object *); -extern void build_object_transform_relative_to_parent(struct Object *); -// extern ? Unknown802A2380(?); +s16 cur_obj_angle_to_home(void); +void obj_set_gfx_pos_at_obj_pos(struct Object*,struct Object*); +extern void obj_translate_local(struct Object*,s16,s16); +extern void obj_build_transform_from_pos_and_angle(struct Object *, s16, s16); +extern void obj_set_throw_matrix_from_transform(struct Object *); +extern void obj_build_transform_relative_to_parent(struct Object *); +// extern ? obj_create_transform_from_self(?); // extern ? obj_rotate_move_angle_using_vel(?); -void obj_rotate_face_angle_using_vel(void); +void cur_obj_rotate_face_angle_using_vel(void); // extern ? obj_set_face_angle_to_move_angle(?); -extern s32 obj_follow_path(UNUSED s32); +extern s32 cur_obj_follow_path(UNUSED s32); extern void chain_segment_init(struct ChainSegment *); extern f32 random_f32_around_zero(f32); -void scale_object_random(struct Object*,f32,f32); -extern void translate_object_xyz_random(struct Object *, f32); -extern void translate_object_xz_random(struct Object *, f32); -// extern ? func_802A297C(?); -void func_802A2A38(void); -void obj_spawn_particles(struct SpawnParticlesInfo *sp28); -extern s16 obj_reflect_move_angle_off_wall(void); +void obj_scale_random(struct Object*,f32,f32); +extern void obj_translate_xyz_random(struct Object *, f32); +extern void obj_translate_xz_random(struct Object *, f32); +// extern ? obj_build_vel_from_transform(?); +void cur_obj_set_pos_via_transform(void); +void cur_obj_spawn_particles(struct SpawnParticlesInfo *sp28); +extern s16 cur_obj_reflect_move_angle_off_wall(void); #endif /* OBJECT_HELPERS_H */ diff --git a/src/game/object_helpers2.h b/src/game/object_helpers2.h index 8ae5f75..86bc18f 100644 --- a/src/game/object_helpers2.h +++ b/src/game/object_helpers2.h @@ -24,71 +24,71 @@ struct GraphNode_802A45E4 { /*0x22*/ s16 unk22; }; -extern void set_object_hitbox(struct Object* obj, struct ObjectHitbox *arg1); +extern void obj_set_hitbox(struct Object* obj, struct ObjectHitbox *arg1); s32 signum_positive(s32); extern f32 absf(f32); extern s32 absi(s32 a0); -s32 obj_wait_then_blink(s32 a0, s32 a1); -s32 obj_is_mario_ground_pounding_platform(void); -extern void func_802A3004(void); -extern void func_802A3034(s32 sp18); -void obj_push_mario_away(f32); -void obj_push_mario_away_from_cylinder(f32 sp20, f32 sp24); -// extern ? BehDustSmokeLoop(?); -s32 func_802A32A4(s8*); -s32 func_802A32E0(void); -// extern ? nop_802A3380(?); -extern void func_802A3398(s32,s32,f32,f32); -void func_802A3470(void); -extern s32 obj_is_mario_on_platform(void); +s32 cur_obj_wait_then_blink(s32 a0, s32 a1); +s32 cur_obj_is_mario_ground_pounding_platform(void); +extern void spawn_mist_particles(void); +extern void spawn_mist_particles_with_sound(s32 sp18); +void cur_obj_push_mario_away(f32); +void cur_obj_push_mario_away_from_cylinder(f32 sp20, f32 sp24); +// extern ? bhv_dust_smoke_loop(?); +s32 cur_obj_set_direction_table(s8*); +s32 cur_obj_progress_direction_table(void); +// extern ? stub_obj_helpers_3(?); +extern void cur_obj_scale_over_time(s32,s32,f32,f32); +void cur_obj_set_pos_to_home_with_debug(void); +extern s32 cur_obj_is_mario_on_platform(void); // extern ? obj_shake_y_until(?); -s32 func_802A362C(s32); -void obj_call_action_function(void(*[])(void)); -// extern ? func_802A36D8(?); -// extern ? Unknown802A3750(?); -s32 func_802A377C(s32); -s32 obj_mario_far_away(void); -s32 obj_is_mario_moving_fast_or_in_air(s32); -s32 item_in_array(s8,s8*); +s32 cur_obj_move_up_and_down(s32); +void cur_obj_call_action_function(void(*[])(void)); +// extern ? spawn_star_with_no_lvl_exit(?); +// extern ? spawn_base_star_with_no_lvl_exit(?); +s32 bit_shift_left(s32); +s32 cur_obj_mario_far_away(void); +s32 is_mario_moving_fast_or_in_air(s32); +s32 is_item_in_array(s8,s8*); extern void bhv_init_room(void); // 802A3978 -extern void obj_enable_rendering_if_mario_in_room(void); -s32 obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox*,s32,s32); -void func_802A3C98(f32 sp18, s32 sp1C); -void set_object_collision_data(struct Object*, const void*); -void obj_if_hit_wall_bounce_away(void); -s32 obj_hide_if_mario_far_away_y(f32); -extern Gfx *Geo18_802A45E4(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]); -// extern ? Unknown802A3E84(?); +extern void cur_obj_enable_rendering_if_mario_in_room(void); +s32 cur_obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox*,s32,s32); +void obj_explode_and_spawn_coins(f32 sp18, s32 sp1C); +void obj_set_collision_data(struct Object*, const void*); +void cur_obj_if_hit_wall_bounce_away(void); +s32 cur_obj_hide_if_mario_far_away_y(f32); +extern Gfx *geo_offset_klepto_held_object(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]); +// extern ? geo_offset_klepto_debug(?); s32 obj_is_hidden(struct Object*); extern void enable_time_stop(void); extern void disable_time_stop(void); void set_time_stop_flags(s32); void clear_time_stop_flags(s32); -s32 func_802A3FF8(f32,f32,s32); -extern s32 obj_is_mario_in_range_and_ready_to_speak(f32 sp18, f32 sp1C); +s32 cur_obj_can_mario_activate_textbox(f32,f32,s32); +extern s32 cur_obj_can_mario_activate_textbox_2(f32 sp18, f32 sp1C); // extern ? obj_end_dialog(?); -s32 obj_update_dialog(s32 arg0, s32 dialogFlags, s32 dialogID, s32 unused); -s32 obj_update_dialog_with_cutscene(s32 arg0, s32 dialogFlags, s32 cutsceneTable, s32 dialogID); -s32 obj_has_model(u16); -extern void obj_align_gfx_with_floor(void); +s32 cur_obj_update_dialog(s32 arg0, s32 dialogFlags, s32 dialogID, s32 unused); +s32 cur_obj_update_dialog_with_cutscene(s32 arg0, s32 dialogFlags, s32 cutsceneTable, s32 dialogID); +s32 cur_obj_has_model(u16); +extern void cur_obj_align_gfx_with_floor(void); // extern ? mario_is_within_rectangle(?); -void ShakeScreen(s32 shake); -extern s32 attack_collided_non_mario_object(struct Object *obj); -s32 obj_was_attacked_or_ground_pounded(void); -void copy_object_behavior_params(struct Object*,struct Object*); -void func_802A4A70(s32,s32); -s32 func_802A4AB0(s32); -void func_802A4AEC(s32); -s32 obj_check_grabbed_mario(void); +void cur_obj_shake_screen(s32 shake); +extern s32 obj_attack_collided_from_other_object(struct Object *obj); +s32 cur_obj_was_attacked_or_ground_pounded(void); +void obj_copy_behavior_params(struct Object*,struct Object*); +void cur_obj_init_animation_and_anim_frame(s32,s32); +s32 cur_obj_init_animation_and_check_if_near_end(s32); +void cur_obj_init_animation_and_extend_if_at_end(s32); +s32 cur_obj_check_grabbed_mario(void); s32 player_performed_grab_escape_action(void); -// extern ? obj_unused_play_footstep_sound(?); +// extern ? cur_obj_unused_play_footstep_sound(?); // extern ? enable_time_stop_including_mario(?); extern void disable_time_stop_including_mario(void); -s32 obj_check_interacted(void); -void obj_spawn_loot_blue_coin(void); +s32 cur_obj_check_interacted(void); +void cur_obj_spawn_loot_blue_coin(void); #ifndef VERSION_JP -void obj_spawn_star_at_y_offset(f32 f12, f32 f14, f32 a2, f32 a3); +void cur_obj_spawn_star_at_y_offset(f32 f12, f32 f14, f32 a2, f32 a3); #endif #endif /* OBJECT_HELPERS2_H */ diff --git a/src/game/object_list_processor.c b/src/game/object_list_processor.c index f5e3d34..0839a85 100644 --- a/src/game/object_list_processor.c +++ b/src/game/object_list_processor.c @@ -196,24 +196,24 @@ struct ParticleProperties { * A table mapping particle flags to various properties use when spawning a particle. */ struct ParticleProperties sParticleTypes[] = { - { PARTICLE_DUST, ACTIVE_PARTICLE_0, MODEL_MIST, bhvMarioDustGenerator }, - { PARTICLE_1, ACTIVE_PARTICLE_18, MODEL_NONE, bhvWallTinyStarParticleSpawn }, - { PARTICLE_4, ACTIVE_PARTICLE_4, MODEL_NONE, bhvPoundTinyStarParticleSpawn }, - { PARTICLE_SPARKLES, ACTIVE_PARTICLE_3, MODEL_SPARKLES, bhvSpecialTripleJumpSparkles }, - { PARTICLE_5, ACTIVE_PARTICLE_5, MODEL_BUBBLE, bhvBubbleMario }, - { PARTICLE_6, ACTIVE_PARTICLE_6, MODEL_WATER_SPLASH, bhvWaterSplash }, - { PARTICLE_7, ACTIVE_PARTICLE_7, MODEL_WATER_WAVES_SURF, bhvSurfaceWaves }, - { PARTICLE_9, ACTIVE_PARTICLE_9, MODEL_WHITE_PARTICLE_SMALL, bhvWaterWaves }, - { PARTICLE_10, ACTIVE_PARTICLE_10, MODEL_WATER_WAVES, bhvWaveTrailOnSurface }, - { PARTICLE_11, ACTIVE_PARTICLE_11, MODEL_RED_FLAME, bhvFlameMario }, - { PARTICLE_8, ACTIVE_PARTICLE_8, MODEL_NONE, bhvWavesGenerator }, - { PARTICLE_12, ACTIVE_PARTICLE_12, MODEL_NONE, bhvSurfaceWaveShrinking }, - { PARTICLE_LEAVES, ACTIVE_PARTICLE_13, MODEL_NONE, bhvSnowLeafParticleSpawn }, - { PARTICLE_14, ACTIVE_PARTICLE_16, MODEL_NONE, bhvGroundSnow }, - { PARTICLE_17, ACTIVE_PARTICLE_17, MODEL_NONE, bhvWaterMistSpawn }, - { PARTICLE_15, ACTIVE_PARTICLE_14, MODEL_NONE, bhvGroundSand }, - { PARTICLE_16, ACTIVE_PARTICLE_15, MODEL_NONE, bhvPoundWhitePuffs }, - { PARTICLE_18, ACTIVE_PARTICLE_19, MODEL_NONE, bhvPunchTinyTriangleSpawn }, + { PARTICLE_DUST, ACTIVE_PARTICLE_0, MODEL_MIST, bhvMarioDustGenerator }, + { PARTICLE_1, ACTIVE_PARTICLE_18, MODEL_NONE, bhvWallTinyStarParticleSpawn }, + { PARTICLE_4, ACTIVE_PARTICLE_4, MODEL_NONE, bhvPoundTinyStarParticleSpawn }, + { PARTICLE_SPARKLES, ACTIVE_PARTICLE_3, MODEL_SPARKLES, bhvSpecialTripleJumpSparkles }, + { PARTICLE_5, ACTIVE_PARTICLE_5, MODEL_BUBBLE, bhvBubbleMario }, + { PARTICLE_WATER_SPLASH, ACTIVE_PARTICLE_6, MODEL_WATER_SPLASH, bhvWaterSplash }, + { PARTICLE_IDLE_WATER_WAVE, ACTIVE_PARTICLE_IDLE_WATER_WAVE, MODEL_IDLE_WATER_WAVE, bhvIdleWaterWave }, + { PARTICLE_9, ACTIVE_PARTICLE_9, MODEL_WHITE_PARTICLE_SMALL, bhvWaterWaves }, + { PARTICLE_WAVE_TRAIL, ACTIVE_PARTICLE_WAVE_TRAIL, MODEL_WAVE_TRAIL, bhvWaveTrail }, + { PARTICLE_11, ACTIVE_PARTICLE_11, MODEL_RED_FLAME, bhvFlameMario }, + { PARTICLE_SHALLOW_WATER_WAVE, ACTIVE_PARTICLE_SHALLOW_WATER_WAVE, MODEL_NONE, bhvShallowWaterWave }, + { PARTICLE_SHALLOW_WATER_SPLASH, ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH, MODEL_NONE, bhvShallowWaterSplash }, + { PARTICLE_LEAVES, ACTIVE_PARTICLE_13, MODEL_NONE, bhvSnowLeafParticleSpawn }, + { PARTICLE_14, ACTIVE_PARTICLE_16, MODEL_NONE, bhvGroundSnow }, + { PARTICLE_17, ACTIVE_PARTICLE_17, MODEL_NONE, bhvWaterMistSpawn }, + { PARTICLE_15, ACTIVE_PARTICLE_14, MODEL_NONE, bhvGroundSand }, + { PARTICLE_16, ACTIVE_PARTICLE_15, MODEL_NONE, bhvPoundWhitePuffs }, + { PARTICLE_18, ACTIVE_PARTICLE_19, MODEL_NONE, bhvPunchTinyTriangleSpawn }, { 0, 0, MODEL_NONE, NULL }, }; @@ -257,7 +257,7 @@ void spawn_particle(u32 activeParticleFlag, s16 model, const BehaviorScript *beh struct Object *particle; gCurrentObject->oActiveParticleFlags |= activeParticleFlag; particle = spawn_object_at_origin(gCurrentObject, 0, model, behavior); - copy_object_pos_and_angle(particle, gCurrentObject); + obj_copy_pos_and_angle(particle, gCurrentObject); } } @@ -519,7 +519,7 @@ void spawn_objects_from_info(UNUSED s32 unused, struct SpawnInfo *spawnInfo) { } } -void stub_8029CA50() { +void stub_obj_list_processor_1() { } /** @@ -545,7 +545,7 @@ void clear_objects(void) { clear_object_lists(gObjectListArray); stub_80385BF0(); - stub_8029CA50(); + stub_obj_list_processor_1(); for (i = 0; i < OBJECT_POOL_CAPACITY; i++) { gObjectPool[i].activeFlags = ACTIVE_FLAGS_DEACTIVATED; @@ -636,7 +636,7 @@ void update_objects(UNUSED s32 unused) { gCheckingSurfaceCollisionsForCamera = FALSE; reset_debug_objectinfo(); - stub_802CA5D0(); + stub_debug_5(); gObjectLists = gObjectListArray; diff --git a/src/game/paintings.c b/src/game/paintings.c index f34a0ed..3977fca 100644 --- a/src/game/paintings.c +++ b/src/game/paintings.c @@ -12,103 +12,259 @@ #include "segment2.h" #include "paintings.h" -s16 gPaintingMarioFloorType; -float gPaintingMarioXPos, gPaintingMarioYPos, gPaintingMarioZPos; -struct Thing *D_8035FFA0; -Vec3f *D_8035FFA4; -struct Painting *ripplingPainting; -s8 dddStatus; +/** + * @file paintings.c + * + * Implements the rippling painting effect. Paintings are GraphNodes that exist without being connected + * to any particular object. + * + * Paintings are defined in level data. Look at levels/castle_inside/painting.inc.c for examples. + * + * The ripple effect uses data that is split into several parts: + * The mesh positions are generated from a base mesh. See seg2_painting_triangle_mesh near the + * bottom of bin/segment2.c + * + * The lighting for the ripple is also generated from a base table, seg2_painting_mesh_neighbor_tris + * in bin/segment2.c + * + * Each painting's texture uses yet another table to map its texture to the mesh. + * These maps are in level data, see levels/castle_inside/painting.inc.c for example. + * + * Finally, each painting has two display lists, normal and rippling, which are defined in the same + * level data file as the Painting itself. See levels/castle_inside/painting.inc.c. + * + * + * Painting state machine: + * Paintings spawn in the PAINTING_IDLE state + * From IDLE, paintings can change to PAINTING_RIPPLE or PAINTING_ENTERED + * - This state checks for ENTERED because if mario waits long enough, a PROXIMITY painting could + * reset to IDLE + * + * Paintings in the PAINTING_RIPPLE state are passively rippling. + * For RIPPLE_TRIGGER_PROXIMITY paintings, this means mario bumped the wall in front of the + * painting. + * + * Paintings that use RIPPLE_TRIGGER_CONTINUOUS try to transition to this state as soon as possible, + * usually when mario enters the room. + * + * A PROXIMITY painting will automatically reset to IDLE if its ripple magnitude becomes small + * enough. + * + * Paintings in the PAINTING_ENTERED state have been entered by mario. + * A CONTINUOUS painting will automatically reset to RIPPLE if its ripple magnitude becomes small + * enough. + */ -struct Painting *hmcPaintings[] = { +/** + * Triggers a passive ripple on the left side of the painting. + */ +#define RIPPLE_LEFT 0x20 + +/** + * Triggers a passive ripple in the middle the painting. + */ +#define RIPPLE_MIDDLE 0x10 + +/** + * Triggers a passive ripple on the right side of the painting. + */ +#define RIPPLE_RIGHT 0x8 + +/** + * Triggers an entry ripple on the left side of the painting. + */ +#define ENTER_LEFT 0x4 + +/** + * Triggers an entry ripple in the middle of the painting. + */ +#define ENTER_MIDDLE 0x2 + +/** + * Triggers an entry ripple on the right side of the painting. + */ +#define ENTER_RIGHT 0x1 + +/** + * Use the 1/4th part of the painting that is nearest to mario's current floor. + */ +#define NEAREST_4TH 30 + +/** + * Use mario's relative x position. + * @see painting_mario_x + */ +#define MARIO_X 40 + +/** + * Use the x center of the painting. + */ +#define MIDDLE_X 50 + +/** + * Use mario's relative y position. + * @see painting_mario_y + */ +#define MARIO_Y 60 + +/** + * Use mario's relative z position. + * @see painting_mario_z + */ +#define MARIO_Z 70 + +/** + * Use the y center of the painting. + */ +#define MIDDLE_Y 80 + +/** + * Does nothing to the timer. + * Why -56 instead of false? Who knows. + */ +#define DONT_RESET -56 + +/** + * Reset the timer to 0. + */ +#define RESET_TIMER 100 + +/// A copy of the type of floor mario is standing on. +s16 gPaintingMarioFloorType; +// A copy of mario's position +f32 gPaintingMarioXPos, gPaintingMarioYPos, gPaintingMarioZPos; + +/** + * When a painting is rippling, this mesh is generated each frame using the Painting's parameters. + * + * This mesh only contains the vertex positions and normals. + * Paintings use an additional array to map textures to the mesh. + */ +struct PaintingMeshVertex *gPaintingMesh; + +/** + * The painting's surface normals, used to approximate each of the vertex normals (for gouraud shading). + */ +Vec3f *gPaintingTriNorms; + +/** + * The painting that is currently rippling. Only one painting can be rippling at once. + */ +struct Painting *gRipplingPainting; + +/** + * Whether the DDD painting is moved forward, should being moving backwards, or has already moved backwards. + */ +s8 gDddPaintingStatus; + +struct Painting *sHmcPaintings[] = { &cotmc_painting, NULL, }; -struct Painting *insideCastlePaintings[] = { +struct Painting *sInsideCastlePaintings[] = { &bob_painting, &ccm_painting, &wf_painting, &jrb_painting, &lll_painting, &ssl_painting, &hmc_painting, &ddd_painting, &wdw_painting, &thi_tiny_painting, &ttm_painting, &ttc_painting, &sl_painting, &thi_huge_painting, NULL, }; -struct Painting *ttmPaintings[] = { +struct Painting *sTtmPaintings[] = { &ttm_slide_painting, NULL, }; -struct Painting **paintingGroups[] = { - hmcPaintings, - insideCastlePaintings, - ttmPaintings, +struct Painting **sPaintingGroups[] = { + sHmcPaintings, + sInsideCastlePaintings, + sTtmPaintings, }; s16 gPaintingUpdateCounter = 1; s16 gLastPaintingUpdateCounter = 0; -void stopAllRippleExcept(s16 *idptr, struct Painting *paintingGroup[]) { +/** + * Stop paintings in paintingGroup from rippling if their id is different from *idptr. + */ +void stop_other_paintings(s16 *idptr, struct Painting *paintingGroup[]) { s16 index; s16 id = *idptr; index = 0; - while (paintingGroup[index] != NULL) // for each painting - { + while (paintingGroup[index] != NULL) { struct Painting *painting = segmented_to_virtual(paintingGroup[index]); + + // stop all rippling except for the selected painting if (painting->id != id) { - painting->rippleStatus = 0; // stop all rippling except for the selected painting + painting->state = 0; } index++; } } -float find_mario_y_position_on_painting(struct Painting *painting) { - //! unnecessary use of double constants - float marioYOffsetFromPainting = gPaintingMarioYPos - painting->vYPos + 50.0; +/** + * @return mario's y position inside the painting (bounded). + */ +f32 painting_mario_y(struct Painting *painting) { + //! Unnecessary use of double constants + // Add 50 to make the ripple closer to mario's center of mass. + f32 relY = gPaintingMarioYPos - painting->posY + 50.0; - if (marioYOffsetFromPainting < 0.0) { - marioYOffsetFromPainting = 0.0; // If Mario is below the bottom, return the bottom - } else if (marioYOffsetFromPainting - > painting->vSize) { // If Mario is above the top, return the top - marioYOffsetFromPainting = painting->vSize; + if (relY < 0.0) { + relY = 0.0; + } else if (relY > painting->size) { + relY = painting->size; } - return marioYOffsetFromPainting; + return relY; } -float find_mario_z_position_on_painting(struct Painting *painting) { - float marioZOffsetFromPainting = painting->vZPos - gPaintingMarioZPos; +/** + * @return mario's z position inside the painting (bounded). + */ +f32 painting_mario_z(struct Painting *painting) { + f32 relZ = painting->posZ - gPaintingMarioZPos; - if (marioZOffsetFromPainting < 0.0) { - marioZOffsetFromPainting = 0.0; // If Mario is past the left side, return the left side - } else if (marioZOffsetFromPainting > painting->vSize) { - marioZOffsetFromPainting = - painting->vSize; // If Mario is past the right side, return the right side + if (relZ < 0.0) { + relZ = 0.0; + } else if (relZ > painting->size) { + relZ = painting->size; } - return marioZOffsetFromPainting; + return relZ; } -float painting_find_vertical_ripple_location(struct Painting *painting, s8 rippleSpot) { - switch (rippleSpot) { +/** + * @return The y origin for the ripple, based on ySource. + * For floor paintings, the z-axis is treated as y. + */ +f32 painting_ripple_y(struct Painting *painting, s8 ySource) { + switch (ySource) { case MARIO_Y: - return find_mario_y_position_on_painting(painting); // normal vertical paintings + return painting_mario_y(painting); // normal wall paintings break; case MARIO_Z: - return find_mario_z_position_on_painting(painting); // horizontal paintings use X and Z + return painting_mario_z(painting); // floor paintings use X and Z break; case MIDDLE_Y: - return painting->vSize / 2.0; // some concentric ripples don't care about Mario + return painting->size / 2.0; // some concentric ripples don't care about Mario break; } } -float find_part_of_painting_near_mario(struct Painting *painting) { - float firstQuarter = painting->vSize / 4.0; // 1/4 of the way across the painting - float secondQuarter = painting->vSize / 2.0; // 1/2 of the way across the painting - float thirdQuarter = painting->vSize * 3.0 / 4.0; // 3/4 of the way across the painting +/** + * Return the quarter of the painting that is closest to the floor mario entered. + */ +f32 painting_nearest_4th(struct Painting *painting) { + f32 firstQuarter = painting->size / 4.0; // 1/4 of the way across the painting + f32 secondQuarter = painting->size / 2.0; // 1/2 of the way across the painting + f32 thirdQuarter = painting->size * 3.0 / 4.0; // 3/4 of the way across the painting - if (painting->floorEntered & STAND_LEFT) { + if (painting->floorEntered & RIPPLE_LEFT) { return firstQuarter; - } else if (painting->floorEntered & STAND_MIDDLE) { + } else if (painting->floorEntered & RIPPLE_MIDDLE) { return secondQuarter; - } else if (painting->floorEntered & STAND_RIGHT) { + } else if (painting->floorEntered & RIPPLE_RIGHT) { return thirdQuarter; + + // Same as ripple floors. } else if (painting->floorEntered & ENTER_LEFT) { return firstQuarter; } else if (painting->floorEntered & ENTER_MIDDLE) { @@ -118,718 +274,855 @@ float find_part_of_painting_near_mario(struct Painting *painting) { } } -float find_mario_x_position_on_painting(struct Painting *painting) { - float mario_x_offset_from_painting = gPaintingMarioXPos - painting->vXPos; +/** + * @return mario's x position inside the painting (bounded). + */ +f32 painting_mario_x(struct Painting *painting) { + f32 relX = gPaintingMarioXPos - painting->posX; - if (mario_x_offset_from_painting < 0.0) { - mario_x_offset_from_painting = 0.0; // If Mario is past the left side, return the left side - } else if (mario_x_offset_from_painting > painting->vSize) { - mario_x_offset_from_painting = - painting->vSize; // If Mario is past the right side, return the right side + if (relX < 0.0) { + relX = 0.0; + } else if (relX > painting->size) { + relX = painting->size; } - return mario_x_offset_from_painting; + return relX; } -float painting_find_horizontal_ripple_location(struct Painting *painting, s8 rippleSpot) { - switch (rippleSpot) { - case NEAR_MARIO_LATERALLY: // normal vertical paintings - return find_part_of_painting_near_mario(painting); +/** + * @return The x origin for the ripple, based on xSource. + */ +f32 painting_ripple_x(struct Painting *painting, s8 xSource) { + switch (xSource) { + case NEAREST_4TH: // normal wall paintings + return painting_nearest_4th(painting); break; case MARIO_X: // horizontally placed paintings use X and Z - return find_mario_x_position_on_painting(painting); + return painting_mario_x(painting); break; case MIDDLE_X: // concentric rippling may not care about Mario - return painting->vSize / 2.0; + return painting->size / 2.0; break; } } -void painting_set_ripple_type(s8 intendedStatus, struct Painting *painting, - struct Painting *paintingGroup[], s8 hRippleSpot, s8 vRippleSpot, - s8 resetTimer) { - stopAllRippleExcept(&painting->id, paintingGroup); // make sure no other paintings are rippling - switch (intendedStatus) // set the variables necessary for the given ripple status - { - case RIPPLE_STATE_IDLE: - painting->currRippleMag = painting->passiveRippleMag; - painting->rippleMagMultiplier = painting->passiveRippleMagMultiplier; - painting->currRippleRate = painting->passiveRippleRate; +/** + * Set the painting's state, causing it to start a passive ripple or a ripple from mario entering. + * + * @param state The state to enter + * @param painting,paintingGroup identifies the painting that is changing state + * @param xSource,ySource what to use for the x and y origin of the ripple + * @param resetTimer if 100, set the timer to 0 + */ +void painting_state(s8 state, struct Painting *painting, struct Painting *paintingGroup[], + s8 xSource, s8 ySource, s8 resetTimer) { + // make sure no other paintings are rippling + stop_other_paintings(&painting->id, paintingGroup); + + // use a different set of variables depending on the state + switch (state) { + case PAINTING_RIPPLE: + painting->currRippleMag = painting->passiveRippleMag; + painting->rippleDecay = painting->passiveRippleDecay; + painting->currRippleRate = painting->passiveRippleRate; painting->dispersionFactor = painting->passiveDispersionFactor; break; - case RIPPLE_STATE_ENTRY: - painting->currRippleMag = painting->entryRippleMag; - painting->rippleMagMultiplier = painting->entryRippleMagMultiplier; - painting->currRippleRate = painting->entryRippleRate; + + case PAINTING_ENTERED: + painting->currRippleMag = painting->entryRippleMag; + painting->rippleDecay = painting->entryRippleDecay; + painting->currRippleRate = painting->entryRippleRate; painting->dispersionFactor = painting->entryDispersionFactor; break; } - painting->rippleStatus = intendedStatus; - painting->horizontalRippleSpot = - painting_find_horizontal_ripple_location(painting, hRippleSpot); // find the ripple location - painting->verticalRippleSpot = painting_find_vertical_ripple_location(painting, vRippleSpot); + painting->state = state; + painting->rippleX = painting_ripple_x(painting, xSource); + painting->rippleY = painting_ripple_y(painting, ySource); gPaintingMarioYEntry = gPaintingMarioYPos; + + // Because true or false would be too simple... if (resetTimer == RESET_TIMER) { painting->rippleTimer = 0.0f; } - ripplingPainting = painting; + gRipplingPainting = painting; } -void vertical_proximity_ripple_painting_ripple( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned vertically that follow RIPPLE_TRIGGER_PROXIMITY, set - // some flags depending on where Mario is -{ - if (painting->floorEntered & STAND_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); - } else if (painting->floorEntered & STAND_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); - } else if (painting->floorEntered & STAND_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); +/** + * Idle update function for wall paintings that use RIPPLE_TRIGGER_PROXIMITY. + */ +void wall_painting_proximity_idle(struct Painting *painting, struct Painting *paintingGroup[]) { + // Check for mario triggering a ripple + if (painting->floorEntered & RIPPLE_LEFT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_MIDDLE) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_RIGHT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); + + // Check for mario entering } else if (painting->floorEntered & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } else if (painting->floorEntered & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } else if (painting->floorEntered & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } } -void vertical_proximity_ripple_painting_ripple_if_mario_enters( - struct Painting *painting, - struct Painting *paintingGroup[]) // For paintings aligned vertically that follow - // RIPPLE_TRIGGER_PROXIMITY, set some flags if Mario enters -{ +/** + * Rippling update function for wall paintings that use RIPPLE_TRIGGER_PROXIMITY. + */ +void wall_painting_proximity_rippling(struct Painting *painting, struct Painting *paintingGroup[]) { if (painting->floorEntered & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } else if (painting->floorEntered & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } else if (painting->floorEntered & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } } -void vertical_continuous_ripple_painting_ripple( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned vertically that follow RIPPLE_TRIGGER_CONTINUOUS (DDD - // only), set some flags depending on where Mario is -{ - if (painting->floorEntered & STAND_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, - RESET_TIMER); - } else if (painting->floorEntered & STAND_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, - RESET_TIMER); - } else if (painting->floorEntered & STAND_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, - RESET_TIMER); +/** + * Idle update function for wall paintings that use RIPPLE_TRIGGER_CONTINUOUS. + */ +void wall_painting_continuous_idle(struct Painting *painting, struct Painting *paintingGroup[]) { + // Check for mario triggering a ripple + if (painting->floorEntered & RIPPLE_LEFT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_MIDDLE) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_RIGHT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, RESET_TIMER); + + // Check for mario entering } else if (painting->floorEntered & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } else if (painting->floorEntered & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } else if (painting->floorEntered & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, RESET_TIMER); } } -void vertical_continuous_ripple_painting_ripple_if_mario_enters( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned vertically that follow RIPPLE_TRIGGER_CONTINUOUS (DDD - // only), set some flags if Mario enters -{ +/** + * Rippling update function for wall paintings that use RIPPLE_TRIGGER_CONTINUOUS. + */ +void wall_painting_continuous_rippling(struct Painting *painting, struct Painting *paintingGroup[]) { if (painting->floorEntered & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, DONT_RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, DONT_RESET); } else if (painting->floorEntered & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, DONT_RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, DONT_RESET); } else if (painting->floorEntered & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, NEAR_MARIO_LATERALLY, - MARIO_Y, DONT_RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, NEAREST_4TH, MARIO_Y, DONT_RESET); } } -void horizontal_proximity_ripple_painting_ripple( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned horizontally that follow RIPPLE_TRIGGER_PROXIMITY - // (these are not found in-game), set some flags depending on where Mario is -{ - if (painting->floorEntered & STAND_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); - } else if (painting->floorEntered & STAND_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); - } else if (painting->floorEntered & STAND_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); - } else if (painting->marioNewlyUnderPainting) { +/** + * Idle update function for floor paintings that use RIPPLE_TRIGGER_PROXIMITY. + * + * No floor paintings use RIPPLE_TRIGGER_PROXIMITY in the game. + */ +void floor_painting_proximity_idle(struct Painting *painting, struct Painting *paintingGroup[]) { + // Check for mario triggering a ripple + if (painting->floorEntered & RIPPLE_LEFT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_MIDDLE) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_RIGHT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); + + // Only check for mario entering if he jumped below the surface + } else if (painting->marioWentUnder) { if (painting->currFloor & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } else if (painting->currFloor & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } else if (painting->currFloor & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } } } -void horizontal_proximity_ripple_painting_ripple_if_mario_enters( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned horizontally that follow RIPPLE_TRIGGER_PROXIMITY - // (these are not found in-game), set some flags if Mario enters -{ - if (painting->marioNewlyUnderPainting) { +/** + * Rippling update function for floor paintings that use RIPPLE_TRIGGER_PROXIMITY. + * + * No floor paintings use RIPPLE_TRIGGER_PROXIMITY in the game. + */ +void floor_painting_proximity_rippling(struct Painting *painting, struct Painting *paintingGroup[]) { + if (painting->marioWentUnder) { if (painting->currFloor & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } else if (painting->currFloor & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } else if (painting->currFloor & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } } } -void horizontal_continuous_ripple_painting_ripple( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned horizontally that follow RIPPLE_TRIGGER_CONTINUOUS - // (HMC and CotMC), set some flags depending on where Mario is -{ - if (painting->floorEntered & STAND_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, - RESET_TIMER); - } else if (painting->floorEntered & STAND_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, - RESET_TIMER); - } else if (painting->floorEntered & STAND_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_IDLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, - RESET_TIMER); +/** + * Idle update function for floor paintings that use RIPPLE_TRIGGER_CONTINUOUS. + * + * Both floor paintings (HMC and CotMC) are hidden behind a door, which hides the ripple's start up. + * The floor just inside the doorway is RIPPLE_LEFT, so the painting starts rippling as soon as mario + * enters the room. + */ +void floor_painting_continuous_idle(struct Painting *painting, struct Painting *paintingGroup[]) { + // Check for mario triggering a ripple + if (painting->floorEntered & RIPPLE_LEFT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_MIDDLE) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, RESET_TIMER); + } else if (painting->floorEntered & RIPPLE_RIGHT) { + painting_state(PAINTING_RIPPLE, painting, paintingGroup, MIDDLE_X, MIDDLE_Y, RESET_TIMER); + + // Check for mario entering } else if (painting->currFloor & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } else if (painting->currFloor & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } else if (painting->currFloor & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, RESET_TIMER); } } -void horizontal_continuous_ripple_painting_ripple_if_mario_enters( - struct Painting *painting, - struct Painting - *paintingGroup[]) // For paintings aligned horizontally that follow RIPPLE_TRIGGER_CONTINUOUS - // (HMC and CotMC), set some flags if Mario enters -{ - if (painting->marioNewlyUnderPainting) { +/** + * Rippling update function for floor paintings that use RIPPLE_TRIGGER_CONTINUOUS. + */ +void floor_painting_continuous_rippling(struct Painting *painting, struct Painting *paintingGroup[]) { + if (painting->marioWentUnder) { if (painting->currFloor & ENTER_LEFT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - DONT_RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, DONT_RESET); } else if (painting->currFloor & ENTER_MIDDLE) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - DONT_RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, DONT_RESET); } else if (painting->currFloor & ENTER_RIGHT) { - painting_set_ripple_type(RIPPLE_STATE_ENTRY, painting, paintingGroup, MARIO_X, MARIO_Z, - DONT_RESET_TIMER); + painting_state(PAINTING_ENTERED, painting, paintingGroup, MARIO_X, MARIO_Z, DONT_RESET); } } } +/** + * Check for mario entering one of the special floors associated with the painting. + */ void painting_update_floors(struct Painting *painting) { s16 paintingId = painting->id; - s8 leftSideStand = 0; - s8 middleStand = 0; - s8 rightSideStand = 0; - s8 leftSideEnter = 0; - s8 middleEnter = 0; - s8 rightSideEnter = 0; + s8 rippleLeft = 0; + s8 rippleMiddle = 0; + s8 rippleRight = 0; + s8 enterLeft = 0; + s8 enterMiddle = 0; + s8 enterRight = 0; /* The area in front of every painting in the game (except HMC and CotMC, which *\ |* act a little differently) is made up of 3 special floor triangles with special *| |* (unique) surface types. This code checks which surface Mario is currently on *| \* and sets a bitfield accordingly. */ - if (gPaintingMarioFloorType - == paintingId * 3 - + SURFACE_PAINTING_WOBBLE_A6) { // check if Mario's current floor is one of the - // special floors - leftSideStand = STAND_LEFT; + // check if Mario's current floor is one of the special floors + if (gPaintingMarioFloorType == paintingId * 3 + SURFACE_PAINTING_WOBBLE_A6) { + rippleLeft = RIPPLE_LEFT; } if (gPaintingMarioFloorType == paintingId * 3 + SURFACE_PAINTING_WOBBLE_A7) { - middleStand = STAND_MIDDLE; + rippleMiddle = RIPPLE_MIDDLE; } if (gPaintingMarioFloorType == paintingId * 3 + SURFACE_PAINTING_WOBBLE_A8) { - rightSideStand = STAND_RIGHT; + rippleRight = RIPPLE_RIGHT; } if (gPaintingMarioFloorType == paintingId * 3 + SURFACE_PAINTING_WARP_D3) { - leftSideEnter = ENTER_LEFT; + enterLeft = ENTER_LEFT; } if (gPaintingMarioFloorType == paintingId * 3 + SURFACE_PAINTING_WARP_D4) { - middleEnter = ENTER_MIDDLE; + enterMiddle = ENTER_MIDDLE; } if (gPaintingMarioFloorType == paintingId * 3 + SURFACE_PAINTING_WARP_D5) { - rightSideEnter = ENTER_RIGHT; + enterRight = ENTER_RIGHT; } painting->lastFloor = painting->currFloor; - painting->currFloor = leftSideStand + middleStand + rightSideStand + leftSideEnter + middleEnter - + rightSideEnter; // at most 1 of these will be nonzero; - painting->floorEntered = - (painting->lastFloor ^ painting->currFloor) - & painting->currFloor; // floorEntered is true iff currFloor is true and lastFloor is false - // (Mario just entered the floor on this frame) - painting->lastMarioUnderPainting = painting->currMarioUnderPainting; - if (gPaintingMarioYPos < painting->vYPos) { - painting->currMarioUnderPainting = 1; // If Mario is below the painting, set a variable + // at most 1 of these will be nonzero; + painting->currFloor = rippleLeft + rippleMiddle + rippleRight + enterLeft + enterMiddle + enterRight; + + // floorEntered is true iff currFloor is true and lastFloor is false + // (Mario just entered the floor on this frame) + painting->floorEntered = (painting->lastFloor ^ painting->currFloor) & painting->currFloor; + + painting->marioWasUnder = painting->marioIsUnder; + // Check if mario has fallen below the painting (used for floor paintings) + if (gPaintingMarioYPos < painting->posY) { + painting->marioIsUnder = TRUE; } else { - painting->currMarioUnderPainting = 0; // Otherwise, reset it + painting->marioIsUnder = FALSE; } - painting->marioNewlyUnderPainting = - (painting->lastMarioUnderPainting ^ painting->currMarioUnderPainting) - & painting->currMarioUnderPainting; // Again, marioNewlyUnderPainting is true iff he is under it - // this frame but wasn't last frame. + + // mario "went under" if he was not under last frame, but is under now + painting->marioWentUnder = (painting->marioWasUnder ^ painting->marioIsUnder) & painting->marioIsUnder; } -void painting_update_ripple_status(struct Painting *painting) { +/** + * Update the ripple's timer and magnitude, making it propagate outwards. + * + * Automatically changes the painting back to IDLE state (or RIPPLE for continuous paintings) if the + * ripple's magnitude becomes small enough. + */ +void painting_update_ripple_state(struct Painting *painting) { if (gPaintingUpdateCounter != gLastPaintingUpdateCounter) { - painting->currRippleMag *= painting->rippleMagMultiplier; - painting->rippleTimer += - 1.0; //! After ~6.47 days, paintings with RIPPLE_TRIGGER_CONTINUOUS will increment this to - //! 16777216 (1 << 24), at which point it will freeze (due to floating-point - //! imprecision?) and the painting will stop rippling. This happens to HMC, DDD, and - //! CotMC. This happens on Wii VC. Untested on N64 and Wii U VC. + painting->currRippleMag *= painting->rippleDecay; + + //! After ~6.47 days, paintings with RIPPLE_TRIGGER_CONTINUOUS will increment this to + //! 16777216 (1 << 24), at which point it will freeze (due to floating-point + //! imprecision?) and the painting will stop rippling. This happens to HMC, DDD, and + //! CotMC. This happens on Wii VC. Untested on N64 and Wii U VC. + painting->rippleTimer += 1.0; } if (painting->rippleTrigger == RIPPLE_TRIGGER_PROXIMITY) { - if (painting->currRippleMag <= 1.0) // if the painting is barely rippling, make it stop rippling - { - painting->rippleStatus = RIPPLE_STATE_NONE; - ripplingPainting = NULL; + // if the painting is barely rippling, make it stop rippling + if (painting->currRippleMag <= 1.0) { + painting->state = PAINTING_IDLE; + gRipplingPainting = NULL; } } else if (painting->rippleTrigger == RIPPLE_TRIGGER_CONTINUOUS) { - if (painting->rippleStatus == RIPPLE_STATE_ENTRY - && painting->currRippleMag - <= painting->passiveRippleMag) // if the painting is doing the entry ripple but the - // ripples are as small as those from the passive - // ripple, make it do a passive ripple - { - painting->rippleStatus = RIPPLE_STATE_IDLE; + // if the painting is doing the entry ripple but the ripples are as small as those from the + // passive ripple, make it do a passive ripple + // If mario goes below the surface but doesn't warp, the painting will eventually reset. + if (painting->state == PAINTING_ENTERED && painting->currRippleMag <= painting->passiveRippleMag) { + + painting->state = PAINTING_RIPPLE; painting->currRippleMag = painting->passiveRippleMag; - painting->rippleMagMultiplier = painting->passiveRippleMagMultiplier; + painting->rippleDecay = painting->passiveRippleDecay; painting->currRippleRate = painting->passiveRippleRate; painting->dispersionFactor = painting->passiveDispersionFactor; } } } -s16 painting_calculate_point_ripple(struct Painting *painting, float xpos, - float ypos) // note that xpos and ypos correspond to a point on the - // face of the painting, not actual axes -{ - float rippleMag = painting->currRippleMag; - float rippleRate = painting->currRippleRate; - float dispersionFactor = painting->dispersionFactor; - float rippleTimer = painting->rippleTimer; - float hRippleSpot = painting->horizontalRippleSpot; - float vRippleSpot = painting->verticalRippleSpot; - float distanceToRippleSpot; - float scaledDistance; +/** + * @return the ripple function at posX, posY + * note that posX and posY correspond to a point on the face of the painting, not actual axes + */ +s16 calculate_ripple_at_point(struct Painting *painting, f32 posX, f32 posY) { + /// Controls the peaks of the ripple. + f32 rippleMag = painting->currRippleMag; + /// Controls the ripple's frequency + f32 rippleRate = painting->currRippleRate; + /// Controls how fast the ripple spreads + f32 dispersionFactor = painting->dispersionFactor; + /// How far the ripple has spread + f32 rippleTimer = painting->rippleTimer; + /// x and y ripple origin + f32 rippleX = painting->rippleX; + f32 rippleY = painting->rippleY; - xpos *= painting->vSize / DEFAULT_HEIGHT; // scale x position of point by painting size - ypos *= painting->vSize / DEFAULT_HEIGHT; // scale y position of point by painting size - distanceToRippleSpot = - sqrtf((xpos - hRippleSpot) * (xpos - hRippleSpot) - + (ypos - vRippleSpot) * (ypos - vRippleSpot)); // distance from point to ripple spot - scaledDistance = - distanceToRippleSpot / dispersionFactor; // scale distance by dispersion factor so that ripples - // farther from the ripple spot are smaller - if (rippleTimer < scaledDistance) { - return 0; // if the ripple hasn't reached the point yet, make the point magnitude 0 + f32 distanceToOrigin; + f32 rippleDistance; + + posX *= painting->size / PAINTING_SIZE; + posY *= painting->size / PAINTING_SIZE; + distanceToOrigin = sqrtf((posX - rippleX) * (posX - rippleX) + (posY - rippleY) * (posY - rippleY)); + // A larger dispersionFactor makes the ripple spread slower + rippleDistance = distanceToOrigin / dispersionFactor; + if (rippleTimer < rippleDistance) { + // if the ripple hasn't reached the point yet, make the point magnitude 0 + return 0; } else { + // use a cosine wave to make the ripple go up and down, + // scaled by the painting's ripple magnitude + f32 rippleZ = rippleMag * cosf(rippleRate * (2 * M_PI) * (rippleTimer - rippleDistance)); - float rippleHeight = - rippleMag - * cosf(rippleRate * (2 * M_PI) - * (rippleTimer - - scaledDistance)); // use a cosine wave to make the ripple go up and down, and - // scale it by the painting's ripple magnitude - - return round_float(rippleHeight); // round it to an int and return it + // round it to an int and return it + return round_float(rippleZ); } } -s16 painting_conditionally_calculate_point_ripple(struct Painting *painting, s16 condition, - s16 xpos, s16 ypos) { - s16 rippleHeight = 0; +/** + * If movable, return the ripple function at (posX, posY) + * else return 0 + */ +s16 ripple_if_movable(struct Painting *painting, s16 movable, s16 posX, s16 posY) { + s16 rippleZ = 0; - if (condition) { - rippleHeight = painting_calculate_point_ripple(painting, xpos, ypos); + if (movable) { + rippleZ = calculate_ripple_at_point(painting, posX, posY); } - return rippleHeight; + return rippleZ; } -void Print1(struct Painting *painting, s16 *b, s16 c) { - s16 sp1E; +/** + * Allocates and generates a mesh for the rippling painting effect by modifying the passed in `mesh` + * based on the painting's current ripple state. + * + * The `mesh` table describes the location of mesh vertices, whether they move when rippling, and what + * triangles they belong to. + * + * The static mesh passed in is organized into two lists. This function only uses the first list, + * painting_calculate_triangle_normals below uses the second one. + * + * The first list describes the vertices in this format: + * numVertices + * v0 x, v0 y, movable + * ... + * vN x, vN y, movable + * Where x and y are from 0 to PAINTING_SIZE, movable is 0 or 1. + * + * The mesh used in game, seg2_painting_triangle_mesh, is in bin/segment2.c. + */ +void painting_generate_mesh(struct Painting *painting, s16 *mesh, s16 numTris) { + s16 i; - D_8035FFA0 = mem_pool_alloc(gEffectsMemoryPool, c * sizeof(struct Thing)); - if (D_8035FFA0 == NULL) { + gPaintingMesh = mem_pool_alloc(gEffectsMemoryPool, numTris * sizeof(struct PaintingMeshVertex)); + if (gPaintingMesh == NULL) { } - for (sp1E = 0; sp1E < c; sp1E++) { - D_8035FFA0[sp1E].unk0[0] = b[sp1E * 3 + 1]; - D_8035FFA0[sp1E].unk0[1] = b[sp1E * 3 + 2]; - D_8035FFA0[sp1E].unk0[2] = painting_conditionally_calculate_point_ripple( - painting, b[(sp1E + 1) * 3], D_8035FFA0[sp1E].unk0[0], D_8035FFA0[sp1E].unk0[1]); + // accesses are off by 1 since the first entry is the number of vertices + for (i = 0; i < numTris; i++) { + gPaintingMesh[i].pos[0] = mesh[i * 3 + 1]; + gPaintingMesh[i].pos[1] = mesh[i * 3 + 2]; + // The "z coordinate" of each vertex in the mesh is either 1 or 0. Instead of being an + // actual coordinate, it just determines whether the vertex moves + gPaintingMesh[i].pos[2] = ripple_if_movable(painting, mesh[i * 3 + 3], + gPaintingMesh[i].pos[0], gPaintingMesh[i].pos[1]); } } -void Print2(s16 *a, s16 b, s16 c) { - s16 sp46; +/** + * Calculate the surface normals of each triangle in the generated ripple mesh. + * + * The static mesh passed in is organized into two lists. This function uses the second list, + * painting_generate_mesh above uses the first one. + * + * The second list in `mesh` describes the mesh's triangles in this format: + * numTris + * tri0 v0, tri0 v1, tri0 v2 + * ... + * triN v0, triN v1, triN v2 + * Where each v0, v1, v2 is an index into the first list in `mesh`. + * + * The mesh used in game, seg2_painting_triangle_mesh, is in bin/segment2.c. + */ +void painting_calculate_triangle_normals(s16 *mesh, s16 numVtx, s16 numTris) { + s16 i; - D_8035FFA4 = mem_pool_alloc(gEffectsMemoryPool, c * sizeof(Vec3f)); - if (D_8035FFA4 == NULL) { + gPaintingTriNorms = mem_pool_alloc(gEffectsMemoryPool, numTris * sizeof(Vec3f)); + if (gPaintingTriNorms == NULL) { } - for (sp46 = 0; sp46 < c; sp46++) { - s16 sp44 = b * 3 + sp46 * 3 + 2; - s16 sp42 = a[sp44]; - s16 sp40 = a[sp44 + 1]; - s16 sp3E = a[sp44 + 2]; - f32 sp38 = D_8035FFA0[sp42].unk0[0]; - f32 sp34 = D_8035FFA0[sp42].unk0[1]; - f32 sp30 = D_8035FFA0[sp42].unk0[2]; - f32 sp2C = D_8035FFA0[sp40].unk0[0]; - f32 sp28 = D_8035FFA0[sp40].unk0[1]; - f32 sp24 = D_8035FFA0[sp40].unk0[2]; - f32 sp20 = D_8035FFA0[sp3E].unk0[0]; - f32 sp1C = D_8035FFA0[sp3E].unk0[1]; - f32 sp18 = D_8035FFA0[sp3E].unk0[2]; + for (i = 0; i < numTris; i++) { + s16 tri = numVtx * 3 + i * 3 + 2; // Add 2 because of the 2 length entries preceding the list + s16 v0 = mesh[tri]; + s16 v1 = mesh[tri + 1]; + s16 v2 = mesh[tri + 2]; - D_8035FFA4[sp46][0] = (sp28 - sp34) * (sp18 - sp24) - (sp24 - sp30) * (sp1C - sp28); - D_8035FFA4[sp46][1] = (sp24 - sp30) * (sp20 - sp2C) - (sp2C - sp38) * (sp18 - sp24); - D_8035FFA4[sp46][2] = (sp2C - sp38) * (sp1C - sp28) - (sp28 - sp34) * (sp20 - sp2C); + f32 x0 = gPaintingMesh[v0].pos[0]; + f32 y0 = gPaintingMesh[v0].pos[1]; + f32 z0 = gPaintingMesh[v0].pos[2]; + + f32 x1 = gPaintingMesh[v1].pos[0]; + f32 y1 = gPaintingMesh[v1].pos[1]; + f32 z1 = gPaintingMesh[v1].pos[2]; + + f32 x2 = gPaintingMesh[v2].pos[0]; + f32 y2 = gPaintingMesh[v2].pos[1]; + f32 z2 = gPaintingMesh[v2].pos[2]; + + // Cross product to find each triangle's normal vector + gPaintingTriNorms[i][0] = (y1 - y0) * (z2 - z1) - (z1 - z0) * (y2 - y1); + gPaintingTriNorms[i][1] = (z1 - z0) * (x2 - x1) - (x1 - x0) * (z2 - z1); + gPaintingTriNorms[i][2] = (x1 - x0) * (y2 - y1) - (y1 - y0) * (x2 - x1); } } -s8 small_float_to_byte(float decimal) // This function converts a decimal to a signed byte by - // multiplying it by 127 or 128 and rounding away from 0. -{ - s8 convertedFloat; +/** + * Rounds a floating-point component of a normal vector to an s8 by multiplying it by 127 or 128 and + * rounding away from 0. + */ +s8 normalize_component(f32 comp) { + s8 rounded; - if (decimal > 0.0) { - convertedFloat = decimal * 127.0 + 0.5; // round up - } else if (decimal < 0.0) { - convertedFloat = decimal * 128.0 - 0.5; // round down + if (comp > 0.0) { + rounded = comp * 127.0 + 0.5; // round up + } else if (comp < 0.0) { + rounded = comp * 128.0 - 0.5; // round down } else { - convertedFloat = 0; // don't round 0 + rounded = 0; // don't round 0 } - return convertedFloat; + return rounded; } -void func_802D39DC(s16 *a, s16 b) { +/** + * Approximates the painting mesh's vertex normals by averaging the normals of all triangles sharing a + * vertex. Used for gouraud lighting. + * + * After each triangle's surface normal is calculated, the `neighborTris` table describes which triangles + * each vertex should use when calculating the average normal vector. + * + * The table is a list of entries in this format: + * numNeighbors, tri0, tri1, ..., triN + * + * Where each 'tri' is an index into gPaintingTriNorms. + * Entry i in `neighborTris` corresponds to the vertex at gPaintingMesh[i] + * + * The table used in game, seg2_painting_mesh_neighbor_tris, is in bin/segment2.c. + */ +void painting_average_vertex_normals(s16 *neighborTris, s16 numVtx) { UNUSED s16 unused; - s16 sp34; - s16 index; - s16 index2; - s16 sp2E; - s16 sp2C = 0; + s16 tri; + s16 i; + s16 j; + s16 neighbors; + s16 entry = 0; - for (index = 0; index < b; index++) { - f32 sp28 = 0.0f; - f32 sp24 = 0.0f; - f32 sp20 = 0.0f; - f32 sp1C; + for (i = 0; i < numVtx; i++) { + f32 nx = 0.0f; + f32 ny = 0.0f; + f32 nz = 0.0f; + f32 nlen; - sp2E = a[sp2C]; - for (index2 = 0; index2 < sp2E; index2++) { - sp34 = a[sp2C + index2 + 1]; - sp28 += D_8035FFA4[sp34][0]; - sp24 += D_8035FFA4[sp34][1]; - sp20 += D_8035FFA4[sp34][2]; + // The first number of each entry is the number of adjacent tris + neighbors = neighborTris[entry]; + for (j = 0; j < neighbors; j++) { + tri = neighborTris[entry + j + 1]; + nx += gPaintingTriNorms[tri][0]; + ny += gPaintingTriNorms[tri][1]; + nz += gPaintingTriNorms[tri][2]; } - sp2C += sp2E + 1; - sp28 /= sp2E; - sp24 /= sp2E; - sp20 /= sp2E; - sp1C = sqrtf(sp28 * sp28 + sp24 * sp24 + sp20 * sp20); - if (sp1C == 0.0) { - D_8035FFA0[index].unk6[0] = 0; - D_8035FFA0[index].unk6[1] = 0; - D_8035FFA0[index].unk6[2] = 0; + // Move to the next vertex's entry + entry += neighbors + 1; + + // average the surface normals from each neighboring tri + nx /= neighbors; + ny /= neighbors; + nz /= neighbors; + nlen = sqrtf(nx * nx + ny * ny + nz * nz); + + if (nlen == 0.0) { + gPaintingMesh[i].norm[0] = 0; + gPaintingMesh[i].norm[1] = 0; + gPaintingMesh[i].norm[2] = 0; } else { - D_8035FFA0[index].unk6[0] = small_float_to_byte(sp28 / sp1C); - D_8035FFA0[index].unk6[1] = small_float_to_byte(sp24 / sp1C); - D_8035FFA0[index].unk6[2] = small_float_to_byte(sp20 / sp1C); + gPaintingMesh[i].norm[0] = normalize_component(nx / nlen); + gPaintingMesh[i].norm[1] = normalize_component(ny / nlen); + gPaintingMesh[i].norm[2] = normalize_component(nz / nlen); } } } -void *func_802D3CF0(u8 *img, s16 tWidth, s16 tHeight, s16 *d, s16 e, s16 f, u8 g) { - s16 sp9E; - s16 sp9C; - s16 sp9A; - s16 sp98; - s16 sp96; +/** + * Creates a display list that draws the rippling painting, with 'img' mapped to the painting's mesh, + * using 'textureMap'. + * + * If the textureMap doesn't describe the whole mesh, then multiple calls are needed to draw the whole + * painting. + */ +Gfx *render_painting(u8 *img, s16 tWidth, s16 tHeight, s16 *textureMap, s16 mapVerts, s16 mapTris, u8 alpha) { + s16 group; + s16 map; + s16 triGroup; + s16 mapping; + s16 meshVtx; s16 tx; s16 ty; - s16 sp90 = f / 5; - s16 sp8E = f % 5; - s16 sp8C = f * 3; - s16 sp8A = sp90 * 2 + sp8E + 7; - Vtx *verts = alloc_display_list(sp8C * sizeof(*verts)); - Gfx *sp80 = alloc_display_list(sp8A * sizeof(*sp80)); - Gfx *sp7C = sp80; - if (verts == NULL || sp80 == NULL) { + // We can fit 15 (16 / 3) vertices in the RSP's vertex buffer. + // Group triangles by 5, with one remainder group. + s16 triGroups = mapTris / 5; + s16 remGroupTris = mapTris % 5; + s16 numVtx = mapTris * 3; + + s16 commands = triGroups * 2 + remGroupTris + 7; + Vtx *verts = alloc_display_list(numVtx * sizeof(Vtx)); + Gfx *dlist = alloc_display_list(commands * sizeof(Gfx)); + Gfx *gfx = dlist; + + if (verts == NULL || dlist == NULL) { } - gLoadBlockTexture(sp7C++, tWidth, tHeight, G_IM_FMT_RGBA, img); + gLoadBlockTexture(gfx++, tWidth, tHeight, G_IM_FMT_RGBA, img); - for (sp9E = 0; sp9E < sp90; sp9E++) { - sp9A = e * 3 + sp9E * 15 + 2; - for (sp9C = 0; sp9C < 15; sp9C++) { - sp98 = d[sp9A + sp9C]; - sp96 = d[sp98 * 3 + 1]; - tx = d[sp98 * 3 + 2]; - ty = d[sp98 * 3 + 3]; - make_vertex(verts, sp9E * 15 + sp9C, D_8035FFA0[sp96].unk0[0], D_8035FFA0[sp96].unk0[1], - D_8035FFA0[sp96].unk0[2], tx, ty, D_8035FFA0[sp96].unk6[0], - D_8035FFA0[sp96].unk6[1], D_8035FFA0[sp96].unk6[2], g); + // Draw the groups of 5 first + for (group = 0; group < triGroups; group++) { + + // The triangle groups are the second part of the texture map. + // Each group is a list of 15 mappings + triGroup = mapVerts * 3 + group * 15 + 2; + for (map = 0; map < 15; map++) { + // The mapping is just an index into the earlier part of the textureMap + // Some mappings are repeated, for example, when multiple triangles share a vertex + mapping = textureMap[triGroup + map]; + + // The first entry is the ID of the vertex in the mesh + meshVtx = textureMap[mapping * 3 + 1]; + + // The next two are the texture coordinates for that vertex + tx = textureMap[mapping * 3 + 2]; + ty = textureMap[mapping * 3 + 3]; + + // Map the texture and place it in the verts array + make_vertex(verts, group * 15 + map, gPaintingMesh[meshVtx].pos[0], gPaintingMesh[meshVtx].pos[1], + gPaintingMesh[meshVtx].pos[2], tx, ty, gPaintingMesh[meshVtx].norm[0], + gPaintingMesh[meshVtx].norm[1], gPaintingMesh[meshVtx].norm[2], alpha); } - gSPVertex(sp7C++, VIRTUAL_TO_PHYSICAL(verts + sp9E * 15), 15, 0); - gSPDisplayList(sp7C++, dl_paintings_draw_ripples); + + // Load the vertices and draw the 5 triangles + gSPVertex(gfx++, VIRTUAL_TO_PHYSICAL(verts + group * 15), 15, 0); + gSPDisplayList(gfx++, dl_paintings_draw_ripples); } - sp9A = e * 3 + sp90 * 15 + 2; - for (sp9C = 0; sp9C < sp8E * 3; sp9C++) { - sp98 = d[sp9A + sp9C]; - sp96 = d[sp98 * 3 + 1]; - tx = d[sp98 * 3 + 2]; - ty = d[sp98 * 3 + 3]; - make_vertex(verts, sp90 * 15 + sp9C, D_8035FFA0[sp96].unk0[0], D_8035FFA0[sp96].unk0[1], - D_8035FFA0[sp96].unk0[2], tx, ty, D_8035FFA0[sp96].unk6[0], - D_8035FFA0[sp96].unk6[1], D_8035FFA0[sp96].unk6[2], g); + // One group left with < 5 triangles + triGroup = mapVerts * 3 + triGroups * 15 + 2; + // Map the texture to the triangles + for (map = 0; map < remGroupTris * 3; map++) { + mapping = textureMap[triGroup + map]; + meshVtx = textureMap[mapping * 3 + 1]; + tx = textureMap[mapping * 3 + 2]; + ty = textureMap[mapping * 3 + 3]; + make_vertex(verts, triGroups * 15 + map, gPaintingMesh[meshVtx].pos[0], gPaintingMesh[meshVtx].pos[1], + gPaintingMesh[meshVtx].pos[2], tx, ty, gPaintingMesh[meshVtx].norm[0], + gPaintingMesh[meshVtx].norm[1], gPaintingMesh[meshVtx].norm[2], alpha); } - gSPVertex(sp7C++, VIRTUAL_TO_PHYSICAL(verts + sp90 * 15), sp8E * 3, 0); - for (sp9E = 0; sp9E < sp8E; sp9E++) - gSP1Triangle(sp7C++, sp9E * 3, sp9E * 3 + 1, sp9E * 3 + 2, 0); - gSPEndDisplayList(sp7C); - return sp80; + + // Draw the triangles individually + gSPVertex(gfx++, VIRTUAL_TO_PHYSICAL(verts + triGroups * 15), remGroupTris * 3, 0); + for (group = 0; group < remGroupTris; group++) { + gSP1Triangle(gfx++, group * 3, group * 3 + 1, group * 3 + 2, 0); + } + + gSPEndDisplayList(gfx); + return dlist; } -Gfx *func_802D43FC(struct Painting *painting) { - float sp4C = painting->vSize / DEFAULT_HEIGHT; - Mtx *sp48 = alloc_display_list(sizeof(Mtx)); - Mtx *sp44 = alloc_display_list(sizeof(Mtx)); - Mtx *sp40 = alloc_display_list(sizeof(Mtx)); - Mtx *sp3C = alloc_display_list(sizeof(Mtx)); - Gfx *sp38 = alloc_display_list(5 * sizeof(Gfx)); - Gfx *sp34 = sp38; +/** + * Orient the painting mesh for rendering. + */ +Gfx *painting_model_view_transform(struct Painting *painting) { + f32 sizeRatio = painting->size / PAINTING_SIZE; + Mtx *rotX = alloc_display_list(sizeof(Mtx)); + Mtx *rotY = alloc_display_list(sizeof(Mtx)); + Mtx *translate = alloc_display_list(sizeof(Mtx)); + Mtx *scale = alloc_display_list(sizeof(Mtx)); + Gfx *dlist = alloc_display_list(5 * sizeof(Gfx)); + Gfx *gfx = dlist; - if (sp48 == NULL || sp44 == NULL || sp40 == NULL || sp38 == NULL) { + if (rotX == NULL || rotY == NULL || translate == NULL || dlist == NULL) { } - guTranslate(sp40, painting->vXPos, painting->vYPos, painting->vZPos); - guRotate(sp48, painting->vXRotation, 1.0f, 0.0f, 0.0f); - guRotate(sp44, painting->vYRotation, 0.0f, 1.0f, 0.0f); - guScale(sp3C, sp4C, sp4C, sp4C); + guTranslate(translate, painting->posX, painting->posY, painting->posZ); + guRotate(rotX, painting->pitch, 1.0f, 0.0f, 0.0f); + guRotate(rotY, painting->yaw, 0.0f, 1.0f, 0.0f); + guScale(scale, sizeRatio, sizeRatio, sizeRatio); - gSPMatrix(sp34++, sp40, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH); - gSPMatrix(sp34++, sp48, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); - gSPMatrix(sp34++, sp44, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); - gSPMatrix(sp34++, sp3C, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); - gSPEndDisplayList(sp34); + gSPMatrix(gfx++, translate, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH); + gSPMatrix(gfx++, rotX, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); + gSPMatrix(gfx++, rotY, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); + gSPMatrix(gfx++, scale, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); + gSPEndDisplayList(gfx); - return sp38; + return dlist; } -Gfx *func_802D45FC(struct Painting *painting) { - s16 sp66; - s16 sp64; - s16 sp62; - s16 *sp5C; - s16 faceCount = painting->faceCount; +/** + * Ripple a painting that has 1 or more images that need to be mapped + */ +Gfx *painting_ripple_image(struct Painting *painting) { + s16 meshVerts; + s16 meshTris; + s16 i; + s16 *textureMap; + s16 imageCount = painting->imageCount; s16 tWidth = painting->textureWidth; s16 tHeight = painting->textureHeight; - s16 **meshArray = segmented_to_virtual(painting->meshData); - u8 **tArray = segmented_to_virtual(painting->textureArray); - Gfx *sp48 = alloc_display_list((faceCount + 6) * sizeof(Gfx)); - Gfx *sp44 = sp48; + s16 **textureMaps = segmented_to_virtual(painting->textureMaps); + u8 **textures = segmented_to_virtual(painting->textureArray); + Gfx *dlist = alloc_display_list((imageCount + 6) * sizeof(Gfx)); + Gfx *gfx = dlist; - if (sp48 == NULL) { - return sp48; + if (dlist == NULL) { + return dlist; } - gSPDisplayList(sp44++, func_802D43FC(painting)); - gSPDisplayList(sp44++, dl_paintings_rippling_begin); - gSPDisplayList(sp44++, painting->displayList68); + gSPDisplayList(gfx++, painting_model_view_transform(painting)); + gSPDisplayList(gfx++, dl_paintings_rippling_begin); + gSPDisplayList(gfx++, painting->rippleDisplayList); - for (sp62 = 0; sp62 < faceCount; sp62++) { - sp5C = segmented_to_virtual(meshArray[sp62]); - sp66 = sp5C[0]; - sp64 = sp5C[sp66 * 3 + 1]; - gSPDisplayList(sp44++, func_802D3CF0(tArray[sp62], tWidth, tHeight, sp5C, sp66, sp64, - painting->brightness)); + // Map each image to the mesh's vertices + for (i = 0; i < imageCount; i++) { + textureMap = segmented_to_virtual(textureMaps[i]); + meshVerts = textureMap[0]; + meshTris = textureMap[meshVerts * 3 + 1]; + gSPDisplayList(gfx++, render_painting(textures[i], tWidth, tHeight, textureMap, meshVerts, meshTris, painting->alpha)); } - painting_update_ripple_status(painting); - gSPPopMatrix(sp44++, G_MTX_MODELVIEW); - gSPDisplayList(sp44++, dl_paintings_rippling_end); - gSPEndDisplayList(sp44); - return sp48; + + // Update the ripple, may automatically reset the painting's state. + painting_update_ripple_state(painting); + + gSPPopMatrix(gfx++, G_MTX_MODELVIEW); + gSPDisplayList(gfx++, dl_paintings_rippling_end); + gSPEndDisplayList(gfx); + return dlist; } -Gfx *func_802D4874(struct Painting *painting) { - s16 sp5E; - s16 sp5C; - s16 *sp58; +/** + * Ripple a painting that has 1 "environment map" texture. + */ +Gfx *painting_ripple_env_mapped(struct Painting *painting) { + s16 meshVerts; + s16 meshTris; + s16 *textureMap; s16 tWidth = painting->textureWidth; s16 tHeight = painting->textureHeight; - s16 **meshArray = segmented_to_virtual(painting->meshData); + s16 **textureMaps = segmented_to_virtual(painting->textureMaps); u8 **tArray = segmented_to_virtual(painting->textureArray); - Gfx *sp48 = alloc_display_list(7 * sizeof(Gfx)); - Gfx *sp44 = sp48; + Gfx *dlist = alloc_display_list(7 * sizeof(Gfx)); + Gfx *gfx = dlist; - if (sp48 == NULL) { - return sp48; + if (dlist == NULL) { + return dlist; } - gSPDisplayList(sp44++, func_802D43FC(painting)); - gSPDisplayList(sp44++, dl_paintings_env_mapped_begin); - gSPDisplayList(sp44++, painting->displayList68); - sp58 = segmented_to_virtual(meshArray[0]); - sp5E = sp58[0]; - sp5C = sp58[sp5E * 3 + 1]; - gSPDisplayList(sp44++, - func_802D3CF0(tArray[0], tWidth, tHeight, sp58, sp5E, sp5C, painting->brightness)); - painting_update_ripple_status(painting); - gSPPopMatrix(sp44++, G_MTX_MODELVIEW); - gSPDisplayList(sp44++, dl_paintings_env_mapped_end); - gSPEndDisplayList(sp44); - return sp48; + gSPDisplayList(gfx++, painting_model_view_transform(painting)); + gSPDisplayList(gfx++, dl_paintings_env_mapped_begin); + gSPDisplayList(gfx++, painting->rippleDisplayList); + + // Map the image to the mesh's vertices + textureMap = segmented_to_virtual(textureMaps[0]); + meshVerts = textureMap[0]; + meshTris = textureMap[meshVerts * 3 + 1]; + gSPDisplayList(gfx++, render_painting(tArray[0], tWidth, tHeight, textureMap, meshVerts, meshTris, painting->alpha)); + + // Update the ripple, may automatically reset the painting's state. + painting_update_ripple_state(painting); + + gSPPopMatrix(gfx++, G_MTX_MODELVIEW); + gSPDisplayList(gfx++, dl_paintings_env_mapped_end); + gSPEndDisplayList(gfx); + return dlist; } +/** + * Generates a mesh, calculates vertex normals for lighting, and renders a rippling painting. + * The mesh and vertex normals are regenerated and freed every frame. + */ Gfx *display_painting_rippling(struct Painting *painting) { - s16 *sp34 = segmented_to_virtual(seg2_triangle_mesh); - s16 *sp30 = segmented_to_virtual(seg2_mesh_order); - s16 sp2E = sp34[0]; - s16 sp2C = sp34[sp2E * 3 + 1]; - Gfx *sp28; + s16 *mesh = segmented_to_virtual(seg2_painting_triangle_mesh); + s16 *neighborTris = segmented_to_virtual(seg2_painting_mesh_neighbor_tris); + s16 numVtx = mesh[0]; + s16 numTris = mesh[numVtx * 3 + 1]; + Gfx *dlist; - Print1(painting, sp34, sp2E); - Print2(sp34, sp2E, sp2C); - func_802D39DC(sp30, sp2E); - switch (painting->rippleShape) { - case RIPPLE_SHAPE_WAVE: - sp28 = func_802D45FC(painting); + // Generate the mesh and its lighting data + painting_generate_mesh(painting, mesh, numVtx); + painting_calculate_triangle_normals(mesh, numVtx, numTris); + painting_average_vertex_normals(neighborTris, numVtx); + + // Map the painting's texture depending on the painting's texture type. + switch (painting->textureType) { + case PAINTING_IMAGE: + dlist = painting_ripple_image(painting); break; - case RIPPLE_SHAPE_CONCENTRIC: - sp28 = func_802D4874(painting); + case PAINTING_ENV_MAP: + dlist = painting_ripple_env_mapped(painting); break; } - mem_pool_free(gEffectsMemoryPool, D_8035FFA0); - mem_pool_free(gEffectsMemoryPool, D_8035FFA4); - return sp28; + + // The mesh data is freed every frame. + mem_pool_free(gEffectsMemoryPool, gPaintingMesh); + mem_pool_free(gEffectsMemoryPool, gPaintingTriNorms); + return dlist; } +/** + * Render a normal painting. + */ Gfx *display_painting_not_rippling(struct Painting *painting) { - Gfx *sp2C = alloc_display_list(4 * sizeof(Gfx)); - Gfx *sp28 = sp2C; + Gfx *dlist = alloc_display_list(4 * sizeof(Gfx)); + Gfx *gfx = dlist; - if (sp2C == NULL) { - return sp2C; + if (dlist == NULL) { + return dlist; } - gSPDisplayList(sp28++, func_802D43FC(painting)); - gSPDisplayList(sp28++, painting->displayList58); - gSPPopMatrix(sp28++, G_MTX_MODELVIEW); - gSPEndDisplayList(sp28); - return sp2C; + gSPDisplayList(gfx++, painting_model_view_transform(painting)); + gSPDisplayList(gfx++, painting->normalDisplayList); + gSPPopMatrix(gfx++, G_MTX_MODELVIEW); + gSPEndDisplayList(gfx); + return dlist; } +/** + * Clear mario-related state and clear gRipplingPainting. + */ void reset_painting(struct Painting *painting) { painting->lastFloor = 0; painting->currFloor = 0; painting->floorEntered = 0; - painting->lastMarioUnderPainting = 0; - painting->currMarioUnderPainting = 0; - painting->marioNewlyUnderPainting = 0; - ripplingPainting = NULL; + painting->marioWasUnder = 0; + painting->marioIsUnder = 0; + painting->marioWentUnder = 0; + + gRipplingPainting = NULL; } -void update_ddd_painting(struct Painting *painting, float frontPos, float backPos, - float speed) // Tells the DDD painting whether to move back -{ - u32 dddFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, - DIRE_DIRE_DOCKS - 1); // Obtain the DDD star flags - u32 saveFileFlags = save_file_get_flags(); // Get the other save file flags - u32 bowsersSubBeaten = - dddFlags & BOARD_BOWSERS_SUB; // Find out whether Board Bowser's Sub was collected - u32 dddBack = saveFileFlags & SAVE_FLAG_DDD_MOVED_BACK; // Check whether DDD has already moved back +/** + * Controls the x coordinate of the DDD painting. + * + * Before mario gets the "Board Bowser's Sub" star in DDD, the painting spawns at frontPos. + * + * If mario just got the star, the painting's x coordinate moves to backPos at a rate of `speed` units. + * + * When the painting reaches backPos, a save flag is set so that the painting will spawn at backPos + * whenever it loads. + * + * This function also sets gDddPaintingStatus, which controls the warp: + * 0 (0b00): set x coordinate to frontPos + * 2 (0b10): set x coordinate to backPos + * 3 (0b11): same as 2. Bit 0 is ignored + */ +void move_ddd_painting(struct Painting *painting, f32 frontPos, f32 backPos, f32 speed) { + // Obtain the DDD star flags + u32 dddFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_DDD - 1); + // Get the other save file flags + u32 saveFileFlags = save_file_get_flags(); + // Find out whether Board Bowser's Sub was collected + u32 bowsersSubBeaten = dddFlags & BOARD_BOWSERS_SUB; + // Check whether DDD has already moved back + u32 dddBack = saveFileFlags & SAVE_FLAG_DDD_MOVED_BACK; if (!bowsersSubBeaten && !dddBack) { - painting->vXPos = frontPos; // If we haven't collected the star or moved the painting, put the - // painting at the front - dddStatus = 0; - } else if (bowsersSubBeaten - && !dddBack) // If we've collected the star but not moved the painting back, - { - painting->vXPos += - speed; // Each frame, move the painting by a certain speed towards the back area. - dddStatus = BOWSERS_SUB_BEATEN; - if (painting->vXPos >= backPos) { - painting->vXPos = backPos; - save_file_set_flags( - SAVE_FLAG_DDD_MOVED_BACK); // Tell the save file that we've moved DDD back. + // If we haven't collected the star or moved the painting, put the painting at the front + painting->posX = frontPos; + gDddPaintingStatus = 0; + } else if (bowsersSubBeaten && !dddBack) { + // If we've collected the star but not moved the painting back, + // Each frame, move the painting by a certain speed towards the back area. + painting->posX += speed; + gDddPaintingStatus = BOWSERS_SUB_BEATEN; + if (painting->posX >= backPos) { + painting->posX = backPos; + // Tell the save file that we've moved DDD back. + save_file_set_flags(SAVE_FLAG_DDD_MOVED_BACK); } } else if (bowsersSubBeaten && dddBack) { - painting->vXPos = - backPos; // If the painting has already moved back, place it in the back position. - dddStatus = BOWSERS_SUB_BEATEN | DDD_BACK; + // If the painting has already moved back, place it in the back position. + painting->posX = backPos; + gDddPaintingStatus = BOWSERS_SUB_BEATEN | DDD_BACK; } } -struct Struct802D4E04 { - u8 filler0[2]; - s16 unk2; - u8 filler4[20]; - u32 unk18; // the upper half is the painting's id -}; - -void func_802D4E04(struct GraphNodeGenerated *a, struct Painting *b) { - switch (b->brightness) { - case 0xFF: // brightest - a->fnNode.node.flags = (a->fnNode.node.flags & 0xFF) | 0x100; +/** + * Set the painting's node's layer based on its alpha + */ +void set_painting_layer(struct GraphNodeGenerated *gen, struct Painting *painting) { + switch (painting->alpha) { + case 0xFF: // Opaque + gen->fnNode.node.flags = (gen->fnNode.node.flags & 0xFF) | (LAYER_OPAQUE << 8); break; default: - a->fnNode.node.flags = (a->fnNode.node.flags & 0xFF) | 0x500; + gen->fnNode.node.flags = (gen->fnNode.node.flags & 0xFF) | (LAYER_TRANSPARENT << 8); break; } } +/** + * Display either a normal painting or a rippling one depending on the painting's ripple status + */ Gfx *display_painting(struct Painting *painting) { - switch (painting->rippleStatus) { - case RIPPLE_STATE_NONE: + switch (painting->state) { + case PAINTING_IDLE: return display_painting_not_rippling(painting); break; default: @@ -838,96 +1131,117 @@ Gfx *display_painting(struct Painting *painting) { } } -void vertical_painting_ripple(struct Painting *painting, struct Painting *paintingGroup[]) { - if (painting->rippleTrigger - == RIPPLE_TRIGGER_PROXIMITY) // make the painting ripple using a different function based on its - // ripple trigger and status - { - switch (painting->rippleStatus) { - case RIPPLE_STATE_NONE: - vertical_proximity_ripple_painting_ripple(painting, paintingGroup); +/** + * Update function for wall paintings. + * Calls a different update function depending on the painting's ripple trigger and current state. + */ +void wall_painting_update(struct Painting *painting, struct Painting *paintingGroup[]) { + if (painting->rippleTrigger == RIPPLE_TRIGGER_PROXIMITY) { + switch (painting->state) { + case PAINTING_IDLE: + wall_painting_proximity_idle(painting, paintingGroup); break; - case RIPPLE_STATE_IDLE: - vertical_proximity_ripple_painting_ripple_if_mario_enters(painting, paintingGroup); + case PAINTING_RIPPLE: + wall_painting_proximity_rippling(painting, paintingGroup); break; } } else if (painting->rippleTrigger == RIPPLE_TRIGGER_CONTINUOUS) { - switch (painting->rippleStatus) { - case RIPPLE_STATE_NONE: - vertical_continuous_ripple_painting_ripple(painting, paintingGroup); + switch (painting->state) { + case PAINTING_IDLE: + wall_painting_continuous_idle(painting, paintingGroup); break; - case RIPPLE_STATE_IDLE: - vertical_continuous_ripple_painting_ripple_if_mario_enters(painting, paintingGroup); + case PAINTING_RIPPLE: + wall_painting_continuous_rippling(painting, paintingGroup); break; } } } -void horizontal_painting_ripple(struct Painting *painting, struct Painting *paintingGroup[]) { - if (painting->rippleTrigger - == RIPPLE_TRIGGER_PROXIMITY) // make the painting ripple using a different function based on its - // ripple trigger and status - { - switch (painting->rippleStatus) // No horizontal proximity ripple paintings exist in-game. - { - case RIPPLE_STATE_NONE: - horizontal_proximity_ripple_painting_ripple(painting, paintingGroup); +/** + * Update function for floor paintings (HMC and CotMC) + * Calls a different update function depending on the painting's ripple trigger and current state. + * + * No floor paintings use RIPPLE_TRIGGER_PROXIMITY in the game. + */ +void floor_painting_update(struct Painting *painting, struct Painting *paintingGroup[]) { + if (painting->rippleTrigger == RIPPLE_TRIGGER_PROXIMITY) { + switch (painting->state) { + case PAINTING_IDLE: + floor_painting_proximity_idle(painting, paintingGroup); break; - case RIPPLE_STATE_IDLE: - horizontal_proximity_ripple_painting_ripple_if_mario_enters(painting, paintingGroup); + case PAINTING_RIPPLE: + floor_painting_proximity_rippling(painting, paintingGroup); break; } } else if (painting->rippleTrigger == RIPPLE_TRIGGER_CONTINUOUS) { - switch (painting->rippleStatus) { - case RIPPLE_STATE_NONE: - horizontal_continuous_ripple_painting_ripple(painting, paintingGroup); + switch (painting->state) { + case PAINTING_IDLE: + floor_painting_continuous_idle(painting, paintingGroup); break; - case RIPPLE_STATE_IDLE: - horizontal_continuous_ripple_painting_ripple_if_mario_enters(painting, paintingGroup); + case PAINTING_RIPPLE: + floor_painting_continuous_rippling(painting, paintingGroup); break; } } } -Gfx *Geo18_802D5B98(s32 run, struct GraphNode *node, UNUSED void *context) { - struct GraphNodeGenerated *sp2C = (struct GraphNodeGenerated *) node; - s32 sp28 = (sp2C->parameter >> 8) & 0xFF; - s32 id = sp2C->parameter & 0xFF; - Gfx *sp20 = NULL; - struct Painting **paintingGroup = paintingGroups[sp28]; +/** + * Render and update the painting whose id and group matches the values in the GraphNode's parameter. + * Use PAINTING_ID(id, group) to set the right parameter in a level's geo layout. + */ +Gfx *geo_painting_draw(s32 callContext, struct GraphNode *node, UNUSED void *context) { + struct GraphNodeGenerated *gen = (struct GraphNodeGenerated *) node; + s32 group = (gen->parameter >> 8) & 0xFF; + s32 id = gen->parameter & 0xFF; + Gfx *paintingDlist = NULL; + struct Painting **paintingGroup = sPaintingGroups[group]; struct Painting *painting = segmented_to_virtual(paintingGroup[id]); - if (run != TRUE) { + if (callContext != GEO_CONTEXT_RENDER) { reset_painting(painting); - } else if (run == TRUE) // because the extra comparison was really necessary... - { - if (sp28 == 1 && id == PAINTING_ID_DDD) { // painting is DDD painting - update_ddd_painting(painting, 3456.0f, 5529.6f, 20.0f); + } else if (callContext == GEO_CONTEXT_RENDER) { + + // Update the ddd painting before drawing + if (group == 1 && id == PAINTING_ID_DDD) { + move_ddd_painting(painting, 3456.0f, 5529.6f, 20.0f); } - func_802D4E04(sp2C, painting); - sp20 = display_painting(painting); + + // Determine if the painting is transparent + set_painting_layer(gen, painting); + + // Draw before updating + paintingDlist = display_painting(painting); + + // Update the painting painting_update_floors(painting); - switch ((s16) painting->vXRotation) { - case ROTATION_VERTICAL: - vertical_painting_ripple(painting, paintingGroup); + switch ((s16) painting->pitch) { + // only paintings with 0 pitch are treated as walls + case 0: + wall_painting_update(painting, paintingGroup); break; default: - horizontal_painting_ripple(painting, paintingGroup); + floor_painting_update(painting, paintingGroup); break; } } - return sp20; + return paintingDlist; } -Gfx *Geo18_802D5D0C(s32 run, UNUSED struct GraphNode *node, UNUSED f32 c[4][4]) { +/** + * Update the painting system's local copy of mario's current floor and position. + */ +Gfx *geo_painting_update(s32 callContext, UNUSED struct GraphNode *node, UNUSED f32 c[4][4]) { struct Surface *surface; - if (run != TRUE) { + // Reset the update counter + if (callContext != GEO_CONTEXT_RENDER) { gLastPaintingUpdateCounter = gAreaUpdateCounter - 1; gPaintingUpdateCounter = gAreaUpdateCounter; } else { gLastPaintingUpdateCounter = gPaintingUpdateCounter; gPaintingUpdateCounter = gAreaUpdateCounter; + + // Store mario's floor and position find_floor(gMarioObject->oPosX, gMarioObject->oPosY, gMarioObject->oPosZ, &surface); gPaintingMarioFloorType = surface->type; gPaintingMarioXPos = gMarioObject->oPosX; diff --git a/src/game/paintings.h b/src/game/paintings.h index ba98221..a5d1a16 100644 --- a/src/game/paintings.h +++ b/src/game/paintings.h @@ -1,97 +1,120 @@ #ifndef PAINTINGS_H #define PAINTINGS_H -#define DEFAULT_HEIGHT 614.0 +#include "types.h" + +/** + * @file paintings.h + */ + +/// Use to properly set a GraphNodeGenerated's parameter to point to the right painting +#define PAINTING_ID(id, grp) id | (grp << 8) + +/// The default painting side length +#define PAINTING_SIZE 614.0 #define PAINTING_ID_DDD 7 -#define DIRE_DIRE_DOCKS 9 #define BOARD_BOWSERS_SUB 1 #define BOWSERS_SUB_BEATEN 0x2 #define DDD_BACK 0x1 -#define STAND_LEFT 0x20 -#define STAND_MIDDLE 0x10 -#define STAND_RIGHT 0x8 -#define ENTER_LEFT 0x4 -#define ENTER_MIDDLE 0x2 -#define ENTER_RIGHT 0x1 - -#define RIPPLE_SHAPE_WAVE 0 -#define RIPPLE_SHAPE_CONCENTRIC 1 - -#define RIPPLE_STATE_NONE 0 -#define RIPPLE_STATE_IDLE 1 -#define RIPPLE_STATE_ENTRY 2 +#define PAINTING_IDLE 0 +#define PAINTING_RIPPLE 1 +#define PAINTING_ENTERED 2 #define RIPPLE_TRIGGER_PROXIMITY 10 #define RIPPLE_TRIGGER_CONTINUOUS 20 -#define ROTATION_VERTICAL 0 - -#define NEAR_MARIO_LATERALLY 30 -#define MARIO_X 40 -#define MIDDLE_X 50 -#define MARIO_Y 60 -#define MARIO_Z 70 -#define MIDDLE_Y 80 - -#define DONT_RESET_TIMER -56 -#define RESET_TIMER 100 +/// Painting that uses 1 or more images as a texture +#define PAINTING_IMAGE 0 +/// Painting that has one texture used for an environment map effect +#define PAINTING_ENV_MAP 1 struct Painting { s16 id; - s8 faceCount; - s8 rippleShape; + /// How many images should be drawn when the painting is rippling. + s8 imageCount; + /// Either PAINTING_IMAGE or PAINTING_ENV_MAP + s8 textureType; + /// The floor mario was on last frame s8 lastFloor; + /// The floor mario is currently on s8 currFloor; + /// The floor mario just entered s8 floorEntered; - s8 rippleStatus; + /// The painting's state, see top of paintings.c + s8 state; - float vXRotation; - float vYRotation; + /// The painting's rotation + f32 pitch; + f32 yaw; - float vXPos; - float vYPos; - float vZPos; + /// The painting's position + f32 posX; + f32 posY; + f32 posZ; - float currRippleMag; - float passiveRippleMag; - float entryRippleMag; + /// Controls how high the peaks of the ripple are. + f32 currRippleMag; + f32 passiveRippleMag; + f32 entryRippleMag; - float rippleMagMultiplier; - float passiveRippleMagMultiplier; - float entryRippleMagMultiplier; + /// Multiplier that controls how fast the ripple regresses to the IDLE state. + f32 rippleDecay; + f32 passiveRippleDecay; + f32 entryRippleDecay; - float currRippleRate; - float passiveRippleRate; - float entryRippleRate; + /// Controls the ripple's frequency + f32 currRippleRate; + f32 passiveRippleRate; + f32 entryRippleRate; - float dispersionFactor; // the rate at which the magnitude of the ripple decreases as you move farther from the central point of the ripple - float passiveDispersionFactor; - float entryDispersionFactor; + /// The rate at which the magnitude of the ripple decreases as you move farther from the central + /// point of the ripple + f32 dispersionFactor; + f32 passiveDispersionFactor; + f32 entryDispersionFactor; - float rippleTimer; + /// How far the ripple has spread + f32 rippleTimer; - float horizontalRippleSpot; - float verticalRippleSpot; + /// The x and y origin of the ripple + f32 rippleX; + f32 rippleY; - const Gfx *displayList58; - const s16 *const *meshData; + /// Display list used when the painting is normal. + const Gfx *normalDisplayList; + /// Data used to map the texture to the mesh + const s16 *const *textureMaps; + + // Texture data const u8 *const *textureArray; s16 textureWidth; s16 textureHeight; - const Gfx *displayList68; + + /// Display list used when the painting is rippling. + const Gfx *rippleDisplayList; + /// Controls when a passive ripple starts. RIPPLE_TRIGGER_CONTINUOUS or RIPPLE_TRIGGER_PROXIMITY. s8 rippleTrigger; - u8 brightness; - s8 lastMarioUnderPainting; - s8 currMarioUnderPainting; - s8 marioNewlyUnderPainting; - float vSize; + + /// The painting's transparency. Determines what layer the painting is in. + u8 alpha; + + /// True if mario was under the painting's y coordinate last frame + s8 marioWasUnder; + /// True if mario is currently under the painting's y coordinate + s8 marioIsUnder; + /// True if mario just went under the painting's y coordinate on this frame + s8 marioWentUnder; + + /// Uniformly scales the painting to a multiple of PAINTING_SIZE. + /// By default a painting is 614.0 x 614.0 + f32 size; }; extern struct Painting cotmc_painting; @@ -114,23 +137,26 @@ extern struct Painting thi_huge_painting; extern struct Painting ttm_slide_painting; extern u16 gAreaUpdateCounter; -extern float gPaintingMarioYEntry; +extern f32 gPaintingMarioYEntry; // defined in file extern s16 gPaintingMarioFloorType; -extern float gPaintingMarioXPos, gPaintingMarioYPos, gPaintingMarioZPos; +extern f32 gPaintingMarioXPos, gPaintingMarioYPos, gPaintingMarioZPos; -struct Thing { //TODO: Give me a better name - /*0x00*/ s16 unk0[3]; - /*0x06*/ s8 unk6[3]; +/** + * Contains the position and normal of a vertex in the painting's generated mesh. + */ +struct PaintingMeshVertex { + /*0x00*/ s16 pos[3]; + /*0x06*/ s8 norm[3]; }; -extern struct Thing *D_8035FFA0; -extern Vec3f *D_8035FFA4; -extern struct Painting *ripplingPainting; -extern s8 dddStatus; +extern struct PaintingMeshVertex *gPaintingMesh; +extern Vec3f *gPaintingTriNorms; +extern struct Painting *gRipplingPainting; +extern s8 gDddPaintingStatus; -extern Gfx *Geo18_802D5B98(s32 run, struct GraphNode *node, void *context); -extern Gfx *Geo18_802D5D0C(s32 run, struct GraphNode *node, f32 c[4][4]); +extern Gfx *geo_painting_draw(s32 run, struct GraphNode *node, void *context); +extern Gfx *geo_painting_update(s32 run, struct GraphNode *node, f32 c[4][4]); #endif /* PAINTINGS_H */ diff --git a/src/game/save_file.c b/src/game/save_file.c index 2fd6311..23ae6ac 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -44,7 +44,7 @@ STATIC_ASSERT(ARRAY_COUNT(gLevelToCourseNumTable) == LEVEL_COUNT - 1, // This was probably used to set progress to 100% for debugging, but // it was removed from the release ROM. -static void no_op(void) { +static void stub_save_file_1(void) { UNUSED s32 pad; } @@ -316,7 +316,7 @@ void save_file_load_all(void) { } } - no_op(); + stub_save_file_1(); } /** diff --git a/src/game/save_file.h b/src/game/save_file.h index 413ed44..198748d 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -150,9 +150,11 @@ void check_if_should_set_warp_checkpoint(struct WarpNode *a); s32 check_warp_checkpoint(struct WarpNode *a); #ifdef VERSION_EU -#define LANGUAGE_ENGLISH 0 -#define LANGUAGE_FRENCH 1 -#define LANGUAGE_GERMAN 2 +enum EuLanguages { + LANGUAGE_ENGLISH, + LANGUAGE_FRENCH, + LANGUAGE_GERMAN +}; void eu_set_language(u16 language); u16 eu_get_language(void); diff --git a/src/game/segment2.h b/src/game/segment2.h index b370dc2..e1a9c34 100644 --- a/src/game/segment2.h +++ b/src/game/segment2.h @@ -41,8 +41,8 @@ extern Gfx dl_paintings_rippling_begin[]; extern Gfx dl_paintings_rippling_end[]; extern Gfx dl_paintings_env_mapped_begin[]; extern Gfx dl_paintings_env_mapped_end[]; -extern u8 seg2_triangle_mesh[]; -extern u8 seg2_mesh_order[]; +extern u8 seg2_painting_triangle_mesh[]; +extern u8 seg2_painting_mesh_neighbor_tris[]; extern u8* main_hud_lut[58]; extern Gfx dl_hud_img_load_tex_block[]; extern Gfx dl_hud_img_begin[]; diff --git a/src/game/sound_init.c b/src/game/sound_init.c index 96fd038..91690e5 100644 --- a/src/game/sound_init.c +++ b/src/game/sound_init.c @@ -73,11 +73,11 @@ static s8 paintingEjectSoundPlayed = FALSE; static void play_menu_sounds_extra(int a, void *b); -void func_80248C10(void) { +void reset_volume(void) { D_8032C6C0 = 0; } -void func_80248C28(s32 a) // Soften volume +void lower_background_noise(s32 a) // Soften volume { switch (a) { case 1: @@ -90,7 +90,7 @@ void func_80248C28(s32 a) // Soften volume D_8032C6C0 |= a; } -void func_80248CB8(s32 a) // harden volume +void raise_background_noise(s32 a) // harden volume { switch (a) { case 1: @@ -103,14 +103,14 @@ void func_80248CB8(s32 a) // harden volume D_8032C6C0 &= ~a; } -void func_80248D48(void) { +void disable_background_sound(void) { if (D_8032C6C4 == 0) { D_8032C6C4 = 1; sound_banks_disable(2, 0x037A); } } -void func_80248D90(void) { +void enable_background_sound(void) { if (D_8032C6C4 == 1) { D_8032C6C4 = 0; sound_banks_enable(2, 0x037A); @@ -157,9 +157,8 @@ void play_menu_sounds(s16 soundMenuFlags) { * Plays the painting eject sound effect if it has not already been played */ void play_painting_eject_sound(void) { - if (ripplingPainting != NULL - && ripplingPainting->rippleStatus == 2) // ripple when Mario enters painting - { + if (gRipplingPainting != NULL && gRipplingPainting->state == PAINTING_ENTERED) { + // ripple when Mario enters painting if (paintingEjectSoundPlayed == FALSE) { play_sound(SOUND_GENERAL_PAINTING_EJECT, gMarioStates[0].marioObj->header.gfx.cameraToObject); @@ -207,14 +206,14 @@ void set_background_music(u16 a, u16 seqArgs, s16 fadeTimer) { } } -void func_802491FC(s16 fadeOutTime) { +void fadeout_music(s16 fadeOutTime) { func_803210D4(fadeOutTime); sCurrentMusic = MUSIC_NONE; sCurrentShellMusic = MUSIC_NONE; sCurrentCapMusic = MUSIC_NONE; } -void func_8024924C(s16 fadeTimer) { +void fadeout_level_music(s16 fadeTimer) { sequence_player_fade_out(0, fadeTimer); sCurrentMusic = MUSIC_NONE; sCurrentShellMusic = MUSIC_NONE; diff --git a/src/game/sound_init.h b/src/game/sound_init.h index 272ef30..47e7d0a 100644 --- a/src/game/sound_init.h +++ b/src/game/sound_init.h @@ -16,18 +16,18 @@ #define SOUND_MENU_MODE_MONO 1 #define SOUND_MENU_MODE_HEADSET 2 -extern void func_80248C10(void); -extern void func_80248CB8(s32); -extern void func_80248C28(s32); -extern void func_80248D48(void); -extern void func_80248D90(void); +extern void reset_volume(void); +extern void raise_background_noise(s32); +extern void lower_background_noise(s32); +extern void disable_background_sound(void); +extern void enable_background_sound(void); extern void set_sound_mode(u16); extern void play_menu_sounds(s16 a); extern void play_painting_eject_sound(void); extern void play_infinite_stairs_music(void); extern void set_background_music(u16, u16, s16); -extern void func_802491FC(s16); -extern void func_8024924C(s16 fadeTimer); +extern void fadeout_music(s16); +extern void fadeout_level_music(s16 fadeTimer); extern void play_cutscene_music(u16); extern void play_shell_music(void); extern void stop_shell_music(void); diff --git a/src/game/spawn_object.c b/src/game/spawn_object.c index b50db3e..c78619c 100644 --- a/src/game/spawn_object.c +++ b/src/game/spawn_object.c @@ -363,6 +363,6 @@ struct Object *create_object(const BehaviorScript *behScript) { * Mark an object to be unloaded at the end of the frame. */ void mark_obj_for_deletion(struct Object *obj) { - //! Same issue as mark_object_for_deletion + //! Same issue as obj_mark_for_deletion obj->activeFlags = ACTIVE_FLAGS_DEACTIVATED; } diff --git a/src/game/spawn_sound.c b/src/game/spawn_sound.c index 0886ebb..98481f1 100644 --- a/src/game/spawn_sound.c +++ b/src/game/spawn_sound.c @@ -28,14 +28,14 @@ void exec_anim_sound_state(struct SoundState *soundStates) { // in the sound state information, -1 (0xFF) is for empty // animFrame entries. These checks skips them. if ((animFrame = soundStates[stateIdx].animFrame1) >= 0) { - if (obj_check_anim_frame(animFrame)) { - PlaySound2(soundStates[stateIdx].soundMagic); + if (cur_obj_check_anim_frame(animFrame)) { + cur_obj_play_sound_2(soundStates[stateIdx].soundMagic); } } if ((animFrame = soundStates[stateIdx].animFrame2) >= 0) { - if (obj_check_anim_frame(animFrame)) { - PlaySound2(soundStates[stateIdx].soundMagic); + if (cur_obj_check_anim_frame(animFrame)) { + cur_obj_play_sound_2(soundStates[stateIdx].soundMagic); } } } break; @@ -54,17 +54,16 @@ void create_sound_spawner(s32 soundMagic) { /* * The following 2 functions are relevent to the sound state function - * above. While only PlaySound2 is used, they may have been intended as + * above. While only cur_obj_play_sound_2 is used, they may have been intended as * seperate left/right leg functions that went unused. */ -void PlaySound(s32 soundMagic) { +void cur_obj_play_sound_1(s32 soundMagic) { if (gCurrentObject->header.gfx.node.flags & 0x0001) { play_sound(soundMagic, gCurrentObject->header.gfx.cameraToObject); } } -// duplicate function, but its the used one -void PlaySound2(s32 soundMagic) { +void cur_obj_play_sound_2(s32 soundMagic) { if (gCurrentObject->header.gfx.node.flags & 0x0001) { play_sound(soundMagic, gCurrentObject->header.gfx.cameraToObject); } diff --git a/src/game/spawn_sound.h b/src/game/spawn_sound.h index 8e3bcde..6a0bf66 100644 --- a/src/game/spawn_sound.h +++ b/src/game/spawn_sound.h @@ -16,8 +16,8 @@ struct SoundState s32 soundMagic; }; -extern void PlaySound(s32); -extern void PlaySound2(s32); +extern void cur_obj_play_sound_1(s32); +extern void cur_obj_play_sound_2(s32); extern void create_sound_spawner(s32); extern void exec_anim_sound_state(struct SoundState *soundStates); diff --git a/src/menu/file_select.c b/src/menu/file_select.c index 06b80d3..93c5c18 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -20,6 +20,12 @@ #include "file_select.h" #include "dialog_ids.h" +#include "eu_translation.h" +#ifdef VERSION_EU +#undef LANGUAGE_FUNCTION +#define LANGUAGE_FUNCTION sLanguageMode +#endif + /** * @file file_select.c * This file implements how the file select and it's menus render and function. @@ -27,11 +33,10 @@ * special menu messages and phases, button states and button clicked checks. */ - #ifdef VERSION_US // The current sound mode is automatically centered on US due to // the large length difference between options. -// sSoundTextY unused (EU supports its existance). +// sSoundTextY unused (EU supports its existence). static s16 sSoundTextX; static s16 sSoundTextY; #endif @@ -56,7 +61,7 @@ static struct Object *sMainMenuButtons[NUM_BUTTONS]; #ifdef VERSION_EU // The current sound mode is automatically centered on US due to // the large length difference between options. -// sSoundTextY unused +// sSoundTextY is unused static s16 sSoundTextX; static s16 sSoundTextY; #endif @@ -65,12 +70,11 @@ static s16 sSoundTextY; // sYesNoColor[0]: YES | sYesNoColor[1]: NO static u8 sYesNoColor[2]; -// Unused variable that is written to for the centered X value for some strings. +// Unused variable that is written to define centered X value for some strings. #ifdef VERSION_EU static s16 sCenteredX; #endif - // The button that is selected when it is clicked. static s8 sSelectedButtonID = MENU_BUTTON_NONE; @@ -113,17 +117,10 @@ static s16 sMainMenuTimer = 0; // 0: gSoundMode = 0 (Stereo) | 1: gSoundMode = 3 (Mono) | 2: gSoundMode = 1 (Headset) static s8 sSoundMode = 0; -// PAL changes most text to arrays for each language. This define allows these -// differences to be combined. +// Active language for PAL arrays, values defined similar to sSoundMode +// 0: English | 1: French | 2: German #ifdef VERSION_EU - #define LANGUAGE_ARRAY(cmd) cmd[sLanguageMode] -#else - #define LANGUAGE_ARRAY(cmd) cmd -#endif - -// Active language for PAL arrays. -#ifdef VERSION_EU -static s8 sLanguageMode = LANGUAGE_EN; +static s8 sLanguageMode = LANGUAGE_ENGLISH; #endif // Tracks which button will be pressed in the erase confirmation prompt (yes/no). @@ -141,7 +138,7 @@ static s8 sSelectedFileNum = 0; // coin high score, 1 for high score across all files. static s8 sScoreFileCoinScoreMode = 0; -// If no save file exists, open the language menu so the user can find it. +// In PAL, if no save file exists, open the language menu so the user can find it. #ifdef VERSION_EU static s8 sOpenLangSettings = FALSE; #endif @@ -272,7 +269,7 @@ static unsigned char textNo[][5] = {{ TEXT_NO }, { TEXT_NO_FR }, { TEXT_NO_DE }} #endif #ifdef VERSION_EU -// TODO: Should the following should be data local to functions? +// In EU, Erase File and Sound Select strings are outside it's print string function static unsigned char textEraseFile[][17] = { { TEXT_ERASE_FILE_BUTTON }, { TEXT_ERASE_FILE_BUTTON_FR }, { TEXT_ERASE_FILE_BUTTON_DE } }; @@ -299,7 +296,7 @@ static unsigned char textLanguage[][9] = {{ TEXT_ENGLISH }, { TEXT_FRENCH }, { T static unsigned char textMario[] = { TEXT_MARIO }; static unsigned char textHiScore[][15] = {{ TEXT_HI_SCORE }, { TEXT_HI_SCORE_FR }, { TEXT_HI_SCORE_DE }}; -static unsigned char textMyScore2[][10] = {{ TEXT_MY_SCORE }, { TEXT_MY_SCORE_FR }, { TEXT_MY_SCORE_DE }}; +static unsigned char textMyScore[][10] = {{ TEXT_MY_SCORE }, { TEXT_MY_SCORE_FR }, { TEXT_MY_SCORE_DE }}; static unsigned char textNew[][5] = {{ TEXT_NEW }, { TEXT_NEW_FR }, { TEXT_NEW_DE }}; static unsigned char starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; @@ -321,7 +318,7 @@ void beh_yellow_background_menu_init(void) { * Properly scales the background in the main menu. */ void beh_yellow_background_menu_loop(void) { - obj_scale(9.0f); + cur_obj_scale(9.0f); } /** @@ -558,7 +555,7 @@ void bhv_menu_button_loop(void) { sCursorClickingTimer = 4; break; } - obj_scale(gCurrentObject->oMenuButtonScale); + cur_obj_scale(gCurrentObject->oMenuButtonScale); } /** @@ -645,7 +642,6 @@ void render_score_menu_buttons(struct Object *scoreButton) { #else #define SCORE_TIMER 31 #endif - /** * In the score menu, checks if a button was clicked to play a sound, button state and other functions. */ @@ -793,17 +789,10 @@ void copy_action_file_button(struct Object *copyButton, s32 copyFileButtonID) { sFadeOutText = TRUE; sMainMenuTimer = 0; save_file_copy(sSelectedFileIndex, copyFileButtonID - MENU_BUTTON_COPY_MIN); - #ifdef VERSION_EU sMainMenuButtons[copyFileButtonID]->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE]; sMainMenuButtons[copyFileButtonID - MENU_BUTTON_COPY_MIN]->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE]; - #else - sMainMenuButtons[copyFileButtonID]->header.gfx.sharedChild = - gLoadedGraphNodes[MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE]; - sMainMenuButtons[copyFileButtonID - MENU_BUTTON_COPY_MIN]->header.gfx.sharedChild = - gLoadedGraphNodes[MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE]; - #endif } else { // If clicked in a existing save file, play buzz sound if (MENU_BUTTON_COPY_FILE_A + sSelectedFileIndex == copyFileButtonID) { @@ -1019,9 +1008,9 @@ void check_erase_menu_clicked_buttons(struct Object *eraseButton) { #undef MAIN_RETURN_TIMER #ifdef VERSION_EU - #define SOUND_Y 388 + #define SOUND_BUTTON_Y 388 #else - #define SOUND_Y 0 + #define SOUND_BUTTON_Y 0 #endif /** @@ -1030,15 +1019,15 @@ void check_erase_menu_clicked_buttons(struct Object *eraseButton) { void render_sound_mode_menu_buttons(struct Object *soundModeButton) { // Stereo option button sMainMenuButtons[MENU_BUTTON_STEREO] = spawn_object_rel_with_rot( - soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 533, SOUND_Y, -100, 0, -0x8000, 0); + soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 533, SOUND_BUTTON_Y, -100, 0, -0x8000, 0); sMainMenuButtons[MENU_BUTTON_STEREO]->oMenuButtonScale = 0.11111111f; // Mono option button sMainMenuButtons[MENU_BUTTON_MONO] = spawn_object_rel_with_rot( - soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 0, SOUND_Y, -100, 0, -0x8000, 0); + soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 0, SOUND_BUTTON_Y, -100, 0, -0x8000, 0); sMainMenuButtons[MENU_BUTTON_MONO]->oMenuButtonScale = 0.11111111f; // Headset option button sMainMenuButtons[MENU_BUTTON_HEADSET] = spawn_object_rel_with_rot( - soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, -533, SOUND_Y, -100, 0, -0x8000, 0); + soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, -533, SOUND_BUTTON_Y, -100, 0, -0x8000, 0); sMainMenuButtons[MENU_BUTTON_HEADSET]->oMenuButtonScale = 0.11111111f; #ifdef VERSION_EU @@ -1064,7 +1053,7 @@ void render_sound_mode_menu_buttons(struct Object *soundModeButton) { sMainMenuButtons[MENU_BUTTON_OPTION_MIN + sSoundMode]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN; #endif } -#undef SOUND_Y +#undef SOUND_BUTTON_Y /** * In the sound mode menu, checks if a button was clicked to change sound mode & button state. @@ -1078,14 +1067,16 @@ void check_sound_mode_menu_clicked_buttons(struct Object *soundModeButton) { s16 buttonY = sMainMenuButtons[buttonID]->oPosY; if (check_clicked_button(buttonX, buttonY, 22.0f) == TRUE) { - // If sound mode button clicked, select it - // The check will always be true because of the group configured above + // If sound mode button clicked, select it and define sound mode + // The check will always be true because of the group configured above (In JP & US) if (buttonID == MENU_BUTTON_STEREO || buttonID == MENU_BUTTON_MONO || buttonID == MENU_BUTTON_HEADSET) { if (soundModeButton->oMenuButtonActionPhase == SOUND_MODE_PHASE_MAIN) { play_sound(SOUND_MENU_CLICK_FILE_SELECT, gDefaultSoundArgs); sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; #ifndef VERSION_EU + // Sound menu buttons don't return to Main Menu in EU + // because they don't have a case in bhv_menu_button_manager_loop sSelectedButtonID = buttonID; #endif sSoundMode = buttonID - MENU_BUTTON_OPTION_MIN; @@ -1093,6 +1084,7 @@ void check_sound_mode_menu_clicked_buttons(struct Object *soundModeButton) { } } #ifdef VERSION_EU + // If language mode button clicked, select it and change language if (buttonID == MENU_BUTTON_LANGUAGE_ENGLISH || buttonID == MENU_BUTTON_LANGUAGE_FRENCH || buttonID == MENU_BUTTON_LANGUAGE_GERMAN) { if (soundModeButton->oMenuButtonActionPhase == SOUND_MODE_PHASE_MAIN) { @@ -1102,6 +1094,7 @@ void check_sound_mode_menu_clicked_buttons(struct Object *soundModeButton) { eu_set_language(sLanguageMode); } } + // If neither of the buttons above are pressed, return to main menu if (buttonID == MENU_BUTTON_LANGUAGE_RETURN) { play_sound(SOUND_MENU_CLICK_FILE_SELECT, gDefaultSoundArgs); sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; @@ -1351,7 +1344,7 @@ void bhv_menu_button_manager_init(void) { sMainMenuButtons[MENU_BUTTON_ERASE] = spawn_object_rel_with_rot( gCurrentObject, MODEL_MAIN_MENU_RED_ERASE_BUTTON, bhvMenuButton, 2134, -3500, 0, 0, 0, 0); sMainMenuButtons[MENU_BUTTON_ERASE]->oMenuButtonScale = 1.0f; - // Sound mode menu button + // Sound mode menu button (Option Mode in EU) sMainMenuButtons[MENU_BUTTON_SOUND_MODE] = spawn_object_rel_with_rot( gCurrentObject, MODEL_MAIN_MENU_PURPLE_SOUND_BUTTON, bhvMenuButton, 6400, -3500, 0, 0, 0, 0); sMainMenuButtons[MENU_BUTTON_SOUND_MODE]->oMenuButtonScale = 1.0f; @@ -1359,7 +1352,7 @@ void bhv_menu_button_manager_init(void) { sTextBaseAlpha = 0; } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define SAVE_FILE_SOUND SOUND_MENU_STAR_SOUND #else #define SAVE_FILE_SOUND SOUND_MENU_STAR_SOUND_OKEY_DOKEY @@ -1396,7 +1389,8 @@ void check_main_menu_clicked_buttons(void) { } } #ifdef VERSION_EU - if (sOpenLangSettings == TRUE){ + // Open Options Menu if sOpenLangSettings is TRUE (It's TRUE when there's no saves) + if (sOpenLangSettings == TRUE) { sMainMenuButtons[MENU_BUTTON_SOUND_MODE]->oMenuButtonState = MENU_BUTTON_STATE_GROWING; sSelectedButtonID = MENU_BUTTON_SOUND_MODE; sOpenLangSettings = FALSE; @@ -1542,6 +1536,8 @@ void bhv_menu_button_manager_loop(void) { check_sound_mode_menu_clicked_buttons(sMainMenuButtons[MENU_BUTTON_SOUND_MODE]); break; + // STEREO, MONO and HEADSET buttons are undefined so they can be selected without + // exiting the Options menu, as a result they added a return button #ifdef VERSION_EU case MENU_BUTTON_LANGUAGE_RETURN: return_to_main_menu(MENU_BUTTON_SOUND_MODE, sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN]); @@ -1729,7 +1725,7 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { } } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define SELECT_FILE_X 96 #define SCORE_X 50 #define COPY_X 115 @@ -1763,7 +1759,10 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { /** * Prints main menu strings that shows on the yellow background menu screen. - * Does not print the strings of text for EU, only the symbols. + * + * In EU this function acts like "print_save_file_strings" because + * print_main_lang_strings is first called to render the strings for the 4 buttons. + * Same rule applies for score, copy and erase strings. */ void print_main_menu_strings(void) { // Print "SELECT FILE" text @@ -1785,7 +1784,7 @@ void print_main_menu_strings(void) { print_generic_string(SCORE_X, 39, textScore); print_generic_string(COPY_X, 39, textCopy); print_generic_string(ERASE_X, 39, textErase); -#ifndef VERSION_JP +#if !defined(VERSION_JP) && !defined(VERSION_SH) sSoundTextX = get_str_x_pos_from_center(254, textSoundModes[sSoundMode], 10.0f); #endif print_generic_string(SOUNDMODE_X1, 39, textSoundModes[sSoundMode]); @@ -1803,33 +1802,34 @@ void print_main_menu_strings(void) { #ifdef VERSION_EU /** - * Prints main menu strings that shows on the yellow background menu screen with language switching. - * Calls print_main_menu_strings to print the other symbols. + * Prints the first part main menu strings that shows on the yellow background menu screen. + * Has the strings for the 4 buttons below the save buttons that get changed depending of the language. + * Calls print_main_menu_strings to print the remaining strings. */ -void print_lang_strings(void) { +void print_main_lang_strings(void) { s16 centeredX; gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - centeredX = get_str_x_pos_from_center_scale(0xa0, textSelectFile[sLanguageMode], 12.0f); + centeredX = get_str_x_pos_from_center_scale(160, textSelectFile[sLanguageMode], 12.0f); sCenteredX = centeredX; - print_hud_lut_string(2, centeredX, 35, textSelectFile[sLanguageMode]); + print_hud_lut_string(HUD_LUT_GLOBAL, centeredX, 35, textSelectFile[sLanguageMode]); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - centeredX = get_str_x_pos_from_center(0x4C, textScore[sLanguageMode], 10.0f); + centeredX = get_str_x_pos_from_center(76, textScore[sLanguageMode], 10.0f); sCenteredX = centeredX; - print_generic_string(centeredX, 0x27, textScore[sLanguageMode]); - centeredX = get_str_x_pos_from_center(0x83, textCopy[sLanguageMode], 10.0f); + print_generic_string(centeredX, 39, textScore[sLanguageMode]); + centeredX = get_str_x_pos_from_center(131, textCopy[sLanguageMode], 10.0f); sCenteredX = centeredX; - print_generic_string(centeredX, 0x27, textCopy[sLanguageMode]); - centeredX = get_str_x_pos_from_center(0xbd, textErase[sLanguageMode], 10.0f); + print_generic_string(centeredX, 39, textCopy[sLanguageMode]); + centeredX = get_str_x_pos_from_center(189, textErase[sLanguageMode], 10.0f); sCenteredX = centeredX; - print_generic_string(centeredX, 0x27, textErase[sLanguageMode]); - centeredX = get_str_x_pos_from_center(0xf5, textOption[sLanguageMode], 10.0f); + print_generic_string(centeredX, 39, textErase[sLanguageMode]); + centeredX = get_str_x_pos_from_center(245, textOption[sLanguageMode], 10.0f); sCenteredX = centeredX; - print_generic_string(centeredX, 0x27, textOption[sLanguageMode]); + print_generic_string(centeredX, 39, textOption[sLanguageMode]); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); print_main_menu_strings(); @@ -1871,7 +1871,7 @@ void score_menu_display_message(s8 messageID) { } } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define RETURN_X 45 #define COPYFILE_X1 128 #define ERASEFILE_X1 228 @@ -1955,7 +1955,7 @@ void print_score_menu_strings(void) { #endif } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define NOFILE_COPY_X 90 #define COPY_FILE_X 90 #define COPYIT_WHERE_X 90 @@ -2074,7 +2074,7 @@ void copy_menu_update_message(void) { } } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define VIEWSCORE_X1 133 #define ERASEFILE_X2 220 #elif VERSION_EU @@ -2137,7 +2137,7 @@ void print_copy_menu_strings(void) { #endif } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define CURSOR_X 160.0f #define MENU_ERASE_YES_MIN_X 0x91 #define MENU_ERASE_YES_MAX_X 0xA4 @@ -2214,7 +2214,11 @@ void print_erase_menu_prompt(s16 x, s16 y) { gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -#ifdef VERSION_JP +// MARIO_ERASED_VAR is the value there the letter "A" is, it works like this: +// US and EU --- JP +// M a r i o A --- マ リ オ A +// 0 1 2 3 4 5 6 --- 0 1 2 3 +#if defined(VERSION_JP) || defined(VERSION_SH) #define ERASE_FILE_X 96 #define NOSAVE_DATA_X3 90 #define MARIO_ERASED_VAR 3 @@ -2325,7 +2329,7 @@ void erase_menu_update_message(void) { } } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define VIEWSCORE_X2 133 #define COPYFILE_X2 223 #else @@ -2347,7 +2351,7 @@ void print_erase_menu_strings(void) { // Print messageID called inside a erase_menu_update_message case erase_menu_display_message(sStatusMessageID); - #ifndef VERSION_EU +#ifndef VERSION_EU // Print file star counts gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); @@ -2356,28 +2360,29 @@ void print_erase_menu_strings(void) { print_save_file_star_count(SAVE_FILE_C, 90, 119); print_save_file_star_count(SAVE_FILE_D, 211, 119); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); - #endif +#endif // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - #ifdef VERSION_EU + +#ifdef VERSION_EU centeredX = get_str_x_pos_from_center(69, textReturn[sLanguageMode], 10.0f); print_generic_string(centeredX, 35, textReturn[sLanguageMode]); centeredX = get_str_x_pos_from_center(159, textViewScore[sLanguageMode], 10.0f); print_generic_string(centeredX, 35, textViewScore[sLanguageMode]); centeredX = get_str_x_pos_from_center(249, textCopyFileButton[sLanguageMode], 10.0f); print_generic_string(centeredX, 35, textCopyFileButton[sLanguageMode]); - #else +#else print_generic_string(RETURN_X, 35, textReturn); print_generic_string(VIEWSCORE_X2, 35, textViewScore); print_generic_string(COPYFILE_X2, 35, textCopyFileButton); - #endif +#endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - #ifdef VERSION_EU +#ifdef VERSION_EU print_main_menu_strings(); - #else +#else // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); @@ -2386,10 +2391,10 @@ void print_erase_menu_strings(void) { print_menu_generic_string(89, 105, textMarioC); print_menu_generic_string(211, 105, textMarioD); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); - #endif +#endif } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define SOUND_HUD_X 96 #elif VERSION_US #define SOUND_HUD_X 88 @@ -2397,6 +2402,8 @@ void print_erase_menu_strings(void) { /** * Prints sound mode menu strings that shows on the purple background menu screen. + * + * In EU, this function acts like "print_option_mode_menu_strings" because of languages. */ void print_sound_mode_menu_strings(void) { s32 mode; @@ -2424,9 +2431,10 @@ void print_sound_mode_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); - // Print sound mode names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); -#ifdef VERSION_EU + +#ifdef VERSION_EU // In EU their X position get increased each string + // Print sound mode names for (mode = 0, textX = 90; mode < 3; textX += 70, mode++) { if (mode == sSoundMode) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); @@ -2438,7 +2446,7 @@ void print_sound_mode_menu_strings(void) { 141, textSoundModes[sLanguageMode * 3 + mode]); } - // EU also prints language names in this menu + // In EU, print language mode names for (mode = 0, textX = 90; mode < 3; textX += 70, mode++) { if (mode == sLanguageMode) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); @@ -2450,6 +2458,7 @@ void print_sound_mode_menu_strings(void) { 72, textLanguage[mode]); } #else + // Print sound mode names for (mode = 0; mode < 3; mode++) { if (mode == sSoundMode) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); @@ -2493,6 +2502,16 @@ void print_score_file_castle_secret_stars(s8 fileIndex, s16 x, s16 y) { #endif } +#if defined(VERSION_JP) || defined(VERSION_SH) + #define HISCORE_COIN_ICON_X 0 + #define HISCORE_COIN_TEXT_X 16 + #define HISCORE_COIN_NAMES_X 45 +#else + #define HISCORE_COIN_ICON_X 18 + #define HISCORE_COIN_TEXT_X 34 + #define HISCORE_COIN_NAMES_X 60 +#endif + /** * Prints course coins collected in a score menu save file. */ @@ -2501,7 +2520,7 @@ void print_score_file_course_coin_score(s8 fileIndex, s16 courseIndex, s16 x, s1 u8 stars = save_file_get_star_flags(fileIndex, courseIndex); unsigned char textCoinX[] = { TEXT_COIN_X }; unsigned char textStar[] = { TEXT_STAR }; -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define LENGTH 5 #else #define LENGTH 8 @@ -2525,25 +2544,14 @@ void print_score_file_course_coin_score(s8 fileIndex, s16 courseIndex, s16 x, s1 } // HISCORE else { -#ifdef VERSION_JP // Print "[coin] x" - print_menu_generic_string(x, y, textCoinX); + print_menu_generic_string(x + HISCORE_COIN_ICON_X, y, textCoinX); // Print coin highscore int_to_str((u16) save_file_get_max_coin_score(courseIndex) & 0xFFFF, coinScoreText); - print_menu_generic_string(x + 16, y, coinScoreText); + print_menu_generic_string(x + HISCORE_COIN_TEXT_X, y, coinScoreText); // Print coin highscore file - print_menu_generic_string(x + 45, y, + print_menu_generic_string(x + HISCORE_COIN_NAMES_X, y, fileNames[(save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF]); -#else - // Print "[coin] x" - print_menu_generic_string(x + 18, y, textCoinX); - // Print coin highscore - int_to_str((u16) save_file_get_max_coin_score(courseIndex) & 0xFFFF, coinScoreText); - print_menu_generic_string(x + 34, y, coinScoreText); - // Print coin highscore file - print_menu_generic_string(x + 60, y, - fileNames[(save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF]); -#endif } } @@ -2552,7 +2560,7 @@ void print_score_file_course_coin_score(s8 fileIndex, s16 courseIndex, s16 x, s1 */ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { s16 i = 0; - unsigned char starScoreText[20]; // unknown length + unsigned char starScoreText[19]; u8 stars = save_file_get_star_flags(fileIndex, courseIndex); s8 starCount = save_file_get_course_star_count(fileIndex, courseIndex); // Don't count 100 coin star @@ -2568,7 +2576,7 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { print_menu_generic_string(x, y, starScoreText); } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define MARIO_X 28 #define FILE_LETTER_X 86 #define LEVEL_NAME_X 23 @@ -2592,34 +2600,35 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { * Prints save file score strings that shows when a save file is chosen inside the score menu. */ void print_save_file_scores(s8 fileIndex) { - // TODO: This beginning decl-order stuff can be simplified by moving the - // static declarations here. -#ifdef VERSION_EU - unsigned char textFileLetter[] = { TEXT_ZERO }; - void **levelNameTable; - switch (sLanguageMode) { - case LANGUAGE_EN: - levelNameTable = segmented_to_virtual(eu_course_strings_en_table); - break; - case LANGUAGE_FR: - levelNameTable = segmented_to_virtual(eu_course_strings_fr_table); - break; - case LANGUAGE_DE: - levelNameTable = segmented_to_virtual(eu_course_strings_de_table); - break; - } -#else +#ifndef VERSION_EU unsigned char textMario[] = { TEXT_MARIO }; - #ifdef VERSION_JP - unsigned char textFileLetter[] = { TEXT_ZERO }; - void **levelNameTable = segmented_to_virtual(seg2_course_name_table); - #endif +#endif +#ifndef VERSION_US + unsigned char textFileLetter[] = { TEXT_ZERO }; +#endif +#if defined(VERSION_JP) || defined(VERSION_SH) + void **levelNameTable = segmented_to_virtual(seg2_course_name_table); +#endif +#ifndef VERSION_EU unsigned char textHiScore[] = { TEXT_HI_SCORE }; unsigned char textMyScore[] = { TEXT_MY_SCORE }; #ifdef VERSION_US unsigned char textFileLetter[] = { TEXT_ZERO }; void **levelNameTable = segmented_to_virtual(seg2_course_name_table); #endif +#else + void **levelNameTable; + switch (sLanguageMode) { + case LANGUAGE_ENGLISH: + levelNameTable = segmented_to_virtual(eu_course_strings_en_table); + break; + case LANGUAGE_FRENCH: + levelNameTable = segmented_to_virtual(eu_course_strings_fr_table); + break; + case LANGUAGE_GERMAN: + levelNameTable = segmented_to_virtual(eu_course_strings_de_table); + break; + } #endif textFileLetter[0] = fileIndex + ASCII_TO_DIALOG('A'); // get letter of file selected @@ -2640,7 +2649,7 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { //! Huge print list, for loops exist for a reason! // PADCHAR is used to difference an x position value between // JP and US when the course number is only one digit. -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define PADCHAR 0 #define PRINT_COURSE_SCORES(courseIndex, pad) \ print_menu_generic_string(23 + (pad * 3), 23 + 12 * courseIndex, segmented_to_virtual(levelNameTable[courseIndex - 1])); \ @@ -2677,28 +2686,22 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { // Print castle secret stars print_score_file_castle_secret_stars(fileIndex, SECRET_STARS_X, 215); -#ifdef VERSION_EU - if (sScoreFileCoinScoreMode == 0) { - print_menu_generic_string( - get_str_x_pos_from_center(257, textMyScore2[sLanguageMode], 10.0f), - 24, - textMyScore2[sLanguageMode] - ); - } else { - print_menu_generic_string( - get_str_x_pos_from_center(257, textHiScore[sLanguageMode], 10.0f), - 24, - textHiScore[sLanguageMode] - ); - } -#else // Print current coin score mode if (sScoreFileCoinScoreMode == 0) { +#ifdef VERSION_EU + print_menu_generic_string(get_str_x_pos_from_center(257, textMyScore[sLanguageMode], 10.0f), + 24, textMyScore[sLanguageMode]); +#else print_menu_generic_string(MYSCORE_X, 24, textMyScore); - } else { - print_menu_generic_string(HISCORE_X, 24, textHiScore); - } #endif + } else { +#ifdef VERSION_EU + print_menu_generic_string(get_str_x_pos_from_center(257, textHiScore[sLanguageMode], 10.0f), + 24,textHiScore[sLanguageMode]); +#else + print_menu_generic_string(HISCORE_X, 24, textHiScore); +#endif + } gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } @@ -2714,8 +2717,8 @@ static void print_file_select_strings(void) { switch (sSelectedButtonID) { case MENU_BUTTON_NONE: #ifdef VERSION_EU - // Ultimately calls print_main_menu_strings, but prints strings first. - print_lang_strings(); + // Ultimately calls print_main_menu_strings, but prints main language strings first. + print_main_lang_strings(); #else print_main_menu_strings(); #endif @@ -2747,8 +2750,8 @@ static void print_file_select_strings(void) { break; } // If all 4 save file exists, define true to sAllFilesExist to prevent more copies in copy menu - if (save_file_exists(SAVE_FILE_A) == TRUE && save_file_exists(SAVE_FILE_B) == TRUE && save_file_exists(SAVE_FILE_C) == TRUE - && save_file_exists(SAVE_FILE_D) == TRUE) { + if (save_file_exists(SAVE_FILE_A) == TRUE && save_file_exists(SAVE_FILE_B) == TRUE && + save_file_exists(SAVE_FILE_C) == TRUE && save_file_exists(SAVE_FILE_D) == TRUE) { sAllFilesExist = TRUE; } else { sAllFilesExist = FALSE; @@ -2817,9 +2820,9 @@ s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { sMainMenuTimer = 0; sEraseYesNoHoverState = MENU_ERASE_HOVER_NONE; sSoundMode = save_file_get_sound_mode(); - #ifdef VERSION_EU sLanguageMode = eu_get_language(); + for (fileNum = 0; fileNum < 4; fileNum++) { if (save_file_exists(fileNum) == TRUE) { sOpenLangSettings = FALSE; @@ -2829,7 +2832,6 @@ s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { } } #endif - //! no return value #ifdef AVOID_UB return 0; diff --git a/src/menu/file_select.h b/src/menu/file_select.h index 72ab6e8..0d3593b 100644 --- a/src/menu/file_select.h +++ b/src/menu/file_select.h @@ -124,12 +124,6 @@ enum SoundModeMenuActionPhase { SOUND_MODE_PHASE_MAIN }; -enum Languages { - LANGUAGE_EN, - LANGUAGE_FR, - LANGUAGE_DE -}; - extern u32 gGlobalTimer; extern void beh_yellow_background_menu_init(void); diff --git a/src/menu/level_select_menu.c b/src/menu/level_select_menu.c index 26df262..83a17f5 100644 --- a/src/menu/level_select_menu.c +++ b/src/menu/level_select_menu.c @@ -49,7 +49,7 @@ int run_press_start_demo_timer(s32 timer) { // player is idle on PRESS START screen. // start the mario demo animation for the demo list. - func_80278AD4(&gDemo, gDemoInputListID); + load_patchable_table(&gDemo, gDemoInputListID); // if the next demo sequence ID is the count limit, reset it back to // the first sequence. diff --git a/src/menu/star_select.c b/src/menu/star_select.c index cf4f08c..432994f 100644 --- a/src/menu/star_select.c +++ b/src/menu/star_select.c @@ -17,7 +17,7 @@ #include "behavior_data.h" #include "text_strings.h" #include "star_select.h" -#include "game/eu_translation.h" +#include "eu_translation.h" /** * @file star_select.c @@ -79,7 +79,7 @@ void bhv_act_selector_star_type_loop(void) { break; } // Scale act selector stars depending of the type selected - obj_scale(gCurrentObject->oStarSelectorSize); + cur_obj_scale(gCurrentObject->oStarSelectorSize); // Unused timer, only referenced here. Probably replaced by sActSelectorMenuTimer gCurrentObject->oStarSelectorTimer++; } @@ -211,21 +211,23 @@ void print_course_number(void) { create_dl_translation_matrix(MENU_MTX_PUSH, 158.0f, 81.0f, 0.0f); + // Full wood texture in JP & US, lower part of it on EU gSPDisplayList(gDisplayListHead++, dl_menu_rgba16_wood_course); #ifdef VERSION_EU + // Change upper part of the wood texture depending of the language defined switch (language) { - case 0: + case LANGUAGE_ENGLISH: gSPDisplayList(gDisplayListHead++, dl_menu_texture_course_upper); break; - case 1: + case LANGUAGE_FRENCH: gSPDisplayList(gDisplayListHead++, dl_menu_texture_niveau_upper); break; - case 2: + case LANGUAGE_GERMAN: gSPDisplayList(gDisplayListHead++, dl_menu_texture_kurs_upper); break; } - + gSPDisplayList(gDisplayListHead++, dl_menu_rgba16_wood_course_end); #endif @@ -244,7 +246,7 @@ void print_course_number(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); } -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) #define ACT_NAME_X 158 #else #define ACT_NAME_X 163 @@ -284,22 +286,22 @@ void print_act_selector_strings(void) { #ifdef VERSION_EU switch (language) { - case 0: + case LANGUAGE_ENGLISH: actNameTbl = segmented_to_virtual(act_name_table_eu_en); levelNameTbl = segmented_to_virtual(course_name_table_eu_en); break; - case 1: + case LANGUAGE_FRENCH: actNameTbl = segmented_to_virtual(act_name_table_eu_fr); levelNameTbl = segmented_to_virtual(course_name_table_eu_fr); break; - case 2: + case LANGUAGE_GERMAN: actNameTbl = segmented_to_virtual(act_name_table_eu_de); levelNameTbl = segmented_to_virtual(course_name_table_eu_de); break; } currLevelName = segmented_to_virtual(levelNameTbl[gCurrCourseNum - 1]); #endif - + // Print the coin highscore. gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); @@ -316,11 +318,12 @@ void print_act_selector_strings(void) { print_generic_string(102, 118, myScore); #endif } - // Print the level name; add 3 to skip the number and spacing to get to the actual string to center. - // TODO: There has to be a way to merge these, but US seems to need lvlNameX and EU doesn't - // TODO: allow it to be declared. + #ifdef VERSION_EU print_generic_string(get_str_x_pos_from_center(160, currLevelName + 3, 10.0f), 33, currLevelName + 3); +#elif defined(VERSION_SH) + lvlNameX = get_str_x_pos_from_center_scale(160, currLevelName + 3, 10.0f); + print_generic_string(lvlNameX, 33, currLevelName + 3); #else lvlNameX = get_str_x_pos_from_center(160, currLevelName + 3, 10.0f); print_generic_string(lvlNameX, 33, currLevelName + 3); @@ -339,9 +342,12 @@ void print_act_selector_strings(void) { // Print the name of the selected act. if (sVisibleStars != 0) { selectedActName = segmented_to_virtual(actNameTbl[(gCurrCourseNum - 1) * 6 + sSelectedActIndex]); -// TODO: Same merge issues as levelNameX above. + #ifdef VERSION_EU print_menu_generic_string(get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 8.0f), 81, selectedActName); +#elif defined(VERSION_SH) + actNameX = get_str_x_pos_from_center_scale(ACT_NAME_X, selectedActName, 8.0f); + print_menu_generic_string(actNameX, 81, selectedActName); #else actNameX = get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 8.0f); print_menu_generic_string(actNameX, 81, selectedActName); @@ -414,7 +420,7 @@ s32 lvl_update_obj_and_load_act_button_actions(UNUSED s32 arg, UNUSED s32 unused #else if ((gPlayer3Controller->buttonPressed & (A_BUTTON | START_BUTTON | B_BUTTON | Z_TRIG))) { #endif -#ifdef VERSION_JP +#if defined(VERSION_JP) || defined(VERSION_SH) play_sound(SOUND_MENU_STAR_SOUND, gDefaultSoundArgs); #else play_sound(SOUND_MENU_STAR_SOUND_LETS_A_GO, gDefaultSoundArgs); diff --git a/tools/apply_patch.sh b/tools/apply_patch.sh old mode 100644 new mode 100755 diff --git a/tools/create_patch.sh b/tools/create_patch.sh old mode 100644 new mode 100755 diff --git a/tools/ido5.3_compiler/usr/lib/acpp b/tools/ido5.3_compiler/usr/lib/acpp new file mode 100755 index 0000000000000000000000000000000000000000..d5392cf67a880790560d854df4886fc8479a4384 GIT binary patch literal 93440 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 literal 0 HcmV?d00001 diff --git a/tools/ido5.3_compiler/usr/lib/copt b/tools/ido5.3_compiler/usr/lib/copt new file mode 100755 index 0000000000000000000000000000000000000000..2e689fdca47d164a0f3b4407db3b99e3a6d649a5 GIT binary patch literal 3597360 zcmaf+d3;UR_xI1aXT0a$b8koxbBqmDQi)kLB<4^gYG}-}1|dPHnlg_vCp0C9IW$N} zOjU`oK@bE{Q_PA=sHr@6t-bPle$QV|U$1=MK5MPL_u6X@cTB#^dVBTZ4LtWh{~0*d z_HUl+`>w=BH?HHI@ivOKe>rgq=gigQYS^@lK6jfHemL&7?Far7=|`}2;l#Pq569Va z><9h+HevI-+x+Z@;~Z@U_^EDhu=$tU{Om`mbm!oQ`R#1&|5w5`>;L;7^uhe@wtvA- zJ6j9*;W&xo?0`II_!lb0h2xyYxZ9*{UTCrXll|9je!#qTelsS*&!n~ibJ~7g?P09^ z{P`39%li3qwZ~3r?_T}y{~!H1uC|@in9eq;ocotKHkxd0%r?Rt;78>8_`BG&V)Ng& zX^HFU29!C^u`V`hoY1O+jnK}{_9NKIdxqHJZR^y;$wnD!V54U9O|a3n7KRQsI@t7h z8^5yd+iUx$ZDqMuKv*l-12s5z1LR|8`?p}D(WY(qpS&P9@By3Ke$2KX_)mxbu?5;{ zE!MEn)~~JY|NW0|o3}Yk+%h2gf7$J9Hm6U+f6KDj8d7NUwt1Tp`yN=`(x%&z?SEj$ zeQU=VItw;BF!ngbnOE9$Y$<0>2Hs|jvm^bC_?CExm`=fU6fqr9PNcd8$Wjgd{im%Ht`wp5HW_BPRt_a5Z^LJdl5$xClmdN?nIGjM{GcJCb}`k)A%Vb znNIo0n5q(;$X-FrB_1Uf6U!J=+Ypx%XY9RSL6FrGTh`z+>j44|glOGYQ z$j%YXWG^RX6Z45h#1h7o=ENXk2r-_RLG&ZK5W5rm5q*f`8B=o@(^%1PI;zNp6QflI^~&8d8SjI>6B+W<(W=-rc<72RG-whl#fWX zBQ{`6eMUS)JVh)e-eyd5CN3dH5R-|SM1P_i(Vgf;97&wam`v>ws+dmXh-RWAW5OdM z%`2gZbP2JXF|j$3>X{fqI-Zz8^dq_uyA%5neTd^36DZI4XH3UaT@ys|+mZb?F^iZ( zJVh*JOlUy#CoUmUT@#W?PbNAO-H7f)FCx`7aVyhFlxGsmQ=UnbXAmQ=UmwpTw7J+{BMGzDjf;dj&C< zc$8R7EMrV^A_fwd6Jvb z?85Bf)L*C@)4?>~U?1|IVhqV4e?P{sc*anwV{miQ{^a*#Tv^2!Lh}rJN%lu%r}~7y zWjcHa@izIh7=s-dLno8}8QIN@VL^-`4rCus_F~doiDiu8>5L(zjA6Ot&tMD{$^Vu} z zzxWW+j*P2{DDD~Qd}20Zf+y)@VkTqgThb+@Pcg>RyyMMeKSXg=q;HchCq5#3DPw#t zV?q|$RnqB1nop<`=|JLg#!v^+RL78)q-lN$ly^u4*(sj{$}{96*=arrlvl!ZW{)R- z=n&G>e?0XUS{-+k{Kbr+zKjXg^XW|XHe{#%5~}0K9!m93sGb+iJCxdoII{Msl*dY% zUn=F9M&qSYe!+GWPkE)5F&!*2u6#zMd8g6%X_Vi}Q_P=6ID;B)XG5gSeIK4M^vbb|&pd3?jQ5=@4Q(W125xI{DLS zoRu{1bjo{Wb(|fGUpbxH(fH{!ZaU?=lIoD2Oz}<>pG}M)JJmUz=AZ6QcB*sw5{efY z(_)C}6qiMsxH5+{<+t(>=|JLgBE_w&*3ZcPmT_fu{B6=SURrg3r^sHNPbt%>j*Q7P z-{dx=J2QruNjoqmy(D{c(jUpM58lNW-7cQ&8N{vRr*V?Am<~>6OsQrj z>1<*IaWc`LF}ONz3F+#%D$*2}$}yd4W=wfR%qJEROBjQxzm#&)lt*$Y)5*7q&&Xfh zt~#FjPtKvZL&Q_Ww~Q(7jKS4;c#(Z1(Tyk)?T8H+gRAp)W;(u%F}#8?wmD-M)g!7q z*&P|9`jK`a`jDOcvE&bXM0V;gmimdRZbx;EDQ9uv)w+b*1u@1@zTw5B^NH2{)A+Hp zUg2fTA5J=IJjGYf$B+Ck86&CxSn5AQW%k&ki)7xS1?9W zd@SV^M&m_NKCwY8E{gJvrToIEE>ULckLD2@Lj96Ib}RWa$WC>Mjb}QH@(=&Wbhsmt z`irLdMjs+O^%G6=iq2v7=u^aJ6z4;v@uO(|(YGnClrf6NjdmitC$*z_M+cI92yr^m zm*Qx?(aXu6MRuxFbQ`j#lRchvXJQOvR0a8uGR7<+`jg#-^kl{;npaE&*|W(``9#q; zF`48~W(;pmaa6~ck)(?$t^v`GF}xr7%g8P=M!zNPO#WQbUX0=0NxPGu<`rHY=f>=- zDF3)XrXy+mh;*hSs6Js!D4y~P^QZV~P5s3!r*@v?r~D!*kBI5a9yf&il<%tQd?-GS z;v%d2^=0v4saJIEoLO%-XGLK<(R*uC`Ntt7smpmN0*u6H#T1 zr1%K3M^c@_GAWMwjR>T8f3iC;#(rd6MfOM?s_k`cip>rTKExPR&KR+kF}fdPiY;%5i}qoRDk8fRW4f)*;7_e$49{nb zBBl>vIwFWM1fI?o#v5ph}u!z(kb7R9A;1TVvMBuMTty@Q-5hknNFkpBcG9`I;Q1P`?rh{G=5qc z(^1ZhsU?izk4Tr3-;Ob@nC#?_YCv|XS7Z#+5tK(-Jo$ZyqokjbOy0IV+7@wTEuiz1TmR0)t%xf&vYlUPi9PaV2oNq_K{?7 zL-uU4Q$13tUg@4>cV-Ny@l)NXT_$4$twVZe(lnn`>No8r#d|TPQoAV1JBs>Cs~~?q z^+WRyFQ@kYL<3G z#V2;Aeo9HVVT_F+?L<16xP3m`)W1`9!c8W3KBl)vQza-MS#F377X7>07jB(U1-j3{U#F0cViYp`SPMY!$qj{~O zd{&h*|0>FB)ezEI#6ZTd>UgSqyhwfr;#;B<@fq(dDF}{j)b$^e@o=^6zq?eG+CGAi8DCx<>2x2z*<4I?d&R`6!&NrFqL|?}6 zk&MaR8KWy0L+r@zLhMJR`6W~S(Zv)mlAq=oT}HY&`JEY)9udnKV>**AVGMC2UB#H} z$Qb>R{0+!%W(@Zt%`rw(eWHWNPI*L!kfwZtZ6bLyOB<3 z45#tKtK+HvB+4^}@<^J@;zMY>q)euhiir7)F+)gaGltW6AvBL9s(TXI!>j8=bqlHX zlRbv!l|=a^(fHvMA4Bs>s?M9n388$~4B_-8w�mf;c?_xP;Rq1=|-OEw&%4?Z?jc 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�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

pOZWHzO#6>sgVR-ECI$k2aB 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%0A<>=2+u(-8(alQxhRH~Lb`;rw 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 z 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�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%0DPzv`8pT;CogY*4>4v=9 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

6bF}K4adMgA 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

AM*8FS%OUD(MkyE`~ntR_S+R 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�~J_Z-eY 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

I$pP6|R8^FQ)_y2PG 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∨N{z2HU`CHzPi8CCR*n6ilk9T>y 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

AZ5qn2RZ1W@}q? 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%0ABf3=e)yXx4hloINW;-ro3u&Hus4iPZ9jFDU;6 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�`MSmu8J)LUNk22WpF4c70%Jy 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

  • 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 z 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%0DO}2! zb(pAB^a~1KRd`Gd6V@g@r>+W5LitJOI@6h_*OX<( zGwDK~&Jet8(#SlE%1;)J4oqK)3V&NjVMXs$a$+Ve95!}}`8i!(y%Kh$O>ozm;GTKG zgDUNV1w!v$R(MNrPo~0tg_WK?*M;8Mz?gOG3o3ktu}yYPToii3=*;{HqXXmFQsL=W zdiGsYbT4C@WcHsH+_x!s;JV=WMTHf8P|0a4W**jI_^j{`tFXguioUG)uM2%d@sFMo z`si7OHBXzOFAE+!C3y6@;4!b@(R{&EiavFU>716Svw~YyUQ8Rh&G};Z4OaYf%I5PP zmcu;rc?y>b?k4E;d%G(bn=)?dcGjnTUU*{X1b1H$+!GSqA5_@r&ocWbn9ef$O};Z8 z@Cg4Q%#~WQ!OUmz-N`ypsB;=dea5N;PZlU#rm*4}uM_&Xq9+u+P03#{HZ=WTFNZZaU+~hh$Xqr& zHtE)xA@uHC!95ogZcF;zt$vpL+xT1cHREriYvOO6HSjlQ9bh0>c%W_7*sAmTZ_obo z-Np|)qnKkzq5It;=VKYz1C{FV%wt}`S&NS4Vvn!WH;e@^ui!CZ2Thsdv<#{|8ug3* zgEs^ZWhz{#aIfHDjW?Oj^Bjq5j5)6d70=+R&}Rz;Pv20OpyMYqD(s}qbo?J{Q+~li zLB<@{u#s;Q&q$o<2CoV3RC%{hEc9ic;MNhwEVFf8=>4UF`{KgWXLy*u|E$paxy~_p z)UV?0SN_?r(%794`Tc8x=Q9PjUt!E~btvDCnet^*+Pf=-f9{;{_nJIno>rCi_*LPb zsbK6QIWr}S9uhno6+ENxoZ&a^QU&ucUNYs&CYkN39JLpUoY*CW~#(l>A2In#luZQ=QDs1wrfOMN`V7g6sQkDH_g{PK2 z1ox~6o>z9BQ@BIfq~jX%8(&HY?ld}ZT86en<~TG@_M4^@edestXW9hMD*Eh2Mb|vb zihf=2{3(UcGG;y747SN`%f{x6msA>iLlU-E={XP;IsJ{PPPdz6J??~>u8L?3x?ltw^h#z&JQ#XzTI4+y?90>|e1Qb^E@d=?186HmW5Rsj} z>g;L3;{m}#e!=rs1TXX|d_&)AI!`nTeNx3cZ41wmN_*#u&|6Jh;KZEbX+=LL zc)`b*c?L@a&#Sn)O*vwoNu|%U!aYiUcQwml{ktxR%mqVdISW@5eO=)Z!HaH%eF_%| zUOJ<2wcu96&pNcZh2Cc9Hrb?C*`f6e^Kc#5b4B=jCKTQjJdh)JNZD=C$gxTOVzuxr zDw(5-eb;8pd5Imyl z)#+uX8{aV4ru=GC<+0D`P(bwfitsOOh|DFA;L$R{V|9Y3Ojw)bOcw}!Iwp9|E4aN# z;c|tQp1oI7scwh<^dWq^Z&SZNbW)r{ZOATi#T*%laU58cK7zQO-M-Tf2 z53UIwz9hK+s=`X|v0R}qoMy~ydog`t6Jsp)Q}})f`Vr3fX);9dnDk7RC~VSflf5RROlLWh3E`Pa7y7ip z%-^=I=ql`BNWxBU3QufJ=v{81cPU@#Dp5R@isz!j%D!F7FQ=3aQ$`0)%YeZ)rE&0@ z$Qkl5=6=CY9%Iu#EmgRZv5&$IT~PF^iayVn+p(c*!ZYkqIFGSSa)wKV-d)a^^_)^^ z?=2Gk0h4wPJJ2TdxL3jsT^AhBSNN>rZ&P?#@Q_#Ge8Cgf1y7!3Y<%OQ(5Dqo!Ye#8 zD!tPQ;h!^Ux5*9*9^oHL7rbD2IIe|C3EQpWU6>bod#1vE#vC?QCiK{b(7RMzU3tPY zo*_JKH&UIxJkbc>?%UM&Pp_Hs8M}^h=FUkCLil&&YsHdb8!(euka+4tp;O4AJ0_$N}oQ3 zM~zIIY%+L3!gf>%Zd1C&{6b&K5Io~k_>AC~(ZMG9i|2&CxFxtZCU~Y=@MNLj&KrUg zje=*21WyJO4hl}J3!W|)+;LiP*NEW06@}XbPsSBq6Flx0yi~@R^Qb#R=)E4sX3zdr zp|>l4nAsBgjM8Do$h6spo6N)IYqmi6V}{N=eMENpPklbdtWRID&=X32pR(=j8R40U z3GUVQsZcVN&&;@SPRp5BpUaf6Gj+m0y(;upg_pJzJwx~tg+foLyo(vk=~~Dao|v-d zg09bVg{Nmt@c22#ET=y%cuCvMEBq5xg2z={<58i{3Ldu^vmM$M zz5T54EVL=SEV#W+a7T&4m4e&X1a~MqEL;?NU!LHOn8J#uL*;3Esqjo1-B|xlB0FRH zj#c4Vye_!2SYe;S$_F|xD7ukvlMi$e*{O57RM~cvr2I5HNi8Lg69;Ty(;wCdBO1vg$ooe6Fi{eno)9Q zl$@Ds!awT~yr}343b*D7PrOd>c#JWx8I7+9o>>;2#j6U>D|{jK*B<};p)>wj$dLJo zg#wIuoc-hrWpq!Gv(~#s_Z2zw5T{#kPm#f`MsLo`LE~qPdzGJ!sC?}!5M8HEGv@Kq z)Hy}JB)GRh@Tf;{o3V>czS3rNVBD_ij`oYf-=WH3hbr40ZHh<9>?{|0Td&~u5`|+5 zuPR(AxZ{T4wl%>W7X)_}DSTCMyIXLqN^nPo;LecX4uVd-(`gG{S{FR0>@b}v^hp(O zr}DFQMPE>MUQ&2^UgRvS2%b`DU)U1*Vu8X{3YRHdCwNZNGlV`}$e8_YAtv;hD+-SY zp6XS2Rq!}L$8NnFf+w#Do>y|FF9>~1fw~+q??rD||}fD!~&=zv`k!5JiUVF zl^tTLOtno2&xFG5TIWsSY4-@8FHm?z;WEK(R|L0eeHw*6ui~97SM)8xlR1Lts|Al% zDy;lr^n#*a6+B<1aGl`EG{N($3f~YsnJIWe@k}%@-Pm98&z}+g`69sym6p-dLLWV+ zaIeCv3SSaDmdTjo9laqqrue6Og@3BhcQ85sHAm-;oq4fI%|qE1va_UoZz)&FToK&k72L1ljin2HM%gf~gPiwjG z52|t$zaaFsM!~~Z1uy7$%Y@!`O>jqp;OQ#CQ=@ zmkiw|n@lPCOhS0((iPr})JL7QpZWC2gUNC+e-Ud!|HX`V=5y(dCxaK1Z5Ncxg-wyU zm@ar$<=v8^cN7TEqUTQB$ISBUztMm_wJGMlRlGThF&B-~uqIT7^(3dQoXzmzepI7R zYd+l}YsPC!N}pvFSKD=ot39A_wZh779bTb#Y%*p$cPJn0RJQHh5dLnr;MP-u2hJ+I zEO=1S2Q|G-@mv%trFa=XV5#8o zEy0s@f+sQrPsS8p5j?*vI94FIZ|AOODp&fG`i|?#zkk83C-HNL^yi52} z6Mi6*=VNTj^8r7FH)VQ~po6FUjBVmsQuXx0Ii|BuEhzfp4dIV9DqJmi>9pXO^2d<| zq4%E=JY@^+_Y3Y*b{!82eY`<%Ldl;|{xwrBJTo;4E1hR1gx;n6rQ^ELhY2S8p>e?z zYl3H$O%{8FzPKv5{hZ(~qYvA*%f!Wa%IIV82J=qj$E2B8nd1&;*;_ugR4@&|394+Iz+ zdV|n=R)s$87kaNsORv(ur$qQigM!BhI(1QBx!?t(zfEcE3kiKGQ{h6vv(7X|nF1jh;m_rw@;ez8cW?&?$e4911Ow?g3y61G26aF@Y0rDg7t(A!PAIIfu+ zLLX85Gpj)9O;`be(eQI#(l zTxHC94$LcjO?YP01T^BmQj(Z7IfvREQv+f`igQ$iok7dgX*Zd2G1uh2&nPoI)A z789PaEx|JvQ=K&<`X>6V-)6sDiF5v?&zAL~fgA9R6w^P68@t)0&%mb0AGt1gROvad z>=QSB!aftv6#jUj!lxBpW6U-m^b37*Lh!6l@LZ9?xq_$LD6PqU-mU3Q{%z9#sFVK9 zcqH7^Xv)Cm1+0}p$`ZYy z5@&tLAL=(7@h0;Xyl?2`x0-7M-y4oS}3;=20hpl9M1g6gTtiwvs$<+*h28*BiZ;(#yQP zh%+BD^K_i7XZj9*S`@j4_oZWaySkU&mL^+M8t~rD$tc;b&e$=ML7LzVbIWqmH{Rfp zGEl!c5_xWOg2wh3E9c^!mAvRP#@|zIPquZ1-}gwR_i#Dy@%{>b2k_hTZ~xmny!(Q4 zV~62VF1|CT`q}n`^=#V7=oP%B zVq@>`HQxN8-^b{!_3d90UygYL=K(8#_hUkv^HeUemo??Y_pO|q^ZY)}p%X1u zZtah@Z{W?&yig2sAR~3Rla@1SCrJkj-xLqoi{2V?J%e}YUPj#3_CNbRhc{P>tV56o z$vHuKchU9vf-KjU^0Go3+c!dU+c)TKyXc$SH(bvbXSwQ1v!WB*H)?b6?=$!fpQZ=5 zZ!{He-|*VdzZ!3d(mO8J_Fs{%WMAY%sVQT{CGTRZ<=fb5`QKox<^TC@^>O=MY_)P5 zTP6Mtwp#h0-&PM_XIoWs8LSCa<1H-sU`7yS5brgi46Zu1I;G0siuF;H!ON-)K6INh zXv*0K>8&QzPpj~07wz#r5k>j@$W9qNRr_O>V7w+o%BUn{0q{V>LjuY*#b6M<2niT4A~^~ z=Jx7M_CUF(H`1scqTjhrLb{xK=YFLaqn9{hXU zvBg2y;t{7lf-M{ytdI?y`iS13Mcw_;UiO>k*>BdUO{0A!^o%4BR!V&KB`}luc^etHbQ+GiJVWT_u#VMJajhtz|)O{vHt0b7Caqg zd=&4$J^1w1Nd0%V=*_r7+`o`t{i6i8r!RpY@sqsB&bzihs8nsI`3-vNH_J?V9@?bz zpdE_0&^yt1hnL@q#=E>N^geH!RcZx;+16SO-nqrwS`GZxZ9dYQhk0h#VZ20+b~7LE z6XJbhf41jI>$mXk+MjzrYkf8)fVTkA#<^@eo7=cMtWx;XGsJJ+z1vLqUV6GZ)QmiM zF6|`xMK-0u`YPT~&Y<*E9k%B1_V#DCH;DY6qb7}qX+HcFe20$=qI;Vn^BhWb|R;_cF3xsusM&T8G9&x67Sw;V?Mo%b^ZeVVp$X(`SR)JFCsr| z_%7O2x?L*C?JN zbGPVU2K_&=y-M%5kq*(%K>tUf|8wZ0m6$ZwRy+FFLjR)5ljz%IA6mn^gJkn6l8U!l z5gz(~pc(xZ=x=lToYep8f4gp_dVgT$E>L0v=`t7v{WT5|868WB0in_($(tx+?8t{#N zGL;MTeTpJoRw>eI!yoR3&OW5K2ye{!?{QfvkeNZWqqcR#+EW^IJyM#5{#3%+`ziR# z_ElE}vboK362NnQ)C%W?2XR z*utBOS&^gLF}8mm{U2}IS$Kn$;;H}kI`Y{~@9fgMiL#UHuQTtGTTo~L)TU(K`dt{!yEMLd*;Iq)SP>JppMfH?PCRsp|D z>wD=37Z4}Cd5ymQs~O>k&6vQ#`{+A#M<&AUQsEkQemCLVrhdC^xP2-d)s4ycN-3SH zUNm%x4=%lP+FDTiCg3@zeTR-vqy#7 zxFy`mJA_M7;jXK2H|a}s(oE|Kz3)k8&dy zHxn(Ft^DH`QO2C~kR2fZfXHw4DES%GUc5t^;H}BLX|;8@@bh?Q6h8g#KGd2YeqfvJ zfjV>#blIbIQ}PRwwh0&DUGm-5VK_z_{jT{bPTxzd#XGzh(@^?QpS&IK=^b8J9=smZ zHTzK4u+48HyW*yFW+#33wmz@&yp`VH**3Ld%fcK$;k#C~@dlCOGpl!;S zIOclIgLcV+ty&YuKi%4U-1BrnsF>Q_oa{q*q853vAL-!qP`iq`8crwsRx&-P-%^4% zm4#&b^QeqK#x7$6)ZzOrcX%&sLv6OVENJbo3PP`Au15oSXZ_U-R~^O-qeu(vXTq@W zB;~!uo|N8{Z*jYoioB+N#U8Q=;&6v)M#t+9T6+=CKD=k0Q=A1~m~h?a$s+qu*duG` z(&Dq@%ZL~HzDMQD@;l`Vhb2GU(bq{E$$V?R{5Q1Mg^@bsO9=lmo-U~kJ&k-o+vwyA zzZqYjk%c}H@}w=}_@~=4L*=Z~UC59Ba#NWmT`>>V@~Y_%p=@s|UEeNG-eN=cRq;tg zlk~|px5=mCAopdECiG#7(T{NB4P%S^3A!J1J&8BR@y2}Z1+oUWHX$Fqm3TYdAGFfS@aBDheC->q7c#Oa&nZ1e z?A!XUqHVP=|1AeJK|_#ZYhhZ zPt`{AuzAq!2*RrZ73wZ3hR zo$qk$!sYng>=k|*Z7k^**rt-o?cc4wdW(Ll|JoL#u>3pHMd3|+kOMl)dux5lKF{?j zwRKdVzDe~d#)8TEbU*5+pY7DAtMK1M=n0aBv8Ug zeW5;X-W^$(OF%o93=do0t;14Ww=1_Pmd)>d)9)u9{O5DY^s0LBuj#kj);(WCdTY?O z--9%#QQZ?jy;zF24sB_A8Pz>wt}4_$@9raaD<8S>Z^(lp(vkZbs0(5L)2Iu}tb@0- zXGn*O2Pd37IR0fMaN|XBSE&lXt*#7@X+TLSZ`>1ab`MP8C zPautHNF&*t`xaz#?psW`3SjeF>SFkr@!yN8F1^@Z20Ij^F1?5130K00;CJxFEcnlX zq%Ubda>_==+qS1cu7`7P6Xw@WKiQ1+L0P76l;zjx``7TJlj2A1HSc8m+m>;fV?*5N zpJ!kmCNqM5HTvg1^v`o5=x?W*KDsmSaQ_DN(NTi4qYb1T=AMHE*;t$VF#1CuLO(SZ z`%CW)t(&!APmO7JJzq0zqUY;0PDkh$s6E8DW$mYV&`>k|h55BP%x$%xEq&d}z;C>! zH*gCobA)t{=Gly}%Md_q5E9)m?R*XrJC(k?cwl87cwi)xb_~v=rC(=%`oZHOX zlFe?8+lH$4T ze0FZ8WB)kppImqMV?MD6_9}+0N}_S-(PEWA_P(Yy;27rpUc&eebDz|&;rKCw=jieu znPyr48S&*}&aen&!4>hLT-CpL)fvNiTN<3T_eSo+(E2y39*nhKh3xtlV}-k|J8Fw8 zZ~oZ!Hsu-SAF02XgS>f|;ri5 zD(Oq>12mtRjN1pDNhaccfaTMCW-@Nf^HRJNzZ35Xj`vl>i*abvBZw!8c)!o_zMu7I z;_z2%uOO`yAN-g0C$zLckLKIPdx+yDdphw(+?My2c=vF;jffX%YJ$)681DO43EJCZ zO<%y@urt;v{5O}YlSNLxR<;ZvFMBbU+in$N-k<>U2Kksb$iw_XF6It$kk56<=Sxw_ z=lXANS`7`T&+4+FTQ%GMW$PSl;78^DZv^lPv@Eb1FIUoP*-@wy5mFb z+uKc_MjM4SlkmN?Zc>-+`6Br32IBwUh#$UpFUmh^s64{Cz@NtVhw!}%-yg>JW26`O zOId!@xP$eA5xlA(CYfBP zAr3F%@WOU((udj(;P+75@m{|}YqILl_WWtn57-u0Z}olZ@6dcY=MU^nc2YKVQ~eH^ zs8^Af!0_oJw8c4Si*wNy=bMB0Xr2A@4)nZcsgr z_SO4@X>UV6Gxe{x*}9*9pQBW9UMB63LwX>5c66B1gEl869!x#z$6B$&Yg-2iq3uPz z_TMd(A8B7+Li>WY1$BUFXYd>9n51mvJKBJMKwB0<8-f0ts{(sPoVFix;d?m!kO|rB zPZSTygFdOS3-4{G@3*c^9_RhnfJBO+R#hZ8ItCKe{tX6Sw}p! zGuM7TxMdy09NhzHS)m8|dP!&3jjAk{(@%lUZnQtYfpT;P_Cb4!)Rb6vft~`o7vHJ) zzSH@g$G;9fhAx(cvPa?U78|&U@!d@gz|D-`+Y|?GVf>z^HDD8uw*@6NQt#O2!NV6} z1GWv>LE8p($@{fkqW3*Le_Pvp3A(zmhS!X>yB6z|g-`94v5~jVx&!)@LszCp?xV7} z{R`Of6w%Qh?Q`@zg}N-gb_4#t*V>Od^>G)KC(t|}M|*(}(LJBA9>M&>0nh)(-TQ#Y zU0nCxv#T}8wrsEDmAnoPS>cr|+cFl3lgN$RyMRdq7^9@5SG<>d??Ro{Bu-Fj(d)eR z)2_iu9N0e&A*mI+eFZUKV5N2Q*9NCu0!c*T0BzmWxv!fjfuv4q2{9nX^o_b*$MdD=RWTd4D37x0 z88=%R?{QJp1AnfccYkVOw0Ln)XYs)5fFG#8=GoQuswX_7Ii7^U7reqRHUl%RXXgHx zmn^rUN7%39($FY8FfSPjJxQCzx&Ad*+A{RFzAZ!JT$_@i@Bmku&G`2U@h^C{@NO>G zC0u87y^!nqT$gfX3R zLObJuE8Kf@)gSiKI|_4!i^~WnrGuBQE3D+6wros$y)^d)UvF$rldJIjJnDO1awBqk zJ@o_*FmACngRg!tzdz$HrXO7F&s+)MNZ- zDvNvZ%d@)AJ!|ue@2KEF{cOykeshF-^xc7Nvfi1b1D~q}Pw=_#se%1s4eaN2&-awR z8(lMv7z z7dnF9cW9#il>Zjx4eI`nHTXRj;I~NMbB|AwP^$HTj9lC`$Og~Ot@y+V*@-ME3D@4klRd* zMO5!f(knHNG4G$dk8k_kb?U#wFRfSqjZTbTH>WBZ&1_WJ_Zy@E{{8?6l0VZY(O6ns+Xpsz5tlE(WM!C8J#;kbly zH&Cx$@Y;-9t!?d&SD-8H)|m_F2o{$# zZ9WnIhs`POcm3!O1EmqS1sY3-*u-Btdpmr}9G4qI47o{Ecvx z{FM%#;QAL_n}iEAzY=46gZxy`qn|mQZsv0$g%0M$`$#Z1opJR&8P~v^*=*)nu3=8@ zY2-0^$h)ajGM%|!u)JOQ`4@Fx)4pBIrEkI3*-ZLAD{F9Xl(wpk@#=D^-LmzQ)M<-+ z9N`RcOIQ%?=)26zUkHqzcIN8y#Njfp{gUPxLh+uqMr5|iYx#0zJaOTX*!WBQy@Gub zDGX+|V+**Exh}G7?a8}^m-=NvfB2Y281Jwhd)lM)nJqqMFNi_(a}9lQ3w^Sm z{y3of<`M9V)3$R)Gj%IQTixQ(O!#A&R%my6WWYT$l6J?i6SqKvca3az$3xvct!{Qt zCVX?IH9wbF1lkb%>gaDhq&a`YjT2Av`Im&J(RqkCCZjR$i*7)8m5Si?5P#@&xodp= zTUL2F3}0z%JPl86!cIE?{7qB%i1+uLST^Oo@Sxn&@JQOFI@;QQ&zWA={`=rh`J_(+ zuc-1X@bVwCc$cn)317DAsqd;Mb*UE*iAH)S8r9Zayj9_=3Qvh2tNiq^w;@Fv(SC%8 zCtc6s&+PYd;Z1SLg#z=Pifd%PvxoSrNcJP(5kdF1ImMo(($z{8AJG@-H$lv!`e=@R zLK_}>I(Qv}^W#A*1PbbjJ(1jRVH2)wHROXoi zd8XKjYK)xZntUD}|HXa6U+Ewmf7qFsuD0w`zOCDyuG$na!8Ki?YE%5>HodF0DYD-% zTWgN*lgPSR*e?FvET!dMebls8eTxlM@E?EHrKlUY$>-*Ai(C9FblqJTeDDx*HRduI z#eT^blPvuu{+J`k;jiJ3`6~XHuUK410{@JUXLCbs@RH>37V#0~X^vfMJ?M|0KP9`` zm3LV`Pkxg&=bLb3jfc@tYdrL8E?01LcNsnJ+R-!8ufR%~vi4O)f|O@iA) ztb*rT;=7p#7i{=;w6(4i`L;sk^=C#_09WZg%rj{W?p$I~MzAYiPPY#4!Pj&pwcB5d(#}+m|yl9Z-9#c>zC5b@fYE* zzPQOXp!e2sAEgcvrC}^UryBn?JQu^K2#h^#x!-jsmi|%y4s@uC75SGwN%Vmb`vle53&RJBpz^E7}L!E;xZ;b*7&mB zdEvzFHl+cly7pf34S4u1;9X!m1-~C_jMTl#N4~71PsZ@k#PQKA!AE29O!#Oz3h;6P zo-V-Obz|0716k8t40Mp=HGRSS{yrwUqpjmc_ipH8eF(kb-_V15vEO9JqYqMVVvlvj zemb9Y4cJe|u$A6~t*}Awt$$D0N=Nms)>Z=MdBA#?-UI7D=n8$J>Pr<_4d03m|Cu^2 z0k3#r&o4H+I@S!F9&Kd|)x3l3%xGwg_{(bujoK#zsd%c{faIh z9zd73Hq6(18aFz3naavSPw4!YqDA3Tzu2-a#CUl#^7U$ANj+{%CwW)j%)E}C^YeoI zL+JVw`A00j_tUMEpDys(b=2Iq*?m5kPYL3bsmlfw464q5H!Aj!GVq1lGo!Yy&?;8C z&m}6f%7?)fdTHGgvV-@?{9VEPM^Di2$cJ7aU-pvx+yLjan^lAJ4#S!6;;DdVf>_#x zw*Ctlik}G?N}7_^22v(+u><*N^E${z!-GE90Ulk2ojZDl%h(^t#pKSdTe7!-d&&I$ zmGLH7EYOFqM;07n-0tA-L15LJPIjK=T!v|DbcYTIvbcB$mEc`8?G_o{H}S1#@FIM1 z^joD{Q2Y>fP!5>HDPe0J!zMbW@1Y+UTpL4%h07sJUsq%VilxR+3AW%eu63#Y%Hzk7 zreOV>_X{IGw;%)ThivupgVr;UF&|OmjsJh4^3-{@rZpAapK&```1Fn*#+-G9KRtb* z{gSQyBMI91U(uDm%6K#}U$BNTs*Cx8PR64S`fK7%W9~D^A+5it#P)3 zjxoT;_4)bsWnXsJwSQ%+#*cv-oNtxx-IQ_z;lHn6k?(QOs4~siwYn06X}`7=E`+Rh z`ODmMBUibT)a!pJUw(r-sRWG~FN^h^Z_sZyx<+PuIF)Eyw)R5vKPer&nacNiouY~P zZM~!4SecDOe%)n$frr^V=4C1CDUK7Ld_0UEu?ShNIRevT)}zM+F&OZk?9LQzU~Oe( zBSWT^ZRJhqG(WcIFX(^TD(x=TRr*%G16xhEXT&2GuZO>z z_SzmAAy&cr`4fyGNyd;4#*j|@{9TM8YZybi8AB@m{$TuAuqEK*GW@%y@TWT(;MwUh zv4IV%H8}9|I%Gw+^e(LrU`$+z{i?B4W9mCyCf?TmuM0Ozj;TJ;-wwvl>jHcA{egew zchCix7lMup@Q=n?-Wu><*!009by=5XK8Ekj?U#&?2lucXH14-F3v^%go4<4Gal4n# z_~NZ6bYJlm<3Bwv`HEk43?8#qd=ol@@*b?wquUaH9AN?PH99Gx+i0lIcU z*EMy>m0n(a3U9(gJ6 zt^<_YRa*}4yLkTu<4uFTN9Pybq}veKiW?@SXAXw+Hm9vLl{syPoKik;3FOCJMaHs8 zd8rG&K+$vhH`z+Gv-~`LYD>}Aj~5L+L0k4?2b@BNcLwX~*JE#_XwP-@oo@Qg8te_p z_epEm)C)Ug;R(sjk+~#Fpb-R{*h4&@bOPqEO{k2zR=KBI$A*?5`O}Q(X z_oU9BKPCA@od-k@+9r$5n`Qj>vC;KCRo%aCx%cxxk9D~pdN_;9?mUB2@^*agC%|^& zCk3zYx9)`C3#MR)(?-j6g})AL#{{~t>|<~*{LqgN!a0x4qkQ3V;2S|+!=IbLE3LAd ziM=*hgL@NU?8xv~;LBsJm%dXs--nTl@WEzm@q;yOy)M6AJb=thAz#;?+*bQ-LU z*QuZ%2lJtGHUw?IS^hQp@p{GN&e-l#)-O`G8yVx56g~&d?%vVB+fP2n27dO5yJ;1~y+4`QnuQwhYM z{j;vnW`5|;)2*yeKI$57q|*4K=8uo&BjaCIyw=Eq@zKKICk{0bt&7H>(c_gue* zg7GX&->u6cq4h&QdIjHGx-j@aLutR;UCWEutue(J6touLu-i?n!3N@2doCeP#Vw{^ z*7s$Q!z&&3v-~^s`GL>|{E%Pru%YR*@c(YfmkJNG|DlV)1IOWkKJ@GXrEDJa{)qfH z#$U>7T`|A9i^^>agIMG|x{bRqm6?@r3qlvBS_^kV-}*~kXfE`fGyV+pJ<_%T`Zh@S zhrS<}6wAL(a0Qe0A&wooesBD=uIP0w_RPKyx;B?xlRe*}@Y4uzzPVwyyE*0lMD{xK!hU_lTH-Xb z#A!0m=@ysKeej{>@iF|II087+xm|4_X*{WQG6nP{Y>nOM(_Uwqvzay+Ro8nk~N$9{2J|>jK0t2Y@#WyyfU%^}QLxWj?-+6@9ItkFjRr zHf-4@(`n|@$3xl6{Wuc7z1$xD!nXERzjUG1#7)&LNNGKe?;oU-j}HEQMzs(w5ZCnB zCiQuKEeYb{{1vrcJUt_>))#{EFPvO{59Rl^ue!>GRxNiS{5@^7X|?>8RMj>;A)W}2 z;rIBs><4_^=r7XKL>G9mBDZ~B>RRJpJSN->=L`EX;2c$ZO795$abK&Od%X+co6a|k zAB8Utwe5i~;^Rlp#1}O@-$*<5<-ZAVc)Q~slPz#}W~kJeyi;Q`rc5&Ct5 zcyZg((051C!~gB2y49>l8r+*y)~bxq*n_-%4dc%quY1%T4aT2muo;)2dsNr87Vct= zW5s`rjj#4b7e7B48y_D@xfp+O{*wGH;V;2o2Y;Q=`^#Z?tcn{kdm~{N(fdg_`}YlJ zcwax$`xUKj4zQvlj(HiFhre|r2q&&7{?_A1@8P;Za+~WK=4UiMA8UUfU$ylWK{>A%9wM&_ z&*o|j9{WRpdpvtzg$G{+?h`noUsPdAkMni=_^B8F7hvKisKQkIV+H1Oz|6cRJZD%> z;_FO2K5H9^Nw~14tRaXh0n|9$;WtX&z~h+pB;T0faN-G0eeN86)cEenR= zNnZulEZ_FX!3xe=ADN!AKGO3_SFpxCQky6IhkiYy%8Jq)!UdlHnbxyXRA_{9 zjG6giqK#_n_>A&dU8dLZLD$0Cjorve*&bT|rF9FerwM)EuieLA-5Yv(S8MxMzLsgf z`)k?utzUgHA0K~0@K%Q`X5_ALWBp3=1INo5*G#8X(wB&Lc0HU_H}H(8D$`K4*WQi>fEKZC$K7 zngMsZ@fY6XEN9N*>pK{`9%L?{H?TKWy~$neotHb?WFy- z=MPb5`rpcs^*_Z`qK{7+PtVi`;<89WV4li9XN90piy5ta%$gT^MHV z-C5=StcskQBm*bOeda+-ufwOJ*q52d5z^>~Uic5P|B;bz7M_${)en=zG*sJYqAhCl zz(b?@{-(5>ALR9V>5DII10nlU(}d-V(HrPRGLJ|B1;?Pu~^^_ijlYWfBH zP*nQGI~138rE7nPez8LR;_#C8t%qazhusqOi{&@I=6KoqW-n@=}ad?ezIRjm%^ozq8<~WUZ&BPg;xnCSMxk!8ae!=<#!OtDk|Nmb4 z#o_e-8U5n0$ym|#?ET_wnZGlPLnri$;jZ>G7fjXL3Dj(ioBT)cSgECVtTE3>y4x9 zBMq;Pu4l6^9$C}A^^s0wQNrlD<2BQDlKpfJ9rY~w%_Hlk&~-Z8nd!Q|LW4Jut{W;a zXOII^9(BKX1 z7td8-p1WT>+Lb@xY1iz|)-N74xmfKN%ca(%-*oB!e=q&wQS&3bQF_1Vf=%!`^!`Up z#wz~|?N{TMW4ypG7n*3HmQCfR2do}22I3+V7V{Bn<) zkM#_6_^7=%|K#RO=&PGsO($Uv!p*zcwT~blh?_5!+&bn7d@TFjkKWyW$)mgQ@i@&d zv=CQk`h4IY@b&Za6EOFCiH}&{ZK6rFU^darLloptE z=SW`+(ytEEpLdS*hl2D=gY>h`k^YGw{h}cK`J~sH-br@9o+o^Mk3JLRnWH>2`v)Ga z$}^==8-))|_7mwH{o>DGyFL8qNtLhsXYUth@>d_JM=woTzmSjPjp-Mu|NZ^qNbD?h zs2MlUrcWMO*S_`08sx?-ZaJ!|HEcx2}kx=x2bGhMUFhn(7`GQeN+3@RsbhH~zHo#pHc z%K0z8oVt@iIg{oyCS=c%{jal}13@|KeL2gbK{??w)aT&qEa%HXIV)7oI`%wU)B1@a zcaQl8af{NfHS=C3dnWV!t8JenK{-*C1I)O1Xj)&Kxou76i@%k()^{KDnfJbSnSA7^ z@Hs=DNx2qu_u4))O@BXvzu?Fz^!E+wGb>-a{=Q*a-5Jl%Fn4w~IrPeucApM+Mw)&- zQmMaa3UAc~wEXT_X?gD0i+4`&{?{97aO)L(UuVX_2_BmKUTbXmrg)#JaX!T9+B zVzY_)N&8rzA6C}Cm5IOZ)cC3xDaCjwo`;y9b;RmUtO=cAJt%P?S7|Ln;nSKkW)GFh z9L?(SgM~job+Yi;6Rg`j^<3!bL#@Qtp;O(zd17r_M;l{v1b-aNIhtV)F}$sPOSQLA zXfE-9w_9D;gcFIjSlZQ%EM-m6T_j~~QrAb^tj4mN)pZLo-DTz+NUNWo8^_%FUE5r! zCBt{FBk7v&JQGr7GX{z+XWvq%J=BQ#j$G2?x*DCI+i1Gnr%~QKYpC>VO#3xK*{pwV z+2Ge=uzshLzTXwPr@w7vKIbSzne%?9@rBksvlra>H;C0z4E1YSqnPq-^bhrl$C_c^ zL&P=o*$LhG5ntDv&5s{-%()QvI!o(?vjra$`DWT&X=?cN*GjK=FuhltnD|2XzRVMM z`!c`2xp4c}v)PT%?-t^JzdnAbm?C|eat8~~z#o3k2A%ma5}ZR)A`ZMF8wUT(aIEE9 z;sbjMgZnHlcKZ82i)g*{r1ytOf4e`^lRZZ4SJEDJ7kT;9#V#=H&#-dUMJ`mlNq9Y2 zR-#%MdM@lZ!8(cEzOKZn*}E#9Xs!IFAV z#>}L0{hG_cJFIkQb=d;sV=4}G z-eO1Wz6#^PC-l9xuEdqE=j^~W#2~K=@^!M_q1)g8?RNU+nj$gooO8R`U{iw5yhT>_ z)X_JJ%PW232bJ}oy@mY4+mVkwww~o6{5V8h=+KK=*NgbN8PAY9 zR5;<*3-7{{?x0`4u(z|geCxI<4frm3SGeuib78kjdy5z^MJ{FR3isZg)HT$5`{F9k z?&zWOMv5!84p{l*Wo^WOt*iey>om7+?PiaRNcMjCCPbY3dEFV#4m;odxG$--^;++$ ze02|>T)M1CEbZ?>!_Hf}w4X!e{m2&D5E#pbUA(C8tN6ZiYhUGi@xy$-oA2y{Rs00s zFTSOVHG?i*W_~xr8jhP8JCI8*T&|8CS`%Hjl6CVLWY#wD1BPRrz4owReDUk*e=*ux zO7K0;_dE4HopJMlp_q8q1BM>N-}r9R;p&FR%x?WD=R$DSC3RwsyO`LzNpi3->JGA( zUwwWBF!)73=*I)r@Y-+LN@#X9G2Ov@IqPkrnlDy*)*?Bz1Lv#FMJJ0S?-G3V_0UG~ zWWE!5`%Skyy2ahH>?yZh`zg96_Wf%rw{nK)Q5S#AEt@xfko^rJiYph+rKef9Hu%}0 zW#0<+%KWy=6rSN7Z9me8T>cLG6tb7;$Q*Qp9{_WfTeB!p(OukZ;)~a4ZCK$6w_SW= z`;C$}mI76NBg7nQ{RZEw>o>Ajv*w-s^t|qS+J(0CM^s+uu`=5P)XJey-1^$!XZMqT zXW^UR_AOt|vTwTs%EKIggt7R%!uQ+(D{r3jdoucIau(I}% z{qxGA1#2KD`q)!$xAC52wfJWCwv1ZtI>8$)9ez!;&LU&~z1Hkb@e_23 zq%#3Od_rx_+LfcBojyJ(l;^y!o5oKH2kmd6br6L{7tP-68d{bjcb{~7CgeqPXGLDv z{)d%1OzeGkNcgkYU%4tHcAR=CoM8Pa>qCfp--xg5TGkXlW_)LwEC{AuUB`{?lkldk z>4xv0Q=0^_9sRn`&++GCH3#dyr=y?c3B#8^6Wiy~n-TuFl6Fljd6C$n{OEm2C;Wq19RbH}TEZ zxJTdX*P=lCCVfj@KYn_3t7}3hny+Vz&t?A~x0d+awSTom@9NeeOA=l$no_qe%QLt) zLhOA=`Ye5QKy;?>^;hYvGduVp^ESiVi%ma4hM-5CG?|7x8-9kezw7#k%dUR-yV%>u zS=&^OYE6=-`;+X4#4pDlY2Y3ne%du4dm41s2G=O-X*NkN6g(%>eDAKgxA98l z^4`X#;NIvS+;6F-zsQf5!TW7`Unl(`vDMZ%>%E?9uK_-G{wus;Yss<4&bW>o{leCe zqfex?ZcFqe7|39H@vQ!L?gtK9GOBpVZMWss&@*RHFg(rw$jt`51zH1kO5M4S4o#sRls zbA)w!ztLFs`<*wX{P@!J6Tc>|F!<@?S{tCY*E%WmzHayeb{AiK`WU)j%D#~%_|~9x zF6@cmv}ZQsd*p2$W~YU<_i}h_cbn=czKtcuzb!b(X4cnyemm>EQ_NLG4IVh6+P zjlso6epTzyD{bZ5=;`g1^+bii`|R99TUW%oY4p3eY-Y8C=WEL2J@WO@!fn4E6<(5^ zcI`!`U*UP6X_osScqQqx9rU@Vi~K=(R@vR8bVgHrO2|Hqcgwk6$#osq^<00G>lIud z;krTT>9?m`I-|Bo>X|)1z{l1-ZnS6CMtAKZ=B{aUY0!VIPt(rt?)sEVH7A08JNRkV zI(iwxUU40&2m8foZ*tpzs&EJOp`41HlcO$_{XLaI8?p{n<@+_wW=oKtHa6M7dh28% z_v=y4v#hsszjq_U?z8+~_xWwVy5zF8HzqtCfk}SF^%e4-j+HgOxo=v&lJZFogG15k zzrZD-OE`C0Ur+{EhoP(AlY0CMN@M#t@vdd9mwW7qAi1|s>DUib_otO6_JQ$1rB@rl zGgZHe_(E%^JYRfoQR{*#k#7S50GZg1VgWZG#M4r?RSbtiJ!8 z^~34!Kk>}W=|6wn%7~MKFAGQJ6pK@N5=}c{pd(BO<$qk$ewUv_G0)6YX!&HV|OQpgV`?S%duVPCFRT6 z>!n=RJ-SqT#IbM5QrRV;*4|{@L)akfHD0`vGT5gyid@saI6)bsl`^n{=dczzqOwBw zxi_hd*pNfA@jG980gsQz?s1WIp^R(3CwOn?NcA_d*G)bBEuy5MpSm}lG2f3T@|oS_ z%1u-8o{DoQoo+LHtNWka^u!G9YP>t`{f^=W`0)wjy&Vsq5`O-ExS{6$rJ8%lQ%Upi zi#7KrC+>@{Ox!=bed4}oZ6Cm|7cO@HBYcbSw~fs|q)!BWM_1*Ydi8zkJJB=vz2+%T zVdwKY^W&A|PHcwzpgVrA;_Y@G_N?L;ILi_Lm%h=DU)J|Z86NhNUl#1zb6C-jUaUEb zb+jU@>n^gmUehOa)~$Rd$Oji1>u8Io+0*QNbo2x4H#OAN77Clqcs}LzW}g(6$mE}c z8|NeY^4SxR`x-youfQ>+Z%K3zQnyXPv%zRExK}#k7&687CKFv5`{i%ZUa|?+roE!N z*#6b$v;LcO-7mY)>b1bU-quRj;oIq@VUt$QC){G4my&#rv$Cz+o+kI8_VpS+D4Z|Z zf)ACI-nx&&>e{cqaNF~G)VbJ^>@{{)cqDW`X*fICx&9`{ynBwlQIzIwi(MEU!Ym2O zJU@98vbp*^{-WB3_w3o~>x&#s_;wksoc}R~eAJp#?X8t4QBULRA;#38-tM+wT_C<- zV1<*n0WZzi?)R)pOs3-%MHI-i-SW>$0D%UlE+c9x2`ieSTNx9*qA>awqLjV*H2h zp`StT95BvLXF@s79==MlhdIR&ml&qKik#){BnP&!2S9TCWa!wr$5qE7V5P&@0Dl-Bh&xreCBmVn3DldN&b^GJpN zC-DeC! znWr8*7T|guT*W`yA9#t&>}rFD?2KZyH8^*Ia{|8{^6S(woe`fiO94E-=N6A#3>wJg z(4MZ=><`9|>FI)m+o3CR?v&1a(%O5*$1pJy@`uEh-^d*2&Qr&d-yT0mJJ&NO_e%CO zE^^?h-HkWgwx&>lw!VJ+7;@|2qQ!xaDgph|eT--0|14e+EMQ)*^0H5jKaqTk3oUv9 zA1APL3p~Bt0`{(6?bqmr2D@6>r`G9v_66;A8gI)z>2@vFzJ7C=lLs&Mm^mgq6i1u= zI5Kf}{Yp2iW*BV>4R*I?U!a_S96z}51%G}?_Lr`Ec{_VmKkIh6a;hz~w08xzKc{b( zS9E;Lec)Z_7h@W)du^GFaE3(9VS|fNXpo#es z3bTRBZ$jR(cB)SL!T53ES-97Af`3Ob1Q=#jM)Ce8?T>>_V`buetcTZFM&@P-myrbc9QOW{lJ32I zXg&q?AI8yOztF#`?0=?ya|~Xr_8avX=7Tzn7auTQjB`F&FXPtnN&RQk_aF8K>tOG= z&Pn}fIdi`J7AM?VUC}LkKkA_#59v+1$uXyq8}aGh%-pcvS|2K#%wAm_GuoPMkS*w| zbIX5BtYX5o>Yn+GdR^-}fcXR6NiQ*d(aL@^Hk#fR%LeZP!K=)XFW+Hj>i9l>jUP)w z2Y|y6O}J5$yM_6T#U8h}Bskv$`at73g2A<3*8uJ;yU$GEu4ko}&LWySeqN9KdZqu1 z=Eq+p%}=}rnjcqLuY%^5?hU57hxxxwbA$87(fmkSGFNh0x?+XDOjo2oqnjaP`1VO3 zuYi2ozMCsz2bd92z`XBTgWj}9ppJ{;IjSCju=;DPooKF)KZ@_ziEBnKw* z!K1eS5A(han!he0&nNt`1Dh*pr(Qh|J?iz}!Ou>z6VNs1d%Xt#B)q3FPx-}zoS7NV ze!(%LfS=-7?SsbHpJseZcee$)@*LFx+2`C(&>!|V^DPvAHmM$`p-ZHK6EI`IT=GW3 z^!0n>U}Zd)-?Gw2T*mg#YE<3w^IZeJyqNZsi)NTNT)@1;;NH7c2Tud&N&WSV|83Hj59zm|Dl-NWDV6~3r@<*CLJUF}Z0x#^XqqFa-j zhmR9lDh+2sMsvVn{I=&3SLXGi_!|8)Yb@AnH=5-fa7)jX{E1uxyf(NuOM66e_cI^# zap&;OCT;9Ez_@U)`Dx?mTnX@2+TE7+o1}%ms=L4UJZQs0V2hr)w=8{_7J}Y-Mj)1oWVUJ zc!sxd)?Wp-aQ|f$b_D-!WD@QbUIVspX3zhKu6gEob!D!1o%oeG@Rzjrywy2Fj2TXU z@hRh&rE6iVw|vY6>sq{ub5+Qv`)J1fmafDF#Iregnl@ygx|Qex(qEc6Es}Fe0{bG~ za$T`|V3%Zy+P%1ZAZz!F-38bkyQju#lpS3~{oU;zxiQPW z1^biZ|BH_}zR&ahjrqPfX|3;7(>4V4*}|S>v;ln3Kp&2>XYDvV+fdvH9R~OA$*%W% zbqT)kpuOH?{e3nth0E;GmBit#tXpaO+%-vdvUi)0Psz5Fi=DpCHs5@)ue0jPyu6*u z=FeOk*d_WGS3`%O-KNNdZZ8wQYW81X=Os(h&x8Gv>7!12a$@I4@F|_fue%aktuy-| z{ctGLR{RwG-3teP$d(K9>q-OM$D|Jz^4h&RL751k{I@D6??P9vuE zC!&dXGr!bn-&w_xCh`|CmVL}cC3{qEZnp3HMdtg76|r}v72J2C_kK8#3q{f|@G_|A z+u7t%?s!#3Me}R@_u-dGyBu5OD*tVmbJn0qB)i4)pU#V=ZV_e-mgGvFKDif!2{L9r z-@pr45%4nJ99~QR_@MREY`&dul1az`>u=IJNsQ|r?NjVQMSs1pPNM6d;@^1!M*%^&3o%GWP?GmBy))%kxeMsqO8`y)oZ2*7T z44G?n)mV>Qh%oNh_tI+e&@PsC8{g^!UYgwB>*<@8W|*;`K3|`$?eoA!u6y32kBZOn zog@m~9%uTC{f238^>N7$@Js0B@Ex?JACGre`|W-7arUoL-O(pH!M(n~72aK9^5A99 zQzdkp?B;5puQ$G9gsRf)LEEDvWEt;-GYnonqc}e%)Nr6vo2M zLfcH7BWz<9@7Kz&$Mv10YD2HGF)j9V#a?ok1mE$H$Y=Yb=lmQ8zSr4;2;hX5XPo_O zd83&iR*HS^r}!=;=O>*pTp2qlf04>L%NfH948P}szRoV}9-qAjg+pyS0h4}3EScte zfNAMwwEu@I_P>08{v7$rUZufVR#h9|HhA$F$cW5xL&VUOiKQ7EYHJGPb0IIhX+QiS zpTyR*C;D(_JMj_d&U3@eqZ9_Sqv5pIH^a0WeNr(K9q;Tw2dF2mgYjKJ6r-YROL+Vj zx(a>)Tcj{$Pu4nbPX@AixIW;MJ=A6LdW^~$T{F}T-q#t4ec3-{ezeKXUTPu!H%?H` zV$PX}_#^yJVq?gN#B>@Ba?#~zb!xg9|AP9pM0Nue8fleX%1E23Ptwm)>+K* zpYsD3qzl*I39k6vkQvxov^{pd=GpYTBt8Bs;$QoS?cdG*{C%EZx)gh}M){e8tHmA7 zg?dlMy~{bqEQfCxeDM4CDNW8SbISkip#1B+Jd3^G^8o8ux{)VV9!^260aycW{G-g; zZ|o}^e6wEFl&Hk8P2{&c0lpYx=h^dv0Uj&NzWncuv()kaZqc`Y^=>*u0CY`5A^Z_iYbQoyk5Yb{P0#EymcLac8)jK zb;PwsmT{(NspO)xLl0*m^a{^q4-kLMITFwy5zFA)C58(k&9*fh!8sI_GbqTnUg_xP z1N4ogV)jJ~eD2M(%X(sybtd9sgcjfhq9MmHz%I>6s(D>u80J&@C)HYvA8EDZTOIUBw*rtmfH?Jfm+b zA3BHi{o&ob^Lpo!IxpAyJbxXijDLGL|6?8Tj@>2B*m z=i!Y%(%8rT@TOmR`Wr8#;K>y#K=JRiZB@3n4MzM^S zAK5;ChCF`EKNf!AX=AFv`zYtwZko_Zq%R64xP=zAx<9b`^tiOj4|l|uA~Q{vFrLIa z{2Y;&m2UihN-hc){hHXnS9xWR>5Lv1=Iqj+`}5mE2|JUyG5n2w_LS#54fNl}4EC*! zXM2xmJkwZ4n;73h;|+o%yj++y(VQO}8j7|lKf0p*sCz^=Svz-Vd`$QF#(pUI%9v^O zZRvBrC7j^3qSp1*(pYh%GxUiR?b0=J5%n2ztF1nq2`|_!gX{-*CRjsfg!N{@s?l*4 zgnyFed#6_s?br~8 zCw$6Sf3CBo0{MGiG#K~G)jpyAp|j6`A)e<9mfiwqn(53j78@*{N7p?f zJw<+pF!E1l?^<2_`7zy1&2AQWt&?5?o-e5)dS6-zV+w~zV)4+ zD#$kS=zi+e%Yglz2IIEpBaAc0vzoh#lr#9AGW08pKL|1J?dJBCS@ctOIzRI`>nqUt z==bpwXYHYfb~1<7RoBVf<@2_FWH|Q)^qP7%lD)}e(Q&C8VJ=H+1U?zjQ{CbgNk(u=+8q7Uqaw;rxuCe%X&8=fH(_zaY7Z zdvrqP>*$FA&GFUJXS@$}8~S14`N%uxxNz}<+#hxw#5zO@cRn9+i_;mmpg)uQ5by^% zXX9z@Gu~fz4e7F*&)FNy<*9D?8;3)Os55wiuj%}{x4PYA?Ybn0WBn`9fp*nAnZ@2I zji>*;#VU_!op0^AuQfWQ%M8I^hbp|a2L7{HXXxI8ZaIt-`SE0P`15Y)Am@XI2lG#< z1p4Pjw-&vwC;zzjkKm_#yPmVRcsyHfahKThHZL0%9e1lN{a>qj=4`2Z?BjTmU!O7x5}LlUk={ih2M2O zdY;yO#?fVB_za@x2phfpMn{o;hRrh!!!uXWAy{wEv0h~!b)_EgUSCB9c-|YTjQ^_V z+0TCWXT9|nhw!nK`5R-5`80j(i*7Uim6*5L4xqyiwV{9Z($9KX(c2qK)0QFkI2HO2 zCB0jWjE=h4!d6#@>s)r^JL}N<;WN{@TNv3uTXXxi*2dOW@SXk>=bY37*hARj;fJ{r z3mh&6*I};b2Rt*EH4t(97jfcyZUFuw`C+&=kM!Gh;mAR|Hip5qaK{esQ@?7_Kyk&u z>8k%~<-jX5_^(cj*2T_SrJHsMPw=%E2gc0(YAfFs@Llkow*5NeL~lNjgS4&H6CY4L zywMY-eXPD|`21dc?Rp1HY^Gl1ua_lx_8RATWC*xin=&3oelYkx=wXQVd~2eu*W?cg zYP1a<-`c{Sg87W>&9oO|C%C-~AN9uQZ}y!oJ@RGR_BtCY&vjOKphN!Isi3b|j9AH! z30?RrO;1BFF*%UKx4<~D#>T$=E{QHC8pYugtwByAx7WZYQPv5}6)xGs{D=Nff)Avp z=v@tMHDB_6>bWHQd-{U^vh3S|IAHq~Hv{8AYv-$mfsuVYkV_x*@+fvk@a$_xX@f@3gvpB%t5ZL0Kj5Q=rdxX7~8C)XU^}agerW4vGHK ziL5$P`?ea~fLGzuPR>A*ZPVGv*#yw z7CzHXVTr6p?u`GmL|l>H*V04tj_c(4QCu;?n=d%nH* zwztkn;{81*WNXx>r$1e&Z{eFJ*%I@^w~cZpm9H!K%+WJC?Q^PAC4W9_HVK|K#zJI{ zrRngs#<4UTI(Ft~`!;G!*cjc3eIz|Hg zX7K{&*%v+w-R=(PwvcfMKT!Mo2A*khb~g4JmF-+Y>te0#Vq5XSK~MaRG0q^4aNe)e z_|D!I8C$oG-dne#uXXsNk}Kmcs6E2BdHW-L@3z*)p+GKA%n6%pcj-i1WiAih6jCGW zp|!5?Q-fV8L08TK%jmjn?VckQ`f4nxq?a#%vY%Gj(Cu6@I+)+x)AK56Cp$i_v!JKZ zj(ua=FEQG6gLPY#c7IT%-GVCZI-uRfRAL6&(P!<~nDH_ZV%U0!@NLA$l^B5T?N_|B zjggdL{TmrGLC51h|3c?u2N~y$j_{fJg=v2qKPKonXk)f=iH^|Q+M06DQ$JNd(YIJ; z{JWy5>h|jC`neYax*kFw@6cJo1@>joIh)MIIeeL2uC71BTpjZU#1wPBVz4)b__q^U zEB3HA^y6}}?$F7l$;$?wS$5c;E!|c>aIp9u7a3lRoJM~vUhe8kWqc~wXRIYUj{e}> zFZz}m&U4cl);zBlzbO8hbv~V8_xA&hV7|BFHqe%Muf`gD#!R*4EID zd^NN?U$kp#lwSp2h}zke&wF^#??;UDehqMvHNYLL`?WEJz8uUKeb(aNk$q*^G4d(V zr@e2Jxq(>5)j=ESf6LrZye&3Fn+@5V!_sgf-nQ(EhRa*fe>=0ithr7hJCO6}d!5Yl z!ZY!<0__@3n7pRDn_Q1;EG%>c?Y+y7vC=KV^r@P@mY{!~3{$V{gbaUCFp7*teEYG! z2@m*W(t1Sdmy*nqZsldx-OmL4kw$;tOdZ#w1MR2nQ~27};m_#Cuds&wNxJYUbc%SAkmQ?6Ni_&y&A z{d!v~`eG!Xry{J)3$eeGt522Pf^B8w+frM{F}U}b&i2fiKk;B2u;oYIhadTF(FZ?r zmi!T?v%86}%ioE8%y}+4o7v!C9}5@aq5U2nhf^9Wj^*$u1hDo1Yj*%k@i!^aReP1_ zn*H5@QC;cpDfEVc>_?GBgL}uaTWR0@l-(ALS?S&K-==7P=(=}I@A(&-z?pH{YjxH+x>jGW6Qo8M zi!L$!G|*x@WpoY%l(Bm$;!PaNxLVKt8U7JP?l>>XW*My=(G4b@1&eNNX43f&_7M|AGcuh($I$f*3kFRvlwZuoRF2X zN9BYPGnTVQeUdRSrv8{O1hDa8P4-<0Hs`#4cnWOML9l14gT58ro>ePcXjOqYuxtC< z&|&7|4wj#|NWb1Gy3&vKiS}H<=^_wB!m_Eui zE;#UVl(|Uoy6Xu`f4|$Ka?ocl(04y4@~LM8b5grH#>so3x6iBd(=A_Vn0Ly@Px5Bj zUm#zQH_Hy9)u-K?#pA?U)XJOfg;|qyWZ~p>ivw;ze)BWfF4T4WpR5lL?mez?Soq2R zTPa`t%f3J8GQtO*Xrlk^q^|q)Tw5RNGJrqh@#LKFaB+jhyu=ynGD=sxmVP_p`)z3i z{s)HMH>QI%cxQq)4|t2i2a5P0&@HGlG`^qw`^lf$ZTLdx9^pH}7)T#6*?=!$MjY{l zKAxN%zQ2eMu!!Feela-B%)5Z=PVBY}?H?%;AE@Ul?mCN|{@orOIGRV3p#1HXx}*D9 zKd1iNX`}75(Ol}co%F}8tr!!g(w4KiPa9oHr!>%kE&-gg)8XMN9S&(+g|2s=ul)b)-&NNQ-Vd>MY9sm&xfNzdmWck;ijQt}{6=yl3P} z^TnS(LTs+)>a*)zeTAn4UwGzk2R{2`y1L#>{x;yVUuNj?UUo2%oCiKSlk_DwXLPCC zh`i)nZ0R?-J%2YVWDd^qifZ|Lhs5I&=cpBm%1L>2YL>d zh_^Z?te%Y8a}q4tCASMd^qg%=-IbhWx&T-Qh_MyzRY&GBjE1Tsa~XaPgE}_!EDfn{ zH^V>ZXVdskeAJTid{lr&E!4TfN8oR?)Vbj&;f2F#^t}7Kb2}%-SgVWpunztejm3w* z8}P4qsj^S$+zQ^%2-@f7P%gafHg0ZJ8G=pBTm)VQAMqu8&G=l`0$+{>d@a75&)C)t zFFilnYU9dE=Fc=QiJpzGzneL_HO$p@;jiv2pl27bz3RryzcA!=^-m=OUA>GB&N{`+ zgiS(BM2UHpXeRXcj8BTQs7L07*f(w#^Hy(mnRpv>z=ye4eAvH5Zw&orG8AI2JG5Ns z2u(R4z9Y@MNpoKEBjbNZxbVBucv2@o36_f?O%3!;h8pXuJ_y5`e<7cKFwExy{#N_gA32sR;yU6ytW$fKC%xa`r; zrG3e@BQCt^DLxakAH?gQXLt~wuYARhfiab>ANjp}-sAU_Dfp5ce!?z&f7|kqYfc1s zFm~wOC0Dy0$aO{sU`^oBq-Vx_jVEJ_C9&LoWH)uSdf!j`6A!@{*RA?TQ?vnfXPoL) zzQ$dln`Fxgp8NsXr{Fccf5Mk78tS=5jwt3gW^^Oo0J?{pf9wp0>~Z3BL+*lwA@7T% zUmayE4b|rLx{LYddi;CSffJ08^BC{e1$k=q)x??d`1E_VR&l*xVXs;IJMF*9?9+3% zzs+CJ&W1O!4pV9C+n90P+L*mu))r~wEN#sC1oj$~K6th^_VBOubZY$ZH2CwxcgzRG z#Ct(3TfOLAnL~852>?q?%jbEAeTNB<{u*Ad1)vlA<(;cqx=xcr0^Z2I#*Eu* zd^Ey5(%{~gR1f-*@hv*1Vr0a(cPR~iQ^wo}8qh1OuA*NSA2sb8aW|H=erW^y?5tFt z)k`TCIe=Yca0OH4Rp^ASRe}9S23zyRcm86Fo3l9+dKjN;-pemH|BuSE;3?X#*J!Qz zt_q&OtKxd73h(!=KC~lc#Y_0xlwM_5(yHBpdfi}YkF9h%kd3@9CLFv~xdpH!}Z46(BxNw>YP6YY1RIBZYF5?R}i`MD0!Hpo92A83ltPkLLzX|E5f zZ?vuODg5rx(_M)#iE%-7XdJS6fFwG61(xR#>_5vdx(ZLm-nuaxm$f&>X~yD+jl~bZ zcMmX6v!C&3h`py8hRof5SV(@vW5mO*r!DtWpSC#>!1-M((eF4hWX+B$pzsrmT2EnDd^Mc^J*vF1^GM3f8VlwfAUt=DL=EL2Yh>S|HeGvSBZ0OhF4-P#J(7hC+ot) z?f*K!*#`qB7gfeB_BS`0{FdnEE-kP-U18L>Pju9e7rgJrj~y#K8MO1w)%S0;_uqj& z<=t&1#bhe}lsIbijOBux#cqdh(@n){o+L7%kJxGC<=!!3-($JI@bnGCOVCy^Fvc?@ z@1@L=>kF6hH;i#V#kZ2b8Qpjrg+xa+M}@wgw!QlWBh+} zfLjI!zkWD`a^ieotsrU&OPO+tVQK<<5Po$&mY}94xUTU)f4FKianhvPA9Fk z8JZiQKN+0tCdwUS&!E(#esfx7AQ$4yLC275mbUq{Ph;z;kTu00kOn^o^?On2#n+ba zc66dJYlAk)=_!zLz?B2HS4el}N)1j;T+d@Zey>A4% z_6B+XZ{>|$YWnjqvfu_i=T3WGZrNk&MTT=P6A$ro*2H$`D{`NB5o>$rJ{TG!Zh&?Y z41Fs+6u_8hr#X6042*Ao;5aAi&%JS(_vpNcE|4_x^F?c;soRj$kR%=-ma9(@;HNFp0M%zq&{A%BMa8uD)- zD+6Q30@M+L)sW$mEM6R2Ph&hr zyoUE>xcz~SVX|V1F9V;4?`yQ@KM0QZWjG(7xg&EL-%jAmc;Y&Juk~fXn_6!t---Mg zT3aW7hT;Yz$P|+qll&M5+?woqWIA$Z9sUQmV_UNOV=lZ}do3zhzP4_0{*M7O!IO}syIoI_uw}UaLOYkp2Yeexg{S8@BDRZ9Xkxr0A z4q{W5sE2r$_L2`n`ggbLhAgx`sr1+svFvyJ*wnbbVwXP9P|2(EDl}1A^ILq^*SGn` zAfD-{uV>?qN`7os_UyB=DX)?ry3{*lD}6wIjmXsR!M7*mo98=vRaaXD5BkA6;VxJh z@0zE<*D=j^q1e6;sZD}!W@`q14Sn0BZ{o$`^Uz3ZW%pqBXulWEohU4)uJCtb!u?+! z#y+i+t=g;=S^(#L`kuEqWNg;;Guf=1qam9WUzTuQbvtD~E4i|-o_3gIuhzg_XK?4y zRt4-;#wMFvXG{|R;YTaaYV~bb{Dp^Q_)WJzRoCS;bH}tkZ z_9%WDTVU()K=vFcNtYu=xO6U^z7o%_IO7N0rec{ojJQo&S24`}NQ&n#F(-o@GkvES ze)T%fMs%KQE8}9*0>;gv+myE+Z53)+@M&B)bISZlPuDANNLD4_NcGdg;=Jy)UhD0${!FcN>+OmehCe=9iT^oZe8K+n=(}r(i8)_{O;dIUZtbULDv*j~8p1scED$8J!A3Ap< ztLF%2(~uuy&rq)UN$p#CGET~iF7PCJ&xU~3uV&x;fY$vRs&=*3m)y^q(Wz@pXgB)Y z7WkweJ%T=_bxa4PFK8W;;*+X->%&)l%-0Xo2YZ%%h5JSBar)_X@Xi*=fySq8z1zCn z4}>*(>&wXDhun4Sf!L8_4ay}eQg|u)R(5Vd-`%pgt$7GJ%y(=iqixFzZlgWp53&4D zyQ}P(`CdIYr8)DL^w_+XzA3Qfh_5$aj7#ll%YV%0UHAh(CI;VrW#2v;=*@{q-+p1= zIs%xQYvLE=d)B@!N1kh3?n3`x?{(N3Tm1r~-QeC6RelQWc#VU#W2NA#?=klE@%{<< z^~0G8pLK~}f^YC(|s9(NH zd)oKQkJ$Ma(wnswjP|ekfR?R&>?L^NRrrBEZ2KRRe~9?UGp=Vs&yD-Fq(c*Y2LFf; z;jtTP*EHe7xxul9+SWC_pju)yY~-BiVYem!Y}JOnM$h=sJRjZSuC!-tSfyuO(-oHf zMQ;N&$ik-eHlC-viF)rYf`cD_M; zlSiM!7in@q`P9zH1&imxC#p0javuofM#AirHOOM#-*uFERm&%RE8q{kH{Ows<;$${ zj$j=RX95{gp5PtHd6munaNjT-z+2a*=ZVvRSMvXAymKHAjg5C`kJrXO9~ui}4ZLmf zjy|qkajru?ZjtLY{s#El%-<&d()`)@6xjJ4=;fip$61HRk98#4*T%VxiKW^%JoH=; zD|HJxN_E?r zp#Mb+oae*X*}ypk+m{txn)89Sv<(l8mhkN|*RiBjgg^0D6T`SiG-o``D8Jz1cdApI zB=c^xbX2jEck^d;WnQE{hb~QQZ#wrJ<=laP@-VbjS;W>*-j=qjDCZ%{d6;tWs|WD6 z3BF*fg20|<^~!?hFfnb}fiYz7-HjRck{#LB%6IIEXq)ceJXX!a;V{ti6XemJ%ikI} zS}fDPgZrY`sEV6Rt1R~B8MV3`f|p5G*hyO6X&nw{FdTJ@dso)Y>1zW&czs`ty!H9X zF?AjA>lULSd2`TBa4P$@l{7vK?u%FQ3Ff475A&V4Y4&yNArAUvAx_!ECt-g@T%593 z^dUzdJRU0cFO_~oUvt6*xEr8z5B9+ZqnY$_XeN5u`YmvwTvtpCyrg!{2Ibm!)s?gh zoqNEZr~4o}=)ars6Dt1d-XeZ1VwmEEhh0YL8`IS|EA5G}S>+p?Vb2%22fV)mKSl`N z@jiQ`Mmygpb{afSCmGe2Z@cJw{IPcV;X&#cXrANNwj-e)jxy{SHiw6?RP1iy$~I8 z-=kgDA$JXL>?a@Rl8&~qPT+ogLO#yrQdcnF(522S8+i8~l}#ES=d#h_T<(ir%6>QW zJ-!d>d*B=TobD&bxja$UyJ^0mOWkFR31Q%9KZZK4zr|H&53W;s;NGrl_LtCJk5}ZH@WFRr{r8J@MPvnI0+I?@D!UOxXSsMg!4h3JtW5xk?|t z$ESSvzK}cch15ke{(K4AL2!vCv^IgZm3-)$>#J=PtlM|t&6&^;HfIMbVhm3! zr^(-nFGMgV;im7xt-1z;XW!3mIvVt|>e(^)!D6utvMAGqk5_YYtTlPuw-Q2ui)Ag_-6rSeW6uX^xMk>7ugffGT&A+_Z8?8?l+Ri z2XsQ&5++y3^LER#*z3%Nr1*Vu>=Sc0+G{1w9)vq+s|u`THLy%WH-A(eu_S>%N;owR z1@Q!f`;yrwkT>_cgxaqZoLhjeB8eT9h*tF-_RIpu>{C;Gd^U0c&&gLwTX}es+5=+L zsXgqwcm|pW@-N}r<;IHqo7kW1OX#UzG+WpE>^b8C9J}F@by@cNa6{OZ7vsOh2X)EQ zDc3ya<3XSss9-O~B}YCVF9bSg;8W8x-QW^|51kaurEx^D*};AiFY7z=)Mm4=9we#!)jSu~=Gmn@8s{tzxLycdI=$cX z^D*>Zqgyy-cESX%MQ|lPA6y%U@df4O&!ld|)%o;^Dd|h3XOCLa&l-jUR5#&7-F~X8 z%A|gi{1!obXniL>q5oQ${}0Xz!G2)POG#@z|AMtq_qn^Z9$fyw66^TrLmiA!S^jp( zZs598yu^4n27hWz`EJ=D`er;v9KF5QIF4<>*;NtZJBT&y&$wCT4D%l@^j+eNXO&x# zU5Y1Qb#b|D@xbxXrTH#~nf$g^t&I%5oNmS5-kJM^bhK2P^b^)b9)-5os;*7vxodQ- z@j+e@_#iLW`{>PX0ex3{zOjdao5xlA3vT49arIiRngh}Ktnae)>?0Ul-xhYgZEg7c zncu6!{@4t?>!HQ2LeBdGD{*k41GfLfO68+2o3VpBO|K`e2)%g#duY32tilPeg9iG4 z7d*PXkY}tTP3|dZiH_V@W-f+0QWn+#{Y~^^PdCv|baZpm(6Har@XjT-l0lx+Qc7dHORKQ9Wwx(Ju*4=vI*@|Bsb(*!9!@JL=llbLKX;IP`(?Qglpg zR?dZZ0(kf%>)0buXBdQ@%d~QHhu|zqxH-@Udt>h_`6TUt?t!ghx)nO{PU8cvN^3UD zh`XUVQ^~WhLwR!FJWC$g`-jLgRLQgVsPdpYoVgtAAI8Bny4!DJC-w$yaZ35J*jdJ- z0d9sD`kSuBiv~tV62P9Wk9V0}(h%4sMAj8X-~;q)>Do1Vs^%W0V`mxXCu|O4hC~M| zYX;cjZ}jxXiQn00bDG!UM_mkDY#G@ZDkrdMDmwgR_}H?756`q2{<7_`-(=fmH)7Xa zgDtk6KKH%y(q-%~jh$n5D7eZu?eT&J$o8u3CR&M3hI1uN^-Nr^8!t?pRW~-co}PPO zG#PG~k&vZmbHuA4bbhCNrpZa3p2@SOJtNgfKG3ln#E%q?awWf!{5 zuL}tFH40#JF31A*Iy&U%)I@XU3nIi{cQvwJO3!)DiytX7PcbI`+}BybxyCPw$%_0T z%`_ZV2?yrJz6=g{(n9QECRwXk$V%Oa*;^WV8Qn0dah$QFi8b2%7|XsAb_d#;u|xDs z*+HZ}>FQc}}e(Tl< z?d9hXl)h%{Dt6tf^X;W?CqnN--i1>c@q>INp)l(v>RFEwzcp5;bvin;Nqcm4+WM3j zGIj~{`kB$C0=LXK8jOp=A>R?eZgPtYpG5A2w`JfF7y8Mz*6cst+Mu;Bp{H4YGp2l; z+cu|fY2C`6*65gP9$rR2ufVOqq@Ln2!}o85Z#knjR$c4Dq; zZ!5B5@$kE)-+S3tSbJ+sc+;mB)+J=aO^oMyulo*I~t95@S$CAHzcm`VzOU8W z;$_YY?Oz)D2y0VVdz1U+t)PygH0ExE*NC;fe{%?0dAUM=n}lZo8((7;_VBIsq3glf z+77rEr$mcu*tf}O3!US}D-}9hJ9xducnTVbpG>ZVS<|HQ@DYkG`PH=JWxcE!>MiH8 z)ZrJ@$I9thTDQDk^gEYmM5G%HV(LtA?O0j}}mDsX`}#gpPk@nxt) zy$n8bs;{Tjcu}xw`g$P0gBaEKrz(Bg`Y`F#uS?WP{aJcFIMve+Q^Ei+Q?dy#u2eGA-_7tr%M^ zEk4Fcd$ZGbUsO8U!F2uFvVm7W(|gI2iM=0w&{>7!K{6+=a$6yx3BF-_}f)errcmeG1Lo13WMh~23phtR+-qyfRALS!#~E;%q`h3l5(?y{WU7%RRW#V+C}wNpHjl6COcm*S)&*KQt!{+ z9`D-{;57yg=EsX=(4)O?0sq(}-@=(#ByozjP3Or#-t{~q~Of;gKF zVP=M}@vZE6J=0ejbY)CV$*x!XVM8aVqvBVl+V?TR&prts--$0sYfq~F0`^87^00ty zcmbOh_po)X@P=T6L>M|P(H}mTg!;YGc)jhtmHlrL&}akml07A252wc1D*hIpo!EzC z$Q?r;eTKiI{5`>6nLo2Rx$fl8=69l*uyo)<|37o@10UB_-TUqtjcwVM?U6jT<>107 zo{{8OwiV)l)a!C5i2@E0wvq;FZgY7eF|7fUm?rN&r=NUoC${XEFn>Y`txf&7!Z^lB zj%Lii*6GdV4q&JOlZ4g<=Qa;S2oPwL1W3T4Y4yIpwa*!iWGB$q*Y|nnWBHspXa8Ay z?X}ikd+oK?R-6sd1O6!8U4P|Hb$!MiZ%fA)0@I-6sQTK&%$QJu{&xeQbh>}3>vRK< zX`9rH96uH zgFmgSJ*qtMaf`z-Kzs|*9^Am(#op_DXO+b~fcGC6?P5+4aRr5)mMCowv=f!|vj>o>UB zyRUmG>0`Dmb;NSkTtj>MA8?QAJv_ORzCFPhaGY^ex+pfJzZeI8`4$>|L^w!dPP6B8 zmC8{VP5Woq<}MY$*I^N$eUDi1mTnD{_&AeZL~7Sf&(Jhc0S%8{Rs z(FSoiZTuT^CzKcY)5bji^vlx4LYp6t1prY6f4}@?$ zaQ-qwAL}E5VoPW}uR^*9-RUJY_@45x^PG@urF|)Dm-_cU`j40mv<*cVT0QD&!fDjc z;I-C>SM-XrhF8)lO{)zXufT8fXyg3&1FW?+v(BhB#+vX3jH&Wi*q$+0Lx)JkbF8&j z=u^s78sM1?e6`YY#fMPLC}Lbb$ami9dw{-BI^*@Rs>2Ry@`yMAcQ@=^CkBjS!o)s? z%-e^|Bld#y=h!^-fAJZyU^NGqJtYpU5w;cCx2=t}Zsr8ox1R9pnuWK+Z}%}KhikI* zYkj?fdYgeGqw*9-RrNz3p!!_AApe_{ZVX?Q($`ogARb8Z+A!V${iaw4WSmo}QQotx%pHl?FBZESOM(XG!i2aj8u%+`aRCAqyq zeT+TLWQFWam2VIO{sX?An8u4~^=RH9{m$DJn)-68cUuu1TjdyxjEPR`FW(_=0T>T$ z>u?LU)o61fR`j@cvRj1q3XNHQ%wY_@nV8hfk!@U6pQ(&9t~u618F6ATg!5#de#^?( z1Dp$emOjupd>~B!HFSz@=8KGX(LBSaC$<3fkG%&x;u}`lPx@E8<=8n%3!Q}XD?iWF zyo$L_9zA|PX^WIe+SvWXK8WVJ+jew})tCz%bB7sYA7ASJ#rpvk_8Fy%@@u}NZ>_b- zpXt4ykKY%l?kElI7jLA&QQdCSgieQU7tZD0bZgkwskpPGE$qcF3mv@hMd^$==xvBU z&heRrOi9GYh*R@GGUxTl0&-jRqwmhw9iM)$!@k?k$x>VWx{a%`CXNhrIm*jX9y||z zD4)DJ;y`jO$@#rc8Y@^Y>Nflyr42kIAJvw2gMs>kE0JsLr$>gTR9=9*5P!v7Z#LuO z|Jqns*c`%F_UlU#e1)C9?r83aev$}o!=`$**7Dr!;Oi=P8jKTyk#^4mubL0}b{A~E zv4TCi))wS{YK(R%jqo1gJ6xZ6V>JJ%F~93Bf8>Ryrup|Z#46WZy7W0{E%G0wEQfBu z9Pmq-#qm!w|J%r-*H~s*d=#I)!BH`~buU$!D}JJ35AQbi zPIYgT?eDevPW&Bf%hHQDUt7O#2>bB&{NBstJA5DF1F}-z!A}<0lBBaXgOjx0gF9c& zYKJPrZ|01;FWs&oh2KLyJwGfT>tQ~9(aUUT8r|mLAnOJu&*JEE^!a*p9<8tbOl=g+ z@cez1CwhvH;%5t91drY=9i6P{E<7~SJ$~=6v==h8R}O3q`C(LY72Nx|_-B~UG@Mt! z7$jZ$I{t<{ubJ-CE16f`J&`b*-)->!O#t#6#0k_Iq5MzLucU`>K@Y!9<)Vk19lw0Y z$JhYRi)okb+fjTv_924DP&d!#g{xlagwo?o&qMb$_@HBbL%yWYBc2QQLut-F?R*fI+$O>mc2_?i zdM)D%6c>#XHWva;WDXW2*}Kvm^%%*wgfw`o*YQ&Sdnj-2^0bHSi0lGGQ+1h)q&#?l zF;e&BlpX3i{q`_5r1Q4kZ|a-DK4ZO=J!9QvY%?LQ6dM-1#^pW26=z7Krp}OH9?KP^ zDaXcGJ>$DE^?a(~`O${wry8E0*R$#(?+KL`U3#bInRi+UKeT6qQ9kC8h4b74=vhbc z`T8V2Uq_O)kT=ntls|c=_p49t3;n!4;P);i?+Wi!QTPhDtFfNW9o{p03ip>3qdz#} zVUP_1`i#~d9j^Qi1=(9a5N9P7LKpF3PdzQa={_u&Jbr@J1y zZKvE8+0D_byEP|7SIrc$l`s}8xBeT4zN>zGKnTnmdji@#9;PL}RC%_SC!~L%{Gd-) zz0k{O#zKp$Do8ziIUE1Wr3uE#$&=c128$sJlDaSR>&gTmQiUs@AobtrRO zDW-JPA-|-wU{g9^?VFCv|M=PZ_$?k4Z+gCL24?R!jQ!Af6TXBW70*UzBQg-PSMnxz zft3w>;u+u@H+=F^HgD?g&YpF#O5Zg8F}j(ujsC0<?TD7Bw~;*}s%eSA_SOcTY2KF#e~`Gtvt+cGC|jY_)aUxO4lm>IeEDM;#gZ0IXU( zofx#zqvw+8i|ogTmh>C@b~AG@yOyD!=ph&~`}gb&=gzqtekqrG`yM*f^ZK3|#@5fJ zy;QoGCwjXL`e$dxwFno`snHdCAn<8%bBP;@-g)0~jknXjo0W&PNxt)!C{a=+O@FQe zE+&;RYO)r9+4MsLNwx-Bia(9-Npg@%UyAdZlka z?S*e9f1$LJIZ=NUcByo5c13vK>TTDle3*~?v~_;r2)Y~3>~ZMEFCNNd{CULoGljBi z^4Va3a!99dDb3-z3Y15F-!GhdgHN~RZCY+VB8_QgS$e@y>(<HXY}TD&wbb6pvw9!3$NoQ5)jQc+MPF?zl%QFXV zt}K$A%I7=jr>_2A>}cRo>o@g@3aI-{iS8*^b&K}Hx~~i6i|u2nB8yBHfFD`2#fXcK z2YwR8=fKe@XXQS}o;}8#@_~IOueFA)da+%1W1s65JrvGRX%6`p(sjAp;}KkR7rrVw z{Afn|cI)s)`5v|A>WuNe5^E2aUhVR&&>m|OFW1hra+KEieC)T={tT@P*chgA^qV%D zYzf=l4L#G%(Bdxk_Okv2FZy}SCSOkKrYX7<{XvhUhfZ>nzw{}RGse5$PKNR+C7Be; zrzCo!$q17#$c1VstAefI^@gw{^gTT_@I`XTxQ8bkQxaYMzkITeD?e7wRvv)bD7rv~ zsJ;If>@*&)>04uZ$$gbozGEWQ)$e)NV2ottt_hd{tX)7sd;|~gPWX%FLSP7{|nbQ!UC=rsZ6Eut&f7qX<4_aTU5M75u znKIh$=>hp>bqr6@M^vY;G3_v%53Jhj*tP=K?e> zVr^Ldb@K6eth*zF&O|&V=WakI?Ze;f#z;OQKhu$J#yLr(Ym}W~{o6ubud#=;2VKH! z9Gn3$NIaE6d~OD9T+_VuLleEw>vZ28&0Ucn^2zDEc6U$bExXg5-`d^BoD^HkbJ_SP zFyz8@+fAHPgTE5`e&Ukl?&RV+Y|I;8ZEg3mH#hl$P+2<6cylxy=k{qG4f@%o|FKG3 z`v-iq2Oi9#l^H+GU~phcSb+lyZV2%rGd7zkIdrsNbh0q zVNtm zG}y#iX^ygviLTl;?%$&NOYlVI-7eO*#kKUk-LoXK7NY$X@}9px$v1Wnske9$;~1T zrry0mdrh{K`he-(@FG67rMDm(Rt>GhHzi-%PJ7>jy=}qHe5Id)=5MLRIm4}ZhBLah zCp+YWYwdr#O9xvhW20)rFwkT=UvGu+PjCY78ix-vGJA#ERopuHQnZJA$zi{boVKKu z_x~^O3-;3ep5EH#`FSVf23=v}Wm$Ln14^+w?c0*aS7Z=d-e9({yDzqVw4*b*dqXJ^ z_DeCO!zy$*?tUwtYF_;c{gQI8POsLy7@xF6_AzLqd*e#cMd`it3Gv`cEtHEbUHuZf z+S4K9)~sNV@p#13qT+cdjtBZiTJ<&X|NrVtqRSnAIsNTdXBzoJZN#>sF=T?)VEgtFxrGNK!OU<*D*gUAqXU-=aBW|TM=vN+%%tJ-umB}5B+uKE4x=D zhukv3zrUq-f-hrZ#PXoudPc@t zpQeT;|55J>k0BR`9l1E|?xOC^rN~F~KHDGX_4-l2F5z*6u5&-*EZ?CWXq2LYzD|l&#KV&-_e$vo=c|=eCO&b}AD**ZUG&f=S<(*4DLQ*^lnbR@VWG z>|3FqD|+*g#`GBN^?QNGeS@Db((X2WfghT6U%JrGG3qw%seRn`z3>O(V=vF>57X<=Tc1;2 z>YC&7?dXE{U01?Z;qh;4!`(esFg9GwoMpH-i~aC_2{yqM>CVjKbcU9AN!!e+Y8w4H?VJdeFw2| zv_d|8_|r ze6QRf7|w~))#uu3=-_t@vcGvGxNy())YEKrQXh7&+b_T$8J!|Ue2#tcS0-je9Q*%5 z?5v-{-uk-pmYK`TCuOkwfjb5%b2zvTf4WtBt{1FYJ2_vT5@$YE;;g02W3OAn#VXu2 z&X-nCz7)KT=ij6KT2JP@G?nA&#J3Hb0Jdk_BRJpQ=gjWhr}Auk1eRi9&#>|ZJ$tUl z=d5vDdIVpx1U{65$djjwV|x^jEHO4=_&SAs?DodGgm;a%s;@IS(xSP6zLQ7uo(+GF;A#-R4{?#GR1pf^M+Jhqv?+ZbQZT70+`=D*!d z*r>A?p(k#dvLC2CxJmM^UHRZIqq}qU?bT<)G4UjFV7kv=WMdEcfVqBJ`=(rN6iL7u z5dMEKewWHGP1%t&H+;3dYxgoLzTe`c^Mv(1A5L z&Z#VC4FZ1~(Q;!x@HH|vvLeYbBj?0Qk( zgnbg))-Q_eAHq|#$F>jIumL?H$2#EvvV1+dqsg=7<9?4Pu`2EAT0Z&hbsg*pPlt9e z#Zg;+GVl6{3EzLx;BVT%nRIC{Lpj%EkTGCG=EmLWg3f+N?{Y2M@`Y_)_lgC6Jze@2 zy75Z+GsJGTa~!mnPz!79c-v~$Zx8&VwaJ2g5b9xuMopug~ID(c6PhvX(|6TpFH>zFO z!M&{>dm??if_=n2$gTCtJ4Vb<+G@|iS>E#C3KAb}cM>QCPNYXIyQpnSqxc_(*j;t#|s3{HohZ8Dnh?GvtqOO}WeL-{9?NmGo8G z0G=}N#1Mbi$xbJm9Jop#&);4A0dl>GJ#V9KA$@XPbOvhbhPs|S2j03axr=peeZM!H zcaQqHxZVjiXm&ZeudRVfZ`M`DF06Yo>-B2tNGi>F>d@N8b*WwTI%iSm5Ou*a$js5n zpX;u?y3-#S`;EMhF}_OPqYL%u9k#NR?%1WwPG_WRGV~eOu<43Yr4) zm_8uhA(poCCm-s;C%jXi~vzzA>K_@g?R*I1qGQAJ19 z83NtKCdM>${lXvO#}u7A4PMY!uVbv*7Wv@;ulz{5fprVthN5;MpTqf!j~gsGr1ChM zTKnW&@lGq(blD>7>8gWr-)(S=!S9r*_Jy>R327&cYn8pVZu2<|jw;C0h=!v0mc+TE z%ncTMf_i1QsaBE0qh5cOUP^tNfq8?~S)tAcDeE}x?}lEfe~gh3nK~eSg7|JL1kczO zYe!4yrSJkU-kZo(kqVP4d|Bdqwb2Aspv`$ zI5wh7n7l(*SIjm_p>CwD@PQ1<2_Jfw%6mNf-^4&3o$5LHRVs z>lryc#GKV)YtVm7RDNNN*Il=Hxxl_w>+cATDDDRO1f(ZApERj` zu0FByXxNuSk$xRyM|6H>UlkvUbK;eS_PuDWignFn^yw&n2U!=<9xLn_6TQLO-P$kU z3ZKL`#^xXN_grL1vulM$?TW>BcE&EOb;^#l=2`TivnR8Q(+&*`8_-u=ED7!FIox;s zbLC6cVw1A<;kPvCW_RZ^BfHbV$C#t<4Sl7Kba%K}LpAlacpf@hj}CZDa#m%bSJ&+n z=poYe)*}P_S{G$9kHHsece+k1d`G4KKK;JI@N|W4v3V-X-!cCI@$FjxKwE4f{>r+;%uupu?%e8p^ShjSJtwAhk zV~oKUXzw#6M+J_@6JEKvpK+e*>F`(>0W)0n~qaCgx>go$-VVWU*FfsAu_Am(yZwmaw~eSLB~z|_LM&5 z$I7*9pe@#!ct6kTRe6-#)!$_0buv~7F2N6MucPcVzEEkUW!yCy48N_V?^;S#U`Kuz zpKQ>%$WQ$(T6HYZ20~e$9zuD>XRkI^i2)E00;OROt1@7LYxs?Y0z30N)Npzr@;NLyMj)48nK3OeBz+(pT>hI-OYi$DBT8+#jL%&?wn za=rLd;ePU2m4i*r-j!Qf|8$c-(L3o*@Jmz~RX}H#ejfP~$?w&%|JJ>aGoLtjx_lA-fxEV> zTy>daKL@-sA3xa#I3tUGP}brIcu~=1IyaHoQFLyvI#uD>FEjJsjGfSRWV6 zuV)V*?VA!l%2)Om%rC|%o6Jl|F>^tLPTBHis5 z;)TlP%!S@BJ?&7lkK zI!{dJZKc&W-HT^jd+`Lc*{=9`?H!pLS)0i-rel|KTg?Z+y3^gQuRjxq19vd<|?zdeaw$eF2puiJg4w|bb&#@UPR z;ANHO>qp%He!+e|kz~9^77O29;rU<&|AW|xu}4GSi>tk~eXi|=8K`h)-ZG#xV>zEs z&kgNYo;l!0c4JEipNXbVR|D$y?;GPLZ1inkell$P8FV(YkILr)JeY5qV-5=6hW=!c zt!LTos#p8B#8<$papbIchkDNOeF*D`{NJbM;WO<~`1|9R+02;Z<~(VhBW0QT{1W*qsRTLuq!Uo(v(i+1MSI&2H;zIs}?iM@mz3iWX0V@B`FOuTf5 zpN4c_oOT!LE}D`(sjI(zr`nde(tKpQOIP5l;oJq#ax#I=9qtviu?w4KkMg$G?JU#F z=wu)1dFTJD!?7ru|5Jy`Q60K3ZJIoxyV^@%zJiZhd$j%~KN_=P`FVL?Hv32&KfPAg zH2i$c-ZkQfIBOn1Y4E7w|N(HOKdmb zZ`{%xf)131JB^Zmp!}RJLTY7++2-q7c}`uSJmWp`kM!6bN&iES=Tt3{car(MXYUR3 zl}9*dt4Y2aq=!s+zdM|}4|^FO;0MRI`SL3*yxZfNc!aamPGZLQ1bG_+C_{C!ZUG$# zUgmM#O(Few8eV!Z8Hw{GFZ^VkQvCo(8ff$@E`4a z2$(a-rX9qu8PuG#_?${(y>mV>99gf*+`Bssf_CU_VT^e`p3SlQ@#~v&GSB&11TA9E z4Dl42mUB)u{$1!(?S%t^HHy)IJ#q_kkSknrS%;h5Gw_PwpQ$x_yu+8fiu=jSMt(C+XtD1vN zwpNlv2WnRvgEtaqP3@w6vUddR^P^LjtDUQ22Gdft6&O$6&b85=Bs#R}nHAO%(d=Bcle*@Fbs2pn-U)3s z<*vxQ(_zKUU7@^%0Q}5BN4(1|R}9zKC%54bv8~4WXC2WVEYmC3csw!|UJo5emftOS zqy9Hs&cq}5+z^{5U0~z-j)cy4+YYVViv4LPc)h->>bAx@hBF!y4F6U1Ea6=-PQ$(! zJINSITzji)x!1XxR&C2xWp6y@uUN%V!0xxs(c;Cu>uF{!a;JjV{jchS`;BNKvU3dKK5~6Q#@I5!2kH(qE&vS?8 z&o+yHpt-;3qcAc;9I=t+o|238R9#FqV0?qbr#%Spc~#l45+_%?S-I8Px6+!f%NLy$ zrM>m&I!V#)F^%iuX?Q!ypZTJ4H#=A|r+zYd6<0pXLmkKuzitWqA$-?|@?)Ro7}yE6 z6mA@8#)dM)K8TG?qt6Mp>w)V!e5D4fpJff=GuX~P&6>ogu(uqO{&^fYj%MAkou?Ji zUP8YM=&j)ASDn8EhGm=`0Uk25CeIR+cTVgFwM^6Tr&h8Kn9hvsP6h|CD?aA7#>Yps z&dq%P?kwl0ZFMR3%w5EOx*KeLGu3&|6#y>ME6|D^ZGly2ejf^lF@xfq=vy8xWK)W&@I zB(T@^Wn**qcXZw|`I6>)rPb(51L$S%qF-J~FMHf#LdWAvnlIA&6!kRWyF!0YKBKk5 z_@8@SwDTT&_kGp7^!Mtt(G=2#@8|Cl=dAWrw)`l1*Ed-k`CEAB@32#zMy~xmcEWGL zTi-^eeFqyZ@*A4i>1iQ3RM$CmUeGDjerwN`w!GiBT>4w~`hoM=Iq=hlZ3*2u_A}0JMkmTXI+Bh(M=Yv#Wc~=ane}V% zLw%_nd!QCKuhx2p@S}bQKhJ`v7HmMGv+wEM(o6NtXg?;rz@r1mh?hMNDa1jjdoD8n zN7Gp-E7Vz%)VEA!n{A-3(|xU=chhv1{lW$5n!Mh`+^mB2k|F-fx-}d=$?CV2{ zITz*e{j$)`zi5Ez+vu4~fC+JM4os)??q3blh3Bm|7t+Hq_+EQL&mRjTq66pyd5{s^ z0PBjnKP9?Y@hi~6JtOV%nJn$$`Pz{cowtl&&wAD2Xw9_pM%u!@Woy%iJYRQSyk|=( zl+ozASGhR80|$_$ALH-O`GYo_;@CafYx%DJk#y7Yd`H)JMiQOB97%S5Ya|U%I`rK{ z5#52cnpfsQ>PGIM$B}0xumHDfLiSuCKSB8_qHEwo!Fk-1mG{!0SIWNks>2o9Q$QD} ztYwZlL0;Aj)TZJO=|^du|2_C~2_pbieJgIiu zJJN&Gx9gdClG&P>=dhMJVzjG01<>&|`i>5lwsBIr`-o_xeP;$8-gE-#^^~P_K8@^? zBZ7Om*rW8d<*~F;9(?d*yUl!M&z9gq#^A3~4*nNed>U*{KW{i6d=0+2Yj`Dd zdn^fz6JyX1ZH*P%JA#{#8YjG9Ns%sVX^1G}5!so57-Vu%Q9v42}TH2&I zWd<9#ThZ0Oa-Y)HagYNp`c^s!eVZ(NAD#Z*krc6}j%fdy>F2@`^{E_ml=i|`RL-jo zs~ljq_DK&_`_xWr-xpN_^MK1(*N@{HdRGYhn?u+y`gO3oNrN4lj@__jrPku1>vU{; zdq?4Y;F$Iq4%R@A^nvx^7I3*1`0)AiczMl}!Mc&8;pPl!zzz6^gF~7_Ucg%|<^GW7 zx{c<{XZYVtbN7WbmpKp30lQ!jy{Qd)hBpQp`vo{R=>61pPfzx4Iz6=s-%2OkclBpX zwnXXdZvFpC^riR#&^~l7n{xK*koLW8cxC2t=t?^3W=dPIEuVdOBprMmo~U30L}!KO zo#tecztDR^_#~FwV8C8-!BuP?VV}c=&j&+Z?gdAEUl?pgrw)Iwh)!P-&Oa8MvNa+b z-lp~Eh-WFhV+d#83>DB5MT|-|Hy^6j>s}a5ZD`{LwWIjY~#?%VgcF0Sdx7&vIY4QyBgWD9oaGlpUAEa%_D!3k~_#8qi^Jn zmjmm5Eid)_hWNeEU(E^Vv58uXyw#;AQNi z9Ufl%hU8l#J_Pn=VE3@DePvkHF9xfpi`#?Vkrm9p;mfTF@Mzv>Y42jo>ZRWAO1Ob)c(QXQi$1 zf|ZkckH7yWZKbRWRW5pr<#q2h9{a6^x|XXh^|fH4pA*)Gr)dY{j>d5PM&C)uA8Y9X zZ!ba?D~9P{@fq_4n}vK%VwbVCb<5vJ-|*d@RleGWZqelDA7PA+rn>)|(lWomht|^( zbB}hO&9^qQkTD4TPEN1@yBDl)kl($m)ilWNX|i4ZhJO65 z%k1pajd|&d1@wJ)sZTYSpOMjXWrxbdA1B?gE`j}BX_Q{~OS;oiCTH8bt6W<5VlQpw zQhxSySXt-U)A1#x5wGhGe_OiN;cyKA`LDK02OwUr6VJ?$sUD7F%-cTUnm44dNiA-6 znKri>yZBQ2b-mePbVl-^_w|Ej3}*MccJApscioN*>n2ujqn*XzqMa&N&r4TMPQ=q@ zSJC>xIlf`h`bkJbp$}!OpgD`+M~@xPjNsc?LXU;sw4PLj-{mi%@*Dc1UB5+>%!Sh` zPru237CK6hKUL6L75)*jsm7jY@1SopvhUgcv$X3_`hw{~?1Rlkb5p1INHKiFmbfo9 zU&MTYda%LXJ2{ycMV;5XufaVOn(j7cxIWM)RBZ zh(O7V$?xHNk^o1E5Espjy#O=T`p` z`9DvOJ#-Y@;7`Mx-?@A~i|z3Sez$QS7M#U}_@*a3-Nl{^+ntA}^0b>hm(2TGREKQl zy6{18f@Sd>rxGK)M>KL)aMjbk2u(jp*^KqEOnr@ap2L?VT;rYNc3ZnOJhN?_%%mj%}^O-_`)Xjret#wgU9*;XH9V z5^9GVB>wW@dOH$olhT6w7pAr4nXoOQk7?`G^|s7YUg@rG_Q||c>}1*!(q+?FpOtx5 zZ5)fc6=THEkSvhQY4YP!=zsdpy`ep%zCRt_US?|w`OtSnYYI^u)5CtwS`OowvTpDy z)(e`0D;b-h{qlhiJnC}OWW3_C%~IXmZJqzex^*3bo7Vo`+pKI=eT! zJNxlVTk|mfL)ewEDI0aLo&(8~_C}v4H9Yw<{Z{*Ar?or3J-xoPab`Oet6c3A|GV*I z78w99u@`N`k3FtwM_%V$pxgL8xyQW>O$}qyIDmZl8^-U)u$huyZ4CI`z%$R$pE3OI zC^H$!n3Nl*{KFxC#&dbMZ(|2KkNF&=z803Bqx=t2K6wN7R@KYr_q6ga7tJ!~!0(~n zKT(`n_0zd=@Y-3U$eiGbZspi>lP|@$AkRAGSCLkHvn0cCmVJdLGnn_<#oCb8%I*YLUS^EY50U@n5WXi| z(#2AFw;;&u*=D){zq|S`JuChf-v?cLwt^G5h_u)kbT9m9&sN>lA4`|P&s-`8*qW3c z9{!tfY?p7uwDsh27-C~Ye98Y=z9e*=_amtu zLOxbwedWWk4dQqDexT~yK;a%=PRaXe*ZrndM?LRn>FWn$@)sW{uTqP_eVXU{t*+D5 zbEZfebP2b>eGop(FBzo`mDq-)Yx=x!uV?I-d3;Lkia)=zlXZpF)hhUY!oSOGF?_cr z(@mp#GXvlDt`Xnm2VI`=x261A{#M~n`DXOvi_t?abFXu5zt-H2M*9VuYW#k{ol!el zhgpZsjoSCv@HBZo5YJXQNwwm{oR=M$zmkdt6zf!)^8aL3{>js1q zrPni^(_Ddr#h)c4J^X3*Fe``h^iA(|F=p|L`P}D~eyUA+C)nDC-Tx-|O3yK;Q+W%) z#ZTq`cX6WlWoQ(h*WASVkiJnG#1J;Ai)&t|_HC@ZL1P^LU!?W#fr0rJvTcQ1G)!F1 znvah<7g^=f+2AVpSNZwk zhX-o(i)*5Xjw!xZz8pZ`w5j-{OBVN7f6i>z4&Sbi=DH4tv8?ZPBVnKHqdrRXeWkm- zKhAf`3^XslFV-y@DP}~A-hVj@9VwmQ0w)gnlg7X6Oc@@aeRhURYffXdwdZIoH`TAo zCmI$#sSVZ#xxCSc`u2S7hh`Tl7P#_E(Le21ze#TiztQJse4qMndM}!f=s7hS&4Z@; zDWnDC0fRSeSCnTu59H;$moMKdoLrn}q#tl=^xb9OF4@@l&GNhq?fY*>Y)qV%=W{Xk z)x>Qi5l!>F&-xr$hwNEcywU4Zg+F2pz11bKtJ4!6-=!y~`D_l9uB5+IKm8E#d(>8= zN8x`OZap2mTz@#y!+)+aq;io9GwPEb5%y!dwJDTkr9J;I!$Bj0cZeU{HI-ckOHFk* z;!&^(M$tm!d$qyZJUTsnLz~S{LUVV~+5hJ_q_098E)m@E(GZS*Cmb67H1=z}lsq|% zJVAz^M^5VOV)k{)H_ysG+Mj#u^VU%{*Bdn$b_9IsSw^JP10{!`O2TK-z0NFI<_$_ zKJ4jOv0Z} zYOklApYGkb(r8X39k{sCrHlReVZI;TbGdvY?(S$yyVrGIiw?)U1Dn)(n`^)irCxN? zTX1cZoE!GIeR-a!)04^Px?G&~>&BMR^U~YP>d&-AG!lQU!8#lK4xsmKP#cT4+L&W= zCFV^&MuTLh=!8C3|65zIk(rK?b2o&#W$iZ~pX%-8jIt^DAL=@_DSGx}^%TBFUzum~ zoqi=bIzE zqJ9;Ga`|H~N1xKAyxqa;QaX>AI`8953TQjq?_#Sv*e9?AJ&Tz$a{9FNS+{&kp0i*c zkFi&3>}!)Rl^2;Wb|-VkGv$#=UwKddZ27?by@e6%7qeyS?latH?){s?*6*Bw2DykQ zPBZT1yB=_lySe!CtR_C${lxtG2u7^6latJ`PXk{P+rgRh$wc}#)Za9B^7Az-7a64X zRG!dSs`2loH&j0d9UfzL24`8el8v)>RLdD{d&0B#Lyu4}&jl**4i z#D23;Z+B7}y(?bDxjwnH{8Znq-?a6344VY;WMVONG06<%!#aIy!{=W261qSY7yfwrvgi*3>TB9g@zA=- zi|PAcj1TBT^&NJL4fqj8^SXGPwLg_peBOA!$?tcdTzuS#|MPdMcjI+LVLd&ZZ6gki{a%FbwO@3wFT3Qd z@ZjkUy0`UE=^zFCj+GW$m(dP(y%u83wdmcl?yxV~up=Efc&pwuw7DC4_3Ns0Jsj8o ztxqfSIO{JL_T77ZS(W*en>63kM^z4MpX-T3+q|?e`78YvUa{jgm)c}M>AOeuum?wb zcf09#-_D$mGcF%OC z(z~sldaq0G&Ug1~58po(u07PwYfHygykVJ(X&)A}Bzk}VbcWJZ+I2H5Xa4Wj=Q@a=wqA=&twCXRx(@Iy_%J>W@#sx8mtGw+wlwvk_izebD5Z z#T#0$l1(^%`Hs%`4Ldv6Okb~>?}mx>{fEGaO&WRY?a#yv;W^a1O{cN8G{}nOk`c&7 z>qor@xn_;mT+Q0u@9|k`4*7~RvEUuj`L(d9ERQ?M!XaCT#ZNPUp{JnDPg?yYPc^eljIEdRyUh9pdQBTp7J3t^PmOA!^=R2 zeHuqDKFj_l$GSnl*-w|FW8V+W#7}m{FU)nWVJ&?fx=y%XB<%l#_rw{O8~Q#id?-Km z^>)GDI?P@deyhEOt%{v}%|K&%YaicrC!T|3%$e#K>9wb;LB@pb4cBMJTSD5X@7;{r zYBbSmaz3px;7P;j#gDk;lJSuC+x>p#rG37y$_GCD6#ZiSWbm*rOZTX+l6l{kQ+;;r z`k8HL=(F!z86N&=v9LW|e>d9yFs|~56TMzzmK$ZQNWLNcn{KVL_D4UZ+2_<<{Um2< z;oqV90-%CM+JVbtzUrAlKRVAc&3KcSJZONi-OGoA`<18uz5<>pZ%GZG8l4ZJafGsG z^wEs^rnNo%c5rxFxs<8jR_4e=UoZ+T(I<5UWn|GV{|x;tp^sLuPH279yVK~;#+=^U zSRV_=NPH@Q3i{wYRp@I@a35v7S-u>^`naEGJ7Z|_Cjk~ul_$Ch=_T!J`gP;M|Mid` ztIVJ0ENhUbHQvxKi6Fb@jGifz^N#mCULS|L_Keq`d-pt9VC_?N(I$hn@NhVGvUiVf z)~5P5Xi;f{&9o=)c^zG&opYkn#1Y7|DW`)NBQGVjc2i?5@QpT)oTogBS7iP`PkH?! zco%i1Bi(V*{4cOOoBSx;htGoI?rS~ojiLXAmC2g_A2gJCHDzAG9{c%WnFBM*)E@f= zzaLM>kM9e4a36FV>024bNaf>^e>~hxS@T zI|fTV4&WmXDNSP>K>A{~Lr3bI0e2A9JyZKt-p`BZTSCeW6jd~9e>F|#*p4ZNPA1F?9+S@pFjL| zBOK$S(583vYf|?HUj^-Bm9K*7Ljk;t@1*3;tSYg!=trYxVjTZeFe`67jqXKkuBJ5p zROG5YD7c^}=u~M$qjj0<=`vaBffheN8&`WeSh70u<2-V`+Sr)h#fMf>f4qXXQYFng zJ$Y#>a-R9r2y}dJ$UmRL{{k44H?I04dLHod09msD`DkM?*u`4O} zgC6EF>JfazW)0(ye*4K#MorBR8_$#Z(8LgD%3N3e@OPgo-}BukBRM7=qK$Y*!c{3Q zUSc20rpart9n66)h$!67xDD^sZ3mBxtNo3(gVH*9uHBD=%pcSGPOKigD#V|JFMp(Z z;y2=tNqghFhdNqAInEet@;mZTXdU+B1+W+|LbHZ%`jebqhU(tc|DUd}_a}WBrFZCP z)c1AOXZ_!xSDkE06rc^X1+D@I17aU>=LN@B3xHX~&Pu z#cHgBgl7&e4dIu7mTaJHVUHBaMN#-4iMZan$DXb+RSW07U(*|eD!5v8*_3aXtL3!+#>J3ht#5Hlm8Nyb z%i`9n{hhY{L}hdTk$lopKlSfZIp4p6O?s33!V=$`{Eo^HoE~Q4ZSyTPK6yrO3y*o& znqIpjvviZU#f9k}Rk~movg;G1yIHC6)2U+X6^?EQ&jlE?HqF*MM|}3h@UWhlH_LXH zKyEf8H(NqnC%x|UcY~o^su|z>rZENYbpz;#jGj(=e2R(T8qc-!&1o!LFg`X<;&N5AaTTzZ+(@okCS(~SAdHQE1VHXrt9_6GfXo--Z%z{k%9-FtL~-yks) zXKNiJvUdcl_M8>3sto3>1GHiJ*flV8jy;m|DNj1Q^1s2Cg?yMDtoCJ1E2n3w9ANyM z;H9kDW5@(}a+c&*IgE)p_D$;2@AJr0<1_K#3|{m7|IMiXHzHp*B3pCVO8cONL1gHF z_QNA*&*NWc@g(&e+!_@r|#;(6|cf-rb2H+cRx)yi_OE-l&s?B+uY^*5lB>f!| zLrNF)A#-l?X)eJ|i5!A0`M%44N50x6xmURXnS3n#?JSO-;(%~GEpg2qddR!ki-E0K z_DAq^O@$E&-OR?RhOuZsWtB%5Z#j=jYaaG3=hwK{N5bCFiJ^-2I~}8Q8@o6bhx|Pn>pAOtloDkm+ z(#zEb)}dC;T$`F&mwI?eX%ve&%-4^L(8-D|WI^zGH&;Q_;g_R&Z#h2wBxh)!Wh z(YH1eHQ)*#Tx8(TvW{>J=D_sQK9Bd*MsL$=k8GuL*=x^O+#1>=n0K0vT=eBOagGd> zNG!?FUJuQV;@@ZT@8U|@wbr1K`+0{xqpR;`*V4DswXT~U-*t|q+2(acbi#zvR_}A8 zdJn9NB7Kl~kl7rISNQQ&a-8p**wZna`zr31SAO`&uov|mei$v6zMN+47!_SJKiUsm z%gQPrx>a4GRl7s0_R#+I{G7B~s5HgEx5u>*SQ7tY%g6kKwbjwC{{OsBJk)is+aL9T zz7v~deQ`Ak*rv%z>CVOfLO-NE?q=xEFR8vp{h7GPU6sw&Z%Ni6DOlay}+&J%z6Dz@H>WlUsD+bFFdm*gT&)($hpY6w8tIu;Z$jpYmfccp^IYQ z*?E!nGxWci^~BA#pTY1~c?UA?9n#I7%f71S$HwR#@}aq@HqFL1fIkRxvLh`e=3CQb z-{r{3xBGTid!aqf#SlEJK5lU{t*+9b|33C1Wa&mv17oBrajt}=?Py4Qb@=_iz)SRL zE)ZsD6uvmdoSyU&^u!T_uyLQ$HeB>Z}f_|?!h0C=fDxl_Vd^{@_{~B zFWSI{F^LUB^QiSoYjjYzVLWPWZM0!97ObkQwtnqq4iRH5X}w}#5Ti0>zZ1^6mw1vc|=i zjJj6wK&8k03Ysa`Y`E5D;FOM2xe$5ZtvSb$mYLuAw!(O5wOi3P&Yq!nQ~p|)rhSRA zzvcO&kOtlcOjWmE<>|x(pw+pea3VQMJIg`{oiY_#YE!OOZOTOmyJm76oc>oZH zK6IXi_&%ZZ$fKWI%ub#qtBT(T{^M>m^-e#REk5CS71?V#DR}79ct}~d^s--3&t+sa z&xyrp_YT$19@0U|T2S}~dEv>_Tkt94qRd52$mKHeAoY9I9mYfRNt-G+gJ0QCsHLm_ z?GG8hk~gHGD^-uuQN}#wEzJ$>EtGto^!)}Gn% zFAe9jw0n{2gC>THTYaoJ&HI!Fz8p2156I!Y z$brw7`34QnHu}y@vp)?89+gcWw5bn-bHSMX9(|HwziaI5!fKb~EB6Lz&t$U(t!KMibkiOM{5Fz+|< zlHQeWM*n&rdvO;LGi^a_byMGPwlyEFB{8-r?k+aVSmoWaOCD+_X6}^{?1EeMq8pgJ z%ic8k&y0n$;D=7VpFR#gYH1qB!4Mbo8_S~~+JUD%{B}X~jlCr6GqGPzs?OMDJDFy= z1&pEV&sPS0eSzK!zshg0M6gn}ez%T#y-~RCw6(io8xy9bjph;9NSVkXnQ7~Gwabq` z0X>WCw=u4AlxJ|HG#8^6EE#qe>RI}>?)5Qjp&tv2=*vZPW$lrHrn;c1<_7xst*G4* zj`giA9NPplbPioivxyDRzi>Qo(7(DbWuK@0zC~+~FIDxdITUlcmyPAcoU1Xm(Q!Yg z`_fLch3-)a=;=qGmr>@yf8%=fd&Rh?@xl$^x_i#!7<*`ozNf|=QkQ(YJg%@uZ_sbX zRFkF5J)(4`>vP_%;$QU?ZdNLEr$_oaWbe>>8ulveHVMiC`w&Ym>_@)oH*<4;ZRzVE z?V>23efvX`+w+xQW!XFQM_t{Qnfx?(+!MY&rPH2G*-T=@+)UQIZh>8;r|=%1uZg&N z?jOzWKU;4KUj(+V_&!e6!gEm2^Ytz0+-vjxR1Mp4*WQ%$e|yh!VY{B{ay+GH@MQg% z8uoZodR{D0-opDl&SIZ5+p_h$)^b9<_~**sSbj1bbM$WPLeAe9mo0g(#gvGpu?6v5 zIOO{!b)}zkwa)VWqqJk)VIKN8;7{*Vho_G(Yzb{X{!DY$hpVhJ%U)W=eo(j@SpIY( zrx?W0@VlVFnQPbAt1N7cE3o?|QaP9C%%a;O-DqzjVC}T#M?dsq0RD-NbTiwVB*@(OPZ#p^i8!|%v2nQ{lU(c`mJgIN7orW<*{^#vs-;S#< zvE!_uZ`)nok4`ke=+gqD%0Z6(NO$OF+WNPr zz0W^BjrKyCdl>Yvt* zw9-v|yJc%b8`DZ3_QPX(7Hp07w(0%wKc1i2POU*l?Ni@?Q)05<`?Jf_89cwp%@{X4 zJ={7N!66?K!5|+J#+vk+v#d!oZp8ao!$@;}aI^aY>x%8ngPMt9tk}o?teRo3qhpgw z!qf9J>?y_WU_6k*Y-?>xNJb%(M!XzTJ$esZ^L1yuuqzqLo9O(SaQXHuV`rbdxZ|}gipFzi|nm(-kI=id3cA8 zxt{UocEJ+dgl-_*k4$V2)_IsXKS1X)ZI&&QG#iPv3qSN`11wzp9xR?>J!6!0$R6^3 zgRx9!EiH7hYQ@{{BD)rL5XEt4-!|o!CvNASk{v|nF=Ml9W-XU_!jWF;-l6(bM?LRx z=vJ_@)?6-pb}LOIW|jU&cY@DpL$7>4i-(=Jck*88^*#Kyjrqd*;)&_s%ZH`2(6?zk*j;9g zTQpDxm!gX?;nXxYqf^rz8~q}%K~M^`yV>OD3uE*d^4qt2*9#}rX4dWON*(ue#`1xQ z0lg^Gf4Tx}JK%gHG%x_KDyD>Z!t{sW3i^ciN~ia_(352LPwmptO@2X?EAF*ga5HsG!LnHI&{wFLI8(G8J;LN2{Ib0;FwGaw z(+y=QZBz#Irm^`SgZEMYfrC5rEt1!D9@|fUesE%Y8T>%|*F(F*McP^6cQ8tSkf*$N zV#H+2T@yQ?@tx&6C-w!8P|ufCqR|!O1^9vEZ20AgSV_iKirZd!nfckJY5PXUwQz&w-05U76 z*!v4A&;$LPA;vGsu;H%b`DvfFxSPF0Q)w3kz|XjC7rq!7^g(MAdadv-f0o&m<)mo| z(-bHxY%_YZ^tb;Rd?PFySamHUCcW;g6YbO;9m_8Gyhjh0zL*!^_8>3&id)aqAIMOB zW2~FjSBy!_>&K+G)XzK)(pGf+zot-^o_R+f*W7RcHgDN=6xV1D_r=_2aZhnK9;UtR z8h?F$#@pS#=)Rl6*vSi%tMOMcY`|lF?7i9R2+POe&Vsv4?F{hr2VC zj%0|=o#NZqXfOS|<}&vc=o`=7lNwdW3Huvmutlzq~2p8P1R@vOI zvO3QAI?8dM1-akiuvZlxX{cjeLmjvIbma`Wu@^F*OzTf?b=ITq%806n{4;(_S3niy9MvcogPjD?1*X3xAAgZ`XZiGb4{a*C3PpH)x?T z{+p+j&uj?w*5hG({9G6lf1vshYr$F@KF@lvV#jrTM*jMH)4?s^qs-iE7r0wg%QwaM zbtoobe0Ve)#&JoyTs@8pk_0#p+;<$iPC_uE+ccMMVeJ7qSAN`Wh~m3c=pSUk3!T?u z7h{Yqah^Q(xD~E>W4`oZVz6C!cSoFgj`n6UrcuYfZ2WSYZ%@_1I%~a-BxPI_*1`Tr zXt)V`o3GTu|4AA%Nvt#r4o&o(Qsd|*l!`h3CfA}fa|XElsN4Eo9g(8YK8`+M}; z)96lrhraT+$dqrQFFne9;XD3ZO7I@WU;ospP|v*^93BhO$Wq~#*y7Z^zkJWcL1f%L zj0Hy-GXi+yScNo|JoV=I8~0;}^6~AnRmA~{bm6-vYUK}4oZ$UQu?;wj^xcB`ku`hM zpG_CldcW5HvAdZMfY$x-(GM8gD@W+hM7a z2I#8_d{o&(o%AE}#^h9RmS_A`0mqFkq?`ly)%0Aa&Bt|?D7GWoSw3*@>8M@$uICc` z3QY`DZsr*YB^|QrTn?Ksy5gT$->SUQjr<+(X&EPt7tt%s7Erm#m!ov()dp9EvXn;` zJZ|Yrzz(1({0Nh(Cm23|J%Xojo9DMzrKjbcrM%SJ0^L5Pdi7g%82n*<$as7AYwJMA zQ(lCIZx6N=%6&$BQM!+|j!c{`uI0XW;uJg-i+#EIqM$?r((ZSHFZ2FSC(fXQ+ygy5 zu5yaExkQn6y9ad^=50C7_UzC)CS@ctRpOp4s?~G`iu$iixw7x*sxG7*ykpJMmDhP# z#vXwOqVEp=<-4U#<8!&$KNp|zcf-RO^55ovSNmK}X@q~$Slf~}g>A%^L>r%1{}gBg z`UVC9*3Ta_zD~r(vB}eR5a|2No+rO5y{TN77%laYUOqf(`&|>`WBb58Wkr2Gb_HeL z;BwNPuuU@j;rtV4yx#0$S;odO>Z5FI-ns0OMc&Sat3_{6zbr zGVwz>TzMA-<@&N?hhDagZK^Bv1Z{lQ#WF8WPL4fjZER`6Pj|@^^)?z!Hnh?3TiI=C zo82&Y?^j9F+9^7J!rBR(c0FTqb(WsdBe7pj1bPmD+x%sLQ&%4`^7}Ts)-}MiPJ4US z?Z`5BTc~g3OGC3kIh<379xLD&+A|mfXlHEP<%*vK7xb?#^oP@mXBnK7vqg6n9{95W zd$MSyl;QhbCR4|uja0E8+L@KCHC;$NzwdK~+N>|+lDmDp+~Ow6+|1YlAGk&D&$)%Q zl}&x5d&bwpT;I!&+d_QL`f9E&KRjJ_t8CNJcX~QwGj#*4GDh-Ub0%HTSmU?l`c{YG zv04bj$(2pZcXo_@AKaYf?_r-8zRamlBHCWI(%W^!HzAMAvbym3&^!9-@4~*aI%8j~ zb(EWEKbOIa4OGvUtV_GrFkW!sCa+&Z7e>2FcKSWehC|XC4xjO5kS4ACW$8}fw9*8u zH+!C0GVaezskdzgera2xR3SZZf@AX6Y98;tY?I;OTvrv()>3;zyF*>gw=u*4JQ%k5 zXKFL^#M6=^(K?T-7(dRHJSp#=7%e_XnmZ;=+k6dLk}U^fn-!e#xD*Y6zxPYds9f-3 zmt-!q_H+FR$L)K{e?IY0`OhYfGv4CcJ@F*t`g7Q*o@UOHD43;`#D`9DF2)yfO>=g3 z$hKL05gH%ouf`wkEbTOS#*y*k;vLOfbU`;MWFqm!*fRlrbS;{EsZ!;A$**a^L)TVH z@Bn-WT$^LH_N?{8R-YdmNkllH0WZRCO(Od*D#}p>^Z4#S7hQmA15;zjyJC zJQ}m~uB-p{fobw9=l79X8N%li@IGbfjB&T6LH3m<4l94u53w(ryqKeRr8woI2WYI( zr9KF9yr-NBcrPdHwWAHjgMvkH0n3>guvp5{LZ5!DMj5;Kdk}c8fVSRl@R&VE_*E+5 zmqsTvPokecBe`dDrUTG)yKud;gZPFoRrVX+(#iv_uc}nwfrVDy8_$DlS}+6GWy5t! zV`uSM+C&UoE9;qX{c<^QZsmQJzn91LO65@**bPUS@0i_C@7!jOYvCQ5Kde_XaBb~Y zpMvYpmiv^#%V*(Bbyk2&FchKlm&Gmlbyd@(J;Wb)G2GJE(yR3iJU&$U1m7O!??(PE zH=NDVH|%K5`W?wGVzJq^80i>(Z)yBq2<={}oqoK6*G^+sIR#HS*%ax!*@~5nyh%oU zMEz^U`@l0lQvn}$Oq^1lh);vHK5xXAq<@w8lCk8N_*QdK@i6*Yr(iPoxi%y$;;=*T_>Z9K^Pon8itP8KuoZ(_dJ)MtG{Jgj#77bo~aI_S;roBcgi27dM@ z1vzjcobB@O!#zv0Gw9{YE8h0BI{DLBjk)A*`VhDTt1e*8=pJ|&Q@}_Jp~F zrgHpcVB9ld>rTR}u1KHb@YE?7cLU=g|9u*a4ZT<;p9eloJOyvXMndxG=x z$fI;huXbf; zJ2y$L5YPFUlO0`sp26k z>@&cqe%08+C4G#xbu^_}dwbxyr9q5 zhWOkc_Bn7brrXsIu`>qqLc=Hc5^k1^d)}jt&#FxE6787h}F?{H@0xUGK= zDW6@$inlRmv^}eDTD!OVaCj$?{pRj%UZWe$21Cr$MjNSgi0WbH9@x^bk^CiN=t69q zaoW}l-L?c<=+g&%e}VUQY{%!Zr~S95Lwnjddjk$e_E(i_ss$(;WL?u#Y=FYP@@O^**;fGcUG}=T`-H@qT`6FVF4TKc8ud-5C_PFR-+W zSs&d#<&(dh^G@#URlB6y1ncfxAK6B=w}yVI`{f6HclHU_nR`heo-4vSO@Xs8wdOgZ z_Ue1Qmd?@#dHQsl(xvj)1D6|Lp^xr^Ru3LiJC#;>0|mS$y;qzIrxp#Quo$@~&V{{pFL- z)A#m{Q(2cIIzx5bLc^>0o-4eml%4ua)h4@}YfOTJ;5wE>k+8fFKR@)N`f0pr+VNEKEC9%WHt-rYY zp^dm4xC(x(Pjx zjU$J{IR`_c^@G0qe)wp!wGW*N{VRjdP0BIW(9R~M0p11r?cNyHTS<2m%ASVdJ4@s1 zLwDI_?fR+Z%Xwb*`D$(MIQjhd7lZudbM#ZVh8V$dARp3$&RsD-D&d&@YCWtgw^*4~ zbVT_r9XLAL#kuiDBcqICVVoI#V{M{-W^y#%2>!ymI9s~Oy*@eW*D)Cz3`eP(JkE4} z2RgE+hf&{eYL{rs<7xkR2;UjtvvtU1-u)-7J5o=x@Q;uC67HYUc}8kqVPx+K!QGw@ z&%e`oU|$A~8~2_n+yp-lpc_?O6Mp;}Pc|wKW7L(_RyX-eotvWaD3{Ol59a{tUbuX3 zP4{HZ{kHCfN4)($wYlDBmsUXKK1i@pqn20I##XVJBywgW}UT?De$SUCjneji6P3-~kt=Om1qi?}gCQGG{)oIz&;GbO|(%?zeBb@;n ztDys>b$%~&>2;*fS$u(R*3%S6M(3+>9^0Kg;3d&{?cRqJ*O0yREjquXvI$*xNVRf@ zo7q#DY`c-OQFrg`jDMomxo-O2x;nkY8K1lQKYF%t+)+7E`vn(8YTvu@Sz9xD1MngD zo~&F$I*k>;#n`ZdecfrsiVR~$H)BVS`j@tcu?au2Eo`&JtD}uRM$V^b+cEUNQKxe# zPVx5;f5%PlLvGlabKnQrk?6d5?{W4$)+%Y>p-+%;_rg2YmQtUfWG>)BnfZ3_mt5&5 z?d2g~<-!;qoS&&PQ?ku_Pn7Szqh*YIg&*y$btac@O^tgVE%jP)t~B4@*SwScgy~uT zNPBxs@0`CS?^fequ=?*ulp=QfmX6qPSohOjUql~D;3HXU9rt@3icp;PUhBNa)gA7F zF-8F9nZ$p_216TdO}+QdoIRsI2CMI6eIFULz^#qe*U^o)qC@7?U%{F?6_262%sZV4 zDtxF-MU&>>j?mZbRr8|(?wG*GB|oCIQRcD4^Z$z{4L)(MO^lRSmr!~5l*aHuSzoQX z>q^8Uf%jUFy)Edb&kG*L(JcDLb?DF|!rQX6OUO5&Fts0br0^ET=1r3?tqGj>Jt^Bh z$EE6@slE0WtO)wU{?MM=us_%*lF)g)^vjaMy?Y;`Pqv^#_o+VwbLK1L@%^%;%zMEk zcyxE+T9o26;A_-O>=vz8eUsToM=4<`V4%qtnCDypy=|`3TYaAMt%sDVah_8??mjEH zq5TvvwKc%M{w_d| z+3d&LCFAb@=Iwpp=<$DyRLyQZ%K1`NJ4<2EE~y0o28LY>3`($dy!^R|Mx zEloktmbRu#qxbuJ&b_0NYz%F>uRb69-nsYObDs13KhJs2IXl7qBl+v5UjoOk!9&VD zok%X+zLGO;*D!|4LF28ZkblsyHRrCdKK%`C9C$hH+=;g2U`v0XJ@axol@UG+QFK`zQJUKnh zH+lJA!Aa)PPEWt2Zv}&WOJ1eb&ALxLV_r~pJ>fcA)|hP{X20I!^|r%?whu>bYj6Go zR;KuJI@xM%ht7?*Wk2KF3h=*F*4k8Aa0?&&59B~NIf7q)WYzOF=ekHfiSVhi$;;xp zyf0?_Ha`7Q)NWY1*G;HAYoZ_0J^eon?>*8v;qKROqa$Z>d77n(mBFtw-ygDXXiMW+ zcS ziH4w4^sVHOe!mD$Y>j24v*!M9g9F}BJpp`C=dlsLe^(*O8z)Yw^PRMQ_R}hBy19OC z?H`}ev&Qp=(DfbsBxujzLcA&3aJHT35=`yt;+!MFye0Va7M&N_ z0gjtW-Ck$nuWMhf`CJ!seLq*zz?5I0_Qa!ETW@i&L-#m0vRE%a_KwTr+16-3f2_ zG1Hy!z*f;%u=QPme2qoQGH7r>qQgr*sQiP z9f@1Y>{(^yc|KD*&|XZ~^Z0lj_LJwmxb;scwlFTAgpr7xm| z;HN+P!{-eC3HbQPQi4hzmP5yA^O0HK$FK-~wZncX2LG7*z+1v^IGh7Nd{w?5D9fDU^Y-Y-S6T{UtJjI;S zLhuSLgrmaGdAiP`g=nBLiq0*k9DLlYF+u)G{J5cCIi|8b_q*fp^JCEFxNueeE_GJ< z{ir)$c!_=&h$r^3zRmWIoAEVg@!``x76G4mzw_*PS}#29<7tuZXD)+vEQdn)BbJ2| z#xvr#2i*zD9DZ#x@|P$t^zk#~+31j;n^RA|Qp=?KFyolxCSQE7z6nqCZNKpV&lG2C zodA#M7RILdZp4AEKxZ#@3l%d*_avZoODV+e(*I?-x-IB78IgV{`b@LcM~-I^BFoC{IN{XuG-_9W^7n{ z`9gR*tGbct(=*>R!lnL+=E95Bb=-ZQ^Rtdr@d?4xvzb&djkb=~Of!!K?xDwH!Z~`5 zoJIN@(Z{|QZPahZCitqR7wI2o*nhrH@9A%QaS1pe&Rsa|n&$Rb-?k6Ci>%-I-ORBu zj>}(iJnZv+y4ES-^V+ycF?fxs!0o&1<0tihF!IwGM;TptMn5kskoS=Pj^{t&-r)Hz zxZ-(TM!q=*PjP?Vj*Lhq!bnEQnSnnZ6Rk^w@F@5!??Ofv(RcjSLdDCf{58cPgO@B$ z{1W&y`&j2qkM9%0v*2xfE*TJC87<%|qenU7l@Ak3V9ki=&VHGu&&AsjzUzExw67Y? z*OdQ;@kQX4wCrY$Gz*-$GD_>sa=(WA1zh{uciVgv=kka*G`5utdAW^X{W@o)m)`HKZnCcp?%?97ceST$; z^|!`j%r9G?B_olX2u|ZKco4n#$lUjOm**dF2Jm7VJa$0s^Td{?1NBi|v{ z=hV&rKk}XMZ?K8?pow@2+%GhJDV`y=4NrDPG!bq3h&Ntal=WKR(2Gp66=6Fte6# zg?{I^A%kPc-G#)s8QXPC;(y}XGfr-n9w(=yBY44l+SlOet;?QcyR1(&tuCvcu`S9E zc-iHM52vFsBI7{CaM!ES9_V?MSvgH$ACuFCvB}S)7r<@KO>0{W%?*5hfHM)9|r! z{e7gDnk}A#pD=j9tr{%3MQdMif#R^qCAMG6BIcz3D6=>?iOn-U5-f3B*wvGbZ6O;L zi6mxtuCjmBSXOi??L$YhUu)qe+137RnK&MOc>>-&UhhlPpYldz>S}NI@NF){MoAZW zKWs^)ljOhhT(YS8%O_2?9)qusm*_k2-G`hsYi>g}S#ul2>00F@S<9SuNnZC_d@Itu_}-`0|5*2;^G~ZzlS$^s=fuK$1;6^FzNk;Y_!Q@oXdjk#jl=W! z3wh-jYaD*ua<|_QFNP<1egkW=>2r89<*xJngjXEjq}3+=w*BSH%y%AUZo@F^96UeC z8V%@Xc`rtHXcsd6yqmd=VWS^#m$)~&^IZK1Cx}gJo?{}NJ*%wB#N{d5a-WBXXOr}4 zQZSe;kuNy@xte@?>7#mE;(N7;eoCa7V;lE0Xvz7QL_X3B?PGOWO@{3ICYoyA&SZi9 z4CdX?V9{mPK1JL$&se^ABD<9MtomA9E8P`*8b0bEp06>)@yrvhuY87k{3eyD^cf$A zF&*{H;F9hZuD{2e@>4uhoSu0F{MJlz(&izw2lnBfL$}%dUukz)c`iYCDP`eT)x(^_ z@rL`y8t!W|_l&10uR1kHq3`sk-{-nUZSIKXK4#WF-tPO%Sh^2gc|Y@+Et*FrKCoEz zpf|0)_G`SHkTYrWSa`wW@!Ge1dBeQ-Yx<^CUuXBnuZnK=jJYYh`Z>3B45x?dKRp}4 zRiATf&p|)tLXqd2u?O%I`tJeeuNvwD-~FY}|Jk$XzrOsGOXXjug{R0vWUWqeNv&IP zq+}<#8{3fIz*X@HI~5ZkPS1FmaSBZy~bn8Khi&)y8+DMy~xa`Bi-{5 ze$9>GhrjS)a_Dc;9rs7U(+=Bbp+zbv`T{oQ57z+G3?S;+Q zOu3FJozaG`kt$r}>uMeIexcyfla5>zj{;s~Dbq9b^&JMM;EP}sya3e%teOwKARI>K zXTDFU9$@OohxiOd_PcIIM^w-eXY|H$>#R?F)2`pNxjJTo?w4@x6L7Ry0bw&()f2-v`h<8QP#vHTiVLzW4ruT-zJvu(Ea*Smchb#7m z*maF*E!Rwap4zmaj5!aq<>r~R>)fah2G zt_M9s$7>Bdm!`kwOA0rclpEpwXybeI3$Xyc#oz21`px#nca;^)gQm&#xWVI@I7k$q zo&H~Lm_0#K*l$Kz%InbI#hndwxKDIwfQ8@SNboETsc$Yk@QS^MH+uC>WmNwxn4&V| zvl!j+S(Ue!kzPe#Y2A0nY})PWn=7X#qdE5!gB|59*k2#>_V`iXHu`Hn{^ZV_Kg;jb zAr+XtkDB4}>oFcB<0jY8KmRm^@mrQnMmp-0$=FwsmyY$FZpr(HHhz%)SFvUIB34gu z&U(JZ_tZn#!hjDOLy%3Vq68FKtCT}z*zYRZ3-^E3WjzxexRZFTRX)ZICf zZH?@GY4=of_!sEN4BxYtw2I|_5M8%L^V2!T*610|w~#Hl9~`#X?|qRy++p^xnOHYt zg0%KBTaM51oaz$&JdM5XwrBLo=g0Q|%5NN515*SN*vUgH`01v2as@v6@Jem%k$RI38ng9>}{?=1ux$}xoX^uD9cmBY6E!r_QN6mL5Qjr&|}k8GRI*EvS) z^RVXo`?L5?E&S8I>K)kfXr5|Nbm_-`SPx!4K%WP&6WUibi2c1~-|+Ot{};c1ecAI~ z#!3etY?iGz+2nh0r+9_c^@|6mpEJi(bGkEZlN#hqx*LDw-}7>JF1+|;qPC5jr}hCc|tl{sPRl8a;{Y-e>-)3amulm#v7$C z?QUMr9`L2Rrk0oPo=Uy{Pyga1=a~fT|2=??a}~;0#z<8E+B;8ypPvEl^?Bxv9e>D6 ztFFae`rq>97U^0X(*N*TFZrRY1xV~2?P4!(SH6L~uP8^W0>#mte;wo)|6lEfRlaq? zpTUZLAJlKjC2g3@=VxMtNyPy8_WKp6RrwkI{Ve+UW7r&GkV*U$&$qU(^ML9RU+da4 zR6A3r1^6m@iIVLY(R*y^96j{-Yv(M_{I|+i@bfQDyG2?fRz&A%Op0)QfMI-Tc*uD29&)YZI{)fn9P5umP#>JbxMJQBNZYuVXvswBrZ}m$r zr^V;+^q}RdVpp}-Bz)Pv^2;u`WZ1o9Wzhw}AGyxTr9w!pEpa^8#rZieC4N?YInkDQ z^nmwowl(CQct57$%s&^f7NS{u=IAeb6*MBoE|`kHV7Wx*aVEZO>(v&hOyVC@|5#fh z+}>55n0_PiD;{?V#^UrpQJxh3j>}fAPfUVi`gK0PKsX|=HS!5=H2Eif)1|hMQ`zk$ zEgRfBxo+TU;~MgnO=qxY@bY$I-JG9xhWGF1z1fghr?3}xJ7YL|R+@FD+H>1ff8!Xg zz2gi4K+oS@NVq1pIL`+6j;&NZitF+InJn?Y z;NI;k*OsAsVJtg%wR?Yj-(#l{-c2IEQp( zGyZw!MB+a~_kq@2;y>w%{y)t3`x|r!J?;)Mhm`MmlzD_l zWmCzcIO@Wls=KY{xVy#r!n{(o%3gF2x;@sH3HlcI=P3QDas=#gx4)s%@UD3tYvU;KsRx)Ne9+|tx9|==b=FUR=LGmV?sn1V zTZrpy=l*a|+_jQ?wl&oy)cYvgH?aPUJ%jkg?}LXX=>K?Q|M|U#=Z6%-t3N*q&rm<| z(^MADd9QNy_htXSd@t`pV5ztX)z7?v_$|~uc4DXm{?3ha_a1vE*pIrM2+^hX`%&g# z$gN1O@wues0`*mxZzG?Ryurpk4VX-Kf(_f4_=_)x1tA5AWZ!_jDn@cQUwP`^w<}J=ud@`rOOu@(}eSV+H2x{hZEN zn>*Rj6_OjPcwjg-{Tlzy@b8WA=IK`p%n27>*?Ss3IKuu=E7uLVAfmwm?cd4y>@Ss} zhWJRhY@|E4a!hiEb8K1#dWB-g+)-ag^p zZL|=sz(ckGpF9}RVr@hVVtdjj9yicp7qmcMhBr0P;@0U`>FZfIkM)`Q9P>ql_akqC z_jd3*ejdD!p9k+pl@#$Z|OK<{NzFIouu53i`TddpvPf& zVh7(G2F`aI-FUY4X{S8zcSL$|n_%zh16Q91SJ2G(R{RSdMIZCOp7OW?-^av<;jP4> z$#V|J7*mWf7km?Khmq~f8LS85J!1{l`kdz8ld6&ZTz;E;X037lW78Az0qXh8&po0t zjrq*Nfyw&N-tS9BFJ9sPv*c8KV0?qFEx=DE&*))z?iP4%r^&YLOw4z(vlHGnRk1lH z=i*h#`Eg`C;w{z~n4cs5nuVWOu7xM?gDf5?oEEhBsNhJru{!T_quA?F)ytSnv^pkO zvDGQ+oWa|z;H}Z;i1-fr>=(Vt%tNq8oablg7W^eNI!d0N;8+KJcBt(WZSFbfvxEHj zazvlc&<^?Vb^0*RR-im^9HHOiRlWj_|2;M_jBKKGyzFyq6Ftu!hR1FZ)UjRGJ$89( zGM(1C??aO3x^DC9AY^|xoBaicqKEV$ec_<-IWmq9LF{5izHbF5Mob>y-0lf&ZgDX6z|aOz%);C01qcK4|X-Sfo(8Idg5Dazqx4 zW?RQtgTF2ED}h7p5Zl<9%FCWjfO=v11OPW7sVX#Fw9AtucJ((2?GD z^mgU%i^ij49>4Cxt~0!M`b>}>W-Kb1tZCdeubR?$l(^uS&SQpOc^~S=%0O zpEA7d1#jTD@R7aGqVL9*ZFFtuyX)(H{Z7=^v3~Pa)eo!V{5093x)l$qM)nr_Jc_Q| zimu#3yvY06=*4QI&YVDJf^Wm8U_I`}tS!-o-}tQ3Nu%sZ(kC3{Z-i&SS9XNHUdX$$ z+Zk?0X5jm}ony^-IE>$epMf6Qf=<|_wc)|*-VY3!vql$>>5K3qrX#I>)r;MKr?rFb zh)&{w`)HSMjwC&l{ zS?kt(k8DzKhBfZ2p%dr1c>EM>KYXRDOZtXHh*1;ltHYJckg=pI@>Y{wP@nX>sQo2$#y4|En!BR#J6Y4*TxqrW&P()+Z;9fW&b~;$sl)u= zxDI_^`WEdiAV!J)flrka*TEje?aTu=73UGZ$tdUeo8Q+S%=X>z0nLpJRBmw1iQzrj zqTgfSakZm%m&hqWn>bY-sxGk}VcCYkv3$1DPC=uS~(51-U zC#qL%whm)^nWHFu$LM$g^U>s;NBMP(EA>5kKzo-oS1w}zx}}``xd`5%FX~?-t&5Aj zje=*|$!BUVJmG2EScZ4aiS&VNaihiPj;Vg5D=|l-Wy9P+={&JiPuGtvxA}tI<;>YR zTzlDTI?m79dqVBl-+AJ%@?GSsD9&m=0di+oV6!U~_;!Cbp8u;U4yw4Po7m6U>Jyp+ z^s&!4CaU;o!@B+U95R_3B+fdyKdd1eO>174~<%m>g;L zC$hD$y_QQg#v8Xhhp)w->Z#<6b|26jQe_<3-DonWob*&&hBn?8t|kulOKzL=isZ3K zS?EM;{ZAVGmchgd!-LJ=woSNIqEGQV!1NSB(xYSD!Iy!FK!nyy29*O{YNLn`7}r_& z^Ea)N-3YeSv^V6+%Un?EWG#R1^mO7z`o;K&z0+&SRoJDgfNO_qUd?(=_RMG!O=OGk z5&lAFsjGj*UlQ+61Ci&S^Tlb;p1<9CI`Z+3L9a|z^K4O$67(VOZBY6SJi(K9OrnR$ zC%BpXwp(dzYEFLJ62D$D*~yy55$WvSEa&N_TGQ@ogYDphnr|AA3=n7Cg50Iaq1d8& zIbTe9YN`B3q0`Gd+4p)^jWwp-T4TysdL)09=FlF#KEDg6h_$E0Mc=7+l2>8`{cbp& z#rNs2vd_Ef56<*#i|$5^@0UC-Y0qs%q8XkUm1`Ay@;5F0)8Okvy1-WtVb`~>>d)&~t42WXBuk@nxw z_w@!3>mUU;^FEA6&#o7IH<@lfc&O$kXSXRmW$!e97|qis@iFi2}itw@-3b z&19PKND6;r!j+VRc%lX`rILduy2&HN6FZTEPLAJQF7;98nm_HJeXpLoMZ3BK&g6q9 zyx-5B^Huh*uO4<|!Drc9v3C!#B4{;{%VJ9}iRml;@HpzVd3|)86EBp$F!}7|_%Y0mMJdB|Pg^Dz4*JWRanA$*bHv~ndnGJo#Zwq*W-xg2n$ZzLmvsqN}Gt_y!rz7Zzj z9DH3U{wr#Yp?NjL2hby`M}NgZ=tBQPti96s+E! z#b@rIzCL{qefo-P+?d_p?5Q1CR69=v--=KfhJS4=mZZZhS6WbIed)V*twmN+>Cj-xz^6VD6MZD9;DDj4vq4Cjh{man7#M;YH1 zv6(ly>*HL5Wi|J`5^EsykDI-4dFFPp6Apf9h9|YItvUZ$@8=>PE$C5`wPfdL78}!! zPG_!Way&Q*omuxlSx;xq?V;>|@Q&{_P#WTTrMo`7&g;Z{#M4F>;D_(32FEvPoAXHX ztbfoPR_mw8ft!E^#mPPLMM{Oqe0b?T+xMnWrp~^7%kBA{lcV9_=gvKiWE zIRl^eqZM3&Zx(FCk{e+AWVi+xkTJn}*~ye+{twCJTkWq!3{v;NE4lH{HphrV%JLe$M!SPT$+1*bfsH3x+bXB zvdM*ZZa|tbZIX47?_yn0P|8QRE`jU52-l3`p#KantOM8BnF4w`7^)#-o(Eh9n;Ahb z;X1f^kaKO%fp2KufbRu5x5)YeKCCaFsrMzNzNlY%u6x;2=?DGx`r)d_B0p)Y^ts9X z%2~-j?HvBDof)Wk{pdU%`Mf$OM)tB7`QFdJ95hT3C)rbCeiXOu|6m{0_3y$b)%vjT z6f|_f0WSOYWnw$J_ABlkE$P6twDH5D?a}#Tf09v~jpvWqT4Z88g{Ssq$Oq|et+_Vk zh{ZW&A${-Zc-Ir*;J#k9CEXMb?Xz_t%3sl1BU@wCyRYA5;C{+|-|La$eDOBE;cCuz z9(M2Td6F3L?UQNr=Ky|Qio6+@xN59h{z$-{Fw&V;2YVc;j?xp9$FCC1dai5rahEGD zfp)w{zqw)ux`+H~bXIe*6aJJAybk-;B5Ojhw%*k*rWC+vtE31E*{|Bd&L9Tpd5wN5Cu{g!Z=9|}xM!l&M}ZG6mhRID~q*Kk2!qy3_L z*)O_}Gq?KL8`|;((XkU=xBlcZV7RK zl)jO^2uIKboWG7PX(o0TFeXY}w!^&#TfIS0U|WZ&`vdq)1Hc{t@1@Q`!y@or*phSC z%&cu9_Dxa2FiEZaU1u>2!6f+829M5l<(@Iq+3;_F3;2PL_{a?WiZNap!Oz-T`9SEo z)MXXmulbxuV(Ef^F*=j6tZ;J5A=Y z*O)HYzAc;Ox9A+su*AJt4EjInHihVw@IyS~98_?z1HANE&g>T^uMdCH z4Z}Yfjd#Og*M#os0uQOu=O<0aF=E(>7E#sAT_DZMkl<~qLRUU0#Sel6j_yL6UY!na3%M2iOm$6ZgvaPa=P zp6feeF*RKobK9Tk74%rt@5X&!$#dPX#bP-4Rg6XVGv7AA_+!xgEa}>H`_}uh662_Y zU*00T;72a03KtXP?+@-97F?P8`G#kbnVx&$?Ie2TI&ye7x)f)NCwsp^PA0OMVeda^ zmK0#vx_`_(iLF!HM`*VO`n&FW)>|m2HbK1$1siqEkLuJ~!c^488m^{~ z`F31>M;<=s{(|Z^-7Wbk-yU%(^gi|SOf=Gc%-8u%ti8Z*sXoD6?wogep5NmAPy&F9 z^j+y`KPG8g;yz`+`6huqtk<`NJOI9Xm-Yx(`Tb`eu~<18QU0kf7yG8QoX)ev&otkZ zm|Z4$1mBdkJeg1IeKjP8S^bt9#fQg+vMzBA*Y7e%O+DEPekJ<_#eSg4HSOXjTAkT5 zQJukwO!86cJQCH3d{$4ehbkTt{?yho*V0MiHBY+Dv9AgqM(}YWSgp;?>Qn0kzKZ%J zJ_lcMpXcDo<_J`W@Io7-Do6cWz}*(BXOeySG}d|!Klc=VKo2(K;KLdG-Oc!=TT1i1 z4@>TBi^`+t%$_j6cnh?hU+y>C`et~4-e8>Z%NqSL?O%`nS^rGL+avIGZ#1se-o%;Z zIb=H5k4;bgceqY-0{c}TaSZ#zuZZ+Ws%q~`XCBkIqVNiMDNMGwCAA#%yfE3dGb6c7 zR=_>Ez|3X8N)Am5*<9`(XRc>HIfsg);M3TAPjhtG?mpRiAPL`0AOUmd^6~ z>)ea)|Dg37ZWY%bas7+{B2W1bq34d?-R`55S(G_2{fF!&`%(6iWq-`XcU8v5!u7pm z|HS&!xR>m@z^$b0|%zY#oZ>hJ&y z^=AH!>iyB2dKar+;ZFT(GzkA8%4Mtg~P zCo-xW!eM)U$7Gu6qM13cYkd4q^hkE5iBVz~qj-hvBKXh8bZXC$(}Ddawqon@vQNEx z3pQ=k>=yPLyMDd5TdY$V+&5-4CYGYO%gp{*l#l67-GYgFBbiJ7zIe%hXZ}e&hoSz> z+v64UAGBwfzT?c(-->CYx?>(Re8jN)>*{^b>K&hKFU(_na1ej^0JYk=w=?s9n(xzG zUvOrmtFY2tFWG@!c#fv4cgP07uP002jK&h^1azU{iQK#P5-`8_(v;~E$s)1x3*7Kv zw!l6%s)PKG*e`A7ndz9|3Sya`IBSo1)3eBm@e;DadiUfnv0F?w^$qt))kWT9i>}KU zPw9$peL!o6^WzbpCSOblP1bto~>vqm2s|9DI|0J8cx-?EkepB}QY37tWc5+U&=JJW#oZ8u?tMT}{ zT33lUsOm~>aL07@ID)qlGrX18m@U#T@X!ZY2aZQT*~iIA7XIes@{}T+q6cIT_wY|~ z=?`MxnwU>A+7st!Hd#6xjUlN|5q#XbCvIeNz6B?H45ZM~1Lk>>D%)?v|XWCD-{mNOBID z2g!{Gr-&_`_CA5&QN7jQqaFQ=`qDm0E*A0`!K?PK^!y(A0nhn~hZIA@Xfz{3H)!L?43@9EtBrmwKKkGhQmeU(DJ3qhu=TpT#`u zbwUr?+N1s2LHr9V6E7Q;WBV+ic_hkwq9hQ7#NQ^$Gg>;QJto8d0T8NR>& z<1PEU#P=6@{gPs6^tDN6H>2+_2quXY2ksE}-I?O_Pf+;>C70-MFPqnKzc^}>{iz!I z^!8yEUis_D1%-3<)1F1RgMPLb5&iV-GgtIuwz>0dwD~Ec7yV{T^52XX@WUCKEJaVX z@a#VB7qaG6>s@}v>YKIZ_4}LjtZ~gNIK7uSRfgbL9OteSZ}IFxo@q?vUBe7s=h9)w)8Ve% zIo`d;WDdSjy~q||iJsV?3(k@)A5)lPgRFc6hrv+tu_eWh^tWu%*R8PuG|~RrilZLq zYWkZ7TVp<r1!pI_vAf=>3u1S6)a&-!}LDCCglEo&0%`)Ys9ZxLLzQqO*nt(6tGQdUI0IR zllm|C;`XDq)4Hm!bFUtz-jg;5ar?8ADwDs)ZPFG0A*E~Sjw$6jXq-Btdp*m4R{uM9 z`I%vzy{sIT5&gax-KT3j_i;IAcPe(v9N}g?Up5@Qze#zZE*E@!O!=RhH`;3NC!+WG zqx!r2>70Y#mA|z`zb|&t`&;#WkdAUY9rIkHdcQ1g|3>}d`>R}z+&RrZT(95Da?$q| zG30#(9Y$L*UOYZ}EdK`@^=VEiG#X8%iRUE3b)wf)2D^7EOxrzcf2Jp+`$5qmx*rxD zqI<(xbl)o)*?ml>15?cLO!bzKruCf(7Yo$A`&=uN zF+Gc5wfQe__>AUhHAf3f>kVeXe(=yFb8Q1I*X#2uHJ=My8P@Eu?yav1tOhf%tA2x- zJq3jqa2D&FPVm|uPKIxA&EDXj5WYD}FvWR}O?mcJ z%-;uZej7R4Hr5rq*wP*B-QJz8OiyR7V*dW-C`YAsBJ1{!bR&bw>?&g9SB!LXB?RfN zMJEQWUF@gA{1DgoGdJCj&KaO=XXZo9D{$||@Wr`zKWFt_sxrkT5MW*{=bFZH?91BC zz5-pzwb;0;c+Of8d>Gcmu(qv2*(P%GfRQ@iZQt^nxx-g7_XCTsvqNnZ68lJdlHl24u=UTV&UV<~D(0O~VfL?YN^89M} zxfnf<>MnDZbyWAfhPq!8ef3*(4SKhCyG7(j^ziLp^>%~j$Aq(h^BaY;62A**df_K| z;fb!EHPb&T!?SZ}S@XK3D_Z~d&&SXsFUD(Kw2mR#w=h$EFmZhqebVz_Vz}plgxOE@ zVSlNTP~JZK&?QFLSLI{Orw65b6T{gP)6>1zBAbubRwFanrCJZnA8NA6zB~Bv@?wg8 z447vZ+%_*jJt{+feN%BYG2p0-&S3~v_jhX!zFziz->%xquzz01FuL>xTbG3AjT}`I z!}0go9n){HMz>!%Bx=X-^n?Cx!L9bF<9fj&zZLtO!e2#c@SgT(wMkp0Bfj0tCU|DV z+PlQ%SYx@z?iae`&Ro6SZ_)0{8wI)B#Mm_)QT=G|u`$JlVo+4VMj_vVuF z8IVVODxL8+o*Ccw7`YR*Z~}j-1kMiL>0*CM_=Gn)z$ccOcg#=gn)$@O z6>RInoL>uWWe?^1Q65<**M@g@=FafGU+-fYW$ype&GkC{_gmucRm#5abV;ep|iUEkvi;90SkZo4EnnebK{JBz9ZO%!aG70^UyI8?o1Z`xs;1R?A_@ zCdN3|dCdC0LhH4P*Ram-PIScgA{^5x>VJpcxvx6T;Us4i-1H35y6bO?>8U=b?nvI5 zGqGI8Mar#AtdNS?)8>ADR-G4Ed*D@gyU0yHudAMcJFR`G?>8B*7Zy!t{G#R03YUy? zZG6EFH^TJ#=G!&1l%Y?+s6{ zJ+N9R77>%G0bXksWy;Qs;oT%=ep=Go902{ZhRC?vv(!p0#g;#)O2%Y)7 z;$O_^vd4aet9R<#(w@goF@G8~it~L=Sh?HIE3$LR1v7s8Cecy!l6W-}2k)_Ru`KDGV2E_ibGjF7jWUt+vJm-wohLk>LQlpb!cXb;sS)!Tw2t{VAn^A% zKU?daa|h}=1zdDol6LQ5eZR}^_woQ90X z+(KQw`o=9)ZI?p`9Q#6+9n27k{8N&~{HxE6ed));3HaDYhV}8Mh z*({!EnP6QQf2A+NJMas9Vl)mO@9nC*nZDI?PwQUcAoClH1;By+8ffitur%63AG(R| zf(sn{rP?VT5U&5h+Dj&A?@pc}fwTBZ`d!b*y^epY_KGv~UM9SOYgcLG>?YP6ukA9v zx45A3J?nYgD%NAI`ZMz-g7qU^LE6ju%AdmjjrWOm(^KkOM2EM~-xvG!ztTa(r%dPU zp4wtO3tu+MXH_|^;M~eI=t64?S-FTc(ss`}CiJ4MRf=TiHG6*h)FxepQ~e32c0*3g zs^`s)`tNC@_+Hy24-R|-v7Z@drf*)?L~bY zX}I6qaBu6lR7QVE|NDCZl6=|edi!)-j2=l(X`hr?>`&>r2Zu5iVn z@#xz__ATGZre!uBx-I`hR0{j(r_-mP{LH-)baHc}x z>FC+Z@W*vLJC2?;i6rjR!MNiiJbMV66V*}vG~*Ggnfi+U+w6DAHNTp2^s&)r_4sb@ zn}hEhXHeDg-ChIF;Jg9P-v`eV4R}6$9y}k3@H`RWW=X2>zyqfNLdwF+sS>e!Ur=r?dk)keqVXdyMAB!bMx-;2&c!Q z{%cPS>p%R}tapM@@9awZMyrj7#>GGOEao465ZkrC!fJml55rSu^J9}>*I&NiugVJs z=G%z15wm68+ZmTau1wCgx1;{Tp+kF!$NBq_H^WnFod5kysraY2Deh8uDi{DyHmEOOy#mw{@4S4Hi51KdhTzlX&K5zMHmsC5{LoSuopHh2K8!xMk$k)^O z;5>G|<#=T0&F?GS#r{qBe#M_Uly|uqzfX3(ZCH6SjC;0t8*&l$LkKPYl-b`iy2obI ztmpj%{tL8Ew+z?EUh@*eeBUCtr(ach)d$a<$6ssdh~S$PzlvAe#k2BF>-x6qHt1h# z&;w7LM-QBcc(xYttgTbQr)v^4Z4Upzc=(GG_#^T)Q^gDX*{Q_B17O#_Q5}rI{8&h3 zfhFmE%*dBsvd#3^!FzfoZ-Tote&!jqEBLKld_Rr*z*nEzZJ@1}m4kUmd(P(u=UL@x z<7|Dp`1>A?J0d~}sXz;0M6aZ<#djl1O|tQdD;ZvPPaRvCm&-r^_AB*4Mbi=P@*l{W2H%*yj6w@pJzV zJTc&gC$gnqn>wI)2y@mh!%o5Mw`6~pOt>!A1Wc1(M%8sSV+PxUc4o23QM$ zejw)^{mi>V$u{Dd!?|qc{^@~4(D;Ke*{(U31wx0DCj(b~QkFS!7pR-on&OQL&I!|tWCP7_X zCCerBUr8}1==|1ubS>OvGPY-Gt7MG)0@+m?E2E>9FRQskmy+s0+An{=5S z#NIC;#*A4~`wdrJ ziDPzsw`*lDBW{_oMeMA2r`d>jKyDVOH(8q^F-(`-v}^Y%fJt=CO}js>t{uabTo7 zmXqvi<{}r2<`_FBG>@Hlq@T8WyBg$X5P3-@9-$sfBcOiWr^(w=ou8%7UDR1+{`FDn zqJJiT$RXo^1oMh5i7!!S$JupC=BN`cXvyjxzL37KvscjP^(>Ne`#X1Kr5 z#yRW3;lCqyWC!)-$lZ5|iTv%F2wKGxX0bd{O%|G zoG$ZIDZy4O@GkG`i{qR@VP}`E+lG5e2k4u0OlLqo#i3VC-oCKAIeh=2*L0s<)%7Cs zdB&b&d%{)sfInoCIhXML_u%7j&)7!#t!HS}=FIq^SHso!G+CeSrz|kQPm8S2w@>Yn z9}&k!uu%)`x#+>W@csBn8%<|eZj7EO)*hE{84lj9^4R*1^&AeahY!;FU8mu9=nw5J z8*|yj#C_X=zun+3qHEUP(_!}|bj_vrr0rhwU+=#s zWB2G=xR(3tF~xA&SWBGvN?}4aT?bs z|E=~uG(Kn=%_WZZcO{wzyO{$ISj%i+`s@{j6eKGVTE1y(*J^D!mPS z8%-=u5Yr^WcZBOJBV4D!afiY4B;UlihR*1f14icqQ+K-r`?qvphgP8XI`RAFU+I#o z*#Bg~^fTb>nPtN+iw%c&;Sbr|h(CZEo9khbtkn6V0K9#kKeA=uUHj(zfnIHz19J=g z>y2Pe*I}N;AAWC;V#1FHTR!IJjaoLiYlLU|wuN`gr33Vb4)8h)d6eJRGqm!=Y&v?m zDl$Ky^4MG~h-ARqDOn5qE9*)v!;vR zW!*n<}Lqnz1*^VCaw?6p9gI%EF%p#Qk^MeRk+5+nf`}nJK$5(lhSd}!0UF- zON4$+lGUCLct5fcaNiCu}|0OxAo_~UH8YsDwnBwri4 z%nPw^=pp0bM!e{Ip3fb}ueay=9-Cjn_Ty7z@F{xnDf;j!`b+o-?DaZW!f){YMIt&= z@<- z&*_U+$MFZ(n!ul=U$1B^th(@37c%w@(Crg~t#A{0d5jMd@&0L{a;LWEuy_A6s4zFq z_we0Y#QENc*Z-dqE@sUcX$~pJS-4}wIjD;XU559pd@3IXA6Ayp%b&ODBzo8`se!@KIWF5nq+SJ!?kv9r0Q7(a6Vv{~%&6 zI?EyF`BZ%+_Q$$}sISz64oJ)Ap+4h9#-c{^_OaNWJ)k)uvz4l|q;bD}L%szus7g}v zJJa7uq?r@7{*a(@o%`D0hHJxa}yDKcMf`zTo#V0yc+ZdgwfN-~mRJi(%Bg z+QTn3S+hQnyWcZ3u(?71q*ac(pbvEZi0?y%^8MRQ#a8hM z?G#x9pud}E_QJwW8(svrUbRek``wm~@q@ij%ih1w^lD<*$A{zc;>nBB({~ySew3>Q^ykoJ|D)CD34>^Q=;hpHY&mq$XA7~Q)SifuF>OSUe7o$HZyB^<( zJ(aS^W4gkAfb6w+A+%vl;sedfdu+g!@{^V`_U~7J$XDot7iYzLp$&U9P5)W`3hy`f z-|W(@HP_UCBYyJ7cV)EKkb87E6>?r|@Zv~T{b0Pae%Y|??V`QKk^?v48|yjyVdK{& zd6pPpPv>wm`>gR?ZF@cUdUMq8Q5!pI+^BIRw&{H1$LfUJuUKE^UBvJw=WU=5n~GCD zpMWv+MDZ0*x3$l^R^;llYHxN9$K)e=)|kUl{PT$SCt_YZOW&=pyg(Vz_~5T*il=9E zVevKN)AhvzKE`#ii~POUBVIg+?K^n)6SU#@F4aH}vyqHLZV^2A0DfF{aP}HwXuO`- zHgU4MLh{}BpX2*om7Kff$N2s>zTfq){hn`cBZqz^d%f($54gUupXB)N6#T^(Oqdp{ zpSstd@R`3-I%p!hEV46|+wu2&SudYaS?!IM=j>TPt4Cz{_Wkv@z1P!{pcShn`C43O?2sUnehokL%;UJ&6vie8KKp_`RHe9mOAl2lQV)a^^_3>_tG>l|3*6x4&E(|Mm&$zhq-^GS*{_Re zo$xlM$UbhW(?Me+!Ay?iw|dzi9+%`@m&*x}*g?5DL>?y0B_ z#;wJ5w3(by(4zh(=#-6ZNr)@!UdmWXpN!e=?GbX1?eAEx}zWtDpC_OaC_Z0UXTNd&9wE zWUP1=4wC-{I9PjD|IWt2rDv594v+!l!Q=xuaMEqy;F1b)D$yK0vt00N-5ham(--Kq zW@zsF&H5nbI{bb3W;jTkP#wfd=2Z$mmK^-+`zg6!63Kz*Z%=FXm55~D_cM}x!CQHV zettXZ+XBA7D!M;g$IPc**uWgWBqS-7gX{;R{!4{(eQkFaNwMDE&%`HsQ=%E zmZEzndSD6tM-ButGLVXBo))|@&5N9aZNG2iyL`k0A-MT&gpWnkg}kebm-lnYLE^)D zj~=*Cdf>;f1(&}K9K7$GI5>yAqZ^k;@^1Wqu1`tV7sE&wVz-#fN#P559C+M$IjDjI z^uG1G10109?H-+fZe5V@@m=XdPF0dk5S&%yP__>MehHulvxNm;tpx0M|OKnE5Z9ETbSDX{JJ=8rv z;<;YaA09so;5mm+*Y?Im$zS{I=$cyPSEkoITbHKKo z7|URPdtLL-yLs#vXg>V4#Hj*;GSAnt=Bqx(I19h_O~wSK_q9*G_G>18G1l*z8;4@} zu{(f2biKjuof%}Cn0dT52!CvzYmIy|?{8sq@Dpt=j&T)sj~LJu-ftZItXn*|%Pm^R z8q~Gy9|m3m&Y{V+O%X479qoCE`3BjgxjKsa z-v!*{s5I2;>-7GkY~Q(bBDPTdj(kGj#+%r}hBi~@(~IzIlk_6AT*O>m%H(MY<0sr5 z=|cFV#q$SxVV+xhE*@>v1;STDnVJ5)eH@(^UiDw_5??W&e%Yk^FM7uKyF=GT+g81o z{k=3UAC6*HDhJ;Ze>!WtZv3pZGsF-p)C7;4{FmS~$p-lrZ+mP&JdgT`b+!>-lMaRV z=JKOrc50Jx47t6G@5qTPWM;#UeUINY&B_n?4$t|PaU1JYU5+tTN-@pKT6pa###8WU z;b~|GPZiD}Kj`bqDDP(ViJURym34WU$||nJ5d^F7C*6weX<{v^$zWNw6@OCra#F-$lE8M7w6wEB^|A0bV|>If|iyIz9h8=W)~CMU(&ZxY|_w zv-Gy-*xV5xd;P)wDE6uxt9Xt=^A;Vft8{K6mt|g}jk9=eS1e`ryu|Z6)o$aw1o4y< z=c}cNm!~aIyk?={v;%^<58fhaX1#y%9eB zuwppD$HN!+E-rgjRQ6MpeJLt?d%f(>#%0NEY0qCx+tlCwnfhFuZ|C>;_Lb<{7wX@B zSl_D6s1Dz!QSvAPx3nraUyu5DlY=V*M-JHZl4 z=QL6Grz4v6(k^;3Py7t|e6GBg-)kZs`)fB`Tq_=Pe^8#_KIWTiqJE!~_U=SP^Csh) zQR)-l?27p2x(J8j&le*Y5;5PnNA>Mld^5w-sYaeA$H4OeV?O=0?{E+38WJlma*~$z z;3p1k@d0?HUGK7=0sk+<&!2F^`py2auj>l#6&GE^`VGtXfDXR=Y097W_=dLz8)!Qy zeCBy)w52`mW6_cGa}UPfso@+k>n_#|>%7Y}x#)@Vhq ziLy_Et57kz{9@VTI)*86UYM|3b(juM|8pwmeZ+IYq&8xhmggcq=X+>w@DTU?TfryT zBr|T__8fUJUFDP0XQ;1Tx`}arO8Jt>Ci<$iE(;>q8}v)PKk>Nl^Cp*)*BP9G&o`A< zWJCOooDLT7xrO_x@cN>M!8Pq-@5_-c@++<_cXNKcY{o)lS?j@(YxUFQTYccKfNgD* zC-#8CE-}x?U!BIZ@s={>&lB=;g&ttvD^Ejw==?6DT?&2Yu;a$7>@hKnotZoL9p!`m zznkiF-%-AT=Hz8dX0179pCsp4hfI85_Jtty>Job}Nq;1GUj82QB9T8+o`gOfF4acv zKy@j00vP4DRfeP^Y%ZI4;Wft^`rIoVNaq!k$m%d>ppQj!INL=tawSKQuX)farC8(E zHyXc%Z<4Hq>BawP*Hv{f@Bf^xf>GDjG`T9|CEzQjisS<_SDKQ16hFk-VCZ*rR7?J< z2#=rOH+v-KLw$+-7Fb*R6+7#&M|GGzU9>$q+wS?}D${tjUH(4w><#F*n-^T>_2I5^a+RnI!YIGxOA(eZjs9tP4>(fI75r~OQDRRXoue6@W18$ucjfnc zd_q&>e`vZc@m}&%t`yYt;nVO;B)8>Zcm~i(R|nVcz) zD`RrgO5ao3b8z&w2L4aeO~%?^IW1TlpOe4vw+;CV#v4)FQLg@Tw*DEO$k}=v&X_5E z`TNblpuGJ7=JET;1MejdJYzi5z$ewiF6Ugo=J7|W_oH7b-nO;Yf>(ieJ>$$2I@1L| zV*Ntra82{VLFX_l)Q33nF7i)1m{-V@vVLsSa;J}>u;0~w);y0i^nHMJt0T}IuL=6om|)dBZ2nuo@oT^| zpR>_l{MIjsCY0kD^Kt&!xSkdNkTJ)@ zT*>JxT;XLD*?h0Q72Wcmp)JvE(P&NckHKd~yEtdH7VO&z-D+*kB|Y*~eJJG2!u4 zJQ?*F-v(UU94-Eh*+6`&r&XT*kjg=SUZ+2w1!MTtrO%Yl0%UZOtzO6xpFO=e2y+-2m8w|z@BX|d$vRmjMwV4`N5!`HPR-( z)%u+hY}}{vAN76DZ?rjjqzF9oTvvmiv5&^uaDe$JF=zS!|{8v1=R2Iq}KkG=@*#hQFeG zOt*bYm;9B?xC?;KaISB#Ie(`-P1=2*!9h;BuB*I^_;Mc3brr6}*nHa_@2k|OdfQ94 z=iFzso=t7neA~)b-F2d?y27`O+{L<;eUZ>Z9)`a${GYd9qvZ0TJE+HT-e$dDH{%Z_ z-n?IG!{Gk5Acc1x2Hul?yaZ3RGjBzISt2&UTvXZT+y(GpqfMyXi@$f+f76lkJa`WO zdw_Dw!>!Pr_+p~w>(E*y=2wh|(VHEWDtvs(4Mu#shPeEobL3JoPJnZA$rYnrg--(` zW2wSrZd33${e!}4ubA=shl+;9ZpL}YMP}RdbSlT0VYl*ZH9XM54)a$;IgeND>e4zD zaGoloSM-f!U1g#BYg((Kd)GOd!^du~tl;~rM!F<3;*s*@({G3_lszRFWebF>*k%__ zh<|>xqhZw~0N;hluwj=?8{)U^fR%?&|rmr;T2Xaj49a z;0yF?MYYPBua00Z_wTMA=e{%8$Nlo^que(Id${ie*1pXA;B(wxRDFp11;OXJUs`<_ z|9mFL{}?&`taD?HQnO>-=RGHNuN-^Z`(%;J#CiVY_dg?EA>aQ5^f1`KPd_p2khn}= zmV5?c!p-IbXl-j;X6_jwJSR@uUpg#UnSWh@57i4_&vzS$%Ql6Z#G7|LLu@Er=gs@@ z3&|@|o#fRd!kdU;v42u2^m$0(4tT_`sqatXJBoH5?@#af|5$q)@HngU&igzwV_UXm zdn{xl6PJ$Aj3nEVEfOb@TEFdJ93nt~nvhncY$L#F1vsEI^sVT!?~aTiHq3`=RWr->W)6VS=WH#4#mccDjzzpN$xOV;$r<%`&;JMS(}8whn*WOKDb-O zY(XE{a<(W^Us7)^&^Sjj^rUX)`AYiIite;h|4Imh~MaG7G`zC1lgM0r+a+= zVwSs6HDA|qE@Nv_evaI6yS0(~Rd4E7`r<79j>%LZo&1juMzd+sR0naARi|QsW_2&D z8+W99+&|dmkGr2S_l!S}p8lWk&ppC9&k6MV!}#ld6CI!Xd2$(gTu{YJ)21^Ub8pl`Bwd3ky&t+%XURt+_@3(ubCSKxa7h#^d#q}?`Yj&o6 z*es>~wXHXq4_MgN_9sjm{NDEC^{Ur~s(&Jz`66TFv1U(>wToxKKL z$r%L$`NOgQYT8sMV_2c{7|}b?_uq1Boxl`xjP(7YZ258AwpD^hc;h1WP1h(dIJNS2 zQ=?tO6!eOft{&GX&0CiD>6`6Sr{5=J6!=!30%M#NRv8u%SApkb`m@ZHe?Y!xxZi!` zDczg8p1*qj!hv{)t&jPlA@g;iWmm97kV~TS?JOzzF}hoG9Q-@07-v zJ5@tzI`Pqb_|E=AAP$~H+tgDiFM7?4Q7?612R7blBDVIlyZa^enB%>U>uSvEDYs7T zxWR-jEUeq8%Ntc+&f$|~>IXK#w#-N}o2g;Ui&%T2hnDuu<~iVCu{QCqZ|k>}HOQt6 zG77s^2R4+goI&g44B9r%pv5_ZwnK6cJJ+b26DRK~=px9ssBBrtxAn4PAqQRTB=a7=PH zM@!evHwt5toeMa&LQ~6SKT@7t95`?$B^@G0PFLSdA+PeOzA`(LY)mO^Y{=Nu81FXr zagR6mcR$#VeWX7DO`Y&k^i4L&s<^N zuhG`F^keJ=d*(X$FrI!~y#@$3nN`SxFXl$kjo~r=BK&DjXsgzO#c_^1`$_6Yc1?L$ zWmOJ2GG^jOW7John=m`V{j}MCCYHS!TOjQzAM)11Jbl#JhO>R_D;@&I&vAF|(%Da@ z!8bOPRmi&ox#z&WWKhwD^5X-lqtu3yMpsnY>bU9Bcjmz9L&O{KSd-h&MG0pUsXY5; zn9oe@ttgZO_UxON3+qnBZOLBI2LA7>eA<{Y7Y42u-dX1_a(pQMN_PMkbbk23egZ?2 z&0D(A-*1S=pr>W740dvK$fEx=YiX4M5UbK>%ns#YobGJiKIkL~oos+klF-SOy-jA> z4Td=wdg&9Lyy@)cH=%y34|+yVe*xMFrRB@_wAC$^!HBbEQsph|#3N`<8)6u%P8Mb{xHepl8 zwtUAyhXeEo)(*nCbhPyEnf1)?y1({L)+IYC=J(e%*3z{D_A$$=(87&+m&TTsW-n;% zcDF{rKM_)3zH1=;a*H=wW39q`qVKwO<_djtCaH(@vYo^5&yoM+R{bWuBamp-{RT^1 ze{C%I!aF;^l+seM%&0BXFkhKU`YV>n&r_xb`7-iMgYs|(XK0?bdewiI?%)V**?aH( z^X8`tYaQZ%yrXCK5!V*hJgjw2sVwUwo%i1A!w4w?jL>KGJM{$z!@8iG)7SRTJ{9QK zoc`#^K)gie`g|+AseD}zG!Knjn4jGp%%ek!UeBL4{e8n13g`b8+PAovdZWmPFn(RF zzMe1onX@_0>4zuPuTuKa7?>kV;TKUJ&7q{@Q}g*bpBnZ|+3WcG>U$me!v5DFyl{Z{ zQ->6TGC7W3z!`SU_buET&iTn1|32~^+fefacA|b?=f&Sd zFmEA7HhfycKC}Jc|K>hRf6D}J)BP=qV>f#ywu>pThkZ%vQ3h=B)B4W*fbqU+cIny6 zSv%HZo6flOt??iXR$1G?Yvg4-vGBk#eT_@yfP>)iSL5FY9_UQO4)M^L zSeu?6^?o3I?qy8L(35}1X|x{yvrhKtxMPmN&0sD}|;&jic_Z&QPH^9I6^l9uZ z_zL8ZyR>D0m(oFQJAUlf%U<+UO(0Ri&+5l^tqGora-TYB?zJB2QC*-cP@Sx=)JnWeDy8<2&;9+4k4?Lu6M$^sIg^z$M z#~g;gn)a2k1(d===cPiawCjh3ht&X?uSfi~8+2#kv($&h7GMEP(F;PUtF4d4@-ci9 zz;{i$mb4!@IF4n>r?QMO!#!#m!`OQkwr;+|HkLs)Kz9SNYgsS4drvIxrNhD3yWshd z)+634(l1{y8TuAn;npJ1{3q=_@UNMJ%qOc;@2Umn(GC1XSSNi?G6lNaN}qN(IB1@v zz5NyszyewE8>u_kPe518Ve84fV)m;JWQ^t86#7$cg!;aWE`QMas94+-aFNCarMhsg z40&fbAG;e}AG;Q9A4q>t`5!q<+m;3baohF*zipjG_|0P5*V?wNwoTi%4cqn&wEZd8 z5Pi07U~{O*gE}Xxx@^1Rk1MgKfm`J50P=R1 zkNf6M+F7%bb;CF9y^gimNj2wq*&DbQ7M`=ZEIv(McYotp2AWw3ZK0DAr`pS{02UkY z{pzEx6}<^>Bl`)+vl3Z*Qmv$uCPFlDc{yG z_CeD6=mW3}2B@1AJ9M!tgFKFTT*S_&^-? zBwzoQ^?CkO3>`a~`D^GCyHVzctmEGRkN=Hz{QoG#k1_k5&U^H*uk+g2Amasp2-df( z)g!VahvR0Ibc-ambkb5qp0+17bNdWoMt z1zc|QpHHHvT<<@h!oJ(%KR=A_(yeFK>Opjv9q2FH&|S8o|Lk1zmRW}WGLYGgzt5Xy zr==^y*g9#8`8wI7IXU=8l4qISXXP93jWO3Gw^LsoI@~9)35U2tjr)m+`T0)tmPa}= zsk5~?@{C=A{NRrmerJsttWzvTV)rfyh9;vXFqjBFcdCh)c}rTdCgPpUM}tRCHF5V+ zgnbS(*2Z}6hX1>u%`rN}2in*A!G6H~ujv68pMhu3WG^A#tL_~-jg`0PG}Hob%&->D zcf>4@y+^$_keB&6`BT2BA6s3SohSESk+bWd*^y^j3+r{&gY39ob1eS(XY{*BTck^t z6zGJ$t{>Ci$PK`J?=IGNnbBe~UPjWXp;6bOi)c3i) zsq_ePB+#D^e%P$z?2Yku_cvmj%6r+NMu+=6cfMiw&pLZ5b=yzN=GiyfUoab453Esw zT~8MG27e6ZsOtoNKY2GVWE0G(KY$LvUm6-UEBX__FJbTcV{Qy~_BV14QTyLbR(2{c z`VINXJDD)6$X`2v-wO8tu0Ss4d4D%!?E$u1jJGCX*5vLa?YPxN>&E(cew9DzPVLmO zk~(Vh3GP&H@}6Tq;xztvqkbLaZD}K(f#EFhF4B;>`ix!2xYDO*(%_;%qlWtx8FMI# zPjHStGM|6d8*PYTKTz!4_l2waxLGD#S>AjF-n_xD57`Huq!-~t?a#@DI6EV8DoJzIu8 zO%d~@LwqXU$+nS~dX+ab@+5sM)2m6x{yp;KalJ3&HT3i%ul*fmH7~$x2EWMc4$EsF z5zpZhsd?iG^ovjmS!ik|6RBqUjx{?NiO0-+(&LZ|-~zki87mWh9Bv%D*^Y0$?lUw$ zoy1R0G(FTPIgolsy#a<$yt&uek(1b=%g&WZMydThr)LU%OYU*yR0f(`8BH^WVcye6 zJEtgbp|A8&{Z$$D)zsLSUT=7#@mOX*a_HXa5Pnf6%80UqGw|85DW9D>OfB+R^{pEv+xT#bc4zXKk1d&v4&6Q?eEQ$ zhfnx@4E?3vrgiZfdSTr>fS!qL{OyyaxXQc;&G`61)`e2=p;_@V^7keKPncjkypWL% zx8L!?x}m0Et?y%4E1NZKp$lu=R({f+9Xsd4)~=I0!WNo2eN^uY^o?JJe2?vixeERL zsgC5w`QCGSa@_4ZHSir)Ke3zFiv}~gi<I3|Eo#wyf z-MnvL&4>I`BjeCTTIosfR?zE!UGh%SsUvk-eLxSv{*p|QR_ppUmSTNQo(yBshqXzA z=5&3)rCXQ3YIf>(>bU-c6ZAs*I>5R*FP%0uM)}>R^VDVUJ5nCX+J32@`ebil-I~$- z^;Cyo#5iA(&0nw+Tzr_=y*M8x4d6|7k?YwUm(oVudbhAqCoJe>I|>Wip3t z{RLV@KVqb$gJ;Q6%S-p4K9M>`8Wu)ma2Y?@ys6VCGJC-1ebBvR^%!HK56LH$|F)^r zQ*&``)ED4&wJn!CZKGr}~Ir#7FFV#+JGk7yvtsPdbUIec7b8fKzmnVB2Jq zov(!Nb_~KYyFH`I2Zgs&I7+u!Z8)Yom*7RJ2BmJ`P?qw_~c>8ABWgOD8 zQu6g-eA#RHZeU#EH{vI0yyIVyhc^h z?oZ*}IQx9ih(73TVeyfD#&#)Lr_VT3kK(iIGxjC=utW9#X*RlN&SxTx%(HwFwKg?7 z&SJYO+&kz%zLej|36qQmnNt(J6WHJ9;F%LHeOQuj%$wpqgL}c-?&+H3kZoS_QvC@R z=EU&`GWHtvhjRza1xYBh%!gn2#SVb3IHej2y5j1*qwUPF(`~X5>VS5Yr)2)Myp3K+ zt&APHhKv{}^kwWIzoD6^;&H)QS;0WGCOW&qj>YmvfzIeQ<2gN}y0ZP`{abURzkc7! z`n{9&`!?3^an|oUSig5?{sv#5|89C&$M*%@dYV#vp0Kc+_pVoS-@@-g!|Y`w8e*yo zPqildjem)=4IDbCH9B+3jrJUi@AKwxh@DCPbF2X}>FK21TTv|J%@f^jpXHIevRfv4 z>^@5a{oOMiH`u0h*Lw7&iEh=A?VRXU9oPugqo>3(!_!*}aBjQ7coufU)1BDCb?1!r z#mlzBr|K&o*T=89__w>Kt*lAXlU>Fc3;;_^=0`-Z`rY!~Zg2WjcrcNeyc z26UWdl0CwK{Gx>e?r;26EA#G~?gv*r*g7}jPuUn1?~SwH!1tml&UbQ8HDeBG9yP(q zgjwF7&^j-;j+kYf8v!m$$0p5?&681{yq~An-9^5Ub==ct2)tP722Y>Ty|duwdbKP3 z(7)xams#Ac;M{tE`QFa+CO}=aw7E`oaejm{-faVojBOKZl%WD{b*G7sd)-Uaow)2^a>l1DtQXmGf$>UBw^t?dQs`XLunJgeDk~&jU}KvAEB;z6s~Tzw{5`9{W>N z=VVK1fHRqqQabQXVuukgl3t_*_5FTJ3yq9xqxzUU==T-B2}=vFkoKlv+Y4?65<15d z+}PKsvpkj-ega;U=eY8KJDaD^(aY7?1)!C4XhGwkUG*RQea3scp;34#;uJivMwzP< z`z*eY)Co>GGczwv$9><#DN`r7fe(krhB+JtmpB-h0Q{?QGiKX&jjvX8!`RxP^K0Sh zQ-=F5=IBH;D_Z?G(91@jUbx4+gkDn63-ZVWCKJ*-3iJ|ehhCBn2a6IV^a8DjX3mdZ z9?M&LNl#0zPig+MbOQdF16N@ujlf$ywEwHg>wq(M^C0)S==`tci~H%D8}D+B*IVkt zO>lk2>A569}P4MPcghfIp~;hS;oHEtYRZiXu9 z9(l@nS>jg5og69f1A75Wg&f#_Pk|qU2BuzjqJ6yl&F(Kt{(VX<*bgf zds=s-JK5=UefdNO(fM!VJH+>`nP)uwhP<_zagR0C^v=v7uQoXd-bc+lFvRA}n0Y4+ zLVnN!^nq92-=!fR70Cu64uKiX|&`S$H z`~cN=;-&wi))F=^eOo>1aISL7+tT&m^@4k$8~{G9al8H}Vhwp@z~aFKxae0Id%sag z_qOfZUo7_=Z~|w+OXl{^+1oTa`w?5r-6h=Nn*$yfG2hvCH0M6);m?!mRUPWT%G369 z7Up{Ygx+To#WvjgZ`k+X2V8lpFC*p^I9qd>`Ey(E{nHVBYb{~F(f{>9#@)u+qsICI zd*)tn{Qpw!FZq5%_0ev$bC>xb^XN+Q)kd$z{(F-Ks<7J3nXI+Q*F7o-`h@tTwk#v(J?p zi~;}H1!y|PfM4*by4Yve+}bDmAp0g3rrZ@LT_uv?ckU8+81Un~@6p%)3x7y!?_@5D zs!WFW`VccW(0L_oZs3oYHr)Lty0#Qo+15hssEy?JwMPZ5^>be4>*h>>7oa7(_h`qT z7tK0-z?X3mE92l1OJ`a~pRAy>qelKl5$yY}PZ~QTsH{ihjdst@=Ac1nZ%TA{9<+Cn zrLBc&ug<>TH+>^=_E+&|w7S>oh@H!pr>{Z|T`Sx^)8^eK`<3OA8@1A zm4&(0Yt>#S^ExBMejWVBsmybf zMKWdtuVrS_1xtzN&N_&AZy~!TMh==4aaYG)be!**W47$Q$m!=CpEK{63mP4-U* z^R!o!Im+BI{O+h=YHj+Y={dHE^P@MJHh32rVZA6n+amA&jrHb$rNR5B*Jn3O?2=5izrVd1rW`|s}TdO?<)&jLZtHd|h?I2x`sOSv0w5&I6}kzI2< zqP{l=X&YWq`+@d&Q;hYX#;!hi*X0|5&5(XKvkrzo@3C;AS(qJ8t?t#-7VjIBw zh6&cg;21n-H%>TPg^zF1m~73^j|-(dP?k2a3<|P zG>skfk?S=dl;Gd>?I7cq?L~5keCX$e@wa1JT12@X&7t7RV-~b>4_#0E+lt>AbpP%s zcFLYC&+Vq%$TW#Cmmv$bey*dj!$w$@S;QVL`bRS&T zAw5=cM6B)7?afJk)BgfYi+9{dd$O$)2Zb-m25|SV#oZq9=xCCDqAEC?fvZsq+dbsB z^~}qk4qooeM)7VXM|XugMZWy3)Awih;?L2U`O2%uGwD~(3jgWX99~!l?11hftc`|D zJ`o##o^yTw$@;6Fd)MZZ2APcBGH$H=KLfTy*$=7>jl4z=u_vMv4Kj?i2ss%4tFP?Jlvan>2Oc-?Zb9W;`3l!^=pk?;1SkK ziZzFw_?h+Ek1Naz!J3XHjmPH|S8m_CgX}AK(%1A^7coQQPqPOCevv`DSPSluzpeUf z<;w%_?q{wYlz%e1%U$Td_3(7JVsSHn*fs^jH0^r3%G=ZV8TepO?G)j<(uda%Ebc#% zTQU2-_nwve+azlo9dO_1932Ej2Z6iFa33-|^0B}l74U7>09J>0bpFixY-FNS^C$f@ zfxX@Mx%DQ}%-QOz`r=(}=gPQ#1GnC?K0=R{KGU|38*=p7&VT4PfmA`ip}gdh#!kI% zeD++!{B??cMDxfc=&wGvlyY-A^7_C7(pCEtrS*B~Dt!cQw!U%bZWYhZnE~M}aJRG9 z`!NLeTO7K$mGj;=%elNx&gE_MW!jLNOZVIR-n*H1u*VFHbA~DU(qU^?h`xQe z2l#7$v?a6GjWbnq*z*2r&wPjUDDf%-lGo_A%Z(v^mY^vV6HWQ>?#kE*u`iWl8GiR++74NrkY~MDy5QCRmR;+7 z+Ld9gQ#`lw4{b^-J-1R9M}8eOJL?XaPuukq&)6Ujq9lAubcn254jw(=touo@*7PUr z`i{PW*UN+Ltk1r0LIu2oZ{}h8mwEY=zD3{qfM+)sjy%$<-vwD{$IkD{u?tRtLy=~k zi4GjyFUbhb?WRXLSWe)KATE(5kMf1^LfC;Tz4S02W= z1YPNJ#;2InOb7$4Kl_?w3mB@+&2F+CegxL zCb-PXsYR?Qx21PmeYS};-;Mg6seU)M?|Yo=^!2XSu_H#1QEk4AD!T(4xzxcvx%_JH zUHz8XNByiz7SPQPI=o3Q)(1Lpw0ADvTJ=6Nf*y^2km;g+)~&?y3|+breJsv8Vg>7n z2mN)#?dW5hCXU*&M9^YFU~^~2gy_Dn~hf$IxnmEKo`cU4_~pCAA4U-#p$-J1C_ zI2d_mC$zVX^S?Tq);Z4kz2f=LidcLWCOW&PGk&s1k34cveJX+XR$}xCo@ZH~E>3TT z|3@P+@5P~}z$!au)hoZwkcxhq{~5aa=)|O@rLSO@_>GBIiZs?a@p}4A>dtdc_sx!G z*(eG!g!QW8=4>t2HS)-T4CU3f+Eag2xAHLeVN-o%RC$a2e2g^SHN?%Ih+m0orG}b)kJNPb~TCiV# z>0o+MoS1Q}5nH}#da;Z40sAMUN2|Oa17$0)b}$p1KI+=HaPr$1uVgnIF~W=b5}fR4 zR(Ziq?Psuo;~(FkIIqgNGM`&pv2ct`F4|p)>tJJJX2b)Wb4Gvc z$Uyr+XO9_lI^_M<{{tOzQfD`H_5eQFI{rL%ypprgoX;rRAB%23+!wv&@G*0_TR&yv zc5dLzB7OSOj63uH1?a8bT)_JDQ}k_X<}1|yWpMB}hbNmS4g<5V)du2owio$zFz$}J zw7J~+VqEU_^Ey7uS>{o*s^d-*V*Xko8fPtKWgfEMt^>0Povr^G)9oA`t1c2QwRi50 znigB`a%Y1#!9*hPEc>j_DV2q0guQM)*}vp(;kxPrukUSK=)K-)Ocl1Aj_fD=zLkts zeN%h%uO|1wh1*mf|IT3Hnpg$1f5}?av+%5fYlmaw-yglFaQpP1uKgFst{5DDigoDM%st~r@mF$MzCpfNxMxQEIg5E#p9_4L+I2HFF4oF!k7p14 zKSX(Gyb$9l1HVF}d!gA~#+-rPkH(mn`gQkX^MNA`7ma#<#+W&e1kH?=(9D%iR-re9 zS2ue5th{~(e+1(EqSxMojVrpQ$GaE5mFSwhH>`fi?;af|!TyxJV?{Ba=YS!g9slUK#revz+gYw!hg5$m;`s$={) z%He(y`&Y)sXVVKdzUQx7+uoer{9v~8NR4Eo^rUR-5i46A-bU|1j)7^X`yj8v8cTE! z`6Z*W;4$UaRk1PPkTRF39mW*VcikVGi;=Bcn8%0aWSEoVzTKgrGF|JS5*yiQcBAW? z`jg%4_icoJ5!bEIFZDOc<*_!D9#&?5^4iMmK|1^Cfm2HZ zu`%Y?_9G2G4DSLLzzI58$v#ZN%}WN`x`pTFBM}Qv>2pQDnRoAzZQ0U{^KEeY%!BBd z=z6K!tqfe9-2^|)(PI>Pv~AiseT!>T?J-|VC%mhYW;AxvlbI(B@GZ=h(AgogM}1t1wn97r~+cmuhq+_(CH+$isMM~U;UCzvOv(9fP?t~_b?a*508?y&!d6Kb>c9A1G}(Bb>hbuWfrmiqi6 zJ+u{>%xq!462&KFp1eVqHzr>e<<&mvgA3#h`FS-5DK9o}lUN|HjR6yVDc0)eT|(YJ zS|G3A-mK%$tR9D6vrXeb z7H-Q7zqU*DX|EBxRh-{FY6Dwrclbr~YqIB-z(Z@gpyq`_UB2I2Ys=SJUuk~9PJ?V~ zweyaAOWKaKxj6`*k`?sz3H%7yqmDj#q*eGvmUP&@&?a?zEsvW%=K4tT4(DTCf35RN zlb; zWY}?FcLJNuR7=-b5?LHapXnSQ_s_N+wSJab=eGv!+RYqyGHA%!|FMntvVJ?R^%HU^ zid}#8xc2Hb_d`qg?bU!!&HHWgiN_zgNpPr`mm{JDm4UVvYoAKCq%5$ zcS`pU^H*`BjL|*oS@F}Hz%9Qem-@fLAA}d%#7A%Rl|B9iaodJ^JMcC<}%)KHpkAxN_X?{=dafu zSMpws+vFJYnEAV*X7laAX3cHwuljZ-=L7vK*~pO{$=&Qx*O(XN2cnO+XtLS-eRs2b zm~~Fge5bFu{dVjS8@RvtYU|e-Qa<*+?YV!IQ{ACa_S7#qvO~{$uV><4CuAFL{e9Lx z+V8{Wq32HQ%Hce|(w{T?_??i?C^oPM+o#zRcuGFn;h6HP9yhMRd#tbC$kSQ$iz#%A z^_=zCVPU9qL^|KWC&PQv=lsQ$k9Vp|=a~GuI{baWJU&+SCV_vI&MlEIoG^DIr?#>` zxJUJs_{iM_F4m)etjDeu(7wNH8u%A*53^mnEJ8=p-OnM?2DC3=b<%V94I8Yl{>Y=x z;~&t;S&gk41LqX&J#^}8c*@*h+tNJ)hlt}CVQ;*qJCS+7?HzfXcS`MaJ}Gw0ltEwX zlnp?3z*KS~o_cj+hw0&bEUB+(-OTVsS!C*tgtXTJ*`cUspfT6+3xn^Jxsyfs|gQ+#9ysGr$+SkMgBHMr^Dr z3h~_Reu67M@{IKIOU|kH+`XAX{+)t_%MTsUkLcC#dw~`=O|TAdIJGu3!2;a-bP;!S zaYsXOe|Y!w&^U3Wt$zo6HV)50D-G&IY=*tLEH-Frr7S%7tv z`b+QR>Tqp*&f32-!(-dzlaXx_@36NBE!%z#Pe-vke9(XH(77=Gc^mZR$DEq(&L-e5 z_WI=Wn$7d<>apjm{AcYk;?rdF?4th-{_|jTkr(%$?*e4*OwaH%HqqkqJtfapUv~L@ zzK$G@XNiTD&ESJG^7K*VErUDb5)Z;F-O48z>XRkDkj)=xO_b)>yUf9#9mgo*jc1reGb-=!dHYE#m)NUPTJq*&c2BG1y}$oEdmMZ?I)bi5OUX335_@CW9OGv_ zWJVLQ=o82jY!l7Rj;@g37emVtV#42}JpQ|T1V6n?Z!u@}KDWx8O?R3ZwVP`&Gn|Eg z-#)K1@26WmJ(^sNM+`{M!ZWwj3#B(YfB)Pvk2|fsTAOD%=a$-J!Y6;N7f!c(_4av% zr#nib_*{!`3i4F3)v!O^Hs$lpacp96#OHPI!wqw2xoW2Cil6<11FP5gxznzZo8vGYkXX@J7Gy1Mi7kPQP@XQ{kV)$^b zotRq0A><4eakaQt?YmHjnZ-XDynizl<>I;11>w?>uzn(b9 zH)o!^GT~QiYqC85lI7{GY7x5LPrQ%T!n`S3%|?#R>Bb$$tUXS7Nw+$gecpU5j$8|@ zMUT{P@e0R`w!kZ|h{t&6CAS~z)I0Rduj)775&af^^_>n+<@JpayU2v^);@)B-z$0S z&FpV%4(IyQS3v8MpW2_@^K)xkkZ)5<*Gub>%=UbR>Oe;M<8id7c#MJGnoaeQ0v=|6 z${lHEup#zk_W#^O_e>qnCh!Xkt2ATV@6Y*RH|JyP3l;19Q&*<>6H}*haaSe~kHm7^ zy=e7>iZa%pT0Z2AlK01T_TR>y+-1D+tQnBME&BA%@lm(OEgP!Z!q?Z!-23xr%VBeu z&cWd)b0hM62fn-m>{l=5?xRJ~wI@eQ#**NwIlF8-Y=DgIz`58#zyLqdl8_4S*DF+gK9#?T!=Uu$Fn0bZFn=hZxwg>~+9} za)Nt+bHuU-6SrGuhfkod-l#U=gPrz$(7o3)?_b2{o3-(9&o<~T({(JqwUM~3jeT~% z8dR>zZaOBNsxPzq=TYSO3F&n9x9~0<5S>oA&0aD!WqAQQDB^jy&2v1ued@SuzjprD zm>P7(b1)(QU*X~${Qbb;Pkn^;Eo~>aJKC;?UTnJM5AP2we|(AghBaC97p5kO^%%Syg|X;x!!u=}BO z1MU%{9r?)cNliPRU-Opvi5)k*&K~a0IbQdgZTf@s>i~cB&xBt#vDdGk$Mx8@(6V{fpfOmMNK_pE(~z9QWy zH9d7Am7F@R^PJFY6LFRsy|3pRGp;2A-s~Iz4npZ&l=OXvO?WWjrH2~X>+kdaKk`%8 zIImMojIRzrLWX{(yG$-<9%;o zco2Kj_1?|-;rhqje4PBLo0C?zoByav(gTd?4|rf7hl-M@W>RCn zdAx(R;_Oi@?n@Y8W@?BRvXWS=Pms>1A>nKyCM4J(FRt_F`G2S~*0;_XtJQCkH@LB` z>2iEW`$+0{?cZ! zmY6K3jmc4;`p$>o;w%+h6&$5+m1h5x|oaac6^!M?(`<~e{}zRLUbTL zu=pPX|5mSo?vEZvy_P*%$TxarHqdi4yr~8#WG{)RY{~ORZWQ&Vr$35aJKBD>B z;uYvvJCOaR9@ZtSM{=FfTc#$Hw=oZ~pO^%W_RI>lFvFRc;ys2rl|p}^P1e1YF_6$7 zf7ivo;#`MxJ#02!tmfDb*<@01h5BqhX3vI)3w_2PBf^|~AwC&V_NgQIc|9R~r#51z z-h_VY#|}_DS?}sOpL9bk0p^1S{QEdd@8$!wm8x}p)VUzVAQ(dzUZAgq^-mvjP%p7% zBCOB0YCfWGx(mJ&|8w03-+_;M8?nS&@v+tUXKSaRzgc`o4l@rvjJ&vFU;CYce6jnoJLk)v88=zczsf=TQ-YNDTB*(x_?z5U&~?-Y z`l3Fd2iAtUAJUA5(eZ3Nn>BnZp3Mb%$DGQ&n8SU|mmbqSUH8PUnwn(KoO7 zyn#Cpf8_29lJ?gUwO(v4?LNJ0a z+a<@gs*l){5a5&8QjjZmAm`Q*L*z%Q0Y*dTLMH_evp>&WLY+J-R$uCv+t(}LN-?BZ zbM#p`)-ZKka!mD@m6FGkO@fp6-e9BRH3}Z7>)@H=G_VdG;Phl8zb#&DAGoV8xP@~? zycdoD26{Jb({4dWx4)qgL#(rsah_moKxZZ}a#!$Y=+(8<2 zpmifLU~N0LPWmZ0sgHt<=mh$BIeI}$7#gg@FNFO7@=zbT?J3Colhyi>q!gKhzT3l8=rbH4oc5p0jmWzX`LBI&NT1OF6*=`QOBO`^F5i#p3QS zkYy=!$p@)(AAfs?`?H&mZEcy&#baX=`Pl709E@!^))A|jc%>w6%va6g7fg^fQ8F`o zMtf7#s*;_e-N!bDxD-Gnt6JI&nO> zxl_I{)H4)TJkE7fZq36wutsHr?wm`To;gz-GQ@rJ{@&`QiW{&=XL-z`d_pt_e!vGX z*ezQhad0kk=T7L$GWxQz`KbA5Gy5*t5$fvW4?LJ4{Kedg4>j~F{sI@!zhDbJS}B}8 z$Zy)AjLok+q6KKUDY)73V*wYG*_{0mG1cfB&zrK-vUiyc+4tCQ!DgUwl)~#m?#x!2 zaK!%2!&(b4C)cli4V>IC7#q)-hm$i-xBFFOq%FUSI+(*^?{Nm}D0enMd!j4pLYD3= zU*#Le(b!U5{H+9zZHnbOROi7b<11%piv5i^+-q%=x`DhJBl^`jG)`$`!!0@L6F;F3 z)LQx!okFu##==A58}X2(QD_yO`VXRA82jJbaU!QAznQ0xE7r2~jU@VqcbvXUE-7v> zvD2MgO2j0K3Vp?Y>_cYp=S@&J>U270klTyLIvJlCVooAf?H%aCH_V<)vK9({h?q{> zXHPCf-xoIebnn~y8qnKqAHkD&$l_^eC20h^9MzBAT*KX&a?_>I@pY&7s~ zeZ*Ygp@W-6lZn6xG#W&opq;=$#&|7$X`F%aj`{Q6AZ7aTo#&hWEfP-z4gx3Qtbn(( z_8jil;Hfj@TQrmiWT@lYrd#!>&)HYGZ{%`*zepSh_5xS?cm2h%L7JtmF4isG$?v)R zv=LM}>i%K$B`4E!`-qF}&-cjCMZ_pw1g;-Oa7ve}XU-e7^U8B(4|Bp+l}AR7roL@j zv1P6x@2KV*TW`WF)o)^L+I%`Yfp6O=`zn@)yl*$e^nPpOuS|Mx<%tSBxvAq06I`8V zA7BK1^()XR?^V~OGbW5&3g|hPARSu>{TRg-(kYwB+BbpY3qw(8Q9QdmcaZV;=Ngd9 zw!KSVvwjBtm}!IA#p)RJU-c53F2ES(+F(x5oWh&{b+R~l!JWO3jz-xU+8MKY+J5v) z^e5RmrAwh3)F^+!W+_``scx0iyMw1&WiPbzMFYPX3%2-evOxyTWD9c?F#w1A(Ho-7 zEwRj(rXS`E;lXj>k%h+%`djlSj_ehDq}v8o=0oI*(*Msjubll^`wQj*@O!;-TA$+L z-5&3Rlve6f9JtV|qaXdq@SxT!fjINA$=3zo;p`UL;9US+Bm0pfNj) zH!-pOHq{n=*`NAOMSHF-tx=10{vR2KtM>z{S7Ty47iv6(ej{6e6+CERHCY$vQv7be z-*-+H`>ioEp8Xjhsxjzy8N8$y@liV^{P=*g_o1_+pR>pOL{UFqg6)wqxi4cQo6~Ka zUgGOEm2*gDC2d2qYA3syb%k5+*}d-!YYom(MKi1^IQ!R@VU5ArzpX)N7+d@yx7NFM z)UNgJ_t$za<+dhYom=az%bOjFCo4S%Ty|tLUN}~BWGDBD*iY-Q)g!EAO&+H&`{+vp zwyzD?zBaJG!QF+}lX^^`FYn!~m>GSESn`L1-Y#qbhj*Ec)kuSt(F|7blU zU5mAxtxxb}%;=7jQH}X!^dPiyt49)h#Ko>ffAHhmre;(M7;B94u1T-yn-7k@p4h86 zF|7CO`g!~b{PdQ!$nR%;7Ffq_KNc6fqHq6jFbNOn(=f`~VbR^j+k*ZQnmv;mB5^PG zLLm=KA`Hb%)|vPE8&j#-lgjTsQ^l_IX!$&9?qJTGvGT;hPjf!-Kxcmi8}FnE_9x(p zm0p6mjW&%Ls53uhU*|Qa=b!^Zb->}Aa>U^C=RiE!f6r0*ltQ)^*4x36#Gov2Mmvsb(IKWizK%SMlF^V8q(%UOO%-kh_vUQ*8Y z{}}Fd<#Jp7au2JVwRL!=t`tw`M~h`MV6ONTo-e@{CkSln<&PtskaXgbv7dC*L{`6r zKEr$Frf6p0^g;Rfck2DC*q9@L>MDdr8nB~M4OHChC z8Sg>a==&3?9gcpzlq;iJ=BL4{-1yTIlNyWkBW&qqK32@X%lz>yt$)<%NtuKHC2s4q zoPjVj=J#!%n8TFLo>#ZN>*MBw`lfHaX~t5-A>+_*rR#lZI`W!$-}Zb_e{_5E9{kb{ z+WDx4GumB89=6Y%LBiL4RL?qtO`b#c`F_?`8;)e{^B0jn%g|qmB&559qc0sf$XTIh z)mHRv@>l7D?Q_LgsI$lVC=qXp{gv**c#y?G)x~+nD1K-MZ5&MDB0FI3BUe7*xQNG` z!-+rs9?I7i$4?w;)g>Jod(#1T=lu(DV*O$#ln<7ztHI@mo_^67L??58Q$DYBPx-X_ zy2d2Ck=D)V8r`xrf&T_vP=1v)bdT<+hPK`LB<6)&1ip;u{8l0+eTBv0uYl`qf|t`f zkP|<$Yev~2FRmLj%j}#f8!mHWOV``G)OX>7zPF}3RI)hV$uFo)^)^ETT9>G9DgA-jtGZVE={ASd+bSC-H>-d^+U0Coox7c!uBJ>nuE4d z(-cZ;ot?*w`l&pk@48PR6F0i(lK@nC=AUi(10LMdl*;(bSJRcmPQk)9F!XbGQ(l zS$$?V0V{VroMUu~F{qChGZ!sXj(Zh~<-py=n!j@LkGjO+2K&}36Yza}w*QhoKJCB2 z_lEcK@yV^g_Xd9-weQ;dJi0peuonlNug}WCJib%%DGIkV;OjH9fUi&MT>Qj&eTsO` zxyp_lem(el2}be>tLL|TeL}f)zF!YG&A_id-TVGr9}8O=+3j#2-9GU;Ye3oFqp~v# z@4~t0!R|SaAR{yI*5%;03wnY+f=$-`a))q&O|IVryA#?Ywf8jaC6PG>I%twlm+o=U z{A_L8tMYj#qwXO)1)r~ZX=D3YUncfhU1bk@Daa0JV?Fcw5@@4= zz4WZ$U7Uk7|L~D*R^L&416Z@$4{KR#C#h1VUl}d!9JEDBVl4f_c202@hyAc_t=^7o z;*6o-C(7KVcoppPY!BJ-A}hrs+M{>rmpT3KK5Vgy?e%1?Bbj52)FU2YzAe&mcAPa? zk(L`+^M3ag@YA<#sR@2~!^%kZR^%_zlfPR2YWNHDSI=JqcK$r}6v@rr*wxg#{8od^ zJQJJF#gj)V_kHLZd!}T0HsSVS_;%;zfS2ua*TfrspF1@c@Rld8{U|tddp{HG{TycR z=bOySf63m@H<0a$J^G~C0dC*de4=#`_GtE~+?;~_^nK}_?2W9H4{LbT*+IGUumc^* z(^-0RRYS!tn1l;UUN>(M-MtRwdfHnuNJ&7>b!4b0B{<|`)Hm)CmFyQOrk7jBGx zV)i6HM9#x8u**Vf{H9&=nV9C0U2vZ-%wj#hft>D^2=}=AQs|c6d4(eS3Cq z3BPoP#>blO> zHBMdFoXo23ytk#>-s2p5mAQ8_c0R^|UX;s0Q|2z)-?OFtZH@^xRr|ZNdVgo%R)0%i zb728C#s04XKAbb1gU>)+;B%dgZY;g9kJn@Q}!QJHv4VtlhC?!CCMF&Pxk%T5AF@NV(YjXyTj6M_DvjKv;4L(w4B~W ztes=M-gtN8Sd*pO_n~Q+hCQ-QZ0pQ3d^6uL@7Uij8}W?pMagy3X4KJnL&Cq?kG@Ke z!Dp~jID+Qo+t-=91fO&t=2|a}KU0EJ{8cJwGotaLqxWmhLf1H&yc*b2uVVdr2h6%` z4`X(*LfY(JGJD9_#OngLMjUPIL0@7|LTv}@u{F9m@~r9z7@gt8?srE?-Y)AiFB@WQ z?gswi_WaILzH39nPF5)mzv#2%2{Lw@NAH2bjQR@<(01r|1q^JOgTV~@oc)pmsjDWA ziuN|RIP*(I-&OEDXlbOBuZb-~JRN&>GCIf85!)8DWc7GxN$`uMfZ1VS);@7Gca8kt z+?jzYaFcIiDcokNz-`9zpo3c&c*sUAxP?pLCO`TaA8s~}-t$*4TaEh6zD_=Ar5iiA zmo>GBZ=(1-SAoeU3lru*v+O1#-X|WModdJCG5?Jx8s)36Jz?xRJ49d9to2}LE&yGm ze>Riu^enDqkC2aRaAl+^O6;f7yy>XNxd8YtzMpj^dHi}z9sKb@r-$(^K1r~)lI^4u zy}D-Z90h9t@ptuDlyNr~cV!EDgDu`4_RBA$IecU& zy%L>EYiqaG?vpK_IkDI3=Y{n(aV(j`x8_zcM_xLW$DV&r^B3>|WPVKt)heIMt)9L{ z--2IyM?r6EjVTXfY&8UN3Jgs)W?I=Jx)p!pZdP7=;8}}L>~(qYP1HK}mAGF`xUkRc zF=4~#z^2r}`{iSC%J5r$mtzkKUytm}&_CHA9IXBJRQE4jn|JQA@JpkA0k_nvoHxJ+ z5gYk{{XNZ@gM-tf*z|Ylx7Hx=LO9a^{{8cVY|V?!6;&0`1bbow7QW!ayx zk#?kNjtr!t&>-hYRhRi<&Bk%cLdP-HY1g=+!MyfBy<=`}a%)_4kj2SWZjLgF?Z1=%rgy*$=jWMx&A@T%dEW=3xZE}7xQ=oKQ`{! z0~bHm-llv7##(_X{=2C$;DO$iZP%HM=}}-(FW97BJu+B?1#`muu=vP~qsMWzPVl#6i zeGX;D1KsrbJ;k%ov+Px}Tg}<5&~uSz%+rd4(dk{?(TJ>S@LD^Y)E>H3tJ=$CDa$kK z%Y^J_DpRyKESa6fmnlNIAilSD-tyetG7Wy45941GvF&ol;Mm60yz0f?zRE1Z9)O%f zR`yEAmu?@uCD)rA!bfl?e)q>6tz>VWJ!@eG{DIjFunY@ltY2Cy`nkiGA&2~aZX0J0 z#w4BMJJB2F z-U542eGZ>n*IRiqJQgoGm$_ehi91ip`U76qx=?%seCqLopVV`7`;i3C$89<|;Q18K z{lJ$qm&E1e*j6C5QKH}+X$oF6=OeoQn7A2R1Y@+`lv zaJZ&Umrh&;oBr{N^q`;KU6Bs%Z2l`N($RBl`c)O_#4WJtS68GHr@*H7RHUQF*z{{E z(upr%)32>aCtie2zpf%3*xK~oige;Z*!173NGJY-P5(qiy8KK9w@+526Su*pm+Jk3 zGjShm`ll-LU*MU-&@x?ObTn_lQ^clYYA=XxoXtv@BxjSNkV>ko)&L*-tsX1PF`tt={tKRGFkl#VGmW_Mff*5ez@50_h*a!hR^jbQ?eIQkh_)NPQGk;-j~CQ z$=1gHT$`OUsAK#IY%Wist9=cd$OhzKEAvc9=eDK~c_%p&!OphEsq?Mg(oXE@kw(fy zqHjC>m44P{9z)Mke@JJI975-6L+4tY-EH-+HjOXE*(p2D2T99vz66_2Hc6Xf&PRar zE1md>Y{QltXFp)u{PW3XYyU$Qvez@VqhKqNZW`4cR+plAdtOa*`2ACi&+hZ&XcU=5 z9~!jB)2}{6x4-|632LrmjNisDkM+A`Ty}>Wt6d8+F3CQJx8?(kuT^DB>#%#}q>V>R zN3vUQjTtj$D>!w}5z|S$RQDV=ajh-&8SBT+2&Clo1udz+L^2<$=)`qm*ykL37C?jU5 zEuUx#lwbX(;&eHqkms0*|TmFIt%P*&W?pd<^zp7p5tS!HG!Sae%4;|X_V=b+g2IuJSqrT1T!UfBh(O*kv1^sRFZIYKPSf2a3 z=IF1byMq3<`SjPcV0rA4bM)8JS3!SQ`1H42<#lIbk$=A7^AE99eEPd0Hr>*{0R36} z-n`{G`8P*@Edv$w*Xz^YiUr%RrF@b8S_UiVuh*x)l?#?F5(BG$h`deBkABZ^rj-vd*epEt#eHHZgX`lXT7A#ME-4gmsRM6k2efn!y zusn9yIr-PJw}SpY?bBcDg5|LxmeAio1^s>6r@yuZ%a_yN{tEj0v`>HS3znawzt2E_ z2N$5fO@;DB`Yp)+GWz2rX1V`G!a&dJ$VDqyw0YS{*}L^8^U)l3DfK3OO$-kb+ktcMEx-CAD( zt4~!eyNq^=xp%spZmC+f zMz-@JtP&Nl`fSy*(wXL9b)W)PQ&r2B!|HGatbV_0*_HIUNLQ`LDq!^oRm(PTcYTqr zT8~%2YM^RaVl~gfYJ+snIlU!hZmU|hjIK6BD`0hd)v~pWwom;?W|gM z8RMOU)!7PI-CDJ5nY`K*t$@|8s%6V~aMRWbSlv;zY?*A|)KdYgJFAwhf%l8B+O)F* zR)bZ`>b{F2tTx?K0jtkfEz7;Qb9A-oKn1KmSG8<8tSa@ZKdf4|99G9FVD*KnWfe<( z4pt{BV0Bm3vdfqk=3q5b0joc%TDDAHwXLs!)&E_!>`Lgl$b)U26?An^)v{$g*jA}C z{QIh9%Vc}oJr%I}4^_*S=?rbj3Rn$SEnCKeZP^M~?XFt3OlN3&z5-VFRxR6r%qhzD zw%04@YERX&W%8=+{R&v!SG8;z54N{f!0L-t%a-wAd!^2>uWH#cShZK`q7PIp+kkDO z2&?u=ogr1VY}q{6UP)K!s%6XQs(rKqR+*}0Yr$`E9&FE7(AE7_%dSLj6nU`yoeH|z zTeWPN&ak)$maUyPCo5p}P@$}B1@o*2OYJ=e%V4$Ce8#u;ENpLBj=oZ~H*P*qX734^(}lL@ zU5l=OABwi(mTZ}=B;x-8nrH&2$?h(hKc3uWi+ zvuw#l`|{?KW%iYj`KPL7moxVlVYMYx0jslB%a*}v%ldLynV(fHy9ziLVYQ{L99HJ% zRm-kp{w~65%eD$w{d3i_OQDS-thV%5z-p#y+2yP^=3sSK1+3nyT9$jI=jdw7!xgal zpH<7Q0!MSOdbR>q|7*dr@*!f+h&?)ckGb~c@Q>(lJ3#J#{RghZRGJ`d^9G63f`N^}6=M{O32cZ81xk>rYusg&vyLCLc+n~M13b!H|?Iv-2cY&)Ll=V^|Co;+bN@b0qpjB*gLzAJ;6P*2l2r?QUcTdwSK&b^cW=wiL&++t{3&9DDC`Okj1=6goCN$#_Kn91xu6UjXA z9V5JCD+FZplx`jWf6>p#MN0%w_Pj!P~pP)zbVnC=#ahaw&dIJ z-pJlOd)uw-c}J~Xn*C|vQTx>R{zbWKsI~1fqVjTgz4~Bd2@uD}Y^iBXZaIBeX{GnC z1JA3VFORdXw$C^aU1ZCRd~3jdgCl+LAFwo?8F{o{zf0+WI=XBfd%u;`JNXvqv)UBS zh@4wS?ezYWs>9YloR~3lxSCX21+LodSkE6< zJ5@*NI2iAGTgSqG_P(7NBP!UwS@X z+MdeJ53}WMRbckYzYS*7A+`6v3A0_QqjU`C0kd<;sE%I(W@UPU%FYk7rM~}jiR{$e z=IHG8e8P#$AFgsmS+Mdc*!c6)>5LqR;Qu^%Xp&I}E!x z^_A2+XOMxJ~J_(wUfBHd7DRvNUH68s$v*?vUuANL~^@&kIu^t4atu= z8mL=j{sbC}a$ckr-@UL2{b7Dl-u$8R36}a0d*KSsVJwbbH~Zfi_g{rCGyO`(5BiMh zPsDhySiQ^J-y)Vu#N48Hc0R_p(&?PeC$y9wsYfyP`;?b3E>*xx#*5XtZj?i34vJH{C|{VV8@DaK5nzpXli zbIL{)b3)}=^LQ#Bj=S@Q>E-Crsh>@zb`eK*41IRL38$X4<-h65C-$m*OV@_dxglcW z_=Tq(ybJLLiGQVbpH#W#Pe|XKeN6pIud?xH0;w6j!3mcbclsv2ug;l_D3722EAH8* ze@V}Ucob{9+?pvlXzvY6syy-d!<3&uqdiJ{UTfKhmw&{6ixZ^ zr|wHHPTk+TW9q(S?F`Ge@y70%*QhV!o-R^KU;X{3oaq#^_!rRDlaf_#WKT8TiDXzZ z=UyxMRlIegPvgfD=AfZmGM;G4`TcRWw-&&(Cl4glmu0hIe_<>|-2e5Roi#X534X;J z)o+Q`1tsT_-tMr>P5z7CpM@{Nm>t2jp}ZB$7Mr6M?hwuuNJ8kr^`eYd(iFV7KUg!s;3ysJuN zGhnVn426!Kz;!CtV)J;ld}zzV4dqwiRt=&9)0A`r?D5A|hw-P`&vt}5+Ic=ip6xu3uy5>u@W%eO{rXn4Z=Zvn zqq$h8@TvDB#o;;MA2`eV{d2viZuU8Reg}2$rS5!K_nxp0;#@y#d>F}a_S8X=wnv#U zl9~xe<$}*fx23YOn1j`)cU09b8&pBYR6KqqyhUXKBZg$VQUf$G$vd$^6Svo{01F{>js;*Uu_e_n_Jx? zHX6@>$%{gZ*VE&H>EhkwJ0U$-bNv8(P8_cJ zlauLs{uDoW;d`C*EB4X0vUb>qzjZG@#~F)%S)M%YTG(T|Jl6`Wuh-g&YYb(^Pithx zg-K7OmLHh*26T0iBIllLzr~2>j=ggbg`7^ZZnA*KO z$K1*G?$Vx8O<$i0VUVBSA=gK2*eV>#SB1m&mJmCZSOCCUg{3A+?W#6gbz%-x(@VKIyx=TB6=3Vq-2GS~!qX2mobaa(mR z1!K!G&Gq5IjYW6~UQ6g~Fc;Il+o(^texLoTd zJw64K-bHZ1`~R$c&H5hOYkRDz13b-yUoQxCEab7ky_`ZeIERronOjI}t+&>rH+ zE>{ek+x99h+$+EtbJbZmtN+iz+2#;u*(ID&X6Gos0-On+*UZ4#EOKYhs5&7lIEv$vKLNGP7*p_!q&=_}kdk zntpECrEZ1GP{<3k-|3tm zVkH6p)4|4;)-~QH)M>aM{`~RS$h7f4qi4o~7h@SauWhUBFU%3lM#i;?J+nI3FN2-# z$JmNu;9)*x;(P!36T#T@vS`!yk!`*DPCLJg?FV0rBp(q-g{^ z!rysffdhA-K7rnj2(9u#UR=iK)5X*XM|3=H_Qs2KS7K-v2IMpN#1JjRy1Z&0|qNI`%HB4W8aV ze_Z`t+ZQj(2c?i!kwvrkAUBIbd#>i{jQ_gxldWz;m;ha z9P)8!1b^`gu|9Zwc=CSMNSW;rliMHFud{E{ME_fu25pcuis-6%WWj@0gQD84x z9(^)6N&5P14*lE(d$PPAP1;f7Br_Ino$lD;LAqb)9I@nd7a zxG*J;IM*)gl6l&mzmIl*6dCvllOOS5q(yOO{;Kp&aJzfr8gPwGi8Ca?zwlkF`>Idr zO5!;@`;1+|mwxEe)XaPONqK#~^-t9HxxR~bir?kTgt60Y#mAX*{u4AcZZ`35_n%_# z{MVFpX?*Om_!SZh3chG@8CM{l|Coyj1~dSR!OR&Y$j+Q=+8MsL7|h@|`~_#+`K*ad z%fniM%10N$h=3Ebp`o_2E$0x%!RsBYodo0trn1*lqUHD$TzW2qK z#Po96I*|=jIM1XMgCY)WQ?}1s6hr*SJs}*AgWG9y#VSs36;AiJou6@U zQ7jMVa_BvOdZw@`iUkE7G7n5-+&Z%n3_~xXnf1(3Z#KFini2ZtAn)+~V?De{b0FE{ z;^^}_r*ufXGzd?z&KP9b>;HayT;^?GiLNn?W}3bb(%E(4duS#`oG|qP<7d+PigO)w z7D=()6JH}DMt9%>iIHrh-@<3&pb>LD_6EpbjBG@&>A|zSPr?~$y~I9xoA7_bkoc|r`9?-_fBy%hmf23+lA*NZN#_@ z&L4AKCC)?=?Gj%rE100)3@|Fj(3!%aX}IqM_bb&#tM^K7nzA|7ZRe74o=H&l_|Unj zL9(wkSWBE+jf35!J@-_uaF0u1|C)yD=IcWKY@Nb2{kT&2_PFM(uf>#oq_0&t9px?f zvp8F^+e4i0Go1dN(TwMf>iS&~JP>;;&G|3wjH?~f`Q!AV5Vyy$TXYt0Eq7~N#fNjF zV{HXIZ)6PZGkb)_&-Fe9zmtP=LzRlm4Vdk9sq`s@&)>f5W=T_Fh-BQ5*aF+J8SK;1|UP@hz zE$0De@+|P|ol$OTR=Ht&DFeT;YFiIQ?U(`Ql{3l<=ODB2J{2bl7_0qMopWMq8m900 zwia4M-`HR{+d~|nU~;lCaBr0zw|o?O{v_#k?##x}EAe4&FMP_iOP@jaXA#|<6MSK7 zI$lPfAvRC>F~(371^5Y!hp~~9E>`%AuWJo5hPqZE^RNj{!+$^UbO@gKB^l-!_p}Vv z5jU5foP{s)(O;XY{ZInNqtr>>nPZE}38ee~06v~kR%~g=PkyXii}U`T|_(3z?K>sC{@4DK5ND2^SG#sa8XS^MN`R(UB5&>)X?8g6$k9B`HVl%NpwZ8 zYOw3$`XAdxq;C%&Ow_LNV0)HclVY9y1*H>Ti2h$0JU>gE6&|g9Q*NYNg!~w;*MBcs z{~nY6Rl|=xAwSN2CNny);0pP)`|N!Bvu)Jvzt85==>7DuFiJl~#}`e}@z0)l1?A1` zN3;%fNOT+FwSZou>#C1WPR`4^59pq~m!?AwJ;%89S;pAg`MZt3ef*(k(T7Q|-<(>x z>Q_H+U-j*ucdz>L&sVJ4_wy$7uVnBYVvP2wB$ln5dxzvF{kJjdKV+m+@FH;!?xz0p$lYsaut zjAIj$&Hycu-)xt{r^*(*(Kq?}@jVv7#Jt57u0Y2~qDzxD-p-tTL00npJr`OQtxB9aDd({<=EA!1>^j_e_el$!<;EFoBm&d z&VDYr7}Y(!{}qFkZxQ|D%k@%c0fv5q|Fo~FYs<%G@AIdnM~jB0>DK7s;#=p}dt_7T zgpXRV+g+V*4tAuM1vjBbZ-nRHTSOm4pL2yqCIyd8{vp19nj09b(|!Mb0Y=fAU)^1t+Dh-o-ipqK{?}37E}FRY5NE-dpPM~4r0*UB{I0j4p*MA?{|tnAWR%f37;TXr3O*id}g(BWKVD-GozQTf6zef$db z{ilwH{X32fqknBKrM}!qAGXlUX3ASZf3*~c?{46%*CtQP##b$+4DH1x%wGq8N&blG zdUsND-zXhrHPQYS6lxT%*lj9zZCU9Q?aW(P0;7{%yF5MPyR~pi^GLuto^4W`0yD} zpSEyg@bBTSv0;9(1}2jv+4XffgL=0mEd3Y%yxrn%>w?}_1m<_!5`wpL0$_yXMu9Neh? zd5&=KzUb@}Kc$QoeVD!r8y>Vq|7<1xs@9J>NB^Ap2y02{<&%@F#dmTR zeFr`UTLnx02=x9%_D_yL`^du*dOG*X(tWN0o2kp=ORRM5elD}vVOt6BwZ|p~?bb^^ zHY%-+pYv{Lf*JE|Ov@LP3mjnN>-OH?- z4@G{@YI_A)LfcI)X-*7HHnHb4Y!CHI{z?s(sj6WP7;{Uf3`>8LnSQPWR$lkzqWRe?=#D8~IVne^S1bdyzYN>{QTCOI7z{ zEKcGBk|>BPX>{+K4*D{z#HQy>(ZIx-iP)E71opZ=-l2V^DaeKT5{^9Rk{YJZi=T^@9#H% ziDq4E;g{}i{Y86t|DsB$$|PWIq8-XpDCi3)J2%&==VZ$32>u?sHb23ktA~R=O-`PP zHHYYo8f$3t ztg+@Ks>;Ls@r}LW!RP?=_zjo0@n#F-%@)R+Z@Ro-DSs1q{x-ZvR+cqqxX9B&`6{EG ziMEr-1muswPMPHm$oG$sP9t=zA3qD|a?y6y^|Gx&@l>mP5-S&i*8$g|Jztd5B>F7( z!>|3wFz8cs6!Z_YR=(kOu$B!Uw6_JvvaMxK{SbasS8bh2KNo*0op2*OiBC2D!w1Wa zS0D3yuzcL>9>wpty|OC;TRrP+k!>wq{1*86TX6Ds=uJ-`AOD`Y%(t1-`~$Q)WnT+r z^S7Qd*^KQ$vRSr=N~lvJ7n_D27er=*kpJ5XU|vzHuZz|sqpLOurJ1F(e#_)P<)1)L z+OKj$8@b@xn7GwOPOlTj8&M!J&=2CC(UlxS#SzAHR$>U$%<7TWY z@eF?NX6_RCwtG0y%bN0+yB2h-6n(iEIov3kdNZ->gVz4G(pAW_t2xhb0QuU7&T<9) zd#~G=XFpeC7QAOtZPLqvU~?O5sQ6N#!}F{5EpUrQq(>2-SLOgYr}wJYmv`$U=p>2SdK_)mIvI1kldO&PSwGd`LrNZ_ z3C3=f!Pwo03f@-J|9yV^e=O?%J$IuKhNUpZ;piXyZw~YWqtcs*nRwZm(e8cx)! za$AB_KYf05Ohr_2MZ2UUsb1;isyF{M?YRklh-Ig(=cHLXUd=i8=_~PVr~gYi=0wa( zN{l(B{pyFCAD>yao{PgX_WY?%oqyx?WzKbl54jgi-1k>;J$%smu@+We-occvbG+}E z`@QGw;(FJo?@Pmd6|?AHaEbmu1s)azJ0kiY`UvpB6QwI__@DtiEP@Yif)7s8-{OPO zm*9hles-1)(Ff5UKGO+lGk#0e_Dcu!wDw(mpyYS*Ptc>EKWz5=^6;~sU+&$(c=Whv z5xVu`&Fknu#Eow+?w3aqbsLuLa2MmNnf*l^C7iJ-T36_LW8Qke?8QdQ@LYqw)#gF2=-l|M-dmo_p|6bS=+;t&IdpAW zr4c@Lt-im<+jtr?*plz1o#0&G4bMF5zA?);jq^Ke_B`^ey{^Kw(s*2d-RwWapz7C{ z810qUcgkx}zlHb7n)_7EeP_*mPtCp2e3*A*&3ijjPcTrv!J#zvdkKG|2fljWd1abB1invL>;k41JaMpd;{(GlX@Psm_+EFKt0L z{-CGF{J(m;EgaZQ4YbL0 z3i9^OnRlV(y&7DH>4xU0L**!)WN@KV^h}H|)=7xrlmmXlh3PehD}ArZvs~E)z5Mm@ zw~@bo&X#8`M>*KMS#Q|dlyP8`JoF=Nxf1;*4-dA;AGgslPYJ)Ne0@V#5YATQFAwZn z+Zt&83eIh!-;_4$m%^2_33!G!dAzjb9KL&k?e6LP9Kjs%$pvmNc74uF^l;HHF8@yD zq~AVDo3HY=%hCh==1cygZ7&C zyUqHRzXM&0nKx;S&XSk8jN+{&-{Ib)?|h5%?mFeC?f;vV^B^`E<+%+1QlEBym~N%= zkS@BuyL6}a{=0W6pZcs4#t2h7beN>_yYFXKt>Zk%4z{kEyil6t76x0U$yQz7p!{}zq(zgR$aUv9TK1C*d2YV)?J8>iO(~8c-k2MIQ^t0 z#~9l?LqG0Td1|k|#~xx$6F$_BzB@Pe{jIIYVUu^jwm{F6(WmcK{>P>bKD%8U-){VI zm1gKMrSS6`@X`a1!DZ%atFg8R*(SU_s=D>e9BWP=PW;q5@&AtI2qBL>aK?BHewEIH zUa%cmVRmHgohx0<{qXL*@X5YGo$r=rPW&Eh%bUS}O8Bju@VY~^=N^tgABKjJm*|F@ zB`=HZUPhF`j>aPN!E>5&Zl2|lPRx(>m(9?{V%{q>2*lJ<`M08q8xloTBi~Rp|ekNre9TVORU!kwB$|U`f zYMC0xc0YeQ{WUjO8lz2jsV06SsW$Kw@nDyp(F^RCzG3prx(D1v$&|xAS#2kF9cRw@ z7;MjH^sY7r8*yl!)jRMdndM^)PJh>|@6u&U&>U%q6On4eHoK5@mp`GN`Idh_`Ukq} zT5K&%sc^jcj-_u<`r3MwzG+t#{)EBLe24yeSl^6Bq`!bC=wx%5cjz&Dz|Em@ioDE) zEFIs0XJ;wxj#&G1?QOuci~8reEb$QnH<-NC$Ce;nzs4ojw9ei@R#23vD!F(*hmmTMX2gzaT z?Ph!nv~Ht*DE!K8U;P(u6)Dd}<)H%!CY>Xt z^1ujVMMibSvXr+z=r6!UN;Ar?m4b09Htq|9{^C89g>5x>x2^faMfc$GG&Zq~Hdh%w z*q>$$s-c1I*jId7(Ew?`jt?@tvU~qDn$Y-2ec=9;jFI6v%K!HhHbyc|X^a$ZHC910 z(2B*;@p})xh>SnRndw7$Ct*1E*U+Dn3WE*(hLhR^RGV3nZ`i16h`5Vylf5@79 zy^EKAf^7J{pr!n*TV>Zw7{Baont$QPG~&mBe8tP%=EYuL%6|Z|P`)ugCM3VEJrz7Z z>=xPelsnh1&MnGs$3AXFTuoktVW}sQ*KFHidF|Jc0whYRcc~&>wPb@K?g+y4z%ZqHo^G zH9?=QR=qX{ewu#S#2|RN??NAupFGHoWR?dlZ;13Sj~c^idBJ@YTX3Sd1pR-9!yci4dkl z0slH+N|atez7j9p=w_D9{>$F}IXFT4?|uqecvARh?6t90^q{g!8Tzkq=0&av*+`4U z=TDcQkD=$d-~arxCDzD_V7fSrZI`t&<^cE=JpYRl>ua{&am(|kO4v%+)9#27cm#X! z3g)`5_^IcQu`ZHA*Kx&s>3;0O>7hI=z^AY=7wU1tpY5E>?+iT0O4kz;J|nv%{RiB# zBSTy5(ho)N==@K3`ucJrq_0_ed1b`)u-4=pIzaOnv79(NnzHYN(%Q6-kT0_9KB4P* zOvxChdf?*$J$s(u`+YXXq>8N1={@_S>=#^M{jGDXRVKAiCinOsC791xUzHbzqrb;cyx@k&$%a95A10icWYH}ksYGNPruMm?4-~O7;m(n%=;9aTjrU* zqz6-s1nvC!H6-Tyfzr~SDeZ|u-;Jj)xA=y?D63z9OJxuB`Zh#!j?f1KD6QO_uGMz4 zmZ257=X)=TpUne!TE!1w4PG z$Qp!|*J0m}6&LyO1^RJC&X(4<#xY-Ju~@oa&!T<((3us-2be$Gt>;-V`)^(8LHr?+ zAxa~h+12yic*Jj7yVkcfzKx=3r9tLD0c|UOPHp_Ta4!GF4wK_MM+cOLv6uG23xmiF z<fC}-5&l5e2G@^k3=rQ};B{=4iv%aWKk^?BZQIC)nYZIJHVWn)J~i&@i`dL)lsHrJN?3~QZF+*I=o?Wa@_-Fi~0kj?P>PCUu{+sYwdf*;k@R*E4~5wuk$ul@X0@z zg}&E5Z5|jmkF>?cpanM~K7zK6w8eQ2zbA|~h-9PhW?O&{;Nh+6Gup68eF+~dQn~c! z$-*Xdka^Siq^o>A??SmbbVhXSR!eR!$<^co?!pH=ElB>VT+7FpZe_P?ZUt?$TRmfn z+fqw6%B%V{7pdVCp?rEZvOTmX-*Zh!ciW4FzuXKRt&rYbL7pOC z^O_4mOWXLfJra#$!F=vF7xzC^&s;iQx(E1L1Uc8`UVk|+g>HMF+r*aPC4!52Zas6M zg~<;gd$LK52@Oq`x(&+1`fW>kAu@WG#*0i_(&DVZpPX@{@5w8|F@tAxmTmdGYYMW8 zCE}J~uVMegttWcebKUhdd?oL8dxSsYHRkAJ&7JlXxwpEJ=Ym&0*5r+=PE^?+8GO$$ zFG3a>45||ttnRsC*qUb^70?dKS&IM2=4mk8>2^$mfoH)09VY~b>LXuWSpUQRIXGq4 ztV65fE)(i(!?#G^+X7E)W?b7;EjMc4A$(D_<`xitm>nA6RO9TDQjRiQ@Fk5~dggt? zYy;?GydMqUFXR1(B@5Bd^!{$W=Xw`U@&_>LZ8n(cTllg#d`pAD6T;%^EUuW&Cd$*M zg@U1)M(Lw;w8{E|bZXxmuky7sr!93b<1xkRzh#!{eRVaaBlvA)w)#g9POQ>zIRTm zPiLa}etAbteF@Fi!+yC`@2QveC);SJXjS_}wlNpfUYLA*d9qb!XyM}*8%2tcwo7>u zml7+of|;W1@}6FUi$=deU+^w0bIs^DxC3pATvfKGXnVjtTH2`G9)u3E5xthB0yHy8anrL z$&G}`je^Pe#!C5B$&9#QhqfcR@lOVumls}U0T1;P8*0wFC9}3-Cu;KeMrKuBvAl?z z+(K5UPGIPPeW<$S#OytAyie<%8V4Wc=Shs>+c<*IJmH*rw;d{x7+l719=0g5+ zpAXw4Zj`)e*Z2Q5^1|(y25*&T-5=J#`{5~`#l9;ZB2G^Tg!b5S~K->(Y?{?jO0WKIidY> z@O&^7$_Zr7=uhZ1*4UI5IZ-EHbn&a6d7rLy18=GNoI*!IPK5hnM=4V=98XYYIqBsD z<49$(mDwDYd5&b0l>uyFx#x~TEqWh5FBl!MJje!g>+0ETzZ|R4gG{?X*Ox7K&-A&; z7xqVU6UN{p(p^HmrPszv>}}z=gD(`{?_hlZ{XqB%-{Tu;e%TH7-s^5H(kD2BC5@ie zL!KV#7CxWpjvDWxLx&!b#{hzDz^UYI;8{Mp?%Fxag0~Yf=Te=Uqrp}Vlg~l z?>W^%edGV3`WC-LedkzxGw}l~_TKk%W_myW*|D&nS+`_Aug;k8Yhyh&Kf23Z>&7kC zQP)}Lr`SB0Q)DY6PW$~k4S$E6)+DtD!q!fTpPkqWU(~|~*Kod%{osR!!Vkc^(#oH% zPV>Of-*6Dyit^jH-3^LgpmNjUdtz{=inl%0F_dOcM5?8Y`B*)3pGIr|4fqFLo!sQ! zq)M2JJDu?o+t9zN{Yv*I>p$XxbywgY&tKVa`!iur`*z%*INrmJnYy?LfV@Afx{-S>_P11g4MUBBsc}HQmY-%yV{5bLB^W* z(8y)-$*|$mRr- zVn}GeW$@9ht)t%|&#SYag=@SACL%e7z0vPO$5)Cyr0p|pM#bAgf3lGi(VV_p>jm0d z4b8~6Og?6bCC))L*oE-vQX7&Vqwm=dpZo(?7rSGiHTiMuCJ%0IZQAD6JEt|YV^83F z(Ud3lf!40v;;|gD=4dCeES@~o8Ydoy{K?FY%X(?4gLT@S_^rGzNR?9fl5+3P+n(cI zG?&PKlro3~Y4PeR#FhIxc1rX*%a5-^X-!~0(ZySjohHvU_I`MGN^$PwSG($xpi{oY zF>EY+A4uO7WQ=#dMn2Zi{hpcK-PL(D)#-hWyu1K;p|L6@JkVvWa(4mc5SQBE>J96gSyr>k z0{byGjO z2r(P*NjF^F0bKeE*PQab>}S2tB`f@~kMaOC-Fu$~4711P7Nu2w;OU$W&+R)R83Q~%{>hhE zi})gAj?QqxKMcHIL!b5mV+S_7wKI z#Og2VFbiT)s$GgDx)xZLW^;<=Y;lzpcl17Do6>u}+{4$Fx_x~y#%jv4`Xbto%7!N3 ziQP?BFE}+kj?24E}37&C1|xhl;gSzj+a{V3-Q|L>3Cmnh}To}S>Es#>D#n# zuJuymHLWS~-H+Qd_?GuBb4)a_U*DBpG*P$!n&um}|0R)L>@viJTH=z+VxAsIqgeW8 zi;VnW|GU?ffoY#`?r~{jVW-le zKcsbClJ@#l{#I~2eDFYl7-|MT-vqnT2nJo3Ou>wA&g7#p+CrYa)i#sH`ht9~pg+2O zf82UJ;$zW@*>O_=z6ldM=o{}FIAh%rp3XGk|Bi1D{xeS*Y(vkPtc$^)8!LzKbKL(_ z0-k@p>~qN4jq!lJ?>i^9isqan&M^B{*#jQnrv!~o$fmlbltO5#@6-;~C>cj()5d>b zVn@=syYwBIvAwwKmwjd8V#!}ixGl$oJLXR8KacXOFRhF$WnhaB%h;zf3JXluJsEsB zyHatBi@Sf>7u=a@mCm938i$luxF`<7ujrWR!JxB1eb{3XCG3JT>$CLORLv(G`0$fW zl^4GZjKU4|F!4583t{|-wR8BFeRg&a+BNX>#@pR;)rkzxfN3=K_8k1$CwS9$(VnC5 zE@d^Rm*$Ypk8c(FYE_oS=iB;q!sG@qUP|i% z^W{S>G$1F;mv7a_gRPOA<=u8`JGO=5r+?W8Og$Fci6YmunvcCCrTOHrKg_jVH8~l4 zgSOm<4gt*g4>`ABYc41cw5m>(EBF;7K6oLs61ksn^<$E2Ippn1!53^EYppcUk9;#9 zBvFjMFW5{P&P`dzeBm3&KhhZ79li~MBWi>2X0QXV;CJr|{fIV5=bwB+?GQg2?bgtw z*|DHUE32FG&%RC`jw8ir{p(4_M)UosNS56?u@(MGSI{@$mv%RjYhw&-N3JiUf8p!h zU95*Dv^FhRW8QX@lAfWuSvR)0T0DC_<5F};e(=dWK50F_L(hzN|EjB%Nqx0)A@0Y! z(4V|e3gy7K^h{v$wyr}qj;EP3v>R{eY;DDLKp%z=!0$n=!?dG&rS%;*4UN0eJmH9H z_U}o1$lIuD@+qFy%zT}ye_B5Ik5T66gNE-ZpGy*X88#Hnf1d;%$*l z85r7?hI;*bYtp`8(bYkZzK*qF z+CSQ=w9isU5;$zU2X3EcU6|%8+m+_~<%=~qv9DDyatfPZKCjis$D$s~OBp`zg@SWz zb2_?DlZR${=ycbLcKBDx>%%l%cJR*V!uf zdRkPyDqCYyZQYc;Qe~UW3iAkV^|60{aI1VuR4-%q4xiU#WG_5LzJn!X$sT0rATXJX zjqGX50=!f>I4^zBpn=BlE;+A999{%22((b{~Ggc=P4^@PlXR zL-Hrho{aFlw7C&gyeG4{rkx3e_||?jK0@xBTj!1d@A(w zW(?r_PWWNJjR(XMETW$0M3;Sa?_QxK4Iy3lm_Jw2Cm>-jG_WR#=j$UhX z3e6SJ^94^SW%t{s?ssPWeUOq47~Xg4US(>W(mVb1TzgI6^QpB5d!Ik+#6twnc%~52>majQuMoRt?OH!^?`d=O& zNBHI#d@sD8Wj*;D>?_K$<}(`lvrEVDcB%G=COqBU^h~73Rzf{6|Da04FDt{k4)4^j z`r)&>#I9M!etzH#95cTIW^@A0id>1kQOOZ^uJTD%rhBKYX(|0V`X;+^euK|LEUh0Z zuik^x)C~B{{-OO4u5N3t?YUq~=keg%X1~&RsN3MBmolE#SyQneXMKA(FLw>l!Y@l- zpW+AK_FbpLw$pD1$E?4ALH*^>tE}(TkMx_y0p`2D&*-P-G5WyTXmd>aPTy)BElvNm zTVI}`P5054(8}lw^yLxy_>;7Qb)L2>XvdnC*8E32tjsMNkSl3Dm5@RqE@t%AuI?(l z1=~C3=R-B~q|ylMD}NKq%csP(yQR^r*X|wUUELP)9in>{lwma$Jx)=s{W}6ui#B|Rk;KF=np(a zG#2$|({Po>>Y(xVB5`)1nR%sCz{#_K!+*0uSM0#Ve?F>ly;cvX(inVY>GNBx|G!@; zQJ$x<8MfJ+t^Y*vlJXmZF_jN&Hg}BZpL6N!^d7pk`k~tw!gMCX(8KLL{0GSROx>uj z3|?W3HLcU>nZz~+6`f1Ipy&JYvOdO|^6Hz?dOFRS{omr65!*Zc!`P8%Ut~*`H8bS5 z*6@@*{k7Qf{G-G~{u+M$1?st@evOqif=^J&*Gqr?3L6OPE!eNFN4~{~DZ4&)tn@U1 zaUSJpV)DhB`tMkM;Qty6>29RE=wj=b>vimR0rT>-VzPeejYbo%|HOTs| zr7VM2Dy}p`rcNKKU7;(6he2RnDqB*~Kj(d$0?I0AD ziZN#aV@u#J9NM5K`hppbe$Cf;zi0N_bz8ZtE>rH+v&y~0$Jq0FU8i&`v}ul_TifN0~QU;k3OR2Ou7E%UX9N>^Y< zW1lo*Q&WlYZC2YxeB0E1+AwNu%=k9aHr5Rfr)5vn`4J|4>#n3GoSXYDCEzbcH~2+dzZpS2tR$7|#?{f+IW#M!L-R)5)D zv--FjfUhn`23&();PU;hp=HFq0aP4p6`T%RE$;NT^EkNsx;l>NdC)z=p_xkaOcJ$lx<^DT#I#9|0*X)?5c2)>FGxMi| z$D!E-b2(QbJ~Zot*&2LH?^`5XF~`ujbV7YYzf8w9G+LWSFo2H%l?Cm$V7Evl$G!gM z#&d1N`Z67)X?*fUOM5eCn*j%F2Tl2}0SA6AwdGY|;JaWbl76l}ugzoSR`4&xXK&~X zex%6b%DJ*{6K9mRC@u1?pZ@JE-tGD!s`W0DLyp|t6n$5_v0eDJ7VOE$0dys+U-qUJ z{wxlt(uvNjOxDCzrr|4Wm)1|MUF`Fp8^6$Kh+pQ+*IN7N6Z)fyXDi#w*iLJkmxI^p zz1mi-llN*z_&$alGI(63yRE!deaL={@l+dmPAHAZ7vMz}^|60&KX$m|X3wHb#$#k_ zXWJWxSmXVuYnN?KvVZ85=a(VI0&oz)Xnlr!G<0e$FO zeVPZA-iv;)K6b#~@eD6Xe>Yx2&TSU|lrD_z_wsJLjsNH?Bgn9{=bx!DZ5rPod%;P2 z=MC`97&3!)pa&b@z(k#8b*IwsSjOb>?up~Y z;m@@|vo3#ENKg2msLmo+CR}TiIeZ$`pL-^bs~+vMwrj$#e|6rHVYKOAyRH}8d@h{d zoYZ*}DWd8Oq#b?|>jvqEZ%XEMx2-QTAHtU{IB9-t^~~8Ai|2&-JcIFO&))_kd}TCr z!jIE6JS894v(mQmsBX1Ouv@va#-Tsz3+37o^+{z)#~47zxE4KK{)3rm{d2Y2>2ksM z#?n@H%c-@D83XWGx9A^w$kMjsj2}+C10FMi1DWROOuibx#2B@VZ#~Sdx}o(c_8%oal5p{B1RU?wZ)IXLLgQ5r@y(^Tsl?eHDFHp*~TmGvaf4gi+lE`0>KxCK69BVFT8+Dd!!*W<^?eul{YiC@Bqfun5@~Az^ zgB%!$PwCm{J=-Gt$4F%Vh~`k0&<2vs1#2WDpgH5Z_MNVdweQ!+rouY-VeZ-U6U6c7 z`Jbu>TXRfTzP+7q^VsM2_u%XK%qjo8>`2rwiE7g&T{_hP>8y&IV%~?QR?D zWPD>>Ue@RqOMa1FW8`3jU)g@5F=`Gx%a>#vJa-x2L949S^^4Y{H9F~G^oMkT*IW4^ zUuax6o?yI=(h8n1?ZaW(Jx2fNXqFb62Za$UUfnx%pFPh@>t9n@DZS`Z$b_%;41&Y)6%1AX@xaY+1P#=ri~*9UMGBUHCr0j^LbvtRdQl2 zSC!epRX%TTrfj1_%8|cUgUaz`y7{_4Tb)Lu9=>?frIXK47QTLW`?Gm$TtOaRK7}{t zm<_9d9lN2&8*s!j$Qj`cpDDu|-$UF;#?cQ4pHUipQ{RQ(I%@D{awy^(;FrFxe6w)M zx7XRXPkr|p#UF6f_q^M@Fw9pi6WUS?fle1=t$&QUKr!6seD##=Ybo=Kv(+ga**EDk zp&eSXZfcHqnN}cIuw-g%rFIJXwe`#gB;BCIewBAxz0srvbE~PcZ;0GiiO z>nHS1X^IK`Pr1X;({5l|PXGLMvX%3NRDZJ@VXyz&tbWEe(#ZzI*+9+z>}5v&OxO;S z{?z{o$}ETVBOCRrse3}_T9wA2%?QRbK1~HfT4~(=|r2yt)h}*?uxp-X_w@YhqYyF9A^0>)+JqV(`TK zq4?yB#d*M)#WwbK%|~f_L}wv=G+hkscrW^cflCiBz^+-ns&T~owjFI$7Pw;P(^l6v$w0LVKUFwV8 zrzB5(9?nLA&Xd@pl&4+gpkGFIPhnFwxgOS-|7UQWt#Q_sHsYuJPJ8z&oofxx^|Xw+ z*Py4P6TbeZO%HgRZ%uh%iE^{ZgnIlF7Q5G%uEsX~Ue3uLusQWS^yn_&YcE{E-{sz3 zF?zY^{Eqqp>rIB!F?5zt-@}(GfgB$l+KO*&9U&_d?q2k`ZP3a#)kQz1bRF77Y%5~1 zCwq}4{E~0;bOC)N^c>`JtVd4%3>)1x*`b)1uIG&@t6lh2>LyRpux`#!OdO>U{{1pR35fh--#x6W6zL zy@;#E;=b^DIakx&f%~`Moj$H_S#`lV<3IuXoviJ5SHW;rtGj>+3h3 z-><$sFXa~d@3+g3f9gBmsIT6CJNT^Z5Vf$YE`5V`tlmcEQOx!B(YIfKuljVab=by? zdl&QJ)zGGc{t}$|B+{0x1}+MX>e);jy)hM}K(`3!Bw)V6YrIgaeh^){E3f5-~x zzh2*|FF~J6W*YppZ6jZ*^gGl!A6q%`6-RXjJ8`fIoIyy8$Q5p3HW%zpwZg|uHeT&E zS=lI@&`v9ld7pEe7`N^Sbu`+j?77>6#6d^0~k^pSeTS;dOzXRdoSxOjjy=BwCmu{wF!od+#np1(to z!J8ZKN4tJ()y1qiTR&)R;%V@744Mm#+E zV_lSLuW;q zj%4$Lmo8&%c>Ys0595mF2`^Re>#W|zVZB%XTJT9~+tStBD<quz~Sj))1;{C@)xgUCt=M%28ah&Yv}Ja@$18-%aVh(7f_Juh~zm-%KFiPGehM&CvIr15Kj-ge^C3{D*5 zt72~35B>q0lwZRqvT3Vct-XcsAF{f__kxEt%_GnT_7CDfnbzm^Sa{%}2xitc4;#H4 zH9g_v&??n5Jssn0M|xrG(C7wmr8xh?2VYbw-!|Z)k5!)fH}2^xYGp!j}Z=ongnUfAfG+OC}ZFYB&j{7d=ysoCll4&>ZgV#cpMvqyP?9qdoedYOuT z*{ix4@8y^9&eFR00QBJB89lqc(#3JfHhTvQN_QD+7b6i2Lm}@X0~ay}>V*b`r)l;q z*-*e!JN$h{Fesh&28^bpBh1#(sH39{PlJDJ=TN_w4^{_0L}49Ir3a^UzFBpU&g#gX zwT`7$hj2ifg#)E858*c);De4MD&3Ck?dK4>`AdM z8p)r2`dj+Kk)em6t@-Y5#>*D;hQmXw*QuP+3Gfq+^^D~v7qLm#GoCl$Gqlj^x+T<$ zKN&uArmxof^PeC+S77;R=|1@ABh}}BEul4FPq*?)kDy0nCV!-~@oD4hf7=$)?Udcc z%Zv8vwK04zKaO7IK^EDbgc?1- z+bgPzSb(Y z^0$S*&H25M>Ik|^?ug<`%9p+lzFI6jCK~G$Kce;wnoti#vZA2jhYzpOR2#2wKN{FU3f`YRSo(8>~ClfO%hfpN|$_#JPnXu8Jh7x?;aso0+0KdXcDBQ;D$H;AGK4@@M$#`Jbc;?pLXEC(1{;x7k;qa_`znxAB?ZtJ^p_`+W(U@{NG>W zYcl(+&?mw77=QQkcZ9zK{Oy4M`-HO#A0U2JD$*$q{-Sco$MV)U;LarBA!ubH>FTbg zg|a(IZ=PVhKd#vQ@{cOfR>wfS>fN#Y>h-~xWO+G5`{gIamr^RW&&HPFKTB|L=gcTa zDTPcYZFoOGnfvp%c%8;#6H`AjaiaK1*2eeQ`A_iW!PCqQJ67$B_p{E}QrL~YFf~Ws zi~f^Pc|*@kojam-=v{HYUxzH3^x?VL?`JCD>s>g6th_`r_CRK8jiic$jatW{?)$Y) z<9U$zHRaa4ADsPu`kA`<-(l`|1bIxp(WR;jpAOBbS2Y}GizrIeqZbWGHd``4k%ya%J{o<6%Xnv{==?C_hWy##~sI(Y(Lg=FKcM>HE5!Ze21J zU#WZ34;!*M*MWZ6;m^Gd4zMRP7wU(jz^OGO@%o`T_?mVKIJJrLUn@9}8&i2szHFYP z<-upETF+eaV|qPt%d=}@1l^eU{G7{yL|skXF!qb$XcdgLvCo(@)j8K-b1Ss!Mn_2Z zs^E(K$m$qA_@vrb+t&r8v1G4f{XsG}lC`9tYD41kUDZcWYecaT?TMc)*9%*Go3uBl{88?K z8(XC2+)onMe7^K#%6cTybt0G$2CU#PuazFXSaRy%6UeuLNdL9=3U=@_XIt(4tTi@` zF@I`x%!Qw`;#uU#PXte?=o{rEF{@bOvg%Q)}_ z9>KlfN9H9|w))Iu`8{D@)!1F^z3=x~_H@Ko_!3gH}_ z0q1B4=OO>z%B5dKLzHtIyQIeOm#3x0q^n3zehFIIPMMS~J}!U4%6~-kB)l0-iXP;f z2mJpDbOPI{jyd?~Rno~ExGtJp(3m)Uch3-OJ4#bIid+cScbNZI<$~HQ+M`{kD$L6y zL)2!;52H=B`_J7**6^-09#K)^l~Ml;r}R}MFWC;W}jDillcHNcQ)Q6#7rpXYy9`l zD(64qdDEX2=guih?jtj2;(se-{ecKv+! z)pZwQ`?%1~fc?D68M>FV?SrpQYF!(;?P3i^{!CwOe!%vc1bKWdGZnZ&UA#G?8?t!D8^hX-Mho2R`ywpoe8Bar>(frroef)K;uDg9* z*ppVHcO1bEaKFk(jw`k-^r3Z?@z5@yw2E;JY{1~y~E?;@{s@~xInuqbcX*ET;Rt>roD=K{dpYk340x+Qbs2J43*KffRSCU&P2e3Nd= zxj>|UbLC>*-8{j3<=}A^^;ZfuYcDp9sWEX%x3E|@e*U*t^Hu0`h0>|*bLkghTb352 zTYPe-Key|OOZJu4#It4x*v;H+ZG4lr32?q_gIgM%-Icy8o>luw9dX%UGHQ#;(XS03 zY~Vkqd;{g~pE$r=Y)j2CCFyU z9^)Bgk?@Lb37)a>(dH%on;*Ze9`r`p(TtW=ujt||dgB~$H5gpO2cM1Qrk61@tv!Pa zY`k|@kVnF4Xy<*YeQFclw)-|)|L1H>A2;nH;ADN6etxl(virfBwPM-dqxIc@AucdxAl$i{YcIGLpAqDYVJ!l_s6F0y&S-tIX)9ce^?2;<4A+pJgnyeH>jK`^cT1OW zRw3>HGH0)F#<-fUp%twgU5H#rv+wYJ=1TLJE2Xf-SsG|PRbcL0fDRcqw6}L9bkw4_ zbMj$AxAOT8MSE3@&RWnL(%50^iA~0Q{+1abfy{Y0p6Rs!GYS?t~!{*q*MnCW@nc2U2z%gyVBRDiQu4bX86c#I2Pi+yEr`f z3xna1I|V*dhI7_BsqYl!^@Zj2s!r^Nt=J9cga2NOyFC17EAn^64_Mn1Ze0i$x?Hji z9GU-L^Y=7g>Xa{;^n*BlPcg@qQ?7yeHK&-vX3>GCqG5VoS^WA07>f`YIkJ5J`OM%0Uk#1h+ zN?p}g;OJCDtBn6p0OMyt_LLx~dq6P5v&AWT_WgOOo&Sfvc1r!3e-yba`c;2I!_8yp z%Q#(s$YwTSD}^nv!J+DtoH|1He3UJ$ppVF&xo zm&nsq{igK>a6Y3lnRB+G*LJFm+4AVE z;r{RE_G&zUx6>LEDmsHs=hbl@z*)~>z=t9~sJf1YcsU|mcd^dADSciLpj&N3x9TT` z?q>O6rCSmXUB$&R?QP4RbK8NZ2YqFebV13&Xq_3^BOSD>{nA7Lz5O0C&*nsSF3KC~ zQZ_#tWUjQnE^YV2cduA|S8|K+rv6S3)}_=>r3>otCr)lrS@7MPvCqC8UU-B)O89=X zF{n$rZ^R@1z3KB^%f`U3mklw+ye-3<>>YP5d!#M@Q~cP+p*`DUncNbUC)>N~gSQtn zwrb9%j?g*Bso_O5M|z9oC5^2Kt#KIpnZc*=7w8vU3Ec5ZGfv4%?>d_w*i zJ%=#!th9VsJo+tSHUk$rU@!$2W0T^;o^bur%c^x{iQBT=mr=Qde5NTd=Fa!JZ5fVf zOu1x`!X|(eryU*5p`Z8AYM+MreSMkwj8?{{>3m(t$D0M0`Zgx{PK@TF=xT<)4eR*r ztl`(3Pnz87<@#^#jr0?h4;?DLbyMa3Dc>x^gY*{Op|^LW8-qY~>c?46b)uKaj<^k5hm$YsdEap#S6=2jHWw5Bp-UMZ z8~+_8E%gK!Sd6k3Kjs}R!Hb)XW`RfF8TU3@o4@F`3P#45Z3a)gJ;!>kl>yC9t0Rho z5%PJDm3=R^9nSNLT}dp+ojbFNpUc@Ot)+|WEH)WDu%h&ax-NY)-pR?v60YL_gX%1; ztn0?6vqNzGf2^Gke4JI8@6S6kY11}sCuvertvaETCbVe@5K4+crnP8*0#Wc9?`3xb z;##$0mF{lcW%o{@YJtg2FCw-sYJh?TCP`Irix+f&id9j#EAGOI5)fVXt}aF0-MS*V z-`{iIcQTV^3hv(de3CQszUMsWJb%t}p7WgNoO2x80hEuq$rjqNIrgrMhg;vzF5JPk z;>r*%Wh1!M(W$dNu=Ak5Umq&N1*YgF{lS=irJhTVsID6Nqi^v3n~Cz{@CWx|RpsRX>(c-AD5q8NJqctFu6$ztLXpMCM`> z$gFszSeawR(oDtCWW7B1Hbi|8*)^NW?+fbGovq2-d$DEmw7cZK6qH)qrPI>^Hgvdm z`xy4=80}h`+om{-$)^=d$C!O{+z}J^j5~v86Qpk>eWv*t_erBS@~RK>h!a-@u8#45 zBH*VxPU|yS*NOen`CGI5gQc8_>ipaX!Zp%q=`F-gG0!BOPpbRh=8@`dra7dEW3=^Z zYwP-4H?>y++a}g{ z^DDyoBf&xjQaNloY`(O3jjgNmfIH!HYwlKH^ISY~=y}Oy5t)Kd{S|yV;Z^WSags}k zR}`Nnu#tKduLw_;bgm2B(u}KTd|F6bmZlT#Z6Hnp*@3x~#eKTg|hoVq=kVeZl;-Ov8g6~%FQj4dzQNAqXX zd7AeTL(d$qSM5gM^awZEJK$c2j_pY=Ax2<{;R{vh$LPHd?z<><)8 zzdJN1`vSIMf_ZjQKD{34ui}cje!<5c$`tP6Idu$Qio7-8XH|S2pRoq31D`AV80kA> zG1rR!&E6G8lNp}HM{nV+LJP@5pOMc-vHRitI;nFEnO~n0oqwLGnN8pWzeq`45rbxlNeT z?bt=qZGV6*7tPbKzB%)IZkYGm&hh zRbH0y(wM+!@n#=SAK}BE=GfSIHSx(r_)w9~BJLt(j50o+E_+4Km|t2yVT|zYdBV2{yleef1G1i!{*DvP0t%1-tdeP#Pmj|_%GRssZ-|g2^7CW7rPCUp- zc23^E3I=%g%ElL-y60QGL*5$2Q+vl4Ywt$N@8Vj}FG8OUAj21<%PM`?-O7XA z##+s!anWot?VGQ#%c6L0voDdq_=MSMo4kyk)Z@ps7xtB9^ozvf+8I~Lf!yul_2iSe z2dQX;{+r#|jvsfH>=T~xH6=QJE z>O7xrorfV`8TkXXH$4aaLTs7VNmy^$7|p5BEgMxX?dMe8;hgFZ&@mfL zk1(Gso>VuW@6v(j42wOb&Mh5#lLP77>P%-dml_1$0ep4V7pK`TX9w`|DEsAhk4LiP z){W6t;h~sxwMR5Fxp0$@dOX|-wBMfRp77-u=ua7AWG}?{18-=`y~M$JHFUM<2lAYV zev*&jJa{*EdD_l*aBUQIp|Y#P^k0JckARc8$Kc#VXtf8-Xz^H{2NbO-7mU` zaXp@5UtqtW+lJ=K1PzAb!2+8feIykb{4FJRoT{7dP#-JH8UH5XBt zJH1^3PZr>x(0&I;zMf#S%_+PLFn%9ZZj?DAV-@Fn*&J7ORNyslY+)I%6TpieGKCj7 z#Thq+WaVDPit);Ydw^DTPNym3w0)wpC^|2h+)H0=NMG(=%NaWhuswT~!EDb3Te5C7 zw&&{KcIjF06!&11yskw@+={M1a;+V!HDuSQZyYK+Sm~Uf8 z72U9VQj$fr-OJ+2!y(;Dg+0T4$YXkZFKeHgpN~XmN1*3<1`ku{8O?d;6whbQkm204 z3~k9^lVxag2Ag%aOXLdpLWz@NO-TNf&frMzGWqZ)7(*7Q9mrrWKJBEf zE8NAqJ6*S)kG`KV178Vsn_XpjDQBslw;8-}-ji4cZw;Wr`w7HA>DLNTr2w+WjFT8zX0ue@elOi zH}LmKPPpOj6 zG1bbaa1nFt0i8>%`zK@lQ}cJ-LpgdWeyn@9v=vv^4cQpO`Y`it^XGM}o#n@tlj{`I z&JAYuA z;(=K^nH78})uuA(hfn&o(FVMTCm4wJ_j~`toS|$mTxu)!`Z|&OSrI){A8o;(60M4!`4z}bH?oi2Ci!H4li3`x z3G6%Kk)hQ^;&1Sw%reD(hhxW5r~5hZTgVm>%_OJFhYhz;vb=mVcGe>9UiuPpOk6VS zN1avqv=(k>z0!^Yz8z|V>W}(~wE>t`m+qy#i#EP%i|56HfoyQD`Iu_*KfU>>=lzeiq4qYR~GFli}sV@<4I1K9^Q<8IjGpHXwKA(?zOgtYeAx; z{AbX+4`dcG@6&x>kEo2kOE2kzE!(UV-5bt-CVyjjr@>+ES9+yy^jXt^hwR?Hl!vK) zzxW~T6&^pVuNvCXF$sD%U z4e85VGvmW<;lcQDgX;FSZQYxYryH2V&S(Ez&~dA~DaTnsI$wfVCe}0S){vf_Ox5+o zI9mxl7UA`8lH>fHY6*Cs8@A;x&EM)y2!`yLM+|Af=CjVnbo5ZtIw3#eIn_1kA9gN)w4a@XN zJSqC%mvVZS%qM;zSlW-697s-Q=%G7tzk&qT~Nw zG)t~a93*9oNIXc&7?CKEGDal6MvCp9;7mh}4~egmGBzX*2tHR+GRu>nY4Yd5WIi$Z z3*OyKdYF_6`s9nGpC$bzsl{$m28+z-^bGrY8hQ6D>FY>;N}lUU|B-YT=|7X^m6tMR zIZ)4csOL4LKML#n5oI|~XY$9SI_v0ZaC(V!g7iPavVWJbGAy%2DfN7ldgk-)o4ort>7nGh*qh7-2qwS9clJME4+N9n=6i#_)7DE=mS+$0 z?AGx8LwvtB{C<${Tf*<(;QN0Izdy|PGxQx817ZDlQGYM(xQBEp>DR*ce2u)%Q^(gy z9}UZw_us!!c&vPjARZ?OaCjU3-TS)I?U)8^p-p}v#%1iy-Vf|mE zKJoR7ypu2aOQiUECcjL28tL7nr-o&gDdpK+JnJSMC0$KAM%qO>PP&40KPj5X>M^?q zyl$Z$@m1^Ns_zTrc?0P_Qpv_0q^~8tlN5X1%Cc%^_1(fV*0z}^tV_g5_maxjdK>8i z(%VTJe3`h(1oeC_tmkvQt0T|np}|*3M@a7`y_s|}Ec1)7o*Q}gAH4fCspRxCq$iTz zMEYye&yxN!EHj~${qDYRk87?H|L0%=z4x58`Pan7G*RYP%qcAo*O&ifj9#TRCH1-E z+Tu?OhM&6xANFI6*Fj_dCj8_7rumCtgs}dD^IHv8ql-T_whx_wZW64Pw)i6zus%8i zte=Fi{-b$&`~l_Vj9L#X6Tg29J&q0+Z-3KrNt_Xd-y6gC+4wzUMSc(KJ?HV?9A{+W zcRqYyijR&lP=QC6zw?jDuPh3gTGsrZhuJIH@s24{6aiyI&i4=jmrY<|907DSW4P>zzIo{cZMCe?!jN z;&Ht%#67)}L$OJXv(RltrL0I!T2e2!YwarOVo=u8cZ#mD7mcnPe1D*CZcfi9Rs$PI zwn*bp?4LB&hxSj+S4RDwrfM53_9NLU^6O)Voozn;*p@7JhV2d>9ck;> z?{3P+u*m}VKE^y^ecXpgb?4p{r1GC{CGAu@5u{a0n=+g|ho4$JsNmB!Pk)o69kEh% zU#0BwSabbK=CiXkx1Cn@&nnA0cU0NqRF*Q?8Q>gwo`N{Ec5T1hko}(&+FJ#dM=%r-0uC-HT;ZyUXT0^ z37MH*!c+L_ePv$>%Y91EC0FFxfL-`u;#od|pHqI%WW3a=GtOrDau##d$DF~&JMxd< zli5-UQ?Np~|Fa5igS&!tkFDdQz~v0*5N@Id+`Y$u`@Sl;3*4XJJNQ$4BF)59L~!eB zz}Tk5uK;`ZF<>+EtB{KZ_dnrZb{hXKQ=8MX zCvP&nHzgN3m$8Oiyd;IndH0XzBAVbw+zt<~$~_F-EBIK09y^Z#`&q$;hdY2@oW{qi z4SvYW8nACT2JG($cGTvOj~|1NAAgm6)IG?xXma;au;;o@z{j1hl8?uNZ8nSAoh#c0 z!3U7Q83Gl7l&^oNwr7WA~k|4FO>@c~CdZjEvG z8s+J$a|_Ykb9-)Ef95g9-fO-7w(+~@LOadIaoME6iFB#Azk*)bA)!9)Vy)vu;WA}U z1>G7ay$>B+)&*U9Z@8rYQ@C9Bd*G6*z-50GE{wZ+H#L_IW=Ze+xDjIWZuY)!i}|3v z_=;by=82zE{ug+1`|p9r7b@_$y9$pPdE&k=o-hY6yBVG!NmD%WcFS-7-Ple?jljj)mIibl}t%N7@N(B$_#>>iy7+8NqwinR{p zBdgQ_s)Kz{DW#Eodz>|P?wqKc7w9>1e6OFUu)e$9eOl$BIacF@`{dZT$yj%#ZLM)p zWtl(t`9zz$MteVPu9V5@T=kF1c2-|)BECs5XKE8M3hZCoIWfE;lwWLJ{65Ws%~@~1 z^5qmuuJr-;knjo5x$H~N3)X9`L+9#g4a1Mszs07T(rxUQ+lQ{dBhvMTgSP|Xl{Blc z19G)>+i(9;u%XunMK8qy>Nh+hJ_P)*r=(+Y?0KMV=jX<~9VGe1Q;5%9fO$Eu^;}&-Q%2U->F!2b{YN=l>*3%BP@Q`}8&~#`mbYL_4LT9eHPL zr`j0$1b?Z#;Gx*ARh8`wpC8qJYy0nYURN@_J89wGa82w0{q8(`+vT-wSL$s~-pssf zB!jQYozHijJ$->vwF5k6=dQ9eft{o^pBQO9e{=O*pJsf(j{d^Bnf8G6vraxBe6XeZ zki&j()_x70*GLSf#ls|vl+DME@_Do8BZN~4qoO=M@n*|YKu#0xA)Q~}{z80Taf7Rm z?i@`{us4Lg+qs{Fdq0RLQ9Eh-vf^9W`*F2vp&$11zE#gVFR{HJ3rL@3F4^EFq+|SE z4(X*Td@9-kyoG8H>3qRe8I^s7GBK4YvM$>`XL52?o9*?`T_1k0$DIDGJAw7?6MlP{ z+7|Tnw*{$iUVN?JQ!#uF`U;)dnBhzqm794V#(V7DbzvF$lIG8iLoSSOoN@1l?lbc6 z*fTPNURGS-1(qil?#0MiTjGsbcXm{Enl4wF_4aN!+>0?9wtocq2~hjRYjyjJX?MDW12_M+|i|3cDbru2nml6L7X z6Zm#@7judpmG2;KLhl4m@9^DE=zD=ZAxbOuge3G^>jJ=;Q~W67+4OxOXNUVjIFG-0 zj^7ue7^?V$#Y*-2HL8aCC_X~+L;p#QLlf*Pi#ehHbdS>>WUwou5q#NaeTsd7eE-7e zgQCIp2g%!IG|1R`lg{DN``bsKEx+%qde2$VyuWQcR(_u@zrWY-!5crGceLl|_=I@_ zGqqc`h}tVSz&^nEl2Ti(jnm+Os}n82HQ{M7_oWc#6Gj8!t$mVLLFjC6J9>sOIAeV? z981xW);|re@e%6M9x=*^7U-Ll{95p*r3el5J$LC$ItP1Ieb?Fe>|sWGzJNjOz29>d z!X!Qi9i&(_Vga|)PXf;D*LqByTgmq`_};*G&Mb6`ikoB`c-RsDv_H(+NGjQJnJJuR z%A@xN$J4Jk+j;>0rjZkWF6V9RpCP8Dg3k@%I8eotu+9CnSz`*kwXtNO+Kp~7osi5# zx?cMSvsHMjyy&a4(!utgvvU;Ft26AQI2idC!KF|6T1xJ9daigGWNM>gWc1$JGGaDI zin;O|&>@}7l`C~fs&Ih#nI-05SirnAHok=UG?OvNyc2LF!LDH_5r z?SH6>qoK{BYZ@K0R5C!H40XutgB5-8k?~N6OzVq@WA#NZOS7Z+x2m(>3)esWeBqN% zKL^kJ8P2T1<0DLH?GSpK-;h`?WHQ^ncp35>Pi4`;rjwyxH1?)tzaVGFBWmrj4cpqV zA6@LSLv4#3u=wN#Y%Gmw?x;U~Q1HCw9ruGNO=i6vj?ERqoqSsDn2P0CanSP_7&=G3 zEDxOVO8wa5KTtfY+5jzU-FFb4k3MU2NY}@RC9-`+k=!thE!Z%R`Z%+6U4UpJ)oe2j5X?EwyRmsyI>ENuU`ZS=)JeH@<5w)0pR*R?i)5Jhqr@H;?`j9!I3H$GPg z3&hx%7kM_SU)qAykQEEnbSA=l6#EzPr2U}DfMRJ|;bj!h9m+xcGSOXjmiB;;(@xWW2QoOf@d1rx zDf;5oUGU)o^kFJ&S1P1KgK#7k(e_=c4-kWi{e^ADM|q77z_rxVqdeXzZd{+{Qm8Mk zq6{?EGaEbfE(4z#@9cSr*iDVqe5Uk(-&bDzWA;W+UY`ht*MTvA{slI*&bbh-E=#O8 zZDPKWk!<;PGDh%Dc&WVj7MAztAIw~SnPl(S<%1)UjH_5X!#0u9;3c@y^8w&`%HO`QD3WS z!Nq*fVatyc&tpDQAAC4HC%7g(H~1)i!M*8*;MVkl;PmwT*bkXs?=B9yoA9~pWUS5= z&vv_*@7{n zo0_i!ueJEDpc8mYi)RNtz)Ka+4SIpc-E=`8@HV6u#_j~(kAU|S@b&`l?|}FB!21F4 zo&eq<;N4QZAjkl3FYW6BUN`L%yk6SZ2fPgJ>j&Ou;C&5v4+HN$;2i|s{lNPM@b&=j zGr+qE+Wisj+X%b?;9Uf~LEv2sydmIS2E0wc+XB41f%h}uJqx_&fcF#N{S^BB1@!x$ z&~H2RTSNOE0^U~OZ3Etwz{>(}2k`a*uL!*Tz&ilEr=Z{a;nC*wlHd>E$0hLN1Hk(r z@Gb}5CurY;!23sR)mC8M2h0*M4+8TLFdqTtW59eIm`?z6qIh1AkS~*VK0`a7rk&rV zo!_CI-vjRl!24U^JptUW1NXDQd=8k;1M}y=JPgcV1M>(lUn*`4nD+(s!0avzZ*KtR zW59eKnBNEHBf$JyV165z{|A`JPHb#>vMvd48j6EK5?(hK`-4_^y|j2vAYP||*#%7T zc^p_@1lHZa`Vz3d46J*AwI96S%X;Ok_R*6&fz=PJjldcJ);er zJw9*8+LJepF~=LjKPvbYd4FelHP^c)gnPot*)go0G48CHmiHyg+dw?abz$BQoV;sn z9(g&xXMC$6)xhnr<*nk|DUa8{?FGwQ zjoaZGxc!Uet&+)}<{G&D!tz$}ttVXrx1U?yD!%n(YT)+ImbVpNl=;?kaSh!5ujQ?W zW@WzhWNYB|PnLHsdCPq3xuFJb&s$#gtuo(wYVqwKEpHXydJfgV?Pr#^)x|4td#VO* zKefD7eCv6>25!$;-nrZdQO51mh8np2#PT-KhB9ua_SWFrvzC`VWK%ME>V_J)J!5&R z_;%{18n{hZUe=4I_;zZp25wJV-nsOlDctU^f!mKQZx!E8eWV6%KeD_FphH=goci+` zxIJZgTalfzOrCnA25vvJy!GhcvP`aNsDax*Sl%k!)-0`o+mn{J0k~zpt?8+O+Y^?z zif?Ob@$K&|Z!5A>#%)b4zWtr$tr`Q?+)x9zA6VY1FW97!!`K!x0bg`Pp)~X2H*aV<*m{sr?u9=?J>(+r6*78s)5_1mbZ#;r}fpq?R%D2 z<8)ajPuo}nx9?isDqV8g<{G#?VtK1%^0aL=aQlwsts37>t2MrT+wxZRx6^9r$!}TS z1)Lo_gdC2m%a!yHECVO2C+`egf&Ay6kuHL>HxIJuntHyxdi)--h8)l&}Z@Onu_GD`XZjaQ!?Lo_1&t1x8U9z^T25t{n-nr=NvYuR9 zi*F^%%Nf^GxUDVL!0qdn7khdNx3x!V;Py4kTh-rAPu9Tge#=`mzMWnRxBDz_l`c7b zpa$Q3-YQ*k`sNzA{qLi3JNbbgrys6?+gB{_0?uG7%j6pyYT$N{<*gdK-#AbMx4SKGz0M$t`r8|~){x0B zTiz;N^2Yr&aQl+wt>W7oAFF}e7cFm z@$(wEd0B5j*2`nSo02tf^RiwglW(duc6(W`;@g{Qjon_>tH!rC)v~#~tj}c}Dvtqg zs%0yCS#Lnrr*M0!25w%~7a;3pU2^8q8hrDzuCu7iWA~Yt)!~9tRk~3@RlDoqG zR-q@)%+=uAone2QGlkokH`T!H4$E6LH$Ah~ynCPJt&+(zYt7#jkDF3V+>}h7d8CF+ zD$X~>zK-}5-!iEhxZP%Xt9(J3t{S-AYI&=4Nv5X;-$pENmCcnItiiX>Ti$wXqjG=C z)RM{1S>Cy>p#rxB)7qY~>qS!%HhaF(7shLb zYtYd;=JeFBOa633>sG8AlZvYO7cq z=ImSd_Oa859Z~sfX**?HvOn8?&g|A;#m+V>pXFReVlW)nmB#vyD!+b=brCB+9F-r+ zwvSSNczXH4rr5bhl|Q*$es@%UTehQ>@<*o1)Bc!qTbg3$SC=OyNatdSv1U@wa93`&lzWUc38*(1=Pn>%E=b6#-{K0YaZ+e_-_J$lZ2{L#^#CX0dU5sy|7 zBbiL0zu_;jj=R_+r*j8&&c@7V3G1BUs`G?h#>>}FGPW*SfS-vi+2G)oHn-rzuKk6& zos!4k(PUeg&#!-l`PyHAW{;NI3Q$V<)Fz+rSv&uTHLgwgyzh(F;&rYsa%k~|#ns?7 zZH-ptqfZ2HdK$uy&OhF#H8ic65L0on%eLz54_g=T^27Ob?5||)|90f+3($98a)|v4 z3*0(l3#`4#4PmVGS>f-u5C_3W>+-~lHgk@v*63&3_bv9FJ5hN4VZSb~@5^ zA2>t)jPes7@fxf97MCGzZ3Dj-*>CPEP|E$D;h8e-HN;rJEk3jD{DVo(lS}jkS=Z7Q zKA%NAxEp9vJR5i~fJbT0gSlAr7##w?qJ5t|n&tZ__biP0Iyi@TS^E(ej2}S$ROS|w z!%96Dp3^oF-T%EGzNK9@E1q>B7oG6%B4T0`PuS1jhTIPJeAW^7lD9LkQk)f<<<5+@ zLg(a5+ynM_#~qyWqJ4k+InQQ9{6J@ng!_lt3s|_5_5qi>_tNQk9ShP89rMxSDb`|$ zZ~EL}%7B*kWWuMg-x*(SA>N&G#I0HV9iwie-Q_dNxxVLX9q0Cqh1=al?A7fjPR8UJ ze(O9{#e8+r|I(6M;xz`mygof){cAhtk`R|tOwG1)1;Ly9S7zI}g5b~nE3@rfLFka? z`=H{Yz}@b^g7^Cr8z?y`uAY4{^(am@<w5BJYfGEkE8Lj(5aOfj4=^X*c-$*eT*T)lOny z`_z_kVxA07aP~B?^AuWzpL7oEr4fD>;~C*+G@`Bi?)T+9ZqNaE70*K)cup+o^^ZsU zmlUs{`W1T|=Ks3EiSmzgX4x(9@&d&GU9bJJ-M$`ZK{;dyIV8R~Y&Y#VK>zKwciguo znpM!KJJN+-rhb$QY1A#6axPk5;l{%`XuJc_`@IF~iSKCIRz zbXs46-!ZT6W0&?Xk6ksed{uacCFh=NpGBQ$&mIDJ%NbT~^4C6PkLHe_J;Hs>)+gI@ z>(j-q*P+1b22|Gv*$K7wofU zY#8x!L0lSn(b2@Bun&!VTB0?**5IeCdSd%>0{A+EUfA@-crBumh%-=U%8I@unzR@4Djb$dm>yEPt84m z$AWM40>0AWH+%UZzShQU&Zb(*UY|OPVg5sRwen#4d_!sa+{u4kb%|?Crh*6b+s>h! zH<)!R*_X5OcQ@%-aOGfIz!kVi22+l7|<&x7zKY1d`WeB z*tF+>f2Xq4(J1{2pO(O<8wz_q)Ay=i?3;o?><9hm`bT0TURR=Xbl3a_bdlO#rHfQ& z?rg^1jjowJzYWSq%t*uNwR|6SkL4d`j2(B`mfOQK6~>TvEk=jYyO*Fo^-B>-rKwVZl7@H7>aktu-h2p50NjyxnEtej32`Uk2BFaRpvD0 z6+66>e%g=y`%9HYMy$^wBPnD=cf{-Lq1SY753VMipT6ehYtlPkUduW8^O2Erkm37` z=k=MaKPUg?wBS^plfSBs^ORG;ndQ9YeO@mQTHcC%Ui81)*h9kkMDBLd`RXIcX1B`n zY$?yQNAGo{b)>H+<-BC~hUV=-hruU5eAqXeO5nXpqD|;(}Qp5)Mn+& zZ9(^Ne+7DUh*31Y)StR+gB;~62Y(L-1mH+UVOgJ zJ^@G0?bP{hWx1y=^1j8(0X9sjYHZioV&~T6h&NOD#TPhcl{Mk?2u|*x&zq!oD=+so z__jxLfp>;;feZcKG}=z|khQtZ+Pp2SYf!pt=DJi5?QUh580Y)p*zx4QgSOqt z{k19fvC!u@!^Y?_yxG?=yvwIB@Iuv9=J9tukB|GVTd(Iv&l31%b#C%8=}Baj$-;4# za%Q#B^YRd<^BuE6#=_e4m$Wc=TT>uf5tpVw%bf~&R3nngZ_7q+GPC){U+Tu zyf@N+GwCGh58kuLJ?+=V-z*Tn!@7g|u z%%F#o?V}r+DOdd+Ah$2+3%1Ry0{3x3EA%dN5J#Nps@eT|ruW!^ zPIc&e2e*nhW*x=-PWDQN0)C9PM?2VIB|x|fWa&xSHKe< z$ns{xXN2|taqy&H=uWAM{?MrBYOCCoI_C9^@~Jh8)*AO#0-yMyVhfW zw&u@;m-u9c#Y^zh93PqqH{)dlTfPc|KWcN98F9=nL4U;hvu;Tyn_r0CcRYLcmt@*p zeWv8*^q25=ZF2Pk%YuI@wZ-QSwyB+?o2~wc=VuwMj=nEj?Rtp#=g-LhARj>fY|7nB zyE}|Gj4QN#iZ4}dH~eXTnJ&nb>OrPV2clz<5Po}^va;&yf(ad#9wk!;sDHXl&D7?( zw7DU+2RhdmH&RCZ2AJwM_^kuvzc!ueJLUFjF5yhB?aUPQU%ew1{VPR(XL$Ad5LaT$ zKL@?4>&0J%E_=m#LC6I7v>i&1 zEzw@i+pS-D*|TvQ`5(wi9)tA*ZP?g}yhfLK+`D$yrZzW!Q_0O8DA6C5#pfdX`E70D zC+#?X^m&KQ`2X1s`k~rEKSUoT@^fiN1O4!kseb4dWaxvN+Jb$wgFAmlkEjiIKzwd8|{k{wf-_4oIdS2m2 zW$f2Fp7-BTx65!2O9mW|pPj|7uUC7DPcmLIXDW8g&LR&92VR0xJY==m{==j9^L^_; zXm{8?P2qyfrttwMT(-NtrQ{kJpYa*qaR9ltc?E6hWNb;J<25I49i6~Fns5pJ>iJ9Z z*F5?&=IaOWweu-HfzI?k*UoBMeycC6+xAVW?&d81yKJZCGpq@+AM;k5d(PtCj+KT_ z;4*ygWd6F2lyiLDdd{TO{m^HT9#8r*Df3*rpTO26fc1K{BX^7J>Mu0lJ8U)`eH;6$ z&$n@)l`$^m7W_q~Zo>NyDf7lO`@dB`-xpYU^jTr&|K03b4`t(>{cSpv%szAfhpP+y zcjR5Aa-=Jj7KWdG&c$`Nz?L?h$EFW9Ca-A^_PSE!ra`Ipb>oLmb*z0~i|68`SkPEZArFcFZ;RPUO$%rwjWo^cNbK{23}0O3Hg(%=Fc~8ItG8RsNl~n z#-BB;=|t^YW_TB98)u6~XY2^SMX4z~!M(X-?fdsed@$Jt_X<39PhgPS2cFkL!+L)| zo@!Nb&qs_jB@5T>$jIU&Z6d?!%IS6#YfC1vy$H} zJYS_$ZKq!SUL!e`FV>F>)~{uorFbX*a)Pvlyl1K|edpQQu>9$I#=G7yU89uup}n2W z3GOs{RnmQh^2=9UC_wiL9tNdkJ3O>`7WjGD9da?%>xS^1Ngnm-pXwXPqxC_?v1Yw$ z9P;*m6K8Ylw`5*+L&w?=Tp8giJS*hD?!n39b5MTncKCcOr8U;1^qJ1KD6cz9cF}L0 zUQZwN>t9!W|H{JlukNOwJM{H_twR+v=%f=ht~}LU*mG?IGGKQ%#77RdBMW`wtOt5O zG4?-ejcS*TLr>{UVan}(s@u{~Uo+X?VZZlWqdnh&^2-J&MEUoG`He%?52C(urQxyj z%LfbFpMFedPOBc~MmA?E?0EX|!c|Y-SIlAquU8Fxup5Kp` z8s_C&nj`*3Yq!Xrt=(=9`EF~so0_-}xgHuP)WqN+)_iM~dtj;@XMi73yoOs?D#aI; zmPwa!&(|`}sz}H0cz#(2_f!?{1YTya9lUh^vVG|Lo%&MPlfPJLS#Ba6_go7ltDlQ6 zh2f{V#TVTRq;<5G5zaQAP5<$C95Ke-*dzNxG9p`s`D@B-z%f66P(8>-vuMfrEJ0zX z=WBFUI33vf!uYqCr+u5X_wC<@zwmSgZGBKOMf$Yc5HCI7UidL*dU$ya*J~e)=Kn|O zBGyhcTsd|5$RAU+qjT-GV=NbLYh7t z$={&8>-6^(oiwN3wM@Nxo4s3s-IsRttY;%O_{kIQT+zn?OGlP$ITDvZhQB&;b%kNve^=jyAjN1{$#~C z$G8ezp$)#cug37R&}QU6*}izgqKjg06nrL;cuI?a0`h{rW)lIc$3GGP~e8YpbEJK=tO%F&k~eNt}Dm_z_nh zr9mf;LF~eY-)r!|wI!yTR^53F1Q%i{IlKgWur0;p|AkTD-~gnYoz# zK52!kZ^?LGM`KiQ*-#oC^V-;r%n8hPgwG3zF?&z{^5Ed6bmK^v9|?jsrfZH{SeEw& zwF`e&lDYiK*he$Vnb)rj<_yR-n{-R<@b$s|w#Lv8 ze6)SiY4<~`2z)U5W8+xcur(U=9Ng!`%qN9SGSrO>Zyl7*k7cbt^hEg;i;@3;N|-%U zr!*gqO)XiQ>-05`O#Y2%Ct6k7DENX?_=3~XJ*fDCyYU70hGRh(8+Ttiw7Ye#R;uvH zrxN02{tD+JJ5@Z2y{CSKE3rm50dKR$SBq(CPPvn1*iXkS@$Y<*TIM zcG55FlqYYa97b%Gdu92ZOu2;?BdE3vhiyr2@oixo4j$uv#>n?2-(G!bneLaTAN(jd z(%J_7bmmss#*63|(yQCc{8xV+(o1*vasEzLGVbmA+uUW$S2q#2vpJa!)-!%@(A-vI z4mxuK>v7h9Wk2(5O>T#m3C3G{&V3Yr13k5F%H2N1@%i%`xr@fF;oU6W%}QS|Imz#@ z@P1+Ve!1SSdWL(>Sr68CTkl=CE$dDsCg4OuzxV_%!G{T7PiTYSJI&^pH*aA+dKu@| zZSGk6XB*2tT4E`nb*g|LJ=DRP8(KcuBg)I#Qgb=K;?ZPFyPys_YL2`nd5L4ZglC#l z(RbWAgKe5q2~K0yEl^o&!zgu(vDTVk&KtI4oLDrof#fUJ`~cW4Mts}^49>Y;Ca7iG=y-WArHm{#v?dY(6lqHlz2oEqoG_fFlV zOx%Nf(kaHIBxBNUmBA*(sEpQb&^!18m1hh~llIKRH@ZRgK0cZa;tlp~tI>fxqa*Mi zdZ^7~3n({E-re_SN0B-H%x5E?6aL};MGhYo^VH+oIKS|A)~6(gy7Pqgb*%kU`9U-M z_2K*PvwCi0Jl{t?>VbZ9pyLK;xM6> zKQugd-@jMwPyZ=o<;dsP{(<#}iz{dE)OXF>SZ~eQcjCb+)>n55PVt1>@T!adGg9 z?&A3%`?6#0Cd0*^(H5SiB&+&e`3`=h^Ycyrbq-(U5+{vw{_%vLpB0G>WL=^`WmxNa zMyc9>u3osDy9SxpH896-KtCkhqAeO9OOngr`;1li{j^47>rmXQ8eecoW7Q+^70FjQ zR^8oyluvC0+i}FsAY6fVX>UGQwk4O#4$OTIUAr57U5-UoixGs-FDd+U-;fXNFOM+R zrNwLXN(x^4cwL@h<3w{l?^pX4Ft5X3GiQLiHiz1D=a%Y5cY1mAFwxb2d890Zujp6% za&-RVF2-TWS61^H&0Ex`T?sp7WWUDd4aiZ(VnL(1jn=za2S&$SwwSps>BWWr^;82w z@mj|2%k4hilm}18s_{uyv`s++|v`173M82VHp?dh&v3zJm_c z8d63SKws|2cf$7tvWrTk{3`hVFWcJU^(8OMvX@%1m&OmZ#ZRD~3$d4&M=|HR7+HP? zdS(N@D$_^UMhRj%T)v0%H#cu-Z!EcUtd2doqVz%j8=hBsrh3!{=F|=zyus%q#)k1u z^ryXwnaeQWR4g5uH*3!=AI~*L@LX}lHYal##_@6J#=GHvL^p+NbkM=Cg^t)d86JUf zy>i^fo{Zob{-ns)>-AgusG=R3$JK0y#^=g**!Zvf@Sv&34Qp6d{@cC`YUFG#hGjiU2zDw!3$#V(0kNtTm`dx=#M13my?NjHX z)a$|hd&54eyPz!&yimA*FLq;^bAMClI5+$tKDmcn0-aK?v!-*bgUW`(fJmtQ#dk4p zC9l4lekysJ279K5IEF6b**dMCeu0>feYQSk=V&sn=!|9gNaEbP(V+Z=YwphqPDKoZ z`Czfp>owjo&e~X5JeM~8%zVUaa*xn1>cmEQ9W*4qmbC?7M|Kr`O7|aYU9PpFPVQ!7 zpDg(W2b{C$9{UtYg||M!+45}jW3h17Z{c73sQ(U6Y)+&6o~GjiqN(f;qhkU1=v2{h z_$MyGcwa9YR%=-r3y;IHR9V*F6XFeL*Rl?9|6Yx^I?rAo>@&M_AjjG~cV5UI^kwj2 z7C-3ft9d&1SOri0-Veq&jc=9XS=2Ub*AeCk_)+i!b{8|iypT5B>$>HCW4`Ha9EJ|H zW&9NIzUrw4e5n1o^XT_0&>Oen$DKP^!me|{`v=<;w-BrxYSX=Iea({BEln1~P$;z( z!tsdipB6m$wM%`vW9{~fD)g_;CpO!nJYHUuVQTIcb-xRnDWxt;|DDU&cY>F_mb3jh zhuxTp4ee?lzBH6iZ~-UjofKnbYIsZ~v3c@5qbkM{=Nd5&v5zJlz+E{vqZo z-FiO`5BW>Lj|6(UK6p3yFBvH1`oaHQ18rKj4(2j`x=l@5zYbP2?(8bt0qW~ruO9Dh zY1*-OfISCV%Qcz;lD!5jTsVH5mV&#XPQ=bpV@ zu8Z43xhjpzufmy0TYqs(OW!zV(zb|($vW?%R z+#kM3yO_V&8ICVv=b9ASoMO!KUya_;+;ynC-T8Zz>s{tRd+t;C{ceCZLkHTW^W`%@ z0PEbyZoNzMF6BlTpC@*=rypc*(mU%{VB2kUnf>jB9QM#P*h4vJ7#k?LhD{~uqJa2> zptz~6GA03=tu44b*;ZlSt&IJf`3`21=U(u%F(&dco^-_cY3m>PC7ySS_jnr+A6`|T z8+#i(o8$RCe7xtcbfS1y)`@T9{JtUPKOg4qhWYS3r?>FCSjF!r^i1tcrmzA3j&uF6 z{|eXf$6j@}c#CY<(lGPR;P1Ay#d{C6xh026W&^U%Ex6qL6%Pf^C)<`kJ2{D8KzB@@ zZM2imL$n(WX*Yjxigq9LIzj!y&7(i8P&`K!?K)RHz#M93T_D=MR_(?=1}mLA1^v4y zg-NSt3q#tC<7d3K^k)S04F20FcsnC_tpdflm9(2KO9fBaC-)Hd*( zfnGyX^ty3qie3#oUqZ~*<}I?BAJ!gE$t>ghtGS~+^o`w7AL()FDEYM*GZL&ld7Ciw zZH;T+aeb!bu-C916WE$)Z13lypZa*pXisxA2GG~BpEL0}18sdRF3Fll19!^1s9!jI zY-{dee8rOqQI|1K%#`);I|kE@Lt(6=c?6NCvrL|vMXT7Kx+Un@X00u`i%RJDO-=1% z?hV1C_^J0~=+1sls&P>HHD3F5(f8g^q5r$(Td&~5gyp3j(6J{tDY?7=-q5qTpncll zRq1Pt#^kQ`%)yo}yrtu&FWgr}%URQC`Lk;K`c=`8`q6RC<2oaKijGOM{n0I=p>)?Y zI`-9|qtU{B>HiBIx6MGugy_dO7tvAsNdFUbynSm(N4p2X{Iy?VT)iTkH(wIYo5Ov> z^qDJ}2fyk$bA>Mb!`Ov2b*XFvG$Q@9(f9TIGW{a{c_`Eq_2F1(77HWI)SQqpLUud8 zrqq>}A4s)s#O_K~fjFQf0KOgOLa-pKqr>*jW!2i|3U zcGckuo^+P;l7~6a+-}7bm-BAFX~w+dX`CQ0_V-lYtGCRUmpm2yD;$qLcBnG1+FjAV zZqskk+{T5s;~PMi%csuxmvBvt0doe-ryf7~P+M@ew{dK2m^+BiBO^VxE0|aI4OHp5 zICd?4GW22Zjn;p6Yi*|RIdoeB-Ss3i_#TbWeD}HP{#c>U{8T{bJ2&JHzk5q+tTp#oyxZ;<=(;CJ!h|C50|tibL|fCD>mWRWRT(Wl#lm0 zom-%~nB!FT^`5a?c)pr3a`9m4q(iPAT{}PcQ(_u>y_^=pF%ej{A1|^Y8Z&NZ_1 zg=72M$(!_f&~-L;Gp;3&&5v9Dw-M9C`d(AYZ4u9>cxY>#o0KQNT>s(Q!^T5;cF05a z&S*Wh`y9;)`kUIy@LI(w0@?Wu|n}9rS(VG+3NzgTHCP(7a74wD7!SKB?b}QdPW65TB7i zwi$JYO2M_v$z+?zUTC1-KF?a%yiIMx`^$5aN?ziF4A;H0tb0ei{F8ooxn=pP@4?Fx z;N@ytZ>Z#D8eUSi1}_(e?SHo1{#j}_b0^PB$gSVVA$wkYyDE5zpKNlM-iP+oQR`&| z>>u`?Oh1cbleYste|I>3ZDT&%&G@A=U3&8$V*cCW`h$O^uU>9rS#@lJe0%cWY2SCW zr+dU@ohvoT=R1xsPdaco#=bqpbHDW!{BVlTBnH67#;cx65X%tc)*}ahab&=O%^1wNXFJOmYAX~FlFE(}$V_|3T z`u_G)&t)GK@!n&^#0WONmTmaswia$@za#$4j!Y6w&&bz*Wu;wgJ`vtoALv+n-6PfYSh?`s^|_&;G#^-k{gr{h%x;oZwNk;9l_ZfG*e}5D&LmVRBd~j%5IisK2>fzpSu=2f!Stuzz z`uS13=~O=G8Or_9bkTcozgf78_S5H=;^&mz^%;wQFXUN&#LrdO^VJ5eU&+^1Sj*q` z!%q<#(XLp3&a@GK%^!>n(O*pQ{+fS1r1~P?ENh?5`ia z$D1~D{=S)?-`G9#^V|&eB5&9I>ml($z6|ky__C=OV|eV_w*9Wdf@%0|FYc}Q-dpkA z_z>o?HiX~1%6X>sA3e9vG4^3ZeJx6TpWD+Mj!%aemvjzUC*zdPB1@^CG2d)0-0<{s zg-@}bHNxKUaDJ~i5XO=WhUi)J!xP{~kB?hQwI@Hqx&ZMH%~ue&a@DrB!uA(i!??27 zYyZjc5eD2_?5?@E+Dsqvv@xvVui}^Vd``&k6!A-Z=wox0nyjbPFZXmsyq8ZH8h5u~ zr&(L*m&)6mo%{#2RnMl&D)aYF#_s5TtDAjY?TedaAeig=Fe|jivV@W(K zeCo(P@hN|g*%8%#(rNsB&4~MWnxK`!4Zqya{>cnH!gD*^pV=HD*?qYSm}ewh@=!K71sebfj(6MqB};#9)4T&8{W8tba*X`? zoI1?e9O&)hdGNUu`W_4Z-3iaQ7;{0R1N`)GFPsjyAGnz&R}b8kRdBU0;T*v&>=|MF zkLKDQhh!$KD<9VNfSt8gQCBG&sIC*iAz9LTq@7LW>*`+?KY_Z=^<_`pOgo)Bu?SAo z^~4Nyoe*nb-F-N$>t?GfZO_gJFFsA2d#Q9f%|&m~nmxZJzoF08?A83WDnVz%2P!%l zJk~*t{#Vd;`cFjvV2S87)Pz5IS+I(>!%KbGgPtf}K>wqCz|h(f=YmacuQ+S2Y91Z+ z5$xM;;^}%qISl=UH#}iB%8tX&6|Oq6Pkp>d{E69>Iu}d6@>plqV&-q@Y#T>s;Zw|x zqYKqTUiGQR31GsNDLgY^M{{n9pP*gEJb3;o4KPdk-LV*Z#%Rsz8pWGV)KxJ zfcbVYgD%BS!k^Y$IM>6)Nt598%k;Z}yZ!KC>5F0txZ4l^x?}BUIIqjTKM%xc58Thy z9(%5FMeXzBSjy|jPaZDo$S9t((g&b^`YCkejp#_P7h{_16F-~*XYUWicZZHx4ZRiX zh`qu7mbbG;5NpjQFZ8m2OnLil`-=^szHF1egf86Sqxe<#I_<4kd==&R*mLH$JU^~T z-;3Sq(YblChX!On?vj4(So^twvaTdX6db!`G5q&Dv*e{&u`&)D6Rp$+^# zHUDpOo&pTWk!)~Ji!GT4^9!sF4r)xF=^oPTi;xo@_3DINp|ZO!eYhReqeKWBPn zA2d#&=V!Skxp8!7qEheoH{pL=rr0CKJ^OTj0N?45>+WXm&Uj|>(~@;v`dt`4{Cx49 zE}{J|`m~JrKAI;+8@=;9^j@gGoV$~}I}iUnc#B)2^~Kx)GS|}&ee9F=tT)H!FowFp zCO2+I2M283 z+#Tem9jagTGFNX7*5a?V{YQ*H=WS^lJw*TTaDEM(#nM;9?^7-4sua5FL3{>fU3K%0 zsNYCe(sz1Y4EQPL+Tkl6` zyEl|m*+}$Jy530H_BC0i4%tlU_~bt}WxQTd{FH0jmW|66g4e+>&5xN?{I_eOZ+>Z$ z)^oEOyX0RE{l#jw3*J1KE~106KP;{(_?26tzU-QaA$z;|zA1O8$$Y|xN^OX11MyD@ z>@OF5lDw=9`?ddV%YqNVZ~AXB$79lW{u(XTi*M+8KsVw8>;oH(4DnG7z`C>eok}qVdTQF1}-(OPcV(6q)vY^!XPYTVl$X8E( zzn+rM`Ei@IpaeEN9k7&*$4m0ppX6Fwv3qWAmhVck9Qq@=lNqni&Ax4--(MKg{p5b@ zx1y8d4CcrN^)_5+LtkLkx>J8)cQ`uP-X>?KK+7kfyV={)8SFLK6y{|=Op!i{ZH}F| z$@BR{c(oteBa6W=;CIB^Z(~1nYdo9$mX)sL<3`#QS39^X{BTGoJiNlMO194{kx#OX zZ|`qy3^9p=7Aes{{y*QhZH-}y9*PTWI+P_id5Pw7TJw=E3EqVqac;HtGDt4HUPQ(V z$P2Qk&#CMkFAjnu{ZIWt{V!NepNZxP=R%LoVcr6HKSbVDq6fPF%hU(&%Jd$D4>Hx_ zilH%jXdL{8N{jc5gEQ)uxVINW8|a!+XagN!9=((?&&NW^PQ3oG_Mt_7EX50Mkj>cf zWqh;PF0XMejMb^0iy^0-tShApdp{ZZ@z;{UxH|M{ox~84+Hne9#+ig#t`?7A?_=T#?$7Z>Z3Jq?*{k9;J$GN-0eIc zaID7t2S?$)aT@O3;Qb@vox8w~k2(h#`O-ST--q;gB{>N9oqi%Z|DjYfZb`Jck-5XC z%X0^<6ULy2_Jt*&SEUUkKa1@TGaHC~?q&nY&+;Jagj+)!=ufKj9dX8YZ1sK4=3Bk! zr{e^t;>?73w$H0P{@%IM=ck{P$6s`keBI%GFv$mV49yjy@%ITm)9+e+WcnO3If5?a zjBhtWT-I!N0Gn(L`mt4TavRXe_)U@@_qa5F!rSD`W9@zO<@ka!{;ZL-;<&^4ax?Z# z^c)Fp*Z15lf{4+cnf$;0TX;5!evGglK^y2VD`~@;Bz;4Va}QE~318M(UdK1T)%%`^ z*=*MP(6DR z{(AbWzcZe9$ZcZuQKRS50x_*&Uklf>KQ`t6A%0hVh&l61(hb1({VQBIVqL76eOIP0 z)Hd}co-sebw~e2nV{Nh9>ylJE?a}$m-T471Xd49~Qe{T9*~=_%p6%k@q?b#6CnBA;xPU!X!SXntC@ zljwib^+pf0Uz*>^7$!ZD*83?vf!yeQv%Tl858FTU!kdSRC)V3}*4j5*?5*$7b7W#^ zaczCC&Q;dFnrJVL+LFGF{J>J11xxxikgvo|?j7If*Cl=3`?8UYD8HT+u6c3LB?hxv zF99V5Taj*;&nXkHgA(RcVq zccD)9YVmwc;puOq_ciG*T{0uS?&ntaI_Bc=M{`Ae zg3F9Az50$F=4p2`cqE3fnQOv&Qn2y|;NuttInN^4QI3Di+FV2NGLI0)^Ze8qDdE2M zd8(@xYx0-N zL4ZEw`Gey{H^})QPpFMmvXo(uD`U3RotDpWEUDkx>#Te_4I%kSlbu_{y9m8~YCN zCdiE1!kR<9+EZDd@s_&OE)`*3-K?}R3#~=(U5B5y=P*d0#nC=^a1p&iJgx)}Z189u zHqsgFDIt&)qeDfd?h_D=54jY9&Ac|-o>2lpX{4!Oxc=KA8QF-w`Po{=Z)WKajw6Q zpKlBH&CMM*UHN!u_wQsZm7jM5W32X{DSoAwxj^^$e$EYA#2qR+f8##(aek38c*JeB z*k5dyHCIed5*N3%;~qD}TGSe1QZ6u|?%WlRX-)8K>d9?yqWPFXeQ5 zGzE>#ZpZer7H4y|n-5YGxbUQBdvW4^OPkiax6ayb!@ENat# z3ii!{ji1}>@#dlb60E#n(XKPhZn?zwx&LIl{vvEwGc6}qgIzV@2veU0)> z_I}6VBj%erdcLXt67^TsygAqKJnUcYiD?;eFxBad@T9@e+ADoB?5|pTrN92^*08@m z!T90(Cwb_jUG!0%jho^wr+W3{&SxCwVP)ExL(O*+_!Q2cd>eDA*~yf9hw7=GOZlPaU+o?5%Kg;$x8#UiDeAkQ+NI|z!(7L7Nr4m|SgZhhwpt4Z;Qa}{+;MZ*KX@nl z(7Cg;uT$k+IOa_&Kg;0Xi9X{je0^^@*R2i9u8GRRU&-f8^{)=|u2f#?JHg82m?zI} z&AQFrz7kw?-$JE^Be0SaQ*$ZeGoj1>e#B@pK}=`d>=kZO*EuKnfifBB7uqZzEwvR) za)FuR-ZJo%{HcBDmbvE-@4!yHIFKilfw{bE9GDH!!lUpMG?_eX7C*(<^56%682O+U8~ zGjA}FwHkGH+52l=>{ffD__>zUlrE@I?)6p=aXwz(4x}41uUN+RG#9Qzr*1~4hI72e zA*Xrg(nj>pvD#`hA>XuEQ2PBxEdG_)z}?uD^4ZAe(v3Z-_|G&p$u`**{_HLGJ+-(s zN!A6I%?GVXKiS65upO{^m(3prme`%3N8l69Ycg?bBm z-!vq@U9bGH>gP?OmHzVcnKxyy$4A|K(WkkhU;A;v_iN~WF)`Q|ix#p!u{~dO&!YeE zH%UKA?yPTxd6XCZ#%vCrOq6}R#;cYGI5Uhg>gU?qA)TtSHva)W?YmTMrkv4gYD|pg zy!1D+Aj5AjOzTpW*zf=S^tN8MO1O^qqdJSj9f%pqc)+HK6ac zj7+W|#y(^9(&v~jq?s>t(l@)9FLX0sh~mXI`LX=+eWAX6YNT>#*bOKOL;JqX-{NaW2ax&T^LJ2=k42vM4RHW`o7_W;)TX2QZ@E= za_3Eb;p*)}f|+}Fz3I{1yKQ~)r+OCECs-6dRj?}RTOHPCHkJ7>&z~Gu9_)*jWXdfu znb94)WnZnoL!#2YP#cHq7=xGN7bl)ee87jERM`q%9@SRbvruiVEN^8;{Fz~)3>;O? z<7zk_(s%fzcx~fTXk%$T0bTpSWXP98@FiNG>w+(x@T6Y0S@KfWKeBc{a)bL)0)rs@<^;pFKf2V!$0+NTw-CGm5+OH zB75=781|yzphx~i?+Qo5K2^_&IkEAyIXsJ!*x_Dc4O)lUv!?gN-9&be|6L@00>7Nz zwG5Z*TUJruKk3~J^?|FMS!w5Jwv=SMu@?qhwALY9@K4DvuwUbV>?G`xR(wOr3Lb0S zGQx3IRHy1=-;vd;I^dVq8EqaO@=NQ>@aqH7`j1~z3g@x#Zt1wrK+znQJ2lb8I&WEb zIGatUwI=MDF7%Stmt0|-^I?g-WSuF2U1|Q<(I@C9tktM3qfc^H1>TL(hx}SGX_|7K z7R$pKpV*Skh5U;>?JHc+&e%UTmphQzhmDTdptvjIeR_2c*>PI4S%}WO7u(IbIb%!g zT$V0)4K$GhkkbHm^7rz|HDv9HJa8|MjVE!)12EkM_TCv=JC384(Xe`6@aCG``d z#a{eStZfq~?u;fQ!qMx^G^Z_y4pDq+`Zl*w{DDTj(4|-JG)Ecz7xWvnDO~kpreg{I zt0kO4(hu!!Wia4OmEzgVUxtvcbNRc>Wr($~^VqajR`mCZWO$$Cueo?Ru?It}eGIu2 ze`)?Y`Rn4Zo4+3Zdim?)Z$m3KZt;Wo#$)KgL}!+B&-xvE-UHTO(Kqq&)Z|O_iT~i- zFU9a`jj%VA5v_S4Bk$`A>G6co1G^cTq{q1vws4#4?O6NGUqchwNj)Z)CB|8Py9{aG z_unXX4jE5K9$53(0RLtckLP>gMW{dw*9-cOtUSvzjZfQO?1x@`)X~XU)y4SU)3Ns9 ziDKG0)uVnudo{O7h3yS(@lCmCYzXmNxXz25|jWVw`nKtDiMX)eRmk)((}C-*qjfD>AG61x`*g{BCm@ z$&#qe0Z;|{~|v|uiScicGj=qBu7HOmtv;JJ&l7${a!Ma z&kg#!n8%?$=P>jO?sz+S`~CA#d}Fz@{qxZ@<7C#uz}H}TM>kN{NcimBu*`elLv{O_ zBRMho5Us;~AH@-5yF?vV`T2G4`R?W33*5R@_}f=~51%`GcNRI~u^F$)W4gOSuWcAh zQFa49zX4*2v!NXey+IA1-Z#3-G!#EFu5Jvu0#Ad}(K$I;FF{GX*C?MzMCD8#u9 zZx#fzNf=tt70g?eQpW3;!Q^?*nFMRo(mVb7lfbW)e<@Ntj@?C*(|Kl1yN*sm|C~M+`DR zfDxmH3U+|l#u9bzHMe)XH@)`+0!BD9CsnLTf3yx5B;rX1>z{_-L)#INMnvGY)*E`M zj+$1gREQU9Yy)#Y-?jJqp7;EjnSkEk^ZcHk=Sj|)_uYH#wbx$%_S$Rj9r4Y0bsPL` zyhR(O2k8rEE2~cXrL@60msYQCO!B>Z!Wh{8A^5My#)5MmXrs@;>m9w{P|lF#Rr@N} zNw4etD$$TLB|VSYea7|a%eX8_$jAm{q#qgSf$!HNL-6$1;W9guzd}wZvo7#Ge$^v| ziZR1nMYKSM`hnF0jRU-gC+UZcvB^AVJ5|Y%>E#&S0slTBN2bq2KQBjHqVw+rSM%~L zab}A-L8~}!J5n28R{ZH)Mowq8Wi`(qIp)_51REKXK4{~7m&}>yRXsyDz=@PsPQ?M$ zxn)f8R(v;GZ%`T40q$b^{aHH~OlNcI%S5m zK9kX$Gn`XR{!iMa4F~#GJ2$>Qvj2yTPsA7dSy#b^!7l@?6WE7)+$Pp`e*l~mV>3YC zHx-GuXnm~bI``(D54)Gn>vgHF3s?X?XS4kN)S^M|Yd?cl`$Piz*i1ZV^hev+Lz36I z!6V;iESN*PH-~fX)9>!1jYov%oNHYRZ4B`D!-luogw}!~SR=d2v?Km!I@m4vP~RME zOQ?6)>H!0HzkTF~lAS)y32`47r=PplcKK5Gqu6iKU>XZ6oFz-e7xSvja8Mz+)#NUdM37*cZ6fC!weCQFzih7I2+(L3t zE}^f`-qR@1#>?RtZ9re64e~bf1N3^|K)dR+DrP#!{O`k4Z#$23VaY#voBC}rQ{|HP zl7G_cCiJXfJ?ArKy^Z63=Bc&Ux{E1)q25_}@-6)R%x+T8D(+`yEEdnhuYtyKruSugl(H2<2n6!&kyjh z`HVN~;?y00A3e=AhT=u(H+~~q^Nb&B<1>*i_!q&UZ@Rl7P2XNC8sZCYLg#H-Jm#8H zW8D@LF>7@JV(J9PxEg4nJ>!kAg46yd*t_<{0IC8zy}@v&2Jfv%YDx% zZ?qn4!4*twO@@Ddo^Y49XV6FUTiesiH~y5_bZid1B3%9azvZ-MGr9qx>eY^U+s_~ z;2QDeI?12z6ui_iJCDbxt2!EMa*h8*Jf!k^rgDC~ui78Rdy;WBzt#3WHgeu1aTa*% z^~7uDsV($cN!9~Z8mNCGr2Zfyzwipc+>G7&ASU9 zMrmwDAN1f?I=8&EmA>Ej;K}&?@ACd)=Cv1Z*88Q}H&apn{k-4E`_ho!FCv~}u!R@# z8T)XLkM!95lK7Q&?H%pv^ZHJE*I?~N@80L%Ey{8iw`hT0)sv3iCkGQc36I3!ZPYho zZlBgcFMq^b@Vi}FahcLvD7W+YM%rGlzYFw9AI|?uS%2z|=esQaOTG2b{Aej_F#H@8 zTM)$qGI{qadZ!pY=M2ur5Gg-3H;RVSr{x^<&E<^GSL|*MP!gPEOgufHXGwjc{wn@W zek20M36Q0wUm)X(;YkPyaMn>hT9iUhWj_`!^=r`fIr+Pf7rLF_S7!((mu7T z`I!2}9J;~!rC}C5YWg!o`{5in#hi{FX@`bQUYFJFPdtYfJS*pUzOQo3HZ7~xG2{D* z%Z|ZkiY>sG_|3!)pBf^DHP>(_FTim3Xa2v+XI97cLxCNo1b6VChMC?fSrLgJI31uFSsu>T3Mi=h7qIvilDDJdDCy z0)L~c^g(|tR0IlOEHvhGm>d=lu8(=ZnS- zeq=0e3gf1`xcF$lxqW}g$9U+Qe34G^3w1dk@u?xvLS>*uXP|-n!Za$SRsU38@6l`D zvT`$@qeLwKZ9`$KkK*^Wu_m=qIvF@lYjWtE+&Fp~8ldAObL{<}<9XI{QN2GO>6PmB zrssu&)vKdl6^n6s{0Cy1DkVE=@sqx(7xlNv)S&Hk0?&aX0ndqee@(RCCfWn3{gAd^ zWqSdYud$B4wCT(TH)dxFY46)Y{MXOpzkV72HATPt{`A`W&DWLQ$+;h!Tr+3)X}_~S zGj$|;)`AC-pR?@SN^fJmhdqNfMtytR8S5v62mHQ14ZZL=v)Hooo=WJ0|5@)G!9MRdUJ=DV zCv=u9x~h+H*LvRu#fPDzoek`H&*qA4<9FfD5`$CRH^Gy378A7DY<(i{BKeLw>*cGd zU(7Ezu%~7{vfmuhwse)P33ki3ReWB#Me^I1X8qh%a=<*4c=F^Ef(tyaGl`4BL#u@g z>wG@Xwb`XO%P(_?bwt(;GabF(8=(9;t4Dcg-*!mn8}2&sK=Eeq05oBq@sk+e4+PiZgEdW{zbBn;AgOy`?22hz2W3LL~4=IfVDsTySnu$V|tB! z#C6|?ah6|e`Sg+zbX*w6%Od~(sEwb-jWs#^jV|uP?pZv+yvgD_A3J~znalY4Ii~vN zSYx}aQ}U@?oTP8<`|o)MTgTYc+#P9a zp`K^%$yD%DWjk5?2JiD;?$6w$Kd%x!3Rf^^V(*TAFFqk#&$GKCd*GjQ9={yE#?n6g zngc3W|M$U*`F&eht9~!<3jTMg#9Hdj758GGk2dyH+em1gEj&mwWB!hJ z<~`ag=W#ydy48w&KJa)weqT4XS^JX?7t`JjFrQK^t)F=GI+f*4-Bjsm+xxZ#zft$V z^;3pBW)vg&cw6Bi#_*nCA3uY9i%<2j3v;Wxds}t

    mS4N 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 literal 0 HcmV?d00001 diff --git a/tools/patch_libmalloc.py b/tools/patch_libmalloc.py old mode 100644 new mode 100755 diff --git a/tools/revert_patch.sh b/tools/revert_patch.sh old mode 100644 new mode 100755 diff --git a/undefined_syms.txt b/undefined_syms.txt index 3ecb5d4..b3937a0 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -28,3 +28,7 @@ D_B0000014 = 0xB0000014; D_C0000000 = 0xC0000000; D_C0000008 = 0xC0000008; D_C000000C = 0xC000000C; + +/* Shindou symbols */ +func_sh_802F69CC = 0x802F69CC; +func_sh_8024CC7C = 0x8024CC7C; \ No newline at end of file

    Ru)@GEk{e)Nx(MjrC}9CEwh9p$G=@8}MD^oGigpNEgbIO-FvnTPf} z#h-fab=)Ppqwx|CTKoH%e~6EzkI{4ZGn)mo=L0USHOQ_Hf)8cFT4ba7Dm#zceKDn8 z_-D6li`lRFY7<(U-_yRDHMvVFe3G9FkAPRU60eJ&i|ArF(LQ``d{NN86nw75UvVFb z$DB1!;mf%D@#dSczQOEC@%YvBp>^b0wT7?t1KSI?MZbwZZ?^9?{f}*Ju(e>$Bj8ndF6^9}{u+PDil0zU9m7M{{s0N(dNR~A?c>*)RAVWZuot(TLJ=Pr>?TzJy&K|E`@ zd#m>urY-*)R{o#3g9bm4*ln+C*qjHSW2x&mFE5NB*SCUTa$lw5{|h;zfpcI}#fdl% z?N`ZZT%6T8nApFlKViKt?vMIW)gK$v>HD+9@O#AfhZwWPvB<|TKW=f8_tRK&GFe-^ zKyfMgNYnOLYj4TeM-`7=bWFTJjzqI`sB$DCo{(-qPCC(ft#NEok0W4(CN$Jxw z($A&uOExX`&AmiF>=E4DKO&dV*4nHq{})B_uRJinrpo#=wkfCn$Tp2D9~!u{w?1my z;PJO$t6i@bKAr`?ob-kDN$**^~}YP(3+iy;X*O=&s1zXm79)=fpNb`+NJPLzxrgjQ0MHu`K_s_IF< z$9T$j0?)kqV7ZoRpLxb~^>}x>?_)*ZW0<}kO zQ-p`lzxZFz2@l0Yux;x{dw2)FsS~EZqq)^P4`l=HS<#Ivo}xNB|De;?Y3Qt|bFu1- zoJ zZqH2k+?m4Tp>DAKHr7`6$429b&s3Lr)AOopW1g5VN&d?|^#zgqSNhc4!zN$4z&bZF zHHWx;v-B*s+WT1_wC8IVeJ`ffXlcxk-}tAcTaRu+pL_p1=vH)87F(;lHu-PSnB+?n z_yk9pi}5+r)Cl_Fe)hdKx`tw>r=y#DY2TczA1{?J?z?Ml;U74293EM>>*g2WC)wu@ z(AQ;AoRYlb*RwXim~XAoH|H*4Pt%)iZ_+!}mc>`Kk9alljMeF<^elBXXTJ4$9-`l` z$G>gi`(nOr>}aFE@L|(4b9vUpyLo(TKZMqXUn>}td6UZUeX(%m`y!7s=fWRToa5*n zqLFYHjf8tdn*?3nV0CUgp0T^-h^Mc|-(ECW_EE4A*r%U(Jvia#AhfmCXh7zP#ZE_t z8dG1f{gbh8Gfh3^z%QfzGPO(WO1iYMoWsGnb4GWYqt{MLMDO+s#;;_# z3r2hnzc7~OM;L66?{cfBSjU8q55eCXHBS{R#%LqDBf~wRi#by36#@>dlR* zYX@_Sf-kOoHo-mrkn6*5@Nv>Be7^dtC*4~D4v$9dXdKmsZ~tQx4tgc{Mt<|v;4I!> zV$VJATY1*P=UH4)W3un~CXL0o<&OEWNtU;9+xLmFjsupDl#%a3uIOf!;m(as)=!It z{ZX5IsU!~2((t4dg}3KW!Uf9n9kgFC6CGUF4In zH;A#`j4W)##x@py+jWgJS=_601TS9qqKtGvpE3AxJXNK4fa&XL{)K#+V*=Tg;)8c$LlvZp215@I40~UA}0S<>Krs98TsqLfg*J=PqP( zv-}nP?R9MLSdh_jpEB3jdCYwDXeqgYI-|qbr(Ll6g z4XBPkFTKfg24k2ew*oLe0I zE*@Pb?=C0D_k{8ILVQ^7Bmcn13z#QIzEB$3kuBL0@72DleBRQczEJP`UMDgh<$8A+ zZx1d`rIwJ_x`lt@^^GIfnIEn=?3u`w@)R#ZS8eCF{Lu}3E05(r=$Z5lygUpYcA#^@ zeLw$J;X9Bcs+fu7a!_%^q+EvFDx^+og8EAwyfcUI7ljXE<10 zo13>9j_Qx_*WF6=YXmNd`*qm2Ii8k$fxGUJ*LY}L7@v;b>M?Pjp9S|fdfa0=K;y)E z26%{m(l3$U6zLb~73mk+9JB$GlG9?}3>2?cT0`bK{f|T=bOu6YW*oX#AzW zCHMC@_@aillsnaBI)yTe2JMU#lR4^}o`~wC25k?wx6RTIDvuu*^JaBw6`(q?cw=D zL7$IdUna)EgE?eQ{=qo7jl<{AYpc->y&mJc@0R^)JZdX`eiQ!N&f}Ixrgc(uyXisZ znOS6g5Fgh33u2%azh=FzQE<@v>?v{0d~d|wE|cBIUv6A{4nCI7X1v#J<$dG$y^IFvHx-qxd9%1Tqgf9@YDcnSDE7JS|6xu*7|DT4sCzM`VF04LEF`IeOYZ=yZ1A$8fScJ z`PS%r`RFw?H$Du0HNMm`c%e-19CxGs&h+$#M=Ztxy;!HHn3Hq{Kim6}Hz)i^XrnPn zj8z#%nA=6R0$v%2eNlX=8ri^>306n1+gAJTvk&QA{9HOmJX-c&2fe(moe1(eiLCk@ z-$Q;)ml%%S$!`9@e#ID1j2XSa1zlynA#dt&4>2^`Ta@Qsgah4pQ4u(Mg>J62Bkdd1T!>#47T zkIu_BRLozxCPV)w$TiX&M)!qrCm(n8Ximk-$(ur`_NmmKCh9ux~)&03C?PNw3jn0SFr}Pv~LaPC$34&w|>t}_YrrZ&x#dy z^fu$4>5_jz$1is`iIJQQ^P0=*x-%蟍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